From 3aa55dd3f62cee2c1c4c0aa74e1570acf83f8927 Mon Sep 17 00:00:00 2001
From: duhuizhe <271000472@qq.com>
Date: 星期一, 16 十月 2023 17:47:22 +0800
Subject: [PATCH] 初始化提交

---
 project-web/public/static/emoji/212.png                                               |    0 
 project-web/src/assets/images/examine-icon.png                                        |    0 
 project-web/src/assets/images/map/icon-sjzx.png                                       |    0 
 project-web/src/assets/dataV/ST.png                                                   |    0 
 project-web/src/views/projectManage/information/index.vue                             |  383 
 project-web/src/assets/logo/logo.png                                                  |    0 
 project-web/src/libs/index.js                                                         |   44 
 project-web/plop-templates/store/prompt.js                                            |   62 
 project-web/src/assets/imgs/logo.png                                                  |    0 
 consum-base/src/main/java/com/consum/base/Constants.java                              |   45 
 project-web/src/libs/wechat.js                                                        |  183 
 project-web/public/static/tinymce4.7.5/plugins/visualblocks/css/visualblocks.css      |  154 
 project-web/src/assets/images/project/pic-add.png                                     |    0 
 project-web/src/assets/images/40b2.jpeg                                               |    0 
 project-web/public/static/emoji/157.gif                                               |    0 
 project-web/src/assets/images/map/icon-zhywl.png                                      |    0 
 project-web/src/icons/svg/eye-open.svg                                                |    1 
 project-web/src/api/projectManage/audit.js                                            |   10 
 project-web/src/store/index.js                                                        |   24 
 project-web/public/static/emoji/173.gif                                               |    0 
 project-web/public/static/emoji/111.gif                                               |    0 
 project-web/public/static/emoji/190.gif                                               |    0 
 project-web/src/vendor/Blob.js                                                        |  182 
 project-web/src/assets/theme/theme5.png                                               |    0 
 project-web/public/static/emoji/103.gif                                               |    0 
 project-web/src/utils/eventBus.js                                                     |    2 
 project-web/src/main.js                                                               |  176 
 project-web/src/assets/images/png.png                                                 |    0 
 project-web/public/static/emoji/182.gif                                               |    0 
 project-web/src/directive/permission/hasPermi.js                                      |   32 
 project-web/src/assets/images/visualization/v-top-bg.png                              |    0 
 project-web/src/assets/images/head-two.png                                            |    0 
 project-web/public/static/emoji/165.gif                                               |    0 
 project-web/src/layout/components/Settings/index.vue                                  |  284 
 project-web/src/assets/images/map/icon-sn.png                                         |    0 
 project-web/src/components/mySearchCopy/SearchItem.vue                                |  282 
 project-web/src/assets/images/zip.png                                                 |    0 
 project-web/src/assets/imgs/shengxian.png                                             |    0 
 project-web/src/utils/errorCode.js                                                    |    6 
 project-web/src/vendor/Export1Excel.js                                                |  143 
 consum-base/src/main/java/com/consum/base/TokenCacheProvider.java                     |   25 
 project-web/public/static/emoji/204.png                                               |    0 
 project-web/src/assets/images/icon-line-up.png                                        |    0 
 project-web/src/assets/images/project/icon-xxh-lv.png                                 |    0 
 project-web/public/static/tinymce4.7.5/skins/lightgray/skin.min.css.map               |    1 
 project-web/src/assets/images/project/icon-sclzx-lv.png                               |    0 
 project-web/src/components/mySwitch/mySwitch.vue                                      |   55 
 project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-mobile.woff      |    0 
 consum-base/doc/source_project_manage.pdm                                             | 11643 ++++++
 project-web/public/static/emoji/203.png                                               |    0 
 consum-base/src/main/java/com/consum/base/pojo/UpdatePwdParam.java                    |   26 
 project-web/src/components/base/index.js                                              |   16 
 project-web/src/utils/request.js                                                      |  169 
 project-web/src/icons/svg/theme.svg                                                   |    1 
 project-web/src/assets/dataV/comprehensive-ico1.png                                   |    0 
 project-web/src/api/baseSetting/finsystenant.js                                       |   60 
 consum-model-pojo/src/main/java/com/consum/model/po/WhGoods.java                      |  480 
 project-web/src/icons/svg/component.svg                                               |    1 
 project-web/public/static/emoji/102.gif                                               |    0 
 project-web/src/assets/images/jpg.png                                                 |    0 
 project-web/README.md                                                                 |  235 
 project-web/src/views/projectConfig/warningConfig/chooseUser.vue                      |  206 
 project-web/src/assets/dataV/YX.png                                                   |    0 
 project-web/src/views/projectManage/information/components/moneySetting.vue           |   96 
 project-web/public/static/emoji/213.png                                               |    0 
 deploy-jar-single/src/main/java/com/consum/generator/GenerateController.java          |   28 
 project-web/src/views/projectConfig/warningConfig/index.vue                           |  209 
 project-web/public/static/emoji/172.gif                                               |    0 
 project-web/src/icons/svg/star.svg                                                    |    1 
 project-web/public/static/emoji/112.gif                                               |    0 
 project-web/src/layout/imgs/bggl.png                                                  |    0 
 project-web/src/assets/imgs/tabBar/user.png                                           |    0 
 project-web/src/assets/imgs/live-logo.gif                                             |    0 
 project-web/plopfile.js                                                               |    9 
 project-web/src/views/error-log/index.vue                                             |   47 
 project-web/src/views/systemSetting/user/profile/index.vue                            |   42 
 project-web/src/views/projectManage/audit/chooseUser.vue                              |  157 
 project-web/public/static/emoji/166.gif                                               |    0 
 project-web/src/icons/svg/documentation.svg                                           |    1 
 project-web/public/static/emoji/149.gif                                               |    0 
 consum-base/src/main/java/com/consum/base/pojo/TokenVo.java                           |   93 
 project-web/src/assets/imgs/default_avatar.png                                        |    0 
 project-web/src/assets/images/index/down.png                                          |    0 
 project-web/src/assets/images/project/icon-gz-lv.png                                  |    0 
 project-web/src/assets/images/project/icon-gj-lv.png                                  |    0 
 project-web/public/static/emoji/183.gif                                               |    0 
 project-web/src/components/mySearchCopy/index.js                                      |   65 
 project-web/src/layout/components/TagsView/index.vue                                  |  332 
 project-web/plop-templates/view/index.hbs                                             |   26 
 project-web/src/icons/svg/user.svg                                                    |    1 
 project-web/src/filters/order.js                                                      |   80 
 consum-base/src/main/java/com/consum/base/core/CodeTemplateService.java               |   20 
 project-web/src/assets/imgs/writeOffBg.jpg                                            |    0 
 project-web/src/directive/index.js                                                    |   24 
 project-web/public/static/emoji/167.gif                                               |    0 
 project-web/public/static/tinymce4.7.5/skins/lightgray/img/object.gif                 |    0 
 project-web/src/assets/images/index/dxy.png                                           |    0 
 project-web/public/static/emoji/202.png                                               |    0 
 project-web/src/assets/images/cloud-bg.png                                            |    0 
 project-web/src/icons/svg/money.svg                                                   |    1 
 project-web/src/views/projectConfig/buildPlan/items.js                                |   48 
 project-web/src/assets/images/map/icon-gygz.png                                       |    0 
 project-web/src/assets/images/line-nopass.png                                         |    0 
 project-web/tests/unit/components/Hamburger.spec.js                                   |   18 
 project-web/src/views/dashboard/components/XYZC.vue                                   |  243 
 project-web/public/static/emoji/214.png                                               |    0 
 project-web/src/assets/images/map/icon-gj.png                                         |    0 
 project-web/src/icons/svg/qq.svg                                                      |    1 
 project-web/src/views/projectConfig/stageConfig/items.js                              |   26 
 project-web/public/static/emoji/175.gif                                               |    0 
 project-web/src/assets/images/text.png                                                |    0 
 project-web/src/views/systemManger/server/user/index.vue                              |  303 
 project-web/src/assets/dataV/ywtdry.png                                               |    0 
 project-web/src/mock/projectConfig/stageNode.js                                       |   71 
 project-web/src/layout/imgs/xtgl.png                                                  |    0 
 project-web/src/assets/imgs/tabBar/cated.png                                          |    0 
 project-web/public/static/emoji/139.gif                                               |    0 
 project-web/public/static/emoji/180.gif                                               |    0 
 project-web/src/assets/dataV/1.png                                                    |    0 
 project-web/src/views/projectManage/classify/items.js                                 |   26 
 project-web/src/store/modules/errorLog.js                                             |   38 
 project-web/src/utils/settingIplatform.js                                             |   21 
 consum-base/src/main/java/com/consum/base/core/UnifyBusinessService.java              |   41 
 project-web/src/utils/get-page-title.js                                               |   20 
 project-web/src/layout/imgs/Group 42731搜索9579.png                                     |    0 
 project-web/src/views/projectConfig/kanbanConfig/edit.vue                             |  115 
 project-web/src/assets/iconfont/can.woff                                              |    0 
 project-web/src/views/dataV/static.vue                                                |  722 
 project-web/src/layout/imgs/jxglA.png                                                 |    0 
 project-web/plop-templates/component/index.hbs                                        |   26 
 project-web/src/assets/images/talk/head-kf.png                                        |    0 
 project-web/src/assets/dataV/Ellipse 1954.png                                         |    0 
 project-web/src/utils/scroll-to.js                                                    |   75 
 project-web/src/icons/index.js                                                        |    9 
 project-web/src/utils/newToExcel.js                                                   |   30 
 project-web/src/filters/product.js                                                    |   77 
 project-web/public/static/emoji/105.gif                                               |    0 
 project-web/src/assets/images/talk/icon-unknown.png                                   |    0 
 project-web/src/assets/imgs/tuikuan.png                                               |    0 
 project-web/src/styles/variables.scss                                                 |   57 
 project-web/public/static/emoji/148.gif                                               |    0 
 project-web/src/icons/svg/guide.svg                                                   |    1 
 project-web/src/assets/dataV/header.png                                               |    0 
 project-web/src/assets/imgs/no.png                                                    |    0 
 project-web/src/plugins/download.js                                                   |   82 
 project-web/src/assets/images/talk/dataV-1.png                                        |    0 
 project-web/src/api/projectConfig/buildPlanNode.js                                    |   36 
 project-web/src/assets/custom-theme/index.css                                         | 23148 ++++++++++++
 consum-base/src/main/java/com/consum/base/util/RangeMergeUtil.java                    |  200 
 project-web/public/static/emoji/168.gif                                               |    0 
 project-web/public/static/js/niuniucapture.js                                         |  643 
 project-web/src/components/js/element-icons.js                                        |  294 
 project-web/src/views/projectManage/cancel/index.vue                                  |  164 
 project-web/src/layout/components/Sidebar/index.vue                                   |  265 
 project-web/src/api/projectConfig/warningConfig.js                                    |   55 
 project-web/src/assets/images/index-icon.png                                          |    0 
 project-web/src/assets/dataV/little-box.png                                           |    0 
 project-web/public/static/emoji/201.png                                               |    0 
 project-web/src/layout/components/AppMain.vue                                         |   50 
 project-web/src/assets/iconfont/can.woff2                                             |    0 
 project-web/public/static/emoji/174.gif                                               |    0 
 project-web/src/mock/projectConfig/warningConfig.js                                   |  128 
 project-web/public/static/emoji/147.gif                                               |    0 
 project-web/public/static/emoji/104.gif                                               |    0 
 project-web/src/assets/dataV/2.png                                                    |    0 
 project-web/src/assets/images/project/icon-zhywl-lv.png                               |    0 
 project-web/src/views/systemSetting/dict/items.js                                     |   26 
 project-web/src/icons/svg/search.svg                                                  |    1 
 project-web/src/assets/js/emo.js                                                      |  488 
 project-web/src/utils/constants.js                                                    |  144 
 project-web/src/views/home/projectList.vue                                            |  172 
 project-web/public/preview.html                                                       |   38 
 project-web/src/assets/images/map/wait.png                                            |    0 
 project-web/public/static/js/reconnecting-websocket.js                                |  365 
 project-web/src/icons/svg/language.svg                                                |    1 
 project-web/src/views/projectManage/information/nodeSubmit.vue                        |  140 
 project-web/src/assets/dataV/SLABG.png                                                |    0 
 project-web/public/static/emoji/181.gif                                               |    0 
 project-web/src/assets/imgs/kefuImg.jpg                                               |    0 
 project-web/src/components/win/win-md.vue                                             |   95 
 project-web/src/views/redirect/index.vue                                              |   13 
 project-web/src/icons/svg/form.svg                                                    |    1 
 project-web/src/assets/imgs/haowu.png                                                 |    0 
 project-web/src/layout/imgs/mydgl.png                                                 |    0 
 project-web/public/static/emoji/110.gif                                               |    0 
 project-web/src/layout/imgs/wtglA.png                                                 |    0 
 project-web/jsconfig.json                                                             |    9 
 project-web/src/components/SvgIcon/index.vue                                          |   71 
 project-web/src/filters/commFilter.js                                                 |  269 
 project-web/src/assets/imgs/pingjia.png                                               |    0 
 project-web/src/views/projectManage/audit/index.vue                                   |  229 
 project-web/src/assets/images/app.png                                                 |    0 
 project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.svg        |   63 
 consum-base/src/main/java/com/consum/base/core/CodeGeneratorService.java              |   86 
 project-web/src/views/projectManage/audit/edit.vue                                    |  393 
 project-web/public/static/emoji/177.gif                                               |    0 
 project-web/public/static/emoji/193.gif                                               |    0 
 project-web/src/api/dashboard/dash.js                                                 |   59 
 project-web/src/views/dataV/components/projectType.vue                                |   86 
 project-web/package.json                                                              |  114 
 project-web/src/views/error-page/401.vue                                              |  102 
 project-web/src/api/projectManage/cancel.js                                           |   10 
 project-web/src/layout/components/Sidebar/Logo.vue                                    |  103 
 project-web/src/assets/images/icon-connect.png                                        |    0 
 project-web/src/assets/images/login-name.png                                          |    0 
 project-web/src/mock/projectConfig/kanbanNode.js                                      |   48 
 project-web/src/assets/imgs/shouhuo.png                                               |    0 
 project-web/src/utils/ZBKJIutil.js                                                    |  125 
 project-web/public/static/emoji/162.gif                                               |    0 
 project-web/src/assets/401_images/401.gif                                             |    0 
 project-web/src/assets/dataV/SX.png                                                   |    0 
 project-web/src/mock/projectManagement/information.js                                 |   68 
 project-web/src/icons/svg/international.svg                                           |    1 
 project-web/public/static/emoji/200.png                                               |    0 
 project-web/src/directive/float.js                                                    |   40 
 project-web/src/components/uploadFrom/index.js                                        |   25 
 consum-base/src/main/java/com/consum/base/core/AgencyEntity.java                      |   80 
 project-web/src/directive/num.js                                                      |   27 
 deploy-jar-single/src/main/java/com/consum/ConsumApplication.java                     |   23 
 project-web/plop-templates/store/index.hbs                                            |   16 
 project-web/public/static/emoji/137.gif                                               |    0 
 project-web/src/styles/index.scss                                                     |  330 
 project-web/public/static/emoji/215.png                                               |    0 
 project-web/src/assets/images/visualization/v-top-title.png                           |    0 
 consum-base/pom.xml                                                                   |   66 
 project-web/src/assets/images/project/icon-other-lv.png                               |    0 
 project-web/src/icons/svg/eye.svg                                                     |    1 
 project-web/src/utils/DateFormatter.js                                                |  180 
 project-web/src/assets/dataV/fwt.png                                                  |    0 
 project-web/src/icons/svg/edit.svg                                                    |    1 
 project-web/src/icons/svg/wechat.svg                                                  |    1 
 project-web/src/assets/images/talk/icon-pdf.png                                       |    0 
 project-web/public/static/emoji/122.gif                                               |    0 
 project-web/src/assets/dataV/3.png                                                    |    0 
 project-web/src/assets/images/index/gdc.png                                           |    0 
 project-web/src/api/projectConfig/kanbanNode.js                                       |   28 
 deploy-jar-single/src/main/resources/application-dev.yml                              |  250 
 project-web/src/assets/images/login_img.png                                           |    0 
 project-web/src/icons/svg/pdf.svg                                                     |    1 
 project-web/plop-templates/utils.js                                                   |    9 
 project-web/src/assets/images/map/icon-xcpzx.png                                      |    0 
 project-web/src/assets/images/visualization/col.png                                   |    0 
 project-web/src/views/systemSetting/dict/data.vue                                     |  427 
 project-web/src/utils/base.js                                                         |   91 
 project-web/src/assets/images/line-current.png                                        |    0 
 project-web/src/filters/user.js                                                       |   49 
 project-web/src/assets/images/talk/icon-xls.png                                       |    0 
 project-web/src/libs/timeOptions.js                                                   |   65 
 project-web/src/mock/projectManagement/record.js                                      |   42 
 project-web/README.ZBKJ.md                                                            |   55 
 project-web/src/assets/imgs/phoneBox.png                                              |    0 
 project-web/public/static/emoji/194.gif                                               |    0 
 project-web/public/static/emoji/176.gif                                               |    0 
 project-web/src/assets/images/index/top.png                                           |    0 
 project-web/tests/unit/.eslintrc.js                                                   |    5 
 project-web/public/static/emoji/107.gif                                               |    0 
 project-web/public/static/emoji/161.gif                                               |    0 
 project-web/src/api/system/menu.js                                                    |   60 
 project-web/src/assets/images/icon-notice.png                                         |    0 
 project-web/src/assets/imgs/line.jpg                                                  |    0 
 project-web/src/layout/components/Sidebar/Link.vue                                    |   35 
 project-web/src/views/projectManage/classify/index.vue                                |  224 
 project-web/src/assets/dataV/cityBox.png                                              |    0 
 project-web/src/views/projectConfig/buildPlan/detail.vue                              |  142 
 project-web/public/static/tinymce4.7.5/skins/lightgray/img/loader.gif                 |    0 
 consum-base/src/main/java/com/consum/base/BaseController.java                         |   11 
 project-web/src/layout/imgs/zskgl.png                                                 |    0 
 project-web/src/utils/permission.js                                                   |   61 
 .gitignore                                                                            |   39 
 project-web/src/icons/svg/list.svg                                                    |    1 
 project-web/src/assets/images/index/wtc.png                                           |    0 
 project-web/public/static/emoji/138.gif                                               |    0 
 project-web/src/views/projectManage/information/components/warningSetting.vue         |   80 
 project-web/src/layout/components/Sidebar/Item.vue                                    |   32 
 project-web/src/layout/imgs/jcxx.png                                                  |    0 
 project-web/src/icons/svg/nested.svg                                                  |    1 
 project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.svg              |  131 
 project-web/src/assets/imgs/mobilefoot.png                                            |    0 
 project-web/src/layout/components/Navbar.vue                                          |  340 
 project-web/src/components/echartsNew/index.vue                                       |   78 
 project-web/public/static/emoji/123.gif                                               |    0 
 project-web/src/assets/dataV/g1.png                                                   |    0 
 project-web/src/icons/svg/size.svg                                                    |    1 
 project-web/src/utils/error-log.js                                                    |   44 
 project-web/public/static/emoji/106.gif                                               |    0 
 project-web/src/components/Tinymce/dynamicLoadScript.js                               |   59 
 project-web/src/layout/components/Sidebar/SidebarItem.vue                             |  171 
 project-web/src/libs/dialog.js                                                        |   67 
 project-web/src/mock/projectManagement/classify.js                                    |   82 
 project-web/src/views/projectManage/information/nodeProgress.vue                      |  223 
 project-web/src/directive/permission/hasRole.js                                       |   24 
 project-web/.gitignore                                                                |   23 
 project-web/public/static/tinymce4.7.5/langs/zh_CN.js                                 |  234 
 project-web/src/styles/reset.css                                                      |  284 
 project-web/tests/unit/utils/validate.spec.js                                         |   28 
 project-web/src/layout/components/TagsView/ScrollPane.vue                             |   94 
 project-web/src/assets/iconfont/iconfont.css                                          |  430 
 project-web/public/static/tinymce4.7.5/tinymce.min.js                                 |    2 
 project-web/src/views/projectManage/audit/audit.vue                                   |   80 
 project-web/public/static/emoji/108.gif                                               |    0 
 project-web/src/views/projectManage/record/index.vue                                  |  183 
 project-web/src/plugins/cache.js                                                      |  118 
 project-web/src/icons/svg/example.svg                                                 |    1 
 project-web/src/components/myTree/satisficingIndex.vue                                |  137 
 project-web/src/assets/dataV/gdzs.png                                                 |    0 
 project-web/src/assets/dataV/kfpjl.png                                                |    0 
 project-web/src/assets/images/acttch-icon.png                                         |    0 
 project-web/src/vendor/Export2Excel.js                                                |  236 
 project-web/src/assets/images/line-pass-icon.png                                      |    0 
 project-web/public/static/emoji/191.gif                                               |    0 
 project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-frown.gif         |    0 
 project-web/src/assets/imgs/youxuan.png                                               |    0 
 project-web/src/assets/dataV/sla.png                                                  |    0 
 project-web/src/assets/custom-theme/fonts/element-icons.woff                          |    0 
 project-web/src/assets/images/head-one.png                                            |    0 
 project-web/src/views/dataV/components/projectList.vue                                |  115 
 project-web/src/assets/imgs/pc.png                                                    |    0 
 project-web/src/libs/debounce.js                                                      |   19 
 project-web/src/mock/projectManagement.js                                             |  255 
 project-web/src/api/system/dict/data.js                                               |   56 
 project-web/src/views/projectConfig/buildPlan/nodeChoose/stageNode.vue                |   85 
 project-web/src/views/projectConfig/buildPlan/nodeChoose/index.vue                    |  106 
 project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-cool.gif          |    0 
 project-web/src/directive/dialog/drag.js                                              |   68 
 project-web/src/mock/projectConfig/stageConfig.js                                     |   72 
 deploy-jar-single/src/main/resources/application-prod.yml                             |  381 
 project-web/src/assets/images/project/icon-xcpzx-lv.png                               |    0 
 project-web/src/mock/projectConfig/buildPlan.js                                       |   68 
 project-web/src/layout/imgs/xmgl.png                                                  |    0 
 project-web/src/assets/imgs/new_header1.png                                           |    0 
 project-web/src/views/systemManger/server/user/editRole.vue                           |  160 
 project-web/public/static/emoji/120.gif                                               |    0 
 project-web/public/static/emoji/163.gif                                               |    0 
 project-web/src/libs/modal-parserFrom.js                                              |   49 
 project-web/src/assets/imgs/login-name.png                                            |    0 
 project-web/src/assets/images/project/xls.png                                         |    0 
 project-web/src/components/myButton/myButton.vue                                      |  381 
 consum-base/src/main/java/com/consum/base/core/CheckWarehouseParam.java               |   41 
 project-web/src/utils/utils.js                                                        |   58 
 project-web/public/static/emoji/210.png                                               |    0 
 consum-base/src/main/java/com/consum/base/core/CodeGeneratorEnum.java                 |   55 
 project-web/src/layout/imgs/sjgl.png                                                  |    0 
 project-web/public/static/emoji/135.gif                                               |    0 
 project-web/public/static/emoji/178.gif                                               |    0 
 consum-model-pojo/src/main/java/com/consum/model/po/WhGoods_mapper.java               |  473 
 project-web/src/assets/imgs/mobilehead.png                                            |    0 
 project-web/src/utils/StringUtils.js                                                  |   14 
 project-web/src/icons/svg/lock.svg                                                    |    1 
 project-web/src/vendor/Export2Zip.js                                                  |   39 
 project-web/src/views/projectConfig/buildPlan/nodeChoose/nodeCycle.vue                |  215 
 project-web/src/utils/jsencrypt.js                                                    |   33 
 project-web/src/icons/svg/education.svg                                               |    1 
 project-web/src/utils/clipboard.js                                                    |   42 
 project-web/src/components/UploadExcel/index.vue                                      |  148 
 project-web/src/assets/images/img.png                                                 |    0 
 project-web/public/static/emoji/211.png                                               |    0 
 project-web/public/favicon.ico                                                        |    0 
 project-web/src/mock/projectManagement/audit.js                                       |   36 
 project-web/public/static/tinymce4.7.5/plugins/codesample/css/prism.css               |  138 
 project-web/src/assets/imgs/tabBar/index.png                                          |    0 
 project-web/src/views/projectConfig/buildPlan/nodeChoose/edit.vue                     |  117 
 project-web/src/assets/custom-theme/fonts/element-icons.ttf                           |    0 
 project-web/src/views/systemManger/server/user/items.js                               |   33 
 project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-innocent.gif      |    0 
 project-web/src/assets/images/map/icon-sclzx.png                                      |    0 
 project-web/src/assets/imgs/app.png                                                   |    0 
 project-web/public/static/emoji/192.gif                                               |    0 
 project-web/src/icons/svg/email.svg                                                   |    1 
 project-web/src/utils/parsing.js                                                      |  280 
 project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-sealed.gif        |    0 
 project-web/src/assets/imgs/fahuo.png                                                 |    0 
 project-web/public/static/emoji/109.gif                                               |    0 
 project-web/src/assets/dataV/wjdcl.png                                                |    0 
 project-web/src/api/projectManage/information.js                                      |   58 
 project-web/src/assets/images/project/del.png                                         |    0 
 project-web/public/static/emoji/164.gif                                               |    0 
 consum-base/src/main/java/com/consum/base/core/util/RandomUtil.java                   |   61 
 project-web/src/assets/images/map/close-total.png                                     |    0 
 project-web/public/static/emoji/121.gif                                               |    0 
 project-web/src/icons/svg/drag.svg                                                    |    1 
 deploy-jar-single/src/main/resources/wk_sn_lic.bin                                    |    1 
 project-web/src/assets/imgs/routine.png                                               |    0 
 project-web/src/views/error-page/404.vue                                              |  240 
 project-web/src/filters/wx.js                                                         |   39 
 project-web/src/layout/imgs/jxgl.png                                                  |    0 
 project-web/src/components/base/iconFrom.vue                                          |  112 
 project-web/src/views/projectConfig/warningConfig/items.js                            |   45 
 project-web/src/api/system/wxApi.js                                                   |  386 
 project-web/src/assets/404_images/404_cloud.png                                       |    0 
 project-web/src/assets/imgs/tabBar/cart.png                                           |    0 
 project-web/src/components/win/win-sm.vue                                             |   75 
 project-web/src/assets/imgs/moren.jpg                                                 |    0 
 project-web/.env.staging                                                              |    6 
 project-web/src/assets/images/index/qbgd.png                                          |    0 
 project-web/public/static/emoji/136.gif                                               |    0 
 project-web/public/static/emoji/179.gif                                               |    0 
 project-web/src/assets/images/project/ppt.png                                         |    0 
 deploy-jar-single/src/main/java/com/consum/generator/TestJdbcGenerator.java           |   24 
 project-web/src/layout/imgs/syA.png                                                   |    0 
 project-web/src/filters/finance.js                                                    |   33 
 project-web/src/components/win/index.vue                                              |   72 
 project-web/src/libs/modal-coupon.js                                                  |   57 
 project-web/src/views/systemSetting/user/profile/resetPwd.vue                         |   92 
 project-web/public/static/emoji/142.gif                                               |    0 
 project-web/public/static/emoji/150.gif                                               |    0 
 project-web/public/static/emoji/126.gif                                               |    0 
 project-web/src/assets/images/logo.png                                                |    0 
 project-web/src/views/systemManger/org/edit.vue                                       |  113 
 project-web/src/assets/js/canvas-nest.min.js                                          |  113 
 project-web/src/views/components/myImport.vue                                         |  161 
 project-web/public/static/emoji/134.gif                                               |    0 
 project-web/src/components/mySearch/index.js                                          |   64 
 project-web/public/static/config.js                                                   |   23 
 project-web/src/layout/mixin/ResizeHandler.js                                         |   55 
 consum-base/src/main/java/com/consum/base/core/po/WhFormTransfer.java                 |   16 
 project-web/src/assets/dataV/boxBG.png                                                |    0 
 project-web/src/styles/mixin.scss                                                     |   60 
 project-web/src/libs/modal-prompt.js                                                  |   56 
 project-web/src/assets/images/staff-female.jpg                                        |    0 
 project-web/src/layout/index.vue                                                      |  531 
 consum-base/src/main/java/com/consum/base/core/po/WhFormInventory.java                |   11 
 project-web/src/assets/images/project/icon-sn-lv.png                                  |    0 
 project-web/src/assets/images/map/cancel.png                                          |    0 
 project-web/src/assets/images/staff-male.jpg                                          |    0 
 project-web/src/assets/images/visualization/left.png                                  |    0 
 project-web/src/assets/iconfont/can.ttf                                               |    0 
 project-web/src/assets/images/dataV.png                                               |    0 
 project-web/src/views/login/resetPassword.vue                                         |  172 
 project-web/src/api/projectManage/classify.js                                         |   51 
 project-web/src/views/systemManger/org/items.js                                       |   33 
 pom.xml                                                                               |   50 
 project-web/src/assets/imgs/user_bg.png                                               |    0 
 project-web/src/assets/404_images/404.png                                             |    0 
 project-web/public/static/emoji/189.gif                                               |    0 
 project-web/tests/unit/components/SvgIcon.spec.js                                     |   22 
 project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.eot        |    0 
 project-web/src/assets/images/visualization/bg1.png                                   |    0 
 consum-base/doc/新建操作权限示例.txt                                                          |   13 
 project-web/public/static/emoji/219.png                                               |    0 
 project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-smile.gif         |    0 
 project-web/src/assets/images/talk/icon-doc.png                                       |    0 
 project-web/src/permission.js                                                         |   67 
 project-web/public/static/emoji/197.gif                                               |    0 
 project-web/public/index.html                                                         |   28 
 project-web/src/assets/images/line-current-icon.png                                   |    0 
 project-web/src/components/js/internal.js                                             |   73 
 project-web/public/static/emoji/118.gif                                               |    0 
 project-web/src/assets/images/project/no-file.png                                     |    0 
 project-web/src/assets/imgs/light.svg                                                 |   34 
 project-web/src/assets/imgs/wutu.png                                                  |    0 
 project-web/public/static/emoji/117.gif                                               |    0 
 project-web/src/assets/imgs/fukuan.png                                                |    0 
 project-web/public/static/emoji/151.gif                                               |    0 
 project-web/src/icons/svg/table.svg                                                   |    1 
 project-web/src/layout/imgs/bgglA.png                                                 |    0 
 project-web/src/libs/public.js                                                        |   24 
 consum-base/src/main/java/com/consum/base/core/WarehouseBusinessService.java          |   68 
 project-web/src/styles/element-variables.scss                                         |   31 
 project-web/public/static/emoji/141.gif                                               |    0 
 project-web/src/components/Screenfull/index.vue                                       |   69 
 project-web/src/assets/imgs/tabBar/userd.png                                          |    0 
 project-web/src/layout/components/index.js                                            |   14 
 project-web/public/static/emoji/133.gif                                               |    0 
 project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-kiss.gif          |    0 
 project-web/src/store/modules/user.js                                                 |  231 
 project-web/src/views/home/index.vue                                                  |  241 
 project-web/src/store/modules/tagsView.js                                             |  170 
 project-web/public/static/js/capturewrapper.js                                        |  226 
 project-web/src/assets/js/media_750.js                                                |   61 
 project-web/src/views/login/mixins.js                                                 |   19 
 project-web/src/layout/imgs/kfgztA.png                                                |    0 
 deploy-jar-single/pom.xml                                                             |  133 
 project-web/src/store/modules/permission.js                                           |  181 
 project-web/src/icons/svg/link.svg                                                    |    1 
 project-web/public/static/emoji/188.gif                                               |    0 
 project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-yell.gif          |    0 
 project-web/src/assets/images/pdf.png                                                 |    0 
 project-web/public/static/emoji/127.gif                                               |    0 
 project-web/src/assets/images/project/icon-qt-lv.png                                  |    0 
 project-web/src/icons/svg/message.svg                                                 |    1 
 project-web/src/icons/svg/skill.svg                                                   |    1 
 project-web/src/styles/transition.scss                                                |   48 
 project-web/.env.production                                                           |    7 
 project-web/src/components/uploadFrom/index.vue                                       |   46 
 project-web/build/index.js                                                            |   35 
 project-web/src/api/system/roleApi.js                                                 |   12 
 project-web/public/static/tinymce4.7.5/skins/lightgray/content.min.css                |    1 
 project-web/src/views/systemSetting/dept/index.vue                                    |  405 
 project-web/public/static/emoji/218.png                                               |    0 
 project-web/src/views/login/index.vue                                                 |  462 
 project-web/src/assets/dataV/comprehensive-ico6.png                                   |    0 
 project-web/src/libs/modal-icon.js                                                    |   47 
 project-web/public/static/emoji/198.gif                                               |    0 
 project-web/src/assets/images/top-bg.png                                              |    0 
 consum-base/src/main/java/com/consum/base/core/po/WhFormProcure.java                  |   19 
 project-web/.eslintrc.js                                                              |  396 
 project-web/public/static/js/jquery.min.js                                            |    2 
 project-web/src/views/projectConfig/buildPlan/index.vue                               |  210 
 project-web/src/views/systemSetting/user/authRole.vue                                 |  117 
 consum-model-pojo/src/main/java/com/consum/model/po/BaseCodeIndexing_mapper.java      |  285 
 consum-base/src/main/java/com/consum/base/core/CheckWarehouseResult.java              |   23 
 project-web/src/api/dataV.js                                                          |   54 
 project-web/src/assets/images/left-nav-bg.png                                         |    0 
 project-web/src/icons/svg/icon.svg                                                    |    1 
 project-web/src/views/systemSetting/user/profile/userInfo.vue                         |  165 
 project-web/src/layout/imgs/wtgl.png                                                  |    0 
 project-web/src/api/system/sms.js                                                     |  215 
 project-web/src/icons/svg/clipboard.svg                                               |    1 
 consum-base/src/main/java/com/consum/base/core/po/SYS_AGENCY.java                     |    4 
 project-web/src/views/systemManger/org/index.vue                                      |  287 
 project-web/src/assets/images/word.png                                                |    0 
 project-web/public/static/emoji/160.gif                                               |    0 
 project-web/jest.config.js                                                            |   24 
 project-web/public/static/emoji/124.gif                                               |    0 
 project-web/src/views/systemSetting/role/items.js                                     |   26 
 project-web/src/assets/imgs/moren.png                                                 |    0 
 project-web/src/utils/exportExcel.js                                                  |   19 
 project-web/vue.config.js                                                             |  130 
 project-web/src/assets/images/obg-icon.png                                            |    0 
 project-web/src/assets/dataV/g2.png                                                   |    0 
 project-web/src/icons/svg/zip.svg                                                     |    1 
 project-web/src/components/Tinymce/toolbar.js                                         |    9 
 project-web/src/api/system/user.js                                                    |  136 
 project-web/public/static/emoji/132.gif                                               |    0 
 project-web/src/views/dashboard/components/SJDJ.vue                                   |  136 
 project-web/src/views/dashboard/components/SJGDZB.vue                                 |  139 
 project-web/src/views/projectConfig/warningConfig/chooseItems.js                      |   16 
 project-web/src/icons/svg/tree.svg                                                    |    1 
 project-web/src/views/projectConfig/stageConfig/node/items.js                         |   26 
 project-web/src/assets/dataV/EX.png                                                   |    0 
 project-web/.travis.yml                                                               |    5 
 project-web/src/layout/imgs/kfgzt.png                                                 |    0 
 project-web/src/api/user.js                                                           |  160 
 project-web/src/assets/images/visualization/bg3.png                                   |    0 
 project-web/public/static/emoji/209.png                                               |    0 
 project-web/src/assets/images/map/end.png                                             |    0 
 project-web/src/api/system/dept.js                                                    |   83 
 project-web/src/layout/imgs/mydglA.png                                                |    0 
 project-web/src/assets/images/project/word.png                                        |    0 
 project-web/src/plugins/index.js                                                      |   17 
 project-web/src/styles/sidebar.scss                                                   |  210 
 project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-laughing.gif      |    0 
 project-web/src/views/projectManage/audit/detail.vue                                  |  362 
 project-web/src/mock/projectConfig/kanbanConfig.js                                    |   52 
 project-web/src/views/projectConfig/warningConfig/edit.vue                            |  330 
 project-web/src/views/systemManger/server/user/edit.vue                               |  285 
 project-web/public/static/emoji/195.gif                                               |    0 
 project-web/src/layout/imgs/fbgl.png                                                  |    0 
 project-web/public/static/emoji/152.gif                                               |    0 
 project-web/src/views/dashboard/components/XMGZD.vue                                  |  261 
 project-web/src/assets/images/project/icon-return.png                                 |    0 
 project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.woff             |    0 
 project-web/src/views/projectConfig/buildPlan/nodeChoose/items.js                     |   26 
 project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.ttf        |    0 
 project-web/src/components/myTable/myTable.vue                                        |  752 
 project-web/public/static/emoji/217.png                                               |    0 
 project-web/.eslintignore                                                             |    7 
 project-web/src/assets/images/icon-datav.png                                          |    0 
 project-web/public/static/emoji/125.gif                                               |    0 
 project-web/src/assets/images/talk/head-my.png                                        |    0 
 project-web/src/assets/dataV/g3.png                                                   |    0 
 project-web/src/utils/open-window.js                                                  |   53 
 project-web/src/icons/svg/bug.svg                                                     |    1 
 project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-surprised.gif     |    0 
 project-web/src/layout/imgs/zskglA.png                                                |    0 
 project-web/src/icons/svg/peoples.svg                                                 |    1 
 project-web/tests/unit/utils/parseTime.spec.js                                        |   32 
 project-web/.prettierrc.js                                                            |   35 
 project-web/public/static/emoji/131.gif                                               |    0 
 project-web/LICENSE                                                                   |   21 
 project-web/src/assets/images/talk/icon-ppt.png                                       |    0 
 project-web/src/api/projectConfig/stageConfig.js                                      |   55 
 project-web/src/utils/validate.js                                                     |  181 
 project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-cry.gif           |    0 
 project-web/src/views/projectConfig/kanbanConfig/index.vue                            |  166 
 project-web/src/assets/images/doc.png                                                 |    0 
 consum-base/src/main/java/com/consum/base/util/IdUtil.java                            |   78 
 deploy-jar-single/src/main/resources/application.yml                                  |    4 
 project-web/public/static/emoji/216.png                                               |    0 
 project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.woff       |    0 
 project-web/.prettierignore                                                           |   22 
 project-web/src/plugins/modal.js                                                      |   85 
 project-web/src/icons/svg/people.svg                                                  |    1 
 project-web/src/assets/images/visualization/bg2.png                                   |    0 
 project-web/src/assets/images/line-pass.png                                           |    0 
 project-web/src/store/modules/settings.js                                             |   50 
 project-web/public/static/tinymce4.7.5/skins/lightgray/img/anchor.gif                 |    0 
 project-web/src/api/projectConfig/buildPlan.js                                        |   64 
 project-web/public/static/emoji/196.gif                                               |    0 
 project-web/src/assets/images/talk/dataV-2.png                                        |    0 
 project-web/src/assets/images/visualization/line.png                                  |    0 
 project-web/public/static/emoji/153.gif                                               |    0 
 project-web/public/static/emoji/119.gif                                               |    0 
 consum-base/src/main/java/com/consum/base/core/GoodsService.java                      |   10 
 consum-model-pojo/src/main/java/com/consum/model/po/BaseCodeIndexing.java             |  194 
 project-web/src/components/HeaderSearch/index.vue                                     |  187 
 project-web/src/components/Tinymce/components/EditorImage.vue                         |   58 
 project-web/src/views/login/bak-index.vue                                             |  594 
 project-web/src/views/systemSetting/menu/index.vue                                    |  481 
 project-web/src/assets/images/map/icon-xxh.png                                        |    0 
 project-web/src/assets/imgs/wechat_h5.png                                             |    0 
 project-web/src/components/myTable/myTableV2.vue                                      |  644 
 project-web/src/layout/imgs/sy.png                                                    |    0 
 project-web/src/views/login/auth-redirect.vue                                         |   16 
 project-web/public/static/emoji/169.gif                                               |    0 
 project-web/src/layout/imgs/sjglA.png                                                 |    0 
 project-web/src/settings.js                                                           |   64 
 project-web/src/assets/dataV/MYD.png                                                  |    0 
 project-web/src/assets/images/exel.png                                                |    0 
 project-web/src/assets/imgs/tabBar/cate.png                                           |    0 
 project-web/src/icons/svg/password.svg                                                |    1 
 project-web/src/components/mySearch/SearchItem.vue                                    |  319 
 project-web/src/assets/theme/goodsList1.png                                           |    0 
 project-web/src/assets/theme/theme1.png                                               |    0 
 project-web/README-注意事项.md                                                            |   81 
 project-web/src/api/system/dict/type.js                                               |   60 
 project-web/src/assets/images/map/icon-other.png                                      |    0 
 project-web/src/directive/copy/copy.js                                                |   75 
 project-web/src/icons/svg/shopping.svg                                                |    1 
 project-web/public/static/emoji/185.gif                                               |    0 
 project-web/src/utils/changeColor.js                                                  |    8 
 project-web/src/assets/images/project/txt.png                                         |    0 
 project-web/src/views/dashboard/index.vue                                             |  302 
 project-web/src/assets/images/visualization/bg5.png                                   |    0 
 project-web/src/assets/images/phone.png                                               |    0 
 project-web/src/assets/images/project/pdf.png                                         |    0 
 project-web/src/assets/imgs/tabBar/cartd.png                                          |    0 
 consum-model-pojo/pom.xml                                                             |   46 
 project-web/src/views/projectManage/information/detail.vue                            |  465 
 project-web/src/filters/index.js                                                      |   75 
 project-web/public/static/emoji/130.gif                                               |    0 
 project-web/src/views/dataV/components/cityScore.vue                                  |  214 
 project-web/src/components/win/win-lg.vue                                             |   91 
 project-web/public/static/emoji/114.gif                                               |    0 
 project-web/src/assets/images/map/icon-gz.png                                         |    0 
 project-web/public/static/emoji/208.png                                               |    0 
 project-web/src/plugins/auth.js                                                       |   45 
 project-web/src/assets/imgs/pricetitle.jpg                                            |    0 
 project-web/src/assets/images/avatar-kefu.png                                         |    0 
 project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-foot-in-mouth.gif |    0 
 project-web/src/icons/svg/fullscreen.svg                                              |    1 
 project-web/src/assets/dataV/Group 88.png                                             |    0 
 project-web/src/views/projectManage/audit/items.js                                    |   90 
 project-web/src/mock/projectConfig/buildPlanNode.js                                   |   89 
 project-web/src/views/error-log/components/ErrorTestA.vue                             |   22 
 project-web/src/views/routerView/index.vue                                            |    3 
 project-web/src/views/projectConfig/stageConfig/node/node.vue                         |  192 
 project-web/src/assets/images/index/fbgd.png                                          |    0 
 project-web/public/static/tinymce4.7.5/skins/lightgray/skin.min.css                   |    1 
 project-web/src/router/index.js                                                       |  132 
 project-web/public/static/emoji/129.gif                                               |    0 
 project-web/public/static/emoji/154.gif                                               |    0 
 project-web/src/components/ThemePicker/index.vue                                      |  183 
 deploy-jar-single/src/main/resources/import/机构导入模板.xls                                |    0 
 project-web/src/assets/images/index/jxzgd.png                                         |    0 
 project-web/tests/unit/utils/formatTime.spec.js                                       |   29 
 project-web/public/static/emoji/146.gif                                               |    0 
 project-web/src/views/systemSetting/role/authUser.vue                                 |  209 
 project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-wink.gif          |    0 
 project-web/public/static/js/reconnecting-websocket.min.js                            |    1 
 project-web/src/mock/projectManagement/cancel.js                                      |   36 
 project-web/src/assets/imgs/tabBar/indexd.png                                         |    0 
 project-web/src/views/dataV/components/dataProgress.vue                               |   59 
 project-web/src/icons/svg/dashboard.svg                                               |    1 
 project-web/src/assets/dataV/jxzdgd.png                                               |    0 
 project-web/src/assets/imgs/dark.svg                                                  |   39 
 project-web/src/layout/imgs/fbglA.png                                                 |    0 
 project-web/src/assets/theme/theme2.png                                               |    0 
 project-web/src/assets/imgs/expressi.jpg                                              |    0 
 consum-base/src/main/java/com/consum/base/util/FinSysTenantUtils.java                 |   26 
 project-web/src/api/projectManage/info.js                                             |   20 
 project-web/public/static/emoji/184.gif                                               |    0 
 project-web/src/assets/images/top-title.png                                           |    0 
 project-web/src/layout/imgs/jcxxA.png                                                 |    0 
 project-web/src/assets/images/form-lf.png                                             |    0 
 project-web/src/views/home/searchForm.vue                                             |  222 
 consum-base/src/main/java/com/consum/base/util/FinSysOrgUtils.java                    |   23 
 project-web/src/styles/btn.scss                                                       |   99 
 project-web/public/static/emoji/207.png                                               |    0 
 project-web/public/static/tinymce4.7.5/skins/lightgray/content.inline.min.css         |    1 
 project-web/public/static/emoji/145.gif                                               |    0 
 project-web/src/views/systemSetting/dict/index.vue                                    |  381 
 project-web/src/assets/imgs/login-bg.png                                              |    0 
 project-web/src/layout/imgs/xtglA.png                                                 |    0 
 project-web/src/assets/images/visualization/bg4.png                                   |    0 
 project-web/src/assets/imgs/orderIndex.png                                            |    0 
 project-web/src/views/projectManage/information/items.js                              |   62 
 project-web/public/static/emoji/113.gif                                               |    0 
 project-web/public/static/emoji/155.gif                                               |    0 
 project-web/src/assets/imgs/index_logo.png                                            |    0 
 project-web/src/views/projectManage/record/items.js                                   |   77 
 project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-undecided.gif     |    0 
 project-web/.env.development                                                          |   16 
 project-web/src/assets/dataV/zsk.png                                                  |    0 
 project-web/src/assets/images/project/icon-sjzx-lv.png                                |    0 
 project-web/src/libs/yearOptions.js                                                   |   37 
 project-web/.editorconfig                                                             |   14 
 project-web/src/assets/images/xls.png                                                 |    0 
 project-web/src/directive/dialog/dragWidth.js                                         |   39 
 project-web/src/mock/index.js                                                         |   37 
 project-web/public/static/emoji/140.gif                                               |    0 
 project-web/src/views/systemSetting/role/index.vue                                    |  710 
 project-web/src/assets/images/map/ing.png                                             |    0 
 project-web/src/store/modules/app.js                                                  |   72 
 project-web/src/utils/auth.js                                                         |   37 
 consum-base/doc/时间查询工具类                                                               |  654 
 project-web/src/views/projectManage/classify/edit.vue                                 |  138 
 project-web/public/static/emoji/159.gif                                               |    0 
 project-web/public/static/emoji/116.gif                                               |    0 
 project-web/src/views/dashboard/components/progressMY.vue                             |   80 
 project-web/src/components/myInputNumber/index.vue                                    |   94 
 project-web/src/views/dataV/components/projectYear.vue                                |  179 
 consum-base/src/main/java/com/consum/base/core/WarehouseCoreService.java              |   56 
 project-web/public/static/emoji/206.png                                               |    0 
 project-web/src/views/dataV/components/henan.json                                     | 26701 ++++++++++++++
 project-web/src/assets/dataV/comprehensive-ico2.png                                   |    0 
 project-web/src/components/Tinymce/index.vue                                          |  279 
 project-web/postcss.config.js                                                         |    5 
 project-web/src/views/projectConfig/stageConfig/index.vue                             |  191 
 project-web/plop-templates/view/prompt.js                                             |   55 
 project-web/src/icons/svgo.yml                                                        |   21 
 project-web/public/static/emoji/128.gif                                               |    0 
 project-web/src/api/projectConfig/kanbanConfig.js                                     |   55 
 project-web/src/assets/theme/goodsList3.png                                           |    0 
 project-web/src/views/projectConfig/kanbanConfig/nodeChoose.vue                       |  129 
 project-web/public/static/emoji/144.gif                                               |    0 
 project-web/public/static/emoji/187.gif                                               |    0 
 project-web/public/static/emoji/101.gif                                               |    0 
 project-web/src/components/Hamburger/index.vue                                        |   57 
 project-web/src/assets/images/icon-phone.png                                          |    0 
 project-web/src/assets/imgs/scan.gif                                                  |    0 
 project-web/public/static/emoji/199.gif                                               |    0 
 project-web/src/views/systemSetting/user/index.vue                                    |  715 
 project-web/public/static/emoji/156.gif                                               |    0 
 project-web/src/icons/svg/404.svg                                                     |    1 
 project-web/public/static/emoji/171.gif                                               |    0 
 project-web/src/icons/svg/chart.svg                                                   |    1 
 project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-embarassed.gif    |    0 
 project-web/src/components/Tinymce/plugins.js                                         |    9 
 project-web/src/assets/dataV/comprehensive-ico5.png                                   |    0 
 project-web/src/libs/modal-sure.js                                                    |   34 
 project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.ttf              |    0 
 project-web/src/assets/dataV/bg.png                                                   |    0 
 project-web/src/components/mySearchCopy/mySearch.vue                                  |  133 
 project-web/src/components/mySearch/mySearch.vue                                      |  107 
 project-web/src/icons/svg/excel.svg                                                   |    1 
 project-web/src/components/myTree/index.vue                                           |  177 
 project-web/src/icons/svg/tree-table.svg                                              |    1 
 project-web/src/views/projectManage/cancel/items.js                                   |   62 
 project-web/plop-templates/component/prompt.js                                        |   55 
 deploy-jar-single/src/main/resources/application-test.yml                             |  380 
 project-web/src/views/projectConfig/stageConfig/edit.vue                              |  116 
 project-web/src/assets/dataV/TSLX.png                                                 |    0 
 project-web/babel.config.js                                                           |   10 
 project-web/src/store/getters.js                                                      |   23 
 project-web/src/filters/merchant.js                                                   |   66 
 project-web/src/assets/theme/theme3.png                                               |    0 
 consum-base/doc/更新正式环境需要添加.sql                                                        |    0 
 project-web/public/static/tinymce4.7.5/skins/lightgray/img/trans.gif                  |    0 
 project-web/src/api/projectConfig/stageNode.js                                        |   68 
 project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.eot              |    0 
 project-web/src/assets/theme/goodsList2.png                                           |    0 
 consum-base/src/main/java/com/consum/base/cache/RedisTokenCache.java                  |   50 
 project-web/src/components/upload/index.vue                                           |  256 
 project-web/src/utils/web-connection.js                                               |  151 
 project-web/src/views/dashboard/components/GDLX.vue                                   |  124 
 project-web/public/static/emoji/143.gif                                               |    0 
 project-web/public/static/emoji/186.gif                                               |    0 
 project-web/src/components/win2/index.vue                                             |  151 
 consum-base/src/main/java/com/consum/base/core/AgencyService.java                     |   33 
 project-web/src/assets/images/map/icon-qt.png                                         |    0 
 project-web/src/assets/images/visualization/v-bg.png                                  |    0 
 project-web/src/assets/imgs/laber.png                                                 |    0 
 project-web/src/styles/element-ui.scss                                                |   99 
 project-web/src/layout/components/Sidebar/FixiOSBug.js                                |   36 
 project-web/src/assets/images/visualization/bg6.png                                   |    0 
 project-web/src/views/systemSetting/role/selectUser.vue                               |  147 
 project-web/src/api/system/role.js                                                    |  121 
 project-web/src/assets/images/project/icon-gygz-lv.png                                |    0 
 project-web/public/static/emoji/115.gif                                               |    0 
 project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-tongue-out.gif    |    0 
 project-web/src/views/dataV/components/batchPlan.vue                                  |  124 
 project-web/src/styles/styles.scss                                                    |  628 
 project-web/public/static/emoji/158.gif                                               |    0 
 project-web/src/views/projectConfig/kanbanConfig/items.js                             |   33 
 project-web/src/assets/dataV/Group 3649.png                                           |    0 
 project-web/src/assets/dataV/comprehensive-ico3.png                                   |    0 
 project-web/src/assets/imgs/weixin.png                                                |    0 
 project-web/src/views/projectConfig/buildPlan/nodeChoose/preview.vue                  |  205 
 project-web/public/static/emoji/100.gif                                               |    0 
 project-web/src/assets/imgs/head.gif                                                  |    0 
 project-web/src/icons/svg/tab.svg                                                     |    1 
 project-web/src/utils/index.js                                                        |  407 
 project-web/src/assets/images/map/open-total.png                                      |    0 
 project-web/src/components/Breadcrumb/index.vue                                       |   93 
 project-web/src/utils/print.js                                                        |  125 
 project-web/src/assets/dataV/comprehensive-ico4.png                                   |    0 
 project-web/src/directive/dialog/dragHeight.js                                        |   43 
 project-web/src/layout/imgs/xmglA.png                                                 |    0 
 project-web/src/App.vue                                                               |   11 
 project-web/src/views/error-log/components/ErrorTestB.vue                             |   20 
 project-web/src/views/projectConfig/stageConfig/node/edit.vue                         |  118 
 project-web/src/assets/images/visualization/right.png                                 |    0 
 project-web/src/assets/theme/theme4.png                                               |    0 
 project-web/src/views/dataV/components/map.vue                                        |  318 
 project-web/src/assets/imgs/default.jpg                                               |    0 
 project-web/public/static/emoji/205.png                                               |    0 
 project-web/src/icons/svg/exit-fullscreen.svg                                         |    1 
 project-web/src/api/projectManage/record.js                                           |   18 
 project-web/src/views/projectConfig/buildPlan/edit.vue                                |  143 
 project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-money-mouth.gif   |    0 
 project-web/public/static/emoji/170.gif                                               |    0 
 812 files changed, 108,148 insertions(+), 0 deletions(-)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a054658
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,39 @@
+# Compiled class file
+*.class
+
+# Log file
+*.log
+
+# BlueJ files
+#*.txt
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.jar
+*.war
+*.nar
+*.ear
+*.zip
+*.tar.gz
+*.rar
+
+*.lock
+target/
+package-lock.json
+
+# IDEA
+*.iml
+*.ipr
+*.iws
+.hbuilderx/
+.idea/
+.classpath
+.progect
+.settings/
+bin/
+tmp/
+psmWeb/
+unpackage/
+.vscode
diff --git a/consum-base/doc/source_project_manage.pdm b/consum-base/doc/source_project_manage.pdm
new file mode 100644
index 0000000..180cee6
--- /dev/null
+++ b/consum-base/doc/source_project_manage.pdm
@@ -0,0 +1,11643 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?PowerDesigner AppLocale="UTF16" ID="{662D642A-73E4-4CD8-9FD8-09DE1063C71D}" Label="" LastModificationDate="1695375513" Name="projec_progress_manage" Objects="492" Symbols="56" Target="MySQL 5.0" Type="{CDE44E21-9669-11D1-9914-006097355D9B}" signature="PDM_DATA_MODEL_XML" version="16.7.4.6866"?>
+<!-- do not edit this file -->
+
+<Model xmlns:a="attribute" xmlns:c="collection" xmlns:o="object">
+
+<o:RootObject Id="o1">
+<a:SessionID>00000000-0000-0000-0000-000000000000</a:SessionID>
+<c:Children>
+<o:Model Id="o2">
+<a:ObjectID>662D642A-73E4-4CD8-9FD8-09DE1063C71D</a:ObjectID>
+<a:Name>projec_progress_manage</a:Name>
+<a:Code>projec_progress_manage</a:Code>
+<a:CreationDate>1695026954</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695282814</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:PackageOptionsText>[FolderOptions]
+
+[FolderOptions\Physical Objects]
+GenerationCheckModel=Yes
+GenerationPath=
+GenerationOptions=
+GenerationTasks=
+GenerationTargets=
+GenerationSelections=
+RevPkey=Yes
+RevFkey=Yes
+RevAkey=Yes
+RevCheck=Yes
+RevIndx=Yes
+RevOpts=Yes
+RevViewAsTabl=No
+RevViewOpts=Yes
+RevSystAsTabl=Yes
+RevTablPerm=No
+RevViewPerm=No
+RevProcPerm=No
+RevDbpkPerm=No
+RevSqncPerm=No
+RevAdtPerm=No
+RevUserPriv=No
+RevUserOpts=No
+RevGrpePriv=No
+RevRolePriv=No
+RevDtbsOpts=Yes
+RevDtbsPerm=No
+RevViewIndx=Yes
+RevJidxOpts=Yes
+RevStats=No
+RevTspcPerm=No
+RevCaseSensitive=No
+GenTrgrStdMsg=Yes
+GenTrgrMsgTab=
+GenTrgrMsgNo=
+GenTrgrMsgTxt=
+TrgrPreserve=No
+TrgrIns=Yes
+TrgrUpd=Yes
+TrgrDel=Yes
+TrgrC2Ins=Yes
+TrgrC2Upd=Yes
+TrgrC3=Yes
+TrgrC4=Yes
+TrgrC5=Yes
+TrgrC6=Yes
+TrgrC7=Yes
+TrgrC8=Yes
+TrgrC9=Yes
+TrgrC10=Yes
+TrgrC11=Yes
+TrgrC1=Yes
+TrgrC12Ins=Yes
+TrgrC12Upd=Yes
+TrgrC13=Yes
+UpdateTableStatistics=Yes
+UpdateColumnStatistics=Yes
+DeploymentMode=REP
+
+[FolderOptions\Physical Objects\Database Generation]
+GenScriptName=progress.sql
+GenScriptName0=crebas
+GenScriptName1=
+GenScriptName2=
+GenScriptName3=
+GenScriptName4=
+GenScriptName5=
+GenScriptName6=
+GenScriptName7=
+GenScriptName8=
+GenScriptName9=
+GenPathName=D:\powerDesign\
+GenSingleFile=Yes
+GenODBC=No
+GenCheckModel=Yes
+GenScriptPrev=Yes
+GenArchiveModel=No
+GenUseSync=No
+GenSyncChoice=0
+GenSyncArch=
+GenSyncRmg=0
+
+[FolderOptions\Physical Objects\Database Generation\Format]
+GenScriptTitle=Yes
+GenScriptNamLabl=No
+GenScriptQDtbs=No
+GenScriptQOwnr=Yes
+GenScriptCase=0
+GenScriptEncoding=ANSI
+GenScriptNAcct=No
+IdentifierDelimiter=&quot;
+
+[FolderOptions\Physical Objects\Database Generation\Database]
+Create=Yes
+Open=Yes
+Close=Yes
+Drop=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Database\Create]
+Physical Options=Yes
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Tablespace]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Tablespace\Create]
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Storage]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\User]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Privilege=No
+
+[FolderOptions\Physical Objects\Database Generation\User\Create]
+Physical Options=No
+
+[FolderOptions\Physical Objects\Database Generation\Group]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Privilege=No
+
+[FolderOptions\Physical Objects\Database Generation\Role]
+Create=Yes
+Drop=Yes
+Privilege=No
+
+[FolderOptions\Physical Objects\Database Generation\UserDefinedDataType]
+Create=Yes
+Comment=Yes
+Drop=Yes
+
+[FolderOptions\Physical Objects\Database Generation\UserDefinedDataType\Create]
+Default value=Yes
+Check=Yes
+
+[FolderOptions\Physical Objects\Database Generation\AbstractDataType]
+Create=Yes
+Header=Yes
+Footer=Yes
+Drop=Yes
+Comment=Yes
+Install JAVA class=Yes
+Remove JAVA class=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Rule]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Default]
+Create=Yes
+Comment=Yes
+Drop=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Sequence]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column]
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Table]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Table\Create]
+Check=Yes
+Physical Options=Yes
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Table\Create\Check]
+Constraint declaration=No
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Column]
+User datatype=No
+Default value=Yes
+Check=Yes
+Physical Options=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Column\Check]
+Constraint declaration=No
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Key]
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Key\Primary key]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Key\Primary key\Create]
+Constraint declaration=No
+Physical Options=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Key\Alternate key]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Key\Alternate key\Create]
+Constraint declaration=No
+Physical Options=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Foreign key]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Foreign key\Create]
+Constraint declaration=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Index]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Index\Create]
+Constraint declaration=Yes
+Physical Options=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Index\Filter]
+Primary key=No
+Foreign key=No
+Alternate key=No
+Cluster=Yes
+Other=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Trigger]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Trigger\Filter]
+For insert=Yes
+For update=Yes
+For delete=Yes
+For other=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\View\Create]
+Force Column list=No
+Physical Options=Yes
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\ViewColumn]
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\ViewIndex]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\ViewIndex\Create]
+Physical Options=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\ViewIndex\Filter]
+Cluster=Yes
+Other=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\Trigger]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\Trigger\Filter]
+For insert=Yes
+For update=Yes
+For delete=Yes
+For other=Yes
+
+[FolderOptions\Physical Objects\Database Generation\DBMSTrigger]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Synonym]
+Create=Yes
+Drop=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Synonym\Filter]
+Table=Yes
+View=Yes
+Proc=Yes
+Synonym=Yes
+Database Package=Yes
+Sequence=Yes
+
+[FolderOptions\Physical Objects\Database Generation\JoinIndex]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\JoinIndex\Create]
+Physical Options=Yes
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Procedure]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Procedure\Create]
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\DatabasePackage]
+Create=Yes
+Drop=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\WebService]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Dimension]
+Create=Yes
+Drop=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Synchronization]
+GenBackupTabl=1
+GenKeepBackTabl=1
+GenTmpTablDrop=No
+GenKeepTablOpts=No
+
+[FolderOptions\Physical Objects\Test Data]
+GenDataPathName=
+GenDataSinglefile=Yes
+GenDataScriptName=testdata
+GenDataScriptName0=
+GenDataScriptName1=
+GenDataScriptName2=
+GenDataScriptName3=
+GenDataScriptName4=
+GenDataScriptName5=
+GenDataScriptName6=
+GenDataScriptName7=
+GenDataScriptName8=
+GenDataScriptName9=
+GenDataOdbc=0
+GenDataDelOld=No
+GenDataTitle=No
+GenDataDefNumRows=20
+GenDataCommit=0
+GenDataPacket=0
+GenDataOwner=No
+GenDataProfNumb=
+GenDataProfChar=
+GenDataProfDate=
+GenDataCSVSeparator=,
+GenDataFileFormat=CSV
+GenDataUseWizard=No
+
+[FolderOptions\Pdm]
+IndxIQName=%COLUMN%_%INDEXTYPE%
+IndxPK=Yes
+IndxFK=Yes
+IndxAK=Yes
+IndxPKName=%TABLE%_PK
+IndxFKName=%REFR%_FK
+IndxAKName=%AKEY%_AK
+IndxPreserve=No
+IndxThreshold=0
+IndxStats=No
+RefrPreserve=No
+JidxPreserve=No
+RbldMultiFact=Yes
+RbldMultiDim=Yes
+RbldMultiJidx=Yes
+CubePreserve=No
+TablStProcPreserve=No
+ProcDepPreserve=Yes
+TrgrDepPreserve=Yes
+CubeScriptPath=
+CubeScriptCase=0
+CubeScriptEncoding=ANSI
+CubeScriptNacct=No
+CubeScriptHeader=No
+CubeScriptExt=csv
+CubeScriptExt0=txt
+CubeScriptExt1=
+CubeScriptExt2=
+CubeScriptSep=,
+CubeScriptDeli=&quot;
+EstimationYears=0
+DfltDomnName=D_%.U:VALUE%
+DfltColnName=D_%.U:VALUE%
+DfltReuse=Yes
+DfltDrop=Yes
+
+[FolderOptions\CheckModel]
+
+[FolderOptions\CheckModel\Package]
+
+[FolderOptions\CheckModel\Package\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Package\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Package\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Package\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Package\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Package\CheckPackageMissTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Package\DefaultCheckPackageMissTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Package\CircularReference]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Package\ConstraintName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Package\CnstMaxLen]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Package\CircularDependency]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Package\ShortcutUniqCode]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=No
+
+[FolderOptions\CheckModel\Table]
+
+[FolderOptions\CheckModel\Table\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\UniqIndex]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\MaxLen - NAME]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\EmptyColl - COLNCOL]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\EmptyColl - INDXCOL]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\EmptyColl - KEYCOL]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\SerialColumnNumber]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\EmptyCollYesYes]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\TableIndexes]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\Mapping]
+CheckSeverity=No
+FixRequested=Yes
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\MappingSFMap]
+CheckSeverity=No
+FixRequested=Yes
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\EmptyColl - PERMCOL]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=No
+
+[FolderOptions\CheckModel\Table\CheckTablePartitionKey]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\CheckTableStartDate]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\CheckTableRefNoLifecycle]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\CheckTableSourceMapping]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\CheckTablePartialColumnMapping]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\CheckTableKeyColumnMapping]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\CheckTableNotOnLifecycleTablespace]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table\MYSQL50_Table_Table_storage_type]
+CheckSeverity=No
+FixRequested=Yes
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column]
+
+[FolderOptions\CheckModel\Table.Column\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\DomainDivergence]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\ColumnMandatory]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\CheckNumParam]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\CheckPrecSupLng]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\CheckUndefDttp]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\FkeyDttpDivergence]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\FkeyCheckDivergence]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\ColnSqncNoKey]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\ColnSqncDttp]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\SerialColumnFK]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\ColumnCompExpr]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\CheckColumnOneToOneMapping]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\CheckColumnDataTypeMapping]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\CheckColumnNoMapping]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\CheckDttpIncompatibleFormat]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\MYSQL50_Column_Auto_increment_key]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Column\MYSQL50_Column_Datatype_attributes]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Index]
+
+[FolderOptions\CheckModel\Table.Index\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Index\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Index\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Index\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Index\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Index\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Index\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Index\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Index\EmptyColl - CIDXCOL]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Index\UndefIndexType]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Index\IndexColumnCount]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Index\IQIndxHNGUniq]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Index\CheckIncludeColl - Tabl]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Index\MYSQL50_Index_Fulltext_indexes_validity]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Key]
+
+[FolderOptions\CheckModel\Table.Key\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Key\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Key\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Key\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Key\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Key\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Key\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Key\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Key\EmptyColl - COLNCOL]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Key\CheckIncludeColl - Tabl]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Key\MultiKeySqnc]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Trigger]
+
+[FolderOptions\CheckModel\Table.Trigger\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Trigger\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Trigger\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Trigger\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Trigger\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Trigger\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Trigger\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table.Trigger\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Join Index]
+
+[FolderOptions\CheckModel\Join Index\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Join Index\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Join Index\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Join Index\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Join Index\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Join Index\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Join Index\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View]
+
+[FolderOptions\CheckModel\View\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View\EmptyColl - PERMCOL]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=No
+
+[FolderOptions\CheckModel\View.View Index]
+
+[FolderOptions\CheckModel\View.View Index\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View.View Index\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View.View Index\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View.View Index\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View.View Index\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View.View Index\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View.View Index\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View.View Index\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View.View Index\EmptyColl - CIDXCOL]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View.View Index\IndexColumnCount]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View.View Index\CheckIncludeColl - Tabl]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Reference]
+
+[FolderOptions\CheckModel\Reference\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Reference\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Reference\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Reference\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Reference\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Reference\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Reference\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Reference\Reflexive]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Reference\EmptyColl - RFJNCOL]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Reference\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Reference\IncompleteJoin]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Reference\JoinOrder]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View Reference]
+
+[FolderOptions\CheckModel\View Reference\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View Reference\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View Reference\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View Reference\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View Reference\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View Reference\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View Reference\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\View Reference\EmptyColl - VRFJNCOL]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Domain]
+
+[FolderOptions\CheckModel\Domain\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Domain\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Domain\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Domain\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Domain\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Domain\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Domain\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Domain\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Domain\CheckNumParam]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Domain\CheckPrecSupLng]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Domain\CheckUndefDttp]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Domain\CheckDttpIncompatibleFormat]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Default]
+
+[FolderOptions\CheckModel\Default\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Default\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Default\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Default\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Default\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Default\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Default\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Default\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Default\DfltValeEmpty]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Default\DfltSameVale]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\User]
+
+[FolderOptions\CheckModel\User\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\User\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\User\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\User\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\User\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\User\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\User\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\User\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\User\UniquePassword]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=No
+
+[FolderOptions\CheckModel\Group]
+
+[FolderOptions\CheckModel\Group\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Group\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Group\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Group\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Group\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Group\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Group\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Group\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Group\EmptyColl - USERCOL]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Group\UniquePassword]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=No
+
+[FolderOptions\CheckModel\Role]
+
+[FolderOptions\CheckModel\Role\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Role\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Role\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Role\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Role\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Role\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Role\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Role\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Role\EmptyColl - USERCOL]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Procedure]
+
+[FolderOptions\CheckModel\Procedure\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Procedure\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Procedure\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Procedure\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Procedure\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Procedure\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Procedure\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Procedure\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Procedure\ProcBodyEmpty]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Procedure\EmptyColl - PERMCOL]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=No
+
+[FolderOptions\CheckModel\DBMS Trigger]
+
+[FolderOptions\CheckModel\DBMS Trigger\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\DBMS Trigger\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\DBMS Trigger\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\DBMS Trigger\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\DBMS Trigger\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\DBMS Trigger\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\DBMS Trigger\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\DBMS Trigger\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\DBMS Trigger\DbmsTriggerEvent]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Data Source]
+
+[FolderOptions\CheckModel\Data Source\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Data Source\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Data Source\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Data Source\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Data Source\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Data Source\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Data Source\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Data Source\EmptyColl - MODLSRC]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Data Source\DtscTargets]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Data Source\CheckDataSourceModels]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Horizontal Partitioning]
+
+[FolderOptions\CheckModel\Horizontal Partitioning\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Horizontal Partitioning\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Horizontal Partitioning\EmptyColl - PARTCOL]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Horizontal Partitioning\TargetTables]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Vertical Partitioning]
+
+[FolderOptions\CheckModel\Vertical Partitioning\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Vertical Partitioning\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Vertical Partitioning\EmptyColl - PARTCOL]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Vertical Partitioning\TargetTables]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table Collapsing]
+
+[FolderOptions\CheckModel\Table Collapsing\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table Collapsing\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table Collapsing\EmptyColl - TargetTable]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Table Collapsing\TargetTables]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact]
+
+[FolderOptions\CheckModel\Fact\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact\EmptyColl - MEASCOL]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact\Mapping]
+CheckSeverity=No
+FixRequested=Yes
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact\MappingSFMap]
+CheckSeverity=No
+FixRequested=Yes
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact\EmptyColl - ALLOLINKCOL]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact\CubeDupAssociation]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension]
+
+[FolderOptions\CheckModel\Dimension\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension\EmptyColl - DATTRCOL]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension\EmptyColl - HIERCOL]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension\DimnDupHierarchy]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension\DimnDefHierarchy]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension\Mapping]
+CheckSeverity=No
+FixRequested=Yes
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension\MappingSFMap]
+CheckSeverity=No
+FixRequested=Yes
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension\SerialColumnNumber]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Association]
+
+[FolderOptions\CheckModel\Association\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Association\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Association\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Association\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Association\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Association\EmptyColl - Hierarchy]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension.Attribute]
+
+[FolderOptions\CheckModel\Dimension.Attribute\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension.Attribute\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension.Attribute\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension.Attribute\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension.Attribute\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension.Attribute\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension.Attribute\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact.Measure]
+
+[FolderOptions\CheckModel\Fact.Measure\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact.Measure\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact.Measure\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact.Measure\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact.Measure\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact.Measure\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact.Measure\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact.Fact Attribute]
+
+[FolderOptions\CheckModel\Fact.Fact Attribute\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact.Fact Attribute\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact.Fact Attribute\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact.Fact Attribute\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact.Fact Attribute\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact.Fact Attribute\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Fact.Fact Attribute\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension.Hierarchy]
+
+[FolderOptions\CheckModel\Dimension.Hierarchy\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension.Hierarchy\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension.Hierarchy\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension.Hierarchy\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension.Hierarchy\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension.Hierarchy\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension.Hierarchy\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Dimension.Hierarchy\EmptyColl - DATTRCOL]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Synonym]
+
+[FolderOptions\CheckModel\Synonym\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Synonym\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Synonym\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Synonym\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Synonym\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Synonym\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Synonym\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Synonym\MaxLen - NAME]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Synonym\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Synonym\EmptyColl - BASEOBJ]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Abstract Data Type]
+
+[FolderOptions\CheckModel\Abstract Data Type\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Abstract Data Type\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Abstract Data Type\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Abstract Data Type\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Abstract Data Type\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Abstract Data Type\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Abstract Data Type\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Abstract Data Type\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Abstract Data Type\AdtInstantiable]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Abstract Data Type\AdtAbstractUsed]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure]
+
+[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\AdtProcUniqName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\UniqueDefinition]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\ReturnDataType]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package]
+
+[FolderOptions\CheckModel\Database Package\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package\MaxLen - NAME]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package\EmptyColl - PROCOL]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package\EmptyColl - CURCOL]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=No
+
+[FolderOptions\CheckModel\Database Package\EmptyColl - VARCOL]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=No
+
+[FolderOptions\CheckModel\Database Package\EmptyColl - TYPCOL]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=No
+
+[FolderOptions\CheckModel\Database Package\EmptyColl - EXCCOL]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=No
+
+[FolderOptions\CheckModel\Database Package.Database Package Procedure]
+
+[FolderOptions\CheckModel\Database Package.Database Package Procedure\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Procedure\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Procedure\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Procedure\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Procedure\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Procedure\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Procedure\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Procedure\UniqueDefinition]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Procedure\EmptyColl - PARM]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=No
+
+[FolderOptions\CheckModel\Database Package.Database Package Procedure\ReturnDataType]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Sequence]
+
+[FolderOptions\CheckModel\Sequence\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Sequence\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Sequence\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Sequence\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Sequence\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Sequence\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Sequence\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Sequence\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Cursor]
+
+[FolderOptions\CheckModel\Database Package.Database Package Cursor\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Cursor\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Cursor\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Cursor\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Cursor\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Cursor\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Cursor\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Cursor\UniqueDefinition]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Cursor\ReturnDataType]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Cursor\EmptyColl - PARM]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=No
+
+[FolderOptions\CheckModel\Database Package.Database Package Variable]
+
+[FolderOptions\CheckModel\Database Package.Database Package Variable\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Variable\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Variable\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Variable\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Variable\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Variable\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Variable\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Variable\CheckUndefDttp]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Type]
+
+[FolderOptions\CheckModel\Database Package.Database Package Type\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Type\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Type\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Type\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Type\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Type\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Type\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Type\UniqueDefinition]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Exception]
+
+[FolderOptions\CheckModel\Database Package.Database Package Exception\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Exception\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Exception\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Exception\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Exception\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Exception\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database Package.Database Package Exception\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Tablespace]
+
+[FolderOptions\CheckModel\Tablespace\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Tablespace\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Tablespace\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Tablespace\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Tablespace\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Tablespace\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Tablespace\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Tablespace\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Tablespace\IsObjectUsed]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Storage]
+
+[FolderOptions\CheckModel\Storage\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Storage\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Storage\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Storage\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Storage\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Storage\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Storage\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Storage\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Storage\IsObjectUsed]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database]
+
+[FolderOptions\CheckModel\Database\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Database\IsObjectUsed]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Web Service]
+
+[FolderOptions\CheckModel\Web Service\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Web Service\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Web Service\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Web Service\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Web Service\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Web Service\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Web Service\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Web Service\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Web Service.Web Operation]
+
+[FolderOptions\CheckModel\Web Service.Web Operation\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Web Service.Web Operation\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Web Service.Web Operation\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Web Service.Web Operation\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Web Service.Web Operation\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Web Service.Web Operation\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Web Service.Web Operation\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Web Service.Web Operation\MaxLen - CODE]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle]
+
+[FolderOptions\CheckModel\Lifecycle\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle\CheckLifecyclePhase]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle\CheckLifecycleRetention]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle\CheckPartitionRange]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle.Phase]
+
+[FolderOptions\CheckModel\Lifecycle.Phase\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle.Phase\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle.Phase\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle.Phase\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle.Phase\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle.Phase\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle.Phase\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseTbspace]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseIQTbspace]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseDuplicateTbspace]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseTbspaceCurrency]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseRetention]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseIdlePeriod]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseDataSource]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseExternalOnFirst]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Replication]
+
+[FolderOptions\CheckModel\Replication\PartialReplication]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Business Rule]
+
+[FolderOptions\CheckModel\Business Rule\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Business Rule\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Business Rule\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Business Rule\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Business Rule\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Business Rule\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Business Rule\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Business Rule\EmptyColl - OBJCOL]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Extended Object]
+
+[FolderOptions\CheckModel\Extended Object\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Extended Object\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Extended Object\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Extended Object\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Extended Object\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Extended Object\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Extended Object\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Extended Link]
+
+[FolderOptions\CheckModel\Extended Link\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Extended Link\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Extended Link\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Extended Link\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Extended Link\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Extended Link\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Extended Link\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\File]
+
+[FolderOptions\CheckModel\File\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\File\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\File\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\File\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\File\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\File\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\File\CheckPathExists]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Data Format]
+
+[FolderOptions\CheckModel\Data Format\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Data Format\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Data Format\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Data Format\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Data Format\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Data Format\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Data Format\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Data Format\CheckDataFormatNullExpression]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Area]
+
+[FolderOptions\CheckModel\Area\CheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Area\CheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Area\DefaultCheckUseOnlyTerms]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Area\DefaultCheckUseTermBySynonym]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Area\NotApprovedTerms]
+CheckSeverity=Yes
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Area\UniqueName]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes
+
+[FolderOptions\CheckModel\Area\UniqueCode]
+CheckSeverity=No
+FixRequested=No
+CheckRequested=Yes</a:PackageOptionsText>
+<a:ModelOptionsText>[ModelOptions]
+
+[ModelOptions\Physical Objects]
+CaseSensitive=No
+DisplayName=Yes
+EnableTrans=No
+UseTerm=No
+EnableRequirements=No
+EnableFullShortcut=Yes
+SynchroCode=Yes
+DefaultDttp=
+IgnoreOwner=No
+RebuildTrigger=Yes
+RefrUnique=No
+RefrAutoMigrate=Yes
+RefrMigrateReuse=Yes
+RefrMigrateDomain=Yes
+RefrMigrateCheck=Yes
+RefrMigrateRule=Yes
+RefrMigrateExtd=No
+RefrMigrDefaultLink=No
+RefrDfltImpl=D
+RefrPrgtColn=No
+RefrMigrateToEnd=No
+RebuildTriggerDep=No
+ColnFKName=%.3:PARENT%_%COLUMN%
+ColnFKNameUse=No
+DomnCopyDttp=Yes
+DomnCopyChck=No
+DomnCopyRule=No
+DomnCopyMand=No
+DomnCopyExtd=No
+DomnCopyProf=No
+Notation=0
+DomnDefaultMandatory=No
+ColnDefaultMandatory=No
+TablDefaultOwner=
+ViewDefaultOwner=
+TrgrDefaultOwnerTabl=
+TrgrDefaultOwnerView=
+IdxDefaultOwnerTabl=
+IdxDefaultOwnerView=
+JdxDefaultOwner=
+DBPackDefaultOwner=
+SeqDefaultOwner=
+ProcDefaultOwner=
+DBMSTrgrDefaultOwner=
+Currency=USD
+RefrDeleteConstraint=1
+RefrUpdateConstraint=1
+RefrParentMandatory=No
+RefrParentChangeAllow=Yes
+RefrCheckOnCommit=No
+
+[ModelOptions\Physical Objects\NamingOptionsTemplates]
+
+[ModelOptions\Physical Objects\ClssNamingOptions]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMPCKG]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMPCKG\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMPCKG\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMDOMN]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMDOMN\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMDOMN\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\TABL]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\TABL\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\TABL\Code]
+Template=
+MaxLen=64
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\COLN]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\COLN\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\COLN\Code]
+Template=
+MaxLen=64
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\INDX]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\INDX\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\INDX\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\REFR]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\REFR\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\REFR\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VREF]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VREF\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VREF\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEW]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEW\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEW\Code]
+Template=
+MaxLen=64
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEWC]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEWC\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEWC\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBSERV]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBSERV\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBSERV\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=&#39;a&#39;-&#39;z&#39;,&#39;A&#39;-&#39;Z&#39;,&#39;0&#39;-&#39;9&#39;,&quot;/-_.!~*&#39;()&quot;
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBOP]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBOP\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBOP\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=&#39;a&#39;-&#39;z&#39;,&#39;A&#39;-&#39;Z&#39;,&#39;0&#39;-&#39;9&#39;,&quot;/-_.!~*&#39;()&quot;
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WPARAM]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WPARAM\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WPARAM\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FACT]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FACT\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FACT\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DIMN]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DIMN\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DIMN\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\MEAS]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\MEAS\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\MEAS\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DATTR]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DATTR\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DATTR\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FILO]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FILO\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FILO\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMEOBJ]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMEOBJ\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMEOBJ\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMELNK]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMELNK\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMELNK\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\AREA]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\AREA\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\AREA\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DefaultClass]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DefaultClass\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DefaultClass\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Connection]
+
+[ModelOptions\Pdm]
+
+[ModelOptions\Generate]
+
+[ModelOptions\Generate\Xsm]
+GenRootElement=Yes
+GenComplexType=No
+GenAttribute=Yes
+CheckModel=Yes
+SaveLinks=Yes
+ORMapping=No
+NameToCode=No
+
+[ModelOptions\Generate\Pdm]
+RRMapping=No
+
+[ModelOptions\Generate\Cdm]
+CheckModel=Yes
+SaveLinks=Yes
+NameToCode=No
+Notation=2
+
+[ModelOptions\Generate\Oom]
+CheckModel=Yes
+SaveLinks=Yes
+ORMapping=No
+NameToCode=Yes
+ClassPrefix=
+
+[ModelOptions\Generate\Ldm]
+CheckModel=Yes
+SaveLinks=Yes
+NameToCode=No
+
+[ModelOptions\Default Opts]
+
+[ModelOptions\Default Opts\TABL]
+PhysOpts=
+
+[ModelOptions\Default Opts\COLN]
+PhysOpts=
+
+[ModelOptions\Default Opts\INDX]
+PhysOpts=
+
+[ModelOptions\Default Opts\AKEY]
+PhysOpts=
+
+[ModelOptions\Default Opts\PKEY]
+PhysOpts=
+
+[ModelOptions\Default Opts\STOR]
+PhysOpts=
+
+[ModelOptions\Default Opts\TSPC]
+PhysOpts=
+
+[ModelOptions\Default Opts\SQNC]
+PhysOpts=
+
+[ModelOptions\Default Opts\DTBS]
+PhysOpts=
+
+[ModelOptions\Default Opts\USER]
+PhysOpts=
+
+[ModelOptions\Default Opts\JIDX]
+PhysOpts=</a:ModelOptionsText>
+<a:GlobalObjectID/>
+<a:RepositoryFilename>D:\powerDesign\source_project_manage.pdm</a:RepositoryFilename>
+<c:DBMS>
+<o:Shortcut Id="o3">
+<a:ObjectID>C5F30C5C-D582-437E-822E-DD847931775E</a:ObjectID>
+<a:Name>MySQL 5.0</a:Name>
+<a:Code>MYSQL50</a:Code>
+<a:CreationDate>1695026953</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695026953</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:TargetStereotype/>
+<a:GlobalObjectID/>
+<a:TargetID>F4F16ECD-F2F1-4006-AF6F-638D5C65F35E</a:TargetID>
+<a:TargetClassID>4BA9F647-DAB1-11D1-9944-006097355D9B</a:TargetClassID>
+</o:Shortcut>
+</c:DBMS>
+<c:PhysicalDiagrams>
+<o:PhysicalDiagram Id="o4">
+<a:ObjectID>BC58E1B8-957B-40C7-8C90-9F72E6107A81</a:ObjectID>
+<a:Name>projec_progress_manage</a:Name>
+<a:Code>projec_progress_manage</a:Code>
+<a:CreationDate>1695026954</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192818</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:DisplayPreferences>[DisplayPreferences]
+
+[DisplayPreferences\PDM]
+
+[DisplayPreferences\General]
+Adjust to text=Yes
+Snap Grid=No
+Constrain Labels=Yes
+Display Grid=No
+Show Page Delimiter=Yes
+Show Links intersections=Yes
+Activate automatic link routing=Yes
+Grid size=0
+Graphic unit=2
+Window color=255, 255, 255
+Background image=
+Background mode=8
+Watermark image=
+Watermark mode=8
+Show watermark on screen=No
+Gradient mode=0
+Gradient end color=255, 255, 255
+Show Swimlane=No
+SwimlaneVert=Yes
+TreeVert=No
+CompDark=0
+
+[DisplayPreferences\Object]
+Show Icon=No
+Mode=0
+Trunc Length=80
+Word Length=80
+Word Text=!&quot;&quot;#$%&amp;&#39;()*+,-./:;&lt;=&gt;?@[\]^_`{|}~
+Shortcut IntIcon=Yes
+Shortcut IntLoct=Yes
+Shortcut IntFullPath=No
+Shortcut IntLastPackage=Yes
+Shortcut ExtIcon=Yes
+Shortcut ExtLoct=No
+Shortcut ExtFullPath=No
+Shortcut ExtLastPackage=Yes
+Shortcut ExtIncludeModl=Yes
+Area.IconPicture=Yes
+Area.Stereotype=Yes
+Area.Comment=No
+Area.TextStyle=No
+Area.SubSymbols=Yes
+Area_SymbolLayout=&lt;Form&gt;[CRLF] &lt;StandardAttribute Name=&quot;Icon&quot; Attribute=&quot;IconPicture&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Area Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF] &lt;Separator Name=&quot;Separator&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Comment&quot; Attribute=&quot;Comment&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;LEFT&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Force top align&quot; Attribute=&quot;TextStyle&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF]&lt;/Form&gt;
+EObjShowStrn=Yes
+ExtendedObject.Comment=No
+ExtendedObject.IconPicture=No
+ExtendedObject.TextStyle=No
+ExtendedObject_SymbolLayout=
+ELnkShowStrn=Yes
+ELnkShowName=Yes
+ExtendedLink_SymbolLayout=
+ExtDpdShowStrn=Yes
+ExtendedDependency_SymbolLayout=&lt;Form&gt;[CRLF] &lt;Form Name=&quot;Center&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Source&quot; &gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Destination&quot; &gt;[CRLF] &lt;/Form&gt;[CRLF]&lt;/Form&gt;
+FileObject.Stereotype=No
+FileObject.DisplayName=Yes
+FileObject.LocationOrName=No
+FileObject.IconPicture=No
+FileObject.TextStyle=No
+FileObject.IconMode=Yes
+FileObject_SymbolLayout=
+Package.Stereotype=No
+Package.Comment=No
+Package.IconPicture=No
+Package.TextStyle=No
+Package_SymbolLayout=
+Display Model Version=Yes
+Table.Stereotype=Yes
+Table.DisplayName=Yes
+Table.OwnerDisplayName=No
+Table.Columns=Yes
+Table.Columns._Filter=&quot;All Columns&quot; PDMCOLNALL
+Table.Columns._Columns=Stereotype DataType KeyIndicator
+Table.Columns._Limit=-5
+Table.Keys=No
+Table.Keys._Columns=Stereotype Indicator
+Table.Indexes=No
+Table.Indexes._Columns=Stereotype
+Table.Triggers=No
+Table.Triggers._Columns=Stereotype
+Table.Comment=No
+Table.IconPicture=No
+Table.TextStyle=No
+Table_SymbolLayout=&lt;Form&gt;[CRLF] &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;ExclusiveChoice Name=&quot;Exclusive Choice&quot; Mandatory=&quot;Yes&quot; Display=&quot;HorizontalRadios&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Owner and Name&quot; Attribute=&quot;OwnerDisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/ExclusiveChoice&gt;[CRLF] &lt;Separator Name=&quot;Separator&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Columns&quot; Collection=&quot;Columns&quot; Columns=&quot;Stereotype No\r\nDisplayName Yes\r\nDataType No\r\nSymbolDataType No &amp;quot;Domain or Data type&amp;quot;\r\nDomain No\r\nKeyIndicator No\r\nIndexIndicator No\r\nNullStatus No&quot; Filters=&quot;&amp;quot;All Columns&amp;quot;  PDMCOLNALL &amp;quot;&amp;quot;\r\n&amp;quot;PK Columns&amp;quot;  PDMCOLNPK &amp;quot;\&amp;quot;PRIM \&amp;quot;TRUE\&amp;quot; TRUE\&amp;quot;&amp;quot;\r\n&amp;quot;Key Columns&amp;quot;  PDMCOLNKEY &amp;quot;\&amp;quot;KEYS \&amp;quot;TRUE\&amp;quot; TRUE\&amp;quot;&amp;quot;&quot; HasLimit=&quot;Yes&quot; HideEmpty=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Keys&quot; Collection=&quot;Keys&quot; Columns=&quot;Stereotype No\r\nDisplayName Yes\r\nIndicator No&quot; HasLimit=&quot;No&quot; HideEmpty=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Indexes&quot; Collection=&quot;Indexes&quot; Columns=&quot;Stereotype No\r\nDisplayName Yes\r\nIndicator No&quot; HasLimit=&quot;No&quot; HideEmpty=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Triggers&quot; Collection=&quot;Triggers&quot; Columns=&quot;Stereotype No\r\nDisplayName Yes&quot; HasLimit=&quot;No&quot; HideEmpty=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Comment&quot; Attribute=&quot;Comment&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;LEFT&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Icon&quot; Attribute=&quot;IconPicture&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Force top align&quot; Attribute=&quot;TextStyle&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF]&lt;/Form&gt;
+View.Stereotype=Yes
+View.DisplayName=Yes
+View.OwnerDisplayName=No
+View.Columns=Yes
+View.Columns._Columns=DisplayName
+View.Columns._Limit=-5
+View.TemporaryVTables=Yes
+View.Indexes=No
+View.Comment=No
+View.IconPicture=No
+View.TextStyle=No
+View_SymbolLayout=&lt;Form&gt;[CRLF] &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;ExclusiveChoice Name=&quot;Exclusive Choice&quot; Mandatory=&quot;Yes&quot; Display=&quot;HorizontalRadios&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Owner and Name&quot; Attribute=&quot;OwnerDisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/ExclusiveChoice&gt;[CRLF] &lt;Separator Name=&quot;Separator&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Columns&quot; Collection=&quot;Columns&quot; Columns=&quot;DisplayName No\r\nExpression No\r\nDataType No\r\nSymbolDataType No &amp;quot;Domain or Data type&amp;quot;\r\nIndexIndicator No&quot; HasLimit=&quot;Yes&quot; HideEmpty=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Tables&quot; Collection=&quot;TemporaryVTables&quot; Columns=&quot;Name Yes&quot; HasLimit=&quot;No&quot; HideEmpty=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Indexes&quot; Collection=&quot;Indexes&quot; Columns=&quot;DisplayName Yes&quot; HasLimit=&quot;No&quot; HideEmpty=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Comment&quot; Attribute=&quot;Comment&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;LEFT&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Icon&quot; Attribute=&quot;IconPicture&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Force top align&quot; Attribute=&quot;TextStyle&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF]&lt;/Form&gt;
+Procedure.Stereotype=No
+Procedure.DisplayName=Yes
+Procedure.OwnerDisplayName=No
+Procedure.Comment=No
+Procedure.IconPicture=No
+Procedure.TextStyle=No
+Procedure_SymbolLayout=&lt;Form&gt;[CRLF] &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;ExclusiveChoice Name=&quot;Exclusive Choice&quot; Mandatory=&quot;Yes&quot; Display=&quot;HorizontalRadios&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Owner and Name&quot; Attribute=&quot;OwnerDisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/ExclusiveChoice&gt;[CRLF] &lt;Separator Name=&quot;Separator&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Comment&quot; Attribute=&quot;Comment&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;LEFT&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Icon&quot; Attribute=&quot;IconPicture&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Force top align&quot; Attribute=&quot;TextStyle&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF]&lt;/Form&gt;
+Reference.Cardinality=No
+Reference.ImplementationType=No
+Reference.ChildRole=Yes
+Reference.Stereotype=Yes
+Reference.DisplayName=No
+Reference.ForeignKeyConstraintName=Yes
+Reference.JoinExpression=No
+Reference.Integrity=No
+Reference.ParentRole=Yes
+Reference_SymbolLayout=&lt;Form&gt;[CRLF] &lt;Form Name=&quot;Source&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Cardinality&quot; Attribute=&quot;Cardinality&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Implementation&quot; Attribute=&quot;ImplementationType&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Child Role&quot; Attribute=&quot;ChildRole&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Center&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;ExclusiveChoice Name=&quot;Exclusive Choice&quot; Mandatory=&quot;No&quot; Display=&quot;HorizontalRadios&quot; &gt;[CRLF]   &lt;StandardAttribute Name=&quot;Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]   &lt;StandardAttribute Name=&quot;Cons&amp;amp;traint Name&quot; Attribute=&quot;ForeignKeyConstraintName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;Cons&amp;amp;traint Name&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]   &lt;StandardAttribute Name=&quot;Join&quot; Attribute=&quot;JoinExpression&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;Join&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;/ExclusiveChoice&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Referential integrity&quot; Attribute=&quot;Integrity&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;Referential integrity&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Destination&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Parent Role&quot; Attribute=&quot;ParentRole&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF]&lt;/Form&gt;
+ViewReference.ChildRole=Yes
+ViewReference.Stereotype=Yes
+ViewReference.DisplayName=No
+ViewReference.JoinExpression=No
+ViewReference.ParentRole=Yes
+ViewReference_SymbolLayout=&lt;Form&gt;[CRLF] &lt;Form Name=&quot;Source&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Child Role&quot; Attribute=&quot;ChildRole&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Center&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;ExclusiveChoice Name=&quot;Exclusive Choice&quot; Mandatory=&quot;No&quot; Display=&quot;HorizontalRadios&quot; &gt;[CRLF]   &lt;StandardAttribute Name=&quot;Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]   &lt;StandardAttribute Name=&quot;Join Expression&quot; Attribute=&quot;JoinExpression&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;/ExclusiveChoice&gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Destination&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Parent Role&quot; Attribute=&quot;ParentRole&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF]&lt;/Form&gt;
+
+[DisplayPreferences\Symbol]
+
+[DisplayPreferences\Symbol\AREA]
+STRNFont=鏂板畫浣�,8,N
+STRNFont color=0 0 0
+DISPNAMEFont=鏂板畫浣�,8,N
+DISPNAMEFont color=0 0 0
+LABLFont=鏂板畫浣�,8,N
+LABLFont color=0 0 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=9600
+Height=8000
+Brush color=253 249 234
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=16
+Brush gradient color=245 230 173
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 121 98 6
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\FRMEOBJ]
+STRNFont=Arial,8,N
+STRNFont color=0, 0, 0
+DISPNAMEFont=Arial,8,N
+DISPNAMEFont color=0, 0, 0
+LABLFont=Arial,8,N
+LABLFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=6000
+Height=2000
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=64
+Brush gradient color=192 192 192
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 255 128 128
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\FRMELNK]
+CENTERFont=Arial,8,N
+CENTERFont color=0, 0, 0
+Line style=2
+Source Arrow=24
+Center Arrow=24
+Target Arrow=7
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 128 255
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\USRDEPD]
+CENTERFont=鏂板畫浣�,8,N
+CENTERFont color=0 0 0
+Line style=0
+Source Arrow=24
+Center Arrow=24
+Target Arrow=7
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=2 0 128 0 64
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\FILO]
+OBJSTRNFont=鏂板畫浣�,8,N
+OBJSTRNFont color=0 0 0
+DISPNAMEFont=鏂板畫浣�,8,N
+DISPNAMEFont color=0 0 0
+LCNMFont=鏂板畫浣�,8,N
+LCNMFont color=0 0 0
+AutoAdjustToText=Yes
+Keep aspect=Yes
+Keep center=Yes
+Keep size=No
+Width=2400
+Height=2400
+Brush color=255 255 255
+Fill Color=No
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 0 0 255
+Shadow color=192 192 192
+Shadow=-1
+
+[DisplayPreferences\Symbol\PDMPCKG]
+STRNFont=Arial,8,N
+STRNFont color=0, 0, 0
+DISPNAMEFont=Arial,8,N
+DISPNAMEFont color=0, 0, 0
+LABLFont=Arial,8,N
+LABLFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4800
+Height=3600
+Brush color=255 255 192
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 178 178 178
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\TABL]
+STRNFont=Arial,8,N
+STRNFont color=0 0 0
+DISPNAMEFont=Arial,8,N
+DISPNAMEFont color=0 0 0
+OWNRDISPNAMEFont=鏂板畫浣�,8,N
+OWNRDISPNAMEFont color=0 0 0
+ColumnsFont=Arial,8,N
+ColumnsFont color=0 0 0
+TablePkColumnsFont=Arial,8,U
+TablePkColumnsFont color=0 0 0
+TableFkColumnsFont=Arial,8,N
+TableFkColumnsFont color=0 0 0
+KeysFont=Arial,8,N
+KeysFont color=0 0 0
+IndexesFont=Arial,8,N
+IndexesFont color=0 0 0
+TriggersFont=Arial,8,N
+TriggersFont color=0 0 0
+LABLFont=Arial,8,N
+LABLFont color=0 0 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4800
+Height=4000
+Brush color=210 137 2
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 64 0
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\VIEW]
+STRNFont=Arial,8,N
+STRNFont color=0 0 0
+DISPNAMEFont=Arial,8,N
+DISPNAMEFont color=0 0 0
+OWNRDISPNAMEFont=鏂板畫浣�,8,N
+OWNRDISPNAMEFont color=0 0 0
+ColumnsFont=Arial,8,N
+ColumnsFont color=0 0 0
+TablePkColumnsFont=鏂板畫浣�,8,U
+TablePkColumnsFont color=0 0 0
+TableFkColumnsFont=鏂板畫浣�,8,N
+TableFkColumnsFont color=0 0 0
+TemporaryVTablesFont=Arial,8,N
+TemporaryVTablesFont color=0 0 0
+IndexesFont=Arial,8,N
+IndexesFont color=0 0 0
+LABLFont=Arial,8,N
+LABLFont color=0 0 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4800
+Height=4000
+Brush color=233 202 131
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 128 128
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\PROC]
+STRNFont=Arial,8,N
+STRNFont color=0 0 0
+DISPNAMEFont=Arial,8,N
+DISPNAMEFont color=0 0 0
+OWNRDISPNAMEFont=鏂板畫浣�,8,N
+OWNRDISPNAMEFont color=0 0 0
+LABLFont=Arial,8,N
+LABLFont color=0 0 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4000
+Height=1000
+Brush color=255 255 192
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 108 0
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\REFR]
+SOURCEFont=鏂板畫浣�,8,N
+SOURCEFont color=0 0 0
+CENTERFont=鏂板畫浣�,8,N
+CENTERFont color=0 0 0
+DESTINATIONFont=鏂板畫浣�,8,N
+DESTINATIONFont color=0 0 0
+Line style=2
+Source Arrow=24
+Center Arrow=24
+Target Arrow=0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 0 64
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\VREF]
+SOURCEFont=鏂板畫浣�,8,N
+SOURCEFont color=0 0 0
+CENTERFont=鏂板畫浣�,8,N
+CENTERFont color=0 0 0
+DESTINATIONFont=鏂板畫浣�,8,N
+DESTINATIONFont color=0 0 0
+Line style=2
+Source Arrow=24
+Center Arrow=24
+Target Arrow=0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 0 64
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\Free Symbol]
+Free TextFont=Arial,8,N
+Free TextFont color=0 0 0
+Line style=2
+Source Arrow=24
+Center Arrow=24
+Target Arrow=24
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 64 0
+Shadow color=192 192 192
+Shadow=0</a:DisplayPreferences>
+<a:PaperSize>(8268, 11693)</a:PaperSize>
+<a:PageMargins>((315,354), (433,354))</a:PageMargins>
+<a:PageOrientation>1</a:PageOrientation>
+<a:PaperSource>15</a:PaperSource>
+<c:Symbols>
+<o:PackageSymbol Id="o5">
+<a:CreationDate>1695192369</a:CreationDate>
+<a:ModificationDate>1695192830</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-17426,648), (-12402,4247))</a:Rect>
+<a:LineColor>11711154</a:LineColor>
+<a:FillColor>12648447</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 Arial,8,N
+DISPNAME 0 Arial,8,N
+LABL 0 Arial,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<c:Object>
+<o:Package Ref="o6"/>
+</c:Object>
+</o:PackageSymbol>
+<o:PackageSymbol Id="o7">
+<a:CreationDate>1695192630</a:CreationDate>
+<a:ModificationDate>1695192825</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-17292,-8196), (-12268,-4596))</a:Rect>
+<a:LineColor>11711154</a:LineColor>
+<a:FillColor>12648447</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 Arial,8,N
+DISPNAME 0 Arial,8,N
+LABL 0 Arial,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<c:Object>
+<o:Package Ref="o8"/>
+</c:Object>
+</o:PackageSymbol>
+</c:Symbols>
+</o:PhysicalDiagram>
+</c:PhysicalDiagrams>
+<c:Packages>
+<o:Package Id="o6">
+<a:ObjectID>BC9E705A-F7E6-42A7-9042-940DB19B9AC4</a:ObjectID>
+<a:Name>1.椤圭洰閰嶇疆鍖�</a:Name>
+<a:Code>1.椤圭洰閰嶇疆鍖�</a:Code>
+<a:CreationDate>1695192369</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695368892</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:PhysicalDiagrams>
+<o:PhysicalDiagram Id="o9">
+<a:ObjectID>1F52F91C-A72B-4C97-A327-D803765CEDF9</a:ObjectID>
+<a:Name>椤圭洰閰嶇疆</a:Name>
+<a:Code>椤圭洰閰嶇疆</a:Code>
+<a:CreationDate>1695192369</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695366629</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:DisplayPreferences>[DisplayPreferences]
+
+[DisplayPreferences\PDM]
+
+[DisplayPreferences\General]
+Adjust to text=Yes
+Snap Grid=No
+Constrain Labels=Yes
+Display Grid=No
+Show Page Delimiter=Yes
+Show Links intersections=Yes
+Activate automatic link routing=Yes
+Grid size=0
+Graphic unit=2
+Window color=255, 255, 255
+Background image=
+Background mode=8
+Watermark image=
+Watermark mode=8
+Show watermark on screen=No
+Gradient mode=0
+Gradient end color=255, 255, 255
+Show Swimlane=No
+SwimlaneVert=Yes
+TreeVert=No
+CompDark=0
+
+[DisplayPreferences\Object]
+Show Icon=No
+Mode=0
+Trunc Length=80
+Word Length=80
+Word Text=!&quot;&quot;#$%&amp;&#39;()*+,-./:;&lt;=&gt;?@[\]^_`{|}~
+Shortcut IntIcon=Yes
+Shortcut IntLoct=Yes
+Shortcut IntFullPath=No
+Shortcut IntLastPackage=Yes
+Shortcut ExtIcon=Yes
+Shortcut ExtLoct=No
+Shortcut ExtFullPath=No
+Shortcut ExtLastPackage=Yes
+Shortcut ExtIncludeModl=Yes
+Area.IconPicture=Yes
+Area.Stereotype=Yes
+Area.Comment=No
+Area.TextStyle=No
+Area.SubSymbols=Yes
+Area_SymbolLayout=&lt;Form&gt;[CRLF] &lt;StandardAttribute Name=&quot;Icon&quot; Attribute=&quot;IconPicture&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Area Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF] &lt;Separator Name=&quot;Separator&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Comment&quot; Attribute=&quot;Comment&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;LEFT&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Force top align&quot; Attribute=&quot;TextStyle&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF]&lt;/Form&gt;
+EObjShowStrn=Yes
+ExtendedObject.Comment=No
+ExtendedObject.IconPicture=No
+ExtendedObject.TextStyle=No
+ExtendedObject_SymbolLayout=
+ELnkShowStrn=Yes
+ELnkShowName=Yes
+ExtendedLink_SymbolLayout=
+ExtDpdShowStrn=Yes
+ExtendedDependency_SymbolLayout=&lt;Form&gt;[CRLF] &lt;Form Name=&quot;Center&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Source&quot; &gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Destination&quot; &gt;[CRLF] &lt;/Form&gt;[CRLF]&lt;/Form&gt;
+FileObject.Stereotype=No
+FileObject.DisplayName=Yes
+FileObject.LocationOrName=No
+FileObject.IconPicture=No
+FileObject.TextStyle=No
+FileObject.IconMode=Yes
+FileObject_SymbolLayout=
+Package.Stereotype=No
+Package.Comment=No
+Package.IconPicture=No
+Package.TextStyle=No
+Package_SymbolLayout=
+Display Model Version=Yes
+Table.Stereotype=Yes
+Table.DisplayName=Yes
+Table.OwnerDisplayName=No
+Table.Columns=Yes
+Table.Columns._Filter=&quot;All Columns&quot; PDMCOLNALL
+Table.Columns._Columns=Stereotype DataType KeyIndicator
+Table.Columns._Limit=-5
+Table.Keys=No
+Table.Keys._Columns=Stereotype Indicator
+Table.Indexes=No
+Table.Indexes._Columns=Stereotype
+Table.Triggers=No
+Table.Triggers._Columns=Stereotype
+Table.Comment=No
+Table.IconPicture=No
+Table.TextStyle=No
+Table_SymbolLayout=&lt;Form&gt;[CRLF] &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;ExclusiveChoice Name=&quot;Exclusive Choice&quot; Mandatory=&quot;Yes&quot; Display=&quot;HorizontalRadios&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Owner and Name&quot; Attribute=&quot;OwnerDisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/ExclusiveChoice&gt;[CRLF] &lt;Separator Name=&quot;Separator&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Columns&quot; Collection=&quot;Columns&quot; Columns=&quot;Stereotype No\r\nDisplayName Yes\r\nDataType No\r\nSymbolDataType No &amp;quot;Domain or Data type&amp;quot;\r\nDomain No\r\nKeyIndicator No\r\nIndexIndicator No\r\nNullStatus No&quot; Filters=&quot;&amp;quot;All Columns&amp;quot;  PDMCOLNALL &amp;quot;&amp;quot;\r\n&amp;quot;PK Columns&amp;quot;  PDMCOLNPK &amp;quot;\&amp;quot;PRIM \&amp;quot;TRUE\&amp;quot; TRUE\&amp;quot;&amp;quot;\r\n&amp;quot;Key Columns&amp;quot;  PDMCOLNKEY &amp;quot;\&amp;quot;KEYS \&amp;quot;TRUE\&amp;quot; TRUE\&amp;quot;&amp;quot;&quot; HasLimit=&quot;Yes&quot; HideEmpty=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Keys&quot; Collection=&quot;Keys&quot; Columns=&quot;Stereotype No\r\nDisplayName Yes\r\nIndicator No&quot; HasLimit=&quot;No&quot; HideEmpty=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Indexes&quot; Collection=&quot;Indexes&quot; Columns=&quot;Stereotype No\r\nDisplayName Yes\r\nIndicator No&quot; HasLimit=&quot;No&quot; HideEmpty=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Triggers&quot; Collection=&quot;Triggers&quot; Columns=&quot;Stereotype No\r\nDisplayName Yes&quot; HasLimit=&quot;No&quot; HideEmpty=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Comment&quot; Attribute=&quot;Comment&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;LEFT&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Icon&quot; Attribute=&quot;IconPicture&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Force top align&quot; Attribute=&quot;TextStyle&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF]&lt;/Form&gt;
+View.Stereotype=Yes
+View.DisplayName=Yes
+View.OwnerDisplayName=No
+View.Columns=Yes
+View.Columns._Columns=DisplayName
+View.Columns._Limit=-5
+View.TemporaryVTables=Yes
+View.Indexes=No
+View.Comment=No
+View.IconPicture=No
+View.TextStyle=No
+View_SymbolLayout=&lt;Form&gt;[CRLF] &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;ExclusiveChoice Name=&quot;Exclusive Choice&quot; Mandatory=&quot;Yes&quot; Display=&quot;HorizontalRadios&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Owner and Name&quot; Attribute=&quot;OwnerDisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/ExclusiveChoice&gt;[CRLF] &lt;Separator Name=&quot;Separator&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Columns&quot; Collection=&quot;Columns&quot; Columns=&quot;DisplayName No\r\nExpression No\r\nDataType No\r\nSymbolDataType No &amp;quot;Domain or Data type&amp;quot;\r\nIndexIndicator No&quot; HasLimit=&quot;Yes&quot; HideEmpty=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Tables&quot; Collection=&quot;TemporaryVTables&quot; Columns=&quot;Name Yes&quot; HasLimit=&quot;No&quot; HideEmpty=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Indexes&quot; Collection=&quot;Indexes&quot; Columns=&quot;DisplayName Yes&quot; HasLimit=&quot;No&quot; HideEmpty=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Comment&quot; Attribute=&quot;Comment&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;LEFT&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Icon&quot; Attribute=&quot;IconPicture&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Force top align&quot; Attribute=&quot;TextStyle&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF]&lt;/Form&gt;
+Procedure.Stereotype=No
+Procedure.DisplayName=Yes
+Procedure.OwnerDisplayName=No
+Procedure.Comment=No
+Procedure.IconPicture=No
+Procedure.TextStyle=No
+Procedure_SymbolLayout=&lt;Form&gt;[CRLF] &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;ExclusiveChoice Name=&quot;Exclusive Choice&quot; Mandatory=&quot;Yes&quot; Display=&quot;HorizontalRadios&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Owner and Name&quot; Attribute=&quot;OwnerDisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/ExclusiveChoice&gt;[CRLF] &lt;Separator Name=&quot;Separator&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Comment&quot; Attribute=&quot;Comment&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;LEFT&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Icon&quot; Attribute=&quot;IconPicture&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Force top align&quot; Attribute=&quot;TextStyle&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF]&lt;/Form&gt;
+Reference.Cardinality=No
+Reference.ImplementationType=No
+Reference.ChildRole=Yes
+Reference.Stereotype=Yes
+Reference.DisplayName=No
+Reference.ForeignKeyConstraintName=Yes
+Reference.JoinExpression=No
+Reference.Integrity=No
+Reference.ParentRole=Yes
+Reference_SymbolLayout=&lt;Form&gt;[CRLF] &lt;Form Name=&quot;Source&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Cardinality&quot; Attribute=&quot;Cardinality&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Implementation&quot; Attribute=&quot;ImplementationType&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Child Role&quot; Attribute=&quot;ChildRole&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Center&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;ExclusiveChoice Name=&quot;Exclusive Choice&quot; Mandatory=&quot;No&quot; Display=&quot;HorizontalRadios&quot; &gt;[CRLF]   &lt;StandardAttribute Name=&quot;Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]   &lt;StandardAttribute Name=&quot;Cons&amp;amp;traint Name&quot; Attribute=&quot;ForeignKeyConstraintName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;Cons&amp;amp;traint Name&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]   &lt;StandardAttribute Name=&quot;Join&quot; Attribute=&quot;JoinExpression&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;Join&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;/ExclusiveChoice&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Referential integrity&quot; Attribute=&quot;Integrity&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;Referential integrity&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Destination&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Parent Role&quot; Attribute=&quot;ParentRole&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF]&lt;/Form&gt;
+ViewReference.ChildRole=Yes
+ViewReference.Stereotype=Yes
+ViewReference.DisplayName=No
+ViewReference.JoinExpression=No
+ViewReference.ParentRole=Yes
+ViewReference_SymbolLayout=&lt;Form&gt;[CRLF] &lt;Form Name=&quot;Source&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Child Role&quot; Attribute=&quot;ChildRole&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Center&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;ExclusiveChoice Name=&quot;Exclusive Choice&quot; Mandatory=&quot;No&quot; Display=&quot;HorizontalRadios&quot; &gt;[CRLF]   &lt;StandardAttribute Name=&quot;Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]   &lt;StandardAttribute Name=&quot;Join Expression&quot; Attribute=&quot;JoinExpression&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;/ExclusiveChoice&gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Destination&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Parent Role&quot; Attribute=&quot;ParentRole&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF]&lt;/Form&gt;
+
+[DisplayPreferences\Symbol]
+
+[DisplayPreferences\Symbol\AREA]
+STRNFont=鏂板畫浣�,8,N
+STRNFont color=0 0 0
+DISPNAMEFont=鏂板畫浣�,8,N
+DISPNAMEFont color=0 0 0
+LABLFont=鏂板畫浣�,8,N
+LABLFont color=0 0 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=9600
+Height=8000
+Brush color=253 249 234
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=16
+Brush gradient color=245 230 173
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 121 98 6
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\FRMEOBJ]
+STRNFont=Arial,8,N
+STRNFont color=0, 0, 0
+DISPNAMEFont=Arial,8,N
+DISPNAMEFont color=0, 0, 0
+LABLFont=Arial,8,N
+LABLFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=6000
+Height=2000
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=64
+Brush gradient color=192 192 192
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 255 128 128
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\FRMELNK]
+CENTERFont=Arial,8,N
+CENTERFont color=0, 0, 0
+Line style=2
+Source Arrow=24
+Center Arrow=24
+Target Arrow=7
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 128 255
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\USRDEPD]
+CENTERFont=鏂板畫浣�,8,N
+CENTERFont color=0 0 0
+Line style=0
+Source Arrow=24
+Center Arrow=24
+Target Arrow=7
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=2 0 128 0 64
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\FILO]
+OBJSTRNFont=鏂板畫浣�,8,N
+OBJSTRNFont color=0 0 0
+DISPNAMEFont=鏂板畫浣�,8,N
+DISPNAMEFont color=0 0 0
+LCNMFont=鏂板畫浣�,8,N
+LCNMFont color=0 0 0
+AutoAdjustToText=Yes
+Keep aspect=Yes
+Keep center=Yes
+Keep size=No
+Width=2400
+Height=2400
+Brush color=255 255 255
+Fill Color=No
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 0 0 255
+Shadow color=192 192 192
+Shadow=-1
+
+[DisplayPreferences\Symbol\PDMPCKG]
+STRNFont=Arial,8,N
+STRNFont color=0, 0, 0
+DISPNAMEFont=Arial,8,N
+DISPNAMEFont color=0, 0, 0
+LABLFont=Arial,8,N
+LABLFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4800
+Height=3600
+Brush color=255 255 192
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 178 178 178
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\TABL]
+STRNFont=Arial,8,N
+STRNFont color=0 0 0
+DISPNAMEFont=Arial,8,N
+DISPNAMEFont color=0 0 0
+OWNRDISPNAMEFont=鏂板畫浣�,8,N
+OWNRDISPNAMEFont color=0 0 0
+ColumnsFont=Arial,8,N
+ColumnsFont color=0 0 0
+TablePkColumnsFont=Arial,8,U
+TablePkColumnsFont color=0 0 0
+TableFkColumnsFont=Arial,8,N
+TableFkColumnsFont color=0 0 0
+KeysFont=Arial,8,N
+KeysFont color=0 0 0
+IndexesFont=Arial,8,N
+IndexesFont color=0 0 0
+TriggersFont=Arial,8,N
+TriggersFont color=0 0 0
+LABLFont=Arial,8,N
+LABLFont color=0 0 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4800
+Height=4000
+Brush color=210 137 2
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 64 0
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\VIEW]
+STRNFont=Arial,8,N
+STRNFont color=0 0 0
+DISPNAMEFont=Arial,8,N
+DISPNAMEFont color=0 0 0
+OWNRDISPNAMEFont=鏂板畫浣�,8,N
+OWNRDISPNAMEFont color=0 0 0
+ColumnsFont=Arial,8,N
+ColumnsFont color=0 0 0
+TablePkColumnsFont=鏂板畫浣�,8,U
+TablePkColumnsFont color=0 0 0
+TableFkColumnsFont=鏂板畫浣�,8,N
+TableFkColumnsFont color=0 0 0
+TemporaryVTablesFont=Arial,8,N
+TemporaryVTablesFont color=0 0 0
+IndexesFont=Arial,8,N
+IndexesFont color=0 0 0
+LABLFont=Arial,8,N
+LABLFont color=0 0 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4800
+Height=4000
+Brush color=233 202 131
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 128 128
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\PROC]
+STRNFont=Arial,8,N
+STRNFont color=0 0 0
+DISPNAMEFont=Arial,8,N
+DISPNAMEFont color=0 0 0
+OWNRDISPNAMEFont=鏂板畫浣�,8,N
+OWNRDISPNAMEFont color=0 0 0
+LABLFont=Arial,8,N
+LABLFont color=0 0 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4000
+Height=1000
+Brush color=255 255 192
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 108 0
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\REFR]
+SOURCEFont=鏂板畫浣�,8,N
+SOURCEFont color=0 0 0
+CENTERFont=鏂板畫浣�,8,N
+CENTERFont color=0 0 0
+DESTINATIONFont=鏂板畫浣�,8,N
+DESTINATIONFont color=0 0 0
+Line style=2
+Source Arrow=24
+Center Arrow=24
+Target Arrow=0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 0 64
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\VREF]
+SOURCEFont=鏂板畫浣�,8,N
+SOURCEFont color=0 0 0
+CENTERFont=鏂板畫浣�,8,N
+CENTERFont color=0 0 0
+DESTINATIONFont=鏂板畫浣�,8,N
+DESTINATIONFont color=0 0 0
+Line style=2
+Source Arrow=24
+Center Arrow=24
+Target Arrow=0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 0 64
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\Free Symbol]
+Free TextFont=Arial,8,N
+Free TextFont color=0 0 0
+Line style=2
+Source Arrow=24
+Center Arrow=24
+Target Arrow=24
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 64 0
+Shadow color=192 192 192
+Shadow=0</a:DisplayPreferences>
+<a:PaperSize>(8268, 11693)</a:PaperSize>
+<a:PageMargins>((315,354), (433,354))</a:PageMargins>
+<a:PageOrientation>1</a:PageOrientation>
+<a:PaperSource>15</a:PaperSource>
+<c:Symbols>
+<o:ReferenceSymbol Id="o10">
+<a:CreationDate>1695192387</a:CreationDate>
+<a:ModificationDate>1695277290</a:ModificationDate>
+<a:Rect>((-93718,31387), (-55951,32908))</a:Rect>
+<a:ListOfPoints>((-56351,32012),(-93318,32012))</a:ListOfPoints>
+<a:CornerStyle>2</a:CornerStyle>
+<a:ArrowStyle>1</a:ArrowStyle>
+<a:LineColor>4194432</a:LineColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>CENTER 0 鏂板畫浣�,8,N
+SOURCE 0 鏂板畫浣�,8,N
+DESTINATION 0 鏂板畫浣�,8,N</a:FontList>
+<c:SourceSymbol>
+<o:TableSymbol Ref="o11"/>
+</c:SourceSymbol>
+<c:DestinationSymbol>
+<o:TableSymbol Ref="o12"/>
+</c:DestinationSymbol>
+<c:Object>
+<o:Reference Ref="o13"/>
+</c:Object>
+</o:ReferenceSymbol>
+<o:ReferenceSymbol Id="o14">
+<a:CreationDate>1695192387</a:CreationDate>
+<a:ModificationDate>1695277038</a:ModificationDate>
+<a:Rect>((-107177,10373), (-55823,12177))</a:Rect>
+<a:ListOfPoints>((-56223,10986),(-83770,10986),(-83770,11552),(-106777,11552))</a:ListOfPoints>
+<a:CornerStyle>2</a:CornerStyle>
+<a:ArrowStyle>1</a:ArrowStyle>
+<a:LineColor>4194432</a:LineColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>CENTER 0 鏂板畫浣�,8,N
+SOURCE 0 鏂板畫浣�,8,N
+DESTINATION 0 鏂板畫浣�,8,N</a:FontList>
+<a:AutomaticRoutingState>4</a:AutomaticRoutingState>
+<c:SourceSymbol>
+<o:TableSymbol Ref="o15"/>
+</c:SourceSymbol>
+<c:DestinationSymbol>
+<o:TableSymbol Ref="o16"/>
+</c:DestinationSymbol>
+<c:Object>
+<o:Reference Ref="o17"/>
+</c:Object>
+</o:ReferenceSymbol>
+<o:ReferenceSymbol Id="o18">
+<a:CreationDate>1695277362</a:CreationDate>
+<a:ModificationDate>1695277362</a:ModificationDate>
+<a:Rect>((-40848,28899), (-8903,48297))</a:Rect>
+<a:ListOfPoints>((-9303,29299),(-19054,29299),(-19054,47672),(-40448,47672))</a:ListOfPoints>
+<a:CornerStyle>2</a:CornerStyle>
+<a:ArrowStyle>1</a:ArrowStyle>
+<a:LineColor>4194432</a:LineColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>CENTER 0 鏂板畫浣�,8,N
+SOURCE 0 鏂板畫浣�,8,N
+DESTINATION 0 鏂板畫浣�,8,N</a:FontList>
+<c:SourceSymbol>
+<o:TableSymbol Ref="o19"/>
+</c:SourceSymbol>
+<c:DestinationSymbol>
+<o:TableSymbol Ref="o20"/>
+</c:DestinationSymbol>
+<c:Object>
+<o:Reference Ref="o21"/>
+</c:Object>
+</o:ReferenceSymbol>
+<o:ReferenceSymbol Id="o22">
+<a:CreationDate>1695278624</a:CreationDate>
+<a:ModificationDate>1695278624</a:ModificationDate>
+<a:Rect>((-40969,10878), (3985,24943))</a:Rect>
+<a:ListOfPoints>((-1827,24543),(-1827,11503),(-40569,11503))</a:ListOfPoints>
+<a:CornerStyle>2</a:CornerStyle>
+<a:ArrowStyle>1</a:ArrowStyle>
+<a:LineColor>4194432</a:LineColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>CENTER 0 鏂板畫浣�,8,N
+SOURCE 0 鏂板畫浣�,8,N
+DESTINATION 0 鏂板畫浣�,8,N</a:FontList>
+<c:SourceSymbol>
+<o:TableSymbol Ref="o19"/>
+</c:SourceSymbol>
+<c:DestinationSymbol>
+<o:TableSymbol Ref="o15"/>
+</c:DestinationSymbol>
+<c:Object>
+<o:Reference Ref="o23"/>
+</c:Object>
+</o:ReferenceSymbol>
+<o:ArchitectureAreaSymbol Id="o24">
+<a:CreationDate>1695194807</a:CreationDate>
+<a:ModificationDate>1695277357</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-15351,17757), (10561,55939))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>418425</a:LineColor>
+<a:FillColor>15399421</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 鏂板畫浣�,8,N
+DISPNAME 0 鏂板畫浣�,8,N
+LABL 0 鏂板畫浣�,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>16</a:GradientFillMode>
+<a:GradientEndColor>11396853</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:SubSymbols>
+<o:ReferenceSymbol Id="o25">
+<a:CreationDate>1695192387</a:CreationDate>
+<a:ModificationDate>1695275514</a:ModificationDate>
+<a:Rect>((-6924,33655), (4700,43282))</a:Rect>
+<a:ListOfPoints>((-1112,34055),(-1112,42882))</a:ListOfPoints>
+<a:CornerStyle>2</a:CornerStyle>
+<a:ArrowStyle>1</a:ArrowStyle>
+<a:LineColor>4194432</a:LineColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>CENTER 0 鏂板畫浣�,8,N
+SOURCE 0 鏂板畫浣�,8,N
+DESTINATION 0 鏂板畫浣�,8,N</a:FontList>
+<c:SourceSymbol>
+<o:TableSymbol Ref="o19"/>
+</c:SourceSymbol>
+<c:DestinationSymbol>
+<o:TableSymbol Ref="o26"/>
+</c:DestinationSymbol>
+<c:Object>
+<o:Reference Ref="o27"/>
+</c:Object>
+</o:ReferenceSymbol>
+<o:TableSymbol Id="o26">
+<a:CreationDate>1695192387</a:CreationDate>
+<a:ModificationDate>1695275513</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-9604,42882), (4980,52360))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>16512</a:LineColor>
+<a:FillColor>166354</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 Arial,8,N
+DISPNAME 0 Arial,8,N
+OWNRDISPNAME 0 鏂板畫浣�,8,N
+Columns 0 Arial,8,N
+TablePkColumns 0 Arial,8,U
+TableFkColumns 0 Arial,8,N
+Keys 0 Arial,8,N
+Indexes 0 Arial,8,N
+Triggers 0 Arial,8,N
+LABL 0 Arial,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:Object>
+<o:Table Ref="o28"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o19">
+<a:CreationDate>1695192387</a:CreationDate>
+<a:ModificationDate>1695275514</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-9303,24543), (5649,34055))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>16512</a:LineColor>
+<a:FillColor>166354</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 Arial,8,N
+DISPNAME 0 Arial,8,N
+OWNRDISPNAME 0 鏂板畫浣�,8,N
+Columns 0 Arial,8,N
+TablePkColumns 0 Arial,8,U
+TableFkColumns 0 Arial,8,N
+Keys 0 Arial,8,N
+Indexes 0 Arial,8,N
+Triggers 0 Arial,8,N
+LABL 0 Arial,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:Object>
+<o:Table Ref="o29"/>
+</c:Object>
+</o:TableSymbol>
+</c:SubSymbols>
+<c:Object>
+<o:Area Ref="o30"/>
+</c:Object>
+</o:ArchitectureAreaSymbol>
+<o:ArchitectureAreaSymbol Id="o31">
+<a:CreationDate>1695194811</a:CreationDate>
+<a:ModificationDate>1695276260</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-113337,1183), (-88853,38476))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>418425</a:LineColor>
+<a:FillColor>15399421</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 鏂板畫浣�,8,N
+DISPNAME 0 鏂板畫浣�,8,N
+LABL 0 鏂板畫浣�,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>16</a:GradientFillMode>
+<a:GradientEndColor>11396853</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:SubSymbols>
+<o:ReferenceSymbol Id="o32">
+<a:CreationDate>1695194913</a:CreationDate>
+<a:ModificationDate>1695276260</a:ModificationDate>
+<a:Rect>((-106977,18305), (-95353,21036))</a:Rect>
+<a:ListOfPoints>((-101165,18705),(-101165,20636))</a:ListOfPoints>
+<a:CornerStyle>2</a:CornerStyle>
+<a:ArrowStyle>1</a:ArrowStyle>
+<a:LineColor>4194432</a:LineColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>CENTER 0 鏂板畫浣�,8,N
+SOURCE 0 鏂板畫浣�,8,N
+DESTINATION 0 鏂板畫浣�,8,N</a:FontList>
+<c:SourceSymbol>
+<o:TableSymbol Ref="o16"/>
+</c:SourceSymbol>
+<c:DestinationSymbol>
+<o:TableSymbol Ref="o12"/>
+</c:DestinationSymbol>
+<c:Object>
+<o:Reference Ref="o33"/>
+</c:Object>
+</o:ReferenceSymbol>
+<o:TableSymbol Id="o12">
+<a:CreationDate>1695192387</a:CreationDate>
+<a:ModificationDate>1695276260</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-109012,20636), (-93318,36824))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>16512</a:LineColor>
+<a:FillColor>8421376</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 Arial,8,N
+DISPNAME 0 Arial,8,N
+OWNRDISPNAME 0 鏂板畫浣�,8,N
+Columns 0 Arial,8,N
+TablePkColumns 0 Arial,8,U
+TableFkColumns 0 Arial,8,N
+Keys 0 Arial,8,N
+Indexes 0 Arial,8,N
+Triggers 0 Arial,8,N
+LABL 0 Arial,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:Object>
+<o:Table Ref="o34"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o16">
+<a:CreationDate>1695192387</a:CreationDate>
+<a:ModificationDate>1695276260</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-108936,2221), (-93290,18705))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>16512</a:LineColor>
+<a:FillColor>8421376</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 Arial,8,N
+DISPNAME 0 Arial,8,N
+OWNRDISPNAME 0 鏂板畫浣�,8,N
+Columns 0 Arial,8,N
+TablePkColumns 0 Arial,8,U
+TableFkColumns 0 Arial,8,N
+Keys 0 Arial,8,N
+Indexes 0 Arial,8,N
+Triggers 0 Arial,8,N
+LABL 0 Arial,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:Object>
+<o:Table Ref="o35"/>
+</c:Object>
+</o:TableSymbol>
+</c:SubSymbols>
+<c:Object>
+<o:Area Ref="o36"/>
+</c:Object>
+</o:ArchitectureAreaSymbol>
+<o:ArchitectureAreaSymbol Id="o37">
+<a:CreationDate>1695194816</a:CreationDate>
+<a:ModificationDate>1695277038</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-64173,-14843), (-32546,56017))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>418425</a:LineColor>
+<a:FillColor>15399421</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 鏂板畫浣�,8,N
+DISPNAME 0 鏂板畫浣�,8,N
+LABL 0 鏂板畫浣�,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>16</a:GradientFillMode>
+<a:GradientEndColor>11396853</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:SubSymbols>
+<o:ReferenceSymbol Id="o38">
+<a:CreationDate>1695192387</a:CreationDate>
+<a:ModificationDate>1695277035</a:ModificationDate>
+<a:Rect>((-54320,-561), (-42696,2691))</a:Rect>
+<a:ListOfPoints>((-48508,-161),(-48508,2291))</a:ListOfPoints>
+<a:CornerStyle>2</a:CornerStyle>
+<a:ArrowStyle>1</a:ArrowStyle>
+<a:LineColor>4194432</a:LineColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>CENTER 0 鏂板畫浣�,8,N
+SOURCE 0 鏂板畫浣�,8,N
+DESTINATION 0 鏂板畫浣�,8,N</a:FontList>
+<c:SourceSymbol>
+<o:TableSymbol Ref="o39"/>
+</c:SourceSymbol>
+<c:DestinationSymbol>
+<o:TableSymbol Ref="o15"/>
+</c:DestinationSymbol>
+<c:Object>
+<o:Reference Ref="o40"/>
+</c:Object>
+</o:ReferenceSymbol>
+<o:ReferenceSymbol Id="o41">
+<a:CreationDate>1695192387</a:CreationDate>
+<a:ModificationDate>1695277035</a:ModificationDate>
+<a:Rect>((-63018,12352), (-51394,32035))</a:Rect>
+<a:ListOfPoints>((-56447,12752),(-57206,12752),(-57206,31410),(-56351,31410))</a:ListOfPoints>
+<a:CornerStyle>2</a:CornerStyle>
+<a:ArrowStyle>1</a:ArrowStyle>
+<a:LineColor>4194432</a:LineColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>CENTER 0 鏂板畫浣�,8,N
+SOURCE 0 鏂板畫浣�,8,N
+DESTINATION 0 鏂板畫浣�,8,N</a:FontList>
+<c:SourceSymbol>
+<o:TableSymbol Ref="o15"/>
+</c:SourceSymbol>
+<c:DestinationSymbol>
+<o:TableSymbol Ref="o11"/>
+</c:DestinationSymbol>
+<c:Object>
+<o:Reference Ref="o42"/>
+</c:Object>
+</o:ReferenceSymbol>
+<o:ReferenceSymbol Id="o43">
+<a:CreationDate>1695192387</a:CreationDate>
+<a:ModificationDate>1695277035</a:ModificationDate>
+<a:Rect>((-54330,35659), (-42706,46959))</a:Rect>
+<a:ListOfPoints>((-48518,36059),(-48518,46559))</a:ListOfPoints>
+<a:CornerStyle>2</a:CornerStyle>
+<a:ArrowStyle>1</a:ArrowStyle>
+<a:LineColor>4194432</a:LineColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>CENTER 0 鏂板畫浣�,8,N
+SOURCE 0 鏂板畫浣�,8,N
+DESTINATION 0 鏂板畫浣�,8,N</a:FontList>
+<a:AutomaticRoutingState>2</a:AutomaticRoutingState>
+<c:SourceSymbol>
+<o:TableSymbol Ref="o11"/>
+</c:SourceSymbol>
+<c:DestinationSymbol>
+<o:TableSymbol Ref="o20"/>
+</c:DestinationSymbol>
+<c:Object>
+<o:Reference Ref="o44"/>
+</c:Object>
+</o:ReferenceSymbol>
+<o:TableSymbol Id="o20">
+<a:CreationDate>1695192387</a:CreationDate>
+<a:ModificationDate>1695277035</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-56288,38409), (-40448,54367))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>16512</a:LineColor>
+<a:FillColor>16744448</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 Arial,8,N
+DISPNAME 0 Arial,8,N
+OWNRDISPNAME 0 鏂板畫浣�,8,N
+Columns 0 Arial,8,N
+TablePkColumns 0 Arial,8,U
+TableFkColumns 0 Arial,8,N
+Keys 0 Arial,8,N
+Indexes 0 Arial,8,N
+Triggers 0 Arial,8,N
+LABL 0 Arial,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:Object>
+<o:Table Ref="o45"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o11">
+<a:CreationDate>1695192387</a:CreationDate>
+<a:ModificationDate>1695277290</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-56351,22519), (-40657,36059))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>16512</a:LineColor>
+<a:FillColor>16744448</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 Arial,8,N
+DISPNAME 0 Arial,8,N
+OWNRDISPNAME 0 鏂板畫浣�,8,N
+Columns 0 Arial,8,N
+TablePkColumns 0 Arial,8,U
+TableFkColumns 0 Arial,8,N
+Keys 0 Arial,8,N
+Indexes 0 Arial,8,N
+Triggers 0 Arial,8,N
+LABL 0 Arial,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:Object>
+<o:Table Ref="o46"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o15">
+<a:CreationDate>1695192387</a:CreationDate>
+<a:ModificationDate>1695277035</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-56447,2291), (-40569,20715))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>16512</a:LineColor>
+<a:FillColor>16744448</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 Arial,8,N
+DISPNAME 0 Arial,8,N
+OWNRDISPNAME 0 鏂板畫浣�,8,N
+Columns 0 Arial,8,N
+TablePkColumns 0 Arial,8,U
+TableFkColumns 0 Arial,8,N
+Keys 0 Arial,8,N
+Indexes 0 Arial,8,N
+Triggers 0 Arial,8,N
+LABL 0 Arial,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:Object>
+<o:Table Ref="o47"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o39">
+<a:CreationDate>1695192387</a:CreationDate>
+<a:ModificationDate>1695277035</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-56733,-12441), (-40169,-161))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>16512</a:LineColor>
+<a:FillColor>16744448</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 Arial,8,N
+DISPNAME 0 Arial,8,N
+OWNRDISPNAME 0 鏂板畫浣�,8,N
+Columns 0 Arial,8,N
+TablePkColumns 0 Arial,8,U
+TableFkColumns 0 Arial,8,N
+Keys 0 Arial,8,N
+Indexes 0 Arial,8,N
+Triggers 0 Arial,8,N
+LABL 0 Arial,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:Object>
+<o:Table Ref="o48"/>
+</c:Object>
+</o:TableSymbol>
+</c:SubSymbols>
+<c:Object>
+<o:Area Ref="o49"/>
+</c:Object>
+</o:ArchitectureAreaSymbol>
+<o:NoteSymbol Id="o50">
+<a:Text>瀵归」鐩樁娈靛簱銆侀」鐩樁娈佃妭鐐瑰簱杩涜鍒犻櫎銆佹洿鏀圭姸鎬佹椂锛岄渶瑕佹牎楠屾ā鏉夸腑鏄惁浣跨敤</a:Text>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:ModificationDate>1695277057</a:ModificationDate>
+<a:Rect>((-88698,16459), (-64022,24191))</a:Rect>
+<a:TextStyle>4130</a:TextStyle>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>0</a:LineColor>
+<a:FillColor>16744448</a:FillColor>
+<a:ShadowColor>16777215</a:ShadowColor>
+<a:FontName>Arial,8,N</a:FontName>
+<a:ManuallyResized>1</a:ManuallyResized>
+</o:NoteSymbol>
+<o:ArchitectureAreaSymbol Id="o51">
+<a:CreationDate>1695366573</a:CreationDate>
+<a:ModificationDate>1695369063</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-99274,39359), (-65546,86995))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>418425</a:LineColor>
+<a:FillColor>15399421</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 鏂板畫浣�,8,N
+DISPNAME 0 鏂板畫浣�,8,N
+LABL 0 鏂板畫浣�,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>16</a:GradientFillMode>
+<a:GradientEndColor>11396853</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:SubSymbols>
+<o:TableSymbol Id="o52">
+<a:CreationDate>1695366573</a:CreationDate>
+<a:ModificationDate>1695370314</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-92819,45013), (-73231,52975))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>16512</a:LineColor>
+<a:FillColor>33023</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 Arial,8,N
+DISPNAME 0 Arial,8,N
+OWNRDISPNAME 0 鏂板畫浣�,8,N
+Columns 0 Arial,8,N
+TablePkColumns 0 Arial,8,U
+TableFkColumns 0 Arial,8,N
+Keys 0 Arial,8,N
+Indexes 0 Arial,8,N
+Triggers 0 Arial,8,N
+LABL 0 Arial,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:Object>
+<o:Table Ref="o53"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o54">
+<a:CreationDate>1695366627</a:CreationDate>
+<a:ModificationDate>1695369063</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-92724,53691), (-73418,85419))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>16512</a:LineColor>
+<a:FillColor>33023</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 Arial,8,N
+DISPNAME 0 Arial,8,N
+OWNRDISPNAME 0 鏂板畫浣�,8,N
+Columns 0 Arial,8,N
+TablePkColumns 0 Arial,8,U
+TableFkColumns 0 Arial,8,N
+Keys 0 Arial,8,N
+Indexes 0 Arial,8,N
+Triggers 0 Arial,8,N
+LABL 0 Arial,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:Object>
+<o:Table Ref="o55"/>
+</c:Object>
+</o:TableSymbol>
+</c:SubSymbols>
+<c:Object>
+<o:Area Ref="o56"/>
+</c:Object>
+</o:ArchitectureAreaSymbol>
+</c:Symbols>
+</o:PhysicalDiagram>
+</c:PhysicalDiagrams>
+<c:DefaultDiagram>
+<o:PhysicalDiagram Ref="o9"/>
+</c:DefaultDiagram>
+<c:Tables>
+<o:Table Id="o53">
+<a:ObjectID>5A207FA7-3702-4C0F-83CB-36FE3F5B989F</a:ObjectID>
+<a:Name>椤圭洰涓存湡棰勮妯℃澘鎺ユ敹浜篬P_TEMP_EXPIRATION_NOTIFY_USER]</a:Name>
+<a:Code>P_TEMP_EXPIRATION_NOTIFY_USER</a:Code>
+<a:CreationDate>1695366573</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695454638</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰涓存湡棰勮妯℃澘鎺ユ敹浜篬P_TEMP_EXPIRATION_NOTIFY_USER]</a:Comment>
+<a:GlobalObjectID/>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o57">
+<a:ObjectID>9A47D14B-0395-488D-98A7-35E97A461045</a:ObjectID>
+<a:Name>id</a:Name>
+<a:Code>id</a:Code>
+<a:CreationDate>1695366573</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695366573</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o58">
+<a:ObjectID>E633C942-44A7-4E72-BC36-133036654E24</a:ObjectID>
+<a:Name>涓存湡棰勮妯℃澘ID</a:Name>
+<a:Code>TEMP_EXPIRATION_NOTIFY_ID</a:Code>
+<a:CreationDate>1695369075</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695369174</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>涓存湡棰勮妯℃澘ID</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o59">
+<a:ObjectID>E7134FE5-06B8-4594-A592-313266073E84</a:ObjectID>
+<a:Name>棰勮绫诲瀷</a:Name>
+<a:Code>EXPIRE_TYPE</a:Code>
+<a:CreationDate>1695366573</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695366573</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>棰勮绫诲瀷,瀵瑰簲涓存湡棰勮琛ㄥ瓧娈�
+1:棰勮鍓�1 
+2:棰勮鍓�2 
+3:棰勮鍓�3 
+4:瓒呮湡鍚�1
+ 5:瓒呮湡鍚�2 
+6:瓒呮湡鍚�3</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o60">
+<a:ObjectID>28DF1649-19CE-4B1A-B56B-60777458D3C8</a:ObjectID>
+<a:Name>閫氱煡浜哄憳ID</a:Name>
+<a:Code>NOTIFY_ID</a:Code>
+<a:CreationDate>1695366573</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695369193</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>浜哄憳琛╱serid</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o61">
+<a:ObjectID>9D14B372-E1D7-42D6-A951-2E53602E9195</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1695366573</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695366573</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Key.Columns>
+<o:Column Ref="o57"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o61"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o47">
+<a:ObjectID>EA277095-B64E-42AF-BB66-D5EF0396A6EF</a:ObjectID>
+<a:Name>椤圭洰-闃舵鍏崇郴妯℃澘鑺傜偣[P_TEMP_PROJECT_STAGE_NODE]</a:Name>
+<a:Code>P_TEMP_PROJECT_STAGE_NODE</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695278633</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰-闃舵鍏崇郴妯℃澘鑺傜偣</a:Comment>
+<a:GlobalObjectID/>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o62">
+<a:ObjectID>D4A70CD4-A497-4F8A-B4BC-D440427BECC0</a:ObjectID>
+<a:Name>id</a:Name>
+<a:Code>ID</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o63">
+<a:ObjectID>DC7ED473-A535-4F6F-8529-D8D5BF40860C</a:ObjectID>
+<a:Name>椤圭洰妯℃澘id</a:Name>
+<a:Code>TEMP_PROJECT_ID</a:Code>
+<a:CreationDate>1695204124</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695204148</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰妯℃澘id</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o64">
+<a:ObjectID>D0327E9A-1908-49F5-9E43-0507D98E6793</a:ObjectID>
+<a:Name>椤圭洰-闃舵鍏崇郴妯℃澘ID</a:Name>
+<a:Code>TEMP_PROJECT_STAGE_ID</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰-闃舵鍏崇郴妯℃澘ID</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o65">
+<a:ObjectID>BB37D155-2516-48DA-8546-8D9BE457407A</a:ObjectID>
+<a:Name>椤圭洰闃舵鑺傜偣搴撶殑ID</a:Name>
+<a:Code>PROGRESS_TEMP_STAGE_NODE_ID</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰闃舵鑺傜偣搴撶殑ID</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o66">
+<a:ObjectID>F34C45AA-EFA8-490F-8D7B-604018AFC457</a:ObjectID>
+<a:Name>鎺掑簭</a:Name>
+<a:Code>SORT</a:Code>
+<a:CreationDate>1695277246</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277258</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鎺掑簭锛屼笉鑳介噸澶�</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o67">
+<a:ObjectID>5FC11CE7-9753-4A64-8743-792E3F7AF9A3</a:ObjectID>
+<a:Name>鑷」鐩紑濮嬬N澶�</a:Name>
+<a:Code>NODE_TIME_START</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鑷」鐩紑濮嬬N澶�</a:Comment>
+<a:LowValue>0</a:LowValue>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o68">
+<a:ObjectID>B9052F8F-8B25-42B6-9653-44867AD53165</a:ObjectID>
+<a:Name>鎸佺画澶╂暟</a:Name>
+<a:Code>NODE_TIME_DAYS</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鎸佺画澶╂暟锛屽嵆鑺傜偣鍛ㄦ湡</a:Comment>
+<a:LowValue>0</a:LowValue>
+<a:DefaultValue>1</a:DefaultValue>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o69">
+<a:ObjectID>547CABAC-45C6-4F60-909C-ED4456C21556</a:ObjectID>
+<a:Name>瀹屾垚鍚庢彁閱�</a:Name>
+<a:Code>COMPLETE_NOTIFY_STATUS</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>瀹屾垚鍚庢彁閱� 0 涓嶆彁閱� 1 鎻愰啋</a:Comment>
+<a:DefaultValue>1</a:DefaultValue>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o70">
+<a:ObjectID>2987C893-7269-468A-AB88-BA502BD01119</a:ObjectID>
+<a:Name>鏄惁涓存湡棰勮</a:Name>
+<a:Code>WARN_NEED</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>0涓嶉璀︼紝1棰勮</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o71">
+<a:ObjectID>73EC8293-DE34-4F36-89E7-B8F9568601F2</a:ObjectID>
+<a:Name>闄勪欢蹇呬紶</a:Name>
+<a:Code>FILE_NEED</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>0闈炲繀濉�1蹇呭~</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o72">
+<a:ObjectID>C0E413F0-6304-4A05-ABCD-A39F7F8701AE</a:ObjectID>
+<a:Name>鏄惁鍒犻櫎</a:Name>
+<a:Code>IS_DELETE</a:Code>
+<a:CreationDate>1695276487</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276497</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>閫昏緫鍒犻櫎(0 鍚� 1 鏄�)</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o73">
+<a:ObjectID>5F776F7E-B3B4-4883-A6F5-13BB6491301A</a:ObjectID>
+<a:Name>鍒犻櫎鏃堕棿</a:Name>
+<a:Code>DELETE_TIME</a:Code>
+<a:CreationDate>1695276487</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276497</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒犻櫎鏃堕棿</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o74">
+<a:ObjectID>393007B2-7149-49F4-9B41-D60E662D051B</a:ObjectID>
+<a:Name>鍒犻櫎浜�</a:Name>
+<a:Code>DELETE_USER_ID</a:Code>
+<a:CreationDate>1695276487</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276497</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒犻櫎浜�</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o75">
+<a:ObjectID>2D1136C4-E20B-449B-AA4E-BAC97947B7A8</a:ObjectID>
+<a:Name>鍒犻櫎浜哄鍚�</a:Name>
+<a:Code>DELETE_USER_NAME</a:Code>
+<a:CreationDate>1695276487</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276497</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒犻櫎浜哄鍚�</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o76">
+<a:ObjectID>1A7965C7-6123-480C-AE47-FCDC7FC168B2</a:ObjectID>
+<a:Name>鍒涘缓浜�</a:Name>
+<a:Code>CREATE_USER_ID</a:Code>
+<a:CreationDate>1695276487</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276497</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓浜�</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o77">
+<a:ObjectID>28D2E25C-AD4D-4ED1-8288-9EF1E88DBC3F</a:ObjectID>
+<a:Name>鍒涘缓浜哄鍚�</a:Name>
+<a:Code>CREATE_USER_NAME</a:Code>
+<a:CreationDate>1695276487</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276497</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓浜哄鍚�</a:Comment>
+<a:DataType>varchar(28)</a:DataType>
+<a:Length>28</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o78">
+<a:ObjectID>42940713-D7EF-419D-9E40-8D1C21482CC5</a:ObjectID>
+<a:Name>鍒涘缓鏃堕棿</a:Name>
+<a:Code>CREATE_TIME</a:Code>
+<a:CreationDate>1695276487</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276497</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓鏃堕棿</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o79">
+<a:ObjectID>F6BEE0BB-2A4A-4FFC-A901-390C344A39E7</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Key.Columns>
+<o:Column Ref="o62"/>
+</c:Key.Columns>
+</o:Key>
+<o:Key Id="o80">
+<a:ObjectID>C3E89045-F772-42AE-B449-B3E531E9F66B</a:ObjectID>
+<a:Name>Key_2</a:Name>
+<a:Code>Key_2</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:ConstraintName>STAGE_NODE_SORT</a:ConstraintName>
+<a:ExtendedAttributesText>{F4F16ECD-F2F1-4006-AF6F-638D5C65F35E},MYSQL50,57={D1C795B8-8F7B-4AA7-A240-85C5B737C543},ExtUnique,4=true
+
+</a:ExtendedAttributesText>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o79"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o46">
+<a:ObjectID>51284738-D1B6-4B85-899A-ACE8403950ED</a:ObjectID>
+<a:Name>椤圭洰-闃舵鍏崇郴妯℃澘[P_TEMP_PROJECT_STAGE]</a:Name>
+<a:Code>P_TEMP_PROJECT_STAGE</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277232</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰-闃舵鍏崇郴妯℃澘</a:Comment>
+<a:GlobalObjectID/>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o81">
+<a:ObjectID>C09186FD-4DE6-4CC9-8627-8F8C4B80CDC4</a:ObjectID>
+<a:Name>ID</a:Name>
+<a:Code>ID</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o82">
+<a:ObjectID>39AB2B43-66B7-446A-86E9-B629C8912A86</a:ObjectID>
+<a:Name>椤圭洰妯℃澘id</a:Name>
+<a:Code>TEMP_PROJECT_ID</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰妯℃澘id</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o83">
+<a:ObjectID>A9618D9C-0909-46CC-9277-EC722C8EDBEA</a:ObjectID>
+<a:Name>椤圭洰闃舵搴揑d</a:Name>
+<a:Code>PROGRESS_TEMP_STAGE_ID</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰闃舵搴揑d</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o84">
+<a:ObjectID>B654354C-D48A-4558-BB11-A75D121C3877</a:ObjectID>
+<a:Name>鎺掑簭</a:Name>
+<a:Code>SORT</a:Code>
+<a:CreationDate>1695277214</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277232</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鎺掑簭锛屼笉鑳介噸澶�</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o85">
+<a:ObjectID>1823C7C9-01B5-4463-ABB5-CDCBABDD229C</a:ObjectID>
+<a:Name>闃舵宸ユ湡</a:Name>
+<a:Code>STAGE_TIME_DAYS</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>闃舵宸ユ湡</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o86">
+<a:ObjectID>66ABF0E5-0E2A-4564-B132-31D304822B18</a:ObjectID>
+<a:Name>鏄惁鍒犻櫎</a:Name>
+<a:Code>IS_DELETE</a:Code>
+<a:CreationDate>1695276465</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276478</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>閫昏緫鍒犻櫎(0 鍚� 1 鏄�)</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o87">
+<a:ObjectID>2BE05520-2A68-43DB-BCCE-63593C8B8D58</a:ObjectID>
+<a:Name>鍒犻櫎鏃堕棿</a:Name>
+<a:Code>DELETE_TIME</a:Code>
+<a:CreationDate>1695276465</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276478</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒犻櫎鏃堕棿</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o88">
+<a:ObjectID>4DEFC858-7987-4094-AD7C-1BF615F645B2</a:ObjectID>
+<a:Name>鍒犻櫎浜�</a:Name>
+<a:Code>DELETE_USER_ID</a:Code>
+<a:CreationDate>1695276465</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276478</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒犻櫎浜�</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o89">
+<a:ObjectID>698FCD16-D494-4250-B53F-BD76DA6E83C1</a:ObjectID>
+<a:Name>鍒犻櫎浜哄鍚�</a:Name>
+<a:Code>DELETE_USER_NAME</a:Code>
+<a:CreationDate>1695276465</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276478</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒犻櫎浜哄鍚�</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o90">
+<a:ObjectID>13AF2F3D-7463-4530-9E07-5FD0A7F2A849</a:ObjectID>
+<a:Name>鍒涘缓浜�</a:Name>
+<a:Code>CREATE_USER_ID</a:Code>
+<a:CreationDate>1695276465</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276478</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓浜�</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o91">
+<a:ObjectID>74A67E83-4649-4962-A727-1E4CEA21CFD3</a:ObjectID>
+<a:Name>鍒涘缓浜哄鍚�</a:Name>
+<a:Code>CREATE_USER_NAME</a:Code>
+<a:CreationDate>1695276465</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276478</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓浜哄鍚�</a:Comment>
+<a:DataType>varchar(28)</a:DataType>
+<a:Length>28</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o92">
+<a:ObjectID>8482CA19-2630-41B0-9388-003A2CBDFA5B</a:ObjectID>
+<a:Name>鍒涘缓鏃堕棿</a:Name>
+<a:Code>CREATE_TIME</a:Code>
+<a:CreationDate>1695276465</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276478</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓鏃堕棿</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o93">
+<a:ObjectID>20E664FE-369C-48C1-99E3-830FFFD0713E</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Key.Columns>
+<o:Column Ref="o81"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o93"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o28">
+<a:ObjectID>55FE6E31-B10B-442B-8834-36B0F8A409A2</a:ObjectID>
+<a:Name>椤圭洰妯℃澘鐨勭湅鏉縖P_TEMP_PROJECT_BOARD]</a:Name>
+<a:Code>P_TEMP_PROJECT_BOARD</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695365266</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰妯℃澘鐨勭湅鏉�</a:Comment>
+<a:GlobalObjectID/>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o94">
+<a:ObjectID>E1CFC375-2A32-4114-940B-E012E8BF1C78</a:ObjectID>
+<a:Name>ID</a:Name>
+<a:Code>ID</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o95">
+<a:ObjectID>81DD2525-CF64-4C63-ACA0-929DCDC33A87</a:ObjectID>
+<a:Name>鍏抽敭鑺傜偣鍚嶇О</a:Name>
+<a:Code>BOARD_NAME</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695204906</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍏抽敭鑺傜偣鍚嶇О</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o96">
+<a:ObjectID>0649A9F2-F4AC-4169-B662-1B20F6775D94</a:ObjectID>
+<a:Name>鍏抽敭鑺傜偣缂栧彿</a:Name>
+<a:Code>BOARD_CODE</a:Code>
+<a:CreationDate>1695365231</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695365256</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍏抽敭鑺傜偣缂栧彿锛屽敮涓�</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o97">
+<a:ObjectID>AAFCEE13-FB03-4522-AA47-AA6B84AD39D0</a:ObjectID>
+<a:Name>鎺掑簭</a:Name>
+<a:Code>SORT</a:Code>
+<a:CreationDate>1695277316</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277910</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鎺掑簭</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o98">
+<a:ObjectID>A80752E9-8EA8-4E27-914A-2F4B16ABDEFC</a:ObjectID>
+<a:Name>鐘舵��</a:Name>
+<a:Code>STATUS</a:Code>
+<a:CreationDate>1695365131</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695365143</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鐘舵�� 0鍏抽棴1寮�鍚�</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o99">
+<a:ObjectID>F52B03DA-2269-477C-9ABE-F43334EF9F46</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Key.Columns>
+<o:Column Ref="o94"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o99"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o29">
+<a:ObjectID>BECE9AFE-4733-4418-9E35-4433E1A52970</a:ObjectID>
+<a:Name>椤圭洰妯℃澘鐪嬫澘鑺傜偣[P_TEMP_PROJECT_BOARD_NODE]</a:Name>
+<a:Code>P_TEMP_PROJECT_BOARD_NODE</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695278633</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰妯℃澘鐪嬫澘鑺傜偣</a:Comment>
+<a:GlobalObjectID/>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o100">
+<a:ObjectID>1977D45B-B062-46DE-AD57-095776727BCD</a:ObjectID>
+<a:Name>ID</a:Name>
+<a:Code>ID</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695278633</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o101">
+<a:ObjectID>3419F6D3-E2BF-49C4-8ADD-6DF574B48AC8</a:ObjectID>
+<a:Name>椤圭洰妯℃澘id</a:Name>
+<a:Code>TEMP_PROJECT_ID</a:Code>
+<a:CreationDate>1695276932</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276945</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰妯℃澘id</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o102">
+<a:ObjectID>B22D7162-B4CB-40B0-9EF8-1DE820309159</a:ObjectID>
+<a:Name>鐪嬫澘id</a:Name>
+<a:Code>TEMP_BOARD_ID</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o103">
+<a:ObjectID>8CA262A9-AFAB-4050-9D03-5B52E211C30A</a:ObjectID>
+<a:Name>妯℃澘鑺傜偣id</a:Name>
+<a:Code>TEMP_STAGE_NODE_ID</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o104">
+<a:ObjectID>1D0829B3-BD6C-4486-A510-C3E4DA3FCC46</a:ObjectID>
+<a:Name>鎺掑簭</a:Name>
+<a:Code>SORT</a:Code>
+<a:CreationDate>1695277302</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695365291</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鎺掑簭</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o105">
+<a:ObjectID>86B88CC5-83D5-49F5-A947-F3AA6ABFB7DB</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Key.Columns>
+<o:Column Ref="o100"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o105"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o48">
+<a:ObjectID>B2934ACD-1D22-4327-8744-1A42BB854F80</a:ObjectID>
+<a:Name>椤圭洰鑺傜偣閫氱煡妯℃澘[P_TEMP_PROJECT_STAGE_NODE_NOTIFY]</a:Name>
+<a:Code>P_TEMP_PROJECT_STAGE_NODE_NOTIFY</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695278427</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰鑺傜偣閫氱煡妯℃澘</a:Comment>
+<a:GlobalObjectID/>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o106">
+<a:ObjectID>BD7C7B1E-C142-4A0F-9233-B2B4C126A9C9</a:ObjectID>
+<a:Name>id</a:Name>
+<a:Code>id</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o107">
+<a:ObjectID>6DE6B61B-9C95-4F14-AA89-BE1CD3F888FF</a:ObjectID>
+<a:Name>椤圭洰妯℃澘id</a:Name>
+<a:Code>TEMP_PROJECT_ID</a:Code>
+<a:CreationDate>1695276991</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277003</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰妯℃澘id</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o108">
+<a:ObjectID>252CE1B7-0ECE-44E7-8A26-EB1B967121B9</a:ObjectID>
+<a:Name>瑙﹀彂閫氱煡鐨勬ā鏉胯妭鐐筰d</a:Name>
+<a:Code>TEMP_STAGE_NODE_ID</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>瑙﹀彂閫氱煡鐨勬ā鏉胯妭鐐筰d</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o109">
+<a:ObjectID>A7C9D96B-15A7-4A5C-A231-459A76809F47</a:ObjectID>
+<a:Name>閫氱煡闃舵 or 鑺傜偣</a:Name>
+<a:Code>NOTIFY_TEMP_TYPE</a:Code>
+<a:CreationDate>1695203869</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276778</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>閫氱煡闃舵 or 鑺傜偣 0闃舵 1鑺傜偣</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o110">
+<a:ObjectID>A329B2AB-ADF7-45A5-A6F2-6F7E8C4E5F37</a:ObjectID>
+<a:Name>閫氱煡闃舵 or 鑺傜偣鐨勬ā鏉� id</a:Name>
+<a:Code>NOTIFY_TEMP_STAGE_NODE_ID</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276755</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>閫氱煡闃舵 or 鑺傜偣鐨勬ā鏉� id </a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o111">
+<a:ObjectID>D99CA3F7-800B-4543-A6DF-A69627713B9F</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Key.Columns>
+<o:Column Ref="o106"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o111"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o45">
+<a:ObjectID>E96873E1-081E-4F04-9025-FE7F6AB1DF83</a:ObjectID>
+<a:Name>椤圭洰妯℃澘[P_TEMP_PROJECT]</a:Name>
+<a:Code>P_TEMP_PROJECT</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277377</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰妯℃澘</a:Comment>
+<a:GlobalObjectID/>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o112">
+<a:ObjectID>92F251BD-76F2-4DC4-8A8D-86581C7C2736</a:ObjectID>
+<a:Name>id</a:Name>
+<a:Code>ID</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o113">
+<a:ObjectID>86D6CC1C-1F30-4DDD-A87C-34D70B40E6AA</a:ObjectID>
+<a:Name>璁″垝绫诲瀷缂栫爜</a:Name>
+<a:Code>PLAN_TYPE_CODE</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鐮佽〃缂栫爜锛孭LAN_TYPE</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o114">
+<a:ObjectID>C5B47DCB-FCF0-493D-84F4-7E40E0AC8671</a:ObjectID>
+<a:Name>璁″垝绫诲瀷鍚嶇О</a:Name>
+<a:Code>PLAN_TYPE_NAME</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鐮佽〃缂栫爜锛孭LAN_TYPE</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o115">
+<a:ObjectID>9CE40DE0-422B-4C01-9A5E-545F31BF5ED7</a:ObjectID>
+<a:Name>妯℃澘鍚嶇О</a:Name>
+<a:Code>PROJECT_NAME</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>闃舵鍚嶇О</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o116">
+<a:ObjectID>691DB0E6-2A70-48D4-BB50-B3D69D086904</a:ObjectID>
+<a:Name>椤圭洰妯℃澘缂栧彿</a:Name>
+<a:Code>PROJECT_CODE</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695203341</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰妯℃澘缂栧彿锛屽敮涓�</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o117">
+<a:ObjectID>0AF1240A-8745-43B7-8196-AEC42DDB391B</a:ObjectID>
+<a:Name>鐘舵��</a:Name>
+<a:Code>STATUS</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鐘舵�� 0鍏抽棴1寮�鍚�</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o118">
+<a:ObjectID>094C1D8B-001C-4C2F-B322-52F69276C328</a:ObjectID>
+<a:Name>鎺掑簭</a:Name>
+<a:Code>SORT</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鎺掑簭锛屼笉鑳介噸澶�</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o119">
+<a:ObjectID>5455A250-3344-4D5D-94D7-F427C3E3912D</a:ObjectID>
+<a:Name>澶囨敞</a:Name>
+<a:Code>REMARK</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>澶囨敞</a:Comment>
+<a:DataType>varchar(1024)</a:DataType>
+<a:Length>1024</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o120">
+<a:ObjectID>4A2D471A-0758-4B45-911E-6092BD09A370</a:ObjectID>
+<a:Name>鏄惁鍒犻櫎</a:Name>
+<a:Code>IS_DELETE</a:Code>
+<a:CreationDate>1695276408</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276463</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>閫昏緫鍒犻櫎(0 鍚� 1 鏄�)</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o121">
+<a:ObjectID>BC021A7D-EFAD-4AAD-BC3B-F6ADE6BAD9F2</a:ObjectID>
+<a:Name>鍒犻櫎鏃堕棿</a:Name>
+<a:Code>DELETE_TIME</a:Code>
+<a:CreationDate>1695276408</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276463</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒犻櫎鏃堕棿</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o122">
+<a:ObjectID>A8E27202-0E55-40C4-AE19-9D5854DF6E08</a:ObjectID>
+<a:Name>鍒犻櫎浜�</a:Name>
+<a:Code>DELETE_USER_ID</a:Code>
+<a:CreationDate>1695276408</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276463</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒犻櫎浜�</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o123">
+<a:ObjectID>1FD2D4AF-737B-4585-BAF0-DCC8B240533F</a:ObjectID>
+<a:Name>鍒犻櫎浜哄鍚�</a:Name>
+<a:Code>DELETE_USER_NAME</a:Code>
+<a:CreationDate>1695276408</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276463</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒犻櫎浜哄鍚�</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o124">
+<a:ObjectID>7413C3D6-A755-41E3-9894-6241DBE9BD88</a:ObjectID>
+<a:Name>鍒涘缓浜�</a:Name>
+<a:Code>CREATE_USER_ID</a:Code>
+<a:CreationDate>1695276408</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276463</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓浜�</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o125">
+<a:ObjectID>999DBCA3-6C32-481F-AA01-42C56C048CB6</a:ObjectID>
+<a:Name>鍒涘缓浜哄鍚�</a:Name>
+<a:Code>CREATE_USER_NAME</a:Code>
+<a:CreationDate>1695276408</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276463</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓浜哄鍚�</a:Comment>
+<a:DataType>varchar(28)</a:DataType>
+<a:Length>28</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o126">
+<a:ObjectID>1F674C54-5441-4F6C-9555-DB6A11739752</a:ObjectID>
+<a:Name>鍒涘缓鏃堕棿</a:Name>
+<a:Code>CREATE_TIME</a:Code>
+<a:CreationDate>1695276408</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276463</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓鏃堕棿</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o127">
+<a:ObjectID>629F41E8-EF28-42DD-8B71-38FF6D6A494A</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Key.Columns>
+<o:Column Ref="o112"/>
+</c:Key.Columns>
+</o:Key>
+<o:Key Id="o128">
+<a:ObjectID>B9798B4B-FB11-4AD7-B9EE-E03541D60EE3</a:ObjectID>
+<a:Name>Key_2</a:Name>
+<a:Code>Key_2</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:ConstraintName>STAGE_SORT</a:ConstraintName>
+<a:ExtendedAttributesText>{F4F16ECD-F2F1-4006-AF6F-638D5C65F35E},MYSQL50,57={D1C795B8-8F7B-4AA7-A240-85C5B737C543},ExtUnique,4=true
+
+</a:ExtendedAttributesText>
+<c:Key.Columns>
+<o:Column Ref="o118"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o127"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o35">
+<a:ObjectID>C4EA1E13-A446-455D-8E2C-524875E2AF74</a:ObjectID>
+<a:Name>椤圭洰闃舵鑺傜偣搴揫P_TEMP_STAGE_NODE]</a:Name>
+<a:Code>P_TEMP_STAGE_NODE</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276230</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰闃舵鑺傜偣搴�</a:Comment>
+<a:GlobalObjectID/>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o129">
+<a:ObjectID>EF84BBEB-9F9C-41A3-B23B-5C9009A8034F</a:ObjectID>
+<a:Name>id</a:Name>
+<a:Code>id</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o130">
+<a:ObjectID>163E4F7D-6F93-47F7-A527-3FDF67F09B47</a:ObjectID>
+<a:Name>闃舵id</a:Name>
+<a:Code>STAGE_ID</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>闃舵id</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o131">
+<a:ObjectID>3B32B34F-6AF4-4C8A-BB9B-758B6AE831AA</a:ObjectID>
+<a:Name>鍚嶇О</a:Name>
+<a:Code>NODE_NAME</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍚嶇О</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o132">
+<a:ObjectID>A530D2CD-9DB8-49AB-910C-B9F0F56F1A93</a:ObjectID>
+<a:Name>鐘舵��</a:Name>
+<a:Code>STATUS</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鐘舵�� 0鍏抽棴1寮�鍚�</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o133">
+<a:ObjectID>7F7BAC31-50AE-4A77-8C98-D8975E765B5C</a:ObjectID>
+<a:Name>鎺掑簭</a:Name>
+<a:Code>SORT</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鎺掑簭 涓嶈兘閲嶅</a:Comment>
+<a:DataType>int</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o134">
+<a:ObjectID>C33C78BC-229B-481D-BDC6-726370FD2A47</a:ObjectID>
+<a:Name>澶囨敞</a:Name>
+<a:Code>REMARK</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>澶囨敞</a:Comment>
+<a:DataType>varchar(1024)</a:DataType>
+<a:Length>1024</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o135">
+<a:ObjectID>BDEA0049-119E-4235-B975-766022514242</a:ObjectID>
+<a:Name>鏄惁鍒犻櫎</a:Name>
+<a:Code>IS_DELETE</a:Code>
+<a:CreationDate>1695276149</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276230</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>閫昏緫鍒犻櫎(0 鍚� 1 鏄�)</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o136">
+<a:ObjectID>1C915F9D-E176-4104-B2BB-AF38518D90E0</a:ObjectID>
+<a:Name>鍒犻櫎鏃堕棿</a:Name>
+<a:Code>DELETE_TIME</a:Code>
+<a:CreationDate>1695276149</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276230</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒犻櫎鏃堕棿</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o137">
+<a:ObjectID>698F84DC-13DB-40D4-8B72-9DCD0C7A6548</a:ObjectID>
+<a:Name>鍒犻櫎浜�</a:Name>
+<a:Code>DELETE_USER_ID</a:Code>
+<a:CreationDate>1695276149</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276230</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒犻櫎浜�</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o138">
+<a:ObjectID>2C187839-BE8E-4E0B-A7F1-96A39089CC8E</a:ObjectID>
+<a:Name>鍒犻櫎浜哄鍚�</a:Name>
+<a:Code>DELETE_USER_NAME</a:Code>
+<a:CreationDate>1695276149</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276230</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒犻櫎浜哄鍚�</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o139">
+<a:ObjectID>1D5CD6BB-B53C-4765-A0AF-E105CA8C0332</a:ObjectID>
+<a:Name>鍒涘缓浜�</a:Name>
+<a:Code>CREATE_USER_ID</a:Code>
+<a:CreationDate>1695276149</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276230</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓浜�</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o140">
+<a:ObjectID>D8735AF2-FE5F-4F8B-BE01-F87835A3F8A3</a:ObjectID>
+<a:Name>鍒涘缓浜哄鍚�</a:Name>
+<a:Code>CREATE_USER_NAME</a:Code>
+<a:CreationDate>1695276149</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276230</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓浜哄鍚�</a:Comment>
+<a:DataType>varchar(28)</a:DataType>
+<a:Length>28</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o141">
+<a:ObjectID>2AAAC35B-B3DF-40EF-BAC2-3100F768A4A2</a:ObjectID>
+<a:Name>鍒涘缓鏃堕棿</a:Name>
+<a:Code>CREATE_TIME</a:Code>
+<a:CreationDate>1695276149</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276230</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓鏃堕棿</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o142">
+<a:ObjectID>558D3ED2-120C-4289-B4B5-DA15CAACFFFA</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Key.Columns>
+<o:Column Ref="o129"/>
+</c:Key.Columns>
+</o:Key>
+<o:Key Id="o143">
+<a:ObjectID>302BED4F-F687-4B7D-A1AF-3F8276639FBB</a:ObjectID>
+<a:Name>Key_2</a:Name>
+<a:Code>Key_2</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:ConstraintName>STAGE_NODE_SORT</a:ConstraintName>
+<a:ExtendedAttributesText>{F4F16ECD-F2F1-4006-AF6F-638D5C65F35E},MYSQL50,57={D1C795B8-8F7B-4AA7-A240-85C5B737C543},ExtUnique,4=true
+
+</a:ExtendedAttributesText>
+<c:Key.Columns>
+<o:Column Ref="o130"/>
+<o:Column Ref="o133"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o142"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o34">
+<a:ObjectID>F9DAE7D1-2301-4446-A22D-87AC80968684</a:ObjectID>
+<a:Name>椤圭洰闃舵搴揫P_TEMP_STAGE]</a:Name>
+<a:Code>P_TEMP_STAGE</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276137</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰闃舵搴�</a:Comment>
+<a:GlobalObjectID/>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o144">
+<a:ObjectID>E572CA15-C502-4780-BDF9-618407FA1734</a:ObjectID>
+<a:Name>id</a:Name>
+<a:Code>ID</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o145">
+<a:ObjectID>6B3AD520-52C6-424E-967F-E0826171BB46</a:ObjectID>
+<a:Name>闃舵鍚嶇О</a:Name>
+<a:Code>STAGE_NAME</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>闃舵鍚嶇О</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o146">
+<a:ObjectID>885D9E6B-D325-400F-A5B5-9B8F5EDA08FD</a:ObjectID>
+<a:Name>鐘舵��</a:Name>
+<a:Code>STATUS</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鐘舵�� 0鍏抽棴1寮�鍚�</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o147">
+<a:ObjectID>4493FF45-2D7D-4762-BF15-98F2B218B5D6</a:ObjectID>
+<a:Name>鎺掑簭</a:Name>
+<a:Code>SORT</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鎺掑簭锛屼笉鑳介噸澶�</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o148">
+<a:ObjectID>3C7F559D-E1AC-46DB-83E9-9FC6996F4E60</a:ObjectID>
+<a:Name>澶囨敞</a:Name>
+<a:Code>REMARK</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>澶囨敞</a:Comment>
+<a:DataType>varchar(1024)</a:DataType>
+<a:Length>1024</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o149">
+<a:ObjectID>D68808D4-B396-4068-AEC3-4F601E1D55BF</a:ObjectID>
+<a:Name>鏄惁鍒犻櫎</a:Name>
+<a:Code>IS_DELETE</a:Code>
+<a:CreationDate>1695203055</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276088</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>閫昏緫鍒犻櫎(0 鍚� 1 鏄�)</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o150">
+<a:ObjectID>4BAF1808-938B-4D73-87D6-1B4F64C155F2</a:ObjectID>
+<a:Name>鍒犻櫎鏃堕棿</a:Name>
+<a:Code>DELETE_TIME</a:Code>
+<a:CreationDate>1695203055</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276125</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒犻櫎鏃堕棿</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o151">
+<a:ObjectID>DBFE5F26-0B09-4171-A4D8-7DDA1285E280</a:ObjectID>
+<a:Name>鍒犻櫎浜�</a:Name>
+<a:Code>DELETE_USER_ID</a:Code>
+<a:CreationDate>1695203055</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276125</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒犻櫎浜�</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o152">
+<a:ObjectID>324C8646-8115-47F8-834A-A517CD5D61FD</a:ObjectID>
+<a:Name>鍒犻櫎浜哄鍚�</a:Name>
+<a:Code>DELETE_USER_NAME</a:Code>
+<a:CreationDate>1695275926</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276125</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒犻櫎浜哄鍚�</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o153">
+<a:ObjectID>5AE4196A-AEA2-493E-A7F1-BED8FA035A0D</a:ObjectID>
+<a:Name>鍒涘缓浜�</a:Name>
+<a:Code>CREATE_USER_ID</a:Code>
+<a:CreationDate>1695276125</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276137</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓浜�</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o154">
+<a:ObjectID>1269F2FB-D754-4F32-B19C-4BE4A39E5ED3</a:ObjectID>
+<a:Name>鍒涘缓浜哄鍚�</a:Name>
+<a:Code>CREATE_USER_NAME</a:Code>
+<a:CreationDate>1695276125</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276137</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓浜哄鍚�</a:Comment>
+<a:DataType>varchar(28)</a:DataType>
+<a:Length>28</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o155">
+<a:ObjectID>C6BD80D1-DEC5-4466-98D8-D29823E4828D</a:ObjectID>
+<a:Name>鍒涘缓鏃堕棿</a:Name>
+<a:Code>CREATE_TIME</a:Code>
+<a:CreationDate>1695276125</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695276137</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓鏃堕棿</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o156">
+<a:ObjectID>DE99A5F1-33F9-40AC-8674-2719371A8256</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Key.Columns>
+<o:Column Ref="o144"/>
+</c:Key.Columns>
+</o:Key>
+<o:Key Id="o157">
+<a:ObjectID>873815CC-982C-4C8A-B42E-63A5D340C7D0</a:ObjectID>
+<a:Name>Key_2</a:Name>
+<a:Code>Key_2</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:ConstraintName>STAGE_SORT</a:ConstraintName>
+<a:ExtendedAttributesText>{F4F16ECD-F2F1-4006-AF6F-638D5C65F35E},MYSQL50,57={D1C795B8-8F7B-4AA7-A240-85C5B737C543},ExtUnique,4=true
+
+</a:ExtendedAttributesText>
+<c:Key.Columns>
+<o:Column Ref="o147"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o156"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o55">
+<a:ObjectID>1BF82488-C883-475C-B847-9D738AC6B192</a:ObjectID>
+<a:Name>椤圭洰涓存湡棰勮妯℃澘[P_TEMP_EXPIRATION_NOTIFY]</a:Name>
+<a:Code>P_TEMP_EXPIRATION_NOTIFY</a:Code>
+<a:CreationDate>1695366627</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695368745</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰涓存湡棰勮妯℃澘</a:Comment>
+<a:GlobalObjectID/>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o158">
+<a:ObjectID>3CD5F31A-F7DD-405B-BC58-BA705E33D7FD</a:ObjectID>
+<a:Name>id</a:Name>
+<a:Code>id</a:Code>
+<a:CreationDate>1695366627</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695366627</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o159">
+<a:ObjectID>22C418B1-3EFC-4D80-B91E-ACF0C0CB80AE</a:ObjectID>
+<a:Name>棰勮妯℃澘鍚嶇О</a:Name>
+<a:Code>TEMP_EXPIRATION_NOTIFY_NAME</a:Code>
+<a:CreationDate>1695366704</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695448911</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>棰勮妯℃澘鍚嶇О</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o160">
+<a:ObjectID>B0CDE073-5233-42D0-A1CD-2F39575B9033</a:ObjectID>
+<a:Name>棰勮妯℃澘缂栧彿</a:Name>
+<a:Code>TEMP_EXPIRATION_NOTIFY_CODE</a:Code>
+<a:CreationDate>1695366704</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695448911</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>棰勮妯℃澘缂栧彿锛屽敮涓�</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o161">
+<a:ObjectID>54FEA2E8-DE62-4075-A8DD-15A29D326ECD</a:ObjectID>
+<a:Name>涓存湡鍓�1</a:Name>
+<a:Code>EXPIRE_BEFORE_1</a:Code>
+<a:CreationDate>1695366627</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695366627</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>涓存湡鍓�1</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o162">
+<a:ObjectID>0A4DF9E1-ADD7-4B69-9CE2-10983394A3C5</a:ObjectID>
+<a:Name>涓存湡鍓嶆槸鍚﹂�氱煡椤圭洰缁忕悊1</a:Name>
+<a:Code>BEFORE_MANAGER_NOTIFY_1</a:Code>
+<a:CreationDate>1695368013</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695368322</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>涓存湡鍓嶆槸鍚﹂�氱煡椤圭洰缁忕悊1</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o163">
+<a:ObjectID>859D5E5E-A686-4FB8-A5D9-F53BBC6DAC72</a:ObjectID>
+<a:Name>涓存湡鍓�2</a:Name>
+<a:Code>EXPIRE_BEFORE_2</a:Code>
+<a:CreationDate>1695366627</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695366627</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>涓存湡鍓�2</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o164">
+<a:ObjectID>3D6D1A80-11A1-4C7A-84C8-3CF02EFA0066</a:ObjectID>
+<a:Name>涓存湡鍓嶆槸鍚﹂�氱煡椤圭洰缁忕悊2</a:Name>
+<a:Code>BEFORE_MANAGER_NOTIFY_2</a:Code>
+<a:CreationDate>1695368013</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695368322</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>涓存湡鍓嶆槸鍚﹂�氱煡椤圭洰缁忕悊2 </a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o165">
+<a:ObjectID>2AA77517-149B-4DEB-9FAB-7591CB107ED9</a:ObjectID>
+<a:Name>涓存湡鍓�3</a:Name>
+<a:Code>EXPIRE_BEFORE_3</a:Code>
+<a:CreationDate>1695366627</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695366627</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>涓存湡鍓�3</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o166">
+<a:ObjectID>72D61B08-87EE-4393-A28F-54BED31496D6</a:ObjectID>
+<a:Name>涓存湡鍓嶆槸鍚﹂�氱煡椤圭洰缁忕悊3</a:Name>
+<a:Code>BEFORE_MANAGER_NOTIFY_3</a:Code>
+<a:CreationDate>1695368013</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695368322</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>涓存湡鍓嶆槸鍚﹂�氱煡椤圭洰缁忕悊3</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o167">
+<a:ObjectID>3BA47DD7-3F34-42A7-94DE-AF0428D56A78</a:ObjectID>
+<a:Name>瓒呮湡鍚�1</a:Name>
+<a:Code>EXPIRE_AFTER_1</a:Code>
+<a:CreationDate>1695366627</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695366627</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>瓒呮湡鍚�1</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o168">
+<a:ObjectID>D6D44CDD-0BDB-40EC-B9F1-65E5E7B36EE2</a:ObjectID>
+<a:Name>瓒呮湡鍚庢槸鍚﹂�氱煡椤圭洰缁忕悊1</a:Name>
+<a:Code>AFTER_MANAGER_NOTIFY_1</a:Code>
+<a:CreationDate>1695368240</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695368322</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>瓒呮湡鍚庢槸鍚﹂�氱煡椤圭洰缁忕悊1</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o169">
+<a:ObjectID>663AB511-CDE2-4F3A-A360-C05442BC2847</a:ObjectID>
+<a:Name>瓒呮湡鍚�2</a:Name>
+<a:Code>EXPIRE_AFTER_2</a:Code>
+<a:CreationDate>1695366627</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695366627</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>瓒呮湡鍚�2</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o170">
+<a:ObjectID>D29A7BE7-5C22-4AEF-88C2-6039AA3A2E88</a:ObjectID>
+<a:Name>瓒呮湡鍚庢槸鍚﹂�氱煡椤圭洰缁忕悊2</a:Name>
+<a:Code>AFTER_MANAGER_NOTIFY_2</a:Code>
+<a:CreationDate>1695368322</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695368347</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>瓒呮湡鍚庢槸鍚﹂�氱煡椤圭洰缁忕悊2</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o171">
+<a:ObjectID>AFA41952-F7B8-4689-8291-2E57CEA1C807</a:ObjectID>
+<a:Name>瓒呮湡鍚�3</a:Name>
+<a:Code>EXPIRE_AFTER_3</a:Code>
+<a:CreationDate>1695366627</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695366627</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>瓒呮湡鍚�3</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o172">
+<a:ObjectID>CEBBAFAA-90F0-4681-A969-642EF003C218</a:ObjectID>
+<a:Name>瓒呮湡鍚庢槸鍚﹂�氱煡椤圭洰缁忕悊3</a:Name>
+<a:Code>AFTER_MANAGER_NOTIFY_3</a:Code>
+<a:CreationDate>1695368322</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695368347</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>瓒呮湡鍚庢槸鍚﹂�氱煡椤圭洰缁忕悊3</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o173">
+<a:ObjectID>2831F419-CF7E-4A74-8F2F-C8289765D0B8</a:ObjectID>
+<a:Name>寰俊棰勮寮�鍏�</a:Name>
+<a:Code>NOTIFY_WX</a:Code>
+<a:CreationDate>1695366627</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695368745</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>寰俊棰勮寮�鍏� 0 鍏� 1 寮�</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o174">
+<a:ObjectID>562EFD26-D05C-4653-8D39-BFDA93390A6B</a:ObjectID>
+<a:Name>鐭俊棰勮寮�鍏�</a:Name>
+<a:Code>NOTIFY_MOB_MSG</a:Code>
+<a:CreationDate>1695368462</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695368745</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鐭俊棰勮寮�鍏� 0 鍏� 1 寮�</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o175">
+<a:ObjectID>A18C35AB-3A3E-46A3-85B8-6D316820DC83</a:ObjectID>
+<a:Name>棰勮鐭俊鍙戦�佹柟寮�</a:Name>
+<a:Code>NOTIFY_MOB_MSG_WAY</a:Code>
+<a:CreationDate>1695366627</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695366627</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>棰勮鐭俊鍙戦�佹柟寮� 0 鑷姩鍙戦�� 1 鎵嬪姩鍙戦��</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o176">
+<a:ObjectID>925EA3A9-1016-451B-8862-F13821A64E74</a:ObjectID>
+<a:Name>棰勮鎵嬫満鍙�</a:Name>
+<a:Code>NOTIFY_MOB</a:Code>
+<a:CreationDate>1695366627</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695366627</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>棰勮鎵嬫満鍙凤紝澶氫釜鎵嬫満鍙疯嫳鏂囬�楀彿闅斿紑</a:Comment>
+<a:DataType>varchar(1024)</a:DataType>
+<a:Length>1024</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o177">
+<a:ObjectID>AEBCB1BC-300E-4042-BB20-432857CD6157</a:ObjectID>
+<a:Name>棰勮鑷姩鍙戦�佹椂闂�</a:Name>
+<a:Code>NOTIFY_TIME</a:Code>
+<a:CreationDate>1695366627</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695456111</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>棰勮鑷姩鍙戦�佹椂闂�0-23涔嬮棿鏁存暟</a:Comment>
+<a:DefaultValue>8</a:DefaultValue>
+<a:DataType>smallint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o178">
+<a:ObjectID>4784C865-0D16-4A6E-BF65-BA747CCF0D0E</a:ObjectID>
+<a:Name>鐘舵��</a:Name>
+<a:Code>STATUS</a:Code>
+<a:CreationDate>1695366704</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695366751</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鐘舵�� 0鍏抽棴1寮�鍚�</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o179">
+<a:ObjectID>7E3B1A2B-42D7-4AC3-A74D-46985F5FE9A1</a:ObjectID>
+<a:Name>鏄惁鍒犻櫎</a:Name>
+<a:Code>IS_DELETE</a:Code>
+<a:CreationDate>1695366751</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695367046</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>閫昏緫鍒犻櫎(0 鍚� 1 鏄�)</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o180">
+<a:ObjectID>2CCA1FCF-27A9-47B6-907E-9ECE56DA975D</a:ObjectID>
+<a:Name>鍒犻櫎鏃堕棿</a:Name>
+<a:Code>DELETE_TIME</a:Code>
+<a:CreationDate>1695366751</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695367046</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒犻櫎鏃堕棿</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o181">
+<a:ObjectID>FFE78EC7-A246-4F12-BBEB-C69BBAF929D4</a:ObjectID>
+<a:Name>鍒犻櫎浜�</a:Name>
+<a:Code>DELETE_USER_ID</a:Code>
+<a:CreationDate>1695366751</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695367046</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒犻櫎浜�</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o182">
+<a:ObjectID>BAB1DB29-062B-4EED-97ED-6064752C5C7F</a:ObjectID>
+<a:Name>鍒犻櫎浜哄鍚�</a:Name>
+<a:Code>DELETE_USER_NAME</a:Code>
+<a:CreationDate>1695366751</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695367046</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒犻櫎浜哄鍚�</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o183">
+<a:ObjectID>AF4FB214-8054-47BE-BD7D-047AB98A1854</a:ObjectID>
+<a:Name>鍒涘缓浜�</a:Name>
+<a:Code>CREATE_USER_ID</a:Code>
+<a:CreationDate>1695366751</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695367046</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓浜�</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o184">
+<a:ObjectID>D7FB9516-7472-4671-ACF3-4EA66208237F</a:ObjectID>
+<a:Name>鍒涘缓浜哄鍚�</a:Name>
+<a:Code>CREATE_USER_NAME</a:Code>
+<a:CreationDate>1695366751</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695367046</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓浜哄鍚�</a:Comment>
+<a:DataType>varchar(28)</a:DataType>
+<a:Length>28</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o185">
+<a:ObjectID>7C8F9DAB-AD19-4B78-8779-C47AC9E8BF1B</a:ObjectID>
+<a:Name>鍒涘缓鏃堕棿</a:Name>
+<a:Code>CREATE_TIME</a:Code>
+<a:CreationDate>1695366751</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695367046</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓鏃堕棿</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o186">
+<a:ObjectID>F07B8F60-2815-49E4-956B-D962A0334D91</a:ObjectID>
+<a:Name>鍒涘缓浜烘満鏋勫悕绉�</a:Name>
+<a:Code>CREATE_ORG_NAME</a:Code>
+<a:CreationDate>1695367263</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695367330</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓浜烘満鏋勫悕绉�</a:Comment>
+<a:DataType>varchar(128)</a:DataType>
+<a:Length>128</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o187">
+<a:ObjectID>B8F2163C-9A64-4076-A6E4-A07295B5D9D1</a:ObjectID>
+<a:Name>鍒涘缓浜烘満鏋�</a:Name>
+<a:Code>CREATE_ORG_ID</a:Code>
+<a:CreationDate>1695367263</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695367330</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓鏈烘瀯</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o188">
+<a:ObjectID>A88C9DAA-C077-4FB3-874D-8E29C79C9E67</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1695366627</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695366627</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Key.Columns>
+<o:Column Ref="o158"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o188"/>
+</c:PrimaryKey>
+</o:Table>
+</c:Tables>
+<c:References>
+<o:Reference Id="o40">
+<a:ObjectID>336A1824-425C-4E3F-A0D4-1D448021642F</a:ObjectID>
+<a:Name>Reference_20</a:Name>
+<a:Code>Reference_20</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:Cardinality>0..*</a:Cardinality>
+<a:UpdateConstraint>1</a:UpdateConstraint>
+<a:DeleteConstraint>1</a:DeleteConstraint>
+<c:ParentTable>
+<o:Table Ref="o47"/>
+</c:ParentTable>
+<c:ChildTable>
+<o:Table Ref="o48"/>
+</c:ChildTable>
+<c:ParentKey>
+<o:Key Ref="o79"/>
+</c:ParentKey>
+<c:Joins>
+<o:ReferenceJoin Id="o189">
+<a:ObjectID>BE783192-69E8-4ACC-9FCB-E6D7883A4C94</a:ObjectID>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Object1>
+<o:Column Ref="o62"/>
+</c:Object1>
+</o:ReferenceJoin>
+</c:Joins>
+</o:Reference>
+<o:Reference Id="o17">
+<a:ObjectID>FA0074D6-3A6B-45E9-A385-077FDBA0ECB6</a:ObjectID>
+<a:Name>Reference_19</a:Name>
+<a:Code>Reference_19</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:Cardinality>0..*</a:Cardinality>
+<a:UpdateConstraint>1</a:UpdateConstraint>
+<a:DeleteConstraint>1</a:DeleteConstraint>
+<c:ParentTable>
+<o:Table Ref="o35"/>
+</c:ParentTable>
+<c:ChildTable>
+<o:Table Ref="o47"/>
+</c:ChildTable>
+<c:ParentKey>
+<o:Key Ref="o142"/>
+</c:ParentKey>
+<c:Joins>
+<o:ReferenceJoin Id="o190">
+<a:ObjectID>AC8BFF81-EDC4-4F21-BD21-01725A9386D5</a:ObjectID>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Object1>
+<o:Column Ref="o129"/>
+</c:Object1>
+</o:ReferenceJoin>
+</c:Joins>
+</o:Reference>
+<o:Reference Id="o42">
+<a:ObjectID>D0611BCA-2DDB-4FAA-AABB-B1E62F08C2F9</a:ObjectID>
+<a:Name>Reference_18</a:Name>
+<a:Code>Reference_18</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:Cardinality>0..*</a:Cardinality>
+<a:UpdateConstraint>1</a:UpdateConstraint>
+<a:DeleteConstraint>1</a:DeleteConstraint>
+<c:ParentTable>
+<o:Table Ref="o46"/>
+</c:ParentTable>
+<c:ChildTable>
+<o:Table Ref="o47"/>
+</c:ChildTable>
+<c:ParentKey>
+<o:Key Ref="o93"/>
+</c:ParentKey>
+<c:Joins>
+<o:ReferenceJoin Id="o191">
+<a:ObjectID>409B396D-FDB3-48B4-8213-4A8CD337798D</a:ObjectID>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Object1>
+<o:Column Ref="o81"/>
+</c:Object1>
+</o:ReferenceJoin>
+</c:Joins>
+</o:Reference>
+<o:Reference Id="o13">
+<a:ObjectID>ECFFD264-1D38-4B0B-95B8-E79ECD3247B8</a:ObjectID>
+<a:Name>Reference_17</a:Name>
+<a:Code>Reference_17</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:Cardinality>0..*</a:Cardinality>
+<a:UpdateConstraint>1</a:UpdateConstraint>
+<a:DeleteConstraint>1</a:DeleteConstraint>
+<c:ParentTable>
+<o:Table Ref="o34"/>
+</c:ParentTable>
+<c:ChildTable>
+<o:Table Ref="o46"/>
+</c:ChildTable>
+<c:ParentKey>
+<o:Key Ref="o156"/>
+</c:ParentKey>
+<c:Joins>
+<o:ReferenceJoin Id="o192">
+<a:ObjectID>88B20A1D-E19D-465E-B558-F2DC9F0971EE</a:ObjectID>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Object1>
+<o:Column Ref="o144"/>
+</c:Object1>
+</o:ReferenceJoin>
+</c:Joins>
+</o:Reference>
+<o:Reference Id="o44">
+<a:ObjectID>5C35EA24-8244-4CC4-8AD1-25EC370993E6</a:ObjectID>
+<a:Name>Reference_16</a:Name>
+<a:Code>Reference_16</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:Cardinality>0..*</a:Cardinality>
+<a:UpdateConstraint>1</a:UpdateConstraint>
+<a:DeleteConstraint>1</a:DeleteConstraint>
+<c:ParentTable>
+<o:Table Ref="o45"/>
+</c:ParentTable>
+<c:ChildTable>
+<o:Table Ref="o46"/>
+</c:ChildTable>
+<c:ParentKey>
+<o:Key Ref="o127"/>
+</c:ParentKey>
+<c:Joins>
+<o:ReferenceJoin Id="o193">
+<a:ObjectID>8BDD4783-4019-4085-BD4E-9457FF24EE3A</a:ObjectID>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Object1>
+<o:Column Ref="o112"/>
+</c:Object1>
+</o:ReferenceJoin>
+</c:Joins>
+</o:Reference>
+<o:Reference Id="o27">
+<a:ObjectID>494A10DB-5BF3-48C1-BAD6-7FF22AD24C7E</a:ObjectID>
+<a:Name>Reference_6</a:Name>
+<a:Code>Reference_6</a:Code>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:Cardinality>0..*</a:Cardinality>
+<a:UpdateConstraint>1</a:UpdateConstraint>
+<a:DeleteConstraint>1</a:DeleteConstraint>
+<c:ParentTable>
+<o:Table Ref="o28"/>
+</c:ParentTable>
+<c:ChildTable>
+<o:Table Ref="o29"/>
+</c:ChildTable>
+<c:ParentKey>
+<o:Key Ref="o99"/>
+</c:ParentKey>
+<c:Joins>
+<o:ReferenceJoin Id="o194">
+<a:ObjectID>E539B412-6493-4E54-AF5A-967C8422962F</a:ObjectID>
+<a:CreationDate>1695192387</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192387</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Object1>
+<o:Column Ref="o94"/>
+</c:Object1>
+</o:ReferenceJoin>
+</c:Joins>
+</o:Reference>
+<o:Reference Id="o33">
+<a:ObjectID>278ADE14-6D20-4F57-92C1-846748D8256A</a:ObjectID>
+<a:Name>Reference_8</a:Name>
+<a:Code>Reference_8</a:Code>
+<a:CreationDate>1695194913</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695194921</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:Cardinality>0..*</a:Cardinality>
+<a:UpdateConstraint>1</a:UpdateConstraint>
+<a:DeleteConstraint>1</a:DeleteConstraint>
+<c:ParentTable>
+<o:Table Ref="o34"/>
+</c:ParentTable>
+<c:ChildTable>
+<o:Table Ref="o35"/>
+</c:ChildTable>
+<c:ParentKey>
+<o:Key Ref="o156"/>
+</c:ParentKey>
+<c:Joins>
+<o:ReferenceJoin Id="o195">
+<a:ObjectID>43368498-2B33-4604-8FD6-75197779A364</a:ObjectID>
+<a:CreationDate>1695194913</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695194921</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Object1>
+<o:Column Ref="o144"/>
+</c:Object1>
+</o:ReferenceJoin>
+</c:Joins>
+</o:Reference>
+<o:Reference Id="o21">
+<a:ObjectID>BEB3888B-68A6-459A-B008-4854F82D54E2</a:ObjectID>
+<a:Name>Reference_13</a:Name>
+<a:Code>Reference_13</a:Code>
+<a:CreationDate>1695277362</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277377</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:Cardinality>0..*</a:Cardinality>
+<a:UpdateConstraint>1</a:UpdateConstraint>
+<a:DeleteConstraint>1</a:DeleteConstraint>
+<c:ParentTable>
+<o:Table Ref="o45"/>
+</c:ParentTable>
+<c:ChildTable>
+<o:Table Ref="o29"/>
+</c:ChildTable>
+<c:ParentKey>
+<o:Key Ref="o127"/>
+</c:ParentKey>
+<c:Joins>
+<o:ReferenceJoin Id="o196">
+<a:ObjectID>98DE8036-386B-4906-BA3D-6F48D4265C64</a:ObjectID>
+<a:CreationDate>1695277362</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277377</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Object1>
+<o:Column Ref="o112"/>
+</c:Object1>
+</o:ReferenceJoin>
+</c:Joins>
+</o:Reference>
+<o:Reference Id="o23">
+<a:ObjectID>F08711BF-3903-4EC0-8605-C9F168BCB8DF</a:ObjectID>
+<a:Name>Reference_25</a:Name>
+<a:Code>Reference_25</a:Code>
+<a:CreationDate>1695278624</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695278633</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:Cardinality>0..*</a:Cardinality>
+<a:UpdateConstraint>1</a:UpdateConstraint>
+<a:DeleteConstraint>1</a:DeleteConstraint>
+<c:ParentTable>
+<o:Table Ref="o47"/>
+</c:ParentTable>
+<c:ChildTable>
+<o:Table Ref="o29"/>
+</c:ChildTable>
+<c:ParentKey>
+<o:Key Ref="o79"/>
+</c:ParentKey>
+<c:Joins>
+<o:ReferenceJoin Id="o197">
+<a:ObjectID>8B50B83E-74C4-4A62-A2E7-B6D7B3DC563E</a:ObjectID>
+<a:CreationDate>1695278624</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695278633</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Object1>
+<o:Column Ref="o62"/>
+</c:Object1>
+</o:ReferenceJoin>
+</c:Joins>
+</o:Reference>
+</c:References>
+<c:ArchitectureAreas>
+<o:Area Id="o30">
+<a:ObjectID>F0944E7A-E026-4981-8E08-9969364F1D55</a:ObjectID>
+<a:Name>椤圭洰鐪嬫澘妯℃澘</a:Name>
+<a:Code>椤圭洰鐪嬫澘妯℃澘</a:Code>
+<a:CreationDate>1695194807</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695194865</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:AttachedObjects>
+<o:Table Ref="o28"/>
+<o:Table Ref="o29"/>
+</c:AttachedObjects>
+</o:Area>
+<o:Area Id="o36">
+<a:ObjectID>29363635-AAF2-4B02-8A6A-40EEB843E827</a:ObjectID>
+<a:Name>闃舵銆佽妭鐐瑰簱</a:Name>
+<a:Code>闃舵銆佽妭鐐瑰簱</a:Code>
+<a:CreationDate>1695194811</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695194913</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:AttachedObjects>
+<o:Table Ref="o34"/>
+<o:Table Ref="o35"/>
+<o:Reference Ref="o33"/>
+</c:AttachedObjects>
+</o:Area>
+<o:Area Id="o49">
+<a:ObjectID>0847A1A9-7E48-4F74-AC45-C088F44432A6</a:ObjectID>
+<a:Name>椤圭洰闃舵鑺傜偣妯℃澘</a:Name>
+<a:Code>椤圭洰闃舵鑺傜偣妯℃澘</a:Code>
+<a:CreationDate>1695194816</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695195056</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:AttachedObjects>
+<o:Table Ref="o45"/>
+<o:Table Ref="o46"/>
+<o:Table Ref="o47"/>
+<o:Table Ref="o48"/>
+</c:AttachedObjects>
+</o:Area>
+<o:Area Id="o56">
+<a:ObjectID>ECA26BDA-600A-46C8-AF9B-FBF5D6FCF4D2</a:ObjectID>
+<a:Name>涓存湡棰勮</a:Name>
+<a:Code>涓存湡棰勮</a:Code>
+<a:CreationDate>1695366573</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695368892</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:AttachedObjects>
+<o:Table Ref="o53"/>
+<o:Table Ref="o55"/>
+</c:AttachedObjects>
+</o:Area>
+</c:ArchitectureAreas>
+</o:Package>
+<o:Package Id="o8">
+<a:ObjectID>5B610042-C93D-42D0-A762-6D9E01D0104D</a:ObjectID>
+<a:Name>2.椤圭洰绠$悊鍖�</a:Name>
+<a:Code>2.椤圭洰绠$悊鍖�</a:Code>
+<a:CreationDate>1695192630</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695375513</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:PhysicalDiagrams>
+<o:PhysicalDiagram Id="o198">
+<a:ObjectID>9601CB9F-3AEA-479A-A3CC-4292A766FACA</a:ObjectID>
+<a:Name>椤圭洰绠$悊</a:Name>
+<a:Code>椤圭洰绠$悊</a:Code>
+<a:CreationDate>1695192630</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695371367</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:DisplayPreferences>[DisplayPreferences]
+
+[DisplayPreferences\PDM]
+
+[DisplayPreferences\General]
+Adjust to text=Yes
+Snap Grid=No
+Constrain Labels=Yes
+Display Grid=No
+Show Page Delimiter=Yes
+Show Links intersections=Yes
+Activate automatic link routing=Yes
+Grid size=0
+Graphic unit=2
+Window color=255, 255, 255
+Background image=
+Background mode=8
+Watermark image=
+Watermark mode=8
+Show watermark on screen=No
+Gradient mode=0
+Gradient end color=255, 255, 255
+Show Swimlane=No
+SwimlaneVert=Yes
+TreeVert=No
+CompDark=0
+
+[DisplayPreferences\Object]
+Show Icon=No
+Mode=0
+Trunc Length=80
+Word Length=80
+Word Text=!&quot;&quot;#$%&amp;&#39;()*+,-./:;&lt;=&gt;?@[\]^_`{|}~
+Shortcut IntIcon=Yes
+Shortcut IntLoct=Yes
+Shortcut IntFullPath=No
+Shortcut IntLastPackage=Yes
+Shortcut ExtIcon=Yes
+Shortcut ExtLoct=No
+Shortcut ExtFullPath=No
+Shortcut ExtLastPackage=Yes
+Shortcut ExtIncludeModl=Yes
+Area.IconPicture=Yes
+Area.Stereotype=Yes
+Area.Comment=No
+Area.TextStyle=No
+Area.SubSymbols=Yes
+Area_SymbolLayout=&lt;Form&gt;[CRLF] &lt;StandardAttribute Name=&quot;Icon&quot; Attribute=&quot;IconPicture&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Area Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF] &lt;Separator Name=&quot;Separator&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Comment&quot; Attribute=&quot;Comment&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;LEFT&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Force top align&quot; Attribute=&quot;TextStyle&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF]&lt;/Form&gt;
+EObjShowStrn=Yes
+ExtendedObject.Comment=No
+ExtendedObject.IconPicture=No
+ExtendedObject.TextStyle=No
+ExtendedObject_SymbolLayout=
+ELnkShowStrn=Yes
+ELnkShowName=Yes
+ExtendedLink_SymbolLayout=
+ExtDpdShowStrn=Yes
+ExtendedDependency_SymbolLayout=&lt;Form&gt;[CRLF] &lt;Form Name=&quot;Center&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Source&quot; &gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Destination&quot; &gt;[CRLF] &lt;/Form&gt;[CRLF]&lt;/Form&gt;
+FileObject.Stereotype=No
+FileObject.DisplayName=Yes
+FileObject.LocationOrName=No
+FileObject.IconPicture=No
+FileObject.TextStyle=No
+FileObject.IconMode=Yes
+FileObject_SymbolLayout=
+Package.Stereotype=No
+Package.Comment=No
+Package.IconPicture=No
+Package.TextStyle=No
+Package_SymbolLayout=
+Display Model Version=Yes
+Table.Stereotype=Yes
+Table.DisplayName=Yes
+Table.OwnerDisplayName=No
+Table.Columns=Yes
+Table.Columns._Filter=&quot;All Columns&quot; PDMCOLNALL
+Table.Columns._Columns=Stereotype DataType KeyIndicator
+Table.Columns._Limit=-5
+Table.Keys=No
+Table.Keys._Columns=Stereotype Indicator
+Table.Indexes=No
+Table.Indexes._Columns=Stereotype
+Table.Triggers=No
+Table.Triggers._Columns=Stereotype
+Table.Comment=No
+Table.IconPicture=No
+Table.TextStyle=No
+Table_SymbolLayout=&lt;Form&gt;[CRLF] &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;ExclusiveChoice Name=&quot;Exclusive Choice&quot; Mandatory=&quot;Yes&quot; Display=&quot;HorizontalRadios&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Owner and Name&quot; Attribute=&quot;OwnerDisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/ExclusiveChoice&gt;[CRLF] &lt;Separator Name=&quot;Separator&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Columns&quot; Collection=&quot;Columns&quot; Columns=&quot;Stereotype No\r\nDisplayName Yes\r\nDataType No\r\nSymbolDataType No &amp;quot;Domain or Data type&amp;quot;\r\nDomain No\r\nKeyIndicator No\r\nIndexIndicator No\r\nNullStatus No&quot; Filters=&quot;&amp;quot;All Columns&amp;quot;  PDMCOLNALL &amp;quot;&amp;quot;\r\n&amp;quot;PK Columns&amp;quot;  PDMCOLNPK &amp;quot;\&amp;quot;PRIM \&amp;quot;TRUE\&amp;quot; TRUE\&amp;quot;&amp;quot;\r\n&amp;quot;Key Columns&amp;quot;  PDMCOLNKEY &amp;quot;\&amp;quot;KEYS \&amp;quot;TRUE\&amp;quot; TRUE\&amp;quot;&amp;quot;&quot; HasLimit=&quot;Yes&quot; HideEmpty=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Keys&quot; Collection=&quot;Keys&quot; Columns=&quot;Stereotype No\r\nDisplayName Yes\r\nIndicator No&quot; HasLimit=&quot;No&quot; HideEmpty=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Indexes&quot; Collection=&quot;Indexes&quot; Columns=&quot;Stereotype No\r\nDisplayName Yes\r\nIndicator No&quot; HasLimit=&quot;No&quot; HideEmpty=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Triggers&quot; Collection=&quot;Triggers&quot; Columns=&quot;Stereotype No\r\nDisplayName Yes&quot; HasLimit=&quot;No&quot; HideEmpty=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Comment&quot; Attribute=&quot;Comment&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;LEFT&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Icon&quot; Attribute=&quot;IconPicture&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Force top align&quot; Attribute=&quot;TextStyle&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF]&lt;/Form&gt;
+View.Stereotype=Yes
+View.DisplayName=Yes
+View.OwnerDisplayName=No
+View.Columns=Yes
+View.Columns._Columns=DisplayName
+View.Columns._Limit=-5
+View.TemporaryVTables=Yes
+View.Indexes=No
+View.Comment=No
+View.IconPicture=No
+View.TextStyle=No
+View_SymbolLayout=&lt;Form&gt;[CRLF] &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;ExclusiveChoice Name=&quot;Exclusive Choice&quot; Mandatory=&quot;Yes&quot; Display=&quot;HorizontalRadios&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Owner and Name&quot; Attribute=&quot;OwnerDisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/ExclusiveChoice&gt;[CRLF] &lt;Separator Name=&quot;Separator&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Columns&quot; Collection=&quot;Columns&quot; Columns=&quot;DisplayName No\r\nExpression No\r\nDataType No\r\nSymbolDataType No &amp;quot;Domain or Data type&amp;quot;\r\nIndexIndicator No&quot; HasLimit=&quot;Yes&quot; HideEmpty=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Tables&quot; Collection=&quot;TemporaryVTables&quot; Columns=&quot;Name Yes&quot; HasLimit=&quot;No&quot; HideEmpty=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Indexes&quot; Collection=&quot;Indexes&quot; Columns=&quot;DisplayName Yes&quot; HasLimit=&quot;No&quot; HideEmpty=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Comment&quot; Attribute=&quot;Comment&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;LEFT&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Icon&quot; Attribute=&quot;IconPicture&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Force top align&quot; Attribute=&quot;TextStyle&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF]&lt;/Form&gt;
+Procedure.Stereotype=No
+Procedure.DisplayName=Yes
+Procedure.OwnerDisplayName=No
+Procedure.Comment=No
+Procedure.IconPicture=No
+Procedure.TextStyle=No
+Procedure_SymbolLayout=&lt;Form&gt;[CRLF] &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;ExclusiveChoice Name=&quot;Exclusive Choice&quot; Mandatory=&quot;Yes&quot; Display=&quot;HorizontalRadios&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Owner and Name&quot; Attribute=&quot;OwnerDisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/ExclusiveChoice&gt;[CRLF] &lt;Separator Name=&quot;Separator&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Comment&quot; Attribute=&quot;Comment&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;LEFT&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Icon&quot; Attribute=&quot;IconPicture&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Force top align&quot; Attribute=&quot;TextStyle&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF]&lt;/Form&gt;
+Reference.Cardinality=No
+Reference.ImplementationType=No
+Reference.ChildRole=Yes
+Reference.Stereotype=Yes
+Reference.DisplayName=No
+Reference.ForeignKeyConstraintName=Yes
+Reference.JoinExpression=No
+Reference.Integrity=No
+Reference.ParentRole=Yes
+Reference_SymbolLayout=&lt;Form&gt;[CRLF] &lt;Form Name=&quot;Source&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Cardinality&quot; Attribute=&quot;Cardinality&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Implementation&quot; Attribute=&quot;ImplementationType&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Child Role&quot; Attribute=&quot;ChildRole&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Center&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;ExclusiveChoice Name=&quot;Exclusive Choice&quot; Mandatory=&quot;No&quot; Display=&quot;HorizontalRadios&quot; &gt;[CRLF]   &lt;StandardAttribute Name=&quot;Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]   &lt;StandardAttribute Name=&quot;Cons&amp;amp;traint Name&quot; Attribute=&quot;ForeignKeyConstraintName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;Cons&amp;amp;traint Name&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]   &lt;StandardAttribute Name=&quot;Join&quot; Attribute=&quot;JoinExpression&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;Join&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;/ExclusiveChoice&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Referential integrity&quot; Attribute=&quot;Integrity&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;Referential integrity&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Destination&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Parent Role&quot; Attribute=&quot;ParentRole&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF]&lt;/Form&gt;
+ViewReference.ChildRole=Yes
+ViewReference.Stereotype=Yes
+ViewReference.DisplayName=No
+ViewReference.JoinExpression=No
+ViewReference.ParentRole=Yes
+ViewReference_SymbolLayout=&lt;Form&gt;[CRLF] &lt;Form Name=&quot;Source&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Child Role&quot; Attribute=&quot;ChildRole&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Center&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;ExclusiveChoice Name=&quot;Exclusive Choice&quot; Mandatory=&quot;No&quot; Display=&quot;HorizontalRadios&quot; &gt;[CRLF]   &lt;StandardAttribute Name=&quot;Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]   &lt;StandardAttribute Name=&quot;Join Expression&quot; Attribute=&quot;JoinExpression&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;/ExclusiveChoice&gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Destination&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Parent Role&quot; Attribute=&quot;ParentRole&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF]&lt;/Form&gt;
+
+[DisplayPreferences\Symbol]
+
+[DisplayPreferences\Symbol\AREA]
+STRNFont=鏂板畫浣�,8,N
+STRNFont color=0 0 0
+DISPNAMEFont=鏂板畫浣�,8,N
+DISPNAMEFont color=0 0 0
+LABLFont=鏂板畫浣�,8,N
+LABLFont color=0 0 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=9600
+Height=8000
+Brush color=253 249 234
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=16
+Brush gradient color=245 230 173
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 121 98 6
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\FRMEOBJ]
+STRNFont=Arial,8,N
+STRNFont color=0, 0, 0
+DISPNAMEFont=Arial,8,N
+DISPNAMEFont color=0, 0, 0
+LABLFont=Arial,8,N
+LABLFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=6000
+Height=2000
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=64
+Brush gradient color=192 192 192
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 255 128 128
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\FRMELNK]
+CENTERFont=Arial,8,N
+CENTERFont color=0, 0, 0
+Line style=2
+Source Arrow=24
+Center Arrow=24
+Target Arrow=7
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 128 255
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\USRDEPD]
+CENTERFont=鏂板畫浣�,8,N
+CENTERFont color=0 0 0
+Line style=0
+Source Arrow=24
+Center Arrow=24
+Target Arrow=7
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=2 0 128 0 64
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\FILO]
+OBJSTRNFont=鏂板畫浣�,8,N
+OBJSTRNFont color=0 0 0
+DISPNAMEFont=鏂板畫浣�,8,N
+DISPNAMEFont color=0 0 0
+LCNMFont=鏂板畫浣�,8,N
+LCNMFont color=0 0 0
+AutoAdjustToText=Yes
+Keep aspect=Yes
+Keep center=Yes
+Keep size=No
+Width=2400
+Height=2400
+Brush color=255 255 255
+Fill Color=No
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 0 0 255
+Shadow color=192 192 192
+Shadow=-1
+
+[DisplayPreferences\Symbol\PDMPCKG]
+STRNFont=Arial,8,N
+STRNFont color=0, 0, 0
+DISPNAMEFont=Arial,8,N
+DISPNAMEFont color=0, 0, 0
+LABLFont=Arial,8,N
+LABLFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4800
+Height=3600
+Brush color=255 255 192
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 178 178 178
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\TABL]
+STRNFont=Arial,8,N
+STRNFont color=0 0 0
+DISPNAMEFont=Arial,8,N
+DISPNAMEFont color=0 0 0
+OWNRDISPNAMEFont=鏂板畫浣�,8,N
+OWNRDISPNAMEFont color=0 0 0
+ColumnsFont=Arial,8,N
+ColumnsFont color=0 0 0
+TablePkColumnsFont=Arial,8,U
+TablePkColumnsFont color=0 0 0
+TableFkColumnsFont=Arial,8,N
+TableFkColumnsFont color=0 0 0
+KeysFont=Arial,8,N
+KeysFont color=0 0 0
+IndexesFont=Arial,8,N
+IndexesFont color=0 0 0
+TriggersFont=Arial,8,N
+TriggersFont color=0 0 0
+LABLFont=Arial,8,N
+LABLFont color=0 0 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4800
+Height=4000
+Brush color=210 137 2
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 64 0
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\VIEW]
+STRNFont=Arial,8,N
+STRNFont color=0 0 0
+DISPNAMEFont=Arial,8,N
+DISPNAMEFont color=0 0 0
+OWNRDISPNAMEFont=鏂板畫浣�,8,N
+OWNRDISPNAMEFont color=0 0 0
+ColumnsFont=Arial,8,N
+ColumnsFont color=0 0 0
+TablePkColumnsFont=鏂板畫浣�,8,U
+TablePkColumnsFont color=0 0 0
+TableFkColumnsFont=鏂板畫浣�,8,N
+TableFkColumnsFont color=0 0 0
+TemporaryVTablesFont=Arial,8,N
+TemporaryVTablesFont color=0 0 0
+IndexesFont=Arial,8,N
+IndexesFont color=0 0 0
+LABLFont=Arial,8,N
+LABLFont color=0 0 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4800
+Height=4000
+Brush color=233 202 131
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 128 128
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\PROC]
+STRNFont=Arial,8,N
+STRNFont color=0 0 0
+DISPNAMEFont=Arial,8,N
+DISPNAMEFont color=0 0 0
+OWNRDISPNAMEFont=鏂板畫浣�,8,N
+OWNRDISPNAMEFont color=0 0 0
+LABLFont=Arial,8,N
+LABLFont color=0 0 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4000
+Height=1000
+Brush color=255 255 192
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 108 0
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\REFR]
+SOURCEFont=鏂板畫浣�,8,N
+SOURCEFont color=0 0 0
+CENTERFont=鏂板畫浣�,8,N
+CENTERFont color=0 0 0
+DESTINATIONFont=鏂板畫浣�,8,N
+DESTINATIONFont color=0 0 0
+Line style=2
+Source Arrow=24
+Center Arrow=24
+Target Arrow=0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 0 64
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\VREF]
+SOURCEFont=鏂板畫浣�,8,N
+SOURCEFont color=0 0 0
+CENTERFont=鏂板畫浣�,8,N
+CENTERFont color=0 0 0
+DESTINATIONFont=鏂板畫浣�,8,N
+DESTINATIONFont color=0 0 0
+Line style=2
+Source Arrow=24
+Center Arrow=24
+Target Arrow=0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 0 64
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\Free Symbol]
+Free TextFont=Arial,8,N
+Free TextFont color=0 0 0
+Line style=2
+Source Arrow=24
+Center Arrow=24
+Target Arrow=24
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 64 0
+Shadow color=192 192 192
+Shadow=0</a:DisplayPreferences>
+<a:PaperSize>(8268, 11693)</a:PaperSize>
+<a:PageMargins>((315,354), (433,354))</a:PageMargins>
+<a:PageOrientation>1</a:PageOrientation>
+<a:PaperSource>15</a:PaperSource>
+<c:Symbols>
+<o:ReferenceSymbol Id="o199">
+<a:CreationDate>1695192659</a:CreationDate>
+<a:ModificationDate>1695278022</a:ModificationDate>
+<a:Rect>((-3517,33761), (35950,35282))</a:Rect>
+<a:ListOfPoints>((35550,34386),(-3117,34386))</a:ListOfPoints>
+<a:CornerStyle>2</a:CornerStyle>
+<a:ArrowStyle>1</a:ArrowStyle>
+<a:LineColor>4194432</a:LineColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>CENTER 0 鏂板畫浣�,8,N
+SOURCE 0 鏂板畫浣�,8,N
+DESTINATION 0 鏂板畫浣�,8,N</a:FontList>
+<c:SourceSymbol>
+<o:TableSymbol Ref="o200"/>
+</c:SourceSymbol>
+<c:DestinationSymbol>
+<o:TableSymbol Ref="o201"/>
+</c:DestinationSymbol>
+<c:Object>
+<o:Reference Ref="o202"/>
+</c:Object>
+</o:ReferenceSymbol>
+<o:ReferenceSymbol Id="o203">
+<a:CreationDate>1695192659</a:CreationDate>
+<a:ModificationDate>1695278022</a:ModificationDate>
+<a:Rect>((-3517,49913), (45764,51434))</a:Rect>
+<a:ListOfPoints>((45364,50538),(-3117,50538))</a:ListOfPoints>
+<a:CornerStyle>2</a:CornerStyle>
+<a:ArrowStyle>1</a:ArrowStyle>
+<a:LineColor>4194432</a:LineColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>CENTER 0 鏂板畫浣�,8,N
+SOURCE 0 鏂板畫浣�,8,N
+DESTINATION 0 鏂板畫浣�,8,N</a:FontList>
+<c:SourceSymbol>
+<o:TableSymbol Ref="o204"/>
+</c:SourceSymbol>
+<c:DestinationSymbol>
+<o:TableSymbol Ref="o201"/>
+</c:DestinationSymbol>
+<c:Object>
+<o:Reference Ref="o205"/>
+</c:Object>
+</o:ReferenceSymbol>
+<o:ReferenceSymbol Id="o206">
+<a:CreationDate>1695192659</a:CreationDate>
+<a:ModificationDate>1695348787</a:ModificationDate>
+<a:Rect>((-3517,17609), (51813,19130))</a:Rect>
+<a:ListOfPoints>((51413,18234),(-3117,18234))</a:ListOfPoints>
+<a:CornerStyle>2</a:CornerStyle>
+<a:ArrowStyle>1</a:ArrowStyle>
+<a:LineColor>4194432</a:LineColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>CENTER 0 鏂板畫浣�,8,N
+SOURCE 0 鏂板畫浣�,8,N
+DESTINATION 0 鏂板畫浣�,8,N</a:FontList>
+<c:SourceSymbol>
+<o:TableSymbol Ref="o207"/>
+</c:SourceSymbol>
+<c:DestinationSymbol>
+<o:TableSymbol Ref="o201"/>
+</c:DestinationSymbol>
+<c:Object>
+<o:Reference Ref="o208"/>
+</c:Object>
+</o:ReferenceSymbol>
+<o:ReferenceSymbol Id="o209">
+<a:CreationDate>1695278490</a:CreationDate>
+<a:ModificationDate>1695278490</a:ModificationDate>
+<a:Rect>((-41957,46346), (45764,54859))</a:Rect>
+<a:ListOfPoints>((45364,53963),(-36145,53963),(-36145,46746))</a:ListOfPoints>
+<a:CornerStyle>2</a:CornerStyle>
+<a:ArrowStyle>1</a:ArrowStyle>
+<a:LineColor>4194432</a:LineColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>CENTER 0 鏂板畫浣�,8,N
+SOURCE 0 鏂板畫浣�,8,N
+DESTINATION 0 鏂板畫浣�,8,N</a:FontList>
+<c:SourceSymbol>
+<o:TableSymbol Ref="o204"/>
+</c:SourceSymbol>
+<c:DestinationSymbol>
+<o:TableSymbol Ref="o210"/>
+</c:DestinationSymbol>
+<c:Object>
+<o:Reference Ref="o211"/>
+</c:Object>
+</o:ReferenceSymbol>
+<o:ArchitectureAreaSymbol Id="o212">
+<a:CreationDate>1695192659</a:CreationDate>
+<a:ModificationDate>1695348787</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((27467,3367), (93821,21111))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>418425</a:LineColor>
+<a:FillColor>15399421</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 鏂板畫浣�,8,N
+DISPNAME 0 鏂板畫浣�,8,N
+LABL 0 鏂板畫浣�,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>16</a:GradientFillMode>
+<a:GradientEndColor>11396853</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:SubSymbols>
+<o:TableSymbol Id="o207">
+<a:CreationDate>1695192659</a:CreationDate>
+<a:ModificationDate>1695278549</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((51413,3967), (68031,18417))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>16512</a:LineColor>
+<a:FillColor>65535</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 Arial,8,N
+DISPNAME 0 Arial,8,N
+OWNRDISPNAME 0 鏂板畫浣�,8,N
+Columns 0 Arial,8,N
+TablePkColumns 0 Arial,8,U
+TableFkColumns 0 Arial,8,N
+Keys 0 Arial,8,N
+Indexes 0 Arial,8,N
+Triggers 0 Arial,8,N
+LABL 0 Arial,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>129</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:Object>
+<o:Table Ref="o213"/>
+</c:Object>
+</o:TableSymbol>
+<o:NoteSymbol Id="o214">
+<a:Text>鑺傜偣瀹屾垚鍚庯紝璁$畻鏇存柊椤圭洰闃舵--瀹屾垚姣斾緥銆侀」鐩俊鎭�--椤圭洰杩涘害</a:Text>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:ModificationDate>1695278561</a:ModificationDate>
+<a:Rect>((29045,15453), (50467,10063))</a:Rect>
+<a:TextStyle>4130</a:TextStyle>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>0</a:LineColor>
+<a:FillColor>16777215</a:FillColor>
+<a:ShadowColor>16777215</a:ShadowColor>
+<a:FontName>Arial,8,N</a:FontName>
+<a:ManuallyResized>1</a:ManuallyResized>
+</o:NoteSymbol>
+</c:SubSymbols>
+<c:Object>
+<o:Area Ref="o215"/>
+</c:Object>
+</o:ArchitectureAreaSymbol>
+<o:ReferenceSymbol Id="o216">
+<a:CreationDate>1695192659</a:CreationDate>
+<a:ModificationDate>1695371339</a:ModificationDate>
+<a:Rect>((-100209,20846), (-73056,22367))</a:Rect>
+<a:ListOfPoints>((-99809,21471),(-73456,21471))</a:ListOfPoints>
+<a:CornerStyle>2</a:CornerStyle>
+<a:ArrowStyle>1</a:ArrowStyle>
+<a:LineColor>4194432</a:LineColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>CENTER 0 鏂板畫浣�,8,N
+SOURCE 0 鏂板畫浣�,8,N
+DESTINATION 0 鏂板畫浣�,8,N</a:FontList>
+<c:SourceSymbol>
+<o:TableSymbol Ref="o217"/>
+</c:SourceSymbol>
+<c:DestinationSymbol>
+<o:TableSymbol Ref="o218"/>
+</c:DestinationSymbol>
+<c:Object>
+<o:Reference Ref="o219"/>
+</c:Object>
+</o:ReferenceSymbol>
+<o:ReferenceSymbol Id="o220">
+<a:CreationDate>1695371367</a:CreationDate>
+<a:ModificationDate>1695371367</a:ModificationDate>
+<a:Rect>((-105066,49212), (-73056,50733))</a:Rect>
+<a:ListOfPoints>((-73456,49837),(-104666,49837))</a:ListOfPoints>
+<a:CornerStyle>2</a:CornerStyle>
+<a:ArrowStyle>1</a:ArrowStyle>
+<a:LineColor>4194432</a:LineColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>CENTER 0 鏂板畫浣�,8,N
+SOURCE 0 鏂板畫浣�,8,N
+DESTINATION 0 鏂板畫浣�,8,N</a:FontList>
+<c:SourceSymbol>
+<o:TableSymbol Ref="o218"/>
+</c:SourceSymbol>
+<c:DestinationSymbol>
+<o:TableSymbol Ref="o221"/>
+</c:DestinationSymbol>
+<c:Object>
+<o:Reference Ref="o222"/>
+</c:Object>
+</o:ReferenceSymbol>
+<o:ArchitectureAreaSymbol Id="o223">
+<a:CreationDate>1695194032</a:CreationDate>
+<a:ModificationDate>1695348789</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((27789,46590), (92141,62298))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>418425</a:LineColor>
+<a:FillColor>15399421</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 鏂板畫浣�,8,N
+DISPNAME 0 鏂板畫浣�,8,N
+LABL 0 鏂板畫浣�,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>16</a:GradientFillMode>
+<a:GradientEndColor>11396853</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:SubSymbols>
+<o:TableSymbol Id="o204">
+<a:CreationDate>1695192659</a:CreationDate>
+<a:ModificationDate>1695194501</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((45364,48746), (67566,59180))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>16512</a:LineColor>
+<a:FillColor>166354</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 Arial,8,N
+DISPNAME 0 Arial,8,N
+OWNRDISPNAME 0 鏂板畫浣�,8,N
+Columns 0 Arial,8,N
+TablePkColumns 0 Arial,8,U
+TableFkColumns 0 Arial,8,N
+Keys 0 Arial,8,N
+Indexes 0 Arial,8,N
+Triggers 0 Arial,8,N
+LABL 0 Arial,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:Object>
+<o:Table Ref="o224"/>
+</c:Object>
+</o:TableSymbol>
+</c:SubSymbols>
+<c:Object>
+<o:Area Ref="o225"/>
+</c:Object>
+</o:ArchitectureAreaSymbol>
+<o:ArchitectureAreaSymbol Id="o226">
+<a:CreationDate>1695194071</a:CreationDate>
+<a:ModificationDate>1695371342</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-128172,39436), (-89822,59841))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>418425</a:LineColor>
+<a:FillColor>15399421</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 鏂板畫浣�,8,N
+DISPNAME 0 鏂板畫浣�,8,N
+LABL 0 鏂板畫浣�,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>16</a:GradientFillMode>
+<a:GradientEndColor>11396853</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:SubSymbols>
+<o:TableSymbol Id="o221">
+<a:CreationDate>1695192659</a:CreationDate>
+<a:ModificationDate>1695194771</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-118364,41746), (-104666,57928))</a:Rect>
+<a:LineColor>16512</a:LineColor>
+<a:FillColor>16744448</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 Arial,8,N
+DISPNAME 0 Arial,8,N
+OWNRDISPNAME 0 鏂板畫浣�,8,N
+Columns 0 Arial,8,N
+TablePkColumns 0 Arial,8,U
+TableFkColumns 0 Arial,8,N
+Keys 0 Arial,8,N
+Indexes 0 Arial,8,N
+Triggers 0 Arial,8,N
+LABL 0 Arial,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<c:Object>
+<o:Table Ref="o227"/>
+</c:Object>
+</o:TableSymbol>
+</c:SubSymbols>
+<c:Object>
+<o:Area Ref="o228"/>
+</c:Object>
+</o:ArchitectureAreaSymbol>
+<o:ArchitectureAreaSymbol Id="o229">
+<a:CreationDate>1695194075</a:CreationDate>
+<a:ModificationDate>1695194733</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((27793,23772), (90561,43704))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>418425</a:LineColor>
+<a:FillColor>15399421</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 鏂板畫浣�,8,N
+DISPNAME 0 鏂板畫浣�,8,N
+LABL 0 鏂板畫浣�,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>16</a:GradientFillMode>
+<a:GradientEndColor>11396853</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:SubSymbols>
+<o:ReferenceSymbol Id="o230">
+<a:CreationDate>1695192858</a:CreationDate>
+<a:ModificationDate>1695194502</a:ModificationDate>
+<a:Rect>((49214,32198), (62583,33719))</a:Rect>
+<a:ListOfPoints>((49614,32823),(62183,32823))</a:ListOfPoints>
+<a:CornerStyle>2</a:CornerStyle>
+<a:ArrowStyle>1</a:ArrowStyle>
+<a:LineColor>4194432</a:LineColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>CENTER 0 鏂板畫浣�,8,N
+SOURCE 0 鏂板畫浣�,8,N
+DESTINATION 0 鏂板畫浣�,8,N</a:FontList>
+<c:SourceSymbol>
+<o:TableSymbol Ref="o200"/>
+</c:SourceSymbol>
+<c:DestinationSymbol>
+<o:TableSymbol Ref="o231"/>
+</c:DestinationSymbol>
+<c:Object>
+<o:Reference Ref="o232"/>
+</c:Object>
+</o:ReferenceSymbol>
+<o:TableSymbol Id="o231">
+<a:CreationDate>1695192851</a:CreationDate>
+<a:ModificationDate>1695194502</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((62183,29403), (82537,36243))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>16512</a:LineColor>
+<a:FillColor>166354</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 Arial,8,N
+DISPNAME 0 Arial,8,N
+OWNRDISPNAME 0 鏂板畫浣�,8,N
+Columns 0 Arial,8,N
+TablePkColumns 0 Arial,8,U
+TableFkColumns 0 Arial,8,N
+Keys 0 Arial,8,N
+Indexes 0 Arial,8,N
+Triggers 0 Arial,8,N
+LABL 0 Arial,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:Object>
+<o:Shortcut Ref="o233"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o200">
+<a:CreationDate>1695192659</a:CreationDate>
+<a:ModificationDate>1695194445</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((35550,29196), (49614,35794))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>16512</a:LineColor>
+<a:FillColor>166354</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 Arial,8,N
+DISPNAME 0 Arial,8,N
+OWNRDISPNAME 0 鏂板畫浣�,8,N
+Columns 0 Arial,8,N
+TablePkColumns 0 Arial,8,U
+TableFkColumns 0 Arial,8,N
+Keys 0 Arial,8,N
+Indexes 0 Arial,8,N
+Triggers 0 Arial,8,N
+LABL 0 Arial,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:Object>
+<o:Table Ref="o234"/>
+</c:Object>
+</o:TableSymbol>
+</c:SubSymbols>
+<c:Object>
+<o:Area Ref="o235"/>
+</c:Object>
+</o:ArchitectureAreaSymbol>
+<o:ArchitectureAreaSymbol Id="o236">
+<a:CreationDate>1695194077</a:CreationDate>
+<a:ModificationDate>1695375513</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-84715,2652), (1981,62744))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>418425</a:LineColor>
+<a:FillColor>15399421</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 鏂板畫浣�,8,N
+DISPNAME 0 鏂板畫浣�,8,N
+LABL 0 鏂板畫浣�,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>16</a:GradientFillMode>
+<a:GradientEndColor>11396853</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:SubSymbols>
+<o:ReferenceSymbol Id="o237">
+<a:CreationDate>1695366056</a:CreationDate>
+<a:ModificationDate>1695366070</a:ModificationDate>
+<a:Rect>((-55832,9123), (-42181,10644))</a:Rect>
+<a:ListOfPoints>((-42581,9748),(-55432,9748))</a:ListOfPoints>
+<a:CornerStyle>2</a:CornerStyle>
+<a:ArrowStyle>1</a:ArrowStyle>
+<a:LineColor>4194432</a:LineColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>CENTER 0 鏂板畫浣�,8,N
+SOURCE 0 鏂板畫浣�,8,N
+DESTINATION 0 鏂板畫浣�,8,N</a:FontList>
+<c:SourceSymbol>
+<o:TableSymbol Ref="o238"/>
+</c:SourceSymbol>
+<c:DestinationSymbol>
+<o:TableSymbol Ref="o218"/>
+</c:DestinationSymbol>
+<c:Object>
+<o:Reference Ref="o239"/>
+</c:Object>
+</o:ReferenceSymbol>
+<o:ReferenceSymbol Id="o240">
+<a:CreationDate>1695361536</a:CreationDate>
+<a:ModificationDate>1695367953</a:ModificationDate>
+<a:Rect>((-55832,27110), (-41958,28631))</a:Rect>
+<a:ListOfPoints>((-42358,27735),(-55432,27735))</a:ListOfPoints>
+<a:CornerStyle>2</a:CornerStyle>
+<a:ArrowStyle>1</a:ArrowStyle>
+<a:LineColor>4194432</a:LineColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>CENTER 0 鏂板畫浣�,8,N
+SOURCE 0 鏂板畫浣�,8,N
+DESTINATION 0 鏂板畫浣�,8,N</a:FontList>
+<c:SourceSymbol>
+<o:TableSymbol Ref="o241"/>
+</c:SourceSymbol>
+<c:DestinationSymbol>
+<o:TableSymbol Ref="o218"/>
+</c:DestinationSymbol>
+<c:Object>
+<o:Reference Ref="o242"/>
+</c:Object>
+</o:ReferenceSymbol>
+<o:ReferenceSymbol Id="o243">
+<a:CreationDate>1695192659</a:CreationDate>
+<a:ModificationDate>1695365937</a:ModificationDate>
+<a:Rect>((-30407,39027), (-17295,40548))</a:Rect>
+<a:ListOfPoints>((-17695,39652),(-30007,39652))</a:ListOfPoints>
+<a:CornerStyle>2</a:CornerStyle>
+<a:ArrowStyle>1</a:ArrowStyle>
+<a:LineColor>4194432</a:LineColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>CENTER 0 鏂板畫浣�,8,N
+SOURCE 0 鏂板畫浣�,8,N
+DESTINATION 0 鏂板畫浣�,8,N</a:FontList>
+<c:SourceSymbol>
+<o:TableSymbol Ref="o201"/>
+</c:SourceSymbol>
+<c:DestinationSymbol>
+<o:TableSymbol Ref="o210"/>
+</c:DestinationSymbol>
+<c:Object>
+<o:Reference Ref="o244"/>
+</c:Object>
+</o:ReferenceSymbol>
+<o:ReferenceSymbol Id="o245">
+<a:CreationDate>1695192659</a:CreationDate>
+<a:ModificationDate>1695366052</a:ModificationDate>
+<a:Rect>((-55832,39027), (-41883,40548))</a:Rect>
+<a:ListOfPoints>((-42283,39652),(-55432,39652))</a:ListOfPoints>
+<a:CornerStyle>2</a:CornerStyle>
+<a:ArrowStyle>1</a:ArrowStyle>
+<a:LineColor>4194432</a:LineColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>CENTER 0 鏂板畫浣�,8,N
+SOURCE 0 鏂板畫浣�,8,N
+DESTINATION 0 鏂板畫浣�,8,N</a:FontList>
+<c:SourceSymbol>
+<o:TableSymbol Ref="o210"/>
+</c:SourceSymbol>
+<c:DestinationSymbol>
+<o:TableSymbol Ref="o218"/>
+</c:DestinationSymbol>
+<c:Object>
+<o:Reference Ref="o246"/>
+</c:Object>
+</o:ReferenceSymbol>
+<o:TableSymbol Id="o218">
+<a:CreationDate>1695192659</a:CreationDate>
+<a:ModificationDate>1695366052</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-73456,4196), (-55432,60344))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>255</a:LineColor>
+<a:FillColor>65535</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 Arial,8,N
+DISPNAME 0 Arial,8,N
+OWNRDISPNAME 0 鏂板畫浣�,8,N
+Columns 0 Arial,8,N
+TablePkColumns 0 Arial,8,U
+TableFkColumns 0 Arial,8,N
+Keys 0 Arial,8,N
+Indexes 0 Arial,8,N
+Triggers 0 Arial,8,N
+LABL 0 Arial,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:Object>
+<o:Table Ref="o247"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o210">
+<a:CreationDate>1695192659</a:CreationDate>
+<a:ModificationDate>1695365937</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-42283,32558), (-30007,46746))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>16512</a:LineColor>
+<a:FillColor>65535</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 Arial,8,N
+DISPNAME 0 Arial,8,N
+OWNRDISPNAME 0 鏂板畫浣�,8,N
+Columns 0 Arial,8,N
+TablePkColumns 0 Arial,8,U
+TableFkColumns 0 Arial,8,N
+Keys 0 Arial,8,N
+Indexes 0 Arial,8,N
+Triggers 0 Arial,8,N
+LABL 0 Arial,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:Object>
+<o:Table Ref="o248"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o201">
+<a:CreationDate>1695192659</a:CreationDate>
+<a:ModificationDate>1695278246</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-17695,17634), (-3117,51138))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>16512</a:LineColor>
+<a:FillColor>65535</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 Arial,8,N
+DISPNAME 0 Arial,8,N
+OWNRDISPNAME 0 鏂板畫浣�,8,N
+Columns 0 Arial,8,N
+TablePkColumns 0 Arial,8,U
+TableFkColumns 0 Arial,8,N
+Keys 0 Arial,8,N
+Indexes 0 Arial,8,N
+Triggers 0 Arial,8,N
+LABL 0 Arial,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:Object>
+<o:Table Ref="o249"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o241">
+<a:CreationDate>1695348661</a:CreationDate>
+<a:ModificationDate>1695367953</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-42358,25044), (-30056,30426))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>16512</a:LineColor>
+<a:FillColor>8454143</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 Arial,8,N
+DISPNAME 0 Arial,8,N
+OWNRDISPNAME 0 鏂板畫浣�,8,N
+Columns 0 Arial,8,N
+TablePkColumns 0 Arial,8,U
+TableFkColumns 0 Arial,8,N
+Keys 0 Arial,8,N
+Indexes 0 Arial,8,N
+Triggers 0 Arial,8,N
+LABL 0 Arial,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:Object>
+<o:Table Ref="o250"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o238">
+<a:CreationDate>1695365993</a:CreationDate>
+<a:ModificationDate>1695366072</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-42581,5066), (-29831,14430))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>16512</a:LineColor>
+<a:FillColor>8454143</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 Arial,8,N
+DISPNAME 0 Arial,8,N
+OWNRDISPNAME 0 鏂板畫浣�,8,N
+Columns 0 Arial,8,N
+TablePkColumns 0 Arial,8,U
+TableFkColumns 0 Arial,8,N
+Keys 0 Arial,8,N
+Indexes 0 Arial,8,N
+Triggers 0 Arial,8,N
+LABL 0 Arial,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:Object>
+<o:Table Ref="o251"/>
+</c:Object>
+</o:TableSymbol>
+<o:NoteSymbol Id="o252">
+<a:Text>椤圭洰鎶曡祫涓嬭揪鏃讹紝鏇存柊椤圭洰淇℃伅涓凡涓嬭揪璧勯噾</a:Text>
+<a:CreationDate>1695366352</a:CreationDate>
+<a:ModificationDate>1695366391</a:ModificationDate>
+<a:Rect>((-54588,9960), (-42736,4662))</a:Rect>
+<a:TextStyle>4130</a:TextStyle>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>0</a:LineColor>
+<a:FillColor>16777215</a:FillColor>
+<a:ShadowColor>16777215</a:ShadowColor>
+<a:FontName>Arial,8,N</a:FontName>
+<a:ManuallyResized>1</a:ManuallyResized>
+</o:NoteSymbol>
+</c:SubSymbols>
+<c:Object>
+<o:Area Ref="o253"/>
+</c:Object>
+</o:ArchitectureAreaSymbol>
+<o:ArchitectureAreaSymbol Id="o254">
+<a:CreationDate>1695192659</a:CreationDate>
+<a:ModificationDate>1695371339</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-125062,7941), (-93695,30493))</a:Rect>
+<a:AutoAdjustToText>0</a:AutoAdjustToText>
+<a:LineColor>418425</a:LineColor>
+<a:FillColor>15399421</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 鏂板畫浣�,8,N
+DISPNAME 0 鏂板畫浣�,8,N
+LABL 0 鏂板畫浣�,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>16</a:GradientFillMode>
+<a:GradientEndColor>11396853</a:GradientEndColor>
+<a:ManuallyResized>1</a:ManuallyResized>
+<c:SubSymbols>
+<o:TableSymbol Id="o217">
+<a:CreationDate>1695192659</a:CreationDate>
+<a:ModificationDate>1695194706</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-117679,15815), (-99809,27127))</a:Rect>
+<a:LineColor>16512</a:LineColor>
+<a:FillColor>8454143</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 Arial,8,N
+DISPNAME 0 Arial,8,N
+OWNRDISPNAME 0 鏂板畫浣�,8,N
+Columns 0 Arial,8,N
+TablePkColumns 0 Arial,8,U
+TableFkColumns 0 Arial,8,N
+Keys 0 Arial,8,N
+Indexes 0 Arial,8,N
+Triggers 0 Arial,8,N
+LABL 0 Arial,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<c:Object>
+<o:Table Ref="o255"/>
+</c:Object>
+</o:TableSymbol>
+</c:SubSymbols>
+<c:Object>
+<o:Area Ref="o256"/>
+</c:Object>
+</o:ArchitectureAreaSymbol>
+</c:Symbols>
+</o:PhysicalDiagram>
+</c:PhysicalDiagrams>
+<c:DefaultDiagram>
+<o:PhysicalDiagram Ref="o198"/>
+</c:DefaultDiagram>
+<c:Tables>
+<o:Table Id="o234">
+<a:ObjectID>A2FD835F-5705-4566-8637-078CD350C18C</a:ObjectID>
+<a:Name>椤圭洰鐪嬫澘鑺傜偣[P_PROJECT_BOARD_NODE]</a:Name>
+<a:Code>P_PROJECT_BOARD_NODE</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695361772</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰鐪嬫澘鑺傜偣</a:Comment>
+<a:GlobalObjectID/>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o257">
+<a:ObjectID>792C208D-6B9E-4F47-8536-AF09182BC453</a:ObjectID>
+<a:Name>ID</a:Name>
+<a:Code>ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695193362</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o258">
+<a:ObjectID>D4B95F9D-C172-481C-9631-FD66C53E936F</a:ObjectID>
+<a:Name>椤圭洰id</a:Name>
+<a:Code>PROJECT_ID</a:Code>
+<a:CreationDate>1695361751</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695361772</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰id</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o259">
+<a:ObjectID>42559D97-0981-4E43-96A4-36938E804CF3</a:ObjectID>
+<a:Name>椤圭洰鑺傜偣id</a:Name>
+<a:Code>PROJECT_STAGE_NODE_ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰鑺傜偣id</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o260">
+<a:ObjectID>E0E7A957-C584-45AC-BED2-2B8123FD6A5E</a:ObjectID>
+<a:Name>椤圭洰妯℃澘鐨勭湅鏉縄D</a:Name>
+<a:Code>TEMP_BOARD_ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰妯℃澘鐨勭湅鏉縄D</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o261">
+<a:ObjectID>0873ECCD-024D-467C-AC7F-93BF402E95A0</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Key.Columns>
+<o:Column Ref="o257"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o261"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o224">
+<a:ObjectID>04E4982F-372B-4552-A52E-6D977FA13D3D</a:ObjectID>
+<a:Name>椤圭洰鑺傜偣閫氱煡[P_PROJECT_STAGE_NODE_NOTIFY]</a:Name>
+<a:Code>P_PROJECT_STAGE_NODE_NOTIFY</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695361748</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰鑺傜偣閫氱煡</a:Comment>
+<a:GlobalObjectID/>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o262">
+<a:ObjectID>C1E0164A-CD95-4FB0-8729-CD687ED4B6A7</a:ObjectID>
+<a:Name>id</a:Name>
+<a:Code>id</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o263">
+<a:ObjectID>0613B0F6-8C0B-44E2-8AC3-7723DB79CBEB</a:ObjectID>
+<a:Name>椤圭洰id</a:Name>
+<a:Code>PROJECT_ID</a:Code>
+<a:CreationDate>1695361727</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695361748</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰id</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o264">
+<a:ObjectID>9A8EF968-8C06-4AE9-B97E-95195C002387</a:ObjectID>
+<a:Name>瑙﹀彂閫氱煡鐨勮妭鐐筰d</a:Name>
+<a:Code>STAGE_NODE_ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>瑙﹀彂閫氱煡鐨勮妭鐐筰d</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o265">
+<a:ObjectID>A2A0445C-61BE-4CA8-AAE9-2A13122B5440</a:ObjectID>
+<a:Name>閫氱煡闃舵 or 鑺傜偣</a:Name>
+<a:Code>NOTIFY_TYPE</a:Code>
+<a:CreationDate>1695278447</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695278468</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>閫氱煡闃舵 or 鑺傜偣 0闃舵 1鑺傜偣</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o266">
+<a:ObjectID>BDD906F5-C461-42CE-9C88-4C424BD63D23</a:ObjectID>
+<a:Name>閫氱煡闃舵 or 鑺傜偣鐨� id</a:Name>
+<a:Code>NOTIFY_STAGE_NODE_ID</a:Code>
+<a:CreationDate>1695278447</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695278481</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>閫氱煡闃舵 or 鑺傜偣鐨� id </a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o267">
+<a:ObjectID>9B1FF126-88EB-4CCF-854A-C7EFAED32456</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Key.Columns>
+<o:Column Ref="o262"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o267"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o249">
+<a:ObjectID>58D1EACE-D164-497E-ADCB-CAA69CF0E220</a:ObjectID>
+<a:Name>椤圭洰鑺傜偣[P_STAGE_NODE]</a:Name>
+<a:Code>P_STAGE_NODE</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695361426</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰鑺傜偣</a:Comment>
+<a:GlobalObjectID/>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o268">
+<a:ObjectID>A83E91BB-8CA0-4334-91DB-8759718B3F49</a:ObjectID>
+<a:Name>id</a:Name>
+<a:Code>id</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o269">
+<a:ObjectID>478C1AFE-CD6B-49E2-86E3-B4D2D8A1CB40</a:ObjectID>
+<a:Name>椤圭洰id</a:Name>
+<a:Code>PROJECT_ID</a:Code>
+<a:CreationDate>1695361399</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695361426</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰id</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o270">
+<a:ObjectID>2F19F52E-28B7-4FED-8EF0-3C13DB0783CE</a:ObjectID>
+<a:Name>椤圭洰闃舵ID</a:Name>
+<a:Code>PROJECT_STAGE_ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695361477</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰闃舵ID</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o271">
+<a:ObjectID>75FA697C-880E-4506-AE04-050D679CF2DE</a:ObjectID>
+<a:Name>鍚嶇О</a:Name>
+<a:Code>NODE_NAME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍚嶇О</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o272">
+<a:ObjectID>1EDB6B16-F69A-4B7F-8198-A959FB7BA59C</a:ObjectID>
+<a:Name>鑷」鐩紑濮嬬N澶�</a:Name>
+<a:Code>NODE_START_SINCE_PROJECT</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鑷」鐩紑濮嬬N澶�</a:Comment>
+<a:LowValue>0</a:LowValue>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o273">
+<a:ObjectID>DD796716-8A91-487B-9560-1412A0BC8E4F</a:ObjectID>
+<a:Name>鎸佺画澶╂暟</a:Name>
+<a:Code>NODE_DAYS</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鎸佺画澶╂暟锛屽嵆鑺傜偣鍛ㄦ湡</a:Comment>
+<a:LowValue>0</a:LowValue>
+<a:DefaultValue>1</a:DefaultValue>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o274">
+<a:ObjectID>8C4A4F69-F147-4074-9A79-362CD53E535C</a:ObjectID>
+<a:Name>鐘舵��</a:Name>
+<a:Code>STATUS</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鐘舵�� 0鍏抽棴1寮�鍚�</a:Comment>
+<a:DefaultValue>1</a:DefaultValue>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o275">
+<a:ObjectID>4537F982-27D5-4193-BAAD-CA6518E5E4D0</a:ObjectID>
+<a:Name>鎺掑簭</a:Name>
+<a:Code>SORT</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鎺掑簭 涓嶈兘閲嶅</a:Comment>
+<a:DefaultValue>9999</a:DefaultValue>
+<a:DataType>int</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o276">
+<a:ObjectID>9FA8BF4F-D83A-4193-97EB-EC0E420DA506</a:ObjectID>
+<a:Name>鏄惁涓存湡棰勮</a:Name>
+<a:Code>WARN_NEED</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>0涓嶉璀︼紝1棰勮</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o277">
+<a:ObjectID>6F2A6AB1-3B97-407A-B1C7-82F269B69BF1</a:ObjectID>
+<a:Name>闄勪欢蹇呬紶</a:Name>
+<a:Code>FILE_NEED</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>0闈炲繀濉�1蹇呭~</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o278">
+<a:ObjectID>835C5E46-27F1-439F-849E-B1C9495F6BE2</a:ObjectID>
+<a:Name>瀹屾垚鍚庢彁閱�</a:Name>
+<a:Code>COMPLETE_NOTIFY_STATUS</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>瀹屾垚鍚庢彁閱� 0 涓嶆彁閱� 1 鎻愰啋</a:Comment>
+<a:DefaultValue>1</a:DefaultValue>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o279">
+<a:ObjectID>2B56325E-346D-40DE-A82A-DFF8F947E91D</a:ObjectID>
+<a:Name>鑺傜偣寮�濮嬫椂闂�</a:Name>
+<a:Code>NODE_TIME_START</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鑺傜偣寮�濮嬫椂闂�</a:Comment>
+<a:DataType>date</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o280">
+<a:ObjectID>3322A256-35CF-42CB-9992-FC5EAC09920E</a:ObjectID>
+<a:Name>鑺傜偣缁撴潫鏃堕棿</a:Name>
+<a:Code>NODE_TIME_END</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鑺傜偣缁撴潫鏃堕棿</a:Comment>
+<a:DataType>date</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o281">
+<a:ObjectID>444DD78C-F11B-4725-8902-302A977F69D4</a:ObjectID>
+<a:Name>鑺傜偣鏄惁瀹屾垚</a:Name>
+<a:Code>NODE_COMPLETE</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鑺傜偣鏄惁瀹屾垚 0鏈畬鎴� 1 瀹屾垚</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o282">
+<a:ObjectID>1A1B6868-2934-43F0-BE55-80F14EC95DCC</a:ObjectID>
+<a:Name>瀹屾垚鏃堕棿</a:Name>
+<a:Code>NODE_COMPLETE_DATE</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>瀹屾垚鏃堕棿</a:Comment>
+<a:DataType>date</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o283">
+<a:ObjectID>5FD28AD6-3C32-4977-9832-FC1BD7B8B54B</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Key.Columns>
+<o:Column Ref="o268"/>
+</c:Key.Columns>
+</o:Key>
+<o:Key Id="o284">
+<a:ObjectID>ED38FFCF-BDDA-499D-AD4C-46DE73311D28</a:ObjectID>
+<a:Name>Key_2</a:Name>
+<a:Code>Key_2</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:ConstraintName>STAGE_NODE_SORT</a:ConstraintName>
+<a:ExtendedAttributesText>{F4F16ECD-F2F1-4006-AF6F-638D5C65F35E},MYSQL50,57={D1C795B8-8F7B-4AA7-A240-85C5B737C543},ExtUnique,4=true
+
+</a:ExtendedAttributesText>
+<c:Key.Columns>
+<o:Column Ref="o275"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o283"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o248">
+<a:ObjectID>91430A21-303C-4220-A550-8D7BFC80A89C</a:ObjectID>
+<a:Name>椤圭洰闃舵[P_PROJECT_STAGE]</a:Name>
+<a:Code>P_PROJECT_STAGE</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695278500</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰闃舵</a:Comment>
+<a:GlobalObjectID/>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o285">
+<a:ObjectID>A740D306-7F99-4A97-97DF-18F9F866B9E7</a:ObjectID>
+<a:Name>id</a:Name>
+<a:Code>ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o286">
+<a:ObjectID>B527340A-DB7E-4A47-AF1E-810C7CFE2AC9</a:ObjectID>
+<a:Name>椤圭洰id</a:Name>
+<a:Code>PROJECT_ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰妯℃澘id</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o287">
+<a:ObjectID>F3BF219A-9F65-4285-A693-650A1AD2261F</a:ObjectID>
+<a:Name>闃舵宸ユ湡</a:Name>
+<a:Code>STAGE_TIME_DAYS</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>闃舵宸ユ湡</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o288">
+<a:ObjectID>08E9BE51-5990-4CD1-8CEB-86200F660F96</a:ObjectID>
+<a:Name>闃舵鍚嶇О</a:Name>
+<a:Code>STAGE_NAME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>闃舵鍚嶇О</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o289">
+<a:ObjectID>E7420006-C46B-438B-985E-680A1E270D60</a:ObjectID>
+<a:Name>鎺掑簭</a:Name>
+<a:Code>SORT</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277842</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鎺掑簭</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o290">
+<a:ObjectID>050710DF-46DC-46C1-915A-142FB8A3DB25</a:ObjectID>
+<a:Name>澶囨敞</a:Name>
+<a:Code>REMARK</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>澶囨敞</a:Comment>
+<a:DataType>varchar(1024)</a:DataType>
+<a:Length>1024</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o291">
+<a:ObjectID>82B5D00A-0330-42FA-9EDD-46F7AE25845F</a:ObjectID>
+<a:Name>寮�濮嬫椂闂�</a:Name>
+<a:Code>STAGE_TIME_START</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>闃舵寮�濮嬫椂闂达紝鑺傜偣涓渶鏃╁紑濮嬫棩鏈�</a:Comment>
+<a:DataType>date</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o292">
+<a:ObjectID>98EB66D8-25F2-4E9C-8580-591B60FF0267</a:ObjectID>
+<a:Name>缁撴潫鏃堕棿</a:Name>
+<a:Code>STAGE_TIME_END</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>闃舵缁撴潫鏃堕棿锛岃妭鐐逛腑鏈�鏅氱粨鏉熸棩鏈�</a:Comment>
+<a:DataType>date</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o293">
+<a:ObjectID>4DA11EB1-9FC2-4279-91C5-9E4638AF5827</a:ObjectID>
+<a:Name>鏄惁瀹屾垚</a:Name>
+<a:Code>STAGE_COMPLETE</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>闃舵鏄惁瀹屾垚銆傝妭鐐瑰叏閮ㄥ畬鎴愭洿鏂拌瀛楁</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o294">
+<a:ObjectID>BF0030EF-2785-4229-A299-DEB9CA398A32</a:ObjectID>
+<a:Name>瀹屾垚鏃堕棿</a:Name>
+<a:Code>STAGE_COMPLETE_DATE</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>瀹屾垚鏃堕棿</a:Comment>
+<a:DataType>date</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o295">
+<a:ObjectID>17997432-27A3-408E-AE8F-2E5F74006681</a:ObjectID>
+<a:Name>瀹屾垚姣斾緥</a:Name>
+<a:Code>STAGE_COMPLETE_RATE</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>闃舵瀹屾垚姣斾緥</a:Comment>
+<a:DataType>numeric(5,2)</a:DataType>
+<a:Length>5</a:Length>
+<a:Precision>2</a:Precision>
+<a:GlobalObjectID/>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o296">
+<a:ObjectID>DCDB154E-AA3B-4CF9-8440-D525F774C910</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Key.Columns>
+<o:Column Ref="o285"/>
+</c:Key.Columns>
+</o:Key>
+<o:Key Id="o297">
+<a:ObjectID>2BF292B2-D008-42D9-813A-01D06121EEA9</a:ObjectID>
+<a:Name>Key_2</a:Name>
+<a:Code>Key_2</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:ConstraintName>STAGE_SORT</a:ConstraintName>
+<a:ExtendedAttributesText>{F4F16ECD-F2F1-4006-AF6F-638D5C65F35E},MYSQL50,57={D1C795B8-8F7B-4AA7-A240-85C5B737C543},ExtUnique,4=true
+
+</a:ExtendedAttributesText>
+<c:Key.Columns>
+<o:Column Ref="o289"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o296"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o247">
+<a:ObjectID>66183D17-8A25-4E56-843E-10FE8C94AF36</a:ObjectID>
+<a:Name>椤圭洰淇℃伅[P_PROJECT_INFO]</a:Name>
+<a:Code>P_PROJECT_INFO</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695450048</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰淇℃伅</a:Comment>
+<a:GlobalObjectID/>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o298">
+<a:ObjectID>B709A028-F2E6-4FDF-907A-5834E1B85785</a:ObjectID>
+<a:Name>id</a:Name>
+<a:Code>ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695371376</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o299">
+<a:ObjectID>86EF38B5-B952-43DA-80F2-785B61A41DA2</a:ObjectID>
+<a:Name>涓存湡棰勮妯℃澘ID</a:Name>
+<a:Code>TEMP_EXPIRATION_NOTIFY_ID</a:Code>
+<a:CreationDate>1695370636</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695370654</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>涓存湡棰勮妯℃澘ID</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o300">
+<a:ObjectID>8F171A3B-C617-4917-BB02-704AC4D31BF5</a:ObjectID>
+<a:Name>椤圭洰妯℃澘ID</a:Name>
+<a:Code>TEMP_PROJECT_ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰妯℃澘ID</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o301">
+<a:ObjectID>D356D7CF-734C-4DDC-9CF1-0321703E3AF7</a:ObjectID>
+<a:Name>椤圭洰妯℃澘鍚嶇О</a:Name>
+<a:Code>TEMP_PROJECT_NAME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰妯℃澘鍚嶇О</a:Comment>
+<a:DataType>varchar(128)</a:DataType>
+<a:Length>128</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o302">
+<a:ObjectID>967916A6-1B7A-4E94-A2A9-6BC6784817F6</a:ObjectID>
+<a:Name>椤圭洰鍚嶇О</a:Name>
+<a:Code>PROJECT_NAME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰鍚嶇О</a:Comment>
+<a:DataType>varchar(128)</a:DataType>
+<a:Length>128</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o303">
+<a:ObjectID>EA174F8C-166C-4A9F-924F-AD77764AEFB0</a:ObjectID>
+<a:Name>椤圭洰缂栧彿</a:Name>
+<a:Code>PROJECT_CODE</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰缂栧彿</a:Comment>
+<a:DataType>varchar(28)</a:DataType>
+<a:Length>28</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o304">
+<a:ObjectID>7A8CD3E5-8FBA-4C43-9ADA-78578A01B2D5</a:ObjectID>
+<a:Name>椤圭洰鍒嗙被ID</a:Name>
+<a:Code>PROJECT_CATEGORY_ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰鍒嗙被ID</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o305">
+<a:ObjectID>AA51857B-1EC5-4B55-A6CE-9F6F920A436D</a:ObjectID>
+<a:Name>椤圭洰鍒嗙被鍚嶇О</a:Name>
+<a:Code>PROJECT_CATEGORY_NAME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰鍒嗙被鍚嶇О</a:Comment>
+<a:DataType>varchar(128)</a:DataType>
+<a:Length>128</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o306">
+<a:ObjectID>DD928315-59D9-47AA-BC58-2D870F8F39E4</a:ObjectID>
+<a:Name>鐩磋惀鍗曚綅</a:Name>
+<a:Code>DIRECT_UNIT_CODE</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695451478</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鐩磋惀鍗曚綅鐮佽〃缂栫爜锛孌IRECT_UNIT 0 鐪� 1甯�</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o307">
+<a:ObjectID>87328A94-BB7A-4342-82DD-C91A25C258BD</a:ObjectID>
+<a:Name>鐩磋惀鍗曚綅鍚嶇О</a:Name>
+<a:Code>DIRECT_UNIT_NAME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鐩磋惀鍗曚綅鍚嶇О</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o308">
+<a:ObjectID>ABFA722C-471A-46D7-88D4-384812542982</a:ObjectID>
+<a:Name>寤鸿鍗曚綅</a:Name>
+<a:Code>BUILD_ORG_ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>寤鸿鍗曚綅</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o309">
+<a:ObjectID>37E9D3D0-D27F-44B3-8D16-7C3DB7AF5DFD</a:ObjectID>
+<a:Name>寤鸿鍗曚綅鍚嶇О</a:Name>
+<a:Code>BUILD_ORG_NAME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>寤鸿鍗曚綅鍚嶇О</a:Comment>
+<a:DataType>varchar(128)</a:DataType>
+<a:Length>128</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o310">
+<a:ObjectID>ED67991A-C2F4-4866-A0FD-4A284CD116EE</a:ObjectID>
+<a:Name>缁忓害</a:Name>
+<a:Code>LNG</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>缁忓害</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o311">
+<a:ObjectID>4438C4CB-04B4-4699-A413-5B105C60EDC3</a:ObjectID>
+<a:Name>缁村害</a:Name>
+<a:Code>LAT</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>缁村害</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o312">
+<a:ObjectID>CCD3102B-E4AF-4977-B959-7B945F59B970</a:ObjectID>
+<a:Name>璇︾粏鍦板潃</a:Name>
+<a:Code>ADDR</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>璇︾粏鍦板潃</a:Comment>
+<a:DataType>varchar(128)</a:DataType>
+<a:Length>128</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o313">
+<a:ObjectID>238B20C6-A78E-40B7-963E-46C7D99CA8E7</a:ObjectID>
+<a:Name>寮�濮嬪缓璁惧勾浠�</a:Name>
+<a:Code>BUILD_YEAR_START</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>寮�濮嬪缓璁惧勾浠�</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o314">
+<a:ObjectID>42215EC3-FE51-497D-8CCD-BEE62B4CD943</a:ObjectID>
+<a:Name>缁撴潫寤鸿骞翠唤</a:Name>
+<a:Code>BUILD_YEAR_END</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>缁撴潫寤鸿骞翠唤</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o315">
+<a:ObjectID>FEA419C9-EEAA-4F14-9FA7-4E12E43A392B</a:ObjectID>
+<a:Name>椤圭洰鎵规鏃堕棿</a:Name>
+<a:Code>PROJECT_BATCH_YEAR</a:Code>
+<a:CreationDate>1695374658</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695374687</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰鎵规鏃堕棿,鍒涘缓鏃堕棿骞翠唤</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o316">
+<a:ObjectID>06149274-898C-4F6E-BA88-AAA956121808</a:ObjectID>
+<a:Name>椤圭洰鎵规</a:Name>
+<a:Code>PROJECT_BATCH_CODE</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695450750</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰鎵规 瀛楀吀project_batch	</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o317">
+<a:ObjectID>B229C90F-33C3-48EE-876D-1D0F8768B68A</a:ObjectID>
+<a:Name>椤圭洰鎵规鍚嶇О</a:Name>
+<a:Code>PROJECT_BATCH_NAME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰鎵规</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o318">
+<a:ObjectID>F436B281-AF31-44D7-934F-3A6D0F52A6D5</a:ObjectID>
+<a:Name>鎵瑰鏃堕棿</a:Name>
+<a:Code>APPROVAL_DATE</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鎵瑰鏃堕棿</a:Comment>
+<a:DataType>date</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o319">
+<a:ObjectID>C8A709B8-4819-49AC-B991-90F4E0B8BB35</a:ObjectID>
+<a:Name>鎵瑰鏃堕棿 + 椤圭洰鍛ㄦ湡璁$畻鐨勭粨鏉熸椂闂�</a:Name>
+<a:Code>APPROVAL_DATE_END</a:Code>
+<a:CreationDate>1695449996</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695450060</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鎵瑰鏃堕棿 + 椤圭洰鍛ㄦ湡璁$畻鐨勭粨鏉熸椂闂�</a:Comment>
+<a:DataType>date</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o320">
+<a:ObjectID>8BE39864-ED23-4A6A-9345-E75A2A2A0DCE</a:ObjectID>
+<a:Name>鎬绘姇璧�</a:Name>
+<a:Code>TOTAL_INVEST</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鎬绘姇璧�</a:Comment>
+<a:DataType>numeric(20,4)</a:DataType>
+<a:Length>20</a:Length>
+<a:Precision>4</a:Precision>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o321">
+<a:ObjectID>180A7A99-312C-480A-AD4B-76FCBB685A63</a:ObjectID>
+<a:Name>宸蹭笅杈炬�绘姇璧�</a:Name>
+<a:Code>TOTAL_RELEASE_INVEST</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695365561</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>宸蹭笅杈炬�绘姇璧�</a:Comment>
+<a:DataType>numeric(20,4)</a:DataType>
+<a:Length>20</a:Length>
+<a:Precision>4</a:Precision>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o322">
+<a:ObjectID>EB820F66-F33A-4E8A-8242-5DDCE68E6D4A</a:ObjectID>
+<a:Name>鎶曡祫涓撲笟</a:Name>
+<a:Code>INVEST_MAJOR_CODE</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695451310</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鎶曡祫涓撲笟 瀛楀吀INVEST_MAJOR</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o323">
+<a:ObjectID>63BF8FD8-8754-4DBA-BB50-38EFB1A35377</a:ObjectID>
+<a:Name>鎶曡祫涓撲笟鍚嶇О</a:Name>
+<a:Code>INVEST_MAJOR_NAME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鎶曡祫涓撲笟鍚嶇О</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o324">
+<a:ObjectID>2E36A55D-3012-41E3-859D-443A8E070610</a:ObjectID>
+<a:Name>涓昏寤鸿鍐呭</a:Name>
+<a:Code>DETAIL</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>涓昏寤鸿鍐呭</a:Comment>
+<a:DataType>varchar(1024)</a:DataType>
+<a:Length>1024</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o325">
+<a:ObjectID>2FB4DBAF-48BF-4E18-84D2-4344BD319316</a:ObjectID>
+<a:Name>鍒涘缓浜烘満鏋勫悕绉�</a:Name>
+<a:Code>CREATE_ORG_NAME</a:Code>
+<a:CreationDate>1695367154</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695367226</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓浜烘満鏋勫悕绉�</a:Comment>
+<a:DataType>varchar(128)</a:DataType>
+<a:Length>128</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o326">
+<a:ObjectID>FD3C930C-1CCE-484D-9C96-21FCAB586C32</a:ObjectID>
+<a:Name>鍒涘缓浜烘満鏋�</a:Name>
+<a:Code>CREATE_ORG_ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695367226</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓鏈烘瀯</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o327">
+<a:ObjectID>2E8D8177-038C-4D42-A3C3-0032149B71E9</a:ObjectID>
+<a:Name>鍒涘缓浜�</a:Name>
+<a:Code>CREATE_USER_ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓浜�</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o328">
+<a:ObjectID>3D86E216-BDC0-4886-97D0-05D91AE1F8CC</a:ObjectID>
+<a:Name>鍒涘缓浜哄鍚�</a:Name>
+<a:Code>CREATE_USER_NAME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓浜哄鍚�</a:Comment>
+<a:DataType>varchar(28)</a:DataType>
+<a:Length>28</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o329">
+<a:ObjectID>29513D2B-4580-4452-840B-3FFB775EA920</a:ObjectID>
+<a:Name>鍒涘缓鏃堕棿</a:Name>
+<a:Code>CREATE_TIME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓鏃堕棿</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o330">
+<a:ObjectID>96540618-9B68-48E9-8EF1-7C82436F2C65</a:ObjectID>
+<a:Name>瀹℃牳鐘舵��</a:Name>
+<a:Code>AUDIT_STATUS</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277772</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰鐘舵��0鏈鏍� 1 瀹℃牳涓嶉�氳繃 2瀹℃牳閫氳繃 </a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o331">
+<a:ObjectID>220A7070-9D75-4263-AFCC-AF6A3117EF84</a:ObjectID>
+<a:Name>椤圭洰鐘舵�佸鏍镐汉</a:Name>
+<a:Code>AUDIT_USER_ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277772</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰鐘舵�佸鏍镐汉</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o332">
+<a:ObjectID>2C02D3E9-AF8C-482E-B95E-CC80C0FF0717</a:ObjectID>
+<a:Name>椤圭洰鐘舵�佸鏍镐汉濮撳悕</a:Name>
+<a:Code>AUDIT_USER_NAME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277772</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰鐘舵�佸鏍镐汉濮撳悕</a:Comment>
+<a:DataType>varchar(28)</a:DataType>
+<a:Length>28</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o333">
+<a:ObjectID>44B5A6B1-44A1-43F2-AF5E-D788313F771D</a:ObjectID>
+<a:Name>椤圭洰鐘舵�佸鏍告椂闂�</a:Name>
+<a:Code>AUDIT_TIME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277772</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰鐘舵�佸鏍告椂闂�</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o334">
+<a:ObjectID>489412EB-6380-4FFC-BD12-31CF8254C10C</a:ObjectID>
+<a:Name>椤圭洰鐘舵�佸鏍稿師鍥�</a:Name>
+<a:Code>AUDIT_REASON</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277772</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰鐘舵�佸鏍稿師鍥�</a:Comment>
+<a:DataType>varchar(512)</a:DataType>
+<a:Length>512</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o335">
+<a:ObjectID>266AB945-2782-4EAD-AE76-C49B26909BE8</a:ObjectID>
+<a:Name>椤圭洰鍙栨秷鎿嶄綔浜�</a:Name>
+<a:Code>CANCEL_USER_ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰鍙栨秷鎿嶄綔浜�</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o336">
+<a:ObjectID>C3E2281B-6D5B-40FF-AFD0-53CA29FFB4A5</a:ObjectID>
+<a:Name>椤圭洰鍙栨秷鎿嶄綔浜哄鍚�</a:Name>
+<a:Code>CANCEL_USER_NAME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰鍙栨秷鎿嶄綔浜哄鍚�</a:Comment>
+<a:DataType>varchar(28)</a:DataType>
+<a:Length>28</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o337">
+<a:ObjectID>6F162A11-936F-4023-BCBB-EA5F90D2CCF2</a:ObjectID>
+<a:Name>椤圭洰鍙栨秷鎿嶄綔鏃堕棿</a:Name>
+<a:Code>CANCEL_USER_TIME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰鍙栨秷鎿嶄綔鏃堕棿</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o338">
+<a:ObjectID>EE3C92EF-7549-4CCC-B148-7F1D84E6E26C</a:ObjectID>
+<a:Name>褰掓。鐘舵��</a:Name>
+<a:Code>ARCHIVE_STATUS</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>褰掓。鐘舵��</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o339">
+<a:ObjectID>C48F11A4-03DD-408E-9584-BC7439D261E2</a:ObjectID>
+<a:Name>褰掓。鐘舵�佸鏍镐汉</a:Name>
+<a:Code>ARCHIVE_USER_ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277772</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>褰掓。鐘舵�佸鏍镐汉</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o340">
+<a:ObjectID>88F05B59-7D7E-498C-BB3B-CDEFBBC2B2FC</a:ObjectID>
+<a:Name>褰掓。椤圭姸鎬佸鏍镐汉濮撳悕</a:Name>
+<a:Code>ARCHIVE_USER_NAME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277772</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>褰掓。椤圭姸鎬佸鏍镐汉濮撳悕</a:Comment>
+<a:DataType>varchar(28)</a:DataType>
+<a:Length>28</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o341">
+<a:ObjectID>6195D699-E3D4-45AF-AD9D-8C9B34806FC2</a:ObjectID>
+<a:Name>褰掓。鐘舵�佸鏍告椂闂�</a:Name>
+<a:Code>ARCHIVE_TIME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277772</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>褰掓。鐘舵�佸鏍告椂闂�</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o342">
+<a:ObjectID>F2A9D37F-AA6B-4F70-BDE4-7BD712F432D4</a:ObjectID>
+<a:Name>褰掓。鐘舵�佸鏍稿師鍥�</a:Name>
+<a:Code>ARCHIVE_REASON</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277772</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>褰掓。鐘舵�佸鏍稿師鍥�</a:Comment>
+<a:DataType>varchar(512)</a:DataType>
+<a:Length>512</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o343">
+<a:ObjectID>431EB4E8-112C-4B26-B8D2-2E26F4E325A1</a:ObjectID>
+<a:Name>涓存湡棰勮寮�鍏�</a:Name>
+<a:Code>EXPIRATION_NOTIFY_STATUS</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695278088</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>涓存湡棰勮寮�鍏� 0鍏抽棴 1寮�鍚�</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o344">
+<a:ObjectID>81F418D3-D01E-48CF-A52E-742A915E3320</a:ObjectID>
+<a:Name>椤圭洰杩涘害</a:Name>
+<a:Code>PROGRESS_RATE</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰杩涘害锛屾洿鏂拌繘搴﹀悗鏇存柊姝ゅ瓧娈�</a:Comment>
+<a:DataType>numeric(5,2)</a:DataType>
+<a:Length>5</a:Length>
+<a:Precision>2</a:Precision>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o345">
+<a:ObjectID>D0F1DBBD-3187-4AC3-9018-12F3BD51A434</a:ObjectID>
+<a:Name>椤圭洰鐘舵��</a:Name>
+<a:Code>STATUS</a:Code>
+<a:CreationDate>1695207003</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277772</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>0鏈紑宸� 1杩涜涓� 2 瀹屽伐 3 宸插彇娑� (0-2 鏍规嵁鏃堕棿鍒ゆ柇)</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o346">
+<a:ObjectID>234D8A2B-256C-4718-ACF2-C118E26D7C47</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Key.Columns>
+<o:Column Ref="o298"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o346"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o227">
+<a:ObjectID>28B206E4-05E1-494B-BC3D-AB473772B69A</a:ObjectID>
+<a:Name>椤圭洰鍒嗙被[P_PROJECT_CATEGORY]</a:Name>
+<a:Code>P_PROJECT_CATEGORY</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695373773</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰鍒嗙被</a:Comment>
+<a:GlobalObjectID/>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o347">
+<a:ObjectID>7E4C2486-870F-402F-B0B7-BA7F3A7117EF</a:ObjectID>
+<a:Name>ID</a:Name>
+<a:Code>ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o348">
+<a:ObjectID>870B561F-EFE5-4ACB-9BA7-1E97B8D8E553</a:ObjectID>
+<a:Name>鍒嗙被鍚嶇О</a:Name>
+<a:Code>TITLE</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒嗙被鍚嶇О</a:Comment>
+<a:DataType>varchar(128)</a:DataType>
+<a:Length>128</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o349">
+<a:ObjectID>E0C96B8C-3ABF-4CAB-AB5E-79D47BFA4CAE</a:ObjectID>
+<a:Name>鍒嗙被鍥炬爣</a:Name>
+<a:Code>ICON_PIC</a:Code>
+<a:CreationDate>1695373703</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695373773</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒嗙被鍥炬爣</a:Comment>
+<a:DataType>varchar(1024)</a:DataType>
+<a:Length>1024</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o350">
+<a:ObjectID>FB4F2916-52C3-4E2B-80B3-959F92FBF4B0</a:ObjectID>
+<a:Name>涓婄骇鍒嗙被id</a:Name>
+<a:Code>PARENT_ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>涓婄骇鍒嗙被id</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o351">
+<a:ObjectID>8E307FF9-C695-4450-AD70-ED0E7F3CCA75</a:ObjectID>
+<a:Name>灞傜骇</a:Name>
+<a:Code>LV</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>灞傜骇</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o352">
+<a:ObjectID>3D020EB5-B0D6-4A72-A216-83936435407A</a:ObjectID>
+<a:Name>璁板綍鐘舵��</a:Name>
+<a:Code>STATUS</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>璁板綍鐘舵��(0姝e父 1 绂佺敤)</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o353">
+<a:ObjectID>C5832CC4-B22E-4CE2-A896-29C69E6C5A25</a:ObjectID>
+<a:Name>璇存槑</a:Name>
+<a:Code>NOTE</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>璇存槑</a:Comment>
+<a:DataType>varchar(512)</a:DataType>
+<a:Length>512</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o354">
+<a:ObjectID>9A49E9A1-7D14-4EBC-A057-724AC291EFA6</a:ObjectID>
+<a:Name>椤哄簭鍙�</a:Name>
+<a:Code>ORDER_NUM</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤哄簭鍙�</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o355">
+<a:ObjectID>0B9442B7-3897-42B7-9FFF-8BE6975300FB</a:ObjectID>
+<a:Name>鏄惁鍒犻櫎</a:Name>
+<a:Code>IS_DELETE</a:Code>
+<a:CreationDate>1695277589</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277618</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>閫昏緫鍒犻櫎(0 鍚� 1 鏄�)</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o356">
+<a:ObjectID>901FBFCA-E2BF-4412-9C8F-576932B37794</a:ObjectID>
+<a:Name>鍒犻櫎鏃堕棿</a:Name>
+<a:Code>DELETE_TIME</a:Code>
+<a:CreationDate>1695277589</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277618</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒犻櫎鏃堕棿</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o357">
+<a:ObjectID>5D945303-16B5-417E-9559-16CD1D88BAF9</a:ObjectID>
+<a:Name>鍒犻櫎浜�</a:Name>
+<a:Code>DELETE_USER_ID</a:Code>
+<a:CreationDate>1695277589</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277618</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒犻櫎浜�</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o358">
+<a:ObjectID>BDB13038-5ABD-4305-A215-8B3937F4B912</a:ObjectID>
+<a:Name>鍒犻櫎浜哄鍚�</a:Name>
+<a:Code>DELETE_USER_NAME</a:Code>
+<a:CreationDate>1695277589</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277618</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒犻櫎浜哄鍚�</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o359">
+<a:ObjectID>4E14DC42-509A-46A5-AEE7-BD1F7CA7A884</a:ObjectID>
+<a:Name>璁板綍鍒涘缓浜�</a:Name>
+<a:Code>CREATE_USER_ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>璁板綍鍒涘缓浜�</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o360">
+<a:ObjectID>2DDF1E0C-E943-4A26-A67F-8331CBC5C360</a:ObjectID>
+<a:Name>璁板綍鍒涘缓浜哄鍚�</a:Name>
+<a:Code>CREATE_USER_NAME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695277641</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>璁板綍鍒涘缓浜哄鍚�</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o361">
+<a:ObjectID>D5EF6F98-30BD-4D59-BE36-1F0B759A26D2</a:ObjectID>
+<a:Name>璁板綍鍒涘缓鏃堕棿</a:Name>
+<a:Code>CREATE_TIME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>璁板綍鍒涘缓鏃堕棿</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o362">
+<a:ObjectID>5F883ADB-DF39-4D66-BFF8-74BD4A2A215E</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Key.Columns>
+<o:Column Ref="o347"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o362"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o363">
+<a:ObjectID>C2711857-1FC6-45B4-9FBB-898AA7226795</a:ObjectID>
+<a:Name>椤圭洰涓存湡棰勮鎺ユ敹浜篬P_PROJECT_EXPIRATION_NOTIFY_USER]</a:Name>
+<a:Code>P_PROJECT_EXPIRATION_NOTIFY_USER</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695263908</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰涓存湡棰勮鎺ユ敹浜�</a:Comment>
+<a:GlobalObjectID/>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o364">
+<a:ObjectID>22CF7B4B-5025-4458-8815-74890EF1E2DA</a:ObjectID>
+<a:Name>id</a:Name>
+<a:Code>id</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o365">
+<a:ObjectID>4FB42AF1-F428-4A20-8E6D-6C00E296EECA</a:ObjectID>
+<a:Name>椤圭洰id</a:Name>
+<a:Code>PROJECT_ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰id</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o366">
+<a:ObjectID>98B8B6F4-40CC-41FE-B924-C7DBC13548DB</a:ObjectID>
+<a:Name>棰勮绫诲瀷</a:Name>
+<a:Code>EXPIRE_TYPE</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>棰勮绫诲瀷,瀵瑰簲涓存湡棰勮琛ㄥ瓧娈�
+1:棰勮鍓�1 
+2:棰勮鍓�2 
+3:棰勮鍓�3 
+4:瓒呮湡鍚�1
+ 5:瓒呮湡鍚�2 
+6:瓒呮湡鍚�3</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o367">
+<a:ObjectID>5F59EC62-A25C-497E-A999-539EEE7DDF6A</a:ObjectID>
+<a:Name>閫氱煡浜哄憳绫诲瀷</a:Name>
+<a:Code>NOTIFY_TYPE</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>閫氱煡浜哄憳绫诲瀷 1 浜哄憳琛�</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o368">
+<a:ObjectID>D58B0E86-299A-4EAD-8B09-DCEEC337EA21</a:ObjectID>
+<a:Name>閫氱煡浜哄憳ID</a:Name>
+<a:Code>NOTIFY_ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>NOTIFY_TYPE涓�1 浜哄憳琛╱serid</a:Comment>
+<a:GlobalObjectID/>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o369">
+<a:ObjectID>D642FEE2-3CFD-4C36-8907-A0AE45D48C96</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Key.Columns>
+<o:Column Ref="o364"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o369"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o370">
+<a:ObjectID>2CA814A5-983B-4592-ABF3-FBD9B26E23F0</a:ObjectID>
+<a:Name>椤圭洰涓存湡棰勮[P_PROJECT_EXPIRATION_NOTIFY]</a:Name>
+<a:Code>P_PROJECT_EXPIRATION_NOTIFY</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695263898</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰涓存湡棰勮</a:Comment>
+<a:GlobalObjectID/>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o371">
+<a:ObjectID>394E2A99-442C-44E8-B692-B9081A796335</a:ObjectID>
+<a:Name>id</a:Name>
+<a:Code>id</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o372">
+<a:ObjectID>8F175D11-EB71-478C-AD18-C122A32B6A68</a:ObjectID>
+<a:Name>椤圭洰id</a:Name>
+<a:Code>PROJECT_ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰id</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o373">
+<a:ObjectID>7F960911-23C0-4EE0-9C20-BF97FAA6D2CD</a:ObjectID>
+<a:Name>涓存湡鍓�1</a:Name>
+<a:Code>EXPIRE_BEFORE_1</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>涓存湡鍓�1</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o374">
+<a:ObjectID>8667EBA5-F893-4436-9778-FD71A90974F4</a:ObjectID>
+<a:Name>涓存湡鍓�2</a:Name>
+<a:Code>EXPIRE_BEFORE_2</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>涓存湡鍓�2</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o375">
+<a:ObjectID>009940BC-BC6D-4096-AEAB-E295C50F48A5</a:ObjectID>
+<a:Name>涓存湡鍓�3</a:Name>
+<a:Code>EXPIRE_BEFORE_3</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>涓存湡鍓�3</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o376">
+<a:ObjectID>B0A1E829-ACE8-4C56-80AC-5B805A819D23</a:ObjectID>
+<a:Name>瓒呮湡鍚�1</a:Name>
+<a:Code>EXPIRE_AFTER_1</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>瓒呮湡鍚�1</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o377">
+<a:ObjectID>A984B636-FD3E-4F4B-9412-E3545C97EB21</a:ObjectID>
+<a:Name>瓒呮湡鍚�2</a:Name>
+<a:Code>EXPIRE_AFTER_2</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>瓒呮湡鍚�2</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o378">
+<a:ObjectID>9C70B807-29EA-45F4-88EE-21BB2AA29094</a:ObjectID>
+<a:Name>瓒呮湡鍚�3</a:Name>
+<a:Code>EXPIRE_AFTER_3</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>瓒呮湡鍚�3</a:Comment>
+<a:DataType>int</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o379">
+<a:ObjectID>ED60B170-C47D-44C5-9B5D-C6A97C125A4C</a:ObjectID>
+<a:Name>棰勮鏂瑰紡</a:Name>
+<a:Code>NOTIFY_WAY</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>棰勮鏂瑰紡 1 寰俊 2 鐭俊 3鍏ㄩ儴</a:Comment>
+<a:DefaultValue>1</a:DefaultValue>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o380">
+<a:ObjectID>4C62DC3F-9117-4781-9F8F-A78A03811A67</a:ObjectID>
+<a:Name>棰勮鐭俊鍙戦�佹柟寮�</a:Name>
+<a:Code>NOTIFY_MOB_MSG_WAY</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>棰勮鐭俊鍙戦�佹柟寮� 0 鑷姩鍙戦�� 1 鎵嬪姩鍙戦��</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o381">
+<a:ObjectID>EED14E44-59A4-42CF-91EC-7E491B722E25</a:ObjectID>
+<a:Name>棰勮鎵嬫満鍙�</a:Name>
+<a:Code>NOTIFY_MOB</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>棰勮鎵嬫満鍙凤紝澶氫釜鎵嬫満鍙疯嫳鏂囬�楀彿闅斿紑</a:Comment>
+<a:DataType>varchar(1024)</a:DataType>
+<a:Length>1024</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o382">
+<a:ObjectID>29039AA6-F0DF-49C1-88BA-18F12887A55F</a:ObjectID>
+<a:Name>棰勮鑷姩鍙戦�佹椂闂�</a:Name>
+<a:Code>NOTIFY_TIME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>棰勮鑷姩鍙戦�佹椂闂�0-23涔嬮棿鏁存暟</a:Comment>
+<a:DefaultValue>8</a:DefaultValue>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o383">
+<a:ObjectID>D0F9C213-C078-4779-AAD7-7370C3F70EF7</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Key.Columns>
+<o:Column Ref="o371"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o383"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o213">
+<a:ObjectID>A9A110F8-76C0-4177-B21B-94C2695B2A10</a:ObjectID>
+<a:Name>鑺傜偣涓婃姤璁板綍[P_STAGE_NODE_REPORT]</a:Name>
+<a:Code>P_STAGE_NODE_REPORT</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695375047</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鑺傜偣涓婃姤璁板綍</a:Comment>
+<a:GlobalObjectID/>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o384">
+<a:ObjectID>A8A9D435-F212-47B3-8CAA-454133BE7C80</a:ObjectID>
+<a:Name>id</a:Name>
+<a:Code>ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o385">
+<a:ObjectID>D78296D7-C871-4567-8FE0-5BC12F924729</a:ObjectID>
+<a:Name>椤圭洰id</a:Name>
+<a:Code>PROJECT_ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰妯℃澘id</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o386">
+<a:ObjectID>E582188D-45EF-44EB-93C7-C402113D41B6</a:ObjectID>
+<a:Name>椤圭洰闃舵ID</a:Name>
+<a:Code>PROJECT_STAGE_ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰闃舵妯℃澘ID</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o387">
+<a:ObjectID>8EAC4A13-6918-4DFF-BDE7-1525D8ABC403</a:ObjectID>
+<a:Name>椤圭洰鑺傜偣ID</a:Name>
+<a:Code>PROJECT_NODE_ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰鑺傜偣ID</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o388">
+<a:ObjectID>1EA2CAD3-4B41-4124-BC43-FF4A8593C3B6</a:ObjectID>
+<a:Name>鏈杩涘害</a:Name>
+<a:Code>NODE_PROGRESS</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鏈杩涘害</a:Comment>
+<a:DataType>varchar(1024)</a:DataType>
+<a:Length>1024</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o389">
+<a:ObjectID>620A538D-8BD7-4BC0-AD1E-CC6562010F5C</a:ObjectID>
+<a:Name>鍥剧墖</a:Name>
+<a:Code>PICTURE_CONTENT</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍥剧墖</a:Comment>
+<a:DataType>varchar(1024)</a:DataType>
+<a:Length>1024</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o390">
+<a:ObjectID>C251C0F5-1D5F-4D88-9732-AB9AA6CCA487</a:ObjectID>
+<a:Name>闄勪欢</a:Name>
+<a:Code>FILE_CONTENT</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>闄勪欢</a:Comment>
+<a:DataType>varchar(1024)</a:DataType>
+<a:Length>1024</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o391">
+<a:ObjectID>262F8577-A9D2-43E4-944D-98831B15E2D1</a:ObjectID>
+<a:Name>鑺傜偣鏄惁瀹屾垚</a:Name>
+<a:Code>NODE_COMPLETE</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鑺傜偣鏄惁瀹屾垚 0鏈畬鎴� 1 瀹屾垚</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o392">
+<a:ObjectID>E0D6C5C4-412E-4858-9741-A94C894D3353</a:ObjectID>
+<a:Name>涓婃姤浜�</a:Name>
+<a:Code>CREATE_USER_ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>涓婃姤浜�</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o393">
+<a:ObjectID>BF469AA3-CC10-4A62-B97E-40B21D368693</a:ObjectID>
+<a:Name>涓婃姤浜哄鍚�</a:Name>
+<a:Code>CREATE_USER_NAME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>涓婃姤浜哄鍚�</a:Comment>
+<a:DataType>varchar(28)</a:DataType>
+<a:Length>28</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o394">
+<a:ObjectID>DA6B8684-0221-4608-89F7-0613B5E3795A</a:ObjectID>
+<a:Name>涓婃姤鏃堕棿</a:Name>
+<a:Code>CREATE_TIME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>涓婃姤鏃堕棿</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o395">
+<a:ObjectID>88C3DEA7-1091-430A-A838-FF8D039143DC</a:ObjectID>
+<a:Name>澶囨敞</a:Name>
+<a:Code>REMARK</a:Code>
+<a:CreationDate>1695374931</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695375047</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>澶囨敞锛屼緥濡傚懆鏄熸槦瀹屾垚浜� 绔嬮」/鍙爺 闃舵鐨� 椤圭洰瀹℃煡 鑺傜偣</a:Comment>
+<a:DataType>varchar(512)</a:DataType>
+<a:Length>512</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o396">
+<a:ObjectID>2B2DF64E-135A-4815-B0DA-F0C6EE4B86F7</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Key.Columns>
+<o:Column Ref="o384"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o396"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o255">
+<a:ObjectID>1E10CD1D-82D9-429E-BA5D-1A0AA9A1467D</a:ObjectID>
+<a:Name>瀵煎叆璁板綍[P_IMPORT_RECORD]</a:Name>
+<a:Code>P_IMPORT_RECORD</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695259917</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>瀵煎叆璁板綍</a:Comment>
+<a:GlobalObjectID/>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o397">
+<a:ObjectID>15944CA9-49BF-4E57-9BE2-5DA6BFA257BF</a:ObjectID>
+<a:Name>ID</a:Name>
+<a:Code>ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o398">
+<a:ObjectID>B94B201C-5969-46E8-A8ED-C8B5DA0F5CE3</a:ObjectID>
+<a:Name>瀵煎叆鏂囦欢璺緞</a:Name>
+<a:Code>IMPORT_FILE_PATH</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>瀵煎叆鏂囦欢璺緞</a:Comment>
+<a:DataType>varchar(256)</a:DataType>
+<a:Length>256</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o399">
+<a:ObjectID>EC346591-A858-4C74-BFCC-328044D5A8AF</a:ObjectID>
+<a:Name>瀵煎叆缁撴灉鏂囦欢璺緞</a:Name>
+<a:Code>RESULT_FILE_PATH</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>瀵煎叆缁撴灉鏂囦欢璺緞</a:Comment>
+<a:DataType>varchar(256)</a:DataType>
+<a:Length>256</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o400">
+<a:ObjectID>A6C375DB-BCF2-492C-BF70-3142A91AB958</a:ObjectID>
+<a:Name>杩涘害鏍囪瘑[ 0.杩涜涓� 1.宸插畬鎴怾</a:Name>
+<a:Code>PROCESS_FLAG</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>杩涘害鏍囪瘑[ 0.杩涜涓� 1.宸插畬鎴怾</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o401">
+<a:ObjectID>7CDEE23E-3023-40D0-AD94-F2D25B7EDA68</a:ObjectID>
+<a:Name>杩涘害鏍囪瘑[ 0.鍑洪敊 1.鎴愬姛]</a:Name>
+<a:Code>IMPORT_FLAG</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>杩涘害鏍囪瘑[ 0.鍑洪敊 1.鎴愬姛]</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o402">
+<a:ObjectID>2B99FEAB-D817-49F0-8AB6-880C4B42BBF3</a:ObjectID>
+<a:Name>瀵煎叆绫诲瀷</a:Name>
+<a:Code>IMPORT_TYPE</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>瀵煎叆绫诲瀷 0椤圭洰淇℃伅瀵煎叆</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o403">
+<a:ObjectID>7046E3C6-B273-4B21-8D03-1DB71CC07C72</a:ObjectID>
+<a:Name>鍒涘缓鏈烘瀯</a:Name>
+<a:Code>ORG_CODE</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓鏈烘瀯</a:Comment>
+<a:DataType>varchar(32)</a:DataType>
+<a:Length>32</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o404">
+<a:ObjectID>DDA2B347-E514-449D-ABB8-40D727E0A572</a:ObjectID>
+<a:Name>鍒涘缓浜�</a:Name>
+<a:Code>CREATE_USER_ID</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓浜�</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o405">
+<a:ObjectID>05CF7F61-29ED-43B3-9A68-1D489EA12CAE</a:ObjectID>
+<a:Name>鍒涘缓浜哄鍚�</a:Name>
+<a:Code>CREATE_USER_NAME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓浜哄鍚�</a:Comment>
+<a:DataType>varchar(28)</a:DataType>
+<a:Length>28</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o406">
+<a:ObjectID>8219E590-E290-4642-ADBD-18D15C9DADDD</a:ObjectID>
+<a:Name>鍒涘缓鏃堕棿</a:Name>
+<a:Code>CREATE_TIME</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓鏃堕棿</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o407">
+<a:ObjectID>3312E806-2CD9-420F-BBDA-C8610CBFD91A</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Key.Columns>
+<o:Column Ref="o397"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o407"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Shortcut Id="o233">
+<a:ObjectID>B7BCCAE3-1074-4D02-90DD-22C50C3D0E09</a:ObjectID>
+<a:Name>椤圭洰妯℃澘鐨勭湅鏉縖P_TEMP_PROJECT_BOARD]</a:Name>
+<a:Code>P_TEMP_PROJECT_BOARD</a:Code>
+<a:CreationDate>1695192851</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695194416</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:TargetStereotype/>
+<a:GlobalObjectID/>
+<a:TargetID>55FE6E31-B10B-442B-8834-36B0F8A409A2</a:TargetID>
+<a:TargetClassID>380BAA40-0042-11D2-BD28-00A02478ECC9</a:TargetClassID>
+<a:TargetPackagePath>&lt;Model&gt;::1.椤圭洰閰嶇疆鍖�</a:TargetPackagePath>
+</o:Shortcut>
+<o:Table Id="o250">
+<a:ObjectID>755BB3FD-57B9-485F-928C-5D319439B6B5</a:ObjectID>
+<a:Name>椤圭洰浜哄憳[P_MANAGER_USER]</a:Name>
+<a:Code>P_MANAGER_USER</a:Code>
+<a:CreationDate>1695348661</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695367822</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰浜哄憳锛堝~鎶ヨ繘搴︼級</a:Comment>
+<a:GlobalObjectID/>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o408">
+<a:ObjectID>F39842C8-E4DA-46D7-87E9-7F2290D4AA58</a:ObjectID>
+<a:Name>id</a:Name>
+<a:Code>id</a:Code>
+<a:CreationDate>1695348718</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695365853</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o409">
+<a:ObjectID>37087591-0CD0-4EDE-A38C-EEDB33930854</a:ObjectID>
+<a:Name>椤圭洰id</a:Name>
+<a:Code>PROJECT_ID</a:Code>
+<a:CreationDate>1695361513</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695361527</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰id</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o410">
+<a:ObjectID>DDCEC448-8E36-45A9-9882-7E4C2A53BB21</a:ObjectID>
+<a:Name>椤圭洰浜哄憳id</a:Name>
+<a:Code>CREATE_USER_ID</a:Code>
+<a:CreationDate>1695361360</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695367822</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰浜哄憳id</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o411">
+<a:ObjectID>F7B9B0FA-18E9-45F4-A76D-4B90CB0D9194</a:ObjectID>
+<a:Name>鏄惁涓洪」鐩粡鐞�</a:Name>
+<a:Code>MANAGER_FLAG</a:Code>
+<a:CreationDate>1695367764</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695367822</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鏄惁涓洪」鐩粡鐞� 0鍚� 1鏄�</a:Comment>
+<a:DataType>smallint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o412">
+<a:ObjectID>775C3127-930A-4764-B606-DE10C3F90B13</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1695365848</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695365853</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Key.Columns>
+<o:Column Ref="o408"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o412"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o251">
+<a:ObjectID>B1D93AA3-3F2B-4F22-9C7D-7E474260E03E</a:ObjectID>
+<a:Name>椤圭洰鎶曡祫涓嬭揪鎯呭喌[P_RELEASE_INVEST_INFO]</a:Name>
+<a:Code>P_RELEASE_INVEST_INFO</a:Code>
+<a:CreationDate>1695365993</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695366178</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰鎶曡祫涓嬭揪鎯呭喌</a:Comment>
+<a:GlobalObjectID/>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o413">
+<a:ObjectID>08BE1951-C743-488E-A7D3-F2A4C8E03516</a:ObjectID>
+<a:Name>id</a:Name>
+<a:Code>id</a:Code>
+<a:CreationDate>1695365993</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695365993</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:DataType>bigint</a:DataType>
+<a:Column.Mandatory>1</a:Column.Mandatory>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o414">
+<a:ObjectID>BCE56EAC-3DD0-4FAB-973C-CD43ED87BB10</a:ObjectID>
+<a:Name>椤圭洰id</a:Name>
+<a:Code>PROJECT_ID</a:Code>
+<a:CreationDate>1695365993</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695365993</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>椤圭洰id</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o415">
+<a:ObjectID>3A2ECDCF-3DB5-4EB8-8B0E-5449241DFF31</a:ObjectID>
+<a:Name>鏈涓嬭揪鎶曡祫閲戦</a:Name>
+<a:Code>RELEASE_INVEST</a:Code>
+<a:CreationDate>1695365993</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695366204</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鏈涓嬭揪鎶曡祫閲戦</a:Comment>
+<a:DataType>numeric(20,4)</a:DataType>
+<a:Length>20</a:Length>
+<a:Precision>4</a:Precision>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o416">
+<a:ObjectID>72E9E8F0-574B-472A-A191-C58A3E66506F</a:ObjectID>
+<a:Name>涓嬭揪鏃堕棿</a:Name>
+<a:Code>APPROVAL_DATE</a:Code>
+<a:CreationDate>1695365993</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695366178</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>涓嬭揪鏃堕棿</a:Comment>
+<a:DataType>date</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o417">
+<a:ObjectID>693F0AFE-E9DD-4F4A-85D1-63A12CC0340E</a:ObjectID>
+<a:Name>鍒涘缓浜�</a:Name>
+<a:Code>CREATE_USER_ID</a:Code>
+<a:CreationDate>1695365993</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695365993</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓浜�</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o418">
+<a:ObjectID>CB0850FF-2838-4543-AA4E-747A2C83E2A1</a:ObjectID>
+<a:Name>鍒涘缓浜哄鍚�</a:Name>
+<a:Code>CREATE_USER_NAME</a:Code>
+<a:CreationDate>1695365993</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695365993</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓浜哄鍚�</a:Comment>
+<a:DataType>varchar(28)</a:DataType>
+<a:Length>28</a:Length>
+<a:GlobalObjectID/>
+</o:Column>
+<o:Column Id="o419">
+<a:ObjectID>F2850A8A-A982-44B9-BA25-C44D0AFB259A</a:ObjectID>
+<a:Name>鍒涘缓鏃堕棿</a:Name>
+<a:Code>CREATE_TIME</a:Code>
+<a:CreationDate>1695365993</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695365993</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:Comment>鍒涘缓鏃堕棿</a:Comment>
+<a:DataType>bigint</a:DataType>
+<a:GlobalObjectID/>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o420">
+<a:ObjectID>2316DD4F-3003-46D7-9DFD-0331BD9FA3A1</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1695365993</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695365993</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Key.Columns>
+<o:Column Ref="o413"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o420"/>
+</c:PrimaryKey>
+</o:Table>
+</c:Tables>
+<c:References>
+<o:Reference Id="o219">
+<a:ObjectID>6B8CA004-577B-48ED-812B-CDDD6AA4022F</a:ObjectID>
+<a:Name>Reference_23</a:Name>
+<a:Code>Reference_23</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:Cardinality>0..*</a:Cardinality>
+<a:UpdateConstraint>1</a:UpdateConstraint>
+<a:DeleteConstraint>1</a:DeleteConstraint>
+<c:ParentTable>
+<o:Table Ref="o247"/>
+</c:ParentTable>
+<c:ChildTable>
+<o:Table Ref="o255"/>
+</c:ChildTable>
+<c:ParentKey>
+<o:Key Ref="o346"/>
+</c:ParentKey>
+<c:Joins>
+<o:ReferenceJoin Id="o421">
+<a:ObjectID>D9B8D5C7-4166-40C0-8B62-37AA9F1DCE68</a:ObjectID>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Object1>
+<o:Column Ref="o298"/>
+</c:Object1>
+</o:ReferenceJoin>
+</c:Joins>
+</o:Reference>
+<o:Reference Id="o208">
+<a:ObjectID>60338510-F584-49A4-9529-0FFAB71B4547</a:ObjectID>
+<a:Name>Reference_22</a:Name>
+<a:Code>Reference_22</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:Cardinality>0..*</a:Cardinality>
+<a:UpdateConstraint>1</a:UpdateConstraint>
+<a:DeleteConstraint>1</a:DeleteConstraint>
+<c:ParentTable>
+<o:Table Ref="o249"/>
+</c:ParentTable>
+<c:ChildTable>
+<o:Table Ref="o213"/>
+</c:ChildTable>
+<c:ParentKey>
+<o:Key Ref="o283"/>
+</c:ParentKey>
+<c:Joins>
+<o:ReferenceJoin Id="o422">
+<a:ObjectID>77E37539-F6AE-40FC-9D3C-45F9662BB063</a:ObjectID>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Object1>
+<o:Column Ref="o268"/>
+</c:Object1>
+</o:ReferenceJoin>
+</c:Joins>
+</o:Reference>
+<o:Reference Id="o205">
+<a:ObjectID>F2469E7F-200A-467D-9938-BC6EDB9242AD</a:ObjectID>
+<a:Name>Reference_15</a:Name>
+<a:Code>Reference_15</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:Cardinality>0..*</a:Cardinality>
+<a:UpdateConstraint>1</a:UpdateConstraint>
+<a:DeleteConstraint>1</a:DeleteConstraint>
+<c:ParentTable>
+<o:Table Ref="o249"/>
+</c:ParentTable>
+<c:ChildTable>
+<o:Table Ref="o224"/>
+</c:ChildTable>
+<c:ParentKey>
+<o:Key Ref="o283"/>
+</c:ParentKey>
+<c:Joins>
+<o:ReferenceJoin Id="o423">
+<a:ObjectID>494FE933-A350-43CC-89E7-36903A350310</a:ObjectID>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Object1>
+<o:Column Ref="o268"/>
+</c:Object1>
+</o:ReferenceJoin>
+</c:Joins>
+</o:Reference>
+<o:Reference Id="o202">
+<a:ObjectID>0FB6A757-2AF5-47CA-9E83-1ED55ACB201D</a:ObjectID>
+<a:Name>Reference_14</a:Name>
+<a:Code>Reference_14</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:Cardinality>0..*</a:Cardinality>
+<a:UpdateConstraint>1</a:UpdateConstraint>
+<a:DeleteConstraint>1</a:DeleteConstraint>
+<c:ParentTable>
+<o:Table Ref="o249"/>
+</c:ParentTable>
+<c:ChildTable>
+<o:Table Ref="o234"/>
+</c:ChildTable>
+<c:ParentKey>
+<o:Key Ref="o283"/>
+</c:ParentKey>
+<c:Joins>
+<o:ReferenceJoin Id="o424">
+<a:ObjectID>1F714135-739F-41BF-A263-35BAE4342835</a:ObjectID>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Object1>
+<o:Column Ref="o268"/>
+</c:Object1>
+</o:ReferenceJoin>
+</c:Joins>
+</o:Reference>
+<o:Reference Id="o244">
+<a:ObjectID>9D8E7250-609B-4B67-A86A-A8B13F44C95D</a:ObjectID>
+<a:Name>Reference_12</a:Name>
+<a:Code>Reference_12</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:Cardinality>0..*</a:Cardinality>
+<a:UpdateConstraint>1</a:UpdateConstraint>
+<a:DeleteConstraint>1</a:DeleteConstraint>
+<c:ParentTable>
+<o:Table Ref="o248"/>
+</c:ParentTable>
+<c:ChildTable>
+<o:Table Ref="o249"/>
+</c:ChildTable>
+<c:ParentKey>
+<o:Key Ref="o296"/>
+</c:ParentKey>
+<c:Joins>
+<o:ReferenceJoin Id="o425">
+<a:ObjectID>928BD0D5-820D-4D9B-8DD8-937F843D394E</a:ObjectID>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Object1>
+<o:Column Ref="o285"/>
+</c:Object1>
+</o:ReferenceJoin>
+</c:Joins>
+</o:Reference>
+<o:Reference Id="o246">
+<a:ObjectID>83F3A15E-1D08-4E8B-B567-EA2D5B424FFC</a:ObjectID>
+<a:Name>Reference_11</a:Name>
+<a:Code>Reference_11</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:Cardinality>0..*</a:Cardinality>
+<a:UpdateConstraint>1</a:UpdateConstraint>
+<a:DeleteConstraint>1</a:DeleteConstraint>
+<c:ParentTable>
+<o:Table Ref="o247"/>
+</c:ParentTable>
+<c:ChildTable>
+<o:Table Ref="o248"/>
+</c:ChildTable>
+<c:ParentKey>
+<o:Key Ref="o346"/>
+</c:ParentKey>
+<c:Joins>
+<o:ReferenceJoin Id="o426">
+<a:ObjectID>52697E19-2516-420B-A9FF-4EAAC0C9E707</a:ObjectID>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Object1>
+<o:Column Ref="o298"/>
+</c:Object1>
+</o:ReferenceJoin>
+</c:Joins>
+</o:Reference>
+<o:Reference Id="o427">
+<a:ObjectID>27424C9E-C3EB-4D0B-B091-FF1F8CA13726</a:ObjectID>
+<a:Name>Reference_10</a:Name>
+<a:Code>Reference_10</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:Cardinality>0..*</a:Cardinality>
+<a:UpdateConstraint>1</a:UpdateConstraint>
+<a:DeleteConstraint>1</a:DeleteConstraint>
+<c:ParentTable>
+<o:Table Ref="o247"/>
+</c:ParentTable>
+<c:ChildTable>
+<o:Table Ref="o370"/>
+</c:ChildTable>
+<c:ParentKey>
+<o:Key Ref="o346"/>
+</c:ParentKey>
+<c:Joins>
+<o:ReferenceJoin Id="o428">
+<a:ObjectID>087CD2F5-FDFC-41C4-A1AF-36E77F994EF7</a:ObjectID>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695192659</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Object1>
+<o:Column Ref="o298"/>
+</c:Object1>
+</o:ReferenceJoin>
+</c:Joins>
+</o:Reference>
+<o:Reference Id="o232">
+<a:ObjectID>B27B62F4-F360-4F02-B0B7-C93B31192BB5</a:ObjectID>
+<a:Name>Reference_24</a:Name>
+<a:Code>Reference_24</a:Code>
+<a:CreationDate>1695192858</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695193362</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:Cardinality>0..*</a:Cardinality>
+<a:UpdateConstraint>1</a:UpdateConstraint>
+<a:DeleteConstraint>1</a:DeleteConstraint>
+<c:ParentTable>
+<o:Shortcut Ref="o233"/>
+</c:ParentTable>
+<c:ChildTable>
+<o:Table Ref="o234"/>
+</c:ChildTable>
+<c:ParentKey>
+<o:Key Ref="o99"/>
+</c:ParentKey>
+<c:Joins>
+<o:ReferenceJoin Id="o429">
+<a:ObjectID>A0ACC72B-00D9-4575-8BA6-F83C26C80C3A</a:ObjectID>
+<a:CreationDate>1695192858</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695193362</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Object1>
+<o:Column Ref="o94"/>
+</c:Object1>
+</o:ReferenceJoin>
+</c:Joins>
+</o:Reference>
+<o:Reference Id="o211">
+<a:ObjectID>23DA5833-1277-48FE-B87A-0E5D0A63C8F7</a:ObjectID>
+<a:Name>Reference_21</a:Name>
+<a:Code>Reference_21</a:Code>
+<a:CreationDate>1695278490</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695278500</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:Cardinality>0..*</a:Cardinality>
+<a:UpdateConstraint>1</a:UpdateConstraint>
+<a:DeleteConstraint>1</a:DeleteConstraint>
+<c:ParentTable>
+<o:Table Ref="o248"/>
+</c:ParentTable>
+<c:ChildTable>
+<o:Table Ref="o224"/>
+</c:ChildTable>
+<c:ParentKey>
+<o:Key Ref="o296"/>
+</c:ParentKey>
+<c:Joins>
+<o:ReferenceJoin Id="o430">
+<a:ObjectID>BB42488D-1757-406A-89C0-EF48B2B7ECE9</a:ObjectID>
+<a:CreationDate>1695278490</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695278500</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Object1>
+<o:Column Ref="o285"/>
+</c:Object1>
+</o:ReferenceJoin>
+</c:Joins>
+</o:Reference>
+<o:Reference Id="o242">
+<a:ObjectID>39550C99-793F-4BA2-B78D-4197800D30FC</a:ObjectID>
+<a:Name>Reference_26</a:Name>
+<a:Code>Reference_26</a:Code>
+<a:CreationDate>1695361536</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695361546</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:Cardinality>0..*</a:Cardinality>
+<a:UpdateConstraint>1</a:UpdateConstraint>
+<a:DeleteConstraint>1</a:DeleteConstraint>
+<c:ParentTable>
+<o:Table Ref="o247"/>
+</c:ParentTable>
+<c:ChildTable>
+<o:Table Ref="o250"/>
+</c:ChildTable>
+<c:ParentKey>
+<o:Key Ref="o346"/>
+</c:ParentKey>
+<c:Joins>
+<o:ReferenceJoin Id="o431">
+<a:ObjectID>895CFAE1-EFB0-47E8-9CCE-31E38279331E</a:ObjectID>
+<a:CreationDate>1695361536</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695361546</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Object1>
+<o:Column Ref="o298"/>
+</c:Object1>
+</o:ReferenceJoin>
+</c:Joins>
+</o:Reference>
+<o:Reference Id="o239">
+<a:ObjectID>CD66CD70-A62D-430F-B00D-3429594E9CC0</a:ObjectID>
+<a:Name>Reference_28</a:Name>
+<a:Code>Reference_28</a:Code>
+<a:CreationDate>1695366056</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695366065</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:Cardinality>0..*</a:Cardinality>
+<a:UpdateConstraint>1</a:UpdateConstraint>
+<a:DeleteConstraint>1</a:DeleteConstraint>
+<c:ParentTable>
+<o:Table Ref="o247"/>
+</c:ParentTable>
+<c:ChildTable>
+<o:Table Ref="o251"/>
+</c:ChildTable>
+<c:ParentKey>
+<o:Key Ref="o346"/>
+</c:ParentKey>
+<c:Joins>
+<o:ReferenceJoin Id="o432">
+<a:ObjectID>94259355-EA64-4EA0-84AF-0E9116A4E9DB</a:ObjectID>
+<a:CreationDate>1695366056</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695366065</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Object1>
+<o:Column Ref="o298"/>
+</c:Object1>
+</o:ReferenceJoin>
+</c:Joins>
+</o:Reference>
+<o:Reference Id="o222">
+<a:ObjectID>E738CC9E-9B38-43E0-9FE0-261630DDC7E6</a:ObjectID>
+<a:Name>Reference_29</a:Name>
+<a:Code>Reference_29</a:Code>
+<a:CreationDate>1695371367</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695371376</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:Cardinality>0..*</a:Cardinality>
+<a:UpdateConstraint>1</a:UpdateConstraint>
+<a:DeleteConstraint>1</a:DeleteConstraint>
+<c:ParentTable>
+<o:Table Ref="o227"/>
+</c:ParentTable>
+<c:ChildTable>
+<o:Table Ref="o247"/>
+</c:ChildTable>
+<c:ParentKey>
+<o:Key Ref="o362"/>
+</c:ParentKey>
+<c:Joins>
+<o:ReferenceJoin Id="o433">
+<a:ObjectID>4F51235A-CF62-4A1A-A8F7-0A12EFAA7C50</a:ObjectID>
+<a:CreationDate>1695371367</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695371376</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:Object1>
+<o:Column Ref="o347"/>
+</c:Object1>
+</o:ReferenceJoin>
+</c:Joins>
+</o:Reference>
+</c:References>
+<c:ArchitectureAreas>
+<o:Area Id="o215">
+<a:ObjectID>F80827BE-58F3-483C-A483-CCEF2FF4C42E</a:ObjectID>
+<a:Name>灏忕▼搴忚妭鐐硅褰曚笂鎶�</a:Name>
+<a:Code>灏忕▼搴忚妭鐐硅褰曚笂鎶�</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695193259</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:AttachedObjects>
+<o:Table Ref="o213"/>
+</c:AttachedObjects>
+</o:Area>
+<o:Area Id="o225">
+<a:ObjectID>98614243-8B20-42EB-BF67-09ADBCBCFC4C</a:ObjectID>
+<a:Name>鑺傜偣瀹屾垚閫氱煡</a:Name>
+<a:Code>鑺傜偣瀹屾垚閫氱煡</a:Code>
+<a:CreationDate>1695194032</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695194056</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:AttachedObjects>
+<o:Table Ref="o224"/>
+</c:AttachedObjects>
+</o:Area>
+<o:Area Id="o228">
+<a:ObjectID>5DFBB515-96E7-4FDA-8E9B-B162C2C1E6F9</a:ObjectID>
+<a:Name>椤圭洰鍒嗙被</a:Name>
+<a:Code>椤圭洰鍒嗙被</a:Code>
+<a:CreationDate>1695194071</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695194771</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:AttachedObjects>
+<o:Table Ref="o227"/>
+</c:AttachedObjects>
+</o:Area>
+<o:Area Id="o235">
+<a:ObjectID>5D81C935-FE2B-4AFA-87C4-5BDA073FEE0A</a:ObjectID>
+<a:Name>缁熻鐪嬫澘</a:Name>
+<a:Code>缁熻鐪嬫澘</a:Code>
+<a:CreationDate>1695194075</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695194441</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:AttachedObjects>
+<o:Shortcut Ref="o233"/>
+<o:Table Ref="o234"/>
+</c:AttachedObjects>
+</o:Area>
+<o:Area Id="o253">
+<a:ObjectID>E2C3F61E-FF2C-4987-B86A-1CF424704842</a:ObjectID>
+<a:Name>椤圭洰淇℃伅</a:Name>
+<a:Code>椤圭洰淇℃伅</a:Code>
+<a:CreationDate>1695194077</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695375513</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:AttachedObjects>
+<o:Table Ref="o247"/>
+<o:Table Ref="o248"/>
+<o:Table Ref="o249"/>
+<o:Table Ref="o250"/>
+<o:Reference Ref="o242"/>
+<o:Table Ref="o251"/>
+<o:Reference Ref="o239"/>
+</c:AttachedObjects>
+</o:Area>
+<o:Area Id="o256">
+<a:ObjectID>C1FE5575-8751-4C15-98F7-C9104465F539</a:ObjectID>
+<a:Name>瀵煎叆璁板綍</a:Name>
+<a:Code>瀵煎叆璁板綍</a:Code>
+<a:CreationDate>1695192659</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695194515</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<c:AttachedObjects>
+<o:Table Ref="o255"/>
+</c:AttachedObjects>
+</o:Area>
+</c:ArchitectureAreas>
+</o:Package>
+</c:Packages>
+<c:DefaultDiagram>
+<o:PhysicalDiagram Ref="o4"/>
+</c:DefaultDiagram>
+<c:DefaultGroups>
+<o:Group Id="o434">
+<a:ObjectID>FA5AE57F-C446-4936-BE5B-F2B0DACD411D</a:ObjectID>
+<a:Name>PUBLIC</a:Name>
+<a:Code>PUBLIC</a:Code>
+<a:CreationDate>1695026953</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695026953</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+</o:Group>
+</c:DefaultGroups>
+<c:TargetModels>
+<o:TargetModel Id="o435">
+<a:ObjectID>81C8759C-EFE9-489E-A6C1-9DC05BB808FE</a:ObjectID>
+<a:Name>MySQL 5.0</a:Name>
+<a:Code>MYSQL50</a:Code>
+<a:CreationDate>1695026953</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1242731549</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:TargetModelURL>file:///%[XDB]%/mysql50.xdb</a:TargetModelURL>
+<a:TargetModelID>F4F16ECD-F2F1-4006-AF6F-638D5C65F35E</a:TargetModelID>
+<a:TargetModelClassID>4BA9F647-DAB1-11D1-9944-006097355D9B</a:TargetModelClassID>
+<a:TargetModelLastModificationDate>1242731549</a:TargetModelLastModificationDate>
+<c:SessionShortcuts>
+<o:Shortcut Ref="o3"/>
+</c:SessionShortcuts>
+</o:TargetModel>
+<o:TargetModel Id="o436">
+<a:ObjectID>BFAECDFA-4B16-4245-931C-BF13580E8FFC</a:ObjectID>
+<a:Name>projec_progress_manage</a:Name>
+<a:Code>projec_progress_manage</a:Code>
+<a:CreationDate>1695192851</a:CreationDate>
+<a:Creator>cy</a:Creator>
+<a:ModificationDate>1695375513</a:ModificationDate>
+<a:Modifier>cy</a:Modifier>
+<a:GlobalObjectID/>
+<a:TargetModelURL>file:///.</a:TargetModelURL>
+<a:TargetModelID>662D642A-73E4-4CD8-9FD8-09DE1063C71D</a:TargetModelID>
+<a:TargetModelClassID>CDE44E21-9669-11D1-9914-006097355D9B</a:TargetModelClassID>
+<a:TargetModelLastModificationDate>1695375513</a:TargetModelLastModificationDate>
+<c:SessionShortcuts>
+<o:Shortcut Ref="o233"/>
+</c:SessionShortcuts>
+</o:TargetModel>
+</c:TargetModels>
+</o:Model>
+</c:Children>
+</o:RootObject>
+
+</Model>
\ No newline at end of file
diff --git "a/consum-base/doc/\346\226\260\345\273\272\346\223\215\344\275\234\346\235\203\351\231\220\347\244\272\344\276\213.txt" "b/consum-base/doc/\346\226\260\345\273\272\346\223\215\344\275\234\346\235\203\351\231\220\347\244\272\344\276\213.txt"
new file mode 100644
index 0000000..6003248
--- /dev/null
+++ "b/consum-base/doc/\346\226\260\345\273\272\346\223\215\344\275\234\346\235\203\351\231\220\347\244\272\344\276\213.txt"
@@ -0,0 +1,13 @@
+銆愯璁剧疆ID浠�99001寮�濮嬪線鍚庡姞銆�
+INSERT INTO "C##FINANCE_OPS_TEST"."S_MENU"("MENU_ID", "MENU_NAME", "PARENT_ID", "ORDER_NUM", "PATH", "COMPONENT", "QUERY", "IS_FRAME", "IS_CACHE", "MENU_TYPE", "VISIBLE", "STATUS", "PERMS", "ICON", "REMARK", "IS_SHOW", "TYPE") VALUES ('99001', '鍩虹淇℃伅-鏈烘瀯鏍�', '7000', '1', NULL, NULL, NULL, '1', '0', 'F', '0', '0', 'platform:fin:sys:org:select:tree_fin_org', 's-tools', NULL, '1', '0');
+INSERT INTO "C##FINANCE_OPS_TEST"."S_MENU"("MENU_ID", "MENU_NAME", "PARENT_ID", "ORDER_NUM", "PATH", "COMPONENT", "QUERY", "IS_FRAME", "IS_CACHE", "MENU_TYPE", "VISIBLE", "STATUS", "PERMS", "ICON", "REMARK", "IS_SHOW", "TYPE") VALUES ('99002', '鍩虹淇℃伅-鐢ㄦ埛鍒嗛〉鍒楄〃', '7000', '1', NULL, NULL, NULL, '1', '0', 'F', '0', '0', 'platform:fin:sys:user:select:list', 's-tools', NULL, '1', '0');
+
+
+INSERT INTO "C##FINANCE_OPS_TEST"."S_MENU"("MENU_ID", "MENU_NAME", "PARENT_ID", "ORDER_NUM", "PATH", "COMPONENT", "QUERY", "IS_FRAME", "IS_CACHE", "MENU_TYPE", "VISIBLE", "STATUS", "PERMS", "ICON", "REMARK", "IS_SHOW", "TYPE") VALUES ('99003', '椤圭洰绠$悊-椤圭洰淇℃伅-椤圭洰鍒嗛〉鍒楄〃', '11000', '1', NULL, NULL, NULL, '1', '0', 'F', '0', '0', 'platform:fin:sys:user:select:list', 's-tools', NULL, '1', '0');
+
+INSERT INTO "C##FINANCE_OPS_TEST"."S_MENU"("MENU_ID", "MENU_NAME", "PARENT_ID", "ORDER_NUM", "PATH", "COMPONENT", "QUERY", "IS_FRAME", "IS_CACHE", "MENU_TYPE", "VISIBLE", "STATUS", "PERMS", "ICON", "REMARK", "IS_SHOW", "TYPE") VALUES ('99004', '椤圭洰绠$悊-椤圭洰淇℃伅-鏂板', '11000', '1', NULL, NULL, NULL, '1', '0', 'F', '0', '0', 'platform:fin:sys:user:select:list', 's-tools', NULL, '1', '0');
+
+
+INSERT INTO "C##FINANCE_OPS_TEST"."S_MENU"("MENU_ID", "MENU_NAME", "PARENT_ID", "ORDER_NUM", "PATH", "COMPONENT", "QUERY", "IS_FRAME", "IS_CACHE", "MENU_TYPE", "VISIBLE", "STATUS", "PERMS", "ICON", "REMARK", "IS_SHOW", "TYPE") VALUES ('99005', '椤圭洰绠$悊-椤圭洰淇℃伅-缂栬緫', '11000', '1', NULL, NULL, NULL, '1', '0', 'F', '0', '0', 'platform:fin:sys:user:select:list', 's-tools', NULL, '1', '0');
+
+INSERT INTO "C##FINANCE_OPS_TEST"."S_MENU"("MENU_ID", "MENU_NAME", "PARENT_ID", "ORDER_NUM", "PATH", "COMPONENT", "QUERY", "IS_FRAME", "IS_CACHE", "MENU_TYPE", "VISIBLE", "STATUS", "PERMS", "ICON", "REMARK", "IS_SHOW", "TYPE") VALUES ('99006', '椤圭洰绠$悊-椤圭洰淇℃伅-璇︽儏', '11000', '1', NULL, NULL, NULL, '1', '0', 'F', '0', '0', 'platform:fin:sys:user:select:list', 's-tools', NULL, '1', '0');
diff --git "a/consum-base/doc/\346\227\266\351\227\264\346\237\245\350\257\242\345\267\245\345\205\267\347\261\273" "b/consum-base/doc/\346\227\266\351\227\264\346\237\245\350\257\242\345\267\245\345\205\267\347\261\273"
new file mode 100644
index 0000000..ed3e092
--- /dev/null
+++ "b/consum-base/doc/\346\227\266\351\227\264\346\237\245\350\257\242\345\267\245\345\205\267\347\261\273"
@@ -0,0 +1,654 @@
+Date now = new Date(); //鑾峰彇褰撳墠鏃堕棿
+SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+String nowStr = sdf.format(now)+" 00:00:00"; //寰楀埌浠婂ぉ鍑屾櫒鏃堕棿
+String endStr = sdf.format(now)+" 23:59:59"; //寰楀埌浠婂ぉ缁撴潫鏃堕棿
+long timeStrNumber = DateUtils.getDateTimeNumber(nowStr);
+long timeEndNumber = DateUtils.getDateTimeNumber(endStr);
+System.out.println(timeStrNumber);
+System.out.println(timeEndNumber);
+long afterLongTime = DateUtils.getAfterLongTime(timeStrNumber, -1);// 鍓嶄竴澶�
+System.out.println(afterLongTime);
+long afterLongTime1 = DateUtils.getAfterLongTime(timeStrNumber, -7);// 鍓嶄竴鍛�
+System.out.println(afterLongTime1);
+long afterLongTime2 = DateUtils.getAfterLongTime(timeStrNumber, -30);// 鍓�30澶�
+System.out.println(afterLongTime2);
+
+
+package com.walker.infrastructure.utils;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * 澶勭悊鏃ユ湡鏍煎紡浠ュ強杞崲鐨勫伐鍏风被
+ * @author shikeying
+ * @date 2013-11-21
+ *
+ */
+public abstract class DateUtils {
+
+	public static final String TEXT_DATE_WITH_LINE = "yyyy-MM-dd";
+	public static final String TEXT_DATE = "yyyyMMdd";
+	public static final String TEXT_DATE_TIME_WITH_LINE = "yyyy-MM-dd HH:mm:ss";
+	public static final String TEXT_DATE_TIME = "yyyyMMddHHmmss";
+	public static final String TEXT_DATE_START = "yyyyMMdd000000";
+	public static final String TEXT_MONTH_START = "yyyyMM01000000";
+	public static final String TEXT_MONTH_END = "yyyyMMdd235959";
+	public static final String TEXT_YEAR_START = "yyyy0101000000";
+	public static final String TEXT_YEAR_END = "yyyy1231235959";
+//	private static final DateFormat whippletreeDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+//	private static final DateFormat whippletreeTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+//	private static final DateFormat whippleTimeFormat = new SimpleDateFormat("yyyyMMddHHmmss");
+//	private static final DateFormat whippleDateFormat = new SimpleDateFormat("yyyyMMdd");
+//	private static final DateTimeFormatter whippletreeTimeFormat = DateTimeFormatter.ofPattern("yyyy-MMM-dd HH:mm:ss");
+
+	private static final String LATE_OF_DAY = " 23:59:59";
+	public static final String DATE_SEPARATOR_OLD = "/";
+	public static final String DATE_SEPARATOR = "-";
+
+	/**
+	 * 杩斿洖涓婂勾浠界涓�澶╂椂闂村��
+	 * @return 濡傦細20230101000000
+	 * @date 2023-06-02
+	 */
+	public static long getLastYearStartDay() {
+		Calendar c = Calendar.getInstance();
+		c.add(Calendar.YEAR, -1);
+		SimpleDateFormat startSdf = new SimpleDateFormat(TEXT_YEAR_START);
+		return Long.parseLong(startSdf.format(c.getTime()));
+	}
+	public static final long getLastYearEndDay() {
+		Calendar c = Calendar.getInstance();
+		c.add(Calendar.YEAR, -1);
+		SimpleDateFormat endSdf = new SimpleDateFormat(TEXT_YEAR_END);
+		return Long.parseLong(endSdf.format(c.getTime()));
+	}
+
+	/**
+	 * 杩斿洖褰撳墠骞翠唤绗竴澶╂椂闂村��
+	 * @return 濡傦細20230101000000
+	 * @date 2023-06-02
+	 */
+	public static final long getCurrentYearStartDay(){
+		SimpleDateFormat dft = new SimpleDateFormat(TEXT_YEAR_START);
+		return Long.parseLong(dft.format(new Date()));
+	}
+	public static final long getCurrentYearEndDay(){
+		SimpleDateFormat dft = new SimpleDateFormat(TEXT_YEAR_END);
+		return Long.parseLong(dft.format(new Date()));
+	}
+
+	/**
+	 * 杩斿洖涓婃湀绗竴澶╃殑鏃堕棿鍊�
+	 * @return 濡傦細20230601000000
+	 * @date 2023-06-02
+	 */
+	public static final long getLastMonthStartDay() {
+		Calendar c = Calendar.getInstance();
+		c.add(Calendar.MONTH, -1);
+		c.set(Calendar.DAY_OF_MONTH, 1);
+		SimpleDateFormat startSdf = new SimpleDateFormat(TEXT_MONTH_START);
+		return Long.parseLong(startSdf.format(c.getTime()));
+	}
+	public static final long getLastMonthEndDay() {
+		Calendar c = Calendar.getInstance();
+		c.add(Calendar.MONTH, -1);
+		c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));
+		SimpleDateFormat endSdf = new SimpleDateFormat(TEXT_MONTH_END);
+		return Long.parseLong(endSdf.format(c.getTime()));
+	}
+
+	/**
+	 * 杩斿洖褰撳墠鏈堜唤绗竴澶╃殑鏃堕棿鍊�
+	 * @return 濡傦細20230601000000
+	 * @date 2023-06-02
+	 */
+	public static final long getCurrentMonthStartDay(){
+		SimpleDateFormat dft = new SimpleDateFormat(TEXT_MONTH_START);
+		return Long.parseLong(dft.format(new Date()));
+	}
+	public static final long getCurrentMonthEndDay() {
+		Calendar c = Calendar.getInstance();
+		c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));
+		SimpleDateFormat endSdf = new SimpleDateFormat(TEXT_MONTH_END);
+		return Long.parseLong(endSdf.format(c.getTime()));
+	}
+
+
+	/**
+	 * 鑾峰緱鏈懆绗竴澶╋紝鏍煎紡锛�20230602000000
+	 * @date 2023-06-02
+	 */
+	public static long getCurrentWeekStartDay() {
+		Calendar c = Calendar.getInstance();
+		c.add(Calendar.WEEK_OF_MONTH, 0);
+		c.set(Calendar.DAY_OF_WEEK, 2);
+		SimpleDateFormat startSdf = new SimpleDateFormat(TEXT_DATE_START);
+		return Long.parseLong(startSdf.format(c.getTime()));
+	}
+
+	/**
+	 * 鎶婃暟鍊煎彲瑙嗗寲鏃堕棿杞崲鎴愭绉掑�硷紝濡傦細20140829102501 --> 姣鍊�
+	 * @param showTimeLong
+	 * @return
+	 */
+	public static final long toMillSeconds(long showTimeLong){
+		String showTimeStr = toShowDate(showTimeLong);
+		return getDateLong(showTimeStr);
+	}
+
+	/**
+	 * 鎶�8浣嶆暣褰㈡暟鍊硷紝杞崲鎴愭棩鏈熸樉绀烘牸寮忋��</p>
+	 * 濡傦細20140829 --> 2014-08-29
+	 * @param date
+	 * @return
+	 */
+	public static final String toShowDate(int date){
+		return LongCalendar.toString(date, DATE_SEPARATOR);
+	}
+
+	/**
+	 * 鎶�14浣嶆暣褰㈡暟鍊硷紝杞崲鎴愭棩鏈熸樉绀烘牸寮忋��</p>
+	 * 濡傦細20140829102501 --> 2014-08-29 10:25:01
+	 * @param date
+	 * @return
+	 */
+	public static final String toShowDate(long date){
+		return LongCalendar.toString(date, DATE_SEPARATOR);
+	}
+
+	/**
+	 * 鎶婃樉绀虹殑鏃ユ湡鏍煎紡杞寲鎴愭暣鍨嬪�笺��</p>
+	 * 濡傦細2014-08-29 --> 20140829
+	 * @param showDate
+	 * @return
+	 */
+	public static final int toIntegerDate(String showDate){
+		return (int)LongCalendar.longCalender(showDate, DATE_SEPARATOR);
+	}
+	public static final int toIntegerDateTime(String showDate){
+		return (int)LongCalendar.longCalender(showDate, DATE_SEPARATOR);
+	}
+
+	/**
+	 * 鎶婃樉绀虹殑鏃ユ湡鏍煎紡杞寲鎴愭暣鍨嬪�笺��</p>
+	 * 濡傦細2014-08-29 --> 20140829000000
+	 * @param showDate
+	 * @return
+	 */
+	public static final long toLongDateTime(String showDate){
+		return (LongCalendar.longCalender(showDate, DATE_SEPARATOR) * 1000000);
+	}
+
+	/**
+	 * 杩斿洖褰撴湀绗竴澶╂渶鏃╃殑鏃堕棿姣鏁帮紝濡傦細2014-03-01 00:00:00 姣鏁�
+	 * @return
+	 */
+	public static final long getCurrentMonthFirstDayEarly(){
+		return getDateLongEarly(LongDateHelper.getFirstDayOfMonth());
+	}
+
+	/**
+	 * 杩斿洖褰撳ぉ鏈�鏃╃殑姣鏁帮紝鍗筹細褰撳ぉ00:00:00鐨勬绉掑��
+	 * @return
+	 */
+	public static final long getTodayLongEarly(){
+		return getDateLongEarly(getTodayForHuman());
+	}
+
+	/**
+	 * 杩斿洖褰撳ぉ鏈�鏅氱殑姣鏁帮紝鍗筹細褰撳ぉ23:59:59鐨勬绉掑��
+	 * @return
+	 */
+	public static final long getTodayLongLate(){
+		return getDateLongLate(getTodayForHuman());
+	}
+
+	/**
+	 * 杩斿洖褰撳ぉ鏃ユ湡锛屽锛�2013-11-21
+	 * @return
+	 */
+	public static final String getTodayForHuman(){
+		return LongCalendar.getCurrentDateView().replaceAll(DATE_SEPARATOR_OLD, DATE_SEPARATOR);
+	}
+
+	/**
+	 * 鎶婃绉掑�兼牸寮忓寲涓哄彲浠ヨ瘑鍒殑鏃ユ湡瀛楃涓诧紝濡傦細2013-11-21 12:33:09
+	 * @param millis
+	 * @return
+	 */
+	public static final String getDateTimeForHuman(long millis){
+		if(millis == 0) return "N/A";
+//		LocalDateTime localDateTime = new Date(millis).toInstant().atOffset(ZoneOffset.of("+8")).toLocalDateTime();
+		DateFormat whippletreeTimeFormat = new SimpleDateFormat(TEXT_DATE_TIME_WITH_LINE);
+		return whippletreeTimeFormat.format(new Date(millis));
+	}
+
+	/**
+	 * 鎶婃绉掑�兼牸寮忓寲涓哄彲浠ヨ瘑鍒殑鏃ユ湡瀛楃涓诧紝濡傦細2013-11-21
+	 * @param millis
+	 * @return
+	 */
+	public static final String getDateForHuman(long millis){
+		if(millis == 0) return "N/A";
+		DateFormat whippletreeDateFormat = new SimpleDateFormat(TEXT_DATE_WITH_LINE);
+		return whippletreeDateFormat.format(new Date(millis));
+	}
+
+	/**
+	 * 杩斿洖缁欏畾姣鏁板搴旂殑鏃ユ湡鏁板�硷紝濡傦細20131121
+	 * @param millis
+	 * @return
+	 */
+	public static final long getDateNumber(long millis){
+		if(millis == 0) return 0;
+		DateFormat whippleDateFormat = new SimpleDateFormat(TEXT_DATE);
+		return Long.parseLong(whippleDateFormat.format(new Date(millis)));
+	}
+
+	/**
+	 * 杩斿洖缁欏畾姣鏁板搴旂殑鏃ユ湡鏁板�硷紝濡傦細20201220120130
+	 * @param millis
+	 * @return
+	 * @date 2021-10-25
+	 */
+	public static final long getDateTimeNumber(long millis){
+		if(millis == 0) return 0;
+		DateFormat whippleTimeFormat = new SimpleDateFormat(TEXT_DATE_TIME);
+		return Long.parseLong(whippleTimeFormat.format(new Date(millis)));
+	}
+
+	/**
+	 * 杩斿洖褰撳墠鏃ユ湡鏁板�硷紝濡傦細20201220120130
+	 * @return
+	 */
+	public static final long getDateTimeNumber(){
+		return getDateTimeNumber(System.currentTimeMillis());
+	}
+
+	/**
+	 * 杩斿洖缁欏畾姣鏁板搴旂殑鏃ユ湡鏁板�硷紝濡傦細20201220120130
+	 * @param showDateTime 濡傦細2020-12-20 12:01:30
+	 * @return
+	 */
+	public static final long getDateTimeNumber(String showDateTime){
+		long millis = getDateLong(showDateTime);
+		DateFormat whippleTimeFormat = new SimpleDateFormat(TEXT_DATE_TIME);
+		return Long.parseLong(whippleTimeFormat.format(new Date(millis)));
+	}
+
+	/**
+	 * 杩斿洖缁欏畾鏃ユ湡锛屾渶鏅氱殑姣鍊笺��</p>
+	 * 濡傦細2013-11-21锛岀郴缁熶細杩斿洖 2013-11-21 23:59:59 鐨勬绉掑��
+	 * @param showDate 2013-11-21
+	 * @return
+	 */
+	public static final long getDateLongLate(String showDate){
+		String input = checkDate(showDate);
+		input += LATE_OF_DAY;
+		return getDateLong(input);
+	}
+
+	/**
+	 * 杩斿洖缁欏畾鏃ユ湡锛屾渶鏃╃殑姣鍊笺��</p>
+	 * 濡傦細2013-11-21锛岀郴缁熶細杩斿洖 2013-11-21 00:00:00 鐨勬绉掑��
+	 * @param showDate 2013-11-21
+	 * @return
+	 */
+	public static final long getDateLongEarly(String showDate){
+		return getDateLong(checkDate(showDate));
+	}
+
+	private static final String checkDate(String showDate){
+		assert (StringUtils.isNotEmpty(showDate));
+		String input = showDate.trim();
+		if(input.indexOf(":") >= 0)
+			throw new IllegalArgumentException("wrong input, format e.g. 2013-11-21.");
+		return input;
+	}
+
+	/**
+	 * 杩斿洖瀛楃涓叉棩鏈熺殑姣鏃堕棿鍊笺��
+	 * @param showDateTime 鍙互鏄細2013-11-21 or 2013-11-21 11:21:15
+	 * @return
+	 */
+	public static final long getDateLong(String showDateTime){
+		return getDate(showDateTime).getTime();
+	}
+
+	/**
+	 * 鎶婂瓧绗︿覆鏃ユ湡鏍煎紡鍖栨垚<code>java.util.Date</code>瀵硅薄銆�</p>
+	 * 鏀寔鏃ユ湡鍜屾椂闂翠袱绉嶆牸寮忥紝蹇呴』鏄互涓嬪舰寮�:
+	 * <pre>
+	 * <li>2013-11-21</li>
+	 * <li>2013-11-21 11:21:15</li>
+	 * </pre>
+	 * @param showDate 杈撳叆鐨勬棩鏈熷瓧绗︿覆锛屽繀椤荤敤'-'浣滀负鍒嗛殧绗︺�傚锛�2013-11-21
+	 * @return
+	 */
+	public static final Date getDate(String showDate){
+		String input = showDate.trim();
+		if(input.indexOf(DATE_SEPARATOR) == -1)
+			throw new IllegalArgumentException("date of input must be separated width '-'");
+
+		try {
+			/* 鍒ゆ柇鏄椂闂磋繕鏄彧鏈夋棩鏈� */
+			if(input.indexOf(":") > 0){
+				DateFormat whippletreeTimeFormat = new SimpleDateFormat(TEXT_DATE_TIME_WITH_LINE);
+				return whippletreeTimeFormat.parse(input);
+			} else {
+				DateFormat whippletreeDateFormat = new SimpleDateFormat(TEXT_DATE_WITH_LINE);
+				return whippletreeDateFormat.parse(input);
+			}
+		} catch (ParseException e) {
+			throw new RuntimeException("translate date error: " + showDate, e);
+		}
+	}
+
+	/**
+	 * 杈撳叆鏃ユ湡锛堟垨鏃堕棿锛夊瓧绗︿覆锛岃繑鍥炲勾鏈堝瓧绗︿覆銆�</p>
+	 * 濡傦細2016-07-30 or 2016-07-30 10:01:36 ---> 201607
+	 * @param showDateOrTime
+	 * @return
+	 */
+	public static String getYearMonthValue(String showDateOrTime){
+		return showDateOrTime.substring(0, 7).replace(DATE_SEPARATOR, StringUtils.EMPTY_STRING);
+	}
+
+	/**
+	 * 杩斿洖褰撳墠骞存湀瀛楃涓诧紝濡傦細201607
+	 * @return
+	 */
+	public static String getYearMonthCurrentValue(){
+		return getYearMonthValue(getDateForHuman(System.currentTimeMillis()));
+	}
+
+	/**
+	 * 杩斿洖鏄剧ず鏃堕棿瀛楃涓诧紝濡傦細20161202152028
+	 * @param millis 杈撳叆姣鍊�
+	 * @return
+	 */
+	public static String getDateTimeSecondForShow(long millis){
+		if(millis == 0) return "N/A";
+		DateFormat whippleTimeFormat = new SimpleDateFormat(TEXT_DATE_TIME);
+		return whippleTimeFormat.format(new Date(millis));
+	}
+
+	public static String getDateTimeSecondForShow(){
+		DateFormat whippleTimeFormat = new SimpleDateFormat(TEXT_DATE_TIME);
+		return whippleTimeFormat.format(new Date(System.currentTimeMillis()));
+	}
+
+	/**
+     * 璇存槑锛氳繑鍥炴寚瀹氭椂闂翠箣鍚庣殑鏃堕棿锛屽彲姝e彲璐燂紝渚嬪锛氱粰瀹�20071201000000锛屽噺10澶╋紝寰楀埌鏂扮殑鏃ユ湡
+     * 浣滆�咃細鏃跺厠鑻�
+     * 鏃堕棿锛�12 7, 2007
+     */
+    public static long getAfterLongTime(long oldTime, int dayNum){
+    	Calendar calendar = Calendar.getInstance();
+    	String strDate = String.valueOf(oldTime);
+    	int year = Integer.parseInt(strDate.substring(0, 4));
+        int month = Integer.parseInt(strDate.substring(4, 6)) - 1;
+        int day = Integer.parseInt(strDate.substring(6, 8));
+        int hour = Integer.parseInt(strDate.substring(8, 10));
+        int minute = Integer.parseInt(strDate.substring(10,12));
+        int second = Integer.parseInt(strDate.substring(12, 14));
+
+        calendar.set(year, month, day, hour, minute, second);
+        calendar.add(Calendar.DAY_OF_MONTH, dayNum);
+
+		DateFormat whippleTimeFormat = new SimpleDateFormat(TEXT_DATE_TIME);
+        String result = whippleTimeFormat.format(calendar.getTime());
+        return Long.parseLong(result);
+    }
+
+    /**
+     * 杩斿洖鎸囧畾澶╂暟涔嬪悗鐨勬棩鏈熸椂闂达紝濡傦細2018-03-29 13:57:01
+     * @param daysNumber 澧炲姞鐨勫ぉ鏁帮紝鍙负璐熷�艰〃绀轰箣鍓嶅嚑澶�
+     * @return
+     */
+    public static String getShowDateTimeAfterDays(int daysNumber) {
+        Calendar now = Calendar.getInstance();
+        now.add(Calendar.DATE, daysNumber);
+		DateFormat whippletreeTimeFormat = new SimpleDateFormat(TEXT_DATE_TIME_WITH_LINE);
+        return whippletreeTimeFormat.format(now.getTime());
+    }
+
+    /**
+     * 杩斿洖褰撳墠骞存湀鏃ワ紝鍙互澧炲噺澶╂暟
+     * @param afterDay 澧炲姞鐨勫ぉ鏁帮紙鍙负璐熷�艰〃绀洪�掑噺锛�
+     * @return
+     */
+    public static int[] getYearMonthDayArray(int afterDay){
+    	Calendar now = Calendar.getInstance();
+        now.add(Calendar.DATE, afterDay);
+        int[] yearMonthDay = new int[3];
+        yearMonthDay[0] = now.get(Calendar.YEAR);
+        yearMonthDay[1] = now.get(Calendar.MONTH) + 1;
+        yearMonthDay[2] = now.get(Calendar.DAY_OF_MONTH);
+        return yearMonthDay;
+    }
+
+    /**
+     * 杩斿洖鎸囧畾澶╂暟涔嬪悗鐨勬棩鏈熸椂闂达紝濡傦細2018-03-29
+     * @param daysNumber 澧炲姞鐨勫ぉ鏁帮紝鍙负璐熷�艰〃绀轰箣鍓嶅嚑澶�
+     * @return
+     */
+    public static String getShowDateAfterDays(int daysNumber) {
+        Calendar now = Calendar.getInstance();
+        now.add(Calendar.DATE, daysNumber);
+		DateFormat whippletreeDateFormat = new SimpleDateFormat(TEXT_DATE_WITH_LINE);
+        return whippletreeDateFormat.format(now.getTime());
+    }
+
+    /**
+     * 杩斿洖缁欏畾鏃ユ湡鐨勫悗缁嚑澶╃殑鏃ユ湡鍊�
+     * @param year 褰撳墠骞翠唤锛屽锛�2019
+     * @param month 褰撳墠鏈堜唤锛屽锛�1鏈�
+     * @param dayOfMonth 褰撳墠鏃ユ湡锛屽锛�2鍙�
+     * @param afterDayNum 浠婂悗鍑犲ぉ
+     * @return 杩斿洖鏁扮粍锛�3涓�硷紝濡傦細[2019,1,2]
+     */
+    public static int[] getNextDay(int year, int month, int dayOfMonth, int afterDayNum){
+    	LocalDate localDate = LocalDate.of(year, month, dayOfMonth);
+    	localDate = localDate.minusDays(-afterDayNum);
+    	return new int[]{localDate.getYear(), localDate.getMonthValue(), localDate.getDayOfMonth()};
+    }
+
+    /**
+     * 杩斿洖褰撳墠鏃ユ湡鏄槦鏈熷嚑
+     * @return 1~7
+     */
+    public static int getCurrentWeekdayValue(){
+        LocalDate currentDate = LocalDate.now();
+        return currentDate.getDayOfWeek().getValue();
+    }
+
+    /**
+     * 杩斿洖褰撳墠骞翠唤
+     * @return
+     */
+    public static String getCurrentYear(){
+    	return getDateForHuman(System.currentTimeMillis()).substring(0, 4);
+    }
+
+    public static int getCurrentYearInteger(){
+    	Calendar now = Calendar.getInstance();
+    	return now.get(Calendar.YEAR);
+    }
+    /**
+     * 杩斿洖褰撳墠骞存湀淇℃伅锛屾牸寮忥細2020-12
+     * @return
+     */
+    public static String getCurrentYearMonthForHuman(){
+    	String showDateOrTime = getDateForHuman(System.currentTimeMillis());
+    	return showDateOrTime.substring(0, 7);
+    }
+
+    public static int getCurrentHour(){
+    	Calendar calendar = Calendar.getInstance();
+    	return calendar.get(Calendar.HOUR_OF_DAY);
+    }
+
+    public static int getCurrentMinute(){
+    	Calendar calendar = Calendar.getInstance();
+    	return calendar.get(Calendar.MINUTE);
+    }
+
+    /**
+     * 杩斿洖褰撳墠灏忔椂锛氬垎閽�
+     * @param afterMinutes 鍙互澧炲姞鍒嗛挓锛堟璐熼兘鍙級
+     * @return
+     */
+    public static int[] getCurrentHourMinute(int afterMinutes){
+    	Calendar calendar = Calendar.getInstance();
+    	calendar.add(Calendar.MINUTE, afterMinutes);
+    	int[] hourMinute = new int[2];
+    	hourMinute[0] = calendar.get(Calendar.HOUR_OF_DAY);
+    	hourMinute[1] = calendar.get(Calendar.MINUTE);
+    	return hourMinute;
+    }
+
+    /**
+     * 杩斿洖褰撳墠骞存湀鏃ワ紝鏀惧湪鏁扮粍涓�
+     * @return
+     */
+    public static int[] getCurrentYearMonthDay(){
+    	int[] result = new int[3];
+    	Calendar now = Calendar.getInstance();
+    	result[0] = now.get(Calendar.YEAR);
+    	result[1] = now.get(Calendar.MONTH) + 1;
+    	result[2] = now.get(Calendar.DAY_OF_MONTH);
+    	return result;
+    }
+
+    public static int[] getCurrentYearMonthDayHourMinute(){
+    	int[] result = new int[5];
+    	Calendar now = Calendar.getInstance();
+    	result[0] = now.get(Calendar.YEAR);
+    	result[1] = now.get(Calendar.MONTH) + 1;
+    	result[2] = now.get(Calendar.DAY_OF_MONTH);
+    	result[3] = now.get(Calendar.HOUR_OF_DAY);
+    	result[4] = now.get(Calendar.MINUTE);
+    	return result;
+    }
+
+    public static int[] getCurrentYearMonthDayHourMinute(int monthAdd, int dayAdd, int hourAdd, int minuteAdd){
+    	int[] result = new int[5];
+    	Calendar now = Calendar.getInstance();
+    	if(monthAdd != 0){
+    		now.add(Calendar.MONTH, monthAdd);
+    	}
+    	if(dayAdd != 0){
+    		now.add(Calendar.DATE, dayAdd);
+    	}
+    	if(hourAdd != 0){
+    		now.add(Calendar.HOUR, hourAdd);
+    	}
+    	if(minuteAdd != 0){
+    		now.add(Calendar.MINUTE, minuteAdd);
+    	}
+    	result[0] = now.get(Calendar.YEAR);
+    	result[1] = now.get(Calendar.MONTH) + 1;
+    	result[2] = now.get(Calendar.DAY_OF_MONTH);
+    	result[3] = now.get(Calendar.HOUR_OF_DAY);
+    	result[4] = now.get(Calendar.MINUTE);
+    	return result;
+    }
+
+    /**
+     * 鎻愪緵涓�涓鍔犵殑绉掓暟锛岃绠椾箣鍚庣殑鏃堕棿銆�
+     * @param addSeconds 瑕佸鍔犵殑绉掓暟
+     * @return
+     * @date 2021-10-25
+     */
+    public static int[] getCurrentYearMonthDayHourMinuteSecond(int addSeconds){
+    	int[] result = new int[6];
+    	Calendar now = Calendar.getInstance();
+    	now.add(Calendar.SECOND, addSeconds);
+    	result[0] = now.get(Calendar.YEAR);
+    	result[1] = now.get(Calendar.MONTH) + 1;
+    	result[2] = now.get(Calendar.DAY_OF_MONTH);
+    	result[3] = now.get(Calendar.HOUR_OF_DAY);
+    	result[4] = now.get(Calendar.MINUTE);
+    	result[5] = now.get(Calendar.SECOND);
+    	return result;
+    }
+
+    public static int[] getCurrentYearMonthDay(int afterDays){
+    	int[] result = new int[3];
+    	Calendar now = Calendar.getInstance();
+    	now.add(Calendar.DAY_OF_MONTH, afterDays);
+    	result[0] = now.get(Calendar.YEAR);
+    	result[1] = now.get(Calendar.MONTH) + 1;
+    	result[2] = now.get(Calendar.DAY_OF_MONTH);
+    	return result;
+    }
+
+	/**
+	 * @param args
+	 */
+	public static void main(String[] args) throws Exception {
+//		System.out.println("+++++++++++ " + toIntegerDate("2014-08-29"));
+		String showDate = "2013-11-20 11:18:21";
+//		String showDate = "2013-11-20";
+		System.out.println("normal:" + getDateLong(showDate));
+//		long e = getDateLongEarly(showDate);
+//		long l = getDateLongLate(showDate);
+//		System.out.println("early : " + e);
+//		System.out.println("late  : " + l);
+//		System.out.println("鐩稿樊      : " + (l - e)/(1000 * 60 * 60));
+//		System.out.println("++++++ " + getDateTimeForHuman(new Date().getTime()));
+//		System.out.println("浠婂ぉ鏈�鏃�: " + getTodayLongEarly());
+//		System.out.println("浠婂ぉ鏈�鏅�: " + getTodayLongLate());
+		System.out.println(getCurrentMonthFirstDayEarly());
+		System.out.println(getDateTimeSecondForShow());
+		System.out.println(getDateNumber(System.currentTimeMillis()));
+//		System.out.println(getAfterLongTime(20170925141302L, 1));
+//		System.out.println(getShowDateTimeAfterDays(-7));
+		System.out.println(DateUtils.toLongDateTime("2018-12-05"));
+
+//		System.out.println(getNextDay(2018, 12, 31, 2));
+//		System.out.println(getCurrentWeekdayValue());
+//		System.out.println(getShowDateAfterDays(0));
+//		System.out.println(getCurrentYearMonthForHuman());
+//		System.out.println(getCurrentYear());
+//		System.out.println(getCurrentHour());
+		System.out.println(toLongDateTime("2019-05-20 02:30:00"));
+//		int[] yearMonthDay = getCurrentYearMonthDay();
+//		System.out.println(yearMonthDay[0] + ", " + yearMonthDay[1] + ", " + yearMonthDay[2]);
+//		int[] ymd = getYearMonthDayArray(-1230);
+//		System.out.println(ymd[0] + ", " + ymd[1] + ", " + ymd[2]);
+//		int[] hm = getCurrentHourMinute(-100);
+//		System.out.println(hm[0] + ", " + hm[1]);
+
+//		int[] ymd = getCurrentYearMonthDay(-3);
+//		System.out.println(ymd[0] + ", " + ymd[1] + ", " + ymd[2]);
+
+		System.out.println(toMillSeconds(20140829102501L));
+
+//		int[] result = getCurrentYearMonthDayHourMinute(1, 0, 1, 10);
+//		System.out.println(result[0]);
+//		System.out.println(result[1]);
+//		System.out.println(result[2]);
+//		System.out.println(result[3]);
+//		System.out.println(result[4]);
+
+//		int[] result = getCurrentYearMonthDayHourMinuteSecond(30);
+//		System.out.println(result[0]);
+//		System.out.println(result[1]);
+//		System.out.println(result[2]);
+//		System.out.println(result[3]);
+//		System.out.println(result[4]);
+//		System.out.println(result[5]);
+		System.out.println(getDateForHuman(System.currentTimeMillis()));
+	}
+
+}
+
+
+
diff --git "a/consum-base/doc/\346\233\264\346\226\260\346\255\243\345\274\217\347\216\257\345\242\203\351\234\200\350\246\201\346\267\273\345\212\240.sql" "b/consum-base/doc/\346\233\264\346\226\260\346\255\243\345\274\217\347\216\257\345\242\203\351\234\200\350\246\201\346\267\273\345\212\240.sql"
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ "b/consum-base/doc/\346\233\264\346\226\260\346\255\243\345\274\217\347\216\257\345\242\203\351\234\200\350\246\201\346\267\273\345\212\240.sql"
diff --git a/consum-base/pom.xml b/consum-base/pom.xml
new file mode 100644
index 0000000..53c75f1
--- /dev/null
+++ b/consum-base/pom.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>com.consum</groupId>
+        <artifactId>low-consum-manage</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>consum-base</artifactId>
+    <name>consum-base</name>
+    <version>1.0.0-SNAPSHOT</version>
+    <packaging>jar</packaging>
+
+    <properties>
+        <es.version>7.14.0</es.version>
+    </properties>
+
+    <dependencies>
+
+        <!-- 骞冲彴鍩虹妯″潡 -->
+        <dependency>
+            <groupId>com.iplatform</groupId>
+            <artifactId>iplatform-base</artifactId>
+        </dependency>
+        <!-- 寮曞叆web瀹夊叏璁よ瘉妯″潡锛屽鏋滀笉寮曞叆鍒欎笉浼氬仛浠讳綍鏉冮檺鎷︽埅锛堣繖绉嶆ā寮忛�氬父鍙敤浜庡揩閫熸祴璇曪級, 2022/10/31 -->
+        <dependency>
+            <groupId>com.iplatform</groupId>
+            <artifactId>iplatform-base-security</artifactId>
+        </dependency>
+
+        <!-- 绯荤粺鍩虹妯″潡鐣岄潰绠$悊鎺у埗妯″潡锛屽鏋滀笉寮曞叆涔熶笉浼氭湁swagger鏂囨。鍔熻兘!锛�2023/03/05 -->
+        <dependency>
+            <groupId>com.iplatform</groupId>
+            <artifactId>iplatform-base-admin</artifactId>
+        </dependency>
+
+        <!-- 鎻愪緵Redis鏀寔锛岀敱涓氬姟瀛愬伐绋嬪喅瀹氭槸鍚︿緷璧�, 2022/09/20 -->
+        <dependency>
+            <groupId>com.walkersoft</groupId>
+            <artifactId>walker-support-redis</artifactId>
+            <optional>true</optional>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.walkersoft</groupId>
+                    <artifactId>walker-cache</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <!-- 鏂囦欢绠$悊妯″潡锛�2023/03/16 -->
+        <dependency>
+            <groupId>com.iplatform</groupId>
+            <artifactId>iplatform-file-server</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.consum</groupId>
+            <artifactId>consum-model-pojo</artifactId>
+            <version>1.0.0-SNAPSHOT</version>
+        </dependency>
+
+    </dependencies>
+
+</project>
diff --git a/consum-base/src/main/java/com/consum/base/BaseController.java b/consum-base/src/main/java/com/consum/base/BaseController.java
new file mode 100644
index 0000000..5dc03e8
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/BaseController.java
@@ -0,0 +1,11 @@
+package com.consum.base;
+
+import com.iplatform.base.PlatformAdapterController;
+import com.iplatform.core.BeanContextAware;
+
+public abstract class BaseController extends PlatformAdapterController {
+
+    protected TokenCacheProvider getTokenCache() {
+        return BeanContextAware.getBeanByType(TokenCacheProvider.class);
+    }
+}
diff --git a/consum-base/src/main/java/com/consum/base/Constants.java b/consum-base/src/main/java/com/consum/base/Constants.java
new file mode 100644
index 0000000..a67098e
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/Constants.java
@@ -0,0 +1,45 @@
+package com.consum.base;
+
+public class Constants {
+
+    // 鏄惁涓洪」鐩粡鐞�(0鍚� 1鏄�)
+    public static final Integer MANAGER_YES = 1;
+    public static final Integer MANAGER_NO = 0;
+
+    public static final String CACHE_NAME_FIN_ORG = "cache.fin.org";
+    public static final String CACHE_NAME_FIN_USER = "cache.fin.user";
+    public static final String CACHE_NAME_FIN_TOKEN = "cache.fin.user.token";
+    public static final String CACHE_NAME_FIN_TENANT_USER = "cache.fin.tenant.user";
+    public static final String CACHE_NAME_FIN_TENANT = "cache.fin.tenant";
+
+    // 瀹℃牳淇℃伅 0鏈鏍� 1 瀹℃牳涓嶉�氳繃 2瀹℃牳閫氳繃
+    public static final Integer AUDIT_WAIT = 0;
+    public static final Integer AUDIT_NO = 1;
+    public static final Integer AUDIT_YES = 2;
+
+    // 褰掓。鐘舵�� 0鏈鏍� 1 瀹℃牳涓嶉�氳繃 2瀹℃牳閫氳繃 -1鏈綊妗�
+    public static final Integer ARCHIVE_WAIT = 0;
+    public static final Integer ARCHIVE_NO = 1;
+    public static final Integer ARCHIVE_YES = 2;
+    public static final Integer ARCHIVE_NO_IN = -1;
+
+    // 涓存湡棰勮 0鍏抽棴 1寮�鍚�
+    public static final Integer EXPIRATION_NOTIFY_STATUS_CLOSE = 0;
+    public static final Integer EXPIRATION_NOTIFY_STATUS_OPEN = 1;
+
+    // 0鏈紑宸� 1杩涜涓� 2 瀹屽伐 3 宸插彇娑�  4 瓒呮湡鏈畬鎴�(0-2 鏍规嵁鏃堕棿鍒ゆ柇) 5瓒呮湡宸插畬鎴�
+    public static final Integer PROJECT_WAIT = 0;
+    public static final Integer PROJECT_ING = 1;
+    public static final Integer PROJECT_SUCCESS = 2;
+    public static final Integer PROJECT_CANCEL = 3;
+    public static final Integer PROJECT_TIME_OUT_NO = 4;
+    public static final Integer PROJECT_TIME_OUT_YES = 5;
+
+    // SOURCE_STATUS 0褰掓。 1鏂板
+    public static final Integer SOURCE_ARC = 0;
+    public static final Integer SOURCE_ADD = 1;
+
+    // 鏄惁瀹屾垚
+    public static final Integer PROJECT_YES = 1;// 宸插畬鎴�
+    public static final Integer PROJECT_NO = 0;// 鏈畬鎴�
+}
diff --git a/consum-base/src/main/java/com/consum/base/TokenCacheProvider.java b/consum-base/src/main/java/com/consum/base/TokenCacheProvider.java
new file mode 100644
index 0000000..495b154
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/TokenCacheProvider.java
@@ -0,0 +1,25 @@
+package com.consum.base;
+
+import com.consum.base.pojo.TokenVo;
+
+
+/**
+ * 璐㈡斂鍘呰繍缁寸郴缁熶笟鍔$敤鎴风紦瀛樸��
+ * <pre>
+ *     1) key = 鍚屾杩囨潵鐨勭敤鎴穒d锛岄绠楃郴缁熺殑鐢ㄦ埛ID锛屾垜浠殏鏃舵垚涓�"code"
+ *     2) value = 缂撳瓨瀵硅薄涓轰粠鏁版嵁搴撹鍑虹殑鐢ㄦ埛銆�
+ * </pre>
+ * @author 鏃跺厠鑻�
+ * @date 2023-07-05
+ */
+public interface TokenCacheProvider {
+
+    TokenVo get(String token);
+
+    void save(TokenVo e);
+
+    void update(TokenVo e);
+
+    void remove(String token);
+
+}
diff --git a/consum-base/src/main/java/com/consum/base/cache/RedisTokenCache.java b/consum-base/src/main/java/com/consum/base/cache/RedisTokenCache.java
new file mode 100644
index 0000000..461c3ad
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/cache/RedisTokenCache.java
@@ -0,0 +1,50 @@
+package com.consum.base.cache;
+
+import com.consum.base.Constants;
+import com.consum.base.TokenCacheProvider;
+import com.consum.base.pojo.TokenVo;
+import com.walker.support.redis.cache.RedisCacheProvider;
+
+/**
+ * Redis瀹炵幇鐨勮繍缁寸郴缁熺敤鎴峰畾涔夈��
+ * @author 鏃跺厠鑻�
+ * @date 2023-07-05
+ */
+public class RedisTokenCache extends RedisCacheProvider<TokenVo> implements TokenCacheProvider {
+
+    public RedisTokenCache(){
+        this.setUseRedis(true);
+        this.setLoadPage(false);
+    }
+
+    @Override
+    public TokenVo get(String token) {
+        TokenVo finSysOrg = this.getCacheData(token);
+        return finSysOrg;
+    }
+
+    @Override
+    public void save(TokenVo e) {
+        this.putCacheData(e.getToken(), e);
+    }
+
+    @Override
+    public void update(TokenVo e) {
+        this.updateCacheData(e.getToken(), e);
+    }
+
+    @Override
+    public void remove(String userCode) {
+        this.removeCacheData(userCode);
+    }
+
+    @Override
+    public String getProviderName() {
+        return Constants.CACHE_NAME_FIN_TOKEN;
+    }
+
+    @Override
+    public Class<?> getProviderType() {
+        return TokenVo.class;
+    }
+}
diff --git a/consum-base/src/main/java/com/consum/base/core/AgencyEntity.java b/consum-base/src/main/java/com/consum/base/core/AgencyEntity.java
new file mode 100644
index 0000000..ac9195d
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/core/AgencyEntity.java
@@ -0,0 +1,80 @@
+package com.consum.base.core;
+
+import com.consum.base.core.po.SYS_AGENCY;
+
+public class AgencyEntity {
+
+    private long agency_id;
+
+    //褰撳墠ID浠h〃鐨凷YS_AGENCY
+    private SYS_AGENCY angency;
+
+    //绗竴灞傜骇鐨凷YS_AGENCY锛屽嵆鐪佺骇鏈烘瀯
+    private SYS_AGENCY firstAgency;
+
+    //绗簩灞傜骇SYS_AGENCY锛屽嵆甯傜骇鏈烘瀯
+    private SYS_AGENCY secondAgency;
+
+    //绗笁灞傜骇SYS_AGENCY锛屽嵆鍘跨骇鏈烘瀯
+    private SYS_AGENCY thirdAgency;
+
+    //绗洓灞傜骇SYS_AGENCY锛屽嵆鏀眬銆佺綉鐐规満鏋�
+    private SYS_AGENCY fourthAgency;
+
+    public SYS_AGENCY getAngency() {
+        return angency;
+    }
+
+    public void setAngency(SYS_AGENCY angency) {
+        this.angency = angency;
+    }
+
+    public SYS_AGENCY getFirstAgency() {
+        return firstAgency;
+    }
+
+    public void setFirstAgency(SYS_AGENCY firstAgency) {
+        this.firstAgency = firstAgency;
+    }
+
+    public SYS_AGENCY getSecondAgency() {
+        return secondAgency;
+    }
+
+    public void setSecondAgency(SYS_AGENCY secondAgency) {
+        this.secondAgency = secondAgency;
+    }
+
+    public SYS_AGENCY getThirdAgency() {
+        return thirdAgency;
+    }
+
+    public void setThirdAgency(SYS_AGENCY thirdAgency) {
+        this.thirdAgency = thirdAgency;
+
+    }
+
+    public SYS_AGENCY getFourthAgency() {
+        return fourthAgency;
+    }
+
+    public void setFourthAgency(SYS_AGENCY fourthAgency) {
+        this.fourthAgency = fourthAgency;
+    }
+
+
+    public AgencyEntity(long agency_id){
+        this.agency_id = agency_id;
+    }
+
+
+
+
+    public long getAgency_id() {
+        return agency_id;
+    }
+
+    public void setAgency_id(long agency_id) {
+        this.agency_id = agency_id;
+    }
+}
diff --git a/consum-base/src/main/java/com/consum/base/core/AgencyService.java b/consum-base/src/main/java/com/consum/base/core/AgencyService.java
new file mode 100644
index 0000000..ba6fb93
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/core/AgencyService.java
@@ -0,0 +1,33 @@
+package com.consum.base.core;
+
+
+import com.consum.base.core.po.SYS_AGENCY;
+
+/**
+ * 缁勭粐鏈烘瀯绫婚�氱敤service
+ */
+public class AgencyService {
+
+
+    public static void main(String[] args) {
+
+    }
+
+    /**
+     * 鏍规嵁缁勭粐鏈烘瀯ID锛岃幏鍙栫粍缁囨満鏋勬爲
+     * @param agency_id
+     * @return
+     */
+    public AgencyEntity getAgencyTreeEntityById(long agency_id){
+
+        AgencyEntity entity = new AgencyEntity(agency_id);
+        entity.setAngency(new SYS_AGENCY());
+        entity.setFirstAgency(new SYS_AGENCY());
+        entity.setSecondAgency(new SYS_AGENCY());
+        entity.setThirdAgency(new SYS_AGENCY());
+        entity.setFourthAgency(new SYS_AGENCY());
+        return entity;
+    }
+
+
+}
diff --git a/consum-base/src/main/java/com/consum/base/core/CheckWarehouseParam.java b/consum-base/src/main/java/com/consum/base/core/CheckWarehouseParam.java
new file mode 100644
index 0000000..58fd810
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/core/CheckWarehouseParam.java
@@ -0,0 +1,41 @@
+package com.consum.base.core;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 鍑哄叆搴撳弬鏁�
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Slf4j
+public class CheckWarehouseParam {
+
+    /**
+     * 鏄惁鍏ュ簱  true 鏄� false 鍚︼紙鍑哄簱锛�
+     */
+    private Boolean isCheckIn;
+
+    /**
+     * 浠撳簱id
+     */
+    private Long warehouseId;
+
+    /**
+     * 瑙勬牸鍨嬪彿id
+     */
+    private Long modelId;
+
+    /**
+     * 鏁伴噺
+     */
+    private Integer count;
+
+    /**
+     * 棣栨鍏ュ簱鎵规鍙凤紝鏁版嵁搴撳瓧娈�
+     */
+    private String firstInputCode;
+}
diff --git a/consum-base/src/main/java/com/consum/base/core/CheckWarehouseResult.java b/consum-base/src/main/java/com/consum/base/core/CheckWarehouseResult.java
new file mode 100644
index 0000000..8ee8e72
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/core/CheckWarehouseResult.java
@@ -0,0 +1,23 @@
+package com.consum.base.core;
+
+/**
+ * 鎵ц鍏ュ簱鍚庣殑杩斿洖绫�
+ */
+public class CheckWarehouseResult {
+
+    /**
+     * 鎿嶄綔鏇存柊鎴栨柊澧炵殑WH_GOODS搴撳瓨鐗╁搧ID
+     */
+    private long wh_goods_id;
+
+    /**
+     * 鎵ц鎿嶄綔鏃剁殑鏈熷垵鏁伴噺
+     */
+    private int initial_count;
+
+    /**
+     * 鎵ц鎿嶄綔鍚庣殑鏈熸湯鏁伴噺
+     */
+    private int end_count;
+
+}
diff --git a/consum-base/src/main/java/com/consum/base/core/CodeGeneratorEnum.java b/consum-base/src/main/java/com/consum/base/core/CodeGeneratorEnum.java
new file mode 100644
index 0000000..b1cee62
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/core/CodeGeneratorEnum.java
@@ -0,0 +1,55 @@
+package com.consum.base.core;
+
+public enum CodeGeneratorEnum {
+
+    // TODO: 10/10/2023 闇�瑕佽ˉ鍏ㄧ紪鐮佺被鍨�
+
+    /**
+     * 浠撳簱缂栫爜锛岀畝鍐欙細WH
+     */
+    Warehouse("WH"),
+    /**
+     * 鍏ュ簱鍗曠紪鐮侊紝绠�鍐欙細RK
+     */
+    InPut_Warehouse("RK"),
+
+    /**
+     * 閲囪喘鍏ュ簱
+     */
+    Procure_Warehouse("CG"),
+
+    /**
+     * 璋冩嫧
+     */
+    Transfer("DB"),
+
+    /**
+     * 鍑哄簱鍗曠紪鐮侊紝绠�鍐欙細CK
+     */
+    OutPut_Warehouse("CK");
+
+    private String value;
+
+    CodeGeneratorEnum(String prefix) {
+        this.value = prefix;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * 鏍规嵁缂栫爜鑾峰彇瀵瑰簲鏋氫妇
+     *
+     * @param key 缂栫爜
+     * @return
+     */
+    public static CodeGeneratorEnum getValueByKey(String key) {
+        for (CodeGeneratorEnum myEnum : CodeGeneratorEnum.values()) {
+            if (myEnum.name().equals(key)) {
+                return myEnum;
+            }
+        }
+        return null;
+    }
+}
diff --git a/consum-base/src/main/java/com/consum/base/core/CodeGeneratorService.java b/consum-base/src/main/java/com/consum/base/core/CodeGeneratorService.java
new file mode 100644
index 0000000..b976bbc
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/core/CodeGeneratorService.java
@@ -0,0 +1,86 @@
+package com.consum.base.core;
+
+
+import com.walker.jdbc.service.BaseServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 缂栫爜缁熶竴鐢熸垚鏈嶅姟
+ */
+@Service
+public class CodeGeneratorService extends BaseServiceImpl {
+
+
+    /**
+     * 鑾峰彇浠撳簱缂栫爜
+     *
+     * @return 浠撳簱缂栫爜瑙勫垯涓猴細WH+鍥涗綅鏁板瓧杩炲彿锛�0001锛�
+     */
+    public String createWarehouseCode() {
+        // TODO: 10/10/2023  鑾峰彇浠撳簱缂栫爜
+
+        String CODE_PREFIX = CodeGeneratorEnum.Warehouse.getValue();
+        /*
+        1.SELECT CODE_INDEX from BASE_CODE_INDEXING where CODE_PREFIX=:CODE_PREFIX
+          CODE_PREFIX鏄�"WH"
+          濡傛灉鑾峰彇涓嶅埌锛屽氨浠�1寮�濮嬶紝浣嗛渶瑕佽ˉ鍏ㄥ墠闈㈢殑"0"杩斿洖 "0001"锛涘悓鏃堕渶瑕佹彃鍏ユ暟鎹簱
+          insert BASE_CODE_INDEXING CODE_INDEX=1 CODE_PREFIX鏄�="WH"  where CODE_PREFIX=:CODE_PREFIX;
+         2.濡傛灉鑳藉鑾峰彇鍒帮紝鍒欏皢CODE_INDEX=CODE_INDEX+1鍚庢洿鏂板埌鏁版嵁搴擄紝琛ュ叏鍓嶉潰鐨�"0"杩斿洖 "0001"
+         */
+        return null;
+    }
+
+    /**
+     * 杩炵画鑾峰彇澶氫釜浠撳簱缂栫爜
+     *
+     * @return 浠撳簱缂栫爜瑙勫垯涓猴細WH+鍥涗綅鏁板瓧杩炲彿锛�0001锛�
+     */
+    public List<String> createWarehouseCodeList(int count) {
+        // TODO: 10/10/2023  鑾峰彇浠撳簱缂栫爜
+
+        String CODE_PREFIX = CodeGeneratorEnum.Warehouse.getValue();
+        /*
+        1.SELECT CODE_INDEX from BASE_CODE_INDEXING where CODE_PREFIX=:CODE_PREFIX
+          CODE_PREFIX鏄�"WH"
+          濡傛灉鑾峰彇涓嶅埌锛屽氨浠�1寮�濮嬶紝浣嗛渶瑕佽ˉ鍏ㄥ墠闈㈢殑"0"杩斿洖 "0001"锛涘悓鏃堕渶瑕佹彃鍏ユ暟鎹簱
+          insert BASE_CODE_INDEXING CODE_INDEX=1 CODE_PREFIX鏄�="WH"  where CODE_PREFIX=:CODE_PREFIX;
+         2.濡傛灉鑳藉鑾峰彇鍒帮紝鍒欏皢CODE_INDEX=CODE_INDEX+1鍚庢洿鏂板埌鏁版嵁搴擄紝琛ュ叏鍓嶉潰鐨�"0"杩斿洖 "0001"
+         */
+        return null;
+    }
+
+    /**
+     * 鐢熸垚鐗╁搧缂栫爜
+     *
+     * @param classify A,B,C
+     * @param type     1=闆嗛噰锛�2=鑷噰
+     * @return 鍏�8浣嶏紝 涓�浣嶇墿鍝佸垎绫伙紙A/B/C锛�+涓�浣嶇被鍨嬶紙1涓洪泦閲囷紝2涓鸿嚜閲囷級+6浣嶈繛缁暟瀛楀彿
+     */
+    public String createGoodsTemplateCode(String classify, int type) {
+        String prefix = classify + Integer.valueOf(type).toString();
+
+        /*
+        1.SELECT CODE_INDEX from BASE_CODE_INDEXING where CODE_PREFIX=:CODE_PREFIX
+          CODE_PREFIX鏄� prefix
+          濡傛灉鑾峰彇涓嶅埌锛屽氨浠�1寮�濮嬶紝浣嗛渶瑕佽ˉ鍏ㄥ墠闈㈢殑"0"杩斿洖 "000001"锛涘悓鏃堕渶瑕佹彃鍏ユ暟鎹簱
+          insert BASE_CODE_INDEXING CODE_INDEX=1 CODE_PREFIX鏄�=:prefix  where CODE_PREFIX=:CODE_PREFIX;
+         2.濡傛灉鑳藉鑾峰彇鍒帮紝鍒欏皢CODE_INDEX=CODE_INDEX+1鍚庢洿鏂板埌鏁版嵁搴擄紝琛ュ叏鍓嶉潰鐨�"0"杩斿洖 "000001"
+         */
+        return null;
+    }
+
+    /**
+     * 鏍规嵁鍓嶇紑鑾峰彇涓氬姟琛ㄥ崟缂栫爜
+     *
+     * @param codeGeneratorEnum CodeGeneratorEnum
+     * @return 1.涓や綅鍓嶇紑锛堝锛欳G浠h〃閲囪喘鍗曪級+鍏綅骞存湀鏃ワ紙230226锛�23骞�2鏈�26鏃ワ級+鍥涗綅鏁板瓧杩炲彿锛�0002锛�
+     */
+    public String createBusinessFormCode(CodeGeneratorEnum codeGeneratorEnum) {
+
+        return null;
+    }
+
+
+}
diff --git a/consum-base/src/main/java/com/consum/base/core/CodeTemplateService.java b/consum-base/src/main/java/com/consum/base/core/CodeTemplateService.java
new file mode 100644
index 0000000..e8da0ff
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/core/CodeTemplateService.java
@@ -0,0 +1,20 @@
+package com.consum.base.core;
+
+
+import java.util.List;
+import java.util.Map;
+
+public class CodeTemplateService {
+
+    /**
+     * 鏍规嵁鍒嗙被缂栧彿鍜屾湰绾ф満鏋勭紪鍙凤紝鑾峰彇鍙煡鐪嬬墿鍝佹ā鐗堝垪琛�
+     * @param third_category_id 鍒嗙被缂栧彿锛屽垎绫荤紪鍙蜂负Null鏃讹紝鏌ヨ鎵�鏈夊垎绫�
+     * @param agencyId 鏈烘瀯缂栧彿
+     * @return 閲囪喘绫诲瀷涓鸿嚜閲囩殑锛屽彧鑳芥湰绾ф満鏋勫唴鍙銆傞泦閲囩殑鏈骇鍙婁笅绾т竴鏉$嚎鐨勬満鏋勫潎鍙銆�
+     */
+    public List<Map> getTemplateListByAgencyId(String third_category_id,String agencyId){
+
+        return null;
+    }
+
+}
diff --git a/consum-base/src/main/java/com/consum/base/core/GoodsService.java b/consum-base/src/main/java/com/consum/base/core/GoodsService.java
new file mode 100644
index 0000000..282e190
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/core/GoodsService.java
@@ -0,0 +1,10 @@
+package com.consum.base.core;
+
+import org.springframework.stereotype.Service;
+
+@Service
+public class GoodsService {
+
+
+
+}
diff --git a/consum-base/src/main/java/com/consum/base/core/UnifyBusinessService.java b/consum-base/src/main/java/com/consum/base/core/UnifyBusinessService.java
new file mode 100644
index 0000000..4400df0
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/core/UnifyBusinessService.java
@@ -0,0 +1,41 @@
+package com.consum.base.core;
+
+
+import com.consum.base.core.po.WhFormProcure;
+import com.consum.base.core.po.WhFormTransfer;
+import org.springframework.stereotype.Service;
+
+/**
+ * 缁熶竴鍑哄叆搴撴帴鍙�
+ */
+@Service
+public class UnifyBusinessService {
+
+    /**
+     * 閲囪喘鍏ュ簱
+     * @param procure
+     */
+    public void procure(WhFormProcure procure){
+
+    }
+
+
+    /**
+     * 璋冩嫧鍑哄簱
+     * @param transfer
+     */
+    public void transferOutput(WhFormTransfer transfer){
+
+    }
+
+    /**
+     * 璋冩嫧鍏ュ簱
+     * @param transfer
+     */
+    public void transferInput(WhFormTransfer transfer){
+
+    }
+
+
+
+}
diff --git a/consum-base/src/main/java/com/consum/base/core/WarehouseBusinessService.java b/consum-base/src/main/java/com/consum/base/core/WarehouseBusinessService.java
new file mode 100644
index 0000000..ae212eb
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/core/WarehouseBusinessService.java
@@ -0,0 +1,68 @@
+package com.consum.base.core;
+
+import com.consum.base.core.po.WhFormInventory;
+import com.consum.base.core.po.WhFormProcure;
+import com.consum.base.core.po.WhFormTransfer;
+import org.springframework.stereotype.Service;
+
+/**
+ * 杩涘嚭搴� 涓氬姟澶� 绫�
+ */
+@Service
+public class WarehouseBusinessService {
+
+
+    private WarehouseCoreService coreService;
+
+    /**
+     * 鎵ц閲囪喘鍏ュ簱
+     * 绗竴姝ワ細閫氳繃閲囪喘鍗曘�怶H_FORM_PROCURE銆戞煡璇㈤噰璐崟鍨嬪彿銆怶H_FORM_PROCURE_MODEL銆戞暟鎹�
+     * 绗簩姝ワ細缁勭粐CheckWarehouseParam锛岃皟鐢╓arehouseCoreService.unifyCheck()鎵ц鍏ュ簱
+     * 绗笁姝ワ細鏇存柊閲囪喘鍗曞瀷鍙枫�怶H_FORM_PROCURE_MODEL銆戝簱瀛樼墿鍝佺紪鍙峰瓧娈靛強涓昏〃WH_FORM_PROCURE鐘舵�佷俊鎭�
+     * 绗洓姝ワ細鏇存柊 杩涘嚭搴撴祦姘达紙浠撳簱锛夈�怶H_GOODS_DETAILS銆�
+     * @param procure
+     */
+    public void doProcure(WhFormProcure procure){
+        CheckWarehouseParam param = new CheckWarehouseParam();
+        param.setIsCheckIn(true);
+        param.setWarehouseId(procure.getId());
+        param.setIsCheckIn(true);
+
+        coreService.unifyCheck(param);
+    }
+
+    /**
+     * 鎵ц璋冩嫧鍑哄簱鎿嶄綔
+     * 1. 閫氳繃璋冩嫧鍗曘�怶H_FORM_TRANSFER銆戙�佽皟鎷ㄥ崟鐗╁搧銆怶H_FORM_TRANSFER_GOODS銆戠粍缁嘋heckWarehouseParam
+     * 2. 璋冪敤璋冪敤WarehouseCoreService.unifyCheck()鎵ц鍑哄簱
+     * 3. 鏇存柊杩涘嚭搴撴祦姘达紙浠撳簱锛夈�怶H_GOODS_DETAILS銆�
+     * 4. 鏇存柊璋冩嫧鍗曘�怶H_FORM_TRANSFER銆戜负寰呮帴鏀讹紝鏇存柊璋冩嫧鍗曠墿鍝併�怶H_FORM_TRANSFER_MODEL銆戝嚭搴撴祦姘碔D
+     * @param transfer
+     */
+    public void doTransferOutPut(WhFormTransfer transfer){
+
+    }
+
+    /**
+     * 鎵ц璋冩嫧鍏ュ簱鎿嶄綔
+     * 1. 閫氳繃璋冩嫧鍗曘�怶H_FORM_TRANSFER銆戙�佽皟鎷ㄥ崟鐗╁搧銆怶H_FORM_TRANSFER_GOODS銆戠粍缁嘋heckWarehouseParam
+     * 2. 璋冪敤璋冪敤WarehouseCoreService.unifyCheck()鎵ц鍑哄簱
+     * 3. 鏇存柊杩涘嚭搴撴祦姘达紙浠撳簱锛夈�怶H_GOODS_DETAILS銆�
+     * 4. 鏇存柊璋冩嫧鍗曘�怶H_FORM_TRANSFER銆戜负宸插叆搴擄紝锛屾洿鏂拌皟鎷ㄥ崟鐗╁搧銆怶H_FORM_TRANSFER_MODEL銆戝叆搴撴祦姘碔D
+     * @param transfer
+     */
+    public void doTransferInPut(WhFormTransfer transfer){
+
+    }
+
+    /**
+     * 鍒涘缓鐩樼偣浠诲姟锛屽垱寤虹洏鐐逛换鍔℃椂锛屾牴鎹綋鏃舵椂闂翠細灏嗗簱瀛樻暟鎹喕缁撲竴浠芥斁鍏ュ緟鐩樼偣鍗曘��
+     * 1.浠庡簱瀛樼墿鍝併�怶H_GOODS銆戜腑鎸夌収浠撳簱灏嗘暟鎹斁鍏ョ洏鐐瑰崟鐗╁搧銆怶H_FORM_INVENTORY_GOODS銆戯紝涓昏鏄�
+     * 鏈熷垵鏁伴噺INIT_COUNTS锛屽拰 搴撳瓨鐗╁搧缂栧彿WH_GOODS_ID瀛楁
+     * @param inventory
+     */
+    public void createInventory(WhFormInventory inventory){
+
+    }
+
+}
diff --git a/consum-base/src/main/java/com/consum/base/core/WarehouseCoreService.java b/consum-base/src/main/java/com/consum/base/core/WarehouseCoreService.java
new file mode 100644
index 0000000..0de0d26
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/core/WarehouseCoreService.java
@@ -0,0 +1,56 @@
+package com.consum.base.core;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
+
+
+/**
+ * 鏍稿績鍑哄叆搴撴帴鍙�
+ */
+@Service
+@Slf4j
+public class WarehouseCoreService {
+
+    /**
+     * 缁熶竴鍑哄叆搴�
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public CheckWarehouseResult unifyCheck(CheckWarehouseParam param) {
+        // TODO: 10/10/2023 姝ゅ鍔犱簡鍞竴閿侊紝浼氬奖鍝嶆�ц兘锛屾�濊�冩槸鍚︽湁鏇村悎閫傜殑鍔炴硶
+        try {
+            Assert.notNull(param, "wareHouse param can not null !");
+            Assert.notNull(param.getWarehouseId(), "wareHouse id can not null");
+            CheckWarehouseResult result;
+            synchronized (param.getWarehouseId()) {
+                if (param.getIsCheckIn()) {
+                    result = checkin(param);
+                } else {
+                    result = checkout(param);
+                }
+            }
+            return result;
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            throw new RuntimeException(e.getMessage());
+        }
+
+    }
+
+    /**
+     * 鍑哄簱
+     */
+    private CheckWarehouseResult checkout(CheckWarehouseParam param) {
+        return new CheckWarehouseResult();
+    }
+
+    /**
+     * 鍏ュ簱
+     */
+    private CheckWarehouseResult checkin(CheckWarehouseParam param) {
+        return new CheckWarehouseResult();
+    }
+
+
+}
diff --git a/consum-base/src/main/java/com/consum/base/core/po/SYS_AGENCY.java b/consum-base/src/main/java/com/consum/base/core/po/SYS_AGENCY.java
new file mode 100644
index 0000000..9f8322a
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/core/po/SYS_AGENCY.java
@@ -0,0 +1,4 @@
+package com.consum.base.core.po;
+
+public class SYS_AGENCY {
+}
diff --git a/consum-base/src/main/java/com/consum/base/core/po/WhFormInventory.java b/consum-base/src/main/java/com/consum/base/core/po/WhFormInventory.java
new file mode 100644
index 0000000..c327856
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/core/po/WhFormInventory.java
@@ -0,0 +1,11 @@
+package com.consum.base.core.po;
+
+/**
+ * 鍔熻兘鎻忚堪: 鐩樼偣鍗�
+ *
+ * @author dhz
+ * @date  2023-10-14 16:42
+ * @version 1.0
+ **/
+public class WhFormInventory {
+}
diff --git a/consum-base/src/main/java/com/consum/base/core/po/WhFormProcure.java b/consum-base/src/main/java/com/consum/base/core/po/WhFormProcure.java
new file mode 100644
index 0000000..ddef960
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/core/po/WhFormProcure.java
@@ -0,0 +1,19 @@
+package com.consum.base.core.po;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 閲囪喘鍗曘�怶H_FORM_PROCURE銆�
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class WhFormProcure {
+
+    private Long id;
+
+    private Long warehouseId;
+
+}
diff --git a/consum-base/src/main/java/com/consum/base/core/po/WhFormTransfer.java b/consum-base/src/main/java/com/consum/base/core/po/WhFormTransfer.java
new file mode 100644
index 0000000..c71b119
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/core/po/WhFormTransfer.java
@@ -0,0 +1,16 @@
+package com.consum.base.core.po;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 璋冩嫧鍗曘�怶H_FORM_TRANSFER銆�
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class WhFormTransfer {
+
+    private Long id;
+}
diff --git a/consum-base/src/main/java/com/consum/base/core/util/RandomUtil.java b/consum-base/src/main/java/com/consum/base/core/util/RandomUtil.java
new file mode 100644
index 0000000..2de34d8
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/core/util/RandomUtil.java
@@ -0,0 +1,61 @@
+package com.consum.base.core.util;
+
+import com.consum.base.util.IdUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.security.crypto.codec.Hex;
+
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 鍔熻兘鎻忚堪锛氳幏鍙栭殢鏈哄��
+ *
+ * @author dhz
+ * @date 2023-10-16 11:20
+ * @Version 1.0
+ **/
+@Slf4j
+public class RandomUtil {
+
+    /**
+     * 鍔犵洂瀛楃涓�
+     */
+    private static final String SALT = "13";
+
+    /**
+     * 鑾峰彇鍒嗙粍搴忓彿
+     *
+     * @param id    鍒嗙粍涓氬姟涓婚敭id
+     * @param group 鍒嗙粍鏁� 浠�0寮�濮嬪埌 group-1 鍏眊roup 缁�
+     * @return 鍒嗙粍鏁�
+     */
+    public static Integer getRandom(Long id, Integer group) {
+        try {
+            MessageDigest md5 = MessageDigest.getInstance("md5");
+            byte[] digest = md5.digest((id + SALT).getBytes(StandardCharsets.UTF_8));
+            char[] encode = Hex.encode(digest);
+            Long parseLong = Long.parseLong(String.valueOf(encode).substring(0, 3), 16);
+            return (int) (parseLong % group);
+        } catch (Exception e) {
+            log.error(e.getMessage());
+        }
+        return -1;
+    }
+
+    public static void main(String[] args) {
+        Map<Integer, Integer> map = new HashMap<Integer, Integer>(2);
+        Integer group = 13;
+        long generateId = IdUtil.generateId();
+        for (int i = 0; i < 10000; i++) {
+            Integer random = RandomUtil.getRandom(generateId, group);
+            if (map.containsKey(random)) {
+                map.put(random, map.get(random) + 1);
+            } else {
+                map.put(random, 1);
+            }
+        }
+        System.out.println(map);
+    }
+}
diff --git a/consum-base/src/main/java/com/consum/base/pojo/TokenVo.java b/consum-base/src/main/java/com/consum/base/pojo/TokenVo.java
new file mode 100644
index 0000000..fdb90ed
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/pojo/TokenVo.java
@@ -0,0 +1,93 @@
+package com.consum.base.pojo;
+
+
+
+public class TokenVo {
+
+    private String token;
+    private Long id ;
+    private String userName ;
+    private String showName ;
+    private String orgId ;
+    private Integer orgType;
+    private String tenantId ;
+    private String userPhone;
+
+    @Override
+    public String toString() {
+        return "TokenVo{" +
+                "token='" + token + '\'' +
+                ", id=" + id +
+                ", userName='" + userName + '\'' +
+                ", showName='" + showName + '\'' +
+                ", orgId='" + orgId + '\'' +
+                ", orgType=" + orgType +
+                ", tenantId='" + tenantId + '\'' +
+                ", userPhone='" + userPhone + '\'' +
+                '}';
+    }
+
+    public String getToken() {
+        return token;
+    }
+
+    public void setToken(String token) {
+        this.token = token;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getShowName() {
+        return showName;
+    }
+
+    public void setShowName(String showName) {
+        this.showName = showName;
+    }
+
+    public String getOrgId() {
+        return orgId;
+    }
+
+    public void setOrgId(String orgId) {
+        this.orgId = orgId;
+    }
+
+    public Integer getOrgType() {
+        return orgType;
+    }
+
+    public void setOrgType(Integer orgType) {
+        this.orgType = orgType;
+    }
+
+    public String getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(String tenantId) {
+        this.tenantId = tenantId;
+    }
+
+    public String getUserPhone() {
+        return userPhone;
+    }
+
+    public void setUserPhone(String userPhone) {
+        this.userPhone = userPhone;
+    }
+}
diff --git a/consum-base/src/main/java/com/consum/base/pojo/UpdatePwdParam.java b/consum-base/src/main/java/com/consum/base/pojo/UpdatePwdParam.java
new file mode 100644
index 0000000..003fd21
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/pojo/UpdatePwdParam.java
@@ -0,0 +1,26 @@
+package com.consum.base.pojo;
+
+import com.walker.web.param.ParamRequest;
+
+public class UpdatePwdParam extends ParamRequest {
+
+    private String newPwd;
+
+    private String newPwdCopy;
+
+    public String getNewPwd() {
+        return newPwd;
+    }
+
+    public void setNewPwd(String newPwd) {
+        this.newPwd = newPwd;
+    }
+
+    public String getNewPwdCopy() {
+        return newPwdCopy;
+    }
+
+    public void setNewPwdCopy(String newPwdCopy) {
+        this.newPwdCopy = newPwdCopy;
+    }
+}
diff --git a/consum-base/src/main/java/com/consum/base/util/FinSysOrgUtils.java b/consum-base/src/main/java/com/consum/base/util/FinSysOrgUtils.java
new file mode 100644
index 0000000..f2ff599
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/util/FinSysOrgUtils.java
@@ -0,0 +1,23 @@
+//package com.consum.base.util;
+//
+//import com.consum.model.po.FinSysOrg;
+//import com.walker.infrastructure.tree.TreeNode;
+//import java.util.List;
+//
+///**
+// * @Description 鏈烘瀯鑺傜偣
+// * @Author wh
+// * @Date 2023/7/11 11:26
+// */
+//public class FinSysOrgUtils {
+//
+//    public FinSysOrgUtils() {
+//    }
+//
+//    public static final List<TreeNode> getFinSysOrgTree(List<FinSysOrg> finSysOrgList) {
+//        FinSysOrgTreeGenerator finSysOrgTreeGenerator = new FinSysOrgTreeGenerator((String)null);
+//        finSysOrgTreeGenerator.setEntityList(finSysOrgList);
+//        List<TreeNode> treeNodeList = finSysOrgTreeGenerator.getTreeRootList();
+//        return treeNodeList;
+//    }
+//}
diff --git a/consum-base/src/main/java/com/consum/base/util/FinSysTenantUtils.java b/consum-base/src/main/java/com/consum/base/util/FinSysTenantUtils.java
new file mode 100644
index 0000000..3b1218b
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/util/FinSysTenantUtils.java
@@ -0,0 +1,26 @@
+//package com.consum.base.util;
+//
+//import com.consum.model.po.FinSysTenant;
+//import com.walker.infrastructure.tree.TreeNode;
+//
+//import java.util.List;
+//
+///**
+// * @Description 鍖哄垝鑺傜偣
+// * @Author wh
+// * @Date 2023/7/11 11:26
+// */
+//public class FinSysTenantUtils {
+//
+//    public FinSysTenantUtils() {
+//    }
+//
+//    public static final List<TreeNode> getFinSysTenantTree(List<FinSysTenant> finSysTenantList) {
+//        FinSysTenantGenerator finSysTenantGenerator = new FinSysTenantGenerator((String)null);
+//        finSysTenantGenerator.setEntityList(finSysTenantList);
+//        List<TreeNode> treeNodeList = finSysTenantGenerator.getTreeRootList();
+//        return treeNodeList;
+//    }
+//
+//
+//}
diff --git a/consum-base/src/main/java/com/consum/base/util/IdUtil.java b/consum-base/src/main/java/com/consum/base/util/IdUtil.java
new file mode 100644
index 0000000..7551199
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/util/IdUtil.java
@@ -0,0 +1,78 @@
+package com.consum.base.util;
+
+public class IdUtil {
+
+    private static IdUtil instance = new IdUtil(0);
+
+    public static IdUtil getInstance() {
+        return instance;
+    }
+
+    public static long generateId() {
+        return instance.nextId();
+    }
+
+    private final static long MACHINE_BIT = 5; // max 31
+    private final static long SEQUENCE_BIT = 8; // 256/10ms
+
+    /**
+     * mask/max value
+     */
+    private final static long MAX_MACHINE_NUM = -1L ^ (-1L << MACHINE_BIT);
+    private final static long MAX_SEQUENCE = -1L ^ (-1L << SEQUENCE_BIT);
+
+    private final static long MACHINE_LEFT = SEQUENCE_BIT;
+    private final static long TIMESTMP_LEFT = MACHINE_BIT + SEQUENCE_BIT;
+
+    private long machineId;
+    private long sequence = 0L;
+    private long lastStmp = -1L;
+
+    private IdUtil(long machineId) {
+        if (machineId > MAX_MACHINE_NUM || machineId < 0) {
+            throw new IllegalArgumentException(
+                    "machineId can't be greater than " + MAX_MACHINE_NUM + " or less than 0");
+        }
+        this.machineId = machineId;
+    }
+
+    /**
+     * generate new ID
+     *
+     * @return
+     */
+    public synchronized long nextId() {
+        long currStmp = getTimestamp();
+        if (currStmp < lastStmp) {
+            throw new RuntimeException("Clock moved backwards.  Refusing to generate id");
+        }
+
+        if (currStmp == lastStmp) {
+            sequence = (sequence + 1) & MAX_SEQUENCE;
+            if (sequence == 0L) {
+                currStmp = getNextTimestamp();
+            }
+        } else {
+            sequence = 0L;
+        }
+
+        lastStmp = currStmp;
+
+        return currStmp << TIMESTMP_LEFT //
+                | machineId << MACHINE_LEFT //
+                | sequence;
+    }
+
+    private long getNextTimestamp() {
+        long mill = getTimestamp();
+        while (mill <= lastStmp) {
+            mill = getTimestamp();
+        }
+        return mill;
+    }
+
+    private long getTimestamp() {
+        // per 10ms
+        return System.currentTimeMillis() / 10;// 10ms
+    }
+}
diff --git a/consum-base/src/main/java/com/consum/base/util/RangeMergeUtil.java b/consum-base/src/main/java/com/consum/base/util/RangeMergeUtil.java
new file mode 100644
index 0000000..ba488ef
--- /dev/null
+++ b/consum-base/src/main/java/com/consum/base/util/RangeMergeUtil.java
@@ -0,0 +1,200 @@
+//package com.consum.base.util;
+//
+//import com.consum.model.po.PTempProjectStageNode;
+//import com.walker.infrastructure.utils.CollectionUtils;
+//
+//import java.util.*;
+//
+///**
+// * @ClassName RangeMergeUtil
+// * @Author cy
+// * @Date 2023/9/25
+// * @Description
+// * @Version 1.0
+// **/
+//public class RangeMergeUtil {
+//
+//    /**
+//     * 鏍规嵁鑺傜偣涓妭鐐瑰紑濮嬫椂闂淬�佹寔缁椂闂达紝灏嗚妭鐐硅浆涓簂ink
+//     *
+//     * @param tempProjectStageNodes
+//     * @return
+//     */
+//    public static ArrayList<Link> tempNode2Link(List<PTempProjectStageNode> tempProjectStageNodes) {
+//        ArrayList<Link> links = new ArrayList<>();
+//        tempProjectStageNodes.forEach(item -> {
+//            Integer nodeTimeStart = item.getNodeTimeStart();
+//            Integer nodeTimeDays = item.getNodeTimeDays();
+//            if (nodeTimeStart != null && nodeTimeDays != null) {
+//                Link link = new Link(nodeTimeStart, nodeTimeStart + nodeTimeDays - 1);
+//                links.add(link);
+//            }
+//        });
+//        return links;
+//    }
+//
+//    /**
+//     * 瀵圭粰瀹氬尯闂磋繘琛屽悎骞�
+//     *
+//     * @param info_dict
+//     * @return
+//     */
+//    public static ArrayList<Link> merge(ArrayList<Link> info_dict) {
+//        //棣栧厛瀵筰nfo_dict杩涜鎺掑簭锛屾帓搴忚鍒欎负鏍规嵁Link鐨刲eft鎺掑簭锛屽鏋渓eft鐩哥瓑锛屾牴鎹畆ight鎺掑簭
+//        Collections.sort(info_dict, (o1, o2) -> {
+//            int a = o1.getLeft() - o2.getLeft();
+//            return a == 0 ? o1.getRight() - o2.getRight() : a;
+//        });
+//
+//        //鍒涘缓涓�涓敤浜庢帴鍙楀悎骞跺悗缁撴灉鐨刣ict,鍚屾椂璁剧疆涓�涓被浼兼粦鍔ㄧ獥鍙d竴鏍风殑start鍜宔nd
+//        ArrayList<Link> result_dict = new ArrayList<>();
+//        double start = -2e9, end = -2e9;
+//        for (Link i : info_dict) {
+//            //鍒ゆ柇涓ょ鎯呭喌
+//            //绗竴绉嶆槸褰揺nd灏忎簬i.getLeft()鏃讹紝璇存槑鎴戜滑閬囧埌浜嗕竴涓柊鐨勬病鏈変氦闆嗙殑鍖洪棿
+//            //閭d箞灏卞皢start鍜宔nd绉诲姩杩囨潵锛屽苟涓斿皢瀹冩坊鍔犲埌result_dict涓�
+//            if (end + 1 < i.getLeft()) {
+//                if (start != -2e9) {
+//                    result_dict.add(new Link((int) start, (int) end));
+//                }
+//                start = i.getLeft();
+//                end = i.getRight();
+//            }
+//            //绗簩绉嶆儏鍐垫槸褰撴湁浜ら泦鏃讹紝濡傛灉鍦ㄥ綋鍓嶆粦鍔ㄥ尯闂村唴锛屼笉鍙橈紝濡傛灉鍏秗ight澶т簬褰撳墠end锛屽皢婊戝姩鍖洪棿鐨別nd璁剧疆涓簉ight
+//            else {
+//                end = Math.max(end, i.getRight());
+//            }
+//        }
+//
+//        //鎺掔┖婊戝姩鍖洪棿
+//        if (start != -2e9) {
+//            result_dict.add(new Link((int) start, (int) end));
+//        }
+//        //杩斿洖result_dict涓尯闂寸殑涓暟
+//        return result_dict;
+//    }
+//
+//    /**
+//     * 鑾峰彇鑺傜偣鍏冪礌涓殑鏈�鍊间俊鎭�
+//     *
+//     * @param mergeList
+//     * @return
+//     */
+//    public static Map<String, Integer> getMergeMaxMinInfo(ArrayList<Link> mergeList) {
+//        if (CollectionUtils.isEmpty(mergeList)) {
+//            return null;
+//        }
+//        int maxLeft = Integer.MIN_VALUE;
+//        int minLeft = Integer.MAX_VALUE;
+//        int maxRight = Integer.MIN_VALUE;
+//        int minRight = Integer.MAX_VALUE;
+//
+//        for (Link link : mergeList) {
+//            int left = link.getLeft();
+//            int right = link.getRight();
+//            maxLeft = Math.max(maxLeft, left);
+//            minLeft = Math.min(minLeft, left);
+//            maxRight = Math.max(maxRight, right);
+//            minRight = Math.min(minRight, right);
+//        }
+//        HashMap<String, Integer> rtnInfo = new HashMap<>();
+//        rtnInfo.put("maxLeft", maxLeft);
+//        rtnInfo.put("minLeft", minLeft);
+//        rtnInfo.put("maxRight", maxRight);
+//        rtnInfo.put("minRight", minRight);
+//        return rtnInfo;
+//    }
+//
+//    /**
+//     * 鏍¢獙鏄惁鏈夋棩鏈熺┖妗e苟杩斿洖鍖洪棿鏈�鍊间俊鎭�
+//     * @param tempProjectStageNodes
+//     * @return
+//     */
+//    public static Map<String, Integer> checkDateGap(List<PTempProjectStageNode> tempProjectStageNodes) {
+//        ArrayList<Link> info_dict = tempNode2Link(tempProjectStageNodes);
+//        ArrayList<Link> mergeList = merge(info_dict);
+//        if (mergeList.size() > 1) {
+//            return null;
+//        }
+//        return getMergeMaxMinInfo(mergeList);
+//    }
+//
+//    /**
+//     * 鏍¢獙鏄惁鏈夐噸鍙�
+//     * @param list
+//     * @return
+//     */
+//    public static Boolean checkOverlap(List<Map<String, Integer>> list) {
+//        for (int i = 0; i < list.size(); i++) {
+//            Integer minLeft1 = list.get(i).get("minLeft");
+//            Integer maxRight1 = list.get(i).get("maxRight");
+//            for (int j = i + 1; j < list.size(); j++) {
+//                Integer minLeft2 = list.get(j).get("minLeft");
+//                Integer maxRight2 = list.get(j).get("maxRight");
+//                if (minLeft1 <= maxRight2 && maxRight1 >= minLeft2) {
+//                    return true;
+//                }
+//            }
+//        }
+//        return false;
+//    }
+//
+//    public static void main(String[] args) {
+//        List<PTempProjectStageNode> tempProjectStageNodes = new ArrayList<>();
+//        PTempProjectStageNode node1 = new PTempProjectStageNode();
+//        node1.setNodeTimeStart(2);
+//        node1.setNodeTimeDays(1);
+//        tempProjectStageNodes.add(node1);
+//
+//        PTempProjectStageNode node2 = new PTempProjectStageNode();
+//        node2.setNodeTimeStart(1);
+//        node2.setNodeTimeDays(5);
+//        tempProjectStageNodes.add(node2);
+//
+//        PTempProjectStageNode node3 = new PTempProjectStageNode();
+//        node3.setNodeTimeStart(3);
+//        node3.setNodeTimeDays(6);
+//        tempProjectStageNodes.add(node3);
+//
+//        PTempProjectStageNode node4 = new PTempProjectStageNode();
+//        node4.setNodeTimeStart(80);
+//        node4.setNodeTimeDays(6);
+//        tempProjectStageNodes.add(node4);
+//
+//        ArrayList<Link> info_dict = tempNode2Link(tempProjectStageNodes);
+//        ArrayList<Link> mergeList = merge(info_dict);
+//        System.out.println("鍚堝苟鍚庡尯闂存暟閲忎负锛�" + mergeList.size());
+//        Map<String, Integer> mergeMaxMinInfo = getMergeMaxMinInfo(mergeList);
+//        System.out.println("鍚堝苟鍚庡尯闂翠腑left:Max鐨勫�间负:" + mergeMaxMinInfo.get("maxLeft"));
+//        System.out.println("鍚堝苟鍚庡尯闂翠腑left:Min鐨勫�间负:" + mergeMaxMinInfo.get("minLeft"));
+//        System.out.println("鍚堝苟鍚庡尯闂翠腑right:Max鐨勫�间负:" + mergeMaxMinInfo.get("maxRight"));
+//        System.out.println("鍚堝苟鍚庡尯闂翠腑right:Min鐨勫�间负:" + mergeMaxMinInfo.get("minRight"));
+//
+//    }
+//}
+//
+//class Link {
+//    private int left;
+//    private int right;
+//
+//    public int getLeft() {
+//        return left;
+//    }
+//
+//    public void setLeft(int left) {
+//        this.left = left;
+//    }
+//
+//    public int getRight() {
+//        return right;
+//    }
+//
+//    public void setRight(int right) {
+//        this.right = right;
+//    }
+//
+//    public Link(int left, int right) {
+//        this.left = left;
+//        this.right = right;
+//    }
+//}
diff --git a/consum-model-pojo/pom.xml b/consum-model-pojo/pom.xml
new file mode 100644
index 0000000..5c30f5c
--- /dev/null
+++ b/consum-model-pojo/pom.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>com.consum</groupId>
+        <artifactId>low-consum-manage</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>com.consum</groupId>
+    <artifactId>consum-model-pojo</artifactId>
+    <name>consum-model-pojo</name>
+    <packaging>jar</packaging>
+
+    <properties>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+<!--        鏁版嵁鏍¢獙-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+        <!-- jdbc pojo閫氱敤渚濊禆 -->
+        <dependency>
+            <groupId>com.walkersoft</groupId>
+            <artifactId>walker-jdbc-common</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <!-- json娉ㄨВ锛氬睘鎬х粦瀹氫緷璧� -->
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/consum-model-pojo/src/main/java/com/consum/model/po/BaseCodeIndexing.java b/consum-model-pojo/src/main/java/com/consum/model/po/BaseCodeIndexing.java
new file mode 100644
index 0000000..c2eec24
--- /dev/null
+++ b/consum-model-pojo/src/main/java/com/consum/model/po/BaseCodeIndexing.java
@@ -0,0 +1,194 @@
+
+package com.consum.model.po;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.walker.jdbc.BasePo;
+
+/**
+ * 琛ㄥ悕:BASE_CODE_INDEXING *
+ * @author genrator
+ */
+@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
+public class BaseCodeIndexing extends BasePo<BaseCodeIndexing> {
+    // 搴忓垪鍖栫増鏈彿
+    private static final long serialVersionUID = 1L;
+
+    // 涓婚敭
+    private Long id = null;
+    @JsonIgnore
+    protected boolean isset_id = false;
+
+    // 灞炴�у垪琛�
+    private Integer yearIndex = null;
+    @JsonIgnore
+    protected boolean isset_yearIndex = false;
+
+    private Integer monthIndex = null;
+    @JsonIgnore
+    protected boolean isset_monthIndex = false;
+
+    private Integer dayIndex = null;
+    @JsonIgnore
+    protected boolean isset_dayIndex = false;
+
+    private Integer codeIndex = null;
+    @JsonIgnore
+    protected boolean isset_codeIndex = false;
+
+    private String codePrefix = null;
+    @JsonIgnore
+    protected boolean isset_codePrefix = false;
+
+    /**
+     * 榛樿鏋勯�犲嚱鏁�
+     */
+    public BaseCodeIndexing() {
+    }
+
+    /**
+     * 鏍规嵁涓婚敭鏋勯�犲璞�
+     */
+    public BaseCodeIndexing(Long id) {
+        this.setId(id);
+    }
+
+    /**
+     * 璁剧疆涓婚敭鍊�
+     */
+    @Override
+    public void setPkValue(Object value) {
+        this.setId((Long) value);
+    }
+
+    public Long getId() {
+        return this.id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+        this.isset_id = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyId() {
+        return this.id == null;
+    }
+
+    public Integer getYearIndex() {
+        return this.yearIndex;
+    }
+
+    public void setYearIndex(Integer yearIndex) {
+        this.yearIndex = yearIndex;
+        this.isset_yearIndex = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyYearIndex() {
+        return this.yearIndex == null;
+    }
+
+    public Integer getMonthIndex() {
+        return this.monthIndex;
+    }
+
+    public void setMonthIndex(Integer monthIndex) {
+        this.monthIndex = monthIndex;
+        this.isset_monthIndex = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyMonthIndex() {
+        return this.monthIndex == null;
+    }
+
+    public Integer getDayIndex() {
+        return this.dayIndex;
+    }
+
+    public void setDayIndex(Integer dayIndex) {
+        this.dayIndex = dayIndex;
+        this.isset_dayIndex = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyDayIndex() {
+        return this.dayIndex == null;
+    }
+
+    public Integer getCodeIndex() {
+        return this.codeIndex;
+    }
+
+    public void setCodeIndex(Integer codeIndex) {
+        this.codeIndex = codeIndex;
+        this.isset_codeIndex = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyCodeIndex() {
+        return this.codeIndex == null;
+    }
+
+    public String getCodePrefix() {
+        return this.codePrefix;
+    }
+
+    public void setCodePrefix(String codePrefix) {
+        this.codePrefix = codePrefix;
+        this.isset_codePrefix = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyCodePrefix() {
+        return this.codePrefix == null || this.codePrefix.length() == 0;
+    }
+
+    /**
+     * 閲嶅啓 toString() 鏂规硶
+     */
+    @Override
+    public String toString() {
+        return new StringBuilder()
+                .append("id=").append(this.id)
+                .append("yearIndex=").append(this.yearIndex)
+                .append("monthIndex=").append(this.monthIndex)
+                .append("dayIndex=").append(this.dayIndex)
+                .append("codeIndex=").append(this.codeIndex)
+                .append("codePrefix=").append(this.codePrefix)
+                .toString();
+    }
+
+    /**
+     * 鍏嬮殕
+     */
+    public BaseCodeIndexing $clone() {
+        BaseCodeIndexing base_code_indexing = new BaseCodeIndexing();
+
+        // 鏁版嵁搴撳悕绉�
+        //base_code_indexing.setDatabaseName_(this.getDatabaseName_());
+
+        // 涓婚敭
+        if (this.isset_id) {
+            base_code_indexing.setId(this.getId());
+        }
+        // 鏅�氬睘鎬�
+        if (this.isset_yearIndex) {
+            base_code_indexing.setYearIndex(this.getYearIndex());
+        }
+        if (this.isset_monthIndex) {
+            base_code_indexing.setMonthIndex(this.getMonthIndex());
+        }
+        if (this.isset_dayIndex) {
+            base_code_indexing.setDayIndex(this.getDayIndex());
+        }
+        if (this.isset_codeIndex) {
+            base_code_indexing.setCodeIndex(this.getCodeIndex());
+        }
+        if (this.isset_codePrefix) {
+            base_code_indexing.setCodePrefix(this.getCodePrefix());
+        }
+        return base_code_indexing;
+    }
+}
diff --git a/consum-model-pojo/src/main/java/com/consum/model/po/BaseCodeIndexing_mapper.java b/consum-model-pojo/src/main/java/com/consum/model/po/BaseCodeIndexing_mapper.java
new file mode 100644
index 0000000..4c27b65
--- /dev/null
+++ b/consum-model-pojo/src/main/java/com/consum/model/po/BaseCodeIndexing_mapper.java
@@ -0,0 +1,285 @@
+package com.consum.model.po;
+
+import com.walker.jdbc.BaseMapper;
+import com.walker.jdbc.ResultSetUtils;
+import com.walker.jdbc.SqlAndParameters;
+import com.walker.jdbc.sqlgen.DeleteBuilder;
+import com.walker.jdbc.sqlgen.InsertBuilder;
+import com.walker.jdbc.sqlgen.SelectBuilder;
+import com.walker.jdbc.sqlgen.UpdateBuilder;
+import com.walker.jdbc.util.StringUtils;
+
+import org.springframework.jdbc.core.RowMapper;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Map;
+
+/**
+ * 琛ㄥ悕:BASE_CODE_INDEXING *
+ * @author genrator
+ */
+public class BaseCodeIndexing_mapper extends BaseCodeIndexing implements BaseMapper<BaseCodeIndexing> {
+    // 搴忓垪鍖栫増鏈彿
+    private static final long serialVersionUID = 1L;
+
+    public static final RowMapper<BaseCodeIndexing> ROW_MAPPER = new BaseCodeIndexingRowMapper();
+
+    // 涓婚敭
+    public static final String Id = "id";
+    // 鏅�氬睘鎬�
+    public static final String YearIndex = "year_index";
+    public static final String MonthIndex = "month_index";
+    public static final String DayIndex = "day_index";
+    public static final String CodeIndex = "code_index";
+    public static final String CodePrefix = "code_prefix";
+
+    /**
+     * 榛樿鏋勯�犲嚱鏁�
+     */
+    public BaseCodeIndexing_mapper(BaseCodeIndexing baseCodeIndexing) {
+        if (baseCodeIndexing == null) {
+            throw new IllegalArgumentException("po鍙傛暟涓嶅厑璁镐负绌猴紒");
+        }
+        //涓婚敭
+        if (baseCodeIndexing.isset_id) {
+            this.setId(baseCodeIndexing.getId());
+        }
+        //鏅�氬睘鎬�
+        if (baseCodeIndexing.isset_yearIndex) {
+            this.setYearIndex(baseCodeIndexing.getYearIndex());
+        }
+        if (baseCodeIndexing.isset_monthIndex) {
+            this.setMonthIndex(baseCodeIndexing.getMonthIndex());
+        }
+        if (baseCodeIndexing.isset_dayIndex) {
+            this.setDayIndex(baseCodeIndexing.getDayIndex());
+        }
+        if (baseCodeIndexing.isset_codeIndex) {
+            this.setCodeIndex(baseCodeIndexing.getCodeIndex());
+        }
+        if (baseCodeIndexing.isset_codePrefix) {
+            this.setCodePrefix(baseCodeIndexing.getCodePrefix());
+        }
+        // 鍘绘帀锛�2022-09-07
+        // this.setDatabaseName_(base_code_indexing.getDatabaseName_());
+    }
+
+    /**
+     * 鑾峰彇琛ㄥ悕
+     */
+    @Override
+    public String getTableName_() {
+        String tableName = "base_code_indexing";
+        /**
+        if (StringUtils.isNotEmpty(this.getDatabaseName_())) {
+            return this.getDatabaseName_() + "." + tableName;
+        } else {
+            return tableName;
+        }
+        */
+        return tableName;
+    }
+
+    /**
+     * 鑾峰彇涓婚敭鍚嶇О
+     */
+    @Override
+    public String getPkName_() {
+        return Id;
+    }
+
+    /**
+     * 鑾峰彇涓婚敭鍊�
+     */
+    @Override
+    public Object getPkValue_() {
+        return this.getId();
+    }
+
+    /**
+     * 鑾峰彇鎻掑叆璇彞鍜屽弬鏁�
+     */
+    @Override
+    public SqlAndParameters<Map<String, Object>> getInsertSql_() {
+        InsertBuilder ib = new InsertBuilder(this.getTableName_());
+        ib.set(Id, this.getId());
+        ib.set(YearIndex, this.getYearIndex(), this.isset_yearIndex);
+        ib.set(MonthIndex, this.getMonthIndex(), this.isset_monthIndex);
+        ib.set(DayIndex, this.getDayIndex(), this.isset_dayIndex);
+        ib.set(CodeIndex, this.getCodeIndex(), this.isset_codeIndex);
+        ib.set(CodePrefix, this.getCodePrefix(), this.isset_codePrefix);
+        return ib.genMapSql();
+    }
+
+    /**
+     * 鑾峰彇鏇存柊璇彞鍜屽弬鏁�
+     */
+    @Override
+    public SqlAndParameters<Map<String, Object>> getUpdateSql_() {
+        UpdateBuilder ub = new UpdateBuilder(this.getTableName_());
+        ub.set(YearIndex, this.getYearIndex(), this.isset_yearIndex);
+        ub.set(MonthIndex, this.getMonthIndex(), this.isset_monthIndex);
+        ub.set(DayIndex, this.getDayIndex(), this.isset_dayIndex);
+        ub.set(CodeIndex, this.getCodeIndex(), this.isset_codeIndex);
+        ub.set(CodePrefix, this.getCodePrefix(), this.isset_codePrefix);
+        ub.where(this.getPkName_(), this.getPkValue_());
+        return ub.genMapSql();
+    }
+
+    /**
+     * 鑾峰彇鏇存柊璇彞鍜屽弬鏁�
+     */
+    @Override
+    public SqlAndParameters<Map<String, Object>> getUpdateSql_(String where, Map<String, Object> parameters) {
+        UpdateBuilder ub = new UpdateBuilder(this.getTableName_());
+        ub.set(YearIndex, this.getYearIndex(), this.isset_yearIndex);
+        ub.set(MonthIndex, this.getMonthIndex(), this.isset_monthIndex);
+        ub.set(DayIndex, this.getDayIndex(), this.isset_dayIndex);
+        ub.set(CodeIndex, this.getCodeIndex(), this.isset_codeIndex);
+        ub.set(CodePrefix, this.getCodePrefix(), this.isset_codePrefix);
+        return ub.genMapSql(where, parameters);
+    }
+
+    /**
+     * 鑾峰彇鏇存柊璇彞鍜屽弬鏁�
+     */
+    @Override
+    public SqlAndParameters<Object[]> getUpdateSql_(String where, Object[] parameters) {
+        UpdateBuilder ub = new UpdateBuilder(this.getTableName_());
+        ub.set(YearIndex, this.getYearIndex(), this.isset_yearIndex);
+        ub.set(MonthIndex, this.getMonthIndex(), this.isset_monthIndex);
+        ub.set(DayIndex, this.getDayIndex(), this.isset_dayIndex);
+        ub.set(CodeIndex, this.getCodeIndex(), this.isset_codeIndex);
+        ub.set(CodePrefix, this.getCodePrefix(), this.isset_codePrefix);
+        return ub.genArraySql(where, parameters);
+    }
+
+    /**
+     * 鑾峰彇鍒犻櫎璇彞鍜屽弬鏁�
+     */
+    @Override
+    public SqlAndParameters<Map<String, Object>> getDeleteSql_() {
+        DeleteBuilder db = new DeleteBuilder(this.getTableName_());
+        db.where(this.getPkName_(), this.getPkValue_());
+        return db.genMapSql();
+    }
+
+    /**
+     * 鑾峰彇鍒犻櫎璇彞鍜屽弬鏁�
+     */
+    @Override
+    public SqlAndParameters<Map<String, Object>> getDeleteSql_(String where, Map<String, Object> parameters) {
+        DeleteBuilder db = new DeleteBuilder(this.getTableName_());
+        return db.genMapSql(where, parameters);
+    }
+
+    /**
+     * 鑾峰彇鍒犻櫎璇彞鍜屽弬鏁�
+     */
+    @Override
+    public SqlAndParameters<Object[]> getDeleteSql_(String where, Object[] parameters) {
+        DeleteBuilder db = new DeleteBuilder(this.getTableName_());
+        return db.genArraySql(where, parameters);
+    }
+
+    /**
+     * 鑾峰彇鍗曡鏌ヨ璇彞鍜屽弬鏁�
+     */
+    @Override
+    public SqlAndParameters<Map<String, Object>> getSingleSql_() {
+        SelectBuilder sb = new SelectBuilder(this.getTableName_());
+        sb.where(this.getPkName_(), this.getPkValue_());
+        return sb.genMapSql();
+    }
+
+
+    /**
+     * 鑾峰彇鏌ヨ璇彞鍜屽弬鏁�
+     */
+    @Override
+    public SqlAndParameters<Map<String, Object>> getSelectSql_(String where, Map<String, Object> parameters) {
+        return new SqlAndParameters<>("select id, year_index, month_index, day_index, code_index, code_prefix from " + this.getTableName_() + " " + where, parameters);
+    }
+
+    /**
+     * 鑾峰彇鏌ヨ璇彞鍜屽弬鏁�
+     */
+    @Override
+    public SqlAndParameters<Object[]> getSelectSql_(String where, Object[] parameters) {
+        return new SqlAndParameters<>("select id, year_index, month_index, day_index, code_index, code_prefix from " + this.getTableName_() + " " + where, parameters);
+    }
+
+    /**
+     * 灏唕esultset鐨勪竴琛岃浆鍖栦负po
+     */
+    @Override
+    public BaseCodeIndexing mapRow(ResultSet rs, int i) throws SQLException {
+        return ROW_MAPPER.mapRow(rs, i);
+    }
+
+    /**
+     * 鍏嬮殕
+     */
+    public BaseCodeIndexing toBaseCodeIndexing() {
+        return super.$clone();
+    }
+}
+
+/**
+ * base_code_indexing RowMapper
+ *
+ * @author genrator
+ */
+class BaseCodeIndexingRowMapper implements RowMapper<BaseCodeIndexing> {
+
+    @Override
+    public BaseCodeIndexing mapRow(ResultSet rs, int i) throws SQLException {
+        ResultSetUtils resultSetUtils = new ResultSetUtils();
+        BaseCodeIndexing base_code_indexing = new BaseCodeIndexing();
+        Integer columnIndex;
+        //涓婚敭
+        columnIndex = resultSetUtils.findColumn(rs, BaseCodeIndexing_mapper.Id);
+        if (columnIndex > 0) {
+            base_code_indexing.setId(rs.getLong(columnIndex));
+        }
+        //鏅�氬睘鎬�
+        columnIndex = resultSetUtils.findColumn(rs, BaseCodeIndexing_mapper.YearIndex);
+        if (columnIndex > 0) {
+            if (rs.getBigDecimal(columnIndex) == null) {
+                base_code_indexing.setYearIndex(null);
+            } else {
+                base_code_indexing.setYearIndex(rs.getInt(columnIndex));
+            }
+        }
+        columnIndex = resultSetUtils.findColumn(rs, BaseCodeIndexing_mapper.MonthIndex);
+        if (columnIndex > 0) {
+            if (rs.getBigDecimal(columnIndex) == null) {
+                base_code_indexing.setMonthIndex(null);
+            } else {
+                base_code_indexing.setMonthIndex(rs.getInt(columnIndex));
+            }
+        }
+        columnIndex = resultSetUtils.findColumn(rs, BaseCodeIndexing_mapper.DayIndex);
+        if (columnIndex > 0) {
+            if (rs.getBigDecimal(columnIndex) == null) {
+                base_code_indexing.setDayIndex(null);
+            } else {
+                base_code_indexing.setDayIndex(rs.getInt(columnIndex));
+            }
+        }
+        columnIndex = resultSetUtils.findColumn(rs, BaseCodeIndexing_mapper.CodeIndex);
+        if (columnIndex > 0) {
+            if (rs.getBigDecimal(columnIndex) == null) {
+                base_code_indexing.setCodeIndex(null);
+            } else {
+                base_code_indexing.setCodeIndex(rs.getInt(columnIndex));
+            }
+        }
+        columnIndex = resultSetUtils.findColumn(rs, BaseCodeIndexing_mapper.CodePrefix);
+        if (columnIndex > 0) {
+            base_code_indexing.setCodePrefix(rs.getString(columnIndex));
+        }
+        return base_code_indexing;
+    }
+}
diff --git a/consum-model-pojo/src/main/java/com/consum/model/po/WhGoods.java b/consum-model-pojo/src/main/java/com/consum/model/po/WhGoods.java
new file mode 100644
index 0000000..b6cdb30
--- /dev/null
+++ b/consum-model-pojo/src/main/java/com/consum/model/po/WhGoods.java
@@ -0,0 +1,480 @@
+
+package com.consum.model.po;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.walker.jdbc.BasePo;
+
+/**
+ * 琛ㄥ悕:WH_GOODS *
+ * @author genrator
+ */
+@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
+public class WhGoods extends BasePo<WhGoods> {
+    // 搴忓垪鍖栫増鏈彿
+    private static final long serialVersionUID = 1L;
+
+    // 涓婚敭
+    private Long id = null;
+    @JsonIgnore
+    protected boolean isset_id = false;
+
+    // 灞炴�у垪琛�
+    private Long baseGoodsTemplateId = null;
+    @JsonIgnore
+    protected boolean isset_baseGoodsTemplateId = false;
+
+    private String goodsTemplateName = null;
+    @JsonIgnore
+    protected boolean isset_goodsTemplateName = false;
+
+    private Long baseGoodsModelsId = null;
+    @JsonIgnore
+    protected boolean isset_baseGoodsModelsId = false;
+
+    private String baseGoodsModelsName = null;
+    @JsonIgnore
+    protected boolean isset_baseGoodsModelsName = false;
+
+    private Integer whCount = null;
+    @JsonIgnore
+    protected boolean isset_whCount = false;
+
+    private Integer transferCount = null;
+    @JsonIgnore
+    protected boolean isset_transferCount = false;
+
+    private Integer allCount = null;
+    @JsonIgnore
+    protected boolean isset_allCount = false;
+
+    private String firstInputCode = null;
+    @JsonIgnore
+    protected boolean isset_firstInputCode = false;
+
+    private Integer firstInputType = null;
+    @JsonIgnore
+    protected boolean isset_firstInputType = false;
+
+    private Long firstInputHisId = null;
+    @JsonIgnore
+    protected boolean isset_firstInputHisId = false;
+
+    private Long warehouseId = null;
+    @JsonIgnore
+    protected boolean isset_warehouseId = false;
+
+    private String warehouseName = null;
+    @JsonIgnore
+    protected boolean isset_warehouseName = false;
+
+    private String supplier = null;
+    @JsonIgnore
+    protected boolean isset_supplier = false;
+
+    private String unit = null;
+    @JsonIgnore
+    protected boolean isset_unit = false;
+
+    private Double price = null;
+    @JsonIgnore
+    protected boolean isset_price = false;
+
+    private Long procureDate = null;
+    @JsonIgnore
+    protected boolean isset_procureDate = false;
+
+    private Long backDate = null;
+    @JsonIgnore
+    protected boolean isset_backDate = false;
+
+    private Integer states = null;
+    @JsonIgnore
+    protected boolean isset_states = false;
+
+    /**
+     * 榛樿鏋勯�犲嚱鏁�
+     */
+    public WhGoods() {
+    }
+
+    /**
+     * 鏍规嵁涓婚敭鏋勯�犲璞�
+     */
+    public WhGoods(Long id) {
+        this.setId(id);
+    }
+
+    /**
+     * 璁剧疆涓婚敭鍊�
+     */
+    @Override
+    public void setPkValue(Object value) {
+        this.setId((Long) value);
+    }
+
+    public Long getId() {
+        return this.id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+        this.isset_id = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyId() {
+        return this.id == null;
+    }
+
+    public Long getBaseGoodsTemplateId() {
+        return this.baseGoodsTemplateId;
+    }
+
+    public void setBaseGoodsTemplateId(Long baseGoodsTemplateId) {
+        this.baseGoodsTemplateId = baseGoodsTemplateId;
+        this.isset_baseGoodsTemplateId = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyBaseGoodsTemplateId() {
+        return this.baseGoodsTemplateId == null;
+    }
+
+    public String getGoodsTemplateName() {
+        return this.goodsTemplateName;
+    }
+
+    public void setGoodsTemplateName(String goodsTemplateName) {
+        this.goodsTemplateName = goodsTemplateName;
+        this.isset_goodsTemplateName = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyGoodsTemplateName() {
+        return this.goodsTemplateName == null || this.goodsTemplateName.length() == 0;
+    }
+
+    public Long getBaseGoodsModelsId() {
+        return this.baseGoodsModelsId;
+    }
+
+    public void setBaseGoodsModelsId(Long baseGoodsModelsId) {
+        this.baseGoodsModelsId = baseGoodsModelsId;
+        this.isset_baseGoodsModelsId = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyBaseGoodsModelsId() {
+        return this.baseGoodsModelsId == null;
+    }
+
+    public String getBaseGoodsModelsName() {
+        return this.baseGoodsModelsName;
+    }
+
+    public void setBaseGoodsModelsName(String baseGoodsModelsName) {
+        this.baseGoodsModelsName = baseGoodsModelsName;
+        this.isset_baseGoodsModelsName = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyBaseGoodsModelsName() {
+        return this.baseGoodsModelsName == null || this.baseGoodsModelsName.length() == 0;
+    }
+
+    public Integer getWhCount() {
+        return this.whCount;
+    }
+
+    public void setWhCount(Integer whCount) {
+        this.whCount = whCount;
+        this.isset_whCount = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyWhCount() {
+        return this.whCount == null;
+    }
+
+    public Integer getTransferCount() {
+        return this.transferCount;
+    }
+
+    public void setTransferCount(Integer transferCount) {
+        this.transferCount = transferCount;
+        this.isset_transferCount = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyTransferCount() {
+        return this.transferCount == null;
+    }
+
+    public Integer getAllCount() {
+        return this.allCount;
+    }
+
+    public void setAllCount(Integer allCount) {
+        this.allCount = allCount;
+        this.isset_allCount = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyAllCount() {
+        return this.allCount == null;
+    }
+
+    public String getFirstInputCode() {
+        return this.firstInputCode;
+    }
+
+    public void setFirstInputCode(String firstInputCode) {
+        this.firstInputCode = firstInputCode;
+        this.isset_firstInputCode = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyFirstInputCode() {
+        return this.firstInputCode == null || this.firstInputCode.length() == 0;
+    }
+
+    public Integer getFirstInputType() {
+        return this.firstInputType;
+    }
+
+    public void setFirstInputType(Integer firstInputType) {
+        this.firstInputType = firstInputType;
+        this.isset_firstInputType = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyFirstInputType() {
+        return this.firstInputType == null;
+    }
+
+    public Long getFirstInputHisId() {
+        return this.firstInputHisId;
+    }
+
+    public void setFirstInputHisId(Long firstInputHisId) {
+        this.firstInputHisId = firstInputHisId;
+        this.isset_firstInputHisId = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyFirstInputHisId() {
+        return this.firstInputHisId == null;
+    }
+
+    public Long getWarehouseId() {
+        return this.warehouseId;
+    }
+
+    public void setWarehouseId(Long warehouseId) {
+        this.warehouseId = warehouseId;
+        this.isset_warehouseId = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyWarehouseId() {
+        return this.warehouseId == null;
+    }
+
+    public String getWarehouseName() {
+        return this.warehouseName;
+    }
+
+    public void setWarehouseName(String warehouseName) {
+        this.warehouseName = warehouseName;
+        this.isset_warehouseName = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyWarehouseName() {
+        return this.warehouseName == null || this.warehouseName.length() == 0;
+    }
+
+    public String getSupplier() {
+        return this.supplier;
+    }
+
+    public void setSupplier(String supplier) {
+        this.supplier = supplier;
+        this.isset_supplier = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptySupplier() {
+        return this.supplier == null || this.supplier.length() == 0;
+    }
+
+    public String getUnit() {
+        return this.unit;
+    }
+
+    public void setUnit(String unit) {
+        this.unit = unit;
+        this.isset_unit = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyUnit() {
+        return this.unit == null || this.unit.length() == 0;
+    }
+
+    public Double getPrice() {
+        return this.price;
+    }
+
+    public void setPrice(Double price) {
+        this.price = price;
+        this.isset_price = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyPrice() {
+        return this.price == null;
+    }
+
+    public Long getProcureDate() {
+        return this.procureDate;
+    }
+
+    public void setProcureDate(Long procureDate) {
+        this.procureDate = procureDate;
+        this.isset_procureDate = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyProcureDate() {
+        return this.procureDate == null;
+    }
+
+    public Long getBackDate() {
+        return this.backDate;
+    }
+
+    public void setBackDate(Long backDate) {
+        this.backDate = backDate;
+        this.isset_backDate = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyBackDate() {
+        return this.backDate == null;
+    }
+
+    public Integer getStates() {
+        return this.states;
+    }
+
+    public void setStates(Integer states) {
+        this.states = states;
+        this.isset_states = true;
+    }
+
+    @JsonIgnore
+    public boolean isEmptyStates() {
+        return this.states == null;
+    }
+
+    /**
+     * 閲嶅啓 toString() 鏂规硶
+     */
+    @Override
+    public String toString() {
+        return new StringBuilder()
+                .append("id=").append(this.id)
+                .append("baseGoodsTemplateId=").append(this.baseGoodsTemplateId)
+                .append("goodsTemplateName=").append(this.goodsTemplateName)
+                .append("baseGoodsModelsId=").append(this.baseGoodsModelsId)
+                .append("baseGoodsModelsName=").append(this.baseGoodsModelsName)
+                .append("whCount=").append(this.whCount)
+                .append("transferCount=").append(this.transferCount)
+                .append("allCount=").append(this.allCount)
+                .append("firstInputCode=").append(this.firstInputCode)
+                .append("firstInputType=").append(this.firstInputType)
+                .append("firstInputHisId=").append(this.firstInputHisId)
+                .append("warehouseId=").append(this.warehouseId)
+                .append("warehouseName=").append(this.warehouseName)
+                .append("supplier=").append(this.supplier)
+                .append("unit=").append(this.unit)
+                .append("price=").append(this.price)
+                .append("procureDate=").append(this.procureDate)
+                .append("backDate=").append(this.backDate)
+                .append("states=").append(this.states)
+                .toString();
+    }
+
+    /**
+     * 鍏嬮殕
+     */
+    public WhGoods $clone() {
+        WhGoods wh_goods = new WhGoods();
+
+        // 鏁版嵁搴撳悕绉�
+        //wh_goods.setDatabaseName_(this.getDatabaseName_());
+
+        // 涓婚敭
+        if (this.isset_id) {
+            wh_goods.setId(this.getId());
+        }
+        // 鏅�氬睘鎬�
+        if (this.isset_baseGoodsTemplateId) {
+            wh_goods.setBaseGoodsTemplateId(this.getBaseGoodsTemplateId());
+        }
+        if (this.isset_goodsTemplateName) {
+            wh_goods.setGoodsTemplateName(this.getGoodsTemplateName());
+        }
+        if (this.isset_baseGoodsModelsId) {
+            wh_goods.setBaseGoodsModelsId(this.getBaseGoodsModelsId());
+        }
+        if (this.isset_baseGoodsModelsName) {
+            wh_goods.setBaseGoodsModelsName(this.getBaseGoodsModelsName());
+        }
+        if (this.isset_whCount) {
+            wh_goods.setWhCount(this.getWhCount());
+        }
+        if (this.isset_transferCount) {
+            wh_goods.setTransferCount(this.getTransferCount());
+        }
+        if (this.isset_allCount) {
+            wh_goods.setAllCount(this.getAllCount());
+        }
+        if (this.isset_firstInputCode) {
+            wh_goods.setFirstInputCode(this.getFirstInputCode());
+        }
+        if (this.isset_firstInputType) {
+            wh_goods.setFirstInputType(this.getFirstInputType());
+        }
+        if (this.isset_firstInputHisId) {
+            wh_goods.setFirstInputHisId(this.getFirstInputHisId());
+        }
+        if (this.isset_warehouseId) {
+            wh_goods.setWarehouseId(this.getWarehouseId());
+        }
+        if (this.isset_warehouseName) {
+            wh_goods.setWarehouseName(this.getWarehouseName());
+        }
+        if (this.isset_supplier) {
+            wh_goods.setSupplier(this.getSupplier());
+        }
+        if (this.isset_unit) {
+            wh_goods.setUnit(this.getUnit());
+        }
+        if (this.isset_price) {
+            wh_goods.setPrice(this.getPrice());
+        }
+        if (this.isset_procureDate) {
+            wh_goods.setProcureDate(this.getProcureDate());
+        }
+        if (this.isset_backDate) {
+            wh_goods.setBackDate(this.getBackDate());
+        }
+        if (this.isset_states) {
+            wh_goods.setStates(this.getStates());
+        }
+        return wh_goods;
+    }
+}
diff --git a/consum-model-pojo/src/main/java/com/consum/model/po/WhGoods_mapper.java b/consum-model-pojo/src/main/java/com/consum/model/po/WhGoods_mapper.java
new file mode 100644
index 0000000..4807789
--- /dev/null
+++ b/consum-model-pojo/src/main/java/com/consum/model/po/WhGoods_mapper.java
@@ -0,0 +1,473 @@
+package com.consum.model.po;
+
+import com.walker.jdbc.BaseMapper;
+import com.walker.jdbc.ResultSetUtils;
+import com.walker.jdbc.SqlAndParameters;
+import com.walker.jdbc.sqlgen.DeleteBuilder;
+import com.walker.jdbc.sqlgen.InsertBuilder;
+import com.walker.jdbc.sqlgen.SelectBuilder;
+import com.walker.jdbc.sqlgen.UpdateBuilder;
+import com.walker.jdbc.util.StringUtils;
+
+import org.springframework.jdbc.core.RowMapper;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Map;
+
+/**
+ * 琛ㄥ悕:WH_GOODS *
+ * @author genrator
+ */
+public class WhGoods_mapper extends WhGoods implements BaseMapper<WhGoods> {
+    // 搴忓垪鍖栫増鏈彿
+    private static final long serialVersionUID = 1L;
+
+    public static final RowMapper<WhGoods> ROW_MAPPER = new WhGoodsRowMapper();
+
+    // 涓婚敭
+    public static final String Id = "id";
+    // 鏅�氬睘鎬�
+    public static final String BaseGoodsTemplateId = "base_goods_template_id";
+    public static final String GoodsTemplateName = "goods_template_name";
+    public static final String BaseGoodsModelsId = "base_goods_models_id";
+    public static final String BaseGoodsModelsName = "base_goods_models_name";
+    public static final String WhCount = "wh_count";
+    public static final String TransferCount = "transfer_count";
+    public static final String AllCount = "all_count";
+    public static final String FirstInputCode = "first_input_code";
+    public static final String FirstInputType = "first_input_type";
+    public static final String FirstInputHisId = "first_input_his_id";
+    public static final String WarehouseId = "warehouse_id";
+    public static final String WarehouseName = "warehouse_name";
+    public static final String Supplier = "supplier";
+    public static final String Unit = "unit";
+    public static final String Price = "price";
+    public static final String ProcureDate = "procure_date";
+    public static final String BackDate = "back_date";
+    public static final String States = "states";
+
+    /**
+     * 榛樿鏋勯�犲嚱鏁�
+     */
+    public WhGoods_mapper(WhGoods whGoods) {
+        if (whGoods == null) {
+            throw new IllegalArgumentException("po鍙傛暟涓嶅厑璁镐负绌猴紒");
+        }
+        //涓婚敭
+        if (whGoods.isset_id) {
+            this.setId(whGoods.getId());
+        }
+        //鏅�氬睘鎬�
+        if (whGoods.isset_baseGoodsTemplateId) {
+            this.setBaseGoodsTemplateId(whGoods.getBaseGoodsTemplateId());
+        }
+        if (whGoods.isset_goodsTemplateName) {
+            this.setGoodsTemplateName(whGoods.getGoodsTemplateName());
+        }
+        if (whGoods.isset_baseGoodsModelsId) {
+            this.setBaseGoodsModelsId(whGoods.getBaseGoodsModelsId());
+        }
+        if (whGoods.isset_baseGoodsModelsName) {
+            this.setBaseGoodsModelsName(whGoods.getBaseGoodsModelsName());
+        }
+        if (whGoods.isset_whCount) {
+            this.setWhCount(whGoods.getWhCount());
+        }
+        if (whGoods.isset_transferCount) {
+            this.setTransferCount(whGoods.getTransferCount());
+        }
+        if (whGoods.isset_allCount) {
+            this.setAllCount(whGoods.getAllCount());
+        }
+        if (whGoods.isset_firstInputCode) {
+            this.setFirstInputCode(whGoods.getFirstInputCode());
+        }
+        if (whGoods.isset_firstInputType) {
+            this.setFirstInputType(whGoods.getFirstInputType());
+        }
+        if (whGoods.isset_firstInputHisId) {
+            this.setFirstInputHisId(whGoods.getFirstInputHisId());
+        }
+        if (whGoods.isset_warehouseId) {
+            this.setWarehouseId(whGoods.getWarehouseId());
+        }
+        if (whGoods.isset_warehouseName) {
+            this.setWarehouseName(whGoods.getWarehouseName());
+        }
+        if (whGoods.isset_supplier) {
+            this.setSupplier(whGoods.getSupplier());
+        }
+        if (whGoods.isset_unit) {
+            this.setUnit(whGoods.getUnit());
+        }
+        if (whGoods.isset_price) {
+            this.setPrice(whGoods.getPrice());
+        }
+        if (whGoods.isset_procureDate) {
+            this.setProcureDate(whGoods.getProcureDate());
+        }
+        if (whGoods.isset_backDate) {
+            this.setBackDate(whGoods.getBackDate());
+        }
+        if (whGoods.isset_states) {
+            this.setStates(whGoods.getStates());
+        }
+        // 鍘绘帀锛�2022-09-07
+        // this.setDatabaseName_(wh_goods.getDatabaseName_());
+    }
+
+    /**
+     * 鑾峰彇琛ㄥ悕
+     */
+    @Override
+    public String getTableName_() {
+        String tableName = "wh_goods";
+        /**
+        if (StringUtils.isNotEmpty(this.getDatabaseName_())) {
+            return this.getDatabaseName_() + "." + tableName;
+        } else {
+            return tableName;
+        }
+        */
+        return tableName;
+    }
+
+    /**
+     * 鑾峰彇涓婚敭鍚嶇О
+     */
+    @Override
+    public String getPkName_() {
+        return Id;
+    }
+
+    /**
+     * 鑾峰彇涓婚敭鍊�
+     */
+    @Override
+    public Object getPkValue_() {
+        return this.getId();
+    }
+
+    /**
+     * 鑾峰彇鎻掑叆璇彞鍜屽弬鏁�
+     */
+    @Override
+    public SqlAndParameters<Map<String, Object>> getInsertSql_() {
+        InsertBuilder ib = new InsertBuilder(this.getTableName_());
+        ib.set(Id, this.getId());
+        ib.set(BaseGoodsTemplateId, this.getBaseGoodsTemplateId(), this.isset_baseGoodsTemplateId);
+        ib.set(GoodsTemplateName, this.getGoodsTemplateName(), this.isset_goodsTemplateName);
+        ib.set(BaseGoodsModelsId, this.getBaseGoodsModelsId(), this.isset_baseGoodsModelsId);
+        ib.set(BaseGoodsModelsName, this.getBaseGoodsModelsName(), this.isset_baseGoodsModelsName);
+        ib.set(WhCount, this.getWhCount(), this.isset_whCount);
+        ib.set(TransferCount, this.getTransferCount(), this.isset_transferCount);
+        ib.set(AllCount, this.getAllCount(), this.isset_allCount);
+        ib.set(FirstInputCode, this.getFirstInputCode(), this.isset_firstInputCode);
+        ib.set(FirstInputType, this.getFirstInputType(), this.isset_firstInputType);
+        ib.set(FirstInputHisId, this.getFirstInputHisId(), this.isset_firstInputHisId);
+        ib.set(WarehouseId, this.getWarehouseId(), this.isset_warehouseId);
+        ib.set(WarehouseName, this.getWarehouseName(), this.isset_warehouseName);
+        ib.set(Supplier, this.getSupplier(), this.isset_supplier);
+        ib.set(Unit, this.getUnit(), this.isset_unit);
+        ib.set(Price, this.getPrice(), this.isset_price);
+        ib.set(ProcureDate, this.getProcureDate(), this.isset_procureDate);
+        ib.set(BackDate, this.getBackDate(), this.isset_backDate);
+        ib.set(States, this.getStates(), this.isset_states);
+        return ib.genMapSql();
+    }
+
+    /**
+     * 鑾峰彇鏇存柊璇彞鍜屽弬鏁�
+     */
+    @Override
+    public SqlAndParameters<Map<String, Object>> getUpdateSql_() {
+        UpdateBuilder ub = new UpdateBuilder(this.getTableName_());
+        ub.set(BaseGoodsTemplateId, this.getBaseGoodsTemplateId(), this.isset_baseGoodsTemplateId);
+        ub.set(GoodsTemplateName, this.getGoodsTemplateName(), this.isset_goodsTemplateName);
+        ub.set(BaseGoodsModelsId, this.getBaseGoodsModelsId(), this.isset_baseGoodsModelsId);
+        ub.set(BaseGoodsModelsName, this.getBaseGoodsModelsName(), this.isset_baseGoodsModelsName);
+        ub.set(WhCount, this.getWhCount(), this.isset_whCount);
+        ub.set(TransferCount, this.getTransferCount(), this.isset_transferCount);
+        ub.set(AllCount, this.getAllCount(), this.isset_allCount);
+        ub.set(FirstInputCode, this.getFirstInputCode(), this.isset_firstInputCode);
+        ub.set(FirstInputType, this.getFirstInputType(), this.isset_firstInputType);
+        ub.set(FirstInputHisId, this.getFirstInputHisId(), this.isset_firstInputHisId);
+        ub.set(WarehouseId, this.getWarehouseId(), this.isset_warehouseId);
+        ub.set(WarehouseName, this.getWarehouseName(), this.isset_warehouseName);
+        ub.set(Supplier, this.getSupplier(), this.isset_supplier);
+        ub.set(Unit, this.getUnit(), this.isset_unit);
+        ub.set(Price, this.getPrice(), this.isset_price);
+        ub.set(ProcureDate, this.getProcureDate(), this.isset_procureDate);
+        ub.set(BackDate, this.getBackDate(), this.isset_backDate);
+        ub.set(States, this.getStates(), this.isset_states);
+        ub.where(this.getPkName_(), this.getPkValue_());
+        return ub.genMapSql();
+    }
+
+    /**
+     * 鑾峰彇鏇存柊璇彞鍜屽弬鏁�
+     */
+    @Override
+    public SqlAndParameters<Map<String, Object>> getUpdateSql_(String where, Map<String, Object> parameters) {
+        UpdateBuilder ub = new UpdateBuilder(this.getTableName_());
+        ub.set(BaseGoodsTemplateId, this.getBaseGoodsTemplateId(), this.isset_baseGoodsTemplateId);
+        ub.set(GoodsTemplateName, this.getGoodsTemplateName(), this.isset_goodsTemplateName);
+        ub.set(BaseGoodsModelsId, this.getBaseGoodsModelsId(), this.isset_baseGoodsModelsId);
+        ub.set(BaseGoodsModelsName, this.getBaseGoodsModelsName(), this.isset_baseGoodsModelsName);
+        ub.set(WhCount, this.getWhCount(), this.isset_whCount);
+        ub.set(TransferCount, this.getTransferCount(), this.isset_transferCount);
+        ub.set(AllCount, this.getAllCount(), this.isset_allCount);
+        ub.set(FirstInputCode, this.getFirstInputCode(), this.isset_firstInputCode);
+        ub.set(FirstInputType, this.getFirstInputType(), this.isset_firstInputType);
+        ub.set(FirstInputHisId, this.getFirstInputHisId(), this.isset_firstInputHisId);
+        ub.set(WarehouseId, this.getWarehouseId(), this.isset_warehouseId);
+        ub.set(WarehouseName, this.getWarehouseName(), this.isset_warehouseName);
+        ub.set(Supplier, this.getSupplier(), this.isset_supplier);
+        ub.set(Unit, this.getUnit(), this.isset_unit);
+        ub.set(Price, this.getPrice(), this.isset_price);
+        ub.set(ProcureDate, this.getProcureDate(), this.isset_procureDate);
+        ub.set(BackDate, this.getBackDate(), this.isset_backDate);
+        ub.set(States, this.getStates(), this.isset_states);
+        return ub.genMapSql(where, parameters);
+    }
+
+    /**
+     * 鑾峰彇鏇存柊璇彞鍜屽弬鏁�
+     */
+    @Override
+    public SqlAndParameters<Object[]> getUpdateSql_(String where, Object[] parameters) {
+        UpdateBuilder ub = new UpdateBuilder(this.getTableName_());
+        ub.set(BaseGoodsTemplateId, this.getBaseGoodsTemplateId(), this.isset_baseGoodsTemplateId);
+        ub.set(GoodsTemplateName, this.getGoodsTemplateName(), this.isset_goodsTemplateName);
+        ub.set(BaseGoodsModelsId, this.getBaseGoodsModelsId(), this.isset_baseGoodsModelsId);
+        ub.set(BaseGoodsModelsName, this.getBaseGoodsModelsName(), this.isset_baseGoodsModelsName);
+        ub.set(WhCount, this.getWhCount(), this.isset_whCount);
+        ub.set(TransferCount, this.getTransferCount(), this.isset_transferCount);
+        ub.set(AllCount, this.getAllCount(), this.isset_allCount);
+        ub.set(FirstInputCode, this.getFirstInputCode(), this.isset_firstInputCode);
+        ub.set(FirstInputType, this.getFirstInputType(), this.isset_firstInputType);
+        ub.set(FirstInputHisId, this.getFirstInputHisId(), this.isset_firstInputHisId);
+        ub.set(WarehouseId, this.getWarehouseId(), this.isset_warehouseId);
+        ub.set(WarehouseName, this.getWarehouseName(), this.isset_warehouseName);
+        ub.set(Supplier, this.getSupplier(), this.isset_supplier);
+        ub.set(Unit, this.getUnit(), this.isset_unit);
+        ub.set(Price, this.getPrice(), this.isset_price);
+        ub.set(ProcureDate, this.getProcureDate(), this.isset_procureDate);
+        ub.set(BackDate, this.getBackDate(), this.isset_backDate);
+        ub.set(States, this.getStates(), this.isset_states);
+        return ub.genArraySql(where, parameters);
+    }
+
+    /**
+     * 鑾峰彇鍒犻櫎璇彞鍜屽弬鏁�
+     */
+    @Override
+    public SqlAndParameters<Map<String, Object>> getDeleteSql_() {
+        DeleteBuilder db = new DeleteBuilder(this.getTableName_());
+        db.where(this.getPkName_(), this.getPkValue_());
+        return db.genMapSql();
+    }
+
+    /**
+     * 鑾峰彇鍒犻櫎璇彞鍜屽弬鏁�
+     */
+    @Override
+    public SqlAndParameters<Map<String, Object>> getDeleteSql_(String where, Map<String, Object> parameters) {
+        DeleteBuilder db = new DeleteBuilder(this.getTableName_());
+        return db.genMapSql(where, parameters);
+    }
+
+    /**
+     * 鑾峰彇鍒犻櫎璇彞鍜屽弬鏁�
+     */
+    @Override
+    public SqlAndParameters<Object[]> getDeleteSql_(String where, Object[] parameters) {
+        DeleteBuilder db = new DeleteBuilder(this.getTableName_());
+        return db.genArraySql(where, parameters);
+    }
+
+    /**
+     * 鑾峰彇鍗曡鏌ヨ璇彞鍜屽弬鏁�
+     */
+    @Override
+    public SqlAndParameters<Map<String, Object>> getSingleSql_() {
+        SelectBuilder sb = new SelectBuilder(this.getTableName_());
+        sb.where(this.getPkName_(), this.getPkValue_());
+        return sb.genMapSql();
+    }
+
+
+    /**
+     * 鑾峰彇鏌ヨ璇彞鍜屽弬鏁�
+     */
+    @Override
+    public SqlAndParameters<Map<String, Object>> getSelectSql_(String where, Map<String, Object> parameters) {
+        return new SqlAndParameters<>("select id, base_goods_template_id, goods_template_name, base_goods_models_id, base_goods_models_name, wh_count, transfer_count, all_count, first_input_code, first_input_type, first_input_his_id, warehouse_id, warehouse_name, supplier, unit, price, procure_date, back_date, states from " + this.getTableName_() + " " + where, parameters);
+    }
+
+    /**
+     * 鑾峰彇鏌ヨ璇彞鍜屽弬鏁�
+     */
+    @Override
+    public SqlAndParameters<Object[]> getSelectSql_(String where, Object[] parameters) {
+        return new SqlAndParameters<>("select id, base_goods_template_id, goods_template_name, base_goods_models_id, base_goods_models_name, wh_count, transfer_count, all_count, first_input_code, first_input_type, first_input_his_id, warehouse_id, warehouse_name, supplier, unit, price, procure_date, back_date, states from " + this.getTableName_() + " " + where, parameters);
+    }
+
+    /**
+     * 灏唕esultset鐨勪竴琛岃浆鍖栦负po
+     */
+    @Override
+    public WhGoods mapRow(ResultSet rs, int i) throws SQLException {
+        return ROW_MAPPER.mapRow(rs, i);
+    }
+
+    /**
+     * 鍏嬮殕
+     */
+    public WhGoods toWhGoods() {
+        return super.$clone();
+    }
+}
+
+/**
+ * wh_goods RowMapper
+ *
+ * @author genrator
+ */
+class WhGoodsRowMapper implements RowMapper<WhGoods> {
+
+    @Override
+    public WhGoods mapRow(ResultSet rs, int i) throws SQLException {
+        ResultSetUtils resultSetUtils = new ResultSetUtils();
+        WhGoods wh_goods = new WhGoods();
+        Integer columnIndex;
+        //涓婚敭
+        columnIndex = resultSetUtils.findColumn(rs, WhGoods_mapper.Id);
+        if (columnIndex > 0) {
+            wh_goods.setId(rs.getLong(columnIndex));
+        }
+        //鏅�氬睘鎬�
+        columnIndex = resultSetUtils.findColumn(rs, WhGoods_mapper.BaseGoodsTemplateId);
+        if (columnIndex > 0) {
+            if (rs.getBigDecimal(columnIndex) == null) {
+                wh_goods.setBaseGoodsTemplateId(null);
+            } else {
+                wh_goods.setBaseGoodsTemplateId(rs.getLong(columnIndex));
+            }
+        }
+        columnIndex = resultSetUtils.findColumn(rs, WhGoods_mapper.GoodsTemplateName);
+        if (columnIndex > 0) {
+            wh_goods.setGoodsTemplateName(rs.getString(columnIndex));
+        }
+        columnIndex = resultSetUtils.findColumn(rs, WhGoods_mapper.BaseGoodsModelsId);
+        if (columnIndex > 0) {
+            if (rs.getBigDecimal(columnIndex) == null) {
+                wh_goods.setBaseGoodsModelsId(null);
+            } else {
+                wh_goods.setBaseGoodsModelsId(rs.getLong(columnIndex));
+            }
+        }
+        columnIndex = resultSetUtils.findColumn(rs, WhGoods_mapper.BaseGoodsModelsName);
+        if (columnIndex > 0) {
+            wh_goods.setBaseGoodsModelsName(rs.getString(columnIndex));
+        }
+        columnIndex = resultSetUtils.findColumn(rs, WhGoods_mapper.WhCount);
+        if (columnIndex > 0) {
+            if (rs.getBigDecimal(columnIndex) == null) {
+                wh_goods.setWhCount(null);
+            } else {
+                wh_goods.setWhCount(rs.getInt(columnIndex));
+            }
+        }
+        columnIndex = resultSetUtils.findColumn(rs, WhGoods_mapper.TransferCount);
+        if (columnIndex > 0) {
+            if (rs.getBigDecimal(columnIndex) == null) {
+                wh_goods.setTransferCount(null);
+            } else {
+                wh_goods.setTransferCount(rs.getInt(columnIndex));
+            }
+        }
+        columnIndex = resultSetUtils.findColumn(rs, WhGoods_mapper.AllCount);
+        if (columnIndex > 0) {
+            if (rs.getBigDecimal(columnIndex) == null) {
+                wh_goods.setAllCount(null);
+            } else {
+                wh_goods.setAllCount(rs.getInt(columnIndex));
+            }
+        }
+        columnIndex = resultSetUtils.findColumn(rs, WhGoods_mapper.FirstInputCode);
+        if (columnIndex > 0) {
+            wh_goods.setFirstInputCode(rs.getString(columnIndex));
+        }
+        columnIndex = resultSetUtils.findColumn(rs, WhGoods_mapper.FirstInputType);
+        if (columnIndex > 0) {
+            if (rs.getBigDecimal(columnIndex) == null) {
+                wh_goods.setFirstInputType(null);
+            } else {
+                wh_goods.setFirstInputType(rs.getInt(columnIndex));
+            }
+        }
+        columnIndex = resultSetUtils.findColumn(rs, WhGoods_mapper.FirstInputHisId);
+        if (columnIndex > 0) {
+            if (rs.getBigDecimal(columnIndex) == null) {
+                wh_goods.setFirstInputHisId(null);
+            } else {
+                wh_goods.setFirstInputHisId(rs.getLong(columnIndex));
+            }
+        }
+        columnIndex = resultSetUtils.findColumn(rs, WhGoods_mapper.WarehouseId);
+        if (columnIndex > 0) {
+            if (rs.getBigDecimal(columnIndex) == null) {
+                wh_goods.setWarehouseId(null);
+            } else {
+                wh_goods.setWarehouseId(rs.getLong(columnIndex));
+            }
+        }
+        columnIndex = resultSetUtils.findColumn(rs, WhGoods_mapper.WarehouseName);
+        if (columnIndex > 0) {
+            wh_goods.setWarehouseName(rs.getString(columnIndex));
+        }
+        columnIndex = resultSetUtils.findColumn(rs, WhGoods_mapper.Supplier);
+        if (columnIndex > 0) {
+            wh_goods.setSupplier(rs.getString(columnIndex));
+        }
+        columnIndex = resultSetUtils.findColumn(rs, WhGoods_mapper.Unit);
+        if (columnIndex > 0) {
+            wh_goods.setUnit(rs.getString(columnIndex));
+        }
+        columnIndex = resultSetUtils.findColumn(rs, WhGoods_mapper.Price);
+        if (columnIndex > 0) {
+            if (rs.getBigDecimal(columnIndex) == null) {
+                wh_goods.setPrice(null);
+            } else {
+                wh_goods.setPrice(rs.getDouble(columnIndex));
+            }
+        }
+        columnIndex = resultSetUtils.findColumn(rs, WhGoods_mapper.ProcureDate);
+        if (columnIndex > 0) {
+            if (rs.getBigDecimal(columnIndex) == null) {
+                wh_goods.setProcureDate(null);
+            } else {
+                wh_goods.setProcureDate(rs.getLong(columnIndex));
+            }
+        }
+        columnIndex = resultSetUtils.findColumn(rs, WhGoods_mapper.BackDate);
+        if (columnIndex > 0) {
+            if (rs.getBigDecimal(columnIndex) == null) {
+                wh_goods.setBackDate(null);
+            } else {
+                wh_goods.setBackDate(rs.getLong(columnIndex));
+            }
+        }
+        columnIndex = resultSetUtils.findColumn(rs, WhGoods_mapper.States);
+        if (columnIndex > 0) {
+            if (rs.getBigDecimal(columnIndex) == null) {
+                wh_goods.setStates(null);
+            } else {
+                wh_goods.setStates(rs.getInt(columnIndex));
+            }
+        }
+        return wh_goods;
+    }
+}
diff --git a/deploy-jar-single/pom.xml b/deploy-jar-single/pom.xml
new file mode 100644
index 0000000..fb8187a
--- /dev/null
+++ b/deploy-jar-single/pom.xml
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>com.consum</groupId>
+        <artifactId>low-consum-manage</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>deploy-jar-single</artifactId>
+    <name>deploy-jar-single</name>
+    <packaging>jar</packaging>
+
+    <properties>
+        <es.version>7.14.0</es.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.consum</groupId>
+            <artifactId>consum-base</artifactId>
+            <version>1.0.0-SNAPSHOT</version>
+        </dependency>
+
+        <!-- 閫氳繃鐣岄潰涓嬭浇po鐢熸垚鏂囦欢锛�2023/03/16 -->
+        <dependency>
+            <groupId>com.iplatform</groupId>
+            <artifactId>iplatform-jdbc-generator</artifactId>
+        </dependency>
+
+        <!-- 闃块噷druid鏁版嵁搴撹繛鎺ユ睜锛屽鏋滀娇鐢ㄧ洿鎺ュ紩鍏ュ埌涓氬姟鍙戝竷妯″潡涓紝2023-03-15 -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid</artifactId>
+        </dependency>
+
+        <!-- 濡傛灉浣跨敤Redis缂撳瓨锛屽垯寮曞叆鏀寔妯″潡 -->
+        <dependency>
+            <groupId>com.walkersoft</groupId>
+            <artifactId>walker-support-redis</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.walkersoft</groupId>
+                    <artifactId>walker-cache</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-autoconfigure</artifactId>
+        </dependency>
+
+        <!--        &lt;!&ndash; 2023-06-25 浣跨敤Oracle鏁版嵁搴撻渶瑕侀厤缃紝涓嶉渶瑕佺洿鎺ユ敞閲婂嵆鍙�� &ndash;&gt;-->
+<!--        <dependency>-->
+<!--            <groupId>com.walkersoft</groupId>-->
+<!--            <artifactId>walker-jdbc-support-oracle</artifactId>-->
+<!--        </dependency>-->
+
+        <!-- elastic search 闇�瑕佸崟鐙紩鍏ユā鍧�, 2023/07/31 -->
+<!--        <dependency>-->
+<!--            <groupId>org.springframework.boot</groupId>-->
+<!--            <artifactId>spring-boot-starter-web</artifactId>-->
+<!--            <exclusions>-->
+<!--                <exclusion>-->
+<!--                    <groupId>org.elasticsearch.client</groupId>-->
+<!--                    <artifactId>elasticsearch-rest-high-level-client</artifactId>-->
+<!--                </exclusion>-->
+<!--                <exclusion>-->
+<!--                    <groupId>org.elasticsearch</groupId>-->
+<!--                    <artifactId>elasticsearch</artifactId>-->
+<!--                </exclusion>-->
+<!--            </exclusions>-->
+<!--        </dependency>-->
+
+        <!-- 2023-08-07 涓虹幇鍦鸿皟璇曪紝鏆傛椂鍏抽棴妫�绱㈡ā鍧� -->
+<!--        <dependency>-->
+<!--            <groupId>org.elasticsearch.client</groupId>-->
+<!--            <artifactId>elasticsearch-rest-high-level-client</artifactId>-->
+<!--            <version>${es.version}</version>-->
+<!--        </dependency>-->
+<!--        <dependency>-->
+<!--            <groupId>org.elasticsearch</groupId>-->
+<!--            <artifactId>elasticsearch</artifactId>-->
+<!--            <version>${es.version}</version>-->
+<!--        </dependency>-->
+
+<!--        &lt;!&ndash; 绉湪鎶ヨ〃鍔熻兘锛岄渶瑕佷娇鐢ㄦ墦寮�娉ㄩ噴鍗冲彲锛�2023-08-24 &ndash;&gt;-->
+<!--        <dependency>-->
+<!--            <groupId>com.iplatform</groupId>-->
+<!--            <artifactId>iplatform-report</artifactId>-->
+<!--        </dependency>-->
+
+    </dependencies>
+
+    <build>
+        <finalName>low-consum-manage</finalName>
+        <plugins>
+            <plugin>
+                <!--鑳藉鑷姩瀵绘壘springboot寮曞绫伙紝鎴栬�呮墜鍔ㄦ寚瀹�-->
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>${spring-boot.version}</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-deploy-plugin</artifactId>
+                <version>${maven-deploy-plugin.version}</version>
+                <executions>
+                    <execution>
+                        <id>default-deploy</id>
+                        <phase>deploy</phase>
+                        <goals>
+                            <goal>deploy</goal>
+                        </goals>
+                        <!-- skip榛樿deploy鎻掍欢鐨勬墽琛� -->
+                        <configuration>
+                            <skip>true</skip>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/deploy-jar-single/src/main/java/com/consum/ConsumApplication.java b/deploy-jar-single/src/main/java/com/consum/ConsumApplication.java
new file mode 100644
index 0000000..9d102d5
--- /dev/null
+++ b/deploy-jar-single/src/main/java/com/consum/ConsumApplication.java
@@ -0,0 +1,23 @@
+package com.consum;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
+import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
+import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
+import org.springframework.context.annotation.Bean;
+
+@SpringBootApplication(scanBasePackages = {"com.walker","com.iplatform", "com.consum"})
+public class ConsumApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(ConsumApplication.class, args);
+    }
+
+    @Bean
+    public ConfigurableServletWebServerFactory webServerFactory() {
+        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
+        factory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> connector.setProperty("relaxedQueryChars", "|{}[]\\"));
+        return factory;
+    }
+}
diff --git a/deploy-jar-single/src/main/java/com/consum/generator/GenerateController.java b/deploy-jar-single/src/main/java/com/consum/generator/GenerateController.java
new file mode 100644
index 0000000..d5ad3b1
--- /dev/null
+++ b/deploy-jar-single/src/main/java/com/consum/generator/GenerateController.java
@@ -0,0 +1,28 @@
+package com.consum.generator;
+
+import com.iplatform.generator.JdbcGeneratorEngine;
+import com.walker.web.ResponseValue;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @ClassName GenerateController
+ * @Author cy
+ * @Date 2023/9/21
+ * @Description 浠g爜鐢熸垚
+ * @Version 1.0
+ **/
+@RestController
+@RequestMapping("/platform/fin")
+public class GenerateController {
+    @Autowired
+    private JdbcGeneratorEngine jdbcGeneratorEngine;
+
+    @GetMapping("/sc")
+    public ResponseValue allocatedList(String tableName) throws Exception {
+        this.jdbcGeneratorEngine.generateOnePoFile(tableName, "d:/tmp/" + tableName + ".zip");
+        return ResponseValue.success();
+    }
+}
diff --git a/deploy-jar-single/src/main/java/com/consum/generator/TestJdbcGenerator.java b/deploy-jar-single/src/main/java/com/consum/generator/TestJdbcGenerator.java
new file mode 100644
index 0000000..9d55a68
--- /dev/null
+++ b/deploy-jar-single/src/main/java/com/consum/generator/TestJdbcGenerator.java
@@ -0,0 +1,24 @@
+package com.consum.generator;
+
+import com.iplatform.generator.JdbcGeneratorEngine;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+@Component
+public class TestJdbcGenerator {
+
+    @Autowired
+    private JdbcGeneratorEngine jdbcGeneratorEngine;
+
+    @PostConstruct
+    public void testGenerate() {
+        System.out.println("~~~~~~~~~~~~~~~ 寮�濮嬬敓鎴愭暟鎹簱浠g爜锛�");
+        try {
+            this.jdbcGeneratorEngine.generatePoFile("ZS_JN_ORG_CS", "po,mapper", "d:/tmp/fin_po.zip");
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+}
diff --git a/deploy-jar-single/src/main/resources/application-dev.yml b/deploy-jar-single/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..edb6712
--- /dev/null
+++ b/deploy-jar-single/src/main/resources/application-dev.yml
@@ -0,0 +1,250 @@
+spring:
+  application:
+    name: projectProgress
+  datasource:
+    # 鏄惁鏄剧ずdao涓墦鍗扮殑SQL璇彞
+    show-sql: true
+# 鏁版嵁搴撻摼鎺�
+    username: root
+    password: Bjjmy_2020
+    url: jdbc:mysql://116.198.40.76:3306/low_consum_manage_dev?useUnicode=true&characterEncoding=UTF-8&useSSL=false
+# Druid杩炴帴姹�
+    type: com.walker.jdbc.ds.MyDruidDataSource
+    druid:
+      initial-size: 5
+      min-idle: 10
+      max-active: 20
+      # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂�
+      max-wait: 60000
+      # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣
+      time-between-eviction-runs-millis: 60000
+      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 瓒呰繃杩欎釜鏃堕棿姣忔浼氬洖鏀堕粯璁�3涓繛鎺�
+      min-evictable-idle-time-millis: 30000
+      # 绾夸笂閰嶇疆鐨刴ysql鏂紑闂茬疆杩炴帴鏃堕棿涓�1灏忔椂,鏁版嵁婧愰厤缃洖鏀舵椂闂翠负3鍒嗛挓,浠ユ渶鍚庝竴娆℃椿璺冩椂闂村紑濮嬬畻
+      max-evictable-idle-time-millis: 180000
+      validation-query: select 1
+      test-while-idle: true
+      test-on-borrow: false
+      test-on-return: false
+      pool-prepared-statements: true
+      max-open-prepared-statements: 100
+      use-global-data-source-stat: true
+# Redis
+  redis:
+    host: 116.198.40.76
+    port: 6379
+    database: 11
+    password: Jmy2019.
+
+  mvc:
+    pathmatch:
+      # 鍔犺閰嶇疆鏄洜涓� swagger3 鍚姩鎶ラ敊锛�2023-02-23
+      matching-strategy: ant_path_matcher
+
+    hiddenmethod:
+      filter:
+        enabled: true # 鍔犱笂璇ラ厤缃彲浠ユ帴鏀�: application/x-www-form-urlencoded璇锋眰鍙傛暟涓哄璞°�傛敮浠橀�氱煡涓娇鐢ㄣ��2023-02-26
+  servlet:
+    multipart:
+      max-file-size: 100MB
+      max-request-size: 300MB
+
+server:
+  port: 8083
+  servlet:
+    context-path: /api
+    session:
+      timeout: 30m
+
+logging:
+  level:
+    # 鍏ㄥ眬杈撳嚭绾у埆 off < trace < debug < info < warn < error < fatal
+    root: info
+    org:
+      springframework: info
+    io.swagger: warn
+    io:
+      netty: info
+    com:
+      walker: debug
+      iplatform: debug
+      progess: debug
+
+  charset:
+    # 鎺у埗鍙扮紪鐮�
+    console: UTF-8
+    # 杈撳嚭鏂囦欢缂栫爜
+    file: UTF-8
+  logback:
+    rollingpolicy:
+      # 鍗曚釜鏂囦欢鏈�澶т负30MB锛岃秴杩囦箣鍚庝細鎵撳寘鎴愪竴涓棩蹇楁枃浠�
+      max-file-size: 30MB
+      # 鏂囦欢淇濆瓨7澶�
+      max-history: 7
+      # 鎵撳寘鏂囦欢鏍煎紡,榛樿锛� ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz,涔﹀啓鏍煎紡涓猴細鏂囦欢璺緞/鏂囦欢鍚�.%i.鏂囦欢鍚庣紑,鍏朵腑%i涓嶅彲鐪佸幓锛屽惁鍒欐棤鏃ュ織鏄剧ず
+      # 渚嬪锛� 鏃ユ湡涓猴細2023/07/13 ,鍒欐墦鍖呮枃浠朵箣鍚庝负锛� log/ota.2023-07-13.0.gz,0琛ㄧず鏃ュ織鐨勭涓�閮ㄥ垎锛屽悗缁氨鏄紝1,2,3...
+      # 濡傛灉鏄帇缂╁寘锛岄噷闈細澶氫竴涓悕log/ota.2023-07-13.0鐨勬棩蹇楁枃浠�
+      # 濡備笅闈㈢殑渚嬪瓙锛屾墦鍖呬箣鍚庝负: log/2023-07/ota.2020-07-13.0.log锛岃繖鏄竴涓棩蹇楁枃浠�
+      file-name-pattern: ${logging.file.path}%d{yyyy-MM}/progess.%d{yyyy-MM-dd}.%i.log
+  file:
+    name: ${logging.file.path}consum.log
+    path: D:/log/
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# 骞冲彴閰嶇疆鏀寔鍔熻兘
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+iplatform:
+
+  # 骞冲彴缂撳瓨锛屾槸鍚﹀惎鐢╮edis缂撳瓨锛岄粯璁や娇鐢ㄥ熀浜庡唴瀛樼紦瀛�.
+  # 娉ㄦ剰锛氬鏋滃紑鍚痳edis缂撳瓨锛屼笟鍔″伐绋嬪繀椤讳緷璧�(walker-support-redis)
+  cache:
+    redis-enabled: true
+    # 鏈烘瀯鐢ㄦ埛鏄惁寰堝簽澶э紝濡傛灉鏄垯缂撳瓨涓細鍏抽棴鍒濆鍖栧姞杞斤紝鍚屾椂鏈烘瀯鏍戜篃涓嶄細鏀惧叆缂撳瓨锛�2023-07-17
+    org-user-big: true
+
+  # 鐩镐技搴﹀垎鏋愭ā鍧椾娇鐢�(宸插簾寮�)
+#  similarity:
+#    # 鏄惁鍚敤鐩镐技搴︽ā鍧楋紝濡傛灉绂佺敤鍒欒纭繚娉ㄥ叆鏃舵敮鎸佷负绌�
+#    enabled: false
+#    milvus-host: 172.16.60.65
+#    milvus-port: 19530
+#    word-file: d:/dev_tools/ai/w2v_sogou_dim300_vocab.txt
+#    embedding-file: d:/dev_tools/ai/w2v_sogou_dim300.npy
+
+  # 璋冨害鍣ㄦā鍧楋紝鏄惁鍚敤
+  scheduler:
+    enabled: false
+    # 鏄惁鏀寔鏁版嵁搴撳瓨鍌ㄤ换鍔�(搴熷純璇ラ厤缃�)
+    database-enabled: false
+
+  # 鏁版嵁閲囬泦妯″潡
+  gather:
+    enabled: false
+
+  # 鏉冮檺鎺у埗鐩稿叧
+  security:
+    # 鍖垮悕鍙闂湴鍧�(寮�鏀惧湴鍧�)
+    anonymous-list:
+      - /file/** # 鏂囦欢涓婁紶
+      - /platform/fin/sc # 涓�閿敓鎴�
+      - /login # 鐧诲綍
+      - /register # 娉ㄥ唽
+      - /captcha/* # 楠岃瘉鐮佺粺
+      - /test/** # 寮�鍙戞祴璇曪紝浠呭紑鍙戞澘鍙敤
+      - /swagger-resources/** # swagger
+      - /swagger-ui/**  # swagger
+      - /v3/**          # swagger
+        # 棰勭畻涓�浣撳寲鐧诲綍瀵规帴锛屽墠绔闂殑鐧诲綍鍦板潃銆�2023-07-03
+      - /system/** # 绯荤粺璁剧疆
+      - /pc/** # PC绔帴鍙�
+      - /wx/** # 寰俊绔帴鍙�
+    # 鍏佽鎵�鏈夎璇佺敤鎴烽兘鍙闂湴鍧�锛岃鎱庨噸鍚﹀垯鏉冮檺閮借繃澶э紝涓�鑸珹PI閮藉簲璇ヨ缃湪杩欓噷
+    permit-list:
+#      - /permit # 鍏敤鏉冮檺锛�2023-03-13锛屽钩鍙颁唬鐮佸凡缁忔坊鍔犺繃浜嗭紝杩欓噷涓嶉渶瑕侀厤缃�
+      - /getInfo
+      - /system/**
+      - /p/**
+      - /getRouters
+      - /getMenus # 鏂扮晫闈㈣彍鍗曪紝2023-05-12
+      - /logout
+#      - /api/**
+
+    # 瓒呯骇绠$悊鍛樺瘑鐮侊紝鍔犲瘑鍚庣殑绉樻枃
+    supervisor-password: $2a$10$9lSwwUFMULR6/KhPsUbTj.0PTZfTnq0fB3OtS6PWoKAibpa8hL1cy
+
+    # 鏄惁鍏佽閰嶇疆璺ㄥ煙鍝嶅簲澶�, true 鍚敤锛� false 涓嶅惎鐢ㄣ��2022-12-28
+    # 鍦℅ateway妯″紡涓紝闇�瑕佸叧闂法鍩熼厤缃紝鍥犱负缃戝叧涔熶細閰嶇疆銆�
+    cors-enabled: true
+
+    # 鐢ㄦ埛鍚嶅瘑鐮佹柟寮忕櫥褰曪紝閰嶇疆鐨勯獙璇佺爜绫诲瀷锛歝ode/sms/slide/jigsaw锛�2023-03-14
+    login-captcha-user-pass: code
+    # 鎵嬫満楠岃瘉鐮佹柟寮忕櫥褰曪紝閰嶇疆鐨勯獙璇佺爜绫诲瀷锛歝ode/sms/slide/jigsaw锛�2023-03-14
+    login-captcha-sms-code: sms
+
+    # 鏄惁鍏佽鍚庡彴鐢ㄦ埛锛堥潪App锛夌櫥褰曟墜鏈虹锛�2023-03-20
+    allow-pc-user-access-app: true
+
+    # PC绔痶oken澶辨晥鍒嗛挓锛岄粯璁わ細120鍒嗛挓锛�2023-03-28
+    token-expire-web: 720
+    # 绉诲姩绔痶oken澶辨晥鍒嗛挓锛�2023-03-28
+    token-expire-mobile: 21600
+
+    # 鐢ㄦ埛浣撶郴锛堢敤鎴峰悕锛夐兘鏄墜鏈哄彿锛�2023-06-28
+    # 涓�鑸郴缁烶C绔�氬父閮戒笉鏄墜鏈哄彿浣滀负鐢ㄦ埛鍚嶏紝鍙湁鍦ㄤ簰鑱旂綉鐩稿叧绯荤粺涓細瀛樺湪鎵嬫満鍙蜂綔涓虹櫥褰曡处鍙�
+    user-name-is-phone: false
+
+    # 2023-07-11 鐧诲綍绛栫暐閰嶇疆锛屽垪琛ㄤ腑瀛樺湪鐨勭瓥鐣ラ兘琛ㄧず鍚敤锛堜笉鍚敤鐨勫垹鎺夛級
+    login-strategy-list:
+#      - com.iplatform.base.support.strategy.WebOnceLoginStrategy
+
+  # 鐢ㄦ埛鐩稿叧瀹夊叏閰嶇疆锛�2023-08-03
+    user:
+      # 鐢ㄦ埛淇敼瀵嗙爜绛夌骇锛屽垎鍥涚骇锛�1-2-3-4锛屽父閲忥細PasswordUtils#
+      pass-level: 4
+      # 鏄惁寮哄埗鐢ㄦ埛淇敼榛樿瀵嗙爜锛�
+      pass-default-modify: true
+
+  # 浠g爜鐢熸垚锛�2022-11-26
+  gen:
+    # 浣滆��
+    author: Mike
+    # 榛樿鐢熸垚鍖呰矾寰� system 闇�鏀规垚鑷繁鐨勬ā鍧楀悕绉� 濡� system monitor tool
+    package-name: com.iplatform.model.po
+    # 鑷姩鍘婚櫎琛ㄥ墠缂�锛岄粯璁ゆ槸false
+    auto-remove-pre: false
+    # 琛ㄥ墠缂�锛堢敓鎴愮被鍚嶄笉浼氬寘鍚〃鍓嶇紑锛屽涓敤閫楀彿鍒嗛殧锛�
+    table-prefix: s_
+
+  log:
+    # 鏄惁鎵撳紑鐧诲綍鏃ュ織锛�2023-01-05
+    # 濡傛灉涓嶆墦寮�锛屽垯璁惧鐧诲綍鐨剈uid鏇存柊鎿嶄綔涔熸棤娉曡幏寰楋紝鐢ㄤ簬璁板綍姣忎釜鐧诲綍鐢ㄦ埛鐨剈uid锛堢敤鎴风櫥褰曡鑹叉洿鏂帮級锛�2023-03-23
+    login-enabled: true
+    # 鏄惁鎵撳紑鎿嶄綔鏃ュ織锛�2023-01-05
+    operate-enabled: false
+
+  # 楠岃瘉鐮佺浉鍏抽厤缃紝2023-01-27
+  captcha:
+    # 鍥惧舰楠岃瘉鐮佸疄鐜扮被, TextCaptchaProvider | DefaultCaptchaProvider
+    image-captcha-class: com.iplatform.base.captcha.TextCaptchaProvider
+    # 鐭俊楠岃瘉鐮佸疄鐜扮被锛堥厤缃簾寮冿紝2023-04-25锛�
+    sms-captcha-class: com.iplatform.base.captcha.MockSmsCaptchaProvider
+
+  # 骞冲彴鏂囦欢瀛樺偍閰嶇疆锛�2023-02-15
+  file:
+    # FileStoreType = FileSystem 鏈湴纾佺洏瀛樺偍鏍硅矾寰�
+    file-root: d:/tmp/
+    ftp:
+      ip: 116.198.40.76
+      port: 22
+      user-name: mysftp
+      password: Bjjmy_2020
+      private-key:
+      # ftp鏈嶅姟涓婇潰鐨勫瓨鍌ㄦ牴璺緞锛屽彧鑳芥槸linux璺緞
+      file-root: /progress/
+
+  # 鎺ュ彛鏂囨。鐢熸垚锛宻wagger3锛�2023-02-23
+  swagger:
+    # 鍖呰矾寰勶紝鏆傛椂涓嶇敤
+    base-package: com.iplatform.base.controller
+    title: 浜戝師鐢熷井鏈嶅姟骞冲彴
+    description: 涓�涓揩閫焪eb寮�鍙戞鏋�
+
+
+  # 鎺ㄩ�佹ā鍧楅厤缃紝2023-04-25
+  push:
+    # 鐭俊鎺ㄩ�佽�呭悕绉帮細mock_sms_push锛堟ā鎷熺煭淇★級锛宎lidy_sms_push锛堥樋閲屽ぇ楸肩煭淇★級
+    sms-push-name: mock_sms_push
+    # 鐭俊楠岃瘉鐮佹ā鏉縄D锛屾牴鎹疄闄呮儏鍐碉紙姣忎釜骞冲彴鍙兘涓嶅悓锛�
+    sms-template-code: template_code
+
+    # 瀵逛簬涓�鑸笟鍔℃彁閱掞紙涓嶅寘鎷細閭欢銆佺煭淇★級锛屾帹閫佺殑鏂瑰紡銆傛帹閫佽�匢D缁勫悎
+    # && 琛ㄧず骞跺垪锛寍| 琛ㄧず鎴栵紙鍙涓�涓垚鍔熷氨OK锛�
+    # 2023-04-26锛屽彲鐢ㄧ殑 id = 'tcp', 'web_socket', 'wx', 'system'
+#    message-type: tcp && web_socket && wx && system
+    # 濡傛灉鏄垨鑰呮柟寮忥紝闇�瑕佹妸鏈�鍙潬鐨勬斁鍓嶉潰锛屽洜涓虹郴缁熶細鎵惧埌绗竴涓彂閫佹垚鍔熷嵆鍙��
+    message-type: system || tcp || web_socket || wx
+
+    # 閭欢閫氱煡鍙戦�佷俊鎭厤缃紝2023-04-26
+    mail-server: smtp.126.com
+    mail-from: hnzzzhsl@126.com
+    mail-password: test
diff --git a/deploy-jar-single/src/main/resources/application-prod.yml b/deploy-jar-single/src/main/resources/application-prod.yml
new file mode 100644
index 0000000..beb37ac
--- /dev/null
+++ b/deploy-jar-single/src/main/resources/application-prod.yml
@@ -0,0 +1,381 @@
+spring:
+  application:
+    name: projectProgress
+  datasource:
+    # 鏄惁鏄剧ずdao涓墦鍗扮殑SQL璇彞
+    show-sql: true
+
+    ##    driver-class-name: sunje.goldilocks.jdbc.GoldilocksDriver
+    # 娉ㄦ剰锛歁ySQL鏈嶅姟绔紝闇�瑕佽皟鏁翠袱涓弬鏁帮紝鍚﹀垯鏈嶅姟绔細涓诲姩鏂紑杩炴帴
+    # wait_timeout: 瓒呰繃鏀规椂闂�(绉�)鏈嶅姟绔富鍔ㄦ柇寮�
+    # interactive_timeout: 瀹㈡埛绔伐鍏蜂氦浜掕秴杩囪繖涓椂闂�(绉�)浼氱鍙o紝琛ㄧ幇涓簄avicat
+
+    # Oracle閰嶇疆锛�2023-06-25
+    #    username: FINANCE_OPS_PROD
+    #    password: FINANCE_OPS_PROD
+    #    driver-class-name: oracle.jdbc.OracleDriver
+    #    url: jdbc:oracle:thin:@10.8.10.2:1521/pdb_YWZC
+    #    username: C##FINANCE_OPS_TEST
+    #    password: FINANCE_OPS_TEST
+    #    driver-class-name: oracle.jdbc.OracleDriver
+    #    url: jdbc:oracle:thin:@116.198.40.76:1521/cdb1
+
+
+    username: root
+    password: Bjjmy_2020
+    url: jdbc:mysql://116.198.40.76:3306/project_progress_manage_dev?useUnicode=true&characterEncoding=UTF-8&useSSL=false
+
+    #    username: root
+    #    password: Bjjmy_2020
+    #    url: jdbc:mysql://116.198.40.76:3306/iplatform?useUnicode=true&characterEncoding=UTF-8&useSSL=false
+
+    # 杈炬ⅵ鏁版嵁搴�
+    #    driver-class-name: dm.jdbc.driver.DmDriver
+    #    username: iplatform
+    #    password: iplatform
+    #    url: jdbc:dm://116.198.39.83:5236?schema=iplatform
+
+    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    # 浣跨敤 Hikari 杩炴帴姹�
+    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    #    type: com.walker.jdbc.ds.DefaultDataSource
+    #    hikari:
+    #      minimum-idle: 5
+    #      idle-timeout: 600000
+    #      pool-name: databasePool_walker
+    #      # 杩炴帴鏈�澶ц秴鏃舵椂闂�
+    #      connection-timeout: 30000
+    #      # 杩炴帴姹犳渶澶ф暟閲�
+    #      maximum-pool-size: 10
+    #      # 鎺у埗姹犱腑杩炴帴鏈�澶х敓瀛樻湡
+    #      # max-lifetime: 70000
+    #      # 姝ゅ睘鎬ф帶鍒舵祴璇曡繛鎺ユ槸鍚︽椿璺冪殑鏈�闀挎椂闂淬�傛鍊煎繀椤诲皬浜� connectionTimeout
+    #      validation-timeout: 10000
+    #      #
+    #      connection-test-query: select 1
+
+    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    # 浣跨敤 Druid 杩炴帴姹�
+    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    type: com.walker.jdbc.ds.MyDruidDataSource
+    druid:
+      initial-size: 5
+      min-idle: 10
+      max-active: 20
+      # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂�
+      max-wait: 60000
+      # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣
+      time-between-eviction-runs-millis: 60000
+      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 瓒呰繃杩欎釜鏃堕棿姣忔浼氬洖鏀堕粯璁�3涓繛鎺�
+      min-evictable-idle-time-millis: 30000
+      # 绾夸笂閰嶇疆鐨刴ysql鏂紑闂茬疆杩炴帴鏃堕棿涓�1灏忔椂,鏁版嵁婧愰厤缃洖鏀舵椂闂翠负3鍒嗛挓,浠ユ渶鍚庝竴娆℃椿璺冩椂闂村紑濮嬬畻
+      max-evictable-idle-time-millis: 180000
+      validation-query: select 1
+      test-while-idle: true
+      test-on-borrow: false
+      test-on-return: false
+      pool-prepared-statements: true
+      max-open-prepared-statements: 100
+      use-global-data-source-stat: true
+
+  #  redis:
+  #    host: 127.0.0.1
+  #    port: 6379
+  #    database: 10
+  #    #password: Jmy2019.
+  redis:
+    host: 116.198.40.76
+    port: 6379
+    database: 11
+    password: Jmy2019.
+
+
+  mvc:
+    pathmatch:
+      # 鍔犺閰嶇疆鏄洜涓� swagger3 鍚姩鎶ラ敊锛�2023-02-23
+      matching-strategy: ant_path_matcher
+
+    hiddenmethod:
+      filter:
+        enabled: true # 鍔犱笂璇ラ厤缃彲浠ユ帴鏀�: application/x-www-form-urlencoded璇锋眰鍙傛暟涓哄璞°�傛敮浠橀�氱煡涓娇鐢ㄣ��2023-02-26
+  servlet:
+    multipart:
+      max-file-size: 100MB
+      max-request-size: 300MB
+
+server:
+  port: 8082
+  servlet:
+    context-path: /progress
+    session:
+      timeout: 30m
+
+logging:
+  level:
+    # 鍏ㄥ眬杈撳嚭绾у埆 off < trace < debug < info < warn < error < fatal
+    root: info
+    org:
+      springframework: info
+    io.swagger: warn
+    io:
+      netty: info
+    com:
+      walker: debug
+      iplatform: debug
+      finance: debug
+      cti: debug
+      robot: error
+
+  charset:
+    # 鎺у埗鍙扮紪鐮�
+    console: UTF-8
+    # 杈撳嚭鏂囦欢缂栫爜
+    file: UTF-8
+  logback:
+    rollingpolicy:
+      # 鍗曚釜鏂囦欢鏈�澶т负30MB锛岃秴杩囦箣鍚庝細鎵撳寘鎴愪竴涓棩蹇楁枃浠�
+      max-file-size: 30MB
+      # 鏂囦欢淇濆瓨7澶�
+      max-history: 7
+      # 鎵撳寘鏂囦欢鏍煎紡,榛樿锛� ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz,涔﹀啓鏍煎紡涓猴細鏂囦欢璺緞/鏂囦欢鍚�.%i.鏂囦欢鍚庣紑,鍏朵腑%i涓嶅彲鐪佸幓锛屽惁鍒欐棤鏃ュ織鏄剧ず
+      # 渚嬪锛� 鏃ユ湡涓猴細2023/07/13 ,鍒欐墦鍖呮枃浠朵箣鍚庝负锛� log/ota.2023-07-13.0.gz,0琛ㄧず鏃ュ織鐨勭涓�閮ㄥ垎锛屽悗缁氨鏄紝1,2,3...
+      # 濡傛灉鏄帇缂╁寘锛岄噷闈細澶氫竴涓悕log/ota.2023-07-13.0鐨勬棩蹇楁枃浠�
+      # 濡備笅闈㈢殑渚嬪瓙锛屾墦鍖呬箣鍚庝负: log/2023-07/ota.2020-07-13.0.log锛岃繖鏄竴涓棩蹇楁枃浠�
+      file-name-pattern: ${logging.file.path}%d{yyyy-MM}/finance.%d{yyyy-MM-dd}.%i.log
+  file:
+    name: ${logging.file.path}finance.log
+    path: D:/log/
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# 骞冲彴閰嶇疆鏀寔鍔熻兘
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+iplatform:
+
+  # 骞冲彴缂撳瓨锛屾槸鍚﹀惎鐢╮edis缂撳瓨锛岄粯璁や娇鐢ㄥ熀浜庡唴瀛樼紦瀛�.
+  # 娉ㄦ剰锛氬鏋滃紑鍚痳edis缂撳瓨锛屼笟鍔″伐绋嬪繀椤讳緷璧�(walker-support-redis)
+  cache:
+    redis-enabled: true
+    # 鏈烘瀯鐢ㄦ埛鏄惁寰堝簽澶э紝濡傛灉鏄垯缂撳瓨涓細鍏抽棴鍒濆鍖栧姞杞斤紝鍚屾椂鏈烘瀯鏍戜篃涓嶄細鏀惧叆缂撳瓨锛�2023-07-17
+    org-user-big: true
+
+  # 鐩镐技搴﹀垎鏋愭ā鍧椾娇鐢�(宸插簾寮�)
+  #  similarity:
+  #    # 鏄惁鍚敤鐩镐技搴︽ā鍧楋紝濡傛灉绂佺敤鍒欒纭繚娉ㄥ叆鏃舵敮鎸佷负绌�
+  #    enabled: false
+  #    milvus-host: 172.16.60.65
+  #    milvus-port: 19530
+  #    word-file: d:/dev_tools/ai/w2v_sogou_dim300_vocab.txt
+  #    embedding-file: d:/dev_tools/ai/w2v_sogou_dim300.npy
+
+  # 璋冨害鍣ㄦā鍧楋紝鏄惁鍚敤
+  scheduler:
+    enabled: false
+    # 鏄惁鏀寔鏁版嵁搴撳瓨鍌ㄤ换鍔�(搴熷純璇ラ厤缃�)
+    database-enabled: false
+
+  # 鏁版嵁閲囬泦妯″潡
+  gather:
+    enabled: false
+
+  # 鏉冮檺鎺у埗鐩稿叧
+  security:
+    # 鍖垮悕鍙闂湴鍧�(寮�鏀惧湴鍧�)
+    anonymous-list:
+      - /platform/fin/sc
+      - /chat/auto/robot/**
+      - /login
+      - /register
+      - /captcha/*      # 楠岃瘉鐮佺粺涓�鏀惧紑
+      - /test/**        # 寮�鍙戞祴璇曪紝浠呭紑鍙戞澘鍙敤
+      - /swagger-resources/** # swagger
+      - /swagger-ui/**  # swagger
+      - /v3/**          # swagger
+      - /pay/notify/**  # 鏀粯閫氱煡
+      - /jmreport/**    # 绉湪鎶ヨ〃
+      - /api/cti/net/** # 缃戠粶杩炴帴鐘舵�佹娴�
+      - /api/cti/customer/** # 瀹㈡湇璁剧疆
+      - /api/** # 鍛煎彨涓績鍥炶皟
+      - /platform/fin/**
+      - /platform/fin/sys/org/**
+      - /platform/fin/sys/user/**
+      - /platform/fin/sys/project/**
+      - /platform/fin/sys/tenant/**
+      - /platform/fin/sys/tenant/user/**
+      - /robot/**
+      - /platform/fin/supplier/**
+      - /chat/user/** #鑱婂ぉ
+      - /third_party/budget/login
+      - /platform/fin/project/** # 棰勭畻涓�浣撳寲鐧诲綍瀵规帴锛屽墠绔闂殑鐧诲綍鍦板潃銆�2023-07-03
+      - /platform/fin/sys/server/**
+      - /platform/fin/project/category/**
+      - platform/fin/sys/tenant/user/**   #鐢ㄦ埛
+      - /platform/fin/project/**
+      - /platform/fin/event/**
+      - /admin/platform/fin/project/*
+      - /platform/fin/sla/config/**
+      - /platform/fin/library/**
+      - /platform/fin/sla/**
+      - /platform/fin/supplier/user/getRole
+      - /admin/platform/fin/sys/tenant/user/*   # 棰勭畻涓�浣撳寲鐧诲綍瀵规帴锛屽墠绔闂殑鐧诲綍鍦板潃銆�2023-07-03
+      - /system/role/**
+      - /robot/test/**
+      - /platform/fin/node/**
+      - /platform/fin/project/member/**   #鍥㈤槦鎴愬憳
+      - /robot/**
+      - /platform/fin/init/jn/**  #鍒濆鍖栨帴鍙�
+      - /platform/fin/project/manage/**
+      - /platform/fin/sla/config/**  #鍒濆鍖栨帴鍙�
+      - /platform/fin/sla/**  #鍒濆鍖栨帴鍙�
+      - /platform/fin/cate/user/select/sla/**  #鍒濆鍖栨帴鍙�
+      - /platform/fin/sta/template/**  #婊℃剰搴︽帴鍙�
+      - /system/dict/type
+      - /platform/fin/chat/reply/** #蹇嵎鍥炲
+      - /platform/fin/file/upload #鏂囦欢涓婁紶锛岃鍕跨鐢ㄥ拰閰嶇疆
+      - /file/** #璇峰嬁绂佺敤鍜岄厤缃�
+      - /platform/fin/node/define/select
+      - /platform/fin/cate/user/**
+      - /platform/fin/node/define/**
+    # 鍏佽鎵�鏈夎璇佺敤鎴烽兘鍙闂湴鍧�锛岃鎱庨噸鍚﹀垯鏉冮檺閮借繃澶э紝涓�鑸珹PI閮藉簲璇ヨ缃湪杩欓噷
+    permit-list:
+      #      - /permit # 鍏敤鏉冮檺锛�2023-03-13锛屽钩鍙颁唬鐮佸凡缁忔坊鍔犺繃浜嗭紝杩欓噷涓嶉渶瑕侀厤缃�
+      - /getInfo
+      - /system/**
+      - /getRouters
+      - /getMenus # 鏂扮晫闈㈣彍鍗曪紝2023-05-12
+      - /logout
+    #      - /api/**
+
+    # 瓒呯骇绠$悊鍛樺瘑鐮侊紝鍔犲瘑鍚庣殑绉樻枃
+    supervisor-password: $2a$10$9lSwwUFMULR6/KhPsUbTj.0PTZfTnq0fB3OtS6PWoKAibpa8hL1cy
+
+    # 鏄惁鍏佽閰嶇疆璺ㄥ煙鍝嶅簲澶�, true 鍚敤锛� false 涓嶅惎鐢ㄣ��2022-12-28
+    # 鍦℅ateway妯″紡涓紝闇�瑕佸叧闂法鍩熼厤缃紝鍥犱负缃戝叧涔熶細閰嶇疆銆�
+    cors-enabled: true
+
+    # 鐢ㄦ埛鍚嶅瘑鐮佹柟寮忕櫥褰曪紝閰嶇疆鐨勯獙璇佺爜绫诲瀷锛歝ode/sms/slide/jigsaw锛�2023-03-14
+    login-captcha-user-pass: code
+    # 鎵嬫満楠岃瘉鐮佹柟寮忕櫥褰曪紝閰嶇疆鐨勯獙璇佺爜绫诲瀷锛歝ode/sms/slide/jigsaw锛�2023-03-14
+    login-captcha-sms-code: sms
+
+    # 鏄惁鍏佽鍚庡彴鐢ㄦ埛锛堥潪App锛夌櫥褰曟墜鏈虹锛�2023-03-20
+    allow-pc-user-access-app: true
+
+    # PC绔痶oken澶辨晥鍒嗛挓锛岄粯璁わ細120鍒嗛挓锛�2023-03-28
+    token-expire-web: 720
+    # 绉诲姩绔痶oken澶辨晥鍒嗛挓锛�2023-03-28
+    token-expire-mobile: 21600
+
+    # 鐢ㄦ埛浣撶郴锛堢敤鎴峰悕锛夐兘鏄墜鏈哄彿锛�2023-06-28
+    # 涓�鑸郴缁烶C绔�氬父閮戒笉鏄墜鏈哄彿浣滀负鐢ㄦ埛鍚嶏紝鍙湁鍦ㄤ簰鑱旂綉鐩稿叧绯荤粺涓細瀛樺湪鎵嬫満鍙蜂綔涓虹櫥褰曡处鍙�
+    user-name-is-phone: false
+
+    # 2023-07-11 鐧诲綍绛栫暐閰嶇疆锛屽垪琛ㄤ腑瀛樺湪鐨勭瓥鐣ラ兘琛ㄧず鍚敤锛堜笉鍚敤鐨勫垹鎺夛級
+    login-strategy-list:
+    #      - com.iplatform.base.support.strategy.WebOnceLoginStrategy
+
+    # 鐢ㄦ埛鐩稿叧瀹夊叏閰嶇疆锛�2023-08-03
+    user:
+      # 鐢ㄦ埛淇敼瀵嗙爜绛夌骇锛屽垎鍥涚骇锛�1-2-3-4锛屽父閲忥細PasswordUtils#
+      pass-level: 4
+      # 鏄惁寮哄埗鐢ㄦ埛淇敼榛樿瀵嗙爜锛�
+      pass-default-modify: true
+
+  # 浠g爜鐢熸垚锛�2022-11-26
+  gen:
+    # 浣滆��
+    author: Mike
+    # 榛樿鐢熸垚鍖呰矾寰� system 闇�鏀规垚鑷繁鐨勬ā鍧楀悕绉� 濡� system monitor tool
+    package-name: com.iplatform.model.po
+    # 鑷姩鍘婚櫎琛ㄥ墠缂�锛岄粯璁ゆ槸false
+    auto-remove-pre: false
+    # 琛ㄥ墠缂�锛堢敓鎴愮被鍚嶄笉浼氬寘鍚〃鍓嶇紑锛屽涓敤閫楀彿鍒嗛殧锛�
+    table-prefix: s_
+
+  log:
+    # 鏄惁鎵撳紑鐧诲綍鏃ュ織锛�2023-01-05
+    # 濡傛灉涓嶆墦寮�锛屽垯璁惧鐧诲綍鐨剈uid鏇存柊鎿嶄綔涔熸棤娉曡幏寰楋紝鐢ㄤ簬璁板綍姣忎釜鐧诲綍鐢ㄦ埛鐨剈uid锛堢敤鎴风櫥褰曡鑹叉洿鏂帮級锛�2023-03-23
+    login-enabled: true
+    # 鏄惁鎵撳紑鎿嶄綔鏃ュ織锛�2023-01-05
+    operate-enabled: false
+
+  # 楠岃瘉鐮佺浉鍏抽厤缃紝2023-01-27
+  captcha:
+    # 鍥惧舰楠岃瘉鐮佸疄鐜扮被, TextCaptchaProvider | DefaultCaptchaProvider
+    image-captcha-class: com.iplatform.base.captcha.TextCaptchaProvider
+    # 鐭俊楠岃瘉鐮佸疄鐜扮被锛堥厤缃簾寮冿紝2023-04-25锛�
+    sms-captcha-class: com.iplatform.base.captcha.MockSmsCaptchaProvider
+
+  # 骞冲彴鏂囦欢瀛樺偍閰嶇疆锛�2023-02-15
+  file:
+    # FileStoreType = FileSystem 鏈湴纾佺洏瀛樺偍鏍硅矾寰�
+    file-root: d:/tmp/
+    ftp:
+      ip: 116.198.40.76
+      port: 22
+      user-name: mysftp
+      password: Bjjmy_2020
+      private-key:
+      # ftp鏈嶅姟涓婇潰鐨勫瓨鍌ㄦ牴璺緞锛屽彧鑳芥槸linux璺緞
+      #      file-root: /files/
+      file-root: /train/
+
+  # 鎺ュ彛鏂囨。鐢熸垚锛宻wagger3锛�2023-02-23
+  swagger:
+    # 鍖呰矾寰勶紝鏆傛椂涓嶇敤
+    base-package: com.iplatform.base.controller
+    title: 浜戝師鐢熷井鏈嶅姟骞冲彴
+    description: 涓�涓揩閫焪eb寮�鍙戞鏋�
+
+  # TCP閫氫俊閰嶇疆锛�2023-04-17
+  tcp:
+    # 鏄惁寮�鍚紩鎿�
+    enabled: true
+    # 鏄惁鎵撳紑蹇冭烦
+    open-heart-beat: false
+    # 蹇冭烦鏃堕棿锛堢锛夛紝2023-08-28
+    heart-beat-seconds: 120
+    # 鏄惁鏄剧ず璇︾粏鏃ュ織
+    show-log: false
+    # 璇锋眰闃熷垪绫诲瀷锛歮emory 鍩轰簬鍐呭瓨
+    queue-type: memory
+    # tcp鏂瑰紡瑕佹壂鎻忕殑璇锋眰瀵硅薄鐨勫寘绌洪棿
+    scan-packages-tcp: com.walker.tcp,com.iplatform.tcp
+    # websocket鏂瑰紡瑕佹壂鎻忕殑璇锋眰瀵硅薄鐨勫寘绌洪棿
+    scan-packages-ws: com.iplatform.tcp.util.ws,com.finance.chat.util.ws
+    # tcp闀胯繛鎺ョ殑绔彛
+    port-tcp: 7878
+    # websocket杩炴帴绔彛
+    port-ws: 60000
+    # websocket杩炴帴uri
+    websocket-uri: ws://172.16.60.41:60000/websocket
+    # 閫氫俊绾跨▼鏁伴噺
+    boss-thread-num: 2
+    # 涓氬姟澶勭悊绾跨▼鏁伴噺
+    worker-thread-num: 4
+    # 鍚敤鑷畾涔夎繛鎺ョ鐞嗗櫒锛屽鏋渢rue鍒欎笟鍔¢渶瑕佹彁渚涜嚜瀹氫箟瀹炵幇锛堥厤缃級锛�2023-07-18
+    custom-connection-manager: true
+
+  # 鎺ㄩ�佹ā鍧楅厤缃紝2023-04-25
+  push:
+    # 鐭俊鎺ㄩ�佽�呭悕绉帮細mock_sms_push锛堟ā鎷熺煭淇★級锛宎lidy_sms_push锛堥樋閲屽ぇ楸肩煭淇★級
+    sms-push-name: mock_sms_push
+    # 鐭俊楠岃瘉鐮佹ā鏉縄D锛屾牴鎹疄闄呮儏鍐碉紙姣忎釜骞冲彴鍙兘涓嶅悓锛�
+    sms-template-code: template_code
+
+    # 瀵逛簬涓�鑸笟鍔℃彁閱掞紙涓嶅寘鎷細閭欢銆佺煭淇★級锛屾帹閫佺殑鏂瑰紡銆傛帹閫佽�匢D缁勫悎
+    # && 琛ㄧず骞跺垪锛寍| 琛ㄧず鎴栵紙鍙涓�涓垚鍔熷氨OK锛�
+    # 2023-04-26锛屽彲鐢ㄧ殑 id = 'tcp', 'web_socket', 'wx', 'system'
+    #    message-type: tcp && web_socket && wx && system
+    # 濡傛灉鏄垨鑰呮柟寮忥紝闇�瑕佹妸鏈�鍙潬鐨勬斁鍓嶉潰锛屽洜涓虹郴缁熶細鎵惧埌绗竴涓彂閫佹垚鍔熷嵆鍙��
+    message-type: system || tcp || web_socket || wx
+
+    # 閭欢閫氱煡鍙戦�佷俊鎭厤缃紝2023-04-26
+    mail-server: smtp.126.com
+    mail-from: hnzzzhsl@126.com
+    mail-password: test
+
+
+fin:
+  projectCode: CZT_YS_YTH_001
+  # 鍖哄垎鐪佺骇CODE
+  provinceCode: 410000000
diff --git a/deploy-jar-single/src/main/resources/application-test.yml b/deploy-jar-single/src/main/resources/application-test.yml
new file mode 100644
index 0000000..c2e4ad5
--- /dev/null
+++ b/deploy-jar-single/src/main/resources/application-test.yml
@@ -0,0 +1,380 @@
+spring:
+  application:
+    name: projectProgress
+  datasource:
+    # 鏄惁鏄剧ずdao涓墦鍗扮殑SQL璇彞
+    show-sql: true
+
+    ##    driver-class-name: sunje.goldilocks.jdbc.GoldilocksDriver
+    # 娉ㄦ剰锛歁ySQL鏈嶅姟绔紝闇�瑕佽皟鏁翠袱涓弬鏁帮紝鍚﹀垯鏈嶅姟绔細涓诲姩鏂紑杩炴帴
+    # wait_timeout: 瓒呰繃鏀规椂闂�(绉�)鏈嶅姟绔富鍔ㄦ柇寮�
+    # interactive_timeout: 瀹㈡埛绔伐鍏蜂氦浜掕秴杩囪繖涓椂闂�(绉�)浼氱鍙o紝琛ㄧ幇涓簄avicat
+
+    # Oracle閰嶇疆锛�2023-06-25
+    #    username: FINANCE_OPS_PROD
+    #    password: FINANCE_OPS_PROD
+    #    driver-class-name: oracle.jdbc.OracleDriver
+    #    url: jdbc:oracle:thin:@10.8.10.2:1521/pdb_YWZC
+    #    username: C##FINANCE_OPS_TEST
+    #    password: FINANCE_OPS_TEST
+    #    driver-class-name: oracle.jdbc.OracleDriver
+    #    url: jdbc:oracle:thin:@116.198.40.76:1521/cdb1
+
+
+    username: root
+    password: Bjjmy_2020
+    url: jdbc:mysql://116.198.40.76:3306/project_progress_manage_dev?useUnicode=true&characterEncoding=UTF-8&useSSL=false
+
+    #    username: root
+    #    password: Bjjmy_2020
+    #    url: jdbc:mysql://116.198.40.76:3306/iplatform?useUnicode=true&characterEncoding=UTF-8&useSSL=false
+
+    # 杈炬ⅵ鏁版嵁搴�
+    #    driver-class-name: dm.jdbc.driver.DmDriver
+    #    username: iplatform
+    #    password: iplatform
+    #    url: jdbc:dm://116.198.39.83:5236?schema=iplatform
+
+    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    # 浣跨敤 Hikari 杩炴帴姹�
+    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    #    type: com.walker.jdbc.ds.DefaultDataSource
+    #    hikari:
+    #      minimum-idle: 5
+    #      idle-timeout: 600000
+    #      pool-name: databasePool_walker
+    #      # 杩炴帴鏈�澶ц秴鏃舵椂闂�
+    #      connection-timeout: 30000
+    #      # 杩炴帴姹犳渶澶ф暟閲�
+    #      maximum-pool-size: 10
+    #      # 鎺у埗姹犱腑杩炴帴鏈�澶х敓瀛樻湡
+    #      # max-lifetime: 70000
+    #      # 姝ゅ睘鎬ф帶鍒舵祴璇曡繛鎺ユ槸鍚︽椿璺冪殑鏈�闀挎椂闂淬�傛鍊煎繀椤诲皬浜� connectionTimeout
+    #      validation-timeout: 10000
+    #      #
+    #      connection-test-query: select 1
+
+    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    # 浣跨敤 Druid 杩炴帴姹�
+    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    type: com.walker.jdbc.ds.MyDruidDataSource
+    druid:
+      initial-size: 5
+      min-idle: 10
+      max-active: 20
+      # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂�
+      max-wait: 60000
+      # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣
+      time-between-eviction-runs-millis: 60000
+      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 瓒呰繃杩欎釜鏃堕棿姣忔浼氬洖鏀堕粯璁�3涓繛鎺�
+      min-evictable-idle-time-millis: 30000
+      # 绾夸笂閰嶇疆鐨刴ysql鏂紑闂茬疆杩炴帴鏃堕棿涓�1灏忔椂,鏁版嵁婧愰厤缃洖鏀舵椂闂翠负3鍒嗛挓,浠ユ渶鍚庝竴娆℃椿璺冩椂闂村紑濮嬬畻
+      max-evictable-idle-time-millis: 180000
+      validation-query: select 1
+      test-while-idle: true
+      test-on-borrow: false
+      test-on-return: false
+      pool-prepared-statements: true
+      max-open-prepared-statements: 100
+      use-global-data-source-stat: true
+
+  #  redis:
+  #    host: 127.0.0.1
+  #    port: 6379
+  #    database: 10
+  #    #password: Jmy2019.
+  redis:
+    host: 116.198.40.76
+    port: 6379
+    database: 10
+    password: Jmy2019.
+
+
+  mvc:
+    pathmatch:
+      # 鍔犺閰嶇疆鏄洜涓� swagger3 鍚姩鎶ラ敊锛�2023-02-23
+      matching-strategy: ant_path_matcher
+
+    hiddenmethod:
+      filter:
+        enabled: true # 鍔犱笂璇ラ厤缃彲浠ユ帴鏀�: application/x-www-form-urlencoded璇锋眰鍙傛暟涓哄璞°�傛敮浠橀�氱煡涓娇鐢ㄣ��2023-02-26
+  servlet:
+    multipart:
+      max-file-size: 100MB
+      max-request-size: 300MB
+
+server:
+  port: 8082
+  servlet:
+    context-path: /admin
+    session:
+      timeout: 30m
+
+logging:
+  level:
+    # 鍏ㄥ眬杈撳嚭绾у埆 off < trace < debug < info < warn < error < fatal
+    root: info
+    org:
+      springframework: info
+    io.swagger: warn
+    io:
+      netty: info
+    com:
+      walker: debug
+      iplatform: debug
+      finance: debug
+      cti: debug
+      robot: error
+
+  charset:
+    # 鎺у埗鍙扮紪鐮�
+    console: UTF-8
+    # 杈撳嚭鏂囦欢缂栫爜
+    file: UTF-8
+  logback:
+    rollingpolicy:
+      # 鍗曚釜鏂囦欢鏈�澶т负30MB锛岃秴杩囦箣鍚庝細鎵撳寘鎴愪竴涓棩蹇楁枃浠�
+      max-file-size: 30MB
+      # 鏂囦欢淇濆瓨7澶�
+      max-history: 7
+      # 鎵撳寘鏂囦欢鏍煎紡,榛樿锛� ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz,涔﹀啓鏍煎紡涓猴細鏂囦欢璺緞/鏂囦欢鍚�.%i.鏂囦欢鍚庣紑,鍏朵腑%i涓嶅彲鐪佸幓锛屽惁鍒欐棤鏃ュ織鏄剧ず
+      # 渚嬪锛� 鏃ユ湡涓猴細2023/07/13 ,鍒欐墦鍖呮枃浠朵箣鍚庝负锛� log/ota.2023-07-13.0.gz,0琛ㄧず鏃ュ織鐨勭涓�閮ㄥ垎锛屽悗缁氨鏄紝1,2,3...
+      # 濡傛灉鏄帇缂╁寘锛岄噷闈細澶氫竴涓悕log/ota.2023-07-13.0鐨勬棩蹇楁枃浠�
+      # 濡備笅闈㈢殑渚嬪瓙锛屾墦鍖呬箣鍚庝负: log/2023-07/ota.2020-07-13.0.log锛岃繖鏄竴涓棩蹇楁枃浠�
+      file-name-pattern: ${logging.file.path}%d{yyyy-MM}/finance.%d{yyyy-MM-dd}.%i.log
+  file:
+    name: ${logging.file.path}finance.log
+    path: D:/log/
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# 骞冲彴閰嶇疆鏀寔鍔熻兘
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+iplatform:
+
+  # 骞冲彴缂撳瓨锛屾槸鍚﹀惎鐢╮edis缂撳瓨锛岄粯璁や娇鐢ㄥ熀浜庡唴瀛樼紦瀛�.
+  # 娉ㄦ剰锛氬鏋滃紑鍚痳edis缂撳瓨锛屼笟鍔″伐绋嬪繀椤讳緷璧�(walker-support-redis)
+  cache:
+    redis-enabled: true
+    # 鏈烘瀯鐢ㄦ埛鏄惁寰堝簽澶э紝濡傛灉鏄垯缂撳瓨涓細鍏抽棴鍒濆鍖栧姞杞斤紝鍚屾椂鏈烘瀯鏍戜篃涓嶄細鏀惧叆缂撳瓨锛�2023-07-17
+    org-user-big: true
+
+  # 鐩镐技搴﹀垎鏋愭ā鍧椾娇鐢�(宸插簾寮�)
+  #  similarity:
+  #    # 鏄惁鍚敤鐩镐技搴︽ā鍧楋紝濡傛灉绂佺敤鍒欒纭繚娉ㄥ叆鏃舵敮鎸佷负绌�
+  #    enabled: false
+  #    milvus-host: 172.16.60.65
+  #    milvus-port: 19530
+  #    word-file: d:/dev_tools/ai/w2v_sogou_dim300_vocab.txt
+  #    embedding-file: d:/dev_tools/ai/w2v_sogou_dim300.npy
+
+  # 璋冨害鍣ㄦā鍧楋紝鏄惁鍚敤
+  scheduler:
+    enabled: false
+    # 鏄惁鏀寔鏁版嵁搴撳瓨鍌ㄤ换鍔�(搴熷純璇ラ厤缃�)
+    database-enabled: false
+
+  # 鏁版嵁閲囬泦妯″潡
+  gather:
+    enabled: false
+
+  # 鏉冮檺鎺у埗鐩稿叧
+  security:
+    # 鍖垮悕鍙闂湴鍧�(寮�鏀惧湴鍧�)
+    anonymous-list:
+      - /chat/auto/robot/**
+      - /login
+      - /register
+      - /captcha/*      # 楠岃瘉鐮佺粺涓�鏀惧紑
+      - /test/**        # 寮�鍙戞祴璇曪紝浠呭紑鍙戞澘鍙敤
+      - /swagger-resources/** # swagger
+      - /swagger-ui/**  # swagger
+      - /v3/**          # swagger
+      - /pay/notify/**  # 鏀粯閫氱煡
+      - /jmreport/**    # 绉湪鎶ヨ〃
+      - /api/cti/net/** # 缃戠粶杩炴帴鐘舵�佹娴�
+      - /api/cti/customer/** # 瀹㈡湇璁剧疆
+      - /api/** # 鍛煎彨涓績鍥炶皟
+      - /platform/fin/**
+      - /platform/fin/sys/org/**
+      - /platform/fin/sys/user/**
+      - /platform/fin/sys/project/**
+      - /platform/fin/sys/tenant/**
+      - /platform/fin/sys/tenant/user/**
+      - /robot/**
+      - /platform/fin/supplier/**
+      - /chat/user/** #鑱婂ぉ
+      - /third_party/budget/login
+      - /platform/fin/project/** # 棰勭畻涓�浣撳寲鐧诲綍瀵规帴锛屽墠绔闂殑鐧诲綍鍦板潃銆�2023-07-03
+      - /platform/fin/sys/server/**
+      - /platform/fin/project/category/**
+      - platform/fin/sys/tenant/user/**   #鐢ㄦ埛
+      - /platform/fin/project/**
+      - /platform/fin/event/**
+      - /admin/platform/fin/project/*
+      - /platform/fin/sla/config/**
+      - /platform/fin/library/**
+      - /platform/fin/sla/**
+      - /platform/fin/supplier/user/getRole
+      - /admin/platform/fin/sys/tenant/user/*   # 棰勭畻涓�浣撳寲鐧诲綍瀵规帴锛屽墠绔闂殑鐧诲綍鍦板潃銆�2023-07-03
+      - /system/role/**
+      - /robot/test/**
+      - /platform/fin/node/**
+      - /platform/fin/project/member/**   #鍥㈤槦鎴愬憳
+      - /robot/**
+      - /platform/fin/init/jn/**  #鍒濆鍖栨帴鍙�
+      - /platform/fin/project/manage/**
+      - /platform/fin/sla/config/**  #鍒濆鍖栨帴鍙�
+      - /platform/fin/sla/**  #鍒濆鍖栨帴鍙�
+      - /platform/fin/cate/user/select/sla/**  #鍒濆鍖栨帴鍙�
+      - /platform/fin/sta/template/**  #婊℃剰搴︽帴鍙�
+      - /system/dict/type
+      - /platform/fin/chat/reply/** #蹇嵎鍥炲
+      - /platform/fin/file/upload #鏂囦欢涓婁紶锛岃鍕跨鐢ㄥ拰閰嶇疆
+      - /file/** #璇峰嬁绂佺敤鍜岄厤缃�
+      - /platform/fin/node/define/select
+      - /platform/fin/cate/user/**
+      - /platform/fin/node/define/**
+    # 鍏佽鎵�鏈夎璇佺敤鎴烽兘鍙闂湴鍧�锛岃鎱庨噸鍚﹀垯鏉冮檺閮借繃澶э紝涓�鑸珹PI閮藉簲璇ヨ缃湪杩欓噷
+    permit-list:
+      #      - /permit # 鍏敤鏉冮檺锛�2023-03-13锛屽钩鍙颁唬鐮佸凡缁忔坊鍔犺繃浜嗭紝杩欓噷涓嶉渶瑕侀厤缃�
+      - /getInfo
+      - /system/**
+      - /getRouters
+      - /getMenus # 鏂扮晫闈㈣彍鍗曪紝2023-05-12
+      - /logout
+    #      - /api/**
+
+    # 瓒呯骇绠$悊鍛樺瘑鐮侊紝鍔犲瘑鍚庣殑绉樻枃
+    supervisor-password: $2a$10$9lSwwUFMULR6/KhPsUbTj.0PTZfTnq0fB3OtS6PWoKAibpa8hL1cy
+
+    # 鏄惁鍏佽閰嶇疆璺ㄥ煙鍝嶅簲澶�, true 鍚敤锛� false 涓嶅惎鐢ㄣ��2022-12-28
+    # 鍦℅ateway妯″紡涓紝闇�瑕佸叧闂法鍩熼厤缃紝鍥犱负缃戝叧涔熶細閰嶇疆銆�
+    cors-enabled: true
+
+    # 鐢ㄦ埛鍚嶅瘑鐮佹柟寮忕櫥褰曪紝閰嶇疆鐨勯獙璇佺爜绫诲瀷锛歝ode/sms/slide/jigsaw锛�2023-03-14
+    login-captcha-user-pass: code
+    # 鎵嬫満楠岃瘉鐮佹柟寮忕櫥褰曪紝閰嶇疆鐨勯獙璇佺爜绫诲瀷锛歝ode/sms/slide/jigsaw锛�2023-03-14
+    login-captcha-sms-code: sms
+
+    # 鏄惁鍏佽鍚庡彴鐢ㄦ埛锛堥潪App锛夌櫥褰曟墜鏈虹锛�2023-03-20
+    allow-pc-user-access-app: true
+
+    # PC绔痶oken澶辨晥鍒嗛挓锛岄粯璁わ細120鍒嗛挓锛�2023-03-28
+    token-expire-web: 720
+    # 绉诲姩绔痶oken澶辨晥鍒嗛挓锛�2023-03-28
+    token-expire-mobile: 21600
+
+    # 鐢ㄦ埛浣撶郴锛堢敤鎴峰悕锛夐兘鏄墜鏈哄彿锛�2023-06-28
+    # 涓�鑸郴缁烶C绔�氬父閮戒笉鏄墜鏈哄彿浣滀负鐢ㄦ埛鍚嶏紝鍙湁鍦ㄤ簰鑱旂綉鐩稿叧绯荤粺涓細瀛樺湪鎵嬫満鍙蜂綔涓虹櫥褰曡处鍙�
+    user-name-is-phone: false
+
+    # 2023-07-11 鐧诲綍绛栫暐閰嶇疆锛屽垪琛ㄤ腑瀛樺湪鐨勭瓥鐣ラ兘琛ㄧず鍚敤锛堜笉鍚敤鐨勫垹鎺夛級
+    login-strategy-list:
+    #      - com.iplatform.base.support.strategy.WebOnceLoginStrategy
+
+    # 鐢ㄦ埛鐩稿叧瀹夊叏閰嶇疆锛�2023-08-03
+    user:
+      # 鐢ㄦ埛淇敼瀵嗙爜绛夌骇锛屽垎鍥涚骇锛�1-2-3-4锛屽父閲忥細PasswordUtils#
+      pass-level: 4
+      # 鏄惁寮哄埗鐢ㄦ埛淇敼榛樿瀵嗙爜锛�
+      pass-default-modify: true
+
+  # 浠g爜鐢熸垚锛�2022-11-26
+  gen:
+    # 浣滆��
+    author: Mike
+    # 榛樿鐢熸垚鍖呰矾寰� system 闇�鏀规垚鑷繁鐨勬ā鍧楀悕绉� 濡� system monitor tool
+    package-name: com.iplatform.model.po
+    # 鑷姩鍘婚櫎琛ㄥ墠缂�锛岄粯璁ゆ槸false
+    auto-remove-pre: false
+    # 琛ㄥ墠缂�锛堢敓鎴愮被鍚嶄笉浼氬寘鍚〃鍓嶇紑锛屽涓敤閫楀彿鍒嗛殧锛�
+    table-prefix: s_
+
+  log:
+    # 鏄惁鎵撳紑鐧诲綍鏃ュ織锛�2023-01-05
+    # 濡傛灉涓嶆墦寮�锛屽垯璁惧鐧诲綍鐨剈uid鏇存柊鎿嶄綔涔熸棤娉曡幏寰楋紝鐢ㄤ簬璁板綍姣忎釜鐧诲綍鐢ㄦ埛鐨剈uid锛堢敤鎴风櫥褰曡鑹叉洿鏂帮級锛�2023-03-23
+    login-enabled: true
+    # 鏄惁鎵撳紑鎿嶄綔鏃ュ織锛�2023-01-05
+    operate-enabled: false
+
+  # 楠岃瘉鐮佺浉鍏抽厤缃紝2023-01-27
+  captcha:
+    # 鍥惧舰楠岃瘉鐮佸疄鐜扮被, TextCaptchaProvider | DefaultCaptchaProvider
+    image-captcha-class: com.iplatform.base.captcha.TextCaptchaProvider
+    # 鐭俊楠岃瘉鐮佸疄鐜扮被锛堥厤缃簾寮冿紝2023-04-25锛�
+    sms-captcha-class: com.iplatform.base.captcha.MockSmsCaptchaProvider
+
+  # 骞冲彴鏂囦欢瀛樺偍閰嶇疆锛�2023-02-15
+  file:
+    # FileStoreType = FileSystem 鏈湴纾佺洏瀛樺偍鏍硅矾寰�
+    file-root: d:/tmp/
+    ftp:
+      ip: 116.198.40.76
+      port: 22
+      user-name: mysftp
+      password: Bjjmy_2020
+      private-key:
+      # ftp鏈嶅姟涓婇潰鐨勫瓨鍌ㄦ牴璺緞锛屽彧鑳芥槸linux璺緞
+      #      file-root: /files/
+      file-root: /train/
+
+  # 鎺ュ彛鏂囨。鐢熸垚锛宻wagger3锛�2023-02-23
+  swagger:
+    # 鍖呰矾寰勶紝鏆傛椂涓嶇敤
+    base-package: com.iplatform.base.controller
+    title: 浜戝師鐢熷井鏈嶅姟骞冲彴
+    description: 涓�涓揩閫焪eb寮�鍙戞鏋�
+
+  # TCP閫氫俊閰嶇疆锛�2023-04-17
+  tcp:
+    # 鏄惁寮�鍚紩鎿�
+    enabled: true
+    # 鏄惁鎵撳紑蹇冭烦
+    open-heart-beat: false
+    # 蹇冭烦鏃堕棿锛堢锛夛紝2023-08-28
+    heart-beat-seconds: 120
+    # 鏄惁鏄剧ず璇︾粏鏃ュ織
+    show-log: false
+    # 璇锋眰闃熷垪绫诲瀷锛歮emory 鍩轰簬鍐呭瓨
+    queue-type: memory
+    # tcp鏂瑰紡瑕佹壂鎻忕殑璇锋眰瀵硅薄鐨勫寘绌洪棿
+    scan-packages-tcp: com.walker.tcp,com.iplatform.tcp
+    # websocket鏂瑰紡瑕佹壂鎻忕殑璇锋眰瀵硅薄鐨勫寘绌洪棿
+    scan-packages-ws: com.iplatform.tcp.util.ws,com.finance.chat.util.ws
+    # tcp闀胯繛鎺ョ殑绔彛
+    port-tcp: 7878
+    # websocket杩炴帴绔彛
+    port-ws: 60000
+    # websocket杩炴帴uri
+    websocket-uri: ws://172.16.60.41:60000/websocket
+    # 閫氫俊绾跨▼鏁伴噺
+    boss-thread-num: 2
+    # 涓氬姟澶勭悊绾跨▼鏁伴噺
+    worker-thread-num: 4
+    # 鍚敤鑷畾涔夎繛鎺ョ鐞嗗櫒锛屽鏋渢rue鍒欎笟鍔¢渶瑕佹彁渚涜嚜瀹氫箟瀹炵幇锛堥厤缃級锛�2023-07-18
+    custom-connection-manager: true
+
+  # 鎺ㄩ�佹ā鍧楅厤缃紝2023-04-25
+  push:
+    # 鐭俊鎺ㄩ�佽�呭悕绉帮細mock_sms_push锛堟ā鎷熺煭淇★級锛宎lidy_sms_push锛堥樋閲屽ぇ楸肩煭淇★級
+    sms-push-name: mock_sms_push
+    # 鐭俊楠岃瘉鐮佹ā鏉縄D锛屾牴鎹疄闄呮儏鍐碉紙姣忎釜骞冲彴鍙兘涓嶅悓锛�
+    sms-template-code: template_code
+
+    # 瀵逛簬涓�鑸笟鍔℃彁閱掞紙涓嶅寘鎷細閭欢銆佺煭淇★級锛屾帹閫佺殑鏂瑰紡銆傛帹閫佽�匢D缁勫悎
+    # && 琛ㄧず骞跺垪锛寍| 琛ㄧず鎴栵紙鍙涓�涓垚鍔熷氨OK锛�
+    # 2023-04-26锛屽彲鐢ㄧ殑 id = 'tcp', 'web_socket', 'wx', 'system'
+    #    message-type: tcp && web_socket && wx && system
+    # 濡傛灉鏄垨鑰呮柟寮忥紝闇�瑕佹妸鏈�鍙潬鐨勬斁鍓嶉潰锛屽洜涓虹郴缁熶細鎵惧埌绗竴涓彂閫佹垚鍔熷嵆鍙��
+    message-type: system || tcp || web_socket || wx
+
+    # 閭欢閫氱煡鍙戦�佷俊鎭厤缃紝2023-04-26
+    mail-server: smtp.126.com
+    mail-from: hnzzzhsl@126.com
+    mail-password: test
+
+
+fin:
+  projectCode: CZT_YS_YTH_001
+  # 鍖哄垎鐪佺骇CODE
+  provinceCode: 410000000
diff --git a/deploy-jar-single/src/main/resources/application.yml b/deploy-jar-single/src/main/resources/application.yml
new file mode 100644
index 0000000..ad9a171
--- /dev/null
+++ b/deploy-jar-single/src/main/resources/application.yml
@@ -0,0 +1,4 @@
+spring:
+  profiles:
+    active: dev
+
diff --git "a/deploy-jar-single/src/main/resources/import/\346\234\272\346\236\204\345\257\274\345\205\245\346\250\241\346\235\277.xls" "b/deploy-jar-single/src/main/resources/import/\346\234\272\346\236\204\345\257\274\345\205\245\346\250\241\346\235\277.xls"
new file mode 100644
index 0000000..1a241ff
--- /dev/null
+++ "b/deploy-jar-single/src/main/resources/import/\346\234\272\346\236\204\345\257\274\345\205\245\346\250\241\346\235\277.xls"
Binary files differ
diff --git a/deploy-jar-single/src/main/resources/wk_sn_lic.bin b/deploy-jar-single/src/main/resources/wk_sn_lic.bin
new file mode 100644
index 0000000..409c46e
--- /dev/null
+++ b/deploy-jar-single/src/main/resources/wk_sn_lic.bin
@@ -0,0 +1 @@
+乯9圭W∵�吁扗�I!3豒腯�YRCpU版O-櫱j纃mab鞲�耑$G�2噽l�6.�=葯鑚"藼m恰a軛幫宓雰礥兾w夠籇駓巶�
X�偕汣籔Qa��w眮
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..5466153
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <modules>
+    <module>deploy-jar-single</module>
+    <module>consum-base</module>
+    <module>consum-model-pojo</module>
+  </modules>
+
+  <parent>
+    <groupId>com.iplatform</groupId>
+    <artifactId>iplatform</artifactId>
+    <version>2.3.0-SNAPSHOT</version>
+  </parent>
+
+  <groupId>com.consum</groupId>
+  <artifactId>low-consum-manage</artifactId>
+  <version>1.0.0-SNAPSHOT</version>
+  <name>low-consum-manage</name>
+  <packaging>pom</packaging>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <consum-base.version>1.0.0-SNAPSHOT</consum-base.version>
+    <consum-model-pojo.version>1.0.0-SNAPSHOT</consum-model-pojo.version>
+  </properties>
+
+  <dependencyManagement>
+    <dependencies>
+
+      <!-- 2023-06-07 杩愮淮绯荤粺鍩虹妯″潡 -->
+      <dependency>
+        <groupId>com.low.consum</groupId>
+        <artifactId>low-consum-manage</artifactId>
+        <version>${consum-base.version}</version>
+      </dependency>
+
+      <!-- 2023-06-15 鏁版嵁搴撳璞″畾涔夋ā鍧� -->
+      <dependency>
+        <groupId>com.low.consum</groupId>
+        <artifactId>consum-model-pojo</artifactId>
+        <version>${consum-model-pojo.version}</version>
+      </dependency>
+
+    </dependencies>
+  </dependencyManagement>
+
+</project>
diff --git a/project-web/.editorconfig b/project-web/.editorconfig
new file mode 100644
index 0000000..3454886
--- /dev/null
+++ b/project-web/.editorconfig
@@ -0,0 +1,14 @@
+# https://editorconfig.org
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 2
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.md]
+insert_final_newline = false
+trim_trailing_whitespace = false
diff --git a/project-web/.env.development b/project-web/.env.development
new file mode 100644
index 0000000..8880f0c
--- /dev/null
+++ b/project-web/.env.development
@@ -0,0 +1,16 @@
+# just a flag
+ENV = 'development'
+
+# base api
+# VUE_APP_BASE_API = '/dev-api'
+VUE_APP_BASE_API = 'http://127.0.0.1:8082/admin'
+#VUE_APP_BASE_API = 'http://172.16.60.164:8082/admin'
+
+# vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable,
+# to control whether the babel-plugin-dynamic-import-node plugin is enabled.
+# It only does one thing by converting all import() to require().
+# This configuration can significantly increase the speed of hot updates,
+# when you have a large number of pages.
+# Detail:  https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/babel-preset-app/index.js
+
+VUE_CLI_BABEL_TRANSPILE_MODULES = true
diff --git a/project-web/.env.production b/project-web/.env.production
new file mode 100644
index 0000000..fbee416
--- /dev/null
+++ b/project-web/.env.production
@@ -0,0 +1,7 @@
+# just a flag
+ENV = 'production'
+
+# base api
+# VUE_APP_BASE_API = '/prod-api'
+VUE_APP_BASE_API = 'http://localhost:8080'
+
diff --git a/project-web/.env.staging b/project-web/.env.staging
new file mode 100644
index 0000000..006524f
--- /dev/null
+++ b/project-web/.env.staging
@@ -0,0 +1,6 @@
+ENV = 'production'
+
+# base api
+# VUE_APP_BASE_API = '/prod-api'
+VUE_APP_BASE_API = 'http://localhost:8080'
+
diff --git a/project-web/.eslintignore b/project-web/.eslintignore
new file mode 100644
index 0000000..9611f53
--- /dev/null
+++ b/project-web/.eslintignore
@@ -0,0 +1,7 @@
+build/*.js
+src/assets
+public
+dist
+src/components/FormGenerator
+src/directive
+src/
diff --git a/project-web/.eslintrc.js b/project-web/.eslintrc.js
new file mode 100644
index 0000000..b0c7f13
--- /dev/null
+++ b/project-web/.eslintrc.js
@@ -0,0 +1,396 @@
+module.exports = {
+  root: true,
+  parserOptions: {
+    parser: 'babel-eslint',
+    sourceType: 'module'
+  },
+  env: {
+    browser: true,
+    node: true,
+    es6: true,
+  },
+  extends: ['plugin:vue/recommended', 'eslint:recommended'],
+
+  // add your custom rules here
+  //it is base on https://github.com/vuejs/eslint-config-vue
+  rules: {
+    "vue/max-attributes-per-line": [2, {
+      "singleline": 10,
+      "multiline": {
+        "max": 1,
+        "allowFirstLine": false
+      }
+    }],
+    "vue/singleline-html-element-content-newline": "off",
+    "vue/multiline-html-element-content-newline":"off",
+    "vue/name-property-casing": ["error", "PascalCase"],
+    "vue/no-v-html": "off",
+    'accessor-pairs': 2,
+    'arrow-spacing': [2, {
+      'before': true,
+      'after': true
+    }],
+    'block-spacing': [2, 'always'],
+    'brace-style': [2, '1tbs', {
+      'allowSingleLine': true
+    }],
+    'camelcase': [0, {
+      'properties': 'always'
+    }],
+    'comma-dangle': [2, 'never'],
+    'comma-spacing': [2, {
+      'before': false,
+      'after': true
+    }],
+    'comma-style': [2, 'last'],
+    'constructor-super': 2,
+    'curly': [2, 'multi-line'],
+    'dot-location': [2, 'property'],
+    'eol-last': 2,
+    'eqeqeq': ["error", "always", {"null": "ignore"}],
+    'generator-star-spacing': [2, {
+      'before': true,
+      'after': true
+    }],
+    'handle-callback-err': [2, '^(err|error)$'],
+    'indent': [2, 2, {
+      'SwitchCase': 1
+    }],
+    'jsx-quotes': [2, 'prefer-single'],
+    'key-spacing': [2, {
+      'beforeColon': false,
+      'afterColon': true
+    }],
+    'keyword-spacing': [2, {
+      'before': true,
+      'after': true
+    }],
+    'new-cap': [2, {
+      'newIsCap': true,
+      'capIsNew': false
+    }],
+    'new-parens': 2,
+    'no-array-constructor': 2,
+    'no-caller': 2,
+    'no-console': 'off',
+    'no-class-assign': 2,
+    'no-cond-assign': 2,
+    'no-const-assign': 2,
+    'no-control-regex': 0,
+    'no-delete-var': 2,
+    'no-dupe-args': 2,
+    'no-dupe-class-members': 2,
+    'no-dupe-keys': 2,
+    'no-duplicate-case': 2,
+    'no-empty-character-class': 2,
+    'no-empty-pattern': 2,
+    'no-eval': 2,
+    'no-ex-assign': 2,
+    'no-extend-native': 2,
+    'no-extra-bind': 2,
+    'no-extra-boolean-cast': 2,
+    'no-extra-parens': [2, 'functions'],
+    'no-fallthrough': 2,
+    'no-floating-decimal': 2,
+    'no-func-assign': 2,
+    'no-implied-eval': 2,
+    'no-inner-declarations': [2, 'functions'],
+    'no-invalid-regexp': 2,
+    'no-irregular-whitespace': 2,
+    'no-iterator': 2,
+    'no-label-var': 2,
+    'no-labels': [2, {
+      'allowLoop': false,
+      'allowSwitch': false
+    }],
+    'no-lone-blocks': 2,
+    'no-mixed-spaces-and-tabs': 2,
+    'no-multi-spaces': 2,
+    'no-multi-str': 2,
+    'no-multiple-empty-lines': [2, {
+      'max': 1
+    }],
+    'no-native-reassign': 2,
+    'no-negated-in-lhs': 2,
+    'no-new-object': 2,
+    'no-new-require': 2,
+    'no-new-symbol': 2,
+    'no-new-wrappers': 2,
+    'no-obj-calls': 2,
+    'no-octal': 2,
+    'no-octal-escape': 2,
+    'no-path-concat': 2,
+    'no-proto': 2,
+    'no-redeclare': 2,
+    'no-regex-spaces': 2,
+    'no-return-assign': [2, 'except-parens'],
+    'no-self-assign': 2,
+    'no-self-compare': 2,
+    'no-sequences': 2,
+    'no-shadow-restricted-names': 2,
+    'no-spaced-func': 2,
+    'no-sparse-arrays': 2,
+    'no-this-before-super': 2,
+    'no-throw-literal': 2,
+    'no-trailing-spaces': 2,
+    'no-undef': 2,
+    'no-undef-init': 2,
+    'no-unexpected-multiline': 2,
+    'no-unmodified-loop-condition': 2,
+    'no-unneeded-ternary': [2, {
+      'defaultAssignment': false
+    }],
+    'no-unreachable': 2,
+    'no-unsafe-finally': 2,
+    'no-unused-vars': [2, {
+      'vars': 'all',
+      'args': 'none'
+    }],
+    'no-useless-call': 2,
+    'no-useless-computed-key': 2,
+    'no-useless-constructor': 2,
+    'no-useless-escape': 0,
+    'no-whitespace-before-property': 2,
+    'no-with': 2,
+    'one-var': [2, {
+      'initialized': 'never'
+    }],
+    'operator-linebreak': [2, 'after', {
+      'overrides': {
+        '?': 'before',
+        ':': 'before'
+      }
+    }],
+    'padded-blocks': [2, 'never'],
+    'quotes': [2, 'single', {
+      'avoidEscape': true,
+      'allowTemplateLiterals': true
+    }],
+    'semi': [2, 'never'],
+    'semi-spacing': [2, {
+      'before': false,
+      'after': true
+    }],
+    'space-before-blocks': [2, 'always'],
+    'space-before-function-paren': [2, 'never'],
+    'space-in-parens': [2, 'never'],
+    'space-infix-ops': 2,
+    'space-unary-ops': [2, {
+      'words': true,
+      'nonwords': false
+    }],
+    'spaced-comment': [2, 'always', {
+      'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
+    }],
+    'template-curly-spacing': [2, 'never'],
+    'use-isnan': 2,
+    'valid-typeof': 2,
+    'wrap-iife': [2, 'any'],
+    'yield-star-spacing': [2, 'both'],
+    'yoda': [2, 'never'],
+    'prefer-const': 2,
+    'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
+    'object-curly-spacing': [2, 'always', {
+      objectsInObjects: false
+    }],
+    'array-bracket-spacing': [2, 'never']
+  }
+}
+module.exports = {
+  root: true,
+  parserOptions: {
+    parser: 'babel-eslint',
+    sourceType: 'module'
+  },
+  env: {
+    browser: true,
+    node: true,
+    es6: true,
+  },
+  extends: ['plugin:vue/recommended', 'eslint:recommended'],
+
+  // add your custom rules here
+  //it is base on https://github.com/vuejs/eslint-config-vue
+  rules: {
+    "vue/max-attributes-per-line": [2, {
+      "singleline": 10,
+      "multiline": {
+        "max": 1,
+        "allowFirstLine": false
+      }
+    }],
+    "vue/singleline-html-element-content-newline": "off",
+    "vue/multiline-html-element-content-newline":"off",
+    "vue/name-property-casing": ["error", "PascalCase"],
+    "vue/no-v-html": "off",
+    'accessor-pairs': 2,
+    'arrow-spacing': [2, {
+      'before': true,
+      'after': true
+    }],
+    'block-spacing': [2, 'always'],
+    'brace-style': [2, '1tbs', {
+      'allowSingleLine': true
+    }],
+    'camelcase': [0, {
+      'properties': 'always'
+    }],
+    'comma-dangle': [2, 'never'],
+    'comma-spacing': [2, {
+      'before': false,
+      'after': true
+    }],
+    'comma-style': [2, 'last'],
+    'constructor-super': 2,
+    'curly': [2, 'multi-line'],
+    'dot-location': [2, 'property'],
+    'eol-last': 2,
+    'eqeqeq': ["error", "always", {"null": "ignore"}],
+    'generator-star-spacing': [2, {
+      'before': true,
+      'after': true
+    }],
+    'handle-callback-err': [2, '^(err|error)$'],
+    'indent': [2, 2, {
+      'SwitchCase': 1
+    }],
+    'jsx-quotes': [2, 'prefer-single'],
+    'key-spacing': [2, {
+      'beforeColon': false,
+      'afterColon': true
+    }],
+    'keyword-spacing': [2, {
+      'before': true,
+      'after': true
+    }],
+    'new-cap': [2, {
+      'newIsCap': true,
+      'capIsNew': false
+    }],
+    'new-parens': 2,
+    'no-array-constructor': 2,
+    'no-caller': 2,
+    'no-console': 'off',
+    'no-class-assign': 2,
+    'no-cond-assign': 2,
+    'no-const-assign': 2,
+    'no-control-regex': 0,
+    'no-delete-var': 2,
+    'no-dupe-args': 2,
+    'no-dupe-class-members': 2,
+    'no-dupe-keys': 2,
+    'no-duplicate-case': 2,
+    'no-empty-character-class': 2,
+    'no-empty-pattern': 2,
+    'no-eval': 2,
+    'no-ex-assign': 2,
+    'no-extend-native': 2,
+    'no-extra-bind': 2,
+    'no-extra-boolean-cast': 2,
+    'no-extra-parens': [2, 'functions'],
+    'no-fallthrough': 2,
+    'no-floating-decimal': 2,
+    'no-func-assign': 2,
+    'no-implied-eval': 2,
+    'no-inner-declarations': [2, 'functions'],
+    'no-invalid-regexp': 2,
+    'no-irregular-whitespace': 2,
+    'no-iterator': 2,
+    'no-label-var': 2,
+    'no-labels': [2, {
+      'allowLoop': false,
+      'allowSwitch': false
+    }],
+    'no-lone-blocks': 2,
+    'no-mixed-spaces-and-tabs': 2,
+    'no-multi-spaces': 2,
+    'no-multi-str': 2,
+    'no-multiple-empty-lines': [2, {
+      'max': 1
+    }],
+    'no-native-reassign': 2,
+    'no-negated-in-lhs': 2,
+    'no-new-object': 2,
+    'no-new-require': 2,
+    'no-new-symbol': 2,
+    'no-new-wrappers': 2,
+    'no-obj-calls': 2,
+    'no-octal': 2,
+    'no-octal-escape': 2,
+    'no-path-concat': 2,
+    'no-proto': 2,
+    'no-redeclare': 2,
+    'no-regex-spaces': 2,
+    'no-return-assign': [2, 'except-parens'],
+    'no-self-assign': 2,
+    'no-self-compare': 2,
+    'no-sequences': 2,
+    'no-shadow-restricted-names': 2,
+    'no-spaced-func': 2,
+    'no-sparse-arrays': 2,
+    'no-this-before-super': 2,
+    'no-throw-literal': 2,
+    'no-trailing-spaces': 2,
+    'no-undef': 2,
+    'no-undef-init': 2,
+    'no-unexpected-multiline': 2,
+    'no-unmodified-loop-condition': 2,
+    'no-unneeded-ternary': [2, {
+      'defaultAssignment': false
+    }],
+    'no-unreachable': 2,
+    'no-unsafe-finally': 2,
+    'no-unused-vars': [2, {
+      'vars': 'all',
+      'args': 'none'
+    }],
+    'no-useless-call': 2,
+    'no-useless-computed-key': 2,
+    'no-useless-constructor': 2,
+    'no-useless-escape': 0,
+    'no-whitespace-before-property': 2,
+    'no-with': 2,
+    'one-var': [2, {
+      'initialized': 'never'
+    }],
+    'operator-linebreak': [2, 'after', {
+      'overrides': {
+        '?': 'before',
+        ':': 'before'
+      }
+    }],
+    'padded-blocks': [2, 'never'],
+    'quotes': [2, 'single', {
+      'avoidEscape': true,
+      'allowTemplateLiterals': true
+    }],
+    'semi': [2, 'never'],
+    'semi-spacing': [2, {
+      'before': false,
+      'after': true
+    }],
+    'space-before-blocks': [2, 'always'],
+    'space-before-function-paren': [2, 'never'],
+    'space-in-parens': [2, 'never'],
+    'space-infix-ops': 2,
+    'space-unary-ops': [2, {
+      'words': true,
+      'nonwords': false
+    }],
+    'spaced-comment': [2, 'always', {
+      'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
+    }],
+    'template-curly-spacing': [2, 'never'],
+    'use-isnan': 2,
+    'valid-typeof': 2,
+    'wrap-iife': [2, 'any'],
+    'yield-star-spacing': [2, 'both'],
+    'yoda': [2, 'never'],
+    'prefer-const': 2,
+    'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
+    'object-curly-spacing': [2, 'always', {
+      objectsInObjects: false
+    }],
+    'array-bracket-spacing': [2, 'never']
+  }
+}
diff --git a/project-web/.gitignore b/project-web/.gitignore
new file mode 100644
index 0000000..78a752d
--- /dev/null
+++ b/project-web/.gitignore
@@ -0,0 +1,23 @@
+.DS_Store
+node_modules/
+dist/
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+**/*.log
+
+tests/**/coverage/
+tests/e2e/reports
+selenium-debug.log
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.local
+
+package-lock.json
+yarn.lock
diff --git a/project-web/.prettierignore b/project-web/.prettierignore
new file mode 100644
index 0000000..0f6356a
--- /dev/null
+++ b/project-web/.prettierignore
@@ -0,0 +1,22 @@
+.DS_Store
+node_modules/
+dist/
+public/
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+**/*.log
+
+tests/**/coverage/
+tests/e2e/reports
+selenium-debug.log
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.local
+*.md
\ No newline at end of file
diff --git a/project-web/.prettierrc.js b/project-web/.prettierrc.js
new file mode 100644
index 0000000..0614729
--- /dev/null
+++ b/project-web/.prettierrc.js
@@ -0,0 +1,35 @@
+module.exports = {
+  // 涓�琛屾渶澶� 120 瀛楃
+  printWidth: 120,
+  // 浣跨敤 2 涓┖鏍肩缉杩�
+  tabWidth: 2,
+  // 涓嶄娇鐢� tab 缂╄繘锛岃�屼娇鐢ㄧ┖鏍�
+  useTabs: false,
+  // 琛屽熬闇�瑕佹湁鍒嗗彿
+  semi: true,
+  // 浣跨敤鍗曞紩鍙蜂唬鏇垮弻寮曞彿
+  singleQuote: true,
+  // 瀵硅薄鐨� key 浠呭湪蹇呰鏃剁敤寮曞彿
+  quoteProps: 'as-needed',
+  // jsx 涓嶄娇鐢ㄥ崟寮曞彿锛岃�屼娇鐢ㄥ弻寮曞彿
+  jsxSingleQuote: false,
+  // 鏈熬浣跨敤閫楀彿
+  trailingComma: 'all',
+  // 澶ф嫭鍙峰唴鐨勯灏鹃渶瑕佺┖鏍� { foo: bar }
+  bracketSpacing: true,
+  // 绠ご鍑芥暟锛屽彧鏈変竴涓弬鏁扮殑鏃跺�欙紝涔熼渶瑕佹嫭鍙�
+  arrowParens: 'always',
+  // 姣忎釜鏂囦欢鏍煎紡鍖栫殑鑼冨洿鏄枃浠剁殑鍏ㄩ儴鍐呭
+  rangeStart: 0,
+  rangeEnd: Infinity,
+  // 涓嶉渶瑕佸啓鏂囦欢寮�澶寸殑 @prettier
+  requirePragma: false,
+  // 涓嶉渶瑕佽嚜鍔ㄥ湪鏂囦欢寮�澶存彃鍏� @prettier
+  insertPragma: false,
+  // 浣跨敤榛樿鐨勬姌琛屾爣鍑�
+  proseWrap: 'preserve',
+  // 鏍规嵁鏄剧ず鏍峰紡鍐冲畾 html 瑕佷笉瑕佹姌琛�
+  htmlWhitespaceSensitivity: 'css',
+  // 鎹㈣绗︿娇鐢� lf
+  endOfLine: 'lf',
+};
diff --git a/project-web/.travis.yml b/project-web/.travis.yml
new file mode 100644
index 0000000..f4be7a0
--- /dev/null
+++ b/project-web/.travis.yml
@@ -0,0 +1,5 @@
+language: node_js
+node_js: 10
+script: npm run test
+notifications:
+  email: false
diff --git a/project-web/LICENSE b/project-web/LICENSE
new file mode 100644
index 0000000..6151575
--- /dev/null
+++ b/project-web/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017-present PanJiaChen
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git "a/project-web/README-\346\263\250\346\204\217\344\272\213\351\241\271.md" "b/project-web/README-\346\263\250\346\204\217\344\272\213\351\241\271.md"
new file mode 100644
index 0000000..c371950
--- /dev/null
+++ "b/project-web/README-\346\263\250\346\204\217\344\272\213\351\241\271.md"
@@ -0,0 +1,81 @@
+# 瑙勮寖
+1. 鎵�鏈夌姸鎬侊細榛樿涓哄惎鐢ㄣ�傜粺涓�鍚嶇О涓猴細鍚敤/绂佺敤
+```sql
+{
+    type: 'select',
+    dataIndex: 'status',
+    label: '鐘舵��',
+    placeholder: '璇烽�夋嫨',
+    defaultValue: '1',
+    options: [
+      {
+        label: '鍚敤',
+        value: '1'
+      },
+      {
+        label: '绂佺敤',
+        value: '0'
+      }
+    ]
+  }
+```
+2. 鎵�鏈夋彁绀烘锛�
+   杈撳叆妗嗕负锛氳杈撳叆銆俻laceholder: '璇疯緭鍏�'
+   閫夋嫨妗嗕负锛氳閫夋嫨銆俻laceholder: '璇烽�夋嫨'
+   
+3. 鎵�鏈夎緭鍏ユ瀹藉害涓猴細150px
+   style="width: 150px"
+   
+4. 鎵�鏈塼able鍒楋細
+   鏂囧瓧瀛楃鐩稿悓鏃跺�欏眳涓�備緥濡傦細鎵嬫満鍙�
+   鏂囧瓧瀛楃涓嶇浉鍚屾椂鍊欏眳宸︺�備緥濡傦細浜哄憳鍚嶇О
+   鏁板瓧灞呭彸銆備緥濡傦細3.14
+   
+5. 鍚敤/绂佺敤/鍒犻櫎鏃跺�欓渶瑕乧onfirm鎻愮ず
+```sql
+switch: row => {
+              const result = {}
+              if (row.belongProvince == 1) {
+                Object.assign(result, {
+                  value: true, // 寮�
+                  label: '鏄�', // 寮�鐨勬弿杩�
+                  click: () => { // 鐐瑰嚮浜嬩欢
+                    this.updState(row)
+                  }
+                })
+              } else {
+                Object.assign(result, {
+                  value: false, // 鍏�
+                  label: '鍚�', // 鍏崇殑鎻忚堪
+                  click: () => {
+                    this.updState(row)
+                  }
+                })
+              }
+              return result
+            }
+```
+```sql
+// 淇敼鐘舵��
+    updState(row) {
+      let vm = this
+      let text = row.belongProvince == 0 ? "鍚敤" : "绂佺敤";
+      vm.$modal.confirm('纭瑕�' + text + '"' + row.name + '"涓虹渷鐩寸鍚楋紵').then(function () {
+        let params = Object.assign({}, row)
+        params.belongProvince = row.belongProvince === 1 ? 0 : 1
+        finsystenant.edit(params).then(res => {
+          if (res) {
+            row.belongProvince = row.belongProvince === 1 ? 0 : 1
+            vm.$modal.msgSuccess(text + "鎴愬姛");
+          }
+        })
+      })
+    },
+```
+6. 鏃堕棿杞崲锛歶tils->DateFormatter.js
+```sql
+formatter: row => {
+              return { value: DateFormatter.LongToDateTime(row.create_time) }
+            }
+```
+
diff --git a/project-web/README.ZBKJ.md b/project-web/README.ZBKJ.md
new file mode 100644
index 0000000..0d979dd
--- /dev/null
+++ b/project-web/README.ZBKJ.md
@@ -0,0 +1,55 @@
+鍏敤缁勪欢
+鏃犻檺鏋佸垎绫荤粍浠� src/components/Category
+浣跨敤鑼冨洿锛氳彍鍗曪紝鏂囩珷绛夊悇绉嶅垎绫婚厤缃暟鎹�
+
+琛ㄥ崟鐢熸垚缁勪欢
+https://github.com/JakHuang/form-generator
+
+json娓叉煋琛ㄥ崟浠ュ強鏄惁闇�瑕佺紪杈戞暟鎹洖濉殑鍔熻兘浠ヤ笅涓轰緥
+绀轰緥锛歴rc/views/maintain/devconfig/combineEdit.vue
+
+
+<parser v-if="formConf.fields.length > 0" :isEdit="isCreate === 1" :form-conf="formConf" :formEditData="editData" @submit="handlerSubmit" />
+娉ㄦ剰锛氳缃崟閫夋寜閽殑鍊兼椂闇�瑕佸甫涓婂崟寮曞彿锛岃涓嶆覆鏌撳緟缂栬緫鏁版嵁鏃朵笉浼氳嚜鍔ㄩ�変腑
+
+鎻愮ず:濡傛灉涓嶉渶瑕佹瘡娆″埛鏂伴〉闈㈤兘寮瑰嚭浜岀淮鐮侊紝璇峰湪src/layout/index.vue涓敞閲婃垨鑰呭垹闄�15琛屼唬鐮併��
+```
+<div class="open-image" @click="clear" v-if="openImage"><img src="@/assets/imgs/pc1.png" alt=""></div>
+```
+
+-- 鐘舵�佸叏閮ㄤ负 鍚敤/绂佺敤
+// 琛ㄦ牸鍏叡淇敼鐘舵�佹柟娉�
+鍒楅噷闈㈠啓click
+  click: () => {
+    this.updState(row)
+  }
+methods 閲屽啓鍏ユ柟娉�
+updState(row) {
+  let vm = this
+  let text = row.belongProvince == 0 ? "鍚敤" : "绂佺敤";
+  vm.$modal.confirm('纭瑕�' + text + '"' + row.name + '"鐪佺洿绠″悧锛�').then(function() {
+  let params = Object.assign({},row)
+  params.belongProvince = row.belongProvince===1 ? 0 : 1
+    finsystenant.edit(params).then(res=>{
+      if(res){
+        row.belongProvince = row.belongProvince===1 ? 0 : 1
+        vm.$modal.msgSuccess(text + "鎴愬姛");
+      }
+    })
+  })
+},
+
+updState(row) {
+  let vm = this
+  let text = row.status == 0 ? "鍚敤" : "绂佺敤";
+  vm.$modal.confirm('纭瑕�' + text + '"' + row.name + '"鍚楋紵').then(function() {
+    let params = Object.assign({},row)
+    params.status = row.status == 1 ? 0 : 1
+    finsysserver.edit(params).then(res=>{
+      if(res){
+        row.status = row.status == 1 ? 0 : 1
+        vm.$modal.msgSuccess(text + "鎴愬姛");
+      }
+    })
+  })
+},
\ No newline at end of file
diff --git a/project-web/README.md b/project-web/README.md
new file mode 100644
index 0000000..d7977b7
--- /dev/null
+++ b/project-web/README.md
@@ -0,0 +1,235 @@
+# Mike
+## 寮�鍙戣鑼�
+缁熶竴浣跨敤ES6 璇硶
+鏂规硶娉ㄩ噴
+/*
+* th => 琛ㄥご
+* data => 鏁版嵁
+* fileName => 鏂囦欢鍚�
+* fileType => 鏂囦欢绫诲瀷
+* sheetName => sheet椤靛悕
+*/
+export default function toExcel ({ th, data, fileName, fileType, sheetName }) 
+琛屾敞閲� //
+
+### 鍛藉悕
+
+椤甸潰鐩綍 鏂囦欢澶瑰懡鍚嶆牸寮忛獑椹煎紡鍛藉悕娉�,渚嬪锛氱敤鎴峰垪琛� userList 
+渚嬪锛氬晢鍝佹ā鍧�
+store 鍟嗗搧
+    鈹溾攢 store 鍟嗗搧绠$悊
+        鈹溾攢index.vue 棣栭〉
+        鈹溾攢 creatStore  鏂板缓鍟嗗搧
+            鈹溾攢 index.vue
+        鈹溾攢 sort 鍟嗗搧鍒嗙被
+            鈹溾攢 index.vue
+        鈹溾攢storeAttr 鍟嗗搧瑙勬牸
+            鈹溾攢 index.vue
+        鈹溾攢storeComment 鍟嗗搧璇勮
+            鈹溾攢 index.vue    
+
+椤甸潰鍛藉悕銆佺粍寤恒�佹枃浠跺す 鍛藉悕鏍煎紡灏忛┘宄板懡鍚嶆硶,渚嬪锛氱敤鎴峰垪琛� userList
+
+绫诲悕鍑芥暟鍛藉悕 澶ч┘宄板紡 渚嬪锛歛ddUser
+鍙橀噺鍛藉悕 灏忛┘宄板紡 渚嬪锛歶ser 鎴栬�� userInfo
+甯搁噺 閲囩敤鍏ㄥぇ浜涗笅鍒掔嚎鍛藉悕 渚嬪锛歏UE_APP_API_URl
+
+### 鏂囦欢绠$悊瑙勮寖
+views 椤甸潰妯″潡蹇呴』浠舵枃浠跺す鍖哄垎
+api 鎺ュ彛涓�涓ā鍧椾竴涓枃浠�
+缁勫缓 涓�涓粍寤轰竴涓枃浠跺す
+plugins 鎻掍欢涓�涓彃浠朵竴涓枃浠跺す
+vuex 璺敱鐘舵�佺鐞嗭紝涓�涓ā鍧楀湪modules 涓缓涓�涓枃浠跺す
+router 涓�涓ā鍧椾竴涓ā鍧楀湪modules 涓缓涓�涓枃浠跺す
+style 鏍峰紡灏介噺閲囩敤iView鑷甫缁勫缓锛宑ommon.less 绯荤粺閫氱敤鏍峰紡涓嶈杞绘槗鍔�
+鑷畾涔夐�氱敤鏍峰紡 style.less,姣忔娣诲姞蹇呴』鍔犳敞閲婏紝椤甸潰鐙珛鏍峰紡鍦ㄥ湪椤甸潰鍐呭啓锛屽悗缂�less 鏍煎紡
+缁勫缓鏍峰紡 styles 涓坊鍔犳枃浠跺す composents 瀵瑰簲components 鐩綍鏂板缓鏍峰紡鏂囦欢
+utils 鑷畾涔夊伐鍏穓s 鐙珛鍛藉悕锛屼竴鑸笉鐢ㄦ柊寤烘枃浠跺す
+
+## 妯″潡鍛藉悕
+~~~
+鈹溾攢 login 鐧诲綍
+鈹溾攢 dashboard 棣栭〉
+鈹溾攢 store 鍟嗗搧绠$悊
+鈹溾攢 order 绯荤粺璁㈠崟绠$悊
+鈹溾攢 distribution 鍒嗛攢
+鈹溾攢 user 鐢ㄦ埛绠$悊
+鈹溾攢 content 鍐呭绠$悊
+鈹溾攢 appSetting 鍚勪釜搴旂敤妯″潡鍔熻兘绠$悊鍏紬鍙枫�佸皬绋嬪簭銆佹敮浠樺疂銆佺櫨搴﹀皬绋嬪簭銆佷粖鏃ュご鏉″皬绋嬪簭 
+鈹溾攢 marketing 钀ラ攢绠$悊 浼樻儬鍔� 绉垎 绉掓潃
+鈹溾攢 sms 璁剧疆 鐭俊璁剧疆
+鈹溾攢 systemSetting 璁剧疆 绠$悊鍛樻潈闄� 绯荤粺璁剧疆 鐗╂祦璁剧疆
+鈹溾攢 maintain 缁存姢 閰嶇疆鍒嗙被 缁勫悎鏁版嵁 琛ㄥ崟閰嶇疆
+鈹溾攢 error-page 閿欒椤�
+
+~~~
+## 鐩綍缁撴瀯
+涓昏鐩綍缁撴瀯鍙婅鏄庯細
+~~~
+鈹溾攢鈹� public                         # 闈欐�佽祫婧�
+鈹�   鈹溾攢鈹� favicon.ico                # favicon鍥炬爣
+鈹�   鈹斺攢鈹� index.html                 # html 妯℃澘
+鈹溾攢鈹� src                            # 婧愪唬鐮�
+鈹�   鈹溾攢鈹� api                        # 鎵�鏈夎姹�
+鈹�   鈹�    鈹斺攢鈹�user.js                # 鏈夊叧鐧诲綍/鐢ㄦ埛鐨勬帴鍙�
+鈹�   鈹�    鈹斺攢鈹�article.js             # 鏈夊叧鍐呭鐨勬帴鍙�
+鈹�   鈹�    鈹斺攢鈹�categoryApi.js         # 鏈夊叧閰嶇疆鐨勬帴鍙� 
+鈹�   鈹�    鈹斺攢鈹�configTabApi.js        # 鏈夊叧閰嶇疆鍒嗙被鐨勬帴鍙�
+鈹�   鈹�    鈹斺攢鈹�dashboard.js           # 鏈夊叧鎺у埗鍙扮殑鎺ュ彛
+鈹�   鈹�    鈹斺攢鈹�distribution.js        # 鏈夊叧鍒嗛攢鐨勬帴鍙�
+鈹�   鈹�    鈹斺攢鈹�logistics.js           # 鏈夊叧鍩庡競鏁版嵁銆佺墿娴侀厤缃殑鎺ュ彛
+鈹�   鈹�    鈹斺攢鈹�marketing.js           # 鏈夊叧浼樻儬鍒搞�佺鍒伴厤缃殑鎺ュ彛
+鈹�   鈹�    鈹斺攢鈹�order.js               # 鏈夊叧璁㈠崟鐨勬帴鍙�
+鈹�   鈹�    鈹斺攢鈹�role.js                # 鏈夊叧鏉冮檺鐨勬帴鍙�
+鈹�   鈹�    鈹斺攢鈹�roleApi.js             # 鏈夊叧鑿滃崟鐨勬帴鍙�
+鈹�   鈹�    鈹斺攢鈹�schedule.js            # 鏈夊叧瀹氭椂浠诲姟鐨勬帴鍙�
+鈹�   鈹�    鈹斺攢鈹�sms.js                 # 鏈夊叧鐭俊鐨勬帴鍙�
+鈹�   鈹�    鈹斺攢鈹�product.js             # 鏈夊叧鍟嗗搧鐨勬帴鍙�
+鈹�   鈹�    鈹斺攢鈹�system.js              # 鏈夊叧鍗忚鐨勬帴鍙�
+鈹�   鈹�    鈹斺攢鈹�systemadmin.js         # 鏈夊叧绠$悊鍛樼殑鎺ュ彛
+鈹�   鈹�    鈹斺攢鈹�systemConfig.js        # 鏈夊叧绯荤粺閰嶇疆鐨勬帴鍙�
+鈹�   鈹�    鈹斺攢鈹�systemFormConfig.js    # 鏈夊叧琛ㄥ崟閰嶇疆鐨勬帴鍙�
+鈹�   鈹�    鈹斺攢鈹�systemGroup.js         # 鏈夊叧缁勫悎鏁版嵁鐨勬帴鍙�
+鈹�   鈹�    鈹斺攢鈹�systemSetting.js       # 鏈夊叧涓婁紶鏂囦欢鐨勬帴鍙�
+鈹�   鈹�    鈹斺攢鈹�user.js                # 鏈夊叧鐢ㄦ埛鐨勬帴鍙�
+鈹�   鈹�    鈹斺攢鈹�videoChannel.js        # 鏈夊叧瑙嗛鍙风殑鎺ュ彛
+鈹�   鈹�    鈹斺攢鈹�wxApi.js               # 鏈夊叧寰俊鐨勬帴鍙�
+鈹�   鈹溾攢鈹� assets                 # 鍥剧墖銆乻vg 绛夐潤鎬佽祫婧�
+鈹�   鈹溾攢鈹� components            # 鍏叡缁勪欢
+鈹�   鈹�    鈹斺攢鈹�articleList       # 鏂囩珷鍒楄〃
+鈹�   鈹�    鈹斺攢鈹�base              # 鍏叡缁勪欢
+鈹�   鈹�    鈹斺攢鈹�Breadcrumb        # 澶撮儴鏍囬鏍囩
+鈹�   鈹�    鈹斺攢鈹�cards             # 缁熻灏忔柟鍧�
+鈹�   鈹�    鈹斺攢鈹�echartsNew        # 缁熻鍥�
+鈹�   鈹�    鈹斺攢鈹�Category          # 鍟嗗搧鍒嗙被銆佹枃瀛楀垎绫� 
+鈹�   鈹�    鈹斺攢鈹�FormGenerator     # 琛ㄥ崟閰嶇疆
+鈹�   鈹�    鈹斺攢鈹�goodsList         # 鍟嗗搧鍒楄〃
+鈹�   鈹�    鈹斺攢鈹�Hamburger         # 瀵艰埅鏀剁缉缁勪欢
+鈹�   鈹�    鈹斺攢鈹�HeaderSearch      # 瀵艰埅鎼滅储缁勪欢
+鈹�   鈹�    鈹斺攢鈹�linkaddress       # 椤甸潰璁捐绉诲姩绔〉闈㈣矾鐢�
+鈹�   鈹�    鈹斺攢鈹�merchantName      # 鍟嗘埛鍚嶇О鎼滅储缁勪欢
+鈹�   鈹�    鈹斺攢鈹�OrderDetail       # 璁㈠崟璇︽儏
+鈹�   鈹�    鈹斺攢鈹�RightPanel        # 鍙充晶璁剧疆鎸夐挳锛岃缃鑸浉鍏�
+鈹�   鈹�    鈹斺攢鈹�Screenfull        # 鍏ㄥ睆
+鈹�   鈹�    鈹斺攢鈹�SvgIcon           # svg鍥炬爣 
+鈹�   鈹�    鈹斺攢鈹�Tinymce           # 瀵屾枃鏈紪杈戝櫒
+鈹�   鈹�    鈹斺攢鈹�TopNav            # 椤堕儴涓�绾у鑸�
+鈹�   鈹�    鈹斺攢鈹�ThemePicker       # 鍙充晶璁剧疆鎸夐挳锛岃缃粍棰橀鑹�
+鈹�   鈹�    鈹斺攢鈹�Upload            # 涓婁紶鏂囦欢缁勪欢
+鈹�   鈹�    鈹斺攢鈹�UploadExcel       # 涓嬭浇Excel
+鈹�   鈹�    鈹斺攢鈹�userList          # 鐢ㄦ埛鍒楄〃
+鈹�   鈹溾攢鈹� layouts               # 瀵艰埅甯冨眬
+鈹�   鈹�    鈹溾攢鈹�index             # 涓婚〉闈�
+鈹�   鈹�    鈹溾攢鈹�components        # 瀵艰埅缁勪欢
+鈹�   鈹�        鈹斺攢鈹�copyright     # 鑴氶儴鐗堟潈淇℃伅
+鈹�   鈹�        鈹斺攢鈹�Settings      # 鍙宠竟灏忔寜閽紝璁剧疆瀵艰埅绛�
+鈹�   鈹�        鈹斺攢鈹�Sidebar       # 渚ц竟瀵艰埅
+鈹�   鈹�        鈹斺攢鈹�TagsView      # tab鏍囩椤靛鑸�
+鈹�   鈹�        鈹斺攢鈹�Navbar        # 澶撮儴瀵艰埅
+鈹�   鈹�        鈹斺攢鈹�AppMain       # 瀵艰埅璺敱
+鈹�   鈹�        鈹斺攢鈹�index.js      # 缁勪欢寮曠敤
+鈹�   鈹�    鈹斺攢鈹�mixins            # 鑷�傚簲澶у皬
+鈹�   鈹溾攢鈹� libs                  # 鍏叡js鏂规硶
+鈹�   鈹�    鈹斺攢鈹�settingMer        # 閰嶇疆璇锋眰鍦板潃
+鈹�   鈹�    鈹斺攢鈹�dialog            # 绉诲姩绔悙涓濆脊绐�
+鈹�   鈹�    鈹斺攢鈹�index.js          # 閰嶇疆鍏ㄥ眬浣跨敤鎻掍欢
+鈹�   鈹�    鈹斺攢鈹�modal-icon.js           # 鍥炬爣搴撴彃浠�
+鈹�   鈹�    鈹斺攢鈹�modal-parserFrom.js     # 鑷畾涔夎〃鍗曞脊绐楁彃浠�
+鈹�   鈹�    鈹斺攢鈹�modal-sure.js           # 纭畾寮圭獥鎻掍欢
+鈹�   鈹�    鈹斺攢鈹�timeOptions.js          # 褰撳墠鏃堕棿鏃ユ湡閫夋嫨鍣ㄧ壒鏈夌殑閫夐」
+鈹�   鈹�    鈹斺攢鈹�wechat.js               # 寰俊鐩稿叧
+鈹�   鈹�    鈹斺攢鈹�yearOptions.js          # 褰撳墠骞翠唤閫夋嫨鍣ㄧ壒鏈夌殑閫夐」
+鈹�   鈹溾攢鈹� views                 # 鎵�鏈夐〉闈�
+鈹�   鈹�    鈹斺攢鈹�login                    # 鐧诲綍
+鈹�   鈹�         鈹斺攢鈹�index               # 鐧诲綍
+鈹�   鈹�    鈹斺攢鈹�dashboard                # 棣栭〉
+鈹�   鈹�    鈹斺攢鈹�error-page               # 閿欒椤�
+鈹�   鈹�         鈹斺攢鈹�404                 # 閿欒椤�404
+鈹�   鈹�         鈹斺攢鈹�403                 # 閿欒椤�403
+鈹�   鈹溾攢鈹� filters                      # 杩囨护鍣�
+鈹�   鈹溾攢鈹� router                       # 璺敱閰嶇疆
+鈹�   鈹�    鈹斺攢鈹�modules                  # 椤甸潰璺敱妯″潡
+鈹�   鈹�         鈹斺攢鈹�content.js          # 鏈夊叧鍐呭 鏂囩珷
+鈹�   鈹�         鈹斺攢鈹�user.js             # 鏈夊叧鐢ㄦ埛
+鈹�   鈹�         鈹斺攢鈹�application.js      # 鏈夊叧搴旂敤
+鈹�   鈹�         鈹斺攢鈹�marketing.js        # 鏈夊叧绉垎銆佺鍒�
+鈹�   鈹�         鈹斺攢鈹�operation.js        # 鏈夊叧璁剧疆
+鈹�   鈹�    鈹斺攢鈹�index.js                 # 璺敱鐨勬眹鎬�
+鈹�   鈹溾攢鈹� store                        # Vuex 鐘舵�佺鐞�
+鈹�   鈹溾攢鈹� utils                        # 鍏ㄥ眬鍏敤鏂规硶
+鈹�   鈹�    鈹斺攢鈹�auth.js                  # Cookies绠$悊
+鈹�   鈹�    鈹斺攢鈹�request.js               # 璇锋眰灏佽
+鈹�   鈹�    鈹斺攢鈹�settingIplatform.js            # 璇锋眰鍦板潃閰嶇疆
+鈹�   鈹�    鈹斺攢鈹�ZBKJIutil.js             # 鍏叡鍑芥暟宸ュ叿
+鈹�   鈹�    鈹斺攢鈹�validate.js              # 鍏叡鏁欐牎楠屽伐鍏�
+鈹�   鈹�    鈹斺攢鈹�parsing.js               # 閫氱敤js鏂规硶灏佽宸ュ叿
+鈹�   鈹�    鈹斺攢鈹�constants.js             # 鍏ㄥ眬闈欐�佸彉閲忓伐鍏�
+鈹�   鈹�    鈹斺攢鈹�clipboard.js             # 绮樿创澶嶅埗宸ュ叿
+鈹�   鈹�    鈹斺攢鈹�permission.js            # 鏉冮檺鍒ゆ柇
+鈹�   鈹溾攢鈹� styles                       # 鏍峰紡绠$悊
+鈹�   鈹溾攢鈹� permission.js                # 璺敱鎷︽埅
+鈹�   鈹溾攢鈹� main.js                      # 鍏ュ彛鏂囦欢 鍔犺浇缁勪欢 鍒濆鍖栫瓑
+鈹�   鈹斺攢鈹� App.vue                      # 鍏ュ彛椤甸潰
+鈹溾攢鈹� tests                      # 娴嬭瘯
+鈹溾攢鈹� .env.xxx                   # 鐜鍙橀噺閰嶇疆
+鈹溾攢鈹� .eslintrc.js               # eslint 閰嶇疆椤�
+鈹溾攢鈹� .babelrc                   # babel-loader 閰嶇疆
+鈹溾攢鈹� .travis.yml                # 鑷姩鍖朇I閰嶇疆
+鈹溾攢鈹� vue.config.js              # vue-cli 閰嶇疆
+鈹溾攢鈹� postcss.config.js          # postcss 閰嶇疆
+鈹斺攢鈹� package.json               # package.json
+
+
+~~~
+## 寮�鍙�
+
+```bash
+# 鍏嬮殕椤圭洰
+git clone https://gitee.com/ZhongBangKeJi/crmeb_java/
+
+# 杩涘叆椤圭洰鐩綍
+cd ##
+
+# 瀹夎渚濊禆
+npm install
+
+# 寤鸿涓嶈鐩存帴浣跨敤 cnpm 瀹夎渚濊禆锛屼細鏈夊悇绉嶈寮傜殑 bug銆傚彲浠ラ�氳繃濡備笅鎿嶄綔瑙e喅 npm 涓嬭浇閫熷害鎱㈢殑闂
+npm install --registry=https://registry.npm.taobao.org
+
+# 鍚姩鏈嶅姟
+npm run dev
+```
+
+娴忚鍣ㄨ闂� http://localhost
+
+## 鍙戝竷
+
+```bash
+# 鏋勫缓娴嬭瘯鐜
+npm run build:stage
+
+# 鏋勫缓鐢熶骇鐜
+npm run build:prod
+```
+
+## 鍏跺畠
+
+```bash
+# 棰勮鍙戝竷鐜鏁堟灉
+npm run preview
+
+# 棰勮鍙戝竷鐜鏁堟灉 + 闈欐�佽祫婧愬垎鏋�
+npm run preview -- --report
+
+# 浠g爜鏍煎紡妫�鏌ュ苟鑷姩淇
+npm run prettier
+```
+
+## 鍙兘闇�瑕佺殑搴�
+```bash
+# 閲嶆柊瀹夎
+npm install --registry=https://registry.npm.taobao.org
+```
+    "highlight.js": "10.7.3",
+
+
diff --git a/project-web/babel.config.js b/project-web/babel.config.js
new file mode 100644
index 0000000..5072fb2
--- /dev/null
+++ b/project-web/babel.config.js
@@ -0,0 +1,10 @@
+module.exports = {
+  presets: [
+    ['@vue/app',
+      {
+        'useBuiltIns': 'entry',
+        polyfills: ['es6.promise', 'es6.symbol']
+      }
+    ]
+  ]
+}
diff --git a/project-web/build/index.js b/project-web/build/index.js
new file mode 100644
index 0000000..0c57de2
--- /dev/null
+++ b/project-web/build/index.js
@@ -0,0 +1,35 @@
+const { run } = require('runjs')
+const chalk = require('chalk')
+const config = require('../vue.config.js')
+const rawArgv = process.argv.slice(2)
+const args = rawArgv.join(' ')
+
+if (process.env.npm_config_preview || rawArgv.includes('--preview')) {
+  const report = rawArgv.includes('--report')
+
+  run(`vue-cli-service build ${args}`)
+
+  const port = 9526
+  const publicPath = config.publicPath
+
+  var connect = require('connect')
+  var serveStatic = require('serve-static')
+  const app = connect()
+
+  app.use(
+    publicPath,
+    serveStatic('./dist', {
+      index: ['index.html', '/']
+    })
+  )
+
+  app.listen(port, function () {
+    console.log(chalk.green(`> Preview at  http://localhost:${port}${publicPath}`))
+    if (report) {
+      console.log(chalk.green(`> Report at  http://localhost:${port}${publicPath}report.html`))
+    }
+
+  })
+} else {
+  run(`vue-cli-service build ${args}`)
+}
diff --git a/project-web/jest.config.js b/project-web/jest.config.js
new file mode 100644
index 0000000..143cdc8
--- /dev/null
+++ b/project-web/jest.config.js
@@ -0,0 +1,24 @@
+module.exports = {
+  moduleFileExtensions: ['js', 'jsx', 'json', 'vue'],
+  transform: {
+    '^.+\\.vue$': 'vue-jest',
+    '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$':
+      'jest-transform-stub',
+    '^.+\\.jsx?$': 'babel-jest'
+  },
+  moduleNameMapper: {
+    '^@/(.*)$': '<rootDir>/src/$1'
+  },
+  snapshotSerializers: ['jest-serializer-vue'],
+  testMatch: [
+    '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)'
+  ],
+  collectCoverageFrom: ['src/utils/**/*.{js,vue}', '!src/utils/auth.js', '!src/utils/request.js', 'src/components/**/*.{js,vue}'],
+  coverageDirectory: '<rootDir>/tests/unit/coverage',
+  // 'collectCoverage': true,
+  'coverageReporters': [
+    'lcov',
+    'text-summary'
+  ],
+  testURL: 'http://localhost/'
+}
diff --git a/project-web/jsconfig.json b/project-web/jsconfig.json
new file mode 100644
index 0000000..958df04
--- /dev/null
+++ b/project-web/jsconfig.json
@@ -0,0 +1,9 @@
+{ 
+  "compilerOptions": {
+    "baseUrl": "./",
+    "paths": {
+        "@/*": ["src/*"]
+    }
+  },
+  "exclude": ["node_modules", "dist"]
+}
\ No newline at end of file
diff --git a/project-web/package.json b/project-web/package.json
new file mode 100644
index 0000000..3aaa013
--- /dev/null
+++ b/project-web/package.json
@@ -0,0 +1,114 @@
+{
+  "name": "psm-web",
+  "version": "0.0.1",
+  "description": "Fixed asset project schedule management.",
+  "author": "king source",
+  "license": "MIT",
+  "scripts": {
+    "dev": "vue-cli-service serve",
+    "build:prod": "vue-cli-service build",
+    "build:stage": "vue-cli-service build --mode staging",
+    "preview": "node build/index.js --preview",
+    "prettier:comment": "鑷姩鏍煎紡鍖栧綋鍓嶇洰褰曚笅鐨勬墍鏈夋枃浠�",
+    "prettier": "prettier --write .",
+    "lint": "eslint --fix --ext .js,.vue src",
+    "test:unit": "jest --clearCache && vue-cli-service test:unit",
+    "test:ci": "npm run lint && npm run test:unit",
+    "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml",
+    "new": "plop"
+  },
+  "husky": {
+    "hooks": {
+      "pre-commit": "lint-staged"
+    }
+  },
+  "lint-staged": {
+    "src/**/*.{js,vue}": [
+      "eslint --fix",
+      "git add"
+    ]
+  },
+  "dependencies": {
+    "@babel/parser": "^7.9.6",
+    "@riophae/vue-treeselect": "0.4.0",
+    "async-validator": "^1.11.2",
+    "axios": "^0.24.0",
+    "babel-polyfill": "^6.26.0",
+    "clipboard": "^2.0.4",
+    "core-js": "^2.6.11",
+    "crypto-js": "^4.1.1",
+    "echarts": "4.2.1",
+    "echarts-wordcloud": "^1.1.3",
+    "element-ui": "2.15.6",
+    "file-saver": "2.0.1",
+    "fuse.js": "3.4.4",
+    "html2canvas": "^1.4.1",
+    "js-cookie": "3.0.1",
+    "jsencrypt": "^3.3.2",
+    "jsonlint": "1.6.3",
+    "jszip": "3.2.1",
+    "mpvue-calendar": "^2.3.7",
+    "normalize.css": "7.0.0",
+    "nprogress": "0.2.0",
+    "path-to-regexp": "2.4.0",
+    "qrcodejs2": "^0.0.2",
+    "sass": "1.26.2",
+    "sass-loader": "^7.2.0",
+    "screenfull": "4.2.0",
+    "script-loader": "0.7.2",
+    "store": "^2.0.12",
+    "throttle-debounce": "^2.1.0",
+    "vconsole": "^3.3.2",
+    "viewerjs": "^1.11.3",
+    "vue": "2.6.10",
+    "vue-awesome-swiper": "^3.1.3",
+    "vue-baidu-map": "^0.21.22",
+    "vue-cropper": "^0.5.8",
+    "vue-echarts": "^4.0.3",
+    "vue-router": "3.0.2",
+    "vue-ydui": "^1.2.6",
+    "vuedraggable": "^2.20.0",
+    "vuex": "3.1.0",
+    "wechat-jssdk": "^5.0.4",
+    "wordcloud": "^1.2.2",
+    "xlsx": "0.14.1"
+  },
+  "devDependencies": {
+    "@babel/core": "7.0.0",
+    "@babel/register": "7.0.0",
+    "@vue/cli-plugin-babel": "3.5.3",
+    "@vue/cli-plugin-eslint": "^3.9.1",
+    "@vue/cli-plugin-unit-jest": "3.5.3",
+    "@vue/cli-service": "3.5.3",
+    "@vue/test-utils": "1.0.0-beta.29",
+    "babel-core": "7.0.0-bridge.0",
+    "babel-jest": "23.6.0",
+    "chalk": "2.4.2",
+    "chokidar": "^3.1.1",
+    "connect": "3.6.6",
+    "eslint": "5.15.3",
+    "eslint-plugin-vue": "5.2.2",
+    "html-webpack-plugin": "3.2.0",
+    "husky": "1.3.1",
+    "lint-staged": "8.1.5",
+    "mockjs": "^1.0.1-beta3",
+    "plop": "2.3.0",
+    "prettier": "^2.5.1",
+    "runjs": "^4.3.2",
+    "script-ext-html-webpack-plugin": "2.1.3",
+    "script-loader": "^0.7.2",
+    "serve-static": "^1.13.2",
+    "svg-sprite-loader": "4.1.3",
+    "svgo": "1.2.0",
+    "vue-lazyload": "^1.3.3",
+    "vue-template-compiler": "2.6.10"
+  },
+  "engines": {
+    "node": ">=8.9",
+    "npm": ">= 3.0.0"
+  },
+  "browserslist": [
+    "> 1%",
+    "last 2 versions"
+  ]
+}
diff --git a/project-web/plop-templates/component/index.hbs b/project-web/plop-templates/component/index.hbs
new file mode 100644
index 0000000..7661055
--- /dev/null
+++ b/project-web/plop-templates/component/index.hbs
@@ -0,0 +1,26 @@
+{{#if template}}
+<template>
+  <div />
+</template>
+{{/if}}
+
+{{#if script}}
+<script>
+export default {
+  name: '{{ properCase name }}',
+  props: {},
+  data() {
+    return {}
+  },
+  created() {},
+  mounted() {},
+  methods: {}
+}
+</script>
+{{/if}}
+
+{{#if style}}
+<style lang="scss" scoped>
+
+</style>
+{{/if}}
diff --git a/project-web/plop-templates/component/prompt.js b/project-web/plop-templates/component/prompt.js
new file mode 100644
index 0000000..9f346ed
--- /dev/null
+++ b/project-web/plop-templates/component/prompt.js
@@ -0,0 +1,55 @@
+const { notEmpty } = require('../utils.js')
+
+module.exports = {
+  description: 'generate vue component',
+  prompts: [{
+    type: 'input',
+    name: 'name',
+    message: 'component name please',
+    validate: notEmpty('name')
+  },
+  {
+    type: 'checkbox',
+    name: 'blocks',
+    message: 'Blocks:',
+    choices: [{
+      name: '<wxTemplate>',
+      value: 'template',
+      checked: true
+    },
+    {
+      name: '<script>',
+      value: 'script',
+      checked: true
+    },
+    {
+      name: 'style',
+      value: 'style',
+      checked: true
+    }
+    ],
+    validate(value) {
+      if (value.indexOf('script') === -1 && value.indexOf('template') === -1) {
+        return 'Components require at least a <script> or <wxTemplate> tag.'
+      }
+      return true
+    }
+  }
+  ],
+  actions: data => {
+    const name = '{{properCase name}}'
+    const actions = [{
+      type: 'add',
+      path: `src/components/${name}/index.vue`,
+      templateFile: 'plop-templates/component/index.hbs',
+      data: {
+        name: name,
+        template: data.blocks.includes('template'),
+        script: data.blocks.includes('script'),
+        style: data.blocks.includes('style')
+      }
+    }]
+
+    return actions
+  }
+}
diff --git a/project-web/plop-templates/store/index.hbs b/project-web/plop-templates/store/index.hbs
new file mode 100644
index 0000000..4f8e2dc
--- /dev/null
+++ b/project-web/plop-templates/store/index.hbs
@@ -0,0 +1,16 @@
+{{#if state}}
+const state = {}
+{{/if}}
+
+{{#if mutations}}
+const mutations = {}
+{{/if}}
+
+{{#if actions}}
+const actions = {}
+{{/if}}
+
+export default {
+  namespaced: true,
+  {{options}}
+}
diff --git a/project-web/plop-templates/store/prompt.js b/project-web/plop-templates/store/prompt.js
new file mode 100644
index 0000000..bcbc11d
--- /dev/null
+++ b/project-web/plop-templates/store/prompt.js
@@ -0,0 +1,62 @@
+const { notEmpty } = require('../utils.js')
+
+module.exports = {
+  description: 'generate store',
+  prompts: [{
+    type: 'input',
+    name: 'name',
+    message: 'store name please',
+    validate: notEmpty('name')
+  },
+  {
+    type: 'checkbox',
+    name: 'blocks',
+    message: 'Blocks:',
+    choices: [{
+      name: 'state',
+      value: 'state',
+      checked: true
+    },
+    {
+      name: 'mutations',
+      value: 'mutations',
+      checked: true
+    },
+    {
+      name: 'actions',
+      value: 'actions',
+      checked: true
+    }
+    ],
+    validate(value) {
+      if (!value.includes('state') || !value.includes('mutations')) {
+        return 'store require at least state and mutations'
+      }
+      return true
+    }
+  }
+  ],
+  actions(data) {
+    const name = '{{name}}'
+    const { blocks } = data
+    const options = ['state', 'mutations']
+    const joinFlag = `,
+  `
+    if (blocks.length === 3) {
+      options.push('actions')
+    }
+
+    const actions = [{
+      type: 'add',
+      path: `src/store/modules/${name}.js`,
+      templateFile: 'plop-templates/store/index.hbs',
+      data: {
+        options: options.join(joinFlag),
+        state: blocks.includes('state'),
+        mutations: blocks.includes('mutations'),
+        actions: blocks.includes('actions')
+      }
+    }]
+    return actions
+  }
+}
diff --git a/project-web/plop-templates/utils.js b/project-web/plop-templates/utils.js
new file mode 100644
index 0000000..0310ca0
--- /dev/null
+++ b/project-web/plop-templates/utils.js
@@ -0,0 +1,9 @@
+exports.notEmpty = name => {
+  return v => {
+    if (!v || v.trim === '') {
+      return `${name} is required`
+    } else {
+      return true
+    }
+  }
+}
diff --git a/project-web/plop-templates/view/index.hbs b/project-web/plop-templates/view/index.hbs
new file mode 100644
index 0000000..7661055
--- /dev/null
+++ b/project-web/plop-templates/view/index.hbs
@@ -0,0 +1,26 @@
+{{#if template}}
+<template>
+  <div />
+</template>
+{{/if}}
+
+{{#if script}}
+<script>
+export default {
+  name: '{{ properCase name }}',
+  props: {},
+  data() {
+    return {}
+  },
+  created() {},
+  mounted() {},
+  methods: {}
+}
+</script>
+{{/if}}
+
+{{#if style}}
+<style lang="scss" scoped>
+
+</style>
+{{/if}}
diff --git a/project-web/plop-templates/view/prompt.js b/project-web/plop-templates/view/prompt.js
new file mode 100644
index 0000000..10e00d5
--- /dev/null
+++ b/project-web/plop-templates/view/prompt.js
@@ -0,0 +1,55 @@
+const { notEmpty } = require('../utils.js')
+
+module.exports = {
+  description: 'generate a view',
+  prompts: [{
+    type: 'input',
+    name: 'name',
+    message: 'view name please',
+    validate: notEmpty('name')
+  },
+  {
+    type: 'checkbox',
+    name: 'blocks',
+    message: 'Blocks:',
+    choices: [{
+      name: '<wxTemplate>',
+      value: 'template',
+      checked: true
+    },
+    {
+      name: '<script>',
+      value: 'script',
+      checked: true
+    },
+    {
+      name: 'style',
+      value: 'style',
+      checked: true
+    }
+    ],
+    validate(value) {
+      if (value.indexOf('script') === -1 && value.indexOf('template') === -1) {
+        return 'View require at least a <script> or <wxTemplate> tag.'
+      }
+      return true
+    }
+  }
+  ],
+  actions: data => {
+    const name = '{{name}}'
+    const actions = [{
+      type: 'add',
+      path: `src/views/${name}/index.vue`,
+      templateFile: 'plop-templates/view/index.hbs',
+      data: {
+        name: name,
+        template: data.blocks.includes('template'),
+        script: data.blocks.includes('script'),
+        style: data.blocks.includes('style')
+      }
+    }]
+
+    return actions
+  }
+}
diff --git a/project-web/plopfile.js b/project-web/plopfile.js
new file mode 100644
index 0000000..57387bf
--- /dev/null
+++ b/project-web/plopfile.js
@@ -0,0 +1,9 @@
+const viewGenerator = require('./plop-templates/view/prompt')
+const componentGenerator = require('./plop-templates/component/prompt')
+const storeGenerator = require('./plop-templates/store/prompt.js')
+
+module.exports = function(plop) {
+  plop.setGenerator('view', viewGenerator)
+  plop.setGenerator('component', componentGenerator)
+  plop.setGenerator('store', storeGenerator)
+}
diff --git a/project-web/postcss.config.js b/project-web/postcss.config.js
new file mode 100644
index 0000000..961986e
--- /dev/null
+++ b/project-web/postcss.config.js
@@ -0,0 +1,5 @@
+module.exports = {
+  plugins: {
+    autoprefixer: {}
+  }
+}
diff --git a/project-web/public/favicon.ico b/project-web/public/favicon.ico
new file mode 100644
index 0000000..95a0ea1
--- /dev/null
+++ b/project-web/public/favicon.ico
Binary files differ
diff --git a/project-web/public/index.html b/project-web/public/index.html
new file mode 100644
index 0000000..729a200
--- /dev/null
+++ b/project-web/public/index.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="renderer" content="webkit">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
+    <meta name="author" content="CRMEB! Team and CRMEB UI Team" />
+    <meta name="copyright" content="2023-2033 KEY SOURCE" />
+    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+    <title><%= webpackConfig.name %></title>
+  </head>
+  <body>
+    <script src="<%= BASE_URL %>static/tinymce4.7.5/tinymce.min.js"></script>
+    <script src="<%= BASE_URL %>static/js/jquery.min.js"></script>
+    <script src="<%= BASE_URL %>static/js/reconnecting-websocket.js"></script>
+    <script src="<%= BASE_URL %>static/js/niuniucapture.js"></script>
+    <script src="<%= BASE_URL %>static/js/capturewrapper.js"></script>
+    <script  src="https://map.qq.com/api/gljs?v=1.exp&key=PGNBZ-XZ7C3-MPE34-OF2VP-7MRH6-BOFUG"></script>
+    <div id="app"></div>
+    <!-- built files will be auto injected -->
+    <div class="pre-loader" id="pre-loader">
+      <div class="inner one"></div>
+      <div class="inner two"></div>
+      <div class="inner three"></div>
+    </div>
+  </body>
+</html>
diff --git a/project-web/public/preview.html b/project-web/public/preview.html
new file mode 100644
index 0000000..8e43983
--- /dev/null
+++ b/project-web/public/preview.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html lang="zh">
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width,initial-scale=1.0">
+    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+    <title>form-generator-preview</title>
+    <link href="https://cdn.bootcss.com/element-ui/2.12.0/theme-chalk/index.css" rel="stylesheet">
+    <script src="https://cdn.bootcss.com/vue/2.6.10/vue.min.js"></script>
+    <script src="https://cdn.bootcss.com/vue-router/3.1.3/vue-router.min.js"></script>
+    <!-- <script src="https://cdn.bootcss.com/axios/0.19.0/axios.min.js"></script> -->
+    <script src="https://cdn.bootcss.com/element-ui/2.12.0/index.js"></script>
+    <style>
+      body{
+        margin: 0;
+        padding: 0;
+        overflow-x: hidden;
+        -moz-osx-font-smoothing: grayscale;
+        -webkit-font-smoothing: antialiased;
+        text-rendering: optimizeLegibility;
+        height: calc(100vh - 33px);
+        padding: 12px;
+        box-sizing: border-box;
+        font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;
+      }
+      input, textarea{
+        font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;
+      }
+    </style>
+  </head>
+  <body>
+    <noscript>
+      <strong>鎶辨瓑锛宩avascript琚鐢紝璇峰紑鍚悗閲嶈瘯銆�</strong>
+    </noscript>
+    <div id="previewApp"></div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/project-web/public/static/config.js b/project-web/public/static/config.js
new file mode 100644
index 0000000..96f2e66
--- /dev/null
+++ b/project-web/public/static/config.js
@@ -0,0 +1,23 @@
+
+// 璇锋眰鎺ュ彛鍦板潃 濡傛灉娌℃湁閰嶇疆鑷姩鑾峰彇褰撳墠缃戝潃璺緞
+const VUE_APP_API_URL = process.env.VUE_APP_BASE_API || `${location.origin}`;
+const VUE_APP_WS_URL =
+  process.env.VUE_APP_WS_URL || (location.protocol === 'https' ? 'wss' : 'ws') + ':' + location.hostname;
+
+const SettingIplatform = {
+  // 鏈嶅姟鍣ㄥ湴鍧�
+  // 鏈嶅姟鍣ㄥ湴鍧�
+  httpUrl: VUE_APP_API_URL,
+  // 涓婁紶璺緞
+  ftpUrl: 'http://172.16.60.209:8082/progress',//寮�鍙�
+  // ftpUrl:'https://jmy.jinmingyuan.com/progress',// 娴嬭瘯,
+// 鎺ュ彛璇锋眰鍦板潃
+// apiBaseURL: 'http://116.198.39.83:8082/progress', // 姝e紡
+  apiBaseURL: 'http://172.16.60.90:8082/progress',//寮�鍙�
+// apiBaseURL: 'https://jmy.jinmingyuan.com/progress',// 娴嬭瘯,
+  // socket杩炴帴
+  wsSocketUrl: VUE_APP_WS_URL,
+  debug: true //璋冭瘯寮�鍏�  true鏃朵細杈撳嚭璇锋眰鏃ュ織
+};
+
+export default SettingIplatform;
diff --git a/project-web/public/static/emoji/100.gif b/project-web/public/static/emoji/100.gif
new file mode 100644
index 0000000..2378eb4
--- /dev/null
+++ b/project-web/public/static/emoji/100.gif
Binary files differ
diff --git a/project-web/public/static/emoji/101.gif b/project-web/public/static/emoji/101.gif
new file mode 100644
index 0000000..574caa7
--- /dev/null
+++ b/project-web/public/static/emoji/101.gif
Binary files differ
diff --git a/project-web/public/static/emoji/102.gif b/project-web/public/static/emoji/102.gif
new file mode 100644
index 0000000..64b71c7
--- /dev/null
+++ b/project-web/public/static/emoji/102.gif
Binary files differ
diff --git a/project-web/public/static/emoji/103.gif b/project-web/public/static/emoji/103.gif
new file mode 100644
index 0000000..ddc55f6
--- /dev/null
+++ b/project-web/public/static/emoji/103.gif
Binary files differ
diff --git a/project-web/public/static/emoji/104.gif b/project-web/public/static/emoji/104.gif
new file mode 100644
index 0000000..aa9f755
--- /dev/null
+++ b/project-web/public/static/emoji/104.gif
Binary files differ
diff --git a/project-web/public/static/emoji/105.gif b/project-web/public/static/emoji/105.gif
new file mode 100644
index 0000000..a2069d9
--- /dev/null
+++ b/project-web/public/static/emoji/105.gif
Binary files differ
diff --git a/project-web/public/static/emoji/106.gif b/project-web/public/static/emoji/106.gif
new file mode 100644
index 0000000..364a2f2
--- /dev/null
+++ b/project-web/public/static/emoji/106.gif
Binary files differ
diff --git a/project-web/public/static/emoji/107.gif b/project-web/public/static/emoji/107.gif
new file mode 100644
index 0000000..eb82906
--- /dev/null
+++ b/project-web/public/static/emoji/107.gif
Binary files differ
diff --git a/project-web/public/static/emoji/108.gif b/project-web/public/static/emoji/108.gif
new file mode 100644
index 0000000..d6e17f7
--- /dev/null
+++ b/project-web/public/static/emoji/108.gif
Binary files differ
diff --git a/project-web/public/static/emoji/109.gif b/project-web/public/static/emoji/109.gif
new file mode 100644
index 0000000..e38ccd8
--- /dev/null
+++ b/project-web/public/static/emoji/109.gif
Binary files differ
diff --git a/project-web/public/static/emoji/110.gif b/project-web/public/static/emoji/110.gif
new file mode 100644
index 0000000..fb4daf1
--- /dev/null
+++ b/project-web/public/static/emoji/110.gif
Binary files differ
diff --git a/project-web/public/static/emoji/111.gif b/project-web/public/static/emoji/111.gif
new file mode 100644
index 0000000..156bd67
--- /dev/null
+++ b/project-web/public/static/emoji/111.gif
Binary files differ
diff --git a/project-web/public/static/emoji/112.gif b/project-web/public/static/emoji/112.gif
new file mode 100644
index 0000000..4ee3c71
--- /dev/null
+++ b/project-web/public/static/emoji/112.gif
Binary files differ
diff --git a/project-web/public/static/emoji/113.gif b/project-web/public/static/emoji/113.gif
new file mode 100644
index 0000000..bcdf0ff
--- /dev/null
+++ b/project-web/public/static/emoji/113.gif
Binary files differ
diff --git a/project-web/public/static/emoji/114.gif b/project-web/public/static/emoji/114.gif
new file mode 100644
index 0000000..9778059
--- /dev/null
+++ b/project-web/public/static/emoji/114.gif
Binary files differ
diff --git a/project-web/public/static/emoji/115.gif b/project-web/public/static/emoji/115.gif
new file mode 100644
index 0000000..87a52f3
--- /dev/null
+++ b/project-web/public/static/emoji/115.gif
Binary files differ
diff --git a/project-web/public/static/emoji/116.gif b/project-web/public/static/emoji/116.gif
new file mode 100644
index 0000000..73af643
--- /dev/null
+++ b/project-web/public/static/emoji/116.gif
Binary files differ
diff --git a/project-web/public/static/emoji/117.gif b/project-web/public/static/emoji/117.gif
new file mode 100644
index 0000000..0468b91
--- /dev/null
+++ b/project-web/public/static/emoji/117.gif
Binary files differ
diff --git a/project-web/public/static/emoji/118.gif b/project-web/public/static/emoji/118.gif
new file mode 100644
index 0000000..a877841
--- /dev/null
+++ b/project-web/public/static/emoji/118.gif
Binary files differ
diff --git a/project-web/public/static/emoji/119.gif b/project-web/public/static/emoji/119.gif
new file mode 100644
index 0000000..421062d
--- /dev/null
+++ b/project-web/public/static/emoji/119.gif
Binary files differ
diff --git a/project-web/public/static/emoji/120.gif b/project-web/public/static/emoji/120.gif
new file mode 100644
index 0000000..b1ef5c7
--- /dev/null
+++ b/project-web/public/static/emoji/120.gif
Binary files differ
diff --git a/project-web/public/static/emoji/121.gif b/project-web/public/static/emoji/121.gif
new file mode 100644
index 0000000..97495df
--- /dev/null
+++ b/project-web/public/static/emoji/121.gif
Binary files differ
diff --git a/project-web/public/static/emoji/122.gif b/project-web/public/static/emoji/122.gif
new file mode 100644
index 0000000..8623717
--- /dev/null
+++ b/project-web/public/static/emoji/122.gif
Binary files differ
diff --git a/project-web/public/static/emoji/123.gif b/project-web/public/static/emoji/123.gif
new file mode 100644
index 0000000..72a5f3d
--- /dev/null
+++ b/project-web/public/static/emoji/123.gif
Binary files differ
diff --git a/project-web/public/static/emoji/124.gif b/project-web/public/static/emoji/124.gif
new file mode 100644
index 0000000..9974dbe
--- /dev/null
+++ b/project-web/public/static/emoji/124.gif
Binary files differ
diff --git a/project-web/public/static/emoji/125.gif b/project-web/public/static/emoji/125.gif
new file mode 100644
index 0000000..aaca1f7
--- /dev/null
+++ b/project-web/public/static/emoji/125.gif
Binary files differ
diff --git a/project-web/public/static/emoji/126.gif b/project-web/public/static/emoji/126.gif
new file mode 100644
index 0000000..2aa7522
--- /dev/null
+++ b/project-web/public/static/emoji/126.gif
Binary files differ
diff --git a/project-web/public/static/emoji/127.gif b/project-web/public/static/emoji/127.gif
new file mode 100644
index 0000000..b59f3c6
--- /dev/null
+++ b/project-web/public/static/emoji/127.gif
Binary files differ
diff --git a/project-web/public/static/emoji/128.gif b/project-web/public/static/emoji/128.gif
new file mode 100644
index 0000000..cbed60d
--- /dev/null
+++ b/project-web/public/static/emoji/128.gif
Binary files differ
diff --git a/project-web/public/static/emoji/129.gif b/project-web/public/static/emoji/129.gif
new file mode 100644
index 0000000..05d9353
--- /dev/null
+++ b/project-web/public/static/emoji/129.gif
Binary files differ
diff --git a/project-web/public/static/emoji/130.gif b/project-web/public/static/emoji/130.gif
new file mode 100644
index 0000000..ae2036b
--- /dev/null
+++ b/project-web/public/static/emoji/130.gif
Binary files differ
diff --git a/project-web/public/static/emoji/131.gif b/project-web/public/static/emoji/131.gif
new file mode 100644
index 0000000..dbba4ca
--- /dev/null
+++ b/project-web/public/static/emoji/131.gif
Binary files differ
diff --git a/project-web/public/static/emoji/132.gif b/project-web/public/static/emoji/132.gif
new file mode 100644
index 0000000..652ec1c
--- /dev/null
+++ b/project-web/public/static/emoji/132.gif
Binary files differ
diff --git a/project-web/public/static/emoji/133.gif b/project-web/public/static/emoji/133.gif
new file mode 100644
index 0000000..8e335c4
--- /dev/null
+++ b/project-web/public/static/emoji/133.gif
Binary files differ
diff --git a/project-web/public/static/emoji/134.gif b/project-web/public/static/emoji/134.gif
new file mode 100644
index 0000000..fcf91ea
--- /dev/null
+++ b/project-web/public/static/emoji/134.gif
Binary files differ
diff --git a/project-web/public/static/emoji/135.gif b/project-web/public/static/emoji/135.gif
new file mode 100644
index 0000000..003124b
--- /dev/null
+++ b/project-web/public/static/emoji/135.gif
Binary files differ
diff --git a/project-web/public/static/emoji/136.gif b/project-web/public/static/emoji/136.gif
new file mode 100644
index 0000000..b2080f2
--- /dev/null
+++ b/project-web/public/static/emoji/136.gif
Binary files differ
diff --git a/project-web/public/static/emoji/137.gif b/project-web/public/static/emoji/137.gif
new file mode 100644
index 0000000..de27554
--- /dev/null
+++ b/project-web/public/static/emoji/137.gif
Binary files differ
diff --git a/project-web/public/static/emoji/138.gif b/project-web/public/static/emoji/138.gif
new file mode 100644
index 0000000..293a32f
--- /dev/null
+++ b/project-web/public/static/emoji/138.gif
Binary files differ
diff --git a/project-web/public/static/emoji/139.gif b/project-web/public/static/emoji/139.gif
new file mode 100644
index 0000000..55631ca
--- /dev/null
+++ b/project-web/public/static/emoji/139.gif
Binary files differ
diff --git a/project-web/public/static/emoji/140.gif b/project-web/public/static/emoji/140.gif
new file mode 100644
index 0000000..a5d3c79
--- /dev/null
+++ b/project-web/public/static/emoji/140.gif
Binary files differ
diff --git a/project-web/public/static/emoji/141.gif b/project-web/public/static/emoji/141.gif
new file mode 100644
index 0000000..3c16c48
--- /dev/null
+++ b/project-web/public/static/emoji/141.gif
Binary files differ
diff --git a/project-web/public/static/emoji/142.gif b/project-web/public/static/emoji/142.gif
new file mode 100644
index 0000000..627c579
--- /dev/null
+++ b/project-web/public/static/emoji/142.gif
Binary files differ
diff --git a/project-web/public/static/emoji/143.gif b/project-web/public/static/emoji/143.gif
new file mode 100644
index 0000000..4023df7
--- /dev/null
+++ b/project-web/public/static/emoji/143.gif
Binary files differ
diff --git a/project-web/public/static/emoji/144.gif b/project-web/public/static/emoji/144.gif
new file mode 100644
index 0000000..a9b8c84
--- /dev/null
+++ b/project-web/public/static/emoji/144.gif
Binary files differ
diff --git a/project-web/public/static/emoji/145.gif b/project-web/public/static/emoji/145.gif
new file mode 100644
index 0000000..d6db48f
--- /dev/null
+++ b/project-web/public/static/emoji/145.gif
Binary files differ
diff --git a/project-web/public/static/emoji/146.gif b/project-web/public/static/emoji/146.gif
new file mode 100644
index 0000000..0f03b7d
--- /dev/null
+++ b/project-web/public/static/emoji/146.gif
Binary files differ
diff --git a/project-web/public/static/emoji/147.gif b/project-web/public/static/emoji/147.gif
new file mode 100644
index 0000000..6e2f1fd
--- /dev/null
+++ b/project-web/public/static/emoji/147.gif
Binary files differ
diff --git a/project-web/public/static/emoji/148.gif b/project-web/public/static/emoji/148.gif
new file mode 100644
index 0000000..11e7ddc
--- /dev/null
+++ b/project-web/public/static/emoji/148.gif
Binary files differ
diff --git a/project-web/public/static/emoji/149.gif b/project-web/public/static/emoji/149.gif
new file mode 100644
index 0000000..f85e1c0
--- /dev/null
+++ b/project-web/public/static/emoji/149.gif
Binary files differ
diff --git a/project-web/public/static/emoji/150.gif b/project-web/public/static/emoji/150.gif
new file mode 100644
index 0000000..444083f
--- /dev/null
+++ b/project-web/public/static/emoji/150.gif
Binary files differ
diff --git a/project-web/public/static/emoji/151.gif b/project-web/public/static/emoji/151.gif
new file mode 100644
index 0000000..c875ea7
--- /dev/null
+++ b/project-web/public/static/emoji/151.gif
Binary files differ
diff --git a/project-web/public/static/emoji/152.gif b/project-web/public/static/emoji/152.gif
new file mode 100644
index 0000000..df63eac
--- /dev/null
+++ b/project-web/public/static/emoji/152.gif
Binary files differ
diff --git a/project-web/public/static/emoji/153.gif b/project-web/public/static/emoji/153.gif
new file mode 100644
index 0000000..dc696d6
--- /dev/null
+++ b/project-web/public/static/emoji/153.gif
Binary files differ
diff --git a/project-web/public/static/emoji/154.gif b/project-web/public/static/emoji/154.gif
new file mode 100644
index 0000000..d28380b
--- /dev/null
+++ b/project-web/public/static/emoji/154.gif
Binary files differ
diff --git a/project-web/public/static/emoji/155.gif b/project-web/public/static/emoji/155.gif
new file mode 100644
index 0000000..9042b9d
--- /dev/null
+++ b/project-web/public/static/emoji/155.gif
Binary files differ
diff --git a/project-web/public/static/emoji/156.gif b/project-web/public/static/emoji/156.gif
new file mode 100644
index 0000000..edf96f0
--- /dev/null
+++ b/project-web/public/static/emoji/156.gif
Binary files differ
diff --git a/project-web/public/static/emoji/157.gif b/project-web/public/static/emoji/157.gif
new file mode 100644
index 0000000..da352f3
--- /dev/null
+++ b/project-web/public/static/emoji/157.gif
Binary files differ
diff --git a/project-web/public/static/emoji/158.gif b/project-web/public/static/emoji/158.gif
new file mode 100644
index 0000000..4faf41f
--- /dev/null
+++ b/project-web/public/static/emoji/158.gif
Binary files differ
diff --git a/project-web/public/static/emoji/159.gif b/project-web/public/static/emoji/159.gif
new file mode 100644
index 0000000..918288b
--- /dev/null
+++ b/project-web/public/static/emoji/159.gif
Binary files differ
diff --git a/project-web/public/static/emoji/160.gif b/project-web/public/static/emoji/160.gif
new file mode 100644
index 0000000..869559e
--- /dev/null
+++ b/project-web/public/static/emoji/160.gif
Binary files differ
diff --git a/project-web/public/static/emoji/161.gif b/project-web/public/static/emoji/161.gif
new file mode 100644
index 0000000..d347251
--- /dev/null
+++ b/project-web/public/static/emoji/161.gif
Binary files differ
diff --git a/project-web/public/static/emoji/162.gif b/project-web/public/static/emoji/162.gif
new file mode 100644
index 0000000..be2b213
--- /dev/null
+++ b/project-web/public/static/emoji/162.gif
Binary files differ
diff --git a/project-web/public/static/emoji/163.gif b/project-web/public/static/emoji/163.gif
new file mode 100644
index 0000000..d58fcf6
--- /dev/null
+++ b/project-web/public/static/emoji/163.gif
Binary files differ
diff --git a/project-web/public/static/emoji/164.gif b/project-web/public/static/emoji/164.gif
new file mode 100644
index 0000000..c4e00bd
--- /dev/null
+++ b/project-web/public/static/emoji/164.gif
Binary files differ
diff --git a/project-web/public/static/emoji/165.gif b/project-web/public/static/emoji/165.gif
new file mode 100644
index 0000000..3549c83
--- /dev/null
+++ b/project-web/public/static/emoji/165.gif
Binary files differ
diff --git a/project-web/public/static/emoji/166.gif b/project-web/public/static/emoji/166.gif
new file mode 100644
index 0000000..f99e583
--- /dev/null
+++ b/project-web/public/static/emoji/166.gif
Binary files differ
diff --git a/project-web/public/static/emoji/167.gif b/project-web/public/static/emoji/167.gif
new file mode 100644
index 0000000..441da4a
--- /dev/null
+++ b/project-web/public/static/emoji/167.gif
Binary files differ
diff --git a/project-web/public/static/emoji/168.gif b/project-web/public/static/emoji/168.gif
new file mode 100644
index 0000000..b74d3cb
--- /dev/null
+++ b/project-web/public/static/emoji/168.gif
Binary files differ
diff --git a/project-web/public/static/emoji/169.gif b/project-web/public/static/emoji/169.gif
new file mode 100644
index 0000000..2639428
--- /dev/null
+++ b/project-web/public/static/emoji/169.gif
Binary files differ
diff --git a/project-web/public/static/emoji/170.gif b/project-web/public/static/emoji/170.gif
new file mode 100644
index 0000000..5d96fa5
--- /dev/null
+++ b/project-web/public/static/emoji/170.gif
Binary files differ
diff --git a/project-web/public/static/emoji/171.gif b/project-web/public/static/emoji/171.gif
new file mode 100644
index 0000000..8053885
--- /dev/null
+++ b/project-web/public/static/emoji/171.gif
Binary files differ
diff --git a/project-web/public/static/emoji/172.gif b/project-web/public/static/emoji/172.gif
new file mode 100644
index 0000000..ae51343
--- /dev/null
+++ b/project-web/public/static/emoji/172.gif
Binary files differ
diff --git a/project-web/public/static/emoji/173.gif b/project-web/public/static/emoji/173.gif
new file mode 100644
index 0000000..c0293c3
--- /dev/null
+++ b/project-web/public/static/emoji/173.gif
Binary files differ
diff --git a/project-web/public/static/emoji/174.gif b/project-web/public/static/emoji/174.gif
new file mode 100644
index 0000000..31203c5
--- /dev/null
+++ b/project-web/public/static/emoji/174.gif
Binary files differ
diff --git a/project-web/public/static/emoji/175.gif b/project-web/public/static/emoji/175.gif
new file mode 100644
index 0000000..f71d4a1
--- /dev/null
+++ b/project-web/public/static/emoji/175.gif
Binary files differ
diff --git a/project-web/public/static/emoji/176.gif b/project-web/public/static/emoji/176.gif
new file mode 100644
index 0000000..41f821e
--- /dev/null
+++ b/project-web/public/static/emoji/176.gif
Binary files differ
diff --git a/project-web/public/static/emoji/177.gif b/project-web/public/static/emoji/177.gif
new file mode 100644
index 0000000..8f882f5
--- /dev/null
+++ b/project-web/public/static/emoji/177.gif
Binary files differ
diff --git a/project-web/public/static/emoji/178.gif b/project-web/public/static/emoji/178.gif
new file mode 100644
index 0000000..557551d
--- /dev/null
+++ b/project-web/public/static/emoji/178.gif
Binary files differ
diff --git a/project-web/public/static/emoji/179.gif b/project-web/public/static/emoji/179.gif
new file mode 100644
index 0000000..6bc874d
--- /dev/null
+++ b/project-web/public/static/emoji/179.gif
Binary files differ
diff --git a/project-web/public/static/emoji/180.gif b/project-web/public/static/emoji/180.gif
new file mode 100644
index 0000000..9a77936
--- /dev/null
+++ b/project-web/public/static/emoji/180.gif
Binary files differ
diff --git a/project-web/public/static/emoji/181.gif b/project-web/public/static/emoji/181.gif
new file mode 100644
index 0000000..2329101
--- /dev/null
+++ b/project-web/public/static/emoji/181.gif
Binary files differ
diff --git a/project-web/public/static/emoji/182.gif b/project-web/public/static/emoji/182.gif
new file mode 100644
index 0000000..644748a
--- /dev/null
+++ b/project-web/public/static/emoji/182.gif
Binary files differ
diff --git a/project-web/public/static/emoji/183.gif b/project-web/public/static/emoji/183.gif
new file mode 100644
index 0000000..fbf275b
--- /dev/null
+++ b/project-web/public/static/emoji/183.gif
Binary files differ
diff --git a/project-web/public/static/emoji/184.gif b/project-web/public/static/emoji/184.gif
new file mode 100644
index 0000000..bfc39e4
--- /dev/null
+++ b/project-web/public/static/emoji/184.gif
Binary files differ
diff --git a/project-web/public/static/emoji/185.gif b/project-web/public/static/emoji/185.gif
new file mode 100644
index 0000000..f1f6aa3
--- /dev/null
+++ b/project-web/public/static/emoji/185.gif
Binary files differ
diff --git a/project-web/public/static/emoji/186.gif b/project-web/public/static/emoji/186.gif
new file mode 100644
index 0000000..860885d
--- /dev/null
+++ b/project-web/public/static/emoji/186.gif
Binary files differ
diff --git a/project-web/public/static/emoji/187.gif b/project-web/public/static/emoji/187.gif
new file mode 100644
index 0000000..3b88548
--- /dev/null
+++ b/project-web/public/static/emoji/187.gif
Binary files differ
diff --git a/project-web/public/static/emoji/188.gif b/project-web/public/static/emoji/188.gif
new file mode 100644
index 0000000..947934f
--- /dev/null
+++ b/project-web/public/static/emoji/188.gif
Binary files differ
diff --git a/project-web/public/static/emoji/189.gif b/project-web/public/static/emoji/189.gif
new file mode 100644
index 0000000..fdb9f32
--- /dev/null
+++ b/project-web/public/static/emoji/189.gif
Binary files differ
diff --git a/project-web/public/static/emoji/190.gif b/project-web/public/static/emoji/190.gif
new file mode 100644
index 0000000..ddd6178
--- /dev/null
+++ b/project-web/public/static/emoji/190.gif
Binary files differ
diff --git a/project-web/public/static/emoji/191.gif b/project-web/public/static/emoji/191.gif
new file mode 100644
index 0000000..35d794c
--- /dev/null
+++ b/project-web/public/static/emoji/191.gif
Binary files differ
diff --git a/project-web/public/static/emoji/192.gif b/project-web/public/static/emoji/192.gif
new file mode 100644
index 0000000..61a10bc
--- /dev/null
+++ b/project-web/public/static/emoji/192.gif
Binary files differ
diff --git a/project-web/public/static/emoji/193.gif b/project-web/public/static/emoji/193.gif
new file mode 100644
index 0000000..ee297f9
--- /dev/null
+++ b/project-web/public/static/emoji/193.gif
Binary files differ
diff --git a/project-web/public/static/emoji/194.gif b/project-web/public/static/emoji/194.gif
new file mode 100644
index 0000000..c8c1fc3
--- /dev/null
+++ b/project-web/public/static/emoji/194.gif
Binary files differ
diff --git a/project-web/public/static/emoji/195.gif b/project-web/public/static/emoji/195.gif
new file mode 100644
index 0000000..5ef6d38
--- /dev/null
+++ b/project-web/public/static/emoji/195.gif
Binary files differ
diff --git a/project-web/public/static/emoji/196.gif b/project-web/public/static/emoji/196.gif
new file mode 100644
index 0000000..a1aee93
--- /dev/null
+++ b/project-web/public/static/emoji/196.gif
Binary files differ
diff --git a/project-web/public/static/emoji/197.gif b/project-web/public/static/emoji/197.gif
new file mode 100644
index 0000000..08a1e56
--- /dev/null
+++ b/project-web/public/static/emoji/197.gif
Binary files differ
diff --git a/project-web/public/static/emoji/198.gif b/project-web/public/static/emoji/198.gif
new file mode 100644
index 0000000..d161bc4
--- /dev/null
+++ b/project-web/public/static/emoji/198.gif
Binary files differ
diff --git a/project-web/public/static/emoji/199.gif b/project-web/public/static/emoji/199.gif
new file mode 100644
index 0000000..58192b0
--- /dev/null
+++ b/project-web/public/static/emoji/199.gif
Binary files differ
diff --git a/project-web/public/static/emoji/200.png b/project-web/public/static/emoji/200.png
new file mode 100644
index 0000000..e24f01a
--- /dev/null
+++ b/project-web/public/static/emoji/200.png
Binary files differ
diff --git a/project-web/public/static/emoji/201.png b/project-web/public/static/emoji/201.png
new file mode 100644
index 0000000..9851384
--- /dev/null
+++ b/project-web/public/static/emoji/201.png
Binary files differ
diff --git a/project-web/public/static/emoji/202.png b/project-web/public/static/emoji/202.png
new file mode 100644
index 0000000..02a5efc
--- /dev/null
+++ b/project-web/public/static/emoji/202.png
Binary files differ
diff --git a/project-web/public/static/emoji/203.png b/project-web/public/static/emoji/203.png
new file mode 100644
index 0000000..6939c18
--- /dev/null
+++ b/project-web/public/static/emoji/203.png
Binary files differ
diff --git a/project-web/public/static/emoji/204.png b/project-web/public/static/emoji/204.png
new file mode 100644
index 0000000..5e7b75c
--- /dev/null
+++ b/project-web/public/static/emoji/204.png
Binary files differ
diff --git a/project-web/public/static/emoji/205.png b/project-web/public/static/emoji/205.png
new file mode 100644
index 0000000..528583f
--- /dev/null
+++ b/project-web/public/static/emoji/205.png
Binary files differ
diff --git a/project-web/public/static/emoji/206.png b/project-web/public/static/emoji/206.png
new file mode 100644
index 0000000..a6d5c99
--- /dev/null
+++ b/project-web/public/static/emoji/206.png
Binary files differ
diff --git a/project-web/public/static/emoji/207.png b/project-web/public/static/emoji/207.png
new file mode 100644
index 0000000..0fdeecf
--- /dev/null
+++ b/project-web/public/static/emoji/207.png
Binary files differ
diff --git a/project-web/public/static/emoji/208.png b/project-web/public/static/emoji/208.png
new file mode 100644
index 0000000..719ccb7
--- /dev/null
+++ b/project-web/public/static/emoji/208.png
Binary files differ
diff --git a/project-web/public/static/emoji/209.png b/project-web/public/static/emoji/209.png
new file mode 100644
index 0000000..2ca6609
--- /dev/null
+++ b/project-web/public/static/emoji/209.png
Binary files differ
diff --git a/project-web/public/static/emoji/210.png b/project-web/public/static/emoji/210.png
new file mode 100644
index 0000000..43c73ed
--- /dev/null
+++ b/project-web/public/static/emoji/210.png
Binary files differ
diff --git a/project-web/public/static/emoji/211.png b/project-web/public/static/emoji/211.png
new file mode 100644
index 0000000..1a83aa2
--- /dev/null
+++ b/project-web/public/static/emoji/211.png
Binary files differ
diff --git a/project-web/public/static/emoji/212.png b/project-web/public/static/emoji/212.png
new file mode 100644
index 0000000..a7bf1d7
--- /dev/null
+++ b/project-web/public/static/emoji/212.png
Binary files differ
diff --git a/project-web/public/static/emoji/213.png b/project-web/public/static/emoji/213.png
new file mode 100644
index 0000000..13448ff
--- /dev/null
+++ b/project-web/public/static/emoji/213.png
Binary files differ
diff --git a/project-web/public/static/emoji/214.png b/project-web/public/static/emoji/214.png
new file mode 100644
index 0000000..c3efa2d
--- /dev/null
+++ b/project-web/public/static/emoji/214.png
Binary files differ
diff --git a/project-web/public/static/emoji/215.png b/project-web/public/static/emoji/215.png
new file mode 100644
index 0000000..f00e239
--- /dev/null
+++ b/project-web/public/static/emoji/215.png
Binary files differ
diff --git a/project-web/public/static/emoji/216.png b/project-web/public/static/emoji/216.png
new file mode 100644
index 0000000..c84c03a
--- /dev/null
+++ b/project-web/public/static/emoji/216.png
Binary files differ
diff --git a/project-web/public/static/emoji/217.png b/project-web/public/static/emoji/217.png
new file mode 100644
index 0000000..85f2ba1
--- /dev/null
+++ b/project-web/public/static/emoji/217.png
Binary files differ
diff --git a/project-web/public/static/emoji/218.png b/project-web/public/static/emoji/218.png
new file mode 100644
index 0000000..8360340
--- /dev/null
+++ b/project-web/public/static/emoji/218.png
Binary files differ
diff --git a/project-web/public/static/emoji/219.png b/project-web/public/static/emoji/219.png
new file mode 100644
index 0000000..af57d5e
--- /dev/null
+++ b/project-web/public/static/emoji/219.png
Binary files differ
diff --git a/project-web/public/static/js/capturewrapper.js b/project-web/public/static/js/capturewrapper.js
new file mode 100644
index 0000000..0b1b9a0
--- /dev/null
+++ b/project-web/public/static/js/capturewrapper.js
@@ -0,0 +1,226 @@
+var savedPictureContent = '';
+var extendName = '';
+var captureObj = null;
+var downloadUrl = '/CaptureInstall.exe?';
+
+/*
+鐢ㄤ簬鍒濆鍖栫墰鐗涙埅鍥炬帶浠讹紝姝ゅ嚱鏁伴渶瑕佸湪椤甸潰鍔犺浇瀹屾垚鍚庣珛鍗宠皟鐢�
+鍦ㄦ鍑芥暟涓紝鎮ㄥ彲浠ヨ缃浉鍏崇殑鎴浘鐨刄I鎺у埗锛屽锛岀敾绗斿ぇ灏忋�佽竟妗嗛鑹茬瓑绛� 銆愯繖閮ㄥ垎淇℃伅鍦╪iuniucapture.js涓篃鏈夐粯璁ゅ�硷紝鐩存帴淇敼榛樿鍊间篃鍙� 銆�
+*/
+function InitCapture() {
+  if (isMacintosh()) {
+    downloadUrl = '/CaptureInstall.dmg?';
+  } else if (isLinux()) {
+    if (isMips()) {
+      downloadUrl = '/CaptureInstall_mips.deb?';
+    } else if (isaarch()) {
+      downloadUrl = '/CaptureInstall_aarch.deb?';
+    } else if (isloongarch()) {
+      downloadUrl = '/CaptureInstall_loongarch64.deb?';
+    } else {
+      downloadUrl = '/CaptureInstall.deb?';
+    }
+  }
+  captureObj = new NiuniuCaptureObject();
+  captureObj.NiuniuAuthKey = "niuniu";
+  //姝ゅ鍙互璁剧疆鐩稿叧鍙傛暟
+  captureObj.TrackColor = rgb2value(255, 0, 0);
+  captureObj.EditBorderColor = rgb2value(0, 0, 255);
+
+  //璁剧疆宸ュ叿鏍忕殑TOOLTIP
+  //captureObj.ToolTipText = "tipRectangle|tipCircle|tipArrow|tipBrush|tipGlitter|tipMosaic|tipText|tipUndo|tipSave|tipCancel|tipFinish|Finish";
+
+  //濡傛灉瑕佽缃澶栫殑鍙傛暟锛屽線濡備笅杩欎釜鏁扮粍涓鍔狅紝渚嬪瑕侀殣钘忔寚瀹氱殑鎸夐挳
+  //captureObj.More_Ext_Params[0] = "2,rectangle|text";
+
+  //璁剧疆鎺т欢鍔犺浇瀹屾垚浠ュ強鎴浘瀹屾垚鐨勫洖璋冨嚱鏁�
+  captureObj.FinishedCallback = OnCaptureFinishedCallback;
+  captureObj.PluginLoadedCallback = PluginLoadedCallback;
+  captureObj.VersionCallback = VersionCallback;
+
+  //鍒濆鍖栨帶浠�
+  captureObj.InitNiuniuCapture();
+}
+
+//鐢ㄤ簬杩斿洖鎺т欢鐨勭増鏈彿
+function VersionCallback(ver) {
+  //captureObj.Version;
+  //鍙互鍦ㄦ鏍规嵁鏈�鏂扮殑鐗堟湰鍙蜂笌鎺т欢杩斿洖鐨勭増鏈彿瀵规瘮锛屽喅瀹氭槸鍚﹁鎻愮ず鍗囩骇
+  //alert(ver);
+}
+
+/*
+褰撴帶浠舵垚鍔熷姞杞藉悗鍥炶皟鐨勭殑鍑芥暟锛屾偍鍙互鍦ㄦ鎺у埗鐩稿簲鐨刄I鏄剧ず
+*/
+function PluginLoadedCallback(success) {
+  if (success) {
+    console.log('鎴浘鎻掍欢鍔犺浇鎴愬姛')
+  }else{
+    console.log('鎴浘鎻掍欢鍔犺浇澶辫触')
+  }
+}
+
+//鏍规嵁鏄惁鏄疌hrome鏂扮増鏈潵鎺у埗涓嬭浇涓嶅悓鐨勬帶浠跺畨瑁呭寘
+function ShowDownLoad() {
+  $('#info').html('濡傛灉瓒呰繃5绉掓棤鍝嶅簲锛岃鐐规<a target="_blank" href="' + downloadUrl + '" + date.getMinutes() + date.getSeconds()">瀹夎</a>');
+}
+
+/*
+褰撴彁绀哄畨瑁呮帶浠跺悗锛岄渶瑕侀噸鏂板姞杞芥帶浠舵潵浣跨敤鎴浘锛�
+涔熸湁閮ㄥ垎鏄渶瑕佸埛鏂版祻瑙堝櫒鐨�
+*/
+function ReloadPlugin() {
+  captureObj.LoadPlugin();
+  $('#btnReload').hide();
+  $('#btnCapture').show();
+  if (captureObj.pluginValid()) {
+    $('#downloadNotice').hide();
+    $('#info').html("鎴浘鎺т欢宸茬粡瀹夎瀹屾瘯锛屾偍鍙互杩涜鎴浘浜嗐��");
+  } else {
+    var browserInfo = "鏌ョ湅鎺т欢鏄惁琚祻瑙堝櫒闃绘锛屾垨閫氳繃娴忚鍣ㄨ缃腑鐨勫姞杞介」鏌ョ湅NiuniuCapture鏄惁鍔犺浇骞舵甯歌繍琛�";
+    $('#info').html('鎴浘鎺т欢鏈兘璇嗗埆鍒帮紝璇锋寜濡備笅姝ラ妫�鏌�:<br/>1. 纭畾鎮ㄥ凡缁忎笅杞芥帶浠跺畨瑁呭寘骞舵甯稿畨瑁� <br/>2. ' + browserInfo
+      + '<br/>3. 鍒锋柊椤甸潰鎴栭噸鏂板惎鍔ㄦ祻瑙堝櫒璇曚笅<br/>4. 濡傛灉浠嶆棫涓嶈兘鎴浘锛屽嚭澶ф嫑鍚э細'
+      + '<a target="_blank" style="color:#ff0000;" class="btn" href="http://shang.qq.com/wpa/qunwpa?idkey=a9dab7a14df03d19a2833e6b5f17a33639027d06213cf61bdb7554b04492b6e5">涓�閿姞缇ゆ眰鍔�</a>');
+  }
+}
+
+/*
+鎴浘鍏ュ彛鍑芥暟锛岀敤浜庢帶鍒禪I鏍囩鐨勬樉绀�
+*/
+function StartCapture() {
+
+  $('#imgshow').hide();
+  $('#imgshow').attr('src', "./image/loading.gif?v=1");
+  var captureRet = Capture();
+  //浠庤繑鍥炲�兼潵瑙f瀽鏄剧ず
+  if (captureRet == emCaptureFailed) {
+    ShowDownLoad();
+  } else if (captureRet == emCaptureUnknown) {
+    $('#info').html('姝e湪鎴浘涓�, 濡傛灉瓒呰繃5绉掓棤鍝嶅簲锛岃鐐规<a target="_blank" href="' + downloadUrl + '" + date.getMinutes() + date.getSeconds()">瀹夎</a>');
+  }
+}
+
+/*
+姝ゅ嚱鏁版槸鏍规嵁鍦ㄦ祴璇曢〉闈笂鐨勪笉鍚岄�夐」鏉ヨ繘琛屾埅鍥撅紝鍦ㄥ疄闄呭簲鐢ㄤ腑锛屾偍鍙渶瑕佹牴鎹偍瀹為檯闇�瑕佺殑鎴浘妯″紡锛屼紶鍏ョ浉搴旂殑鍙傛暟鍗冲彲
+*/
+function Capture() {
+  var defaultName = "1.png"; //姝ゅ涓轰簡闃叉涓婁紶鐨勬暟鎹繃澶э紝寤鸿浣跨敤JPG鏍煎紡
+  var hideFlag = 0;
+  var autoFlag = 0;
+  var captureRet = true;
+  if (autoFlag == 0) {
+    return captureObj.DoCapture("1.png", hideFlag, 0, 0, 0, 0, 0);
+  } else {
+    autoFlag = $('#getimagefromclipboard').is(':checked') ? 4 : 1;
+    if (autoFlag == 4) {
+      return captureObj.DoCapture("", 0, 4, 0, 0, 0, 0);
+    }
+    autoFlag = $('#showprewindow').is(':checked') ? 3 : 1;
+    if (autoFlag == 3) {
+      //姝ゆ椂濡傛灉x, y, width, height鍏ㄤ负0锛屽垯琛ㄧず棰勬埅鍥剧獥鍙g偣鍑烩�滃紑濮嬫埅鍥锯�濇椂锛屾墜宸ュ厛鎶婂尯鍩�
+      //x, y, width, height鍏ㄤ负1锛屽垯琛ㄧず棰勬埅鍥剧獥鍙g偣鍑烩�滃紑濮嬫埅鍥锯�濇椂锛岃嚜鍔ㄦ埅鍙栨暣涓闈�
+      //鍏朵粬鎯呭喌锛屽垯鑷姩鎴彇 x, y, width, height 鎸囧畾鐨勫尯鍩�
+      return captureObj.DoCapture("1.png", hideFlag, 3, 0, 0, 0, 0);
+    }
+    autoFlag = $('#fullscreen').is(':checked') ? 2 : 1;
+    if (autoFlag == 2) {
+      return captureObj.DoCapture("1.png", hideFlag, 2, 0, 0, 0, 0);
+    } else {
+      return captureObj.DoCapture("1.png", hideFlag, 1, $('#xpos').val(), $('#ypos').val(), $('#width').val(), $('#height').val());
+    }
+  }
+}
+
+/*
+姝ゅ鏄埅鍥惧悗鐨勫洖璋冨嚱鏁帮紝鐢ㄤ簬灏嗘埅鍥剧殑璇︾粏淇℃伅鍙嶉鍥炴潵锛屼綘闇�瑕佽皟鏁存鍑芥暟锛屽畬鎴愬浘鍍忔暟鎹殑浼犺緭涓庢樉绀�
+*/
+function OnCaptureFinishedCallback(type, x, y, width, height, extinfo, content, localpath) {
+  if (type < 0) {
+    //闇�瑕侀噸鏂板畨瑁呮帶浠�
+    // ShowDownLoad();
+    return;
+  }
+
+  //extinfo鏄竴涓墿灞曠殑json瀛楃涓诧紝鍙互鍙栧嚭鏉ュ悗杩涜瑙f瀽锛岀洰鍓嶇敤浜庤繑鍥炵偣鍑诲畬鎴愭埅鍥剧殑鎸夐挳鍚嶇О锛岀敤浜庢墿灞曟寜閽�
+  //姣斿锛歿"btnname":"finish"}
+  $('#show').hide();
+  switch (type) {
+    case 1: {
+      $('#info').html('鎴浘瀹屾垚锛� x:' + x + ',y:' + y + ',widht:' + width + ',height:' + height);
+      UploadCaptureData(content, localpath);
+      break;
+    }
+    case 2: {
+      $('#info').html('鎮ㄥ彇娑堜簡鎴浘');
+      break;
+    }
+    case 3: {
+      $('#info').html('鎮ㄤ繚瀛樹簡鎴浘鍒版湰鍦帮細 x:' + x + ',y:' + y + ',widht:' + width + ',height:' + height + ' ' + localpath);
+      UploadCaptureData(content, localpath);
+      break;
+    }
+    case 4: {
+      if (content != '') {
+        $('#info').html('浠庡壀璐存澘鑾峰彇鍒颁簡鎴浘锛� ' + localpath);
+        UploadCaptureData(content, localpath);
+      } else {
+        $('#info').html('浠庡壀璐存澘鑾峰彇鍥剧墖澶辫触銆�');
+      }
+      break;
+    }
+  }
+}
+
+//鎺у埗涓婁紶
+function UploadCaptureData(content, localpath) {
+  savedPictureContent = content;
+
+  //鑾峰彇鍥剧墖鐨勬墿灞曞悕
+  var pos = localpath.lastIndexOf('.');
+  extendName = localpath.substr(pos + 1);
+  if (extendName == '') {
+    extendname = 'jpg';
+  }
+  $('#show').html('鎴浘宸茬粡瀹屾垚锛岃鐐瑰嚮');
+  $('#show').show();
+  var autoUpload = $("#autoupload").attr("checked") == "checked" ? 1 : 0;
+  if (autoUpload) {
+    UploadData();
+  } else {
+    $('#btnUpload').show();
+  }
+}
+
+
+/*
+瀹為檯涓婁紶鍥惧儚鏁版嵁鐨勫嚱鏁帮紝姝ゅ涓昏鏄皢BASE64鐨勫浘鍍忔暟鎹紝閫氳繃AJAX鐨勬柟寮廝OST鍒版湇鍔″櫒淇濆瓨鎴愭枃浠讹紝骞朵笖鏄剧ず鍦ㄩ〉闈笂
+*/
+function UploadData() {
+  $('#show').html('鎴浘瀹屾垚锛屾鍦ㄤ笂浼狅紝璇风◢鍚�...');
+  $('#btnUpload').hide();
+  //涓婁紶鐨勬暟鎹櫎浜嗗浘鐗囧锛岃繕鍙互鍖呭惈鑷繁闇�瑕佷紶閫掔殑鍙傛暟
+  var data = "userid=test111&extendname=" + extendName + "&picdata=" + encodeURIComponent(savedPictureContent);
+
+  $.ajax({
+    type: "POST",
+    url: "./upload.php",
+    dataType: "json",
+    data: data,
+    success: function (obj) {
+      if (obj.code == 0) {
+        $('#show').html('涓婁紶鎴愬姛锛屽浘鐗囧湴鍧�锛�' + obj.info);
+        $('#imgshow').show();
+        $('#imgshow').attr('src', obj.info);
+      } else {
+        $('#show').html('涓婁紶澶辫触 :' + obj.info);
+      }
+    },
+    error: function () {
+      $('#show').html('鐢变簬缃戠粶鍘熷洜锛屼笂浼犲け璐ャ��');
+    }
+  });
+}
+
+function TestSetWatermarkPicture() {
+  captureObj.SetWatermarkPicture("iVBORw0KGgoAAAANSUhEUgAAAF0AAABQCAYAAAB773kdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNXG14zYAAAAWdEVYdENyZWF0aW9uIFRpbWUAMDQvMDkvMTX+60k3AAAFXUlEQVR4nO2c3XWjSBCFr/fMMxoisDeC9UZgO4LRRLD4kIAmgsERrBwA5+AIRorAOAKPIlgUASsS0D5QaFiJn+6uamhkfW+W6KK4LhXd1QVX+/0eXPLQiwCs/Lj4yTbmMHno3QKY+3ERcexccUUnR979uLhiGZoIeejtAfzJCbDfBPxYCtiYGqxrZomeh94CwB2ADcfOxNgAuKNrN8JY9Dz0bgBE9Oe/pnYmSHWtEWmgDSfSEwCzI0c+AtW1zlBqoI2R6LW0UnHWs5Yj6tdqlGa0RT9KKxcM0oxJpCf4lVYqMgM7UyU7+ls7zWiJ3pBW2hw5Z7KGz7TSjLLol7TSi3Ka0Yn0JU7TCgDAj4tUw86k6bjWGRQXTUqi56E3B/BFza0PzRfSqpNe0fPQ+4zuG8VWw6lzoeuaE9KsFZVIT9CSVohMwca5kXV81zub6RT9klaM6UwzraIrpJWKVN+nyZMqHNOaZj51DUJ3Wqm4yUPvXuG4c+JG4ZgqzZxEfOMmBv00fjAdu1Dy1Y+LVf2DE9HpJ/ETwPWAjp0zWwC3flwcKrFNOT3CRXBJrnG0kv9fpFNufh3UpY/DQ7WaPYh+SSvWOaSZenqJcBHcJoc0c7Xf7y9pZVgeqkhPxvTig5Gwm436oHtFBrWFVhsvflwEiudLAPzFONcOwE19iieNRLNRHwF4gm8B6Gz+LsCrfM5Q+myNIUQ3bsohAp2oo2MD5jm5PndiVfQ89ALwZkTPJrtSNOaZcd5r8t0KtiM9Yozd+HFhHHE0ltPuFzHGdmJNdIEoDwTc4NiwFu02Iz1gjH2S6HUnG08MEwHXhyasTBmZi603Py7u5bwB8tBL0dyvo8KDdLeDrUiPDMftYCe6ArJtQiTnRol4pDOj/JsfF729I/T0R3XcQiUVUQfW34Z+iUa7jUgPDMe9KQoeAXhHmS7uALzTZ52Q7TdD3wLDcY2IRjq1lf1jMLR36U3RnQD4o+WQDcqFVGvUM0sSv/txkRmMO0E60iPDca2rzjz0Pueht0QZ3W2Cg757z0Nv2bYLz1ytRobjThCLdEaUr/24aOwRoftDAv35/hblPzJtsbuCWT+PSLRLRnpgMGbbNo7y9CvMFljXAF47cn0As6JYYDDmBJFIZ+TKp+MHYRVyty6NuZ7+Id81bYmUfaUiPYDZzel7vf2Mlt0p5AQH2UrrS3o6p67ggFDZVzKnB+joYe9gB+AeZTmVs/mgwgtKH1OY+bnw4yLhOiE9Zaz6H3VvUjvwNjpsn2sNzbp+F7ZqL3OUETX17oItyuhe9R6pgZXaCzl5i/LnPFVeUPapiAoOWIr0OhT1CYZLH1x2KFOJuNgV1kUHDgunFWRnJTbYoHyfS2bzJIOIXiHQHmET5TYPLkN0Axygi3oc8pyKPA4lODCw6ABA81yXhH+UmHvrMLjogFPCDy44MJLowEF4Tm8Kl+cxBAcGvpE2wdw0NkV881uH0SK9xhzmm8Ym7NDwxNuQjC66UO+hDmI1FFNGFx04lA3WA5xqbXOlqYoTohML2E0zO1juxlXFGdFp6W3zxZpL28t7VZwRnVjCTrTv4NCbUp0SnW5wNsRZjn3zrOOU6IQV0S3YNMY50SkiJWcya5eiHHBQdELyjabOvR3VOdFpc1tyxTjve6fW0DgnOsq5tHTfixPz84rRC151hB70bcL6A7k6uBbpc9jZwJ5h5CJXHddEv52obS0uoo+Aa6JnE7WthWuiJxO1rYVTotOTEzY2rB9devO1U6IDVjoFRtnx78I50QHRToHRdvy7cFJ0InLEhjjOii5QbXSuuljhrOgEp0LoXHWxwnXR05HGWuU/oYwAt7g/Ov4AAAAASUVORK5CYII=");
+}
diff --git a/project-web/public/static/js/jquery.min.js b/project-web/public/static/js/jquery.min.js
new file mode 100644
index 0000000..4d9b3a2
--- /dev/null
+++ b/project-web/public/static/js/jquery.min.js
@@ -0,0 +1,2 @@
+/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:n.sort,splice:n.splice},w.extend=w.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||g(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)n=a[t],a!==(r=e[t])&&(l&&r&&(w.isPlainObject(r)||(i=Array.isArray(r)))?(i?(i=!1,o=n&&Array.isArray(n)?n:[]):o=n&&w.isPlainObject(n)?n:{},a[t]=w.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},w.extend({expando:"jQuery"+("3.3.1"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==c.call(e))&&(!(t=i(e))||"function"==typeof(n=f.call(t,"constructor")&&t.constructor)&&p.call(n)===d)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e){m(e)},each:function(e,t){var n,r=0;if(C(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(C(Object(e))?w.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:u.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r,i=[],o=0,a=e.length,s=!n;o<a;o++)(r=!t(e[o],o))!==s&&i.push(e[o]);return i},map:function(e,t,n){var r,i,o=0,s=[];if(C(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&s.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&s.push(i);return a.apply([],s)},guid:1,support:h}),"function"==typeof Symbol&&(w.fn[Symbol.iterator]=n[Symbol.iterator]),w.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function C(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!g(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},P="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",I="\\["+M+"*("+R+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+R+"))|)"+M+"*\\]",W=":("+R+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+I+")*)|.*)\\)|)",$=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),F=new RegExp("^"+M+"*,"+M+"*"),_=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="<a id='"+b+"'></a><select id='"+b+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:he(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:he(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=r.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=fe(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=pe(t);function ye(){}ye.prototype=r.filters=r.pseudos,r.setFilters=new ye,a=oe.tokenize=function(e,t){var n,i,o,a,s,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=r.preFilter;while(s){n&&!(i=F.exec(s))||(i&&(s=s.slice(i[0].length)||s),u.push(o=[])),n=!1,(i=_.exec(s))&&(n=i.shift(),o.push({value:n,type:i[0].replace(B," ")}),s=s.slice(n.length));for(a in r.filter)!(i=V[a].exec(s))||l[a]&&!(i=l[a](i))||(n=i.shift(),o.push({value:n,type:a,matches:i}),s=s.slice(n.length));if(!n)break}return t?s.length:s?oe.error(e):k(e,u).slice(0)};function ve(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function me(e,t,n){var r=t.dir,i=t.next,o=i||r,a=n&&"parentNode"===o,s=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||a)return e(t,n,i);return!1}:function(t,n,u){var l,c,f,p=[T,s];if(u){while(t=t[r])if((1===t.nodeType||a)&&e(t,n,u))return!0}else while(t=t[r])if(1===t.nodeType||a)if(f=t[b]||(t[b]={}),c=f[t.uniqueID]||(f[t.uniqueID]={}),i&&i===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=c[o])&&l[0]===T&&l[1]===s)return p[2]=l[2];if(c[o]=p,p[2]=e(t,n,u))return!0}return!1}}function xe(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r<i;r++)oe(e,t[r],n);return n}function we(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Te(e,t,n,r,i,o){return r&&!r[b]&&(r=Te(r)),i&&!i[b]&&(i=Te(i,o)),se(function(o,a,s,u){var l,c,f,p=[],d=[],h=a.length,g=o||be(t||"*",s.nodeType?[s]:s,[]),y=!e||!o&&t?g:we(g,p,e,s,u),v=n?i||(o?e:h||r)?[]:a:y;if(n&&n(y,v,s,u),r){l=we(v,d),r(l,[],s,u),c=l.length;while(c--)(f=l[c])&&(v[d[c]]=!(y[d[c]]=f))}if(o){if(i||e){if(i){l=[],c=v.length;while(c--)(f=v[c])&&l.push(y[c]=f);i(null,v=[],l,u)}c=v.length;while(c--)(f=v[c])&&(l=i?O(o,f):p[c])>-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u<o;u++)if(n=r.relative[e[u].type])p=[me(xe(p),n)];else{if((n=r.filter[e[u].type].apply(null,e[u].matches))[b]){for(i=++u;i<o;i++)if(r.relative[e[i].type])break;return Te(u>1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u<i&&Ce(e.slice(u,i)),i<o&&Ce(e=e.slice(i)),i<o&&ve(e))}p.push(n)}return xe(p)}function Ee(e,t){var n=t.length>0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t<r;t++)if(w.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)w.find(e,i[t],n);return r>1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(w.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&w(e);if(!D.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s<o.length)!1===o[s].apply(n[0],n[1])&&e.stopOnFalse&&(s=o.length,n=!1)}e.memory||(n=!1),t=!1,i&&(o=n?[]:"")},l={add:function(){return o&&(n&&!t&&(s=o.length-1,a.push(n)),function t(n){w.each(n,function(n,r){g(r)?e.unique&&l.has(r)||o.push(r):r&&r.length&&"string"!==x(r)&&t(r)})}(arguments),n&&!t&&u()),this},remove:function(){return w.each(arguments,function(e,t){var n;while((n=w.inArray(t,o,n))>-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t<o)){if((e=r.apply(s,u))===n.promise())throw new TypeError("Thenable self-resolution");l=e&&("object"==typeof e||"function"==typeof e)&&e.then,g(l)?i?l.call(e,a(o,n,I,i),a(o,n,W,i)):(o++,l.call(e,a(o,n,I,i),a(o,n,W,i),a(o,n,I,n.notifyWith))):(r!==I&&(s=void 0,u=[e]),(i||n.resolveWith)(s,u))}},c=i?l:function(){try{l()}catch(e){w.Deferred.exceptionHook&&w.Deferred.exceptionHook(e,c.stackTrace),t+1>=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},X=/^-ms-/,U=/-([a-z])/g;function V(e,t){return t.toUpperCase()}function G(e){return e.replace(X,"ms-").replace(U,V)}var Y=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Q(){this.expando=w.expando+Q.uid++}Q.uid=1,Q.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Y(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[G(t)]=n;else for(r in t)i[G(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][G(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(G):(t=G(t))in r?[t]:t.match(M)||[]).length;while(n--)delete r[t[n]]}(void 0===t||w.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!w.isEmptyObject(t)}};var J=new Q,K=new Q,Z=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ee=/[A-Z]/g;function te(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Z.test(e)?JSON.parse(e):e)}function ne(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(ee,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n=te(n)}catch(e){}K.set(e,t,n)}else n=void 0;return n}w.extend({hasData:function(e){return K.hasData(e)||J.hasData(e)},data:function(e,t,n){return K.access(e,t,n)},removeData:function(e,t){K.remove(e,t)},_data:function(e,t,n){return J.access(e,t,n)},_removeData:function(e,t){J.remove(e,t)}}),w.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=K.get(o),1===o.nodeType&&!J.get(o,"hasDataAttrs"))){n=a.length;while(n--)a[n]&&0===(r=a[n].name).indexOf("data-")&&(r=G(r.slice(5)),ne(o,r,i[r]));J.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof e?this.each(function(){K.set(this,e)}):z(this,function(t){var n;if(o&&void 0===t){if(void 0!==(n=K.get(o,e)))return n;if(void 0!==(n=ne(o,e)))return n}else this.each(function(){K.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?w.queue(this[0],e):void 0===t?this:this.each(function(){var n=w.queue(this,e,t);w._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&w.dequeue(this,e)})},dequeue:function(e){return this.each(function(){w.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=w.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=J.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var re=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ie=new RegExp("^(?:([+-])=|)("+re+")([a-z%]*)$","i"),oe=["Top","Right","Bottom","Left"],ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&w.contains(e.ownerDocument,e)&&"none"===w.css(e,"display")},se=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i};function ue(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return w.css(e,t,"")},u=s(),l=n&&n[3]||(w.cssNumber[t]?"":"px"),c=(w.cssNumber[t]||"px"!==l&&+u)&&ie.exec(w.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)w.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,w.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var le={};function ce(e){var t,n=e.ownerDocument,r=e.nodeName,i=le[r];return i||(t=n.body.appendChild(n.createElement(r)),i=w.css(t,"display"),t.parentNode.removeChild(t),"none"===i&&(i="block"),le[r]=i,i)}function fe(e,t){for(var n,r,i=[],o=0,a=e.length;o<a;o++)(r=e[o]).style&&(n=r.style.display,t?("none"===n&&(i[o]=J.get(r,"display")||null,i[o]||(r.style.display="")),""===r.style.display&&ae(r)&&(i[o]=ce(r))):"none"!==n&&(i[o]="none",J.set(r,"display",n)));for(o=0;o<a;o++)null!=i[o]&&(e[o].style.display=i[o]);return e}w.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?w(this).show():w(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)J.set(e[n],"globalEval",!t||J.get(t[n],"globalEval"))}var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===x(o))w.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+w.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;w.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&w.inArray(o,r)>-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="<textarea>x</textarea>",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n<arguments.length;n++)u[n]=arguments[n];if(t.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,t)){s=w.event.handlers.call(this,t,l),n=0;while((o=s[n++])&&!t.isPropagationStopped()){t.currentTarget=o.elem,r=0;while((a=o.handlers[r++])&&!t.isImmediatePropagationStopped())t.rnamespace&&!t.rnamespace.test(a.namespace)||(t.handleObj=a,t.data=a.data,void 0!==(i=((w.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u))&&!1===(t.result=i)&&(t.preventDefault(),t.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,t),t.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&e.button>=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?w(i,this).index(l)>-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(e,t){Object.defineProperty(w.Event.prototype,e,{enumerable:!0,configurable:!0,get:g(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[w.expando]?e:new w.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==Se()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===Se()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&N(this,"input"))return this.click(),!1},_default:function(e){return N(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},w.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},w.Event=function(e,t){if(!(this instanceof w.Event))return new w.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ee:ke,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&w.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[w.expando]=!0},w.Event.prototype={constructor:w.Event,isDefaultPrevented:ke,isPropagationStopped:ke,isImmediatePropagationStopped:ke,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ee,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ee,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ee,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},w.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&we.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Te.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},w.event.addProp),w.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,t){w.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||w.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),w.fn.extend({on:function(e,t,n,r){return De(this,e,t,n,r)},one:function(e,t,n,r){return De(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,w(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=ke),this.each(function(){w.event.remove(this,e,n,t)})}});var Ne=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/<script|<style|<link/i,je=/checked\s*(?:[^=]|=\s*.checked.)/i,qe=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n<r;n++)w.event.add(t,i,l[i][n])}K.hasData(e)&&(s=K.access(e),u=w.extend({},s),K.set(t,u))}}function Me(e,t){var n=t.nodeName.toLowerCase();"input"===n&&pe.test(e.type)?t.checked=e.checked:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}function Re(e,t,n,r){t=a.apply([],t);var i,o,s,u,l,c,f=0,p=e.length,d=p-1,y=t[0],v=g(y);if(v||p>1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f<p;f++)l=i,f!==d&&(l=w.clone(l,!0,!0),u&&w.merge(s,ye(l,"script"))),n.call(e[f],l,f);if(u)for(c=s[s.length-1].ownerDocument,w.map(s,Oe),f=0;f<u;f++)l=s[f],he.test(l.type||"")&&!J.access(l,"globalEval")&&w.contains(c,l)&&(l.src&&"module"!==(l.type||"").toLowerCase()?w._evalUrl&&w._evalUrl(l.src):m(l.textContent.replace(qe,""),c,l))}return e}function Ie(e,t,n){for(var r,i=t?w.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||w.cleanData(ye(r)),r.parentNode&&(n&&w.contains(r.ownerDocument,r)&&ve(ye(r,"script")),r.parentNode.removeChild(r));return e}w.extend({htmlPrefilter:function(e){return e.replace(Ne,"<$1></$2>")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r<i;r++)Me(o[r],a[r]);if(t)if(n)for(o=o||ye(e),a=a||ye(s),r=0,i=o.length;r<i;r++)Pe(o[r],a[r]);else Pe(e,s);return(a=ye(s,"script")).length>0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(w.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return Re(this,arguments,function(t){var n=this.parentNode;w.inArray(this,e)<0&&(w.cleanData(ye(this)),n&&n.replaceChild(t,this))},e)}}),w.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){w.fn[e]=function(e){for(var n,r=[],i=w(e),o=i.length-1,a=0;a<=o;a++)n=a===o?this:this.clone(!0),w(i[a])[t](n),s.apply(r,n.get());return this.pushStack(r)}});var We=new RegExp("^("+re+")(?!px)[a-z%]+$","i"),$e=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},Be=new RegExp(oe.join("|"),"i");!function(){function t(){if(c){l.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",c.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",be.appendChild(l).appendChild(c);var t=e.getComputedStyle(c);i="1%"!==t.top,u=12===n(t.marginLeft),c.style.right="60%",s=36===n(t.right),o=36===n(t.width),c.style.position="absolute",a=36===c.offsetWidth||"absolute",be.removeChild(l),c=null}}function n(e){return Math.round(parseFloat(e))}var i,o,a,s,u,l=r.createElement("div"),c=r.createElement("div");c.style&&(c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",h.clearCloneStyle="content-box"===c.style.backgroundClip,w.extend(h,{boxSizingReliable:function(){return t(),o},pixelBoxStyles:function(){return t(),s},pixelPosition:function(){return t(),i},reliableMarginLeft:function(){return t(),u},scrollboxSize:function(){return t(),a}}))}();function Fe(e,t,n){var r,i,o,a,s=e.style;return(n=n||$e(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||w.contains(e.ownerDocument,e)||(a=w.style(e,t)),!h.pixelBoxStyles()&&We.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}var ze=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ue={position:"absolute",visibility:"hidden",display:"block"},Ve={letterSpacing:"0",fontWeight:"400"},Ge=["Webkit","Moz","ms"],Ye=r.createElement("div").style;function Qe(e){if(e in Ye)return e;var t=e[0].toUpperCase()+e.slice(1),n=Ge.length;while(n--)if((e=Ge[n]+t)in Ye)return e}function Je(e){var t=w.cssProps[e];return t||(t=w.cssProps[e]=Qe(e)||e),t}function Ke(e,t,n){var r=ie.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ze(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=w.css(e,n+oe[a],!0,i)),r?("content"===n&&(u-=w.css(e,"padding"+oe[a],!0,i)),"margin"!==n&&(u-=w.css(e,"border"+oe[a]+"Width",!0,i))):(u+=w.css(e,"padding"+oe[a],!0,i),"padding"!==n?u+=w.css(e,"border"+oe[a]+"Width",!0,i):s+=w.css(e,"border"+oe[a]+"Width",!0,i));return!r&&o>=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a<i;a++)o[t[a]]=w.css(e,t[a],!1,r);return o}return void 0!==n?w.style(e,t,n):w.css(e,t)},e,t,arguments.length>1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ct(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),y=J.get(e,"fxshow");n.queue||(null==(a=w._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,w.queue(e,"fx").length||a.empty.fire()})}));for(r in t)if(i=t[r],it.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||w.style(e,r)}if((u=!w.isEmptyObject(t))||!w.isEmptyObject(d)){f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=J.get(e,"display")),"none"===(c=w.css(e,"display"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=w.css(e,"display"),fe([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===w.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1;for(r in d)u||(y?"hidden"in y&&(g=y.hidden):y=J.access(e,"fxshow",{display:l}),o&&(y.hidden=!g),g&&fe([e],!0),p.done(function(){g||fe([e]),J.remove(e,"fxshow");for(r in d)w.style(e,r,d[r])})),u=lt(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}}function ft(e,t){var n,r,i,o,a;for(n in e)if(r=G(n),i=t[r],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=w.cssHooks[r])&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function pt(e,t,n){var r,i,o=0,a=pt.prefilters.length,s=w.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=nt||st(),n=Math.max(0,l.startTime+l.duration-t),r=1-(n/l.duration||0),o=0,a=l.tweens.length;o<a;o++)l.tweens[o].run(r);return s.notifyWith(e,[l,r,n]),r<1&&a?n:(a||s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:w.extend({},t),opts:w.extend(!0,{specialEasing:{},easing:w.easing._default},n),originalProperties:t,originalOptions:n,startTime:nt||st(),duration:n.duration,tweens:[],createTween:function(t,n){var r=w.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(ft(c,l.opts.specialEasing);o<a;o++)if(r=pt.prefilters[o].call(l,e,c,l.opts))return g(r.stop)&&(w._queueHooks(l.elem,l.opts.queue).stop=r.stop.bind(r)),r;return w.map(c,lt,l),g(l.opts.start)&&l.opts.start.call(e,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),w.fx.timer(w.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l}w.Animation=w.extend(pt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return ue(n.elem,e,ie.exec(t),n),n}]},tweener:function(e,t){g(e)?(t=e,e=["*"]):e=e.match(M);for(var n,r=0,i=e.length;r<i;r++)n=e[r],pt.tweeners[n]=pt.tweeners[n]||[],pt.tweeners[n].unshift(t)},prefilters:[ct],prefilter:function(e,t){t?pt.prefilters.unshift(e):pt.prefilters.push(e)}}),w.speed=function(e,t,n){var r=e&&"object"==typeof e?w.extend({},e):{complete:n||!n&&t||g(e)&&e,duration:e,easing:n&&t||t&&!g(t)&&t};return w.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in w.fx.speeds?r.duration=w.fx.speeds[r.duration]:r.duration=w.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){g(r.old)&&r.old.call(this),r.queue&&w.dequeue(this,r.queue)},r},w.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=w.isEmptyObject(e),o=w.speed(t,n,r),a=function(){var t=pt(this,w.extend({},e),o);(i||J.get(this,"finish"))&&t.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||"fx",[]),this.each(function(){var t=!0,i=null!=e&&e+"queueHooks",o=w.timers,a=J.get(this);if(i)a[i]&&a[i].stop&&r(a[i]);else for(i in a)a[i]&&a[i].stop&&ot.test(i)&&r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||w.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||"fx"),this.each(function(){var t,n=J.get(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=w.timers,a=r?r.length:0;for(n.finish=!0,w.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<a;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),w.each(["toggle","show","hide"],function(e,t){var n=w.fn[t];w.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ut(t,!0),e,r,i)}}),w.each({slideDown:ut("show"),slideUp:ut("hide"),slideToggle:ut("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){w.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),w.timers=[],w.fx.tick=function(){var e,t=0,n=w.timers;for(nt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||w.fx.stop(),nt=void 0},w.fx.timer=function(e){w.timers.push(e),w.fx.start()},w.fx.interval=13,w.fx.start=function(){rt||(rt=!0,at())},w.fx.stop=function(){rt=null},w.fx.speeds={slow:600,fast:200,_default:400},w.fn.delay=function(t,n){return t=w.fx?w.fx.speeds[t]||t:t,n=n||"fx",this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e=r.createElement("input"),t=r.createElement("select").appendChild(r.createElement("option"));e.type="checkbox",h.checkOn=""!==e.value,h.optSelected=t.selected,(e=r.createElement("input")).value="t",e.type="radio",h.radioValue="t"===e.value}();var dt,ht=w.expr.attrHandle;w.fn.extend({attr:function(e,t){return z(this,w.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!N(n.parentNode,"optgroup"))){if(t=w(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=w.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=w.inArray(w.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w("<script>").prop({charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&o("error"===e.type?404:200,e.type)}),r.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Yt=[],Qt=/(=)\?(?=&|$)|\?\?/;w.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Yt.pop()||w.expando+"_"+Et++;return this[e]=!0,e}}),w.ajaxPrefilter("json jsonp",function(t,n,r){var i,o,a,s=!1!==t.jsonp&&(Qt.test(t.url)?"url":"string"==typeof t.data&&0===(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&Qt.test(t.data)&&"data");if(s||"jsonp"===t.dataTypes[0])return i=t.jsonpCallback=g(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Qt,"$1"+i):!1!==t.jsonp&&(t.url+=(kt.test(t.url)?"&":"?")+t.jsonp+"="+i),t.converters["script json"]=function(){return a||w.error(i+" was not called"),a[0]},t.dataTypes[0]="json",o=e[i],e[i]=function(){a=arguments},r.always(function(){void 0===o?w(e).removeProp(i):e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,Yt.push(i)),a&&g(o)&&o(a[0]),a=o=void 0}),"script"}),h.createHTMLDocument=function(){var e=r.implementation.createHTMLDocument("").body;return e.innerHTML="<form></form><form></form>",2===e.childNodes.length}(),w.parseHTML=function(e,t,n){if("string"!=typeof e)return[];"boolean"==typeof t&&(n=t,t=!1);var i,o,a;return t||(h.createHTMLDocument?((i=(t=r.implementation.createHTMLDocument("")).createElement("base")).href=r.location.href,t.head.appendChild(i)):t=r),o=A.exec(e),a=!n&&[],o?[t.createElement(o[1])]:(o=xe([e],t,a),a&&a.length&&w(a).remove(),w.merge([],o.childNodes))},w.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return s>-1&&(r=vt(e.slice(s)),e=e.slice(0,s)),g(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),a.length>0&&w.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?w("<div>").append(w.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},w.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){w.fn[t]=function(e){return this.on(t,e)}}),w.expr.pseudos.animated=function(e){return w.grep(w.timers,function(t){return e===t.elem}).length},w.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l,c=w.css(e,"position"),f=w(e),p={};"static"===c&&(e.style.position="relative"),s=f.offset(),o=w.css(e,"top"),u=w.css(e,"left"),(l=("absolute"===c||"fixed"===c)&&(o+u).indexOf("auto")>-1)?(a=(r=f.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),g(t)&&(t=t.call(e,n,w.extend({},s))),null!=t.top&&(p.top=t.top-s.top+a),null!=t.left&&(p.left=t.left-s.left+i),"using"in t?t.using.call(e,p):f.css(p)}},w.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){w.offset.setOffset(this,e,t)});var t,n,r=this[0];if(r)return r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===w.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===w.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=w(e).offset()).top+=w.css(e,"borderTopWidth",!0),i.left+=w.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-w.css(r,"marginTop",!0),left:t.left-i.left-w.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===w.css(e,"position"))e=e.offsetParent;return e||be})}}),w.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n="pageYOffset"===t;w.fn[e]=function(r){return z(this,function(e,r,i){var o;if(y(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i},e,r,arguments.length)}}),w.each(["top","left"],function(e,t){w.cssHooks[t]=_e(h.pixelPosition,function(e,n){if(n)return n=Fe(e,t),We.test(n)?w(e).position()[t]+"px":n})}),w.each({Height:"height",Width:"width"},function(e,t){w.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){w.fn[r]=function(i,o){var a=arguments.length&&(n||"boolean"!=typeof i),s=n||(!0===i||!0===o?"margin":"border");return z(this,function(t,n,i){var o;return y(t)?0===r.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===i?w.css(t,n,s):w.style(t,n,i,s)},t,a?i:void 0,a)}})}),w.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){w.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),w.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),w.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),w.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),g(e))return r=o.call(arguments,2),i=function(){return e.apply(t||this,r.concat(o.call(arguments)))},i.guid=e.guid=e.guid||w.guid++,i},w.holdReady=function(e){e?w.readyWait++:w.ready(!0)},w.isArray=Array.isArray,w.parseJSON=JSON.parse,w.nodeName=N,w.isFunction=g,w.isWindow=y,w.camelCase=G,w.type=x,w.now=Date.now,w.isNumeric=function(e){var t=w.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return w});var Jt=e.jQuery,Kt=e.$;return w.noConflict=function(t){return e.$===w&&(e.$=Kt),t&&e.jQuery===w&&(e.jQuery=Jt),w},t||(e.jQuery=e.$=w),w});
diff --git a/project-web/public/static/js/niuniucapture.js b/project-web/public/static/js/niuniucapture.js
new file mode 100644
index 0000000..8aea5cf
--- /dev/null
+++ b/project-web/public/static/js/niuniucapture.js
@@ -0,0 +1,643 @@
+/*******************************************************************************
+ 鐗涚墰鎴浘鐨凧S閮ㄥ垎鐨勬牳蹇冩祦绋嬪皝瑁呭湪姝ゆ枃浠朵腑锛岀粷澶ч儴鍒嗘儏鍐典笅锛屾偍涓嶉渶瑕佷慨鏀规鏂囦欢涓殑JS鍐呭锛屽畠宸茬粡鍖呭惈浜嗗湪鎵�鏈夋祻瑙堝櫒涓婂簲鐢�
+ 鐗涚墰鎴浘鎵�闇�瑕佺殑鎵�鏈変唬鐮侊紝鎮ㄥ彧闇�瑕佸幓淇敼capturewrapper.js锛屽皢鐩稿簲鐨勫嚱鏁颁慨鏀规垚涓庢偍鐨刄I鍖归厤鐨勫嵆鍙�
+ *******************************************************************************/
+
+/*******************************************************************************/
+//璁剧疆鎴浘鐨勫弬鏁�
+var emPensize = 1;		//璁剧疆鐢荤瑪澶у皬
+var emDrawType = 2;		//璁剧疆鏄吘璁鏍艰繕鏄�360椋庢牸 0锛� 鑵捐椋庢牸   1锛� 360椋庢牸
+var emTrackColor = 3;		//鑷姩璇嗗埆鐨勮竟妗嗙殑棰滆壊
+var emEditBorderColor = 4;	//鏂囨湰杈撳叆鐨勮竟妗嗛鑹�
+var emTransparent = 5;		//宸ュ叿鏍忕殑閫忔槑搴�
+var emWindowAware = 6;		//璁剧疆鏄惁绂佺敤闅忕潃DPI鏀惧ぇ
+var emSetSaveName = 8;		//璁剧疆淇濆瓨鏃剁殑寮�濮嬫枃瀛�     鍏嶈垂鐗堟湰鏃犳晥
+var emSetMagnifierBkColor = 9; //璁剧疆鏀惧ぇ闀滅殑鑳屾櫙鑹诧紝涓嶈缃垯閫忔槑
+var emSetMagnifierLogoText = 10; //璁剧疆鏀惧ぇ闀滀笂鐨凩OGO瀛楃锛屽彲鎻愮ず蹇嵎閿紝濡傦細 鐗涚墰鎴浘(CTRL + SHIFT + A)     鍏嶈垂鐗堟湰鏃犳晥
+var emSetWatermarkPictureType = 20;						//璁剧疆姘村嵃鐨勭被鍨�
+var emSetWatermarkPicturePath = 21;						//璁剧疆姘村嵃鐨勮矾寰�
+var emSetWatermarkTextType = 22;						//璁剧疆姘村嵃鏂囧瓧鐨勭被鍨�
+var emSetWatermarkTextValue = 23;                       //璁剧疆姘村嵃鏂囧瓧鐨勫瓧绗︿覆
+var emSetMosaicType = 24;               //鎸囧畾椹禌鍏嬬殑绫诲瀷锛�1涓虹煩褰紝2涓虹敾绾�
+var emSetTooltipText = 25;               //鐢ㄤ簬璁剧疆宸ュ叿鏍忓浘鏍囩殑TOOLTIP鏂囧瓧
+var emSetMoreInfo = 26;							//璁剧疆棰濆鐨勪俊鎭紝鐢ㄤ簬鐗规畩闇�姹�
+var connectTimes = 0 //閾炬帴娆℃暟
+var maxConnectTimes = 9 //鏈�澶ч噸杩炴鏁�
+/*******************************************************************************/
+
+
+var emClosed = 1;
+var emConnected = 2;
+var emConnecting = 3;
+
+var emCaptureSuccess = 0;
+var emCaptureFailed = 1;
+var emCaptureUnknown = 2;
+
+var emCmdReady = -1;
+var emCmdCapture = 0;
+var emCmdSaveFile = 1;
+
+
+function isMacintosh() {
+  return navigator.platform.indexOf('Mac') > -1;
+}
+
+function isLinux() {
+  return navigator.platform.indexOf('Linux') > -1;
+}
+
+function isMips() {
+  return navigator.platform.indexOf('mips') > -1;
+}
+
+function isaarch() {
+  return navigator.platform.indexOf('aarch') > -1;
+}
+
+function isloongarch() {
+  return navigator.platform.indexOf('loongarch') > -1;
+}
+
+function rgb2value(r, g, b) {
+  return r | g << 8 | b << 16;
+}
+
+var captureObjSelf = null;
+
+function onpluginLoaded() {
+  captureObjSelf.pluginLoaded(false);
+}
+
+function NiuniuCaptureObject() {
+  var self = this;
+  captureObjSelf = this;
+  this.PenSize = 2;
+  this.DrawType = 0;
+  this.TrackColor = rgb2value(255, 0, 0);
+  this.EditBorderColor = rgb2value(255, 0, 0);
+  this.Transparent = 255;
+  this.WindowAware = 1;
+  this.MosaicType = 1;
+  this.SaveName = "娴嬭瘯淇濆瓨";
+  this.MagnifierLogoText = "娴嬭瘯鎴浘";
+  this.WatermarkPictureType = "2|100|100|400|400|20";
+  this.WatermarkPicturePath = "";
+  this.WatermarkTextType = "2|100|100|100|40|20|0|150|30|80,55,55,55";
+  this.WatermarkTextValue = "";
+  this.NiuniuAuthKey = "";
+  this.ToolTipText = "";  //tipRectangle|tipCircle|tipArrow|tipBrush|tipGlitter|tipMosaic|tipText|tipUndo|tipSave|tipCancel|tipFinish|txtFinish
+  this.MoreInfo = "1,100|300|600";
+
+  this.More_Ext_Params = new Array();
+
+  this.useCustomizedProtoco = true;   //鏄惁浣跨敤娴忚鍣ㄨ嚜瀹氫箟鍗忚鍔爓ebsocket
+
+  this.IsWaitCustomizedCallBack = false;
+  this.autoConnectAfterPageLoad = true;
+  this.IsFirstConnect = true;
+  this.IsEverConnected = false;
+  this.reconnectTryTime = 0;
+  this.TimeIntervalID = -1;
+  this.ReceivedEchoBack = false;
+
+  this.Version = "1.0.0.0";
+  this.hostPort = "30101,30102";
+  this.hostPortIndex = 0;
+  this.CaptureName = "NiuniuCapture";
+  this.NiuniuSocket = null;
+  this.connectState = emClosed;
+
+  this.SocketTimeStamp = new Date().getTime();
+  this.TimeOutID = -1;
+
+  this.FinishedCallback = null;
+  this.PluginLoadedCallback = null;
+  this.VersionCallback = null;
+  this.OnConnectFailed = function (isReconnect) {
+    self.WriteLog(isReconnect ? "reconnect failed, the capture control process is exit." : "connect failed at the first time.");
+  }
+
+  this.LoadPlugin = function () {
+    var obj = $('#capturecontainer');
+    if (obj.length < 1) {
+      $("body").append('<div id="capturecontainer" style="height:0px;width:0px;"></div>');
+      obj = $('#capturecontainer');
+    }
+    obj.html('');
+    obj.html('<object id="niuniuCapture" type="application/x-niuniuwebcapture" width="0" height="0"><param name="onload" value="onpluginLoaded" /></object>');
+
+    var iframeObj = $('startCaptureFrame');
+    if (iframeObj.length < 1) {
+      $("body").append('<iframe id="startCaptureFrame" style="display:none;"></iframe>');
+    }
+  }
+
+  this.niuniuCapture = function () {
+    return document.getElementById('niuniuCapture');
+  }
+
+  this.addEvent = function (obj, name, func) {
+    if (obj.attachEvent) {
+      obj.attachEvent("on" + name, func);
+    } else {
+      obj.addEventListener(name, func, false);
+    }
+  }
+
+  this.pluginValid = function () {
+    try {
+      if (self.niuniuCapture().valid) {
+        return true;
+      }
+    } catch (e) {
+    }
+    return false;
+  }
+
+  this.OnCaptureFinished = function (x, y, width, height, content, localpath) {
+    self.OnCaptureFinishedEx(1, x, y, width, height, "", content, localpath);
+  }
+
+  this.OnCaptureFinishedEx = function (type, x, y, width, height, info, content, localpath) {
+    //浜ょ粰涓婂眰鍘诲鐞嗘埅鍥惧畬鎴愬悗鐨勪簨椤�
+    if (self.FinishedCallback != null) {
+      self.FinishedCallback(type, x, y, width, height, info, content, localpath);
+    } else {
+      alert("鎴浘瀹屾垚鐨勪簨浠舵湭缁戝畾锛屽皢涓嶈兘瀵瑰浘鐗囪繘琛屽鐞嗭紝璇锋寚瀹欶inishedCallback鍥炶皟鍑芥暟");
+    }
+  }
+
+  this.pluginLoaded = function (fromWebsocket) {
+    if (!fromWebsocket && !self.pluginValid()) {
+      if (self.PluginLoadedCallback != null) {
+        self.PluginLoadedCallback(false);
+      }
+      return false;
+    }
+
+    self.GetVersion();
+    if (self.PluginLoadedCallback != null) {
+      self.PluginLoadedCallback(true);
+    }
+
+    if (!self.pluginValid()) {
+      return false;
+    }
+    //姝ゅ嚱鏁板繀闇�璋冪敤锛屼紶閫掓纭殑鍙傛暟锛屼笖蹇呴渶鍏堜簬鍏朵粬鍑芥暟璋冪敤
+    self.niuniuCapture().InitCapture(self.NiuniuAuthKey);
+
+    self.niuniuCapture().InitParam(emPensize, self.PenSize);
+    self.niuniuCapture().InitParam(emDrawType, self.DrawType);
+    self.niuniuCapture().InitParam(emTrackColor, self.TrackColor);
+    self.niuniuCapture().InitParam(emEditBorderColor, self.EditBorderColor);
+    self.niuniuCapture().InitParam(emTransparent, self.Transparent);
+
+    self.niuniuCapture().InitParam(emSetSaveName, self.SaveName);
+    self.niuniuCapture().InitParam(emSetMagnifierLogoText, self.MagnifierLogoText);
+    self.niuniuCapture().InitParam(emSetMosaicType, self.MosaicType);
+
+    //璁剧疆宸ュ叿鏍忎笂鐨勬寜閽甌OOLTIP
+    self.niuniuCapture().InitParam(emSetTooltipText, self.ToolTipText);
+
+    //self.niuniuCapture().InitParam(emSetMoreInfo, self.MoreInfo);
+
+    for (i = 0; i < self.More_Ext_Params.length; i++) {
+      self.niuniuCapture().InitParam(emSetMoreInfo, self.More_Ext_Params[i]);
+    }
+
+
+    //niuniuCapture().InitParam(23, "娴嬭瘯鏂囧瓧.");
+    //姝ASE64瀛楃涓茶〃绀虹墰鐗涢粯璁ょ殑姘村嵃鍥剧墖锛屽彲浠ユ浛鎹�
+    // niuniuCapture().InitParam(21, "iVBORw0KGgoAAAANSUhEUgAAAF0AAABQCAYAAAB773kdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNXG14zYAAAAWdEVYdENyZWF0aW9uIFRpbWUAMDQvMDkvMTX+60k3AAAFXUlEQVR4nO2c3XWjSBCFr/fMMxoisDeC9UZgO4LRRLD4kIAmgsERrBwA5+AIRorAOAKPIlgUASsS0D5QaFiJn+6uamhkfW+W6KK4LhXd1QVX+/0eXPLQiwCs/Lj4yTbmMHno3QKY+3ERcexccUUnR979uLhiGZoIeejtAfzJCbDfBPxYCtiYGqxrZomeh94CwB2ADcfOxNgAuKNrN8JY9Dz0bgBE9Oe/pnYmSHWtEWmgDSfSEwCzI0c+AtW1zlBqoI2R6LW0UnHWs5Yj6tdqlGa0RT9KKxcM0oxJpCf4lVYqMgM7UyU7+ls7zWiJ3pBW2hw5Z7KGz7TSjLLol7TSi3Ka0Yn0JU7TCgDAj4tUw86k6bjWGRQXTUqi56E3B/BFza0PzRfSqpNe0fPQ+4zuG8VWw6lzoeuaE9KsFZVIT9CSVohMwca5kXV81zub6RT9klaM6UwzraIrpJWKVN+nyZMqHNOaZj51DUJ3Wqm4yUPvXuG4c+JG4ZgqzZxEfOMmBv00fjAdu1Dy1Y+LVf2DE9HpJ/ETwPWAjp0zWwC3flwcKrFNOT3CRXBJrnG0kv9fpFNufh3UpY/DQ7WaPYh+SSvWOaSZenqJcBHcJoc0c7Xf7y9pZVgeqkhPxvTig5Gwm436oHtFBrWFVhsvflwEiudLAPzFONcOwE19iieNRLNRHwF4gm8B6Gz+LsCrfM5Q+myNIUQ3bsohAp2oo2MD5jm5PndiVfQ89ALwZkTPJrtSNOaZcd5r8t0KtiM9Yozd+HFhHHE0ltPuFzHGdmJNdIEoDwTc4NiwFu02Iz1gjH2S6HUnG08MEwHXhyasTBmZi603Py7u5bwB8tBL0dyvo8KDdLeDrUiPDMftYCe6ArJtQiTnRol4pDOj/JsfF729I/T0R3XcQiUVUQfW34Z+iUa7jUgPDMe9KQoeAXhHmS7uALzTZ52Q7TdD3wLDcY2IRjq1lf1jMLR36U3RnQD4o+WQDcqFVGvUM0sSv/txkRmMO0E60iPDca2rzjz0Pueht0QZ3W2Cg757z0Nv2bYLz1ytRobjThCLdEaUr/24aOwRoftDAv35/hblPzJtsbuCWT+PSLRLRnpgMGbbNo7y9CvMFljXAF47cn0As6JYYDDmBJFIZ+TKp+MHYRVyty6NuZ7+Id81bYmUfaUiPYDZzel7vf2Mlt0p5AQH2UrrS3o6p67ggFDZVzKnB+joYe9gB+AeZTmVs/mgwgtKH1OY+bnw4yLhOiE9Zaz6H3VvUjvwNjpsn2sNzbp+F7ZqL3OUETX17oItyuhe9R6pgZXaCzl5i/LnPFVeUPapiAoOWIr0OhT1CYZLH1x2KFOJuNgV1kUHDgunFWRnJTbYoHyfS2bzJIOIXiHQHmET5TYPLkN0Axygi3oc8pyKPA4lODCw6ABA81yXhH+UmHvrMLjogFPCDy44MJLowEF4Tm8Kl+cxBAcGvpE2wdw0NkV881uH0SK9xhzmm8Ym7NDwxNuQjC66UO+hDmI1FFNGFx04lA3WA5xqbXOlqYoTohML2E0zO1juxlXFGdFp6W3zxZpL28t7VZwRnVjCTrTv4NCbUp0SnW5wNsRZjn3zrOOU6IQV0S3YNMY50SkiJWcya5eiHHBQdELyjabOvR3VOdFpc1tyxTjve6fW0DgnOsq5tHTfixPz84rRC151hB70bcL6A7k6uBbpc9jZwJ5h5CJXHddEv52obS0uoo+Aa6JnE7WthWuiJxO1rYVTotOTEzY2rB9devO1U6IDVjoFRtnx78I50QHRToHRdvy7cFJ0InLEhjjOii5QbXSuuljhrOgEp0LoXHWxwnXR05HGWuU/oYwAt7g/Ov4AAAAASUVORK5CYII=");
+    //娉細浠ヤ笂璁剧疆LOGO鍙婁繚瀛樺悕鐨勬帴鍙o紝鍏嶈垂鐗堟湰鏃犳晥
+
+    //娣诲姞鎺т欢鐨勪簨浠剁洃鍚�
+    self.addEvent(self.niuniuCapture(), 'CaptureFinishedEx', self.OnCaptureFinishedEx);
+    //浠ヤ笅杩欎釜浜嬩欢涓昏鏄敤浜庡吋瀹规棫鐨勬祻瑙堝櫒鎺т欢鐨勪簨浠堕�氱煡
+    self.addEvent(self.niuniuCapture(), 'CaptureFinished', self.OnCaptureFinished);
+  }
+
+  this.SetWatermarkPicture = function (watermarPicData) {
+    self.WatermarkPicturePath = watermarPicData;
+    //璁剧疆娴嬭瘯鐨勬按鍗板浘鐗囩殑Base64瀛楃涓诧紝姝ゆ搷浣滃簲璇ユ槸鍦ㄩ〉闈㈠姞杞戒腑澶勭悊姣旇緝鍚堥��
+    if (!self.pluginValid())
+      return;
+    self.niuniuCapture().InitParam(emSetWatermarkPicturePath, self.WatermarkPicturePath);
+    self.niuniuCapture().InitParam(emSetWatermarkPictureType, self.WatermarkPictureType);
+  }
+
+  this.SetWatermarkText = function (watermarkText) {
+    self.WatermarkTextValue = watermarkText;
+    //璁剧疆娴嬭瘯鐨勬按鍗版枃瀛楋紝姝ゆ搷浣滃簲璇ユ槸鍦ㄩ〉闈㈠姞杞戒腑澶勭悊姣旇緝鍚堥��
+    if (!self.pluginValid())
+      return;
+    //nShowType|nMinWidth|nMinHeight|nVerticalInterval|nOffset|nFontSize|nIsBold|nTextWidth|nTextHeight|colorText
+    self.niuniuCapture().InitParam(emSetWatermarkTextValue, self.WatermarkTextValue);
+    self.niuniuCapture().InitParam(emSetWatermarkTextType, self.WatermarkTextType);
+  }
+
+
+  this.SavePicture = function (savename) {
+    if (self.pluginValid()) {
+      self.niuniuCapture().SavePicture(savename);
+    }
+  }
+
+  this.GetCursorPosition = function () {
+    if (self.pluginValid()) {
+      var val = self.niuniuCapture().GetCursorPosition();
+      return val;
+    }
+    return "";
+  }
+
+  this.NewCaptureParamObject = function (defaultpath, hideCurrWindow, autoCaptureFlag, x, y, width, height) {
+    var obj = new Object();
+    obj.CmdType = 1;
+    obj.IsGBK = 0;				//鏄惁鏄疓BK缂栫爜锛岃繖鏍蜂細娑夊強鍒扮紪鐮佽浆鎹�
+    obj.AuthKey = self.NiuniuAuthKey;  //
+    obj.Pensize = self.PenSize;		//璁剧疆鐢荤瑪澶у皬
+    obj.DrawType = self.DrawType;			//璁剧疆鏄吘璁鏍艰繕鏄�360椋庢牸
+    obj.TrackColor = self.TrackColor;		//鑷姩璇嗗埆鐨勮竟妗嗙殑棰滆壊
+    obj.EditBorderColor = self.EditBorderColor;	//鏂囨湰杈撳叆鐨勮竟妗嗛鑹�
+    obj.Transparent = self.Transparent;		//宸ュ叿鏍忕殑閫忔槑搴�
+    obj.SetSaveName = self.SaveName;									//璁剧疆淇濆瓨鏃剁殑寮�濮嬫枃瀛�
+    obj.SetMagnifierLogoText = self.MagnifierLogoText;						//璁剧疆鏀惧ぇ闀滀笂鐨凩OGO瀛楃
+    obj.SetWatermarkPictureTypeEx = self.WatermarkPictureType;						//璁剧疆姘村嵃鐨勭被鍨�
+    obj.SetWatermarkPicturePath = self.WatermarkPicturePath;						//璁剧疆姘村嵃鐨勮矾寰�
+    obj.SetWatermarkTextTypeEx = self.WatermarkTextType;							//璁剧疆姘村嵃鏂囧瓧鐨勭被鍨�
+    obj.SetWatermarkTextValue = self.WatermarkTextValue;						//璁剧疆姘村嵃鏂囧瓧
+    obj.MosaicType = self.MosaicType;          //璁剧疆椹禌鍏嬬殑绫诲瀷
+    obj.SetToolbarText = self.ToolTipText;
+    obj.MoreInfo = this.MoreInfo;
+    if (self.More_Ext_Params.length > 0) {
+      obj.more_ext_count = self.More_Ext_Params.length;
+      for (i = 0; i < self.More_Ext_Params.length; i++) {
+        switch (i) {
+          case 0:
+            obj.more_ext0 = self.More_Ext_Params[i];
+            break;
+          case 1:
+            obj.more_ext1 = self.More_Ext_Params[i];
+            break;
+          case 2:
+            obj.more_ext2 = self.More_Ext_Params[i];
+            break;
+          case 3:
+            obj.more_ext3 = self.More_Ext_Params[i];
+            break;
+          case 4:
+            obj.more_ext4 = self.More_Ext_Params[i];
+            break;
+          case 5:
+            obj.more_ext5 = self.More_Ext_Params[i];
+            break;
+          case 6:
+            obj.more_ext6 = self.More_Ext_Params[i];
+            break;
+          case 7:
+            obj.more_ext7 = self.More_Ext_Params[i];
+            break;
+          case 8:
+            obj.more_ext8 = self.More_Ext_Params[i];
+            break;
+          case 9:
+            obj.more_ext9 = self.More_Ext_Params[i];
+            break;
+        }
+      }
+    }
+
+    //浠ヤ笅鏄埅鍥炬椂浼犻�掔殑鍙傛暟
+    obj.DefaultPath = defaultpath;
+    obj.HideCurrentWindow = hideCurrWindow;
+    obj.AutoCaptureFlag = autoCaptureFlag;
+    obj.x = x;
+    obj.y = y;
+    obj.Width = width;
+    obj.Height = height;
+    return obj;
+  }
+
+  this.DoCapture = function (name, hide, AutoCapture, x, y, width, height) {
+    if (self.IsNeedCustomizedProtocol()) {
+      return self.DoCaptureForCustomize(name, hide, AutoCapture, parseInt(x), parseInt(y), parseInt(width), parseInt(height));
+    }
+
+    if (!self.pluginValid()) {
+      return emCaptureFailed;
+    }
+    self.niuniuCapture().Capture(name, hide, AutoCapture, x, y, width, height);
+    return emCaptureSuccess;
+  }
+
+  this.InitNiuniuCapture = function () {
+    self.LoadPlugin();
+    setTimeout("captureObjSelf.InitWebSocketAndBindCallback();", 200);
+  }
+
+  this.InitWebSocketAndBindCallback = function () {
+    if (!self.autoConnectAfterPageLoad || !self.IsNeedCustomizedProtocol()) {
+      return;
+    }
+    self.connectHost();
+  }
+
+  this.getNextPort = function () {
+    //init port params flag
+    //杩涜鎷嗗垎澶勭悊 self.hostPort;
+    var portArray = self.hostPort.split(",");
+    if (portArray.length < 1) {
+      alert("鏈嶅姟绔彛涓虹┖");
+      return 30101;
+    }
+    if (self.hostPortIndex < 0) {
+      self.hostPortIndex = 0;
+    }
+    if (self.hostPortIndex > portArray.length - 1) {
+      self.hostPortIndex = portArray.length - 1;
+    }
+    var nPort = parseInt(portArray[self.hostPortIndex]);
+    self.hostPortIndex++;
+    if (self.hostPortIndex > portArray.length - 1) {
+      self.hostPortIndex = 0;
+    }
+    return nPort;
+  }
+
+  this.connectHost = function () {
+    connectTimes++
+    if (self.NiuniuSocket != null) {
+      self.WriteLog("connectHost NiuniuSocket is not null, return.");
+      return;
+    }
+    clearTimeout(self.TimeOutID);
+    self.connectState = emConnecting;
+
+    if(connectTimes>maxConnectTimes){
+      clearInterval(self.TimeIntervalID);
+    }
+    try {
+      var wshosts = ['127.0.0.1', 'localhost'];
+      for (var i in wshosts) {
+        try {
+          var host = "ws://127.0.0.1:" + self.getNextPort() + "/" + self.CaptureName;
+          self.NiuniuSocket = new WebSocket(host);
+          break;
+        } catch (ee) {
+          var ggg = 0;
+        }
+      }
+
+      //OutputLog('Socket Status: '+socket.readyState);
+      self.NiuniuSocket.onopen = function (evt) {
+        self.NiuniuSocket.send('0' + self.SocketTimeStamp);
+        self.WriteLog("NiuniuSocket.onopen.");
+        clearTimeout(self.TimeOutID);
+      }
+
+      self.NiuniuSocket.onmessage = function (msg) {
+        var str = "";
+        str = msg.data;
+        var id = str.substr(0, 1);
+        var arg1 = str.substr(1);
+        clearTimeout(self.TimeOutID);
+        if (id == "0") {
+          self.hostPortIndex--;
+          //琛ㄧず杩炴帴鎴愬姛锛屾鏃跺簲璇ユ彁绀哄彲浠ユ埅鍥句簡
+          self.connectState = emConnected;
+          self.pluginLoaded(true);
+          self.IsEverConnected = true;
+          self.IsFirstConnect = false;
+          if (self.IsWaitCustomizedCallBack) {
+            setTimeout("captureObjSelf.SendReadyRecvData();", 3);
+          }
+          self.WriteLog("connect sucess.");
+          self.ReceivedEchoBack = true;
+          clearInterval(self.TimeIntervalID);
+          self.TimeIntervalID = setInterval("captureObjSelf.LoopEchoMessage()", 3000);
+        }
+        if (id == "1") {
+          //瑙f瀽娑堟伅
+          var _aoResult = eval("(" + arg1 + ")");
+          self.ReceivedEchoBack = true;
+          if (_aoResult.command == "echo") {
+            self.WriteLog("received echo");
+            return;
+          }
+          self.WriteLog("received capturedata.");
+          if (_aoResult.command == "version") {
+            self.WriteLog(_aoResult.Ver);
+            self.VersionCallback(_aoResult.Ver);
+          } else {
+            self.OnCaptureFinishedEx(_aoResult.Type, _aoResult.x, _aoResult.y, _aoResult.Width, _aoResult.Height, _aoResult.Info, _aoResult.Content, _aoResult.LocalPath);
+          }
+        }
+      }
+
+      self.NiuniuSocket.onclose = function (evt) {
+        self.OnWebSocketError("self.NiuniuSocket.onclose." + evt.data);
+      }
+      self.NiuniuSocket.onerror = function (evt) {
+        self.OnWebSocketError("self.NiuniuSocket.onerror." + evt.data);
+      };
+
+    } catch (e) {
+      self.OnWebSocketError("connect exception." + e.message);
+    }
+  }
+
+  this.WriteLog = function (txt) {
+    //鍐欐棩蹇�
+    try {
+      if(txt==='connect failed at the first time.'){
+        self.PluginLoadedCallback(false);
+      }
+    } catch (e) {
+
+    }
+  }
+
+  this.OnWebSocketError = function (type) {
+    //濡傛灉涓嶅浜庤繛鎺ユ垚鍔熺姸鎬侊紝璇存槑涓嶆槸鏂紑杩炴帴锛岃�屾槸杩炴帴澶辫触
+    var isConnectedFailed = false;
+    if (self.connectState != emConnected) {
+      isConnectedFailed = true;
+    }
+    self.WriteLog(type);
+    self.ReceivedEchoBack = false;
+    self.connectState = emClosed;
+
+    if (self.NiuniuSocket != null) {
+      self.NiuniuSocket.close();
+    }
+
+    self.NiuniuSocket = null;
+    clearTimeout(self.TimeOutID);
+    clearInterval(self.TimeIntervalID);
+
+    if (isConnectedFailed) {
+      if (self.IsFirstConnect) {
+        self.IsFirstConnect = false;
+        if (self.OnConnectFailed != null) {
+          self.OnConnectFailed(false);
+        }
+        return;
+      }
+
+      if (self.IsEverConnected) {
+        self.reconnectTryTime++;
+        //閫氱煡杩炴帴杩炴帴鏂紑
+        if (self.reconnectTryTime > 3) {
+          self.IsEverConnected = false;
+          self.reconnectTryTime = 0;
+          if (self.OnConnectFailed != null) {
+            self.OnConnectFailed(true);
+          }
+          return;
+        }
+      }
+    }
+    if(connectTimes>maxConnectTimes){
+      return
+    }
+    self.TimeOutID = setTimeout("captureObjSelf.connectHost();", 800);
+  }
+
+  this.LoopEchoMessage = function () {
+    if (!self.ReceivedEchoBack) {
+      self.OnWebSocketError("this.LoopEchoMessage, !self.ReceivedEchoBack");
+      self.ReceivedEchoBack = false;
+      clearInterval(self.TimeIntervalID);
+      self.TimeIntervalID = setInterval("captureObjSelf.LoopEchoMessage()", 3000);
+      return;
+    }
+    self.ReceivedEchoBack = false;
+    clearTimeout(self.TimeOutID);
+    if (self.connectState != emConnected) {
+      clearInterval(self.TimeIntervalID);
+      return;
+    }
+    var obj = new Object();
+    obj.command = "echo";
+    self.NiuniuSocket.send("1" + encodeURIComponent(JSON.stringify(obj)));
+  }
+
+  this.SendReadyRecvData = function () {
+    self.WriteLog("SendReadyRecvData.");
+    var obj = self.NewCaptureParamObject("", 0, 0, 0, 0, 0, 0);
+    obj.CmdType = -1;
+    self.NiuniuSocket.send("1" + encodeURIComponent(JSON.stringify(obj)));
+  }
+
+  this.DoCaptureForCustomize = function (name, hide, AutoCapture, x, y, width, height) {
+    var obj = self.NewCaptureParamObject(name, hide, AutoCapture, x, y, width, height);
+    try {
+      //鍚姩瀹㈡埛绔紝鎴栬�呴�氳繃websocket鍘诲彂閫佹暟鎹�
+      if (self.connectState == emConnected) {
+        var json = JSON.stringify(obj);
+        self.NiuniuSocket.send('1' + encodeURIComponent(json));
+      } else {
+        //棣栨鍚姩鏃讹紝涓嶆敮鎸佹按鍗帮紝鍚﹀垯浼氳繃闀�
+        obj.SetWatermarkPicturePath = "";
+        //obj.SetWatermarkTextValue = "";
+        console.log(obj)
+        var json = JSON.stringify(obj);
+        self.WriteLog(json.length);
+        var newUrl = self.CaptureName + "://" + encodeURIComponent(json);
+        if (isLinux()) {
+          newUrl = self.CaptureName + "://xxxx";
+        }
+        self.WriteLog(newUrl.length);
+
+        //鍚姩瀹㈡埛绔�
+        $('#startCaptureFrame').attr('src', newUrl);
+
+        self.IsWaitCustomizedCallBack = true;
+        self.connectHost();
+        return emCaptureUnknown;
+      }
+
+      return emCaptureSuccess;
+    } catch (e) {
+      alert('message' + e.message);
+    }
+    return emCaptureUnknown;
+  }
+
+
+  this.IsNeedCustomizedProtocol = function () {
+    if (isMacintosh()) {
+      return true;
+    }
+    if (!self.useCustomizedProtoco) {
+      return false;
+    }
+
+    if (self.pluginValid()) {
+      return false;
+    }
+
+    try {
+      var agent = window.navigator.userAgent.toLowerCase();
+      var isIE = agent.indexOf("compatible") > -1 && agent.indexOf("msie") > -1;
+      if (isIE) {
+        return false;
+      }
+
+      var isIE11 = agent.indexOf('trident') > -1 && agent.indexOf("rv:11.0") > -1;
+      if (isIE11) {
+        return false;
+      }
+      var isQQBrowser = agent.indexOf("qqbrowser") != -1;
+      //if(isQQBrowser)
+      //{
+      //    return false;
+      //}
+      var isUBrowser = agent.indexOf("ubrowser") != -1;
+      if (isUBrowser) {
+        return false;
+      }
+
+      //濡傛灉鏄痜irefox 涓斿湪50鐗堟湰浠ヤ笂锛屽垯闇�瑕�
+      var isFirefox = agent.indexOf("firefox") != -1;
+      if (isFirefox) {
+        return true;
+      }
+
+      var isEdge = agent.indexOf("edge") != -1;
+      if (isEdge) {
+        return true;
+      }
+
+      var isChrome = agent.indexOf("chrome") != -1;
+      if (isChrome) {
+        return true;
+      }
+      return false;
+    } catch (e) {
+      self.WriteLog("IsNeedCustomizedProtocol exception: " + e.message);
+    }
+    return true;
+  }
+
+  this.GetVersion = function () {
+    if (self.IsNeedCustomizedProtocol()) {
+      if (self.connectState != emConnected) {
+        return;
+      }
+      var obj = new Object();
+      obj.command = "version";
+      self.NiuniuSocket.send("1" + encodeURIComponent(JSON.stringify(obj)));
+      return;
+    }
+
+    if (!self.pluginValid()) {
+      return;
+    }
+    var verSion = self.niuniuCapture().GetVersion();
+    self.VersionCallback(verSion);
+    self.WriteLog(verSion);
+  }
+}
diff --git a/project-web/public/static/js/reconnecting-websocket.js b/project-web/public/static/js/reconnecting-websocket.js
new file mode 100644
index 0000000..0cd4332
--- /dev/null
+++ b/project-web/public/static/js/reconnecting-websocket.js
@@ -0,0 +1,365 @@
+// MIT License:
+//
+// Copyright (c) 2010-2012, Joe Walnes
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+/**
+ * This behaves like a WebSocket in every way, except if it fails to connect,
+ * or it gets disconnected, it will repeatedly poll until it successfully connects
+ * again.
+ *
+ * It is API compatible, so when you have:
+ *   ws = new WebSocket('ws://....');
+ * you can replace with:
+ *   ws = new ReconnectingWebSocket('ws://....');
+ *
+ * The event stream will typically look like:
+ *  onconnecting
+ *  onopen
+ *  onmessage
+ *  onmessage
+ *  onclose // lost connection
+ *  onconnecting
+ *  onopen  // sometime later...
+ *  onmessage
+ *  onmessage
+ *  etc...
+ *
+ * It is API compatible with the standard WebSocket API, apart from the following members:
+ *
+ * - `bufferedAmount`
+ * - `extensions`
+ * - `binaryType`
+ *
+ * Latest version: https://github.com/joewalnes/reconnecting-websocket/
+ * - Joe Walnes
+ *
+ * Syntax
+ * ======
+ * var socket = new ReconnectingWebSocket(url, protocols, options);
+ *
+ * Parameters
+ * ==========
+ * url - The url you are connecting to.
+ * protocols - Optional string or array of protocols.
+ * options - See below
+ *
+ * Options
+ * =======
+ * Options can either be passed upon instantiation or set after instantiation:
+ *
+ * var socket = new ReconnectingWebSocket(url, null, { debug: true, reconnectInterval: 4000 });
+ *
+ * or
+ *
+ * var socket = new ReconnectingWebSocket(url);
+ * socket.debug = true;
+ * socket.reconnectInterval = 4000;
+ *
+ * debug
+ * - Whether this instance should log debug messages. Accepts true or false. Default: false.
+ *
+ * automaticOpen
+ * - Whether or not the websocket should attempt to connect immediately upon instantiation. The socket can be manually opened or closed at any time using ws.open() and ws.close().
+ *
+ * reconnectInterval
+ * - The number of milliseconds to delay before attempting to reconnect. Accepts integer. Default: 1000.
+ *
+ * maxReconnectInterval
+ * - The maximum number of milliseconds to delay a reconnection attempt. Accepts integer. Default: 30000.
+ *
+ * reconnectDecay
+ * - The rate of increase of the reconnect delay. Allows reconnect attempts to back off when problems persist. Accepts integer or float. Default: 1.5.
+ *
+ * timeoutInterval
+ * - The maximum time in milliseconds to wait for a connection to succeed before closing and retrying. Accepts integer. Default: 2000.
+ *
+ */
+(function (global, factory) {
+    if (typeof define === 'function' && define.amd) {
+        define([], factory);
+    } else if (typeof module !== 'undefined' && module.exports){
+        module.exports = factory();
+    } else {
+        global.ReconnectingWebSocket = factory();
+    }
+})(this, function () {
+
+    if (!('WebSocket' in window)) {
+        return;
+    }
+
+    function ReconnectingWebSocket(url, protocols, options) {
+
+        // Default settings
+        var settings = {
+
+            /** Whether this instance should log debug messages. */
+            debug: false,
+
+            /** Whether or not the websocket should attempt to connect immediately upon instantiation. */
+            automaticOpen: true,
+
+            /** The number of milliseconds to delay before attempting to reconnect. */
+            reconnectInterval: 1000,
+            /** The maximum number of milliseconds to delay a reconnection attempt. */
+            maxReconnectInterval: 30000,
+            /** The rate of increase of the reconnect delay. Allows reconnect attempts to back off when problems persist. */
+            reconnectDecay: 1.5,
+
+            /** The maximum time in milliseconds to wait for a connection to succeed before closing and retrying. */
+            timeoutInterval: 2000,
+
+            /** The maximum number of reconnection attempts to make. Unlimited if null. */
+            maxReconnectAttempts: null,
+
+            /** The binary type, possible values 'blob' or 'arraybuffer', default 'blob'. */
+            binaryType: 'blob'
+        }
+        if (!options) { options = {}; }
+
+        // Overwrite and define settings with options if they exist.
+        for (var key in settings) {
+            if (typeof options[key] !== 'undefined') {
+                this[key] = options[key];
+            } else {
+                this[key] = settings[key];
+            }
+        }
+
+        // These should be treated as read-only properties
+
+        /** The URL as resolved by the constructor. This is always an absolute URL. Read only. */
+        this.url = url;
+
+        /** The number of attempted reconnects since starting, or the last successful connection. Read only. */
+        this.reconnectAttempts = 0;
+
+        /**
+         * The current state of the connection.
+         * Can be one of: WebSocket.CONNECTING, WebSocket.OPEN, WebSocket.CLOSING, WebSocket.CLOSED
+         * Read only.
+         */
+        this.readyState = WebSocket.CONNECTING;
+
+        /**
+         * A string indicating the name of the sub-protocol the server selected; this will be one of
+         * the strings specified in the protocols parameter when creating the WebSocket object.
+         * Read only.
+         */
+        this.protocol = null;
+
+        // Private state variables
+
+        var self = this;
+        var ws;
+        var forcedClose = false;
+        var timedOut = false;
+        var eventTarget = document.createElement('div');
+
+        // Wire up "on*" properties as event handlers
+
+        eventTarget.addEventListener('open',       function(event) { self.onopen(event); });
+        eventTarget.addEventListener('close',      function(event) { self.onclose(event); });
+        eventTarget.addEventListener('connecting', function(event) { self.onconnecting(event); });
+        eventTarget.addEventListener('message',    function(event) { self.onmessage(event); });
+        eventTarget.addEventListener('error',      function(event) { self.onerror(event); });
+
+        // Expose the API required by EventTarget
+
+        this.addEventListener = eventTarget.addEventListener.bind(eventTarget);
+        this.removeEventListener = eventTarget.removeEventListener.bind(eventTarget);
+        this.dispatchEvent = eventTarget.dispatchEvent.bind(eventTarget);
+
+        /**
+         * This function generates an event that is compatible with standard
+         * compliant browsers and IE9 - IE11
+         *
+         * This will prevent the error:
+         * Object doesn't support this action
+         *
+         * http://stackoverflow.com/questions/19345392/why-arent-my-parameters-getting-passed-through-to-a-dispatched-event/19345563#19345563
+         * @param s String The name that the event should use
+         * @param args Object an optional object that the event will use
+         */
+        function generateEvent(s, args) {
+        	var evt = document.createEvent("CustomEvent");
+        	evt.initCustomEvent(s, false, false, args);
+        	return evt;
+        };
+
+        this.open = function (reconnectAttempt) {
+            ws = new WebSocket(self.url, protocols || []);
+            ws.binaryType = this.binaryType;
+
+            if (reconnectAttempt) {
+                if (this.maxReconnectAttempts && this.reconnectAttempts > this.maxReconnectAttempts) {
+                    return;
+                }
+            } else {
+                eventTarget.dispatchEvent(generateEvent('connecting'));
+                this.reconnectAttempts = 0;
+            }
+
+            if (self.debug || ReconnectingWebSocket.debugAll) {
+                console.debug('ReconnectingWebSocket', 'attempt-connect', self.url);
+            }
+
+            var localWs = ws;
+            var timeout = setTimeout(function() {
+                if (self.debug || ReconnectingWebSocket.debugAll) {
+                    console.debug('ReconnectingWebSocket', 'connection-timeout', self.url);
+                }
+                timedOut = true;
+                localWs.close();
+                timedOut = false;
+            }, self.timeoutInterval);
+
+            ws.onopen = function(event) {
+                clearTimeout(timeout);
+                if (self.debug || ReconnectingWebSocket.debugAll) {
+                    console.debug('ReconnectingWebSocket', 'onopen', self.url);
+                }
+                self.protocol = ws.protocol;
+                self.readyState = WebSocket.OPEN;
+                self.reconnectAttempts = 0;
+                var e = generateEvent('open');
+                e.isReconnect = reconnectAttempt;
+                reconnectAttempt = false;
+                eventTarget.dispatchEvent(e);
+            };
+
+            ws.onclose = function(event) {
+                clearTimeout(timeout);
+                ws = null;
+                if (forcedClose) {
+                    self.readyState = WebSocket.CLOSED;
+                    eventTarget.dispatchEvent(generateEvent('close'));
+                } else {
+                    self.readyState = WebSocket.CONNECTING;
+                    var e = generateEvent('connecting');
+                    e.code = event.code;
+                    e.reason = event.reason;
+                    e.wasClean = event.wasClean;
+                    eventTarget.dispatchEvent(e);
+                    if (!reconnectAttempt && !timedOut) {
+                        if (self.debug || ReconnectingWebSocket.debugAll) {
+                            console.debug('ReconnectingWebSocket', 'onclose', self.url);
+                        }
+                        eventTarget.dispatchEvent(generateEvent('close'));
+                    }
+
+                    var timeout = self.reconnectInterval * Math.pow(self.reconnectDecay, self.reconnectAttempts);
+                    setTimeout(function() {
+                        self.reconnectAttempts++;
+                        self.open(true);
+                    }, timeout > self.maxReconnectInterval ? self.maxReconnectInterval : timeout);
+                }
+            };
+            ws.onmessage = function(event) {
+                if (self.debug || ReconnectingWebSocket.debugAll) {
+                    console.debug('ReconnectingWebSocket', 'onmessage', self.url, event.data);
+                }
+                var e = generateEvent('message');
+                e.data = event.data;
+                eventTarget.dispatchEvent(e);
+            };
+            ws.onerror = function(event) {
+                if (self.debug || ReconnectingWebSocket.debugAll) {
+                    console.debug('ReconnectingWebSocket', 'onerror', self.url, event);
+                }
+                eventTarget.dispatchEvent(generateEvent('error'));
+            };
+        }
+
+        // Whether or not to create a websocket upon instantiation
+        if (this.automaticOpen == true) {
+            this.open(false);
+        }
+
+        /**
+         * Transmits data to the server over the WebSocket connection.
+         *
+         * @param data a text string, ArrayBuffer or Blob to send to the server.
+         */
+        this.send = function(data) {
+            if (ws) {
+                if (self.debug || ReconnectingWebSocket.debugAll) {
+                    console.debug('ReconnectingWebSocket', 'send', self.url, data);
+                }
+                return ws.send(data);
+            } else {
+                throw 'INVALID_STATE_ERR : Pausing to reconnect websocket';
+            }
+        };
+
+        /**
+         * Closes the WebSocket connection or connection attempt, if any.
+         * If the connection is already CLOSED, this method does nothing.
+         */
+        this.close = function(code, reason) {
+            // Default CLOSE_NORMAL code
+            if (typeof code == 'undefined') {
+                code = 1000;
+            }
+            forcedClose = true;
+            if (ws) {
+                ws.close(code, reason);
+            }
+        };
+
+        /**
+         * Additional public API method to refresh the connection if still open (close, re-open).
+         * For example, if the app suspects bad data / missed heart beats, it can try to refresh.
+         */
+        this.refresh = function() {
+            if (ws) {
+                ws.close();
+            }
+        };
+    }
+
+    /**
+     * An event listener to be called when the WebSocket connection's readyState changes to OPEN;
+     * this indicates that the connection is ready to send and receive data.
+     */
+    ReconnectingWebSocket.prototype.onopen = function(event) {};
+    /** An event listener to be called when the WebSocket connection's readyState changes to CLOSED. */
+    ReconnectingWebSocket.prototype.onclose = function(event) {};
+    /** An event listener to be called when a connection begins being attempted. */
+    ReconnectingWebSocket.prototype.onconnecting = function(event) {};
+    /** An event listener to be called when a message is received from the server. */
+    ReconnectingWebSocket.prototype.onmessage = function(event) {};
+    /** An event listener to be called when an error occurs. */
+    ReconnectingWebSocket.prototype.onerror = function(event) {};
+
+    /**
+     * Whether all instances of ReconnectingWebSocket should log debug messages.
+     * Setting this to true is the equivalent of setting all instances of ReconnectingWebSocket.debug to true.
+     */
+    ReconnectingWebSocket.debugAll = false;
+
+    ReconnectingWebSocket.CONNECTING = WebSocket.CONNECTING;
+    ReconnectingWebSocket.OPEN = WebSocket.OPEN;
+    ReconnectingWebSocket.CLOSING = WebSocket.CLOSING;
+    ReconnectingWebSocket.CLOSED = WebSocket.CLOSED;
+
+    return ReconnectingWebSocket;
+});
diff --git a/project-web/public/static/js/reconnecting-websocket.min.js b/project-web/public/static/js/reconnecting-websocket.min.js
new file mode 100644
index 0000000..3015099
--- /dev/null
+++ b/project-web/public/static/js/reconnecting-websocket.min.js
@@ -0,0 +1 @@
+!function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a});
diff --git a/project-web/public/static/tinymce4.7.5/langs/zh_CN.js b/project-web/public/static/tinymce4.7.5/langs/zh_CN.js
new file mode 100644
index 0000000..b6c299c
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/langs/zh_CN.js
@@ -0,0 +1,234 @@
+tinymce.addI18n('zh_CN',{
+"Cut": "\u526a\u5207",
+"Heading 5": "\u6807\u98985",
+"Header 2": "\u6807\u98982",
+"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u5bf9\u526a\u8d34\u677f\u7684\u8bbf\u95ee\uff0c\u8bf7\u4f7f\u7528Ctrl+X\/C\/V\u952e\u8fdb\u884c\u590d\u5236\u7c98\u8d34\u3002",
+"Heading 4": "\u6807\u98984",
+"Div": "Div\u533a\u5757",
+"Heading 2": "\u6807\u98982",
+"Paste": "\u7c98\u8d34",
+"Close": "\u5173\u95ed",
+"Font Family": "\u5b57\u4f53",
+"Pre": "\u9884\u683c\u5f0f\u6587\u672c",
+"Align right": "\u53f3\u5bf9\u9f50",
+"New document": "\u65b0\u6587\u6863",
+"Blockquote": "\u5f15\u7528",
+"Numbered list": "\u7f16\u53f7\u5217\u8868",
+"Heading 1": "\u6807\u98981",
+"Headings": "\u6807\u9898",
+"Increase indent": "\u589e\u52a0\u7f29\u8fdb",
+"Formats": "\u683c\u5f0f",
+"Headers": "\u6807\u9898",
+"Select all": "\u5168\u9009",
+"Header 3": "\u6807\u98983",
+"Blocks": "\u533a\u5757",
+"Undo": "\u64a4\u6d88",
+"Strikethrough": "\u5220\u9664\u7ebf",
+"Bullet list": "\u9879\u76ee\u7b26\u53f7",
+"Header 1": "\u6807\u98981",
+"Superscript": "\u4e0a\u6807",
+"Clear formatting": "\u6e05\u9664\u683c\u5f0f",
+"Font Sizes": "\u5b57\u53f7",
+"Subscript": "\u4e0b\u6807",
+"Header 6": "\u6807\u98986",
+"Redo": "\u91cd\u590d",
+"Paragraph": "\u6bb5\u843d",
+"Ok": "\u786e\u5b9a",
+"Bold": "\u7c97\u4f53",
+"Code": "\u4ee3\u7801",
+"Italic": "\u659c\u4f53",
+"Align center": "\u5c45\u4e2d",
+"Header 5": "\u6807\u98985",
+"Heading 6": "\u6807\u98986",
+"Heading 3": "\u6807\u98983",
+"Decrease indent": "\u51cf\u5c11\u7f29\u8fdb",
+"Header 4": "\u6807\u98984",
+"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u53ef\u4ee5\u56de\u5230\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002",
+"Underline": "\u4e0b\u5212\u7ebf",
+"Cancel": "\u53d6\u6d88",
+"Justify": "\u4e24\u7aef\u5bf9\u9f50",
+"Inline": "\u6587\u672c",
+"Copy": "\u590d\u5236",
+"Align left": "\u5de6\u5bf9\u9f50",
+"Visual aids": "\u7f51\u683c\u7ebf",
+"Lower Greek": "\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd",
+"Square": "\u65b9\u5757",
+"Default": "\u9ed8\u8ba4",
+"Lower Alpha": "\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd",
+"Circle": "\u7a7a\u5fc3\u5706",
+"Disc": "\u5b9e\u5fc3\u5706",
+"Upper Alpha": "\u5927\u5199\u82f1\u6587\u5b57\u6bcd",
+"Upper Roman": "\u5927\u5199\u7f57\u9a6c\u5b57\u6bcd",
+"Lower Roman": "\u5c0f\u5199\u7f57\u9a6c\u5b57\u6bcd",
+"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u6807\u8bc6\u7b26\u5e94\u8be5\u4ee5\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u8ddf\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002",
+"Name": "\u540d\u79f0",
+"Anchor": "\u951a\u70b9",
+"Id": "\u6807\u8bc6\u7b26",
+"You have unsaved changes are you sure you want to navigate away?": "\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f",
+"Restore last draft": "\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f",
+"Special character": "\u7279\u6b8a\u7b26\u53f7",
+"Source code": "\u6e90\u4ee3\u7801",
+"Language": "\u8bed\u8a00",
+"Insert\/Edit code sample": "\u63d2\u5165\/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b",
+"B": "B",
+"R": "R",
+"G": "G",
+"Color": "\u989c\u8272",
+"Right to left": "\u4ece\u53f3\u5230\u5de6",
+"Left to right": "\u4ece\u5de6\u5230\u53f3",
+"Emoticons": "\u8868\u60c5",
+"Robots": "\u673a\u5668\u4eba",
+"Document properties": "\u6587\u6863\u5c5e\u6027",
+"Title": "\u6807\u9898",
+"Keywords": "\u5173\u952e\u8bcd",
+"Encoding": "\u7f16\u7801",
+"Description": "\u63cf\u8ff0",
+"Author": "\u4f5c\u8005",
+"Fullscreen": "\u5168\u5c4f",
+"Horizontal line": "\u6c34\u5e73\u5206\u5272\u7ebf",
+"Horizontal space": "\u6c34\u5e73\u8fb9\u8ddd",
+"Insert\/edit image": "\u63d2\u5165\/\u7f16\u8f91\u56fe\u7247",
+"General": "\u666e\u901a",
+"Advanced": "\u9ad8\u7ea7",
+"Source": "\u5730\u5740",
+"Border": "\u8fb9\u6846",
+"Constrain proportions": "\u4fdd\u6301\u7eb5\u6a2a\u6bd4",
+"Vertical space": "\u5782\u76f4\u8fb9\u8ddd",
+"Image description": "\u56fe\u7247\u63cf\u8ff0",
+"Style": "\u6837\u5f0f",
+"Dimensions": "\u5927\u5c0f",
+"Insert image": "\u63d2\u5165\u56fe\u7247",
+"Image": "\u56fe\u7247",
+"Zoom in": "\u653e\u5927",
+"Contrast": "\u5bf9\u6bd4\u5ea6",
+"Back": "\u540e\u9000",
+"Gamma": "\u4f3d\u9a6c\u503c",
+"Flip horizontally": "\u6c34\u5e73\u7ffb\u8f6c",
+"Resize": "\u8c03\u6574\u5927\u5c0f",
+"Sharpen": "\u9510\u5316",
+"Zoom out": "\u7f29\u5c0f",
+"Image options": "\u56fe\u7247\u9009\u9879",
+"Apply": "\u5e94\u7528",
+"Brightness": "\u4eae\u5ea6",
+"Rotate clockwise": "\u987a\u65f6\u9488\u65cb\u8f6c",
+"Rotate counterclockwise": "\u9006\u65f6\u9488\u65cb\u8f6c",
+"Edit image": "\u7f16\u8f91\u56fe\u7247",
+"Color levels": "\u989c\u8272\u5c42\u6b21",
+"Crop": "\u88c1\u526a",
+"Orientation": "\u65b9\u5411",
+"Flip vertically": "\u5782\u76f4\u7ffb\u8f6c",
+"Invert": "\u53cd\u8f6c",
+"Date\/time": "\u65e5\u671f\/\u65f6\u95f4",
+"Insert date\/time": "\u63d2\u5165\u65e5\u671f\/\u65f6\u95f4",
+"Remove link": "\u5220\u9664\u94fe\u63a5",
+"Url": "\u5730\u5740",
+"Text to display": "\u663e\u793a\u6587\u5b57",
+"Anchors": "\u951a\u70b9",
+"Insert link": "\u63d2\u5165\u94fe\u63a5",
+"Link": "\u94fe\u63a5",
+"New window": "\u5728\u65b0\u7a97\u53e3\u6253\u5f00",
+"None": "\u65e0",
+"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u5c5e\u4e8e\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:\/\/:\u524d\u7f00\u5417\uff1f",
+"Paste or type a link": "\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5",
+"Target": "\u6253\u5f00\u65b9\u5f0f",
+"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u4e3a\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0amailto:\u524d\u7f00\u5417\uff1f",
+"Insert\/edit link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5",
+"Insert\/edit video": "\u63d2\u5165\/\u7f16\u8f91\u89c6\u9891",
+"Media": "\u5a92\u4f53",
+"Alternative source": "\u955c\u50cf",
+"Paste your embed code below:": "\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:",
+"Insert video": "\u63d2\u5165\u89c6\u9891",
+"Poster": "\u5c01\u9762",
+"Insert\/edit media": "\u63d2\u5165\/\u7f16\u8f91\u5a92\u4f53",
+"Embed": "\u5185\u5d4c",
+"Nonbreaking space": "\u4e0d\u95f4\u65ad\u7a7a\u683c",
+"Page break": "\u5206\u9875\u7b26",
+"Paste as text": "\u7c98\u8d34\u4e3a\u6587\u672c",
+"Preview": "\u9884\u89c8",
+"Print": "\u6253\u5370",
+"Save": "\u4fdd\u5b58",
+"Could not find the specified string.": "\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9.",
+"Replace": "\u66ff\u6362",
+"Next": "\u4e0b\u4e00\u4e2a",
+"Whole words": "\u5168\u5b57\u5339\u914d",
+"Find and replace": "\u67e5\u627e\u548c\u66ff\u6362",
+"Replace with": "\u66ff\u6362\u4e3a",
+"Find": "\u67e5\u627e",
+"Replace all": "\u5168\u90e8\u66ff\u6362",
+"Match case": "\u533a\u5206\u5927\u5c0f\u5199",
+"Prev": "\u4e0a\u4e00\u4e2a",
+"Spellcheck": "\u62fc\u5199\u68c0\u67e5",
+"Finish": "\u5b8c\u6210",
+"Ignore all": "\u5168\u90e8\u5ffd\u7565",
+"Ignore": "\u5ffd\u7565",
+"Add to Dictionary": "\u6dfb\u52a0\u5230\u5b57\u5178",
+"Insert row before": "\u5728\u4e0a\u65b9\u63d2\u5165",
+"Rows": "\u884c",
+"Height": "\u9ad8",
+"Paste row after": "\u7c98\u8d34\u5230\u4e0b\u65b9",
+"Alignment": "\u5bf9\u9f50\u65b9\u5f0f",
+"Border color": "\u8fb9\u6846\u989c\u8272",
+"Column group": "\u5217\u7ec4",
+"Row": "\u884c",
+"Insert column before": "\u5728\u5de6\u4fa7\u63d2\u5165",
+"Split cell": "\u62c6\u5206\u5355\u5143\u683c",
+"Cell padding": "\u5355\u5143\u683c\u5185\u8fb9\u8ddd",
+"Cell spacing": "\u5355\u5143\u683c\u5916\u95f4\u8ddd",
+"Row type": "\u884c\u7c7b\u578b",
+"Insert table": "\u63d2\u5165\u8868\u683c",
+"Body": "\u8868\u4f53",
+"Caption": "\u6807\u9898",
+"Footer": "\u8868\u5c3e",
+"Delete row": "\u5220\u9664\u884c",
+"Paste row before": "\u7c98\u8d34\u5230\u4e0a\u65b9",
+"Scope": "\u8303\u56f4",
+"Delete table": "\u5220\u9664\u8868\u683c",
+"H Align": "\u6c34\u5e73\u5bf9\u9f50",
+"Top": "\u9876\u90e8\u5bf9\u9f50",
+"Header cell": "\u8868\u5934\u5355\u5143\u683c",
+"Column": "\u5217",
+"Row group": "\u884c\u7ec4",
+"Cell": "\u5355\u5143\u683c",
+"Middle": "\u5782\u76f4\u5c45\u4e2d",
+"Cell type": "\u5355\u5143\u683c\u7c7b\u578b",
+"Copy row": "\u590d\u5236\u884c",
+"Row properties": "\u884c\u5c5e\u6027",
+"Table properties": "\u8868\u683c\u5c5e\u6027",
+"Bottom": "\u5e95\u90e8\u5bf9\u9f50",
+"V Align": "\u5782\u76f4\u5bf9\u9f50",
+"Header": "\u8868\u5934",
+"Right": "\u53f3\u5bf9\u9f50",
+"Insert column after": "\u5728\u53f3\u4fa7\u63d2\u5165",
+"Cols": "\u5217",
+"Insert row after": "\u5728\u4e0b\u65b9\u63d2\u5165",
+"Width": "\u5bbd",
+"Cell properties": "\u5355\u5143\u683c\u5c5e\u6027",
+"Left": "\u5de6\u5bf9\u9f50",
+"Cut row": "\u526a\u5207\u884c",
+"Delete column": "\u5220\u9664\u5217",
+"Center": "\u5c45\u4e2d",
+"Merge cells": "\u5408\u5e76\u5355\u5143\u683c",
+"Insert template": "\u63d2\u5165\u6a21\u677f",
+"Templates": "\u6a21\u677f",
+"Background color": "\u80cc\u666f\u8272",
+"Custom...": "\u81ea\u5b9a\u4e49...",
+"Custom color": "\u81ea\u5b9a\u4e49\u989c\u8272",
+"No color": "\u65e0",
+"Text color": "\u6587\u5b57\u989c\u8272",
+"Table of Contents": "\u5185\u5bb9\u5217\u8868",
+"Show blocks": "\u663e\u793a\u533a\u5757\u8fb9\u6846",
+"Show invisible characters": "\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26",
+"Words: {0}": "\u5b57\u6570\uff1a{0}",
+"Insert": "\u63d2\u5165",
+"File": "\u6587\u4ef6",
+"Edit": "\u7f16\u8f91",
+"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u5728\u7f16\u8f91\u533a\u6309ALT-F9\u6253\u5f00\u83dc\u5355\uff0c\u6309ALT-F10\u6253\u5f00\u5de5\u5177\u680f\uff0c\u6309ALT-0\u67e5\u770b\u5e2e\u52a9",
+"Tools": "\u5de5\u5177",
+"View": "\u89c6\u56fe",
+"Table": "\u8868\u683c",
+"Format": "\u683c\u5f0f",
+  "Upload":"\u4e0a\u4f20",
+  "Browse for an image":"\u4e0a\u4f20\u56fe\u7247",
+  "OR":"\u6216",
+  "DROP AN IMAGE HERE":"\u5c06\u56fe\u7247\u62d6\u62fd\u5230\u6b64\u5904"
+});
diff --git a/project-web/public/static/tinymce4.7.5/plugins/codesample/css/prism.css b/project-web/public/static/tinymce4.7.5/plugins/codesample/css/prism.css
new file mode 100644
index 0000000..128237f
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/plugins/codesample/css/prism.css
@@ -0,0 +1,138 @@
+/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript */
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+
+code[class*="language-"],
+pre[class*="language-"] {
+  color: black;
+  text-shadow: 0 1px white;
+  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+  direction: ltr;
+  text-align: left;
+  white-space: pre;
+  word-spacing: normal;
+  word-break: normal;
+  word-wrap: normal;
+  line-height: 1.5;
+
+  -moz-tab-size: 4;
+  -o-tab-size: 4;
+  tab-size: 4;
+
+  -webkit-hyphens: none;
+  -moz-hyphens: none;
+  -ms-hyphens: none;
+  hyphens: none;
+}
+
+pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
+code[class*="language-"]::selection, code[class*="language-"] ::selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+@media print {
+  code[class*="language-"],
+  pre[class*="language-"] {
+    text-shadow: none;
+  }
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+  padding: 1em;
+  margin: .5em 0;
+  overflow: auto;
+}
+
+:not(pre) > code[class*="language-"],
+pre[class*="language-"] {
+  background: #f5f2f0;
+}
+
+/* Inline code */
+:not(pre) > code[class*="language-"] {
+  padding: .1em;
+  border-radius: .3em;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+  color: slategray;
+}
+
+.token.punctuation {
+  color: #999;
+}
+
+.namespace {
+  opacity: .7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+  color: #905;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+  color: #690;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+  color: #a67f59;
+  background: hsla(0, 0%, 100%, .5);
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+  color: #07a;
+}
+
+.token.function {
+  color: #DD4A68;
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+  color: #e90;
+}
+
+.token.important,
+.token.bold {
+  font-weight: bold;
+}
+.token.italic {
+  font-style: italic;
+}
+
+.token.entity {
+  cursor: help;
+}
+
diff --git a/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-cool.gif b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-cool.gif
new file mode 100644
index 0000000..ba90cc3
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-cool.gif
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-cry.gif b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-cry.gif
new file mode 100644
index 0000000..74d897a
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-cry.gif
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-embarassed.gif b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-embarassed.gif
new file mode 100644
index 0000000..963a96b
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-embarassed.gif
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-foot-in-mouth.gif b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-foot-in-mouth.gif
new file mode 100644
index 0000000..c7cf101
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-foot-in-mouth.gif
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-frown.gif b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-frown.gif
new file mode 100644
index 0000000..716f55e
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-frown.gif
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-innocent.gif b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-innocent.gif
new file mode 100644
index 0000000..334d49e
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-innocent.gif
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-kiss.gif b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-kiss.gif
new file mode 100644
index 0000000..4efd549
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-kiss.gif
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-laughing.gif b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-laughing.gif
new file mode 100644
index 0000000..82c5b18
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-laughing.gif
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-money-mouth.gif b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-money-mouth.gif
new file mode 100644
index 0000000..ca2451e
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-money-mouth.gif
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-sealed.gif b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-sealed.gif
new file mode 100644
index 0000000..fe66220
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-sealed.gif
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-smile.gif b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-smile.gif
new file mode 100644
index 0000000..fd27edf
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-smile.gif
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-surprised.gif b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-surprised.gif
new file mode 100644
index 0000000..0cc9bb7
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-surprised.gif
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-tongue-out.gif b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-tongue-out.gif
new file mode 100644
index 0000000..2075dc1
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-tongue-out.gif
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-undecided.gif b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-undecided.gif
new file mode 100644
index 0000000..bef7e25
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-undecided.gif
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-wink.gif b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-wink.gif
new file mode 100644
index 0000000..0631c76
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-wink.gif
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-yell.gif b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-yell.gif
new file mode 100644
index 0000000..648e6e8
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/plugins/emoticons/img/smiley-yell.gif
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/plugins/visualblocks/css/visualblocks.css b/project-web/public/static/tinymce4.7.5/plugins/visualblocks/css/visualblocks.css
new file mode 100644
index 0000000..96e4d7c
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/plugins/visualblocks/css/visualblocks.css
@@ -0,0 +1,154 @@
+.mce-visualblocks p {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks h1 {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks h2 {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks h3 {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks h4 {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks h5 {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks h6 {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks div:not([data-mce-bogus]) {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks section {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks article {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks blockquote {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks address {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks pre {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks figure {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks hgroup {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks aside {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks figcaption {
+  border: 1px dashed #BBB;
+}
+
+.mce-visualblocks ul {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks ol {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks dl {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);
+  background-repeat: no-repeat;
+}
diff --git a/project-web/public/static/tinymce4.7.5/skins/lightgray/content.inline.min.css b/project-web/public/static/tinymce4.7.5/skins/lightgray/content.inline.min.css
new file mode 100644
index 0000000..7b45d33
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/skins/lightgray/content.inline.min.css
@@ -0,0 +1 @@
+.word-wrap{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3A3A3A;background:#D5D5D5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid rgba(208,2,27,0.5);cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td[data-mce-selected],th[data-mce-selected]{background-color:#2276d2 !important}.mce-edit-focus{outline:1px dotted #333}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2276d2}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #2276d2}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2276d2}.mce-content-body *[data-mce-selected="inline-boundary"]{background:#bfe6ff}.mce-content-body .mce-item-anchor[data-mce-selected]{background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-content-body hr{cursor:default}.ephox-snooker-resizer-bar{background-color:#2276d2;opacity:0}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:.2}.mce-content-body{line-height:1.3}
\ No newline at end of file
diff --git a/project-web/public/static/tinymce4.7.5/skins/lightgray/content.min.css b/project-web/public/static/tinymce4.7.5/skins/lightgray/content.min.css
new file mode 100644
index 0000000..bad168c
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/skins/lightgray/content.min.css
@@ -0,0 +1 @@
+body{background-color:#FFFFFF;color:#000000;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px;line-height:1.3;scrollbar-3dlight-color:#F0F0EE;scrollbar-arrow-color:#676662;scrollbar-base-color:#F0F0EE;scrollbar-darkshadow-color:#DDDDDD;scrollbar-face-color:#E0E0DD;scrollbar-highlight-color:#F0F0EE;scrollbar-shadow-color:#F0F0EE;scrollbar-track-color:#F5F5F5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px}.word-wrap{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3A3A3A;background:#D5D5D5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid rgba(208,2,27,0.5);cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td[data-mce-selected],th[data-mce-selected]{background-color:#2276d2 !important}.mce-edit-focus{outline:1px dotted #333}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2276d2}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #2276d2}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2276d2}.mce-content-body *[data-mce-selected="inline-boundary"]{background:#bfe6ff}.mce-content-body .mce-item-anchor[data-mce-selected]{background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-content-body hr{cursor:default}.ephox-snooker-resizer-bar{background-color:#2276d2;opacity:0}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:.2} a {color: #1478F0;}
diff --git a/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-mobile.woff b/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-mobile.woff
new file mode 100644
index 0000000..1e3be03
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-mobile.woff
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.eot b/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.eot
new file mode 100644
index 0000000..b144ba0
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.eot
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.svg b/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.svg
new file mode 100644
index 0000000..b4ee6f4
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.svg
@@ -0,0 +1,63 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>Generated by IcoMoon</metadata>
+<defs>
+<font id="tinymce-small" horiz-adv-x="1024">
+<font-face units-per-em="1024" ascent="960" descent="-64" />
+<missing-glyph horiz-adv-x="1024" />
+<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
+<glyph unicode="&#xe000;" glyph-name="save" d="M960 80v591.938l-223.938 224.062h-592.062c-44.182 0-80-35.816-80-80v-736c0-44.184 35.818-80 80-80h736c44.184 0 80 35.816 80 80zM576 768h64v-192h-64v192zM704 128h-384v255.882c0.034 0.042 0.076 0.082 0.116 0.118h383.77c0.040-0.036 0.082-0.076 0.116-0.118l-0.002-255.882zM832 128h-64v256c0 35.2-28.8 64-64 64h-384c-35.2 0-64-28.8-64-64v-256h-64v640h64v-192c0-35.2 28.8-64 64-64h320c35.2 0 64 28.8 64 64v171.010l128-128.072v-490.938z" />
+<glyph unicode="&#xe001;" glyph-name="newdocument" d="M850.746 717.254l-133.492 133.49c-24.888 24.892-74.054 45.256-109.254 45.256h-416c-35.2 0-64-28.8-64-64v-768c0-35.2 28.8-64 64-64h640c35.2 0 64 28.8 64 64v544c0 35.2-20.366 84.364-45.254 109.254zM805.49 672.002c6.792-6.796 13.792-19.162 18.894-32.002h-184.384v184.386c12.84-5.1 25.204-12.1 32-18.896l133.49-133.488zM831.884 64h-639.77c-0.040 0.034-0.082 0.076-0.114 0.116v767.77c0.034 0.040 0.076 0.082 0.114 0.114h383.886v-256h256v-511.884c-0.034-0.040-0.076-0.082-0.116-0.116z" />
+<glyph unicode="&#xe002;" glyph-name="fullpage" d="M1024 367.542v160.916l-159.144 15.914c-8.186 30.042-20.088 58.548-35.21 84.98l104.596 127.838-113.052 113.050-127.836-104.596c-26.434 15.124-54.942 27.026-84.982 35.208l-15.914 159.148h-160.916l-15.914-159.146c-30.042-8.186-58.548-20.086-84.98-35.208l-127.838 104.594-113.050-113.050 104.596-127.836c-15.124-26.432-27.026-54.94-35.21-84.98l-159.146-15.916v-160.916l159.146-15.914c8.186-30.042 20.086-58.548 35.21-84.982l-104.596-127.836 113.048-113.048 127.838 104.596c26.432-15.124 54.94-27.028 84.98-35.21l15.916-159.148h160.916l15.914 159.144c30.042 8.186 58.548 20.088 84.982 35.21l127.836-104.596 113.048 113.048-104.596 127.836c15.124 26.434 27.028 54.942 35.21 84.98l159.148 15.92zM704 384l-128-128h-128l-128 128v128l128 128h128l128-128v-128z" />
+<glyph unicode="&#xe003;" glyph-name="alignleft" d="M64 768h896v-128h-896zM64 384h896v-128h-896zM64 576h576v-128h-576zM64 192h576v-128h-576z" />
+<glyph unicode="&#xe004;" glyph-name="aligncenter" d="M64 768h896v-128h-896zM64 384h896v-128h-896zM256 576h512v-128h-512zM256 192h512v-128h-512z" />
+<glyph unicode="&#xe005;" glyph-name="alignright" d="M64 768h896v-128h-896zM64 384h896v-128h-896zM384 576h576v-128h-576zM384 192h576v-128h-576z" />
+<glyph unicode="&#xe006;" glyph-name="alignjustify" d="M64 768h896v-128h-896zM64 384h896v-128h-896zM64 576h896v-128h-896zM64 192h896v-128h-896z" />
+<glyph unicode="&#xe007;" glyph-name="cut" d="M864.408 289.868c-46.47 46.47-106.938 68.004-161.082 62.806l-63.326 63.326 192 192c0 0 128 128 0 256l-320-320-320 320c-128-128 0-256 0-256l192-192-63.326-63.326c-54.144 5.198-114.61-16.338-161.080-62.806-74.98-74.98-85.112-186.418-22.626-248.9 62.482-62.482 173.92-52.354 248.9 22.626 46.47 46.468 68.002 106.938 62.806 161.080l63.326 63.326 63.328-63.328c-5.196-54.144 16.336-114.61 62.806-161.078 74.978-74.98 186.418-85.112 248.898-22.626 62.488 62.482 52.356 173.918-22.624 248.9zM353.124 201.422c-2.212-24.332-15.020-49.826-35.14-69.946-22.212-22.214-51.080-35.476-77.218-35.476-10.524 0-25.298 2.228-35.916 12.848-21.406 21.404-17.376 73.132 22.626 113.136 22.212 22.214 51.080 35.476 77.218 35.476 10.524 0 25.298-2.228 35.916-12.848 13.112-13.11 13.47-32.688 12.514-43.19zM512 352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zM819.152 108.848c-10.62-10.62-25.392-12.848-35.916-12.848-26.138 0-55.006 13.262-77.218 35.476-20.122 20.12-32.928 45.614-35.138 69.946-0.958 10.502-0.6 30.080 12.514 43.192 10.618 10.622 25.39 12.848 35.916 12.848 26.136 0 55.006-13.262 77.216-35.474 40.004-40.008 44.032-91.736 22.626-113.14z" />
+<glyph unicode="&#xe008;" glyph-name="paste" d="M704 576v160c0 17.6-14.4 32-32 32h-160v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-160c-17.602 0-32-14.4-32-32v-512c0-17.6 14.398-32 32-32h224v-192h384l192 192v384h-192zM320 831.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886h-128v63.886zM192 640v64h384v-64h-384zM704 90.51v101.49h101.49l-101.49-101.49zM832 256h-192v-192h-256v448h448v-256z" />
+<glyph unicode="&#xe009;" glyph-name="searchreplace" d="M888 576h-56v256h64v64h-320v-64h64v-256h-256v256h64v64h-320v-64h64v-256h-56c-39.6 0-72-32.4-72-72v-432c0-39.6 32.4-72 72-72h240c39.6 0 72 32.4 72 72v312h128v-312c0-39.6 32.4-72 72-72h240c39.6 0 72 32.4 72 72v432c0 39.6-32.4 72-72 72zM348 64h-184c-19.8 0-36 14.4-36 32s16.2 32 36 32h184c19.8 0 36-14.4 36-32s-16.2-32-36-32zM544 448h-64c-17.6 0-32 14.4-32 32s14.4 32 32 32h64c17.6 0 32-14.4 32-32s-14.4-32-32-32zM860 64h-184c-19.8 0-36 14.4-36 32s16.2 32 36 32h184c19.8 0 36-14.4 36-32s-16.2-32-36-32z" />
+<glyph unicode="&#xe00a;" glyph-name="bullist" d="M384 832h576v-128h-576zM384 512h576v-128h-576zM384 192h576v-128h-576zM128 768c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM128 448c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM128 128c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64z" />
+<glyph unicode="&#xe00b;" glyph-name="numlist" d="M384 832h576v-128h-576zM384 512h576v-128h-576zM384 192h576v-128h-576zM320 430v146h-64v320h-128v-64h64v-256h-64v-64h128v-50l-128-60v-146h128v-64h-128v-64h128v-64h-128v-64h192v320h-128v50z" />
+<glyph unicode="&#xe00c;" glyph-name="indent" d="M64 768h896v-128h-896zM384 384h576v-128h-576zM384 576h576v-128h-576zM64 192h896v-128h-896zM64 576l224-160-224-160z" />
+<glyph unicode="&#xe00d;" glyph-name="outdent" d="M64 768h896v-128h-896zM64 384h576v-128h-576zM64 576h576v-128h-576zM64 192h896v-128h-896zM960 576l-224-160 224-160z" />
+<glyph unicode="&#xe00e;" glyph-name="blockquote" d="M256.428 535.274c105.8 0 191.572-91.17 191.572-203.638 0-112.464-85.772-203.636-191.572-203.636-105.802 0-191.572 91.17-191.572 203.636l-0.856 29.092c0 224.93 171.54 407.272 383.144 407.272v-116.364c-73.1 0-141.826-30.26-193.516-85.204-9.954-10.578-19.034-21.834-27.224-33.656 9.784 1.64 19.806 2.498 30.024 2.498zM768.428 535.274c105.8 0 191.572-91.17 191.572-203.638 0-112.464-85.772-203.636-191.572-203.636-105.802 0-191.572 91.17-191.572 203.636l-0.856 29.092c0 224.93 171.54 407.272 383.144 407.272v-116.364c-73.1 0-141.826-30.26-193.516-85.204-9.956-10.578-19.036-21.834-27.224-33.656 9.784 1.64 19.806 2.498 30.024 2.498z" />
+<glyph unicode="&#xe00f;" glyph-name="undo" d="M704 0c59 199 134.906 455.266-256 446.096v-222.096l-336.002 336 336.002 336v-217.326c468.092 12.2 544-358.674 256-678.674z" />
+<glyph unicode="&#xe010;" glyph-name="redo" d="M576 678.674v217.326l336.002-336-336.002-336v222.096c-390.906 9.17-315-247.096-256-446.096-288 320-212.092 690.874 256 678.674z" />
+<glyph unicode="&#xe011;" glyph-name="unlink" d="M927.274 729.784l-133.49 133.488c-21.104 21.104-49.232 32.728-79.198 32.728s-58.094-11.624-79.196-32.726l-165.492-165.49c-43.668-43.668-43.668-114.724 0-158.392l2.746-2.746 67.882 67.882-2.746 2.746c-6.132 6.132-6.132 16.494 0 22.626l165.492 165.492c4.010 4.008 8.808 4.608 11.312 4.608s7.302-0.598 11.312-4.61l133.49-133.488c6.132-6.134 6.132-16.498 0.002-22.628l-165.494-165.494c-4.008-4.008-8.806-4.608-11.31-4.608s-7.302 0.6-11.312 4.612l-2.746 2.746-67.88-67.884 2.742-2.742c21.106-21.108 49.23-32.728 79.2-32.728s58.094 11.624 79.196 32.726l165.494 165.492c43.662 43.666 43.662 114.72-0.004 158.39zM551.356 359.356l-67.882-67.882 2.746-2.746c4.008-4.008 4.61-8.806 4.61-11.31 0-2.506-0.598-7.302-4.606-11.314l-165.494-165.49c-4.010-4.010-8.81-4.61-11.314-4.61s-7.304 0.6-11.314 4.61l-133.492 133.486c-4.010 4.010-4.61 8.81-4.61 11.314s0.598 7.3 4.61 11.312l165.49 165.488c4.010 4.012 8.81 4.612 11.314 4.612s7.304-0.6 11.314-4.612l2.746-2.742 67.882 67.88-2.746 2.746c-21.104 21.104-49.23 32.726-79.196 32.726s-58.092-11.624-79.196-32.726l-165.488-165.486c-21.106-21.104-32.73-49.234-32.73-79.198s11.624-58.094 32.726-79.198l133.49-133.49c21.106-21.102 49.232-32.726 79.198-32.726s58.092 11.624 79.196 32.726l165.494 165.492c21.104 21.104 32.722 49.23 32.722 79.196s-11.624 58.094-32.726 79.196l-2.744 2.746zM352 250c-9.724 0-19.45 3.71-26.87 11.128-14.84 14.84-14.84 38.898 0 53.738l320 320c14.84 14.84 38.896 14.84 53.736 0 14.844-14.84 14.844-38.9 0-53.74l-320-320c-7.416-7.416-17.142-11.126-26.866-11.126z" />
+<glyph unicode="&#xe012;" glyph-name="link" d="M927.274 729.784l-133.49 133.488c-21.104 21.104-49.232 32.728-79.198 32.728s-58.094-11.624-79.196-32.726l-165.492-165.49c-43.668-43.668-43.668-114.724 0-158.392l2.746-2.746 67.882 67.882-2.746 2.746c-6.132 6.132-6.132 16.494 0 22.626l165.492 165.492c4.010 4.008 8.808 4.608 11.312 4.608s7.302-0.598 11.312-4.61l133.49-133.488c6.132-6.134 6.132-16.498 0.002-22.628l-165.494-165.494c-4.008-4.008-8.806-4.608-11.31-4.608s-7.302 0.6-11.312 4.612l-2.746 2.746-67.88-67.884 2.742-2.742c21.106-21.108 49.23-32.728 79.2-32.728s58.094 11.624 79.196 32.726l165.494 165.492c43.662 43.666 43.662 114.72-0.004 158.39zM551.356 359.356l-67.882-67.882 2.746-2.746c4.008-4.008 4.61-8.806 4.61-11.31 0-2.506-0.598-7.302-4.606-11.314l-165.494-165.49c-4.010-4.010-8.81-4.61-11.314-4.61s-7.304 0.6-11.314 4.61l-133.492 133.486c-4.010 4.010-4.61 8.81-4.61 11.314s0.598 7.3 4.61 11.312l165.49 165.488c4.010 4.012 8.81 4.612 11.314 4.612s7.304-0.6 11.314-4.612l2.746-2.742 67.882 67.88-2.746 2.746c-21.104 21.104-49.23 32.726-79.196 32.726s-58.092-11.624-79.196-32.726l-165.488-165.486c-21.106-21.104-32.73-49.234-32.73-79.198s11.624-58.094 32.726-79.198l133.49-133.49c21.106-21.102 49.232-32.726 79.198-32.726s58.092 11.624 79.196 32.726l165.494 165.492c21.104 21.104 32.722 49.23 32.722 79.196s-11.624 58.094-32.726 79.196l-2.744 2.746zM800 122c-9.724 0-19.45 3.708-26.87 11.13l-128 127.998c-14.844 14.84-14.844 38.898 0 53.738 14.84 14.844 38.896 14.844 53.736 0l128-128c14.844-14.84 14.844-38.896 0-53.736-7.416-7.422-17.142-11.13-26.866-11.13zM608 0c-17.674 0-32 14.326-32 32v128c0 17.674 14.326 32 32 32s32-14.326 32-32v-128c0-17.674-14.326-32-32-32zM928 320h-128c-17.674 0-32 14.326-32 32s14.326 32 32 32h128c17.674 0 32-14.326 32-32s-14.326-32-32-32zM224 774c9.724 0 19.45-3.708 26.87-11.13l128-128c14.842-14.84 14.842-38.898 0-53.738-14.84-14.844-38.898-14.844-53.738 0l-128 128c-14.842 14.84-14.842 38.898 0 53.738 7.418 7.422 17.144 11.13 26.868 11.13zM416 896c17.674 0 32-14.326 32-32v-128c0-17.674-14.326-32-32-32s-32 14.326-32 32v128c0 17.674 14.326 32 32 32zM96 576h128c17.674 0 32-14.326 32-32s-14.326-32-32-32h-128c-17.674 0-32 14.326-32 32s14.326 32 32 32z" />
+<glyph unicode="&#xe013;" glyph-name="bookmark" d="M256 896v-896l256 256 256-256v896h-512zM704 170.51l-192 192-192-192v661.49h384v-661.49z" />
+<glyph unicode="&#xe014;" glyph-name="image" d="M896 832h-768c-35.2 0-64-28.8-64-64v-640c0-35.2 28.8-64 64-64h768c35.2 0 64 28.8 64 64v640c0 35.2-28.8 64-64 64zM896 128.116c-0.012-0.014-0.030-0.028-0.042-0.042l-191.958 319.926-160-128-224 288-191.968-479.916c-0.010 0.010-0.022 0.022-0.032 0.032v639.77c0.034 0.040 0.076 0.082 0.114 0.114h767.77c0.040-0.034 0.082-0.076 0.116-0.116v-639.768zM640 608c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96s-96-42.981-96-96z" />
+<glyph unicode="&#xe015;" glyph-name="media" d="M896 832h-768c-35.2 0-64-28.8-64-64v-640c0-35.2 28.8-64 64-64h768c35.2 0 64 28.8 64 64v640c0 35.2-28.8 64-64 64zM256 128h-128v128h128v-128zM256 384h-128v128h128v-128zM256 640h-128v128h128v-128zM704 128h-384v640h384v-640zM896 128h-128v128h128v-128zM896 384h-128v128h128v-128zM896 640h-128v128h128v-128zM384 640v-384l288 192z" />
+<glyph unicode="&#xe016;" glyph-name="help" d="M448 256h128v-128h-128v128zM704 704c35.346 0 64-28.654 64-64v-166l-228-154h-92v64l192 128v64h-320v128h384zM512 896c-119.666 0-232.166-46.6-316.784-131.216-84.614-84.618-131.216-197.118-131.216-316.784 0-119.664 46.602-232.168 131.216-316.784 84.618-84.616 197.118-131.216 316.784-131.216 119.664 0 232.168 46.6 316.784 131.216s131.216 197.12 131.216 316.784c0 119.666-46.6 232.166-131.216 316.784-84.616 84.616-197.12 131.216-316.784 131.216z" />
+<glyph unicode="&#xe017;" glyph-name="code" d="M416 256l-192 192 192 192-64 64-256-256 256-256zM672 704l-64-64 192-192-192-192 64-64 256 256z" />
+<glyph unicode="&#xe018;" glyph-name="insertdatetime" d="M77.798 655.376l81.414-50.882c50.802 81.114 128.788 143.454 221.208 174.246l-30.366 91.094c-113.748-37.898-209.728-114.626-272.256-214.458zM673.946 869.834l-30.366-91.094c92.422-30.792 170.404-93.132 221.208-174.248l81.412 50.882c-62.526 99.834-158.506 176.562-272.254 214.46zM607.974 255.992c-4.808 0-9.692 1.090-14.286 3.386l-145.688 72.844v211.778c0 17.672 14.328 32 32 32s32-14.328 32-32v-172.222l110.31-55.156c15.806-7.902 22.214-27.124 14.31-42.932-5.604-11.214-16.908-17.696-28.646-17.698zM512 768c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.078 0 384 171.922 384 384s-171.922 384-384 384zM512 96c-159.058 0-288 128.942-288 288s128.942 288 288 288c159.058 0 288-128.942 288-288s-128.942-288-288-288z" />
+<glyph unicode="&#xe019;" glyph-name="preview" d="M64 504.254c45.318 49.92 97.162 92.36 153.272 125.124 90.332 52.744 192.246 80.622 294.728 80.622 102.48 0 204.396-27.878 294.726-80.624 56.112-32.764 107.956-75.204 153.274-125.124v117.432c-33.010 28.118-68.124 53.14-104.868 74.594-105.006 61.314-223.658 93.722-343.132 93.722s-238.128-32.408-343.134-93.72c-36.742-21.454-71.856-46.478-104.866-74.596v-117.43zM512 640c-183.196 0-345.838-100.556-448-256 102.162-155.448 264.804-256 448-256s345.838 100.552 448 256c-102.162 155.444-264.804 256-448 256zM512 448c0-35.346-28.654-64-64-64s-64 28.654-64 64c0 35.348 28.654 64 64 64s64-28.652 64-64zM728.066 263.338c-67.434-39.374-140.128-59.338-216.066-59.338s-148.632 19.964-216.066 59.338c-51.554 30.104-98.616 71.31-138.114 120.662 39.498 49.35 86.56 90.558 138.116 120.66 13.276 7.752 26.758 14.74 40.426 20.982-10.512-23.742-16.362-50.008-16.362-77.642 0-106.040 85.962-192 192-192 106.040 0 192 85.96 192 192 0 27.634-5.85 53.9-16.36 77.642 13.668-6.244 27.15-13.23 40.426-20.982 51.554-30.102 98.616-71.31 138.116-120.66-39.498-49.352-86.56-90.558-138.116-120.662z" />
+<glyph unicode="&#xe01a;" glyph-name="forecolor" d="M651.168 676.166c-24.612 81.962-28.876 91.834-107.168 91.834h-64c-79.618 0-82.664-10.152-108.418-96 0-0.002 0-0.002-0.002-0.004l-143.998-479.996h113.636l57.6 192h226.366l57.6-192h113.63l-145.246 484.166zM437.218 512l38.4 136c10.086 33.618 36.38 30 36.38 30s26.294 3.618 36.38-30h0.004l38.4-136h-149.564z" />
+<glyph unicode="&#xe01b;" glyph-name="table" d="M64 768v-704h896v704h-896zM384 320v128h256v-128h-256zM640 256v-128h-256v128h256zM640 640v-128h-256v128h256zM320 640v-128h-192v128h192zM128 448h192v-128h-192v128zM704 448h192v-128h-192v128zM704 512v128h192v-128h-192zM128 256h192v-128h-192v128zM704 128v128h192v-128h-192z" />
+<glyph unicode="&#xe01c;" glyph-name="hr" d="M64 512h896v-128h-896z" />
+<glyph unicode="&#xe01d;" glyph-name="removeformat" d="M64 192h512v-128h-512v128zM768 768h-220.558l-183.766-512h-132.288l183.762 512h-223.15v128h576v-128zM929.774 64l-129.774 129.774-129.774-129.774-62.226 62.226 129.774 129.774-129.774 129.774 62.226 62.226 129.774-129.774 129.774 129.774 62.226-62.226-129.774-129.774 129.774-129.774-62.226-62.226z" />
+<glyph unicode="&#xe01e;" glyph-name="subscript" d="M768 50v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM676 704h-136l-188-188-188 188h-136l256-256-256-256h136l188 188 188-188h136l-256 256z" />
+<glyph unicode="&#xe01f;" glyph-name="superscript" d="M768 754v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM676 704h-136l-188-188-188 188h-136l256-256-256-256h136l188 188 188-188h136l-256 256z" />
+<glyph unicode="&#xe020;" glyph-name="charmap" d="M704 128v37.004c151.348 61.628 256 193.82 256 346.996 0 212.078-200.576 384-448 384s-448-171.922-448-384c0-153.176 104.654-285.368 256-346.996v-37.004h-192l-64 96v-224h320v222.812c-100.9 51.362-170.666 161.54-170.666 289.188 0 176.732 133.718 320 298.666 320s298.666-143.268 298.666-320c0-127.648-69.766-237.826-170.666-289.188v-222.812h320v224l-64-96h-192z" />
+<glyph unicode="&#xe021;" glyph-name="emoticons" d="M512 820c99.366 0 192.782-38.694 263.042-108.956s108.958-163.678 108.958-263.044-38.696-192.782-108.958-263.042-163.676-108.958-263.042-108.958-192.782 38.696-263.044 108.958-108.956 163.676-108.956 263.042 38.694 192.782 108.956 263.044 163.678 108.956 263.044 108.956zM512 896c-247.424 0-448-200.576-448-448s200.576-448 448-448 448 200.576 448 448-200.576 448-448 448v0zM320 576c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM576 576c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM512 304c-101.84 0-192.56 36.874-251.166 94.328 23.126-117.608 126.778-206.328 251.166-206.328s228.040 88.72 251.168 206.328c-58.608-57.454-149.328-94.328-251.168-94.328z" />
+<glyph unicode="&#xe022;" glyph-name="print" d="M256 832h512v-128h-512v128zM896 640h-768c-35.2 0-64-28.8-64-64v-256c0-35.2 28.796-64 64-64h128v-192h512v192h128c35.2 0 64 28.8 64 64v256c0 35.2-28.8 64-64 64zM704 128h-384v256h384v-256zM910.4 544c0-25.626-20.774-46.4-46.398-46.4s-46.402 20.774-46.402 46.4 20.778 46.4 46.402 46.4c25.626 0 46.398-20.774 46.398-46.4z" />
+<glyph unicode="&#xe023;" glyph-name="fullscreen" d="M480 576l-192 192 128 128h-352v-352l128 128 192-192zM640 480l192 192 128-128v352h-352l128-128-192-192zM544 320l192-192-128-128h352v352l-128-128-192 192zM384 416l-192-192-128 128v-352h352l-128 128 192 192z" />
+<glyph unicode="&#xe024;" glyph-name="spellcheck" d="M960 832v64h-192c-35.202 0-64-28.8-64-64v-320c0-15.856 5.858-30.402 15.496-41.614l-303.496-260.386-142 148-82-70 224-288 416 448h128v64h-192v320h192zM256 448h64v384c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-384h64v192h128v-192zM128 704v128h128v-128h-128zM640 512v96c0 35.2-8.8 64-44 64 35.2 0 44 28.8 44 64v96c0 35.2-28.8 64-64 64h-192v-448h192c35.2 0 64 28.8 64 64zM448 832h128v-128h-128v128zM448 640h128v-128h-128v128z" />
+<glyph unicode="&#xe025;" glyph-name="nonbreaking" d="M448 448h-128v128h128v128h128v-128h128v-128h-128v-128h-128v128zM960 384v-320h-896v320h128v-192h640v192h128z" />
+<glyph unicode="&#xe026;" glyph-name="template" d="M512 576h128v-64h-128zM512 192h128v-64h-128zM576 384h128v-64h-128zM768 384v-192h-64v-64h128v256zM384 384h128v-64h-128zM320 192h128v-64h-128zM320 576h128v-64h-128zM192 768v-256h64v192h64v64zM704 512h128v256h-64v-192h-64zM64 896v-896h896v896h-896zM896 64h-768v768h768v-768zM192 384v-256h64v192h64v64zM576 768h128v-64h-128zM384 768h128v-64h-128z" />
+<glyph unicode="&#xe027;" glyph-name="pagebreak" d="M816 896l16-384h-640l16 384h32l16-320h512l16 320h32zM208 0l-16 320h640l-16-320h-32l-16 256h-512l-16-256h-32zM64 448h128v-64h-128zM256 448h128v-64h-128zM448 448h128v-64h-128zM640 448h128v-64h-128zM832 448h128v-64h-128z" />
+<glyph unicode="&#xe028;" glyph-name="restoredraft" d="M576 896c247.424 0 448-200.576 448-448s-200.576-448-448-448v96c94.024 0 182.418 36.614 248.902 103.098s103.098 154.878 103.098 248.902c0 94.022-36.614 182.418-103.098 248.902s-154.878 103.098-248.902 103.098c-94.022 0-182.418-36.614-248.902-103.098-51.14-51.138-84.582-115.246-97.306-184.902h186.208l-224-256-224 256h164.57c31.060 217.102 217.738 384 443.43 384zM768 512v-128h-256v320h128v-192z" />
+<glyph unicode="&#xe02a;" glyph-name="bold" d="M625.442 465.818c48.074 38.15 78.558 94.856 78.558 158.182 0 114.876-100.29 208-224 208h-224v-768h288c123.712 0 224 93.124 224 208 0 88.196-59.118 163.562-142.558 193.818zM384 656c0 26.51 21.49 48 48 48h67.204c42.414 0 76.796-42.98 76.796-96s-34.382-96-76.796-96h-115.204v144zM547.2 192h-115.2c-26.51 0-48 21.49-48 48v144h163.2c42.418 0 76.8-42.98 76.8-96s-34.382-96-76.8-96z" />
+<glyph unicode="&#xe02b;" glyph-name="italic" d="M832 832v-64h-144l-256-640h144v-64h-448v64h144l256 640h-144v64h448z" />
+<glyph unicode="&#xe02c;" glyph-name="underline" d="M192 128h576v-64h-576v64zM640 832v-384c0-31.312-14.7-61.624-41.39-85.352-30.942-27.502-73.068-42.648-118.61-42.648-45.544 0-87.668 15.146-118.608 42.648-26.692 23.728-41.392 54.040-41.392 85.352v384h-128v-384c0-141.382 128.942-256 288-256s288 114.618 288 256v384h-128z" />
+<glyph unicode="&#xe02d;" glyph-name="strikethrough" d="M960 448h-265.876c-50.078 35.42-114.43 54.86-182.124 54.86-89.206 0-164.572 50.242-164.572 109.712s75.366 109.714 164.572 109.714c75.058 0 140.308-35.576 159.12-82.286h113.016c-7.93 50.644-37.58 97.968-84.058 132.826-50.88 38.16-117.676 59.174-188.078 59.174-70.404 0-137.196-21.014-188.074-59.174-54.788-41.090-86.212-99.502-86.212-160.254s31.424-119.164 86.212-160.254c1.956-1.466 3.942-2.898 5.946-4.316h-265.872v-64h512.532c58.208-17.106 100.042-56.27 100.042-100.572 0-59.468-75.368-109.71-164.572-109.71-75.060 0-140.308 35.574-159.118 82.286h-113.016c7.93-50.64 37.582-97.968 84.060-132.826 50.876-38.164 117.668-59.18 188.072-59.18 70.402 0 137.198 21.016 188.074 59.174 54.79 41.090 86.208 99.502 86.208 160.254 0 35.298-10.654 69.792-30.294 100.572h204.012v64z" />
+<glyph unicode="&#xe02e;" glyph-name="visualchars" d="M384 832c-123.712 0-224-100.288-224-224s100.288-224 224-224v-320h128v640h64v-640h128v640h128v128h-448z" />
+<glyph unicode="&#xe02f;" glyph-name="ltr" d="M448 832c-123.712 0-224-100.288-224-224s100.288-224 224-224v-320h128v640h64v-640h128v640h128v128h-448zM64 64l224 192-224 192z" />
+<glyph unicode="&#xe030;" glyph-name="rtl" d="M320 832c-123.712 0-224-100.288-224-224s100.288-224 224-224v-320h128v640h64v-640h128v640h128v128h-448zM960 448l-224-192 224-192z" />
+<glyph unicode="&#xe031;" glyph-name="copy" d="M832 640h-192v64l-192 192h-384v-704h384v-192h576v448l-192 192zM832 549.49l101.49-101.49h-101.49v101.49zM448 805.49l101.49-101.49h-101.49v101.49zM128 832h256v-192h192v-384h-448v576zM960 64h-448v128h128v384h128v-192h192v-320z" />
+<glyph unicode="&#xe032;" glyph-name="resize" d="M768 704h64v-64h-64zM640 576h64v-64h-64zM640 448h64v-64h-64zM640 320h64v-64h-64zM512 448h64v-64h-64zM512 320h64v-64h-64zM384 320h64v-64h-64zM768 576h64v-64h-64zM768 448h64v-64h-64zM768 320h64v-64h-64zM768 192h64v-64h-64zM640 192h64v-64h-64zM512 192h64v-64h-64zM384 192h64v-64h-64zM256 192h64v-64h-64z" />
+<glyph unicode="&#xe034;" glyph-name="browse" d="M928 832h-416l-32 64h-352l-64-128h896zM840.34 256h87.66l32 448h-896l64-640h356.080c-104.882 37.776-180.080 138.266-180.080 256 0 149.982 122.018 272 272 272 149.98 0 272-122.018 272-272 0-21.678-2.622-43.15-7.66-64zM874.996 110.25l-134.496 110.692c17.454 28.922 27.5 62.814 27.5 99.058 0 106.040-85.96 192-192 192s-192-85.96-192-192 85.96-192 192-192c36.244 0 70.138 10.046 99.058 27.5l110.692-134.496c22.962-26.678 62.118-28.14 87.006-3.252l5.492 5.492c24.888 24.888 23.426 64.044-3.252 87.006zM576 196c-68.484 0-124 55.516-124 124s55.516 124 124 124 124-55.516 124-124-55.516-124-124-124z" />
+<glyph unicode="&#xe035;" glyph-name="pastetext" d="M704 576v160c0 17.6-14.4 32-32 32h-160v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-160c-17.602 0-32-14.4-32-32v-512c0-17.6 14.398-32 32-32h224v-192h576v576h-192zM320 831.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886h-128v63.886zM192 640v64h384v-64h-384zM832 64h-448v448h448v-448zM448 448v-128h32l32 64h64v-192h-48v-64h160v64h-48v192h64l32-64h32v128z" />
+<glyph unicode="&#xe603;" glyph-name="codesample" d="M200.015 577.994v103.994c0 43.077 34.919 77.997 77.997 77.997h26v103.994h-26c-100.51 0-181.991-81.481-181.991-181.991v-103.994c0-43.077-34.919-77.997-77.997-77.997h-26v-103.994h26c43.077 0 77.997-34.919 77.997-77.997v-103.994c0-100.509 81.481-181.991 181.991-181.991h26v103.994h-26c-43.077 0-77.997 34.919-77.997 77.997v103.994c0 50.927-20.928 96.961-54.642 129.994 33.714 33.032 54.642 79.065 54.642 129.994zM823.985 577.994v103.994c0 43.077-34.919 77.997-77.997 77.997h-26v103.994h26c100.509 0 181.991-81.481 181.991-181.991v-103.994c0-43.077 34.919-77.997 77.997-77.997h26v-103.994h-26c-43.077 0-77.997-34.919-77.997-77.997v-103.994c0-100.509-81.482-181.991-181.991-181.991h-26v103.994h26c43.077 0 77.997 34.919 77.997 77.997v103.994c0 50.927 20.928 96.961 54.642 129.994-33.714 33.032-54.642 79.065-54.642 129.994zM615.997 603.277c0-57.435-46.56-103.994-103.994-103.994s-103.994 46.56-103.994 103.994c0 57.435 46.56 103.994 103.994 103.994s103.994-46.56 103.994-103.994zM512 448.717c-57.435 0-103.994-46.56-103.994-103.994 0-55.841 26-100.107 105.747-103.875-23.715-33.413-59.437-46.608-105.747-50.94v-61.747c0 0 207.991-18.144 207.991 216.561-0.202 57.437-46.56 103.996-103.994 103.996z" />
+</font></defs></svg>
\ No newline at end of file
diff --git a/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.ttf b/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.ttf
new file mode 100644
index 0000000..a983e2d
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.ttf
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.woff b/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.woff
new file mode 100644
index 0000000..d8962df
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.woff
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.eot b/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.eot
new file mode 100644
index 0000000..5336c38
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.eot
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.svg b/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.svg
new file mode 100644
index 0000000..9fa215f
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.svg
@@ -0,0 +1,131 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>Generated by IcoMoon</metadata>
+<defs>
+<font id="tinymce" horiz-adv-x="1024">
+<font-face units-per-em="1024" ascent="960" descent="-64" />
+<missing-glyph horiz-adv-x="1024" />
+<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
+<glyph unicode="&#xe000;" glyph-name="save" d="M896 960h-896v-1024h1024v896l-128 128zM512 832h128v-256h-128v256zM896 64h-768v768h64v-320h576v320h74.978l53.022-53.018v-714.982z" />
+<glyph unicode="&#xe001;" glyph-name="newdocument" d="M903.432 760.57l-142.864 142.862c-31.112 31.112-92.568 56.568-136.568 56.568h-480c-44 0-80-36-80-80v-864c0-44 36-80 80-80h736c44 0 80 36 80 80v608c0 44-25.456 105.458-56.568 136.57zM858.178 715.314c3.13-3.13 6.25-6.974 9.28-11.314h-163.458v163.456c4.34-3.030 8.184-6.15 11.314-9.28l142.864-142.862zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16h480c4.832 0 10.254-0.61 16-1.704v-254.296h254.296c1.094-5.746 1.704-11.166 1.704-16v-608z" />
+<glyph unicode="&#xe002;" glyph-name="fullpage" d="M1024 367.542v160.916l-159.144 15.914c-8.186 30.042-20.088 58.548-35.21 84.98l104.596 127.838-113.052 113.050-127.836-104.596c-26.434 15.124-54.942 27.026-84.982 35.208l-15.914 159.148h-160.916l-15.914-159.146c-30.042-8.186-58.548-20.086-84.98-35.208l-127.838 104.594-113.050-113.050 104.596-127.836c-15.124-26.432-27.026-54.94-35.21-84.98l-159.146-15.916v-160.916l159.146-15.914c8.186-30.042 20.086-58.548 35.21-84.982l-104.596-127.836 113.048-113.048 127.838 104.596c26.432-15.124 54.94-27.028 84.98-35.21l15.916-159.148h160.916l15.914 159.144c30.042 8.186 58.548 20.088 84.982 35.21l127.836-104.596 113.048 113.048-104.596 127.836c15.124 26.434 27.028 54.942 35.21 84.98l159.148 15.92zM704 384l-128-128h-128l-128 128v128l128 128h128l128-128v-128z" />
+<glyph unicode="&#xe003;" glyph-name="alignleft" d="M0 896h1024v-128h-1024zM0 704h640v-128h-640zM0 320h640v-128h-640zM0 512h1024v-128h-1024zM0 128h1024v-128h-1024z" />
+<glyph unicode="&#xe004;" glyph-name="aligncenter" d="M0 896h1024v-128h-1024zM192 704h640v-128h-640zM192 320h640v-128h-640zM0 512h1024v-128h-1024zM0 128h1024v-128h-1024z" />
+<glyph unicode="&#xe005;" glyph-name="alignright" d="M0 896h1024v-128h-1024zM384 704h640v-128h-640zM384 320h640v-128h-640zM0 512h1024v-128h-1024zM0 128h1024v-128h-1024z" />
+<glyph unicode="&#xe006;" glyph-name="alignjustify" d="M0 896h1024v-128h-1024zM0 704h1024v-128h-1024zM0 512h1024v-128h-1024zM0 320h1024v-128h-1024zM0 128h1024v-128h-1024z" />
+<glyph unicode="&#xe007;" glyph-name="cut" d="M890.774 250.846c-45.654 45.556-103.728 69.072-157.946 69.072h-29.112l-63.904 64.008 255.62 256.038c63.904 64.010 63.904 192.028 0 256.038l-383.43-384.056-383.432 384.054c-63.904-64.008-63.904-192.028 0-256.038l255.622-256.034-63.906-64.008h-29.114c-54.22 0-112.292-23.518-157.948-69.076-81.622-81.442-92.65-202.484-24.63-270.35 29.97-29.902 70.288-44.494 112.996-44.494 54.216 0 112.29 23.514 157.946 69.072 53.584 53.464 76.742 124 67.084 185.348l65.384 65.488 65.376-65.488c-9.656-61.348 13.506-131.882 67.084-185.348 45.662-45.558 103.732-69.072 157.948-69.072 42.708 0 83.024 14.592 112.994 44.496 68.020 67.866 56.988 188.908-24.632 270.35zM353.024 114.462c-7.698-17.882-19.010-34.346-33.626-48.926-14.636-14.604-31.172-25.918-49.148-33.624-16.132-6.916-32.96-10.568-48.662-10.568-15.146 0-36.612 3.402-52.862 19.612-16.136 16.104-19.52 37.318-19.52 52.288 0 15.542 3.642 32.21 10.526 48.212 7.7 17.884 19.014 34.346 33.626 48.926 14.634 14.606 31.172 25.914 49.15 33.624 16.134 6.914 32.96 10.568 48.664 10.568 15.146 0 36.612-3.4 52.858-19.614 16.134-16.098 19.522-37.316 19.522-52.284 0.002-15.542-3.638-32.216-10.528-48.214zM512.004 293.404c-49.914 0-90.376 40.532-90.376 90.526 0 49.992 40.462 90.52 90.376 90.52s90.372-40.528 90.372-90.52c0-49.998-40.46-90.526-90.372-90.526zM855.272 40.958c-16.248-16.208-37.712-19.612-52.86-19.612-15.704 0-32.53 3.652-48.666 10.568-17.972 7.706-34.508 19.020-49.142 33.624-14.614 14.58-25.926 31.042-33.626 48.926-6.886 15.998-10.526 32.672-10.526 48.212 0 14.966 3.384 36.188 19.52 52.286 16.246 16.208 37.712 19.614 52.86 19.614 15.7 0 32.53-3.654 48.66-10.568 17.978-7.708 34.516-19.018 49.15-33.624 14.61-14.58 25.924-31.042 33.626-48.926 6.884-15.998 10.526-32.67 10.526-48.212-0.002-14.97-3.39-36.186-19.522-52.288z" />
+<glyph unicode="&#xe008;" glyph-name="paste" d="M832 640v160c0 17.6-14.4 32-32 32h-224v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-224c-17.602 0-32-14.4-32-32v-640c0-17.6 14.398-32 32-32h288v-192h448l192 192v512h-192zM384 895.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886h-128v63.886zM192 704v64h512v-64h-512zM832 26.51v101.49h101.49l-101.49-101.49zM960 192h-192v-192h-320v576h512v-384z" />
+<glyph unicode="&#xe009;" glyph-name="searchreplace" d="M64 960h384v-64h-384zM576 960h384v-64h-384zM952 640h-56v256h-256v-256h-256v256h-256v-256h-56c-39.6 0-72-32.4-72-72v-560c0-39.6 32.4-72 72-72h304c39.6 0 72 32.4 72 72v376h128v-376c0-39.6 32.4-72 72-72h304c39.6 0 72 32.4 72 72v560c0 39.6-32.4 72-72 72zM348 0h-248c-19.8 0-36 14.4-36 32s16.2 32 36 32h248c19.8 0 36-14.4 36-32s-16.2-32-36-32zM544 448h-64c-17.6 0-32 14.4-32 32s14.4 32 32 32h64c17.6 0 32-14.4 32-32s-14.4-32-32-32zM924 0h-248c-19.8 0-36 14.4-36 32s16.2 32 36 32h248c19.8 0 36-14.4 36-32s-16.2-32-36-32z" />
+<glyph unicode="&#xe00a;" glyph-name="bullist" d="M384 896h640v-128h-640v128zM384 512h640v-128h-640v128zM384 128h640v-128h-640v128zM0 832c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128zM0 448c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128zM0 64c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128z" />
+<glyph unicode="&#xe00b;" glyph-name="numlist" d="M384 128h640v-128h-640zM384 512h640v-128h-640zM384 896h640v-128h-640zM192 960v-256h-64v192h-64v64zM128 434v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM256 256v-320h-192v64h128v64h-128v64h128v64h-128v64z" />
+<glyph unicode="&#xe00c;" glyph-name="indent" d="M0 896h1024v-128h-1024zM384 704h640v-128h-640zM384 512h640v-128h-640zM384 320h640v-128h-640zM0 128h1024v-128h-1024zM0 256v384l256-192z" />
+<glyph unicode="&#xe00d;" glyph-name="outdent" d="M0 896h1024v-128h-1024zM384 704h640v-128h-640zM384 512h640v-128h-640zM384 320h640v-128h-640zM0 128h1024v-128h-1024zM256 640v-384l-256 192z" />
+<glyph unicode="&#xe00e;" glyph-name="blockquote" d="M225 512c123.712 0 224-100.29 224-224 0-123.712-100.288-224-224-224s-224 100.288-224 224l-1 32c0 247.424 200.576 448 448 448v-128c-85.474 0-165.834-33.286-226.274-93.726-11.634-11.636-22.252-24.016-31.83-37.020 11.438 1.8 23.16 2.746 35.104 2.746zM801 512c123.71 0 224-100.29 224-224 0-123.712-100.29-224-224-224s-224 100.288-224 224l-1 32c0 247.424 200.576 448 448 448v-128c-85.474 0-165.834-33.286-226.274-93.726-11.636-11.636-22.254-24.016-31.832-37.020 11.44 1.8 23.16 2.746 35.106 2.746z" />
+<glyph unicode="&#xe00f;" glyph-name="undo" d="M761.862-64c113.726 206.032 132.888 520.306-313.862 509.824v-253.824l-384 384 384 384v-248.372c534.962 13.942 594.57-472.214 313.862-775.628z" />
+<glyph unicode="&#xe010;" glyph-name="redo" d="M576 711.628v248.372l384-384-384-384v253.824c-446.75 10.482-427.588-303.792-313.86-509.824-280.712 303.414-221.1 789.57 313.86 775.628z" />
+<glyph unicode="&#xe011;" glyph-name="link" d="M320 256c17.6-17.6 47.274-16.726 65.942 1.942l316.118 316.116c18.668 18.668 19.54 48.342 1.94 65.942s-47.274 16.726-65.942-1.942l-316.116-316.116c-18.668-18.668-19.542-48.342-1.942-65.942zM476.888 284.888c4.56-9.050 6.99-19.16 6.99-29.696 0-17.616-6.744-34.060-18.992-46.308l-163.382-163.382c-12.248-12.248-28.694-18.992-46.308-18.992s-34.060 6.744-46.308 18.992l-99.382 99.382c-12.248 12.248-18.992 28.694-18.992 46.308s6.744 34.060 18.992 46.308l163.382 163.382c12.248 12.248 28.694 18.994 46.308 18.994 10.536 0 20.644-2.43 29.696-6.99l65.338 65.338c-27.87 21.41-61.44 32.16-95.034 32.16-39.986 0-79.972-15.166-110.308-45.502l-163.382-163.382c-60.67-60.67-60.67-159.948 0-220.618l99.382-99.382c30.334-30.332 70.32-45.5 110.306-45.5 39.988 0 79.974 15.168 110.308 45.502l163.382 163.382c55.82 55.82 60.238 144.298 13.344 205.344l-65.34-65.34zM978.498 815.116l-99.382 99.382c-30.334 30.336-70.32 45.502-110.308 45.502-39.986 0-79.972-15.166-110.308-45.502l-163.382-163.382c-55.82-55.82-60.238-144.298-13.342-205.342l65.338 65.34c-4.558 9.050-6.988 19.16-6.988 29.694 0 17.616 6.744 34.060 18.992 46.308l163.382 163.382c12.248 12.248 28.694 18.994 46.308 18.994s34.060-6.746 46.308-18.994l99.382-99.382c12.248-12.248 18.992-28.694 18.992-46.308s-6.744-34.060-18.992-46.308l-163.382-163.382c-12.248-12.248-28.694-18.992-46.308-18.992-10.536 0-20.644 2.43-29.696 6.99l-65.338-65.338c27.872-21.41 61.44-32.16 95.034-32.16 39.988 0 79.974 15.168 110.308 45.502l163.382 163.382c60.67 60.666 60.67 159.944 0 220.614z" />
+<glyph unicode="&#xe012;" glyph-name="unlink" d="M476.888 284.886c4.56-9.048 6.99-19.158 6.99-29.696 0-17.616-6.744-34.058-18.992-46.308l-163.38-163.38c-12.248-12.248-28.696-18.992-46.308-18.992s-34.060 6.744-46.308 18.992l-99.38 99.38c-12.248 12.25-18.992 28.696-18.992 46.308s6.744 34.060 18.992 46.308l163.38 163.382c12.248 12.246 28.696 18.992 46.308 18.992 10.538 0 20.644-2.43 29.696-6.988l65.338 65.336c-27.87 21.41-61.44 32.16-95.034 32.16-39.986 0-79.972-15.166-110.308-45.502l-163.38-163.382c-60.67-60.67-60.67-159.95 0-220.618l99.38-99.382c30.334-30.332 70.32-45.5 110.306-45.5 39.988 0 79.974 15.168 110.308 45.502l163.38 163.38c55.82 55.82 60.238 144.298 13.344 205.346l-65.34-65.338zM978.496 815.116l-99.38 99.382c-30.334 30.336-70.32 45.502-110.308 45.502-39.986 0-79.97-15.166-110.306-45.502l-163.382-163.382c-55.82-55.82-60.238-144.298-13.342-205.342l65.338 65.34c-4.558 9.050-6.988 19.16-6.988 29.694 0 17.616 6.744 34.060 18.992 46.308l163.382 163.382c12.246 12.248 28.694 18.994 46.306 18.994 17.616 0 34.060-6.746 46.308-18.994l99.38-99.382c12.248-12.248 18.992-28.694 18.992-46.308s-6.744-34.060-18.992-46.308l-163.38-163.382c-12.248-12.248-28.694-18.992-46.308-18.992-10.536 0-20.644 2.43-29.696 6.99l-65.338-65.338c27.872-21.41 61.44-32.16 95.034-32.16 39.988 0 79.974 15.168 110.308 45.504l163.38 163.38c60.672 60.666 60.672 159.944 0 220.614zM233.368 681.376l-191.994 191.994 45.256 45.256 191.994-191.994zM384 960h64v-192h-64zM0 576h192v-64h-192zM790.632 214.624l191.996-191.996-45.256-45.256-191.996 191.996zM576 128h64v-192h-64zM832 384h192v-64h-192z" />
+<glyph unicode="&#xe013;" glyph-name="anchor" d="M192 960v-1024l320 320 320-320v1024h-640zM768 90.51l-256 256-256-256v805.49h512v-805.49z" />
+<glyph unicode="&#xe014;" glyph-name="image" d="M0 832v-832h1024v832h-1024zM960 64h-896v704h896v-704zM704 608c0 53.019 42.981 96 96 96s96-42.981 96-96c0-53.019-42.981-96-96-96s-96 42.981-96 96zM896 128h-768l192 512 256-320 128 96z" />
+<glyph unicode="&#xe015;" glyph-name="media" d="M0 832v-768h1024v768h-1024zM192 128h-128v128h128v-128zM192 384h-128v128h128v-128zM192 640h-128v128h128v-128zM768 128h-512v640h512v-640zM960 128h-128v128h128v-128zM960 384h-128v128h128v-128zM960 640h-128v128h128v-128zM384 640v-384l256 192z" />
+<glyph unicode="&#xe016;" glyph-name="help" d="M448 256h128v-128h-128zM704 704c35.346 0 64-28.654 64-64v-192l-192-128h-128v64l192 128v64h-320v128h384zM512 864c-111.118 0-215.584-43.272-294.156-121.844s-121.844-183.038-121.844-294.156c0-111.118 43.272-215.584 121.844-294.156s183.038-121.844 294.156-121.844c111.118 0 215.584 43.272 294.156 121.844s121.844 183.038 121.844 294.156c0 111.118-43.272 215.584-121.844 294.156s-183.038 121.844-294.156 121.844zM512 960v0c282.77 0 512-229.23 512-512s-229.23-512-512-512c-282.77 0-512 229.23-512 512s229.23 512 512 512z" />
+<glyph unicode="&#xe017;" glyph-name="code" d="M320 704l-256-256 256-256h128l-256 256 256 256zM704 704h-128l256-256-256-256h128l256 256z" />
+<glyph unicode="&#xe018;" glyph-name="inserttime" d="M512 768c-212.076 0-384-171.922-384-384s171.922-384 384-384c212.074 0 384 171.922 384 384s-171.926 384-384 384zM715.644 180.354c-54.392-54.396-126.716-84.354-203.644-84.354s-149.25 29.958-203.646 84.354c-54.396 54.394-84.354 126.718-84.354 203.646s29.958 149.25 84.354 203.646c54.396 54.396 126.718 84.354 203.646 84.354s149.252-29.958 203.642-84.354c54.402-54.396 84.358-126.718 84.358-203.646s-29.958-149.252-84.356-203.646zM325.93 756.138l-42.94 85.878c-98.874-49.536-179.47-130.132-229.006-229.008l85.876-42.94c40.248 80.336 105.732 145.822 186.070 186.070zM884.134 570.070l85.878 42.938c-49.532 98.876-130.126 179.472-229.004 229.008l-42.944-85.878c80.338-40.248 145.824-105.732 186.070-186.068zM512 576h-64v-192c0-10.11 4.7-19.11 12.022-24.972l-0.012-0.016 160-128 39.976 49.976-147.986 118.39v176.622z" />
+<glyph unicode="&#xe019;" glyph-name="preview" d="M512 640c-209.368 0-395.244-100.556-512-256 116.756-155.446 302.632-256 512-256s395.244 100.554 512 256c-116.756 155.444-302.632 256-512 256zM448 512c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64 28.654 64 64 64zM773.616 254.704c-39.648-20.258-81.652-35.862-124.846-46.376-44.488-10.836-90.502-16.328-136.77-16.328-46.266 0-92.282 5.492-136.768 16.324-43.194 10.518-85.198 26.122-124.846 46.376-63.020 32.202-120.222 76.41-167.64 129.298 47.418 52.888 104.62 97.1 167.64 129.298 32.336 16.522 66.242 29.946 101.082 40.040-19.888-30.242-31.468-66.434-31.468-105.336 0-106.040 85.962-192 192-192s192 85.96 192 192c0 38.902-11.582 75.094-31.466 105.34 34.838-10.096 68.744-23.52 101.082-40.042 63.022-32.198 120.218-76.408 167.638-129.298-47.42-52.886-104.618-97.1-167.638-129.296zM860.918 716.278c-108.72 55.554-226.112 83.722-348.918 83.722s-240.198-28.168-348.918-83.722c-58.772-30.032-113.732-67.904-163.082-112.076v-109.206c55.338 58.566 120.694 107.754 192.194 144.29 99.62 50.904 207.218 76.714 319.806 76.714s220.186-25.81 319.804-76.716c71.502-36.536 136.858-85.724 192.196-144.29v109.206c-49.35 44.174-104.308 82.046-163.082 112.078z" />
+<glyph unicode="&#xe01a;" glyph-name="forecolor" d="M322.018 128l57.6 192h264.764l57.6-192h113.632l-191.996 640h-223.236l-192-640h113.636zM475.618 640h72.764l57.6-192h-187.964l57.6 192z" />
+<glyph unicode="&#xe01b;" glyph-name="table" d="M0 896v-896h1024v896h-1024zM384 320v192h256v-192h-256zM640 256v-192h-256v192h256zM640 768v-192h-256v192h256zM320 768v-192h-256v192h256zM64 512h256v-192h-256v192zM704 512h256v-192h-256v192zM704 576v192h256v-192h-256zM64 256h256v-192h-256v192zM704 64v192h256v-192h-256z" />
+<glyph unicode="&#xe01c;" glyph-name="hr" d="M0 512h1024v-128h-1024z" />
+<glyph unicode="&#xe01d;" glyph-name="removeformat" d="M0 64h576v-128h-576zM192 960h704v-128h-704zM277.388 128l204.688 784.164 123.85-32.328-196.25-751.836zM929.774-64l-129.774 129.774-129.774-129.774-62.226 62.226 129.774 129.774-129.774 129.774 62.226 62.226 129.774-129.774 129.774 129.774 62.226-62.226-129.774-129.774 129.774-129.774z" />
+<glyph unicode="&#xe01e;" glyph-name="sub" d="M768 50v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM676 704h-136l-188-188-188 188h-136l256-256-256-256h136l188 188 188-188h136l-256 256z" />
+<glyph unicode="&#xe01f;" glyph-name="sup" d="M768 754v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM676 704h-136l-188-188-188 188h-136l256-256-256-256h136l188 188 188-188h136l-256 256z" />
+<glyph unicode="&#xe020;" glyph-name="charmap" d="M704 64h256l64 128v-256h-384v214.214c131.112 56.484 224 197.162 224 361.786 0 214.432-157.598 382.266-352 382.266-194.406 0-352-167.832-352-382.266 0-164.624 92.886-305.302 224-361.786v-214.214h-384v256l64-128h256v32.59c-187.63 66.46-320 227.402-320 415.41 0 247.424 229.23 448 512 448s512-200.576 512-448c0-188.008-132.37-348.95-320-415.41v-32.59z" />
+<glyph unicode="&#xe021;" glyph-name="emoticons" d="M512 960c-282.77 0-512-229.228-512-512 0-282.77 229.228-512 512-512 282.77 0 512 229.23 512 512 0 282.772-229.23 512-512 512zM512 16c-238.586 0-432 193.412-432 432 0 238.586 193.414 432 432 432 238.59 0 432-193.414 432-432 0-238.588-193.41-432-432-432zM384 640c0-35.346-28.654-64-64-64s-64 28.654-64 64 28.654 64 64 64 64-28.654 64-64zM768 640c0-35.346-28.652-64-64-64s-64 28.654-64 64 28.652 64 64 64 64-28.654 64-64zM512 308c141.074 0 262.688 57.532 318.462 123.192-20.872-171.22-156.288-303.192-318.462-303.192-162.118 0-297.498 132.026-318.444 303.168 55.786-65.646 177.386-123.168 318.444-123.168z" />
+<glyph unicode="&#xe022;" glyph-name="print" d="M256 896h512v-128h-512zM960 704h-896c-35.2 0-64-28.8-64-64v-320c0-35.2 28.796-64 64-64h192v-256h512v256h192c35.2 0 64 28.8 64 64v320c0 35.2-28.8 64-64 64zM704 64h-384v320h384v-320zM974.4 608c0-25.626-20.774-46.4-46.398-46.4-25.626 0-46.402 20.774-46.402 46.4s20.776 46.4 46.402 46.4c25.626 0 46.398-20.774 46.398-46.4z" />
+<glyph unicode="&#xe023;" glyph-name="fullscreen" d="M1024 960v-384l-138.26 138.26-212-212-107.48 107.48 212 212-138.26 138.26zM245.74 821.74l212-212-107.48-107.48-212 212-138.26-138.26v384h384zM885.74 181.74l138.26 138.26v-384h-384l138.26 138.26-212 212 107.48 107.48zM457.74 286.26l-212-212 138.26-138.26h-384v384l138.26-138.26 212 212z" />
+<glyph unicode="&#xe024;" glyph-name="spellchecker" d="M128 704h128v-192h64v384c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-384h64v192zM128 896h128v-128h-128v128zM960 896v64h-192c-35.202 0-64-28.8-64-64v-320c0-35.2 28.798-64 64-64h192v64h-192v320h192zM640 800v96c0 35.2-28.8 64-64 64h-192v-448h192c35.2 0 64 28.8 64 64v96c0 35.2-8.8 64-44 64 35.2 0 44 28.8 44 64zM576 576h-128v128h128v-128zM576 768h-128v128h128v-128zM832 384l-416-448-224 288 82 70 142-148 352 302z" />
+<glyph unicode="&#xe025;" glyph-name="nonbreaking" d="M448 384h-192v128h192v192h128v-192h192v-128h-192v-192h-128zM1024 320v-384h-1024v384h128v-256h768v256z" />
+<glyph unicode="&#xe026;" glyph-name="template" d="M384 768h128v-64h-128zM576 768h128v-64h-128zM896 768v-256h-192v64h128v128h-64v64zM320 576h128v-64h-128zM512 576h128v-64h-128zM192 704v-128h64v-64h-128v256h192v-64zM384 384h128v-64h-128zM576 384h128v-64h-128zM896 384v-256h-192v64h128v128h-64v64zM320 192h128v-64h-128zM512 192h128v-64h-128zM192 320v-128h64v-64h-128v256h192v-64zM960 896h-896v-896h896v896zM1024 960v0-1024h-1024v1024h1024z" />
+<glyph unicode="&#xe027;" glyph-name="pagebreak" d="M0 448h128v-64h-128zM192 448h192v-64h-192zM448 448h128v-64h-128zM640 448h192v-64h-192zM896 448h128v-64h-128zM880 960l16-448h-768l16 448h32l16-384h640l16 384zM144-64l-16 384h768l-16-384h-32l-16 320h-640l-16-320z" />
+<glyph unicode="&#xe028;" glyph-name="restoredraft" d="M576 896c247.424 0 448-200.576 448-448s-200.576-448-448-448v96c94.024 0 182.418 36.614 248.902 103.098s103.098 154.878 103.098 248.902c0 94.022-36.614 182.418-103.098 248.902s-154.878 103.098-248.902 103.098c-94.022 0-182.418-36.614-248.902-103.098-51.14-51.138-84.582-115.246-97.306-184.902h186.208l-224-256-224 256h164.57c31.060 217.102 217.738 384 443.43 384zM768 512v-128h-256v320h128v-192z" />
+<glyph unicode="&#xe02a;" glyph-name="bold" d="M707.88 475.348c37.498 44.542 60.12 102.008 60.12 164.652 0 141.16-114.842 256-256 256h-320v-896h384c141.158 0 256 114.842 256 256 0 92.956-49.798 174.496-124.12 219.348zM384 768h101.5c55.968 0 101.5-57.42 101.5-128s-45.532-128-101.5-128h-101.5v256zM543 128h-159v256h159c58.45 0 106-57.42 106-128s-47.55-128-106-128z" />
+<glyph unicode="&#xe02b;" glyph-name="italic" d="M896 896v-64h-128l-320-768h128v-64h-448v64h128l320 768h-128v64z" />
+<glyph unicode="&#xe02c;" glyph-name="underline" d="M704 896h128v-416c0-159.058-143.268-288-320-288-176.73 0-320 128.942-320 288v416h128v-416c0-40.166 18.238-78.704 51.354-108.506 36.896-33.204 86.846-51.494 140.646-51.494s103.75 18.29 140.646 51.494c33.116 29.802 51.354 68.34 51.354 108.506v416zM192 128h640v-128h-640z" />
+<glyph unicode="&#xe02d;" glyph-name="strikethrough" d="M731.42 442.964c63.92-47.938 100.58-116.086 100.58-186.964s-36.66-139.026-100.58-186.964c-59.358-44.518-137.284-69.036-219.42-69.036-82.138 0-160.062 24.518-219.42 69.036-63.92 47.938-100.58 116.086-100.58 186.964h128c0-69.382 87.926-128 192-128s192 58.618 192 128c0 69.382-87.926 128-192 128-82.138 0-160.062 24.518-219.42 69.036-63.92 47.94-100.58 116.086-100.58 186.964s36.66 139.024 100.58 186.964c59.358 44.518 137.282 69.036 219.42 69.036 82.136 0 160.062-24.518 219.42-69.036 63.92-47.94 100.58-116.086 100.58-186.964h-128c0 69.382-87.926 128-192 128s-192-58.618-192-128c0-69.382 87.926-128 192-128 82.136 0 160.062-24.518 219.42-69.036zM0 448h1024v-64h-1024z" />
+<glyph unicode="&#xe02e;" glyph-name="visualchars" d="M384 896h512v-128h-128v-768h-128v768h-128v-768h-128v448c-123.712 0-224 100.288-224 224s100.288 224 224 224z" />
+<glyph unicode="&#xe02f;" glyph-name="ltr" d="M448 896h512v-128h-128v-768h-128v768h-128v-768h-128v448c-123.712 0-224 100.288-224 224s100.288 224 224 224zM64 512l256-224-256-224z" />
+<glyph unicode="&#xe030;" glyph-name="rtl" d="M256 896h512v-128h-128v-768h-128v768h-128v-768h-128v448c-123.712 0-224 100.288-224 224s100.288 224 224 224zM960 64l-256 224 256 224z" />
+<glyph unicode="&#xe031;" glyph-name="copy" d="M832 704h-192v64l-192 192h-448v-768h384v-256h640v576l-192 192zM832 613.49l101.49-101.49h-101.49v101.49zM448 869.49l101.49-101.49h-101.49v101.49zM64 896h320v-192h192v-448h-512v640zM960 0h-512v192h192v448h128v-192h192v-448z" />
+<glyph unicode="&#xe032;" glyph-name="resize" d="M768 704h64v-64h-64zM640 576h64v-64h-64zM640 448h64v-64h-64zM640 320h64v-64h-64zM512 448h64v-64h-64zM512 320h64v-64h-64zM384 320h64v-64h-64zM768 576h64v-64h-64zM768 448h64v-64h-64zM768 320h64v-64h-64zM768 192h64v-64h-64zM640 192h64v-64h-64zM512 192h64v-64h-64zM384 192h64v-64h-64zM256 192h64v-64h-64z" />
+<glyph unicode="&#xe033;" glyph-name="checkbox" d="M128 416l288-288 480 480-128 128-352-352-160 160z" />
+<glyph unicode="&#xe034;" glyph-name="browse" d="M928 832h-416l-32 64h-352l-64-128h896zM904.34 256h74.86l44.8 448h-1024l64-640h484.080c-104.882 37.776-180.080 138.266-180.080 256 0 149.982 122.018 272 272 272 149.98 0 272-122.018 272-272 0-21.678-2.622-43.15-7.66-64zM1002.996 46.25l-198.496 174.692c17.454 28.92 27.5 62.814 27.5 99.058 0 106.040-85.96 192-192 192s-192-85.96-192-192 85.96-192 192-192c36.244 0 70.138 10.046 99.058 27.5l174.692-198.496c22.962-26.678 62.118-28.14 87.006-3.252l5.492 5.492c24.888 24.888 23.426 64.044-3.252 87.006zM640 196c-68.484 0-124 55.516-124 124s55.516 124 124 124 124-55.516 124-124-55.516-124-124-124z" />
+<glyph unicode="&#xe035;" glyph-name="pastetext" d="M512 448v-128h32l32 64h64v-256h-48v-64h224v64h-48v256h64l32-64h32v128zM832 640v160c0 17.6-14.4 32-32 32h-224v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-224c-17.602 0-32-14.4-32-32v-640c0-17.6 14.398-32 32-32h288v-192h640v704h-192zM384 895.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886h-128v63.886zM192 704v64h512v-64h-512zM960 0h-512v576h512v-576z" />
+<glyph unicode="&#xe600;" glyph-name="gamma" d="M483.2 320l-147.2 336c-9.6 25.6-19.2 44.8-25.6 54.4s-16 12.8-25.6 12.8c-16 0-25.6-3.2-28.8-3.2v70.4c9.6 6.4 25.6 6.4 38.4 9.6 32 0 57.6-6.4 73.6-22.4 6.4-6.4 12.8-16 19.2-25.6 6.4-12.8 12.8-25.6 16-41.6l121.6-291.2 150.4 371.2h92.8l-198.4-470.4v-224h-86.4v224zM0 960v-1024h1024v1024h-1024zM960 0h-896v896h896v-896z" />
+<glyph unicode="&#xe601;" glyph-name="orientation" d="M627.2 80h-579.2v396.8h579.2v-396.8zM553.6 406.4h-435.2v-256h435.2v256zM259.2 732.8c176 176 457.6 176 633.6 0s176-457.6 0-633.6c-121.6-121.6-297.6-160-454.4-108.8 121.6-28.8 262.4 9.6 361.6 108.8 150.4 150.4 160 384 22.4 521.6-121.6 121.6-320 128-470.4 19.2l86.4-86.4-294.4-22.4 22.4 294.4 92.8-92.8z" />
+<glyph unicode="&#xe602;" glyph-name="invert" d="M892.8-22.4l-89.6 89.6c-70.4-80-172.8-131.2-288-131.2-208 0-380.8 166.4-384 377.6 0 0 0 0 0 0 0 3.2 0 3.2 0 6.4s0 3.2 0 6.4v0c0 0 0 0 0 3.2 0 0 0 3.2 0 3.2 3.2 105.6 48 211.2 105.6 304l-192 192 44.8 44.8 182.4-182.4c0 0 0 0 0 0l569.6-569.6c0 0 0 0 0 0l99.2-99.2-48-44.8zM896 326.4c0 0 0 0 0 0 0 3.2 0 6.4 0 6.4-9.6 316.8-384 627.2-384 627.2s-108.8-89.6-208-220.8l70.4-70.4c6.4 9.6 16 22.4 22.4 32 41.6 51.2 83.2 96 115.2 128v0c32-32 73.6-76.8 115.2-128 108.8-137.6 169.6-265.6 172.8-371.2 0 0 0-3.2 0-3.2v0 0c0-3.2 0-3.2 0-6.4s0-3.2 0-3.2v0 0c0-22.4-3.2-41.6-9.6-64l76.8-76.8c16 41.6 28.8 89.6 28.8 137.6 0 0 0 0 0 0 0 3.2 0 3.2 0 6.4s0 3.2 0 6.4z" />
+<glyph unicode="&#xe603;" glyph-name="codesample" d="M199.995 578.002v104.002c0 43.078 34.923 78.001 78.001 78.001h26v104.002h-26c-100.518 0-182.003-81.485-182.003-182.003v-104.002c0-43.078-34.923-78.001-78.001-78.001h-26v-104.002h26c43.078 0 78.001-34.923 78.001-78.001v-104.002c0-100.515 81.485-182.003 182.003-182.003h26v104.002h-26c-43.078 0-78.001 34.923-78.001 78.001v104.002c0 50.931-20.928 96.966-54.646 130.002 33.716 33.036 54.646 79.072 54.646 130.002zM824.005 578.002v104.002c0 43.078-34.923 78.001-78.001 78.001h-26v104.002h26c100.515 0 182.003-81.485 182.003-182.003v-104.002c0-43.078 34.923-78.001 78.001-78.001h26v-104.002h-26c-43.078 0-78.001-34.923-78.001-78.001v-104.002c0-100.515-81.488-182.003-182.003-182.003h-26v104.002h26c43.078 0 78.001 34.923 78.001 78.001v104.002c0 50.931 20.928 96.966 54.646 130.002-33.716 33.036-54.646 79.072-54.646 130.002zM616.002 603.285c0-57.439-46.562-104.002-104.002-104.002s-104.002 46.562-104.002 104.002c0 57.439 46.562 104.002 104.002 104.002s104.002-46.562 104.002-104.002zM512 448.717c-57.439 0-104.002-46.562-104.002-104.002 0-55.845 26-100.115 105.752-103.88-23.719-33.417-59.441-46.612-105.752-50.944v-61.751c0 0 208.003-18.144 208.003 216.577-0.202 57.441-46.56 104.004-104.002 104.004z" />
+<glyph unicode="&#xe604;" glyph-name="tablerowprops" d="M0 896v-896h1024v896h-1024zM640 256v-192h-256v192h256zM640 768v-192h-256v192h256zM320 768v-192h-256v192h256zM704 576v192h256v-192h-256zM64 256h256v-192h-256v192zM704 64v192h256v-192h-256z" />
+<glyph unicode="&#xe605;" glyph-name="tablecellprops" d="M0 896v-896h1024v896h-1024zM640 256v-192h-256v192h256zM640 768v-192h-256v192h256zM320 768v-192h-256v192h256zM64 512h256v-192h-256v192zM704 512h256v-192h-256v192zM704 576v192h256v-192h-256zM64 256h256v-192h-256v192zM704 64v192h256v-192h-256z" />
+<glyph unicode="&#xe606;" glyph-name="table2" d="M0 896v-832h1024v832h-1024zM320 128h-256v192h256v-192zM320 384h-256v192h256v-192zM640 128h-256v192h256v-192zM640 384h-256v192h256v-192zM960 128h-256v192h256v-192zM960 384h-256v192h256v-192zM960 640h-896v192h896v-192z" />
+<glyph unicode="&#xe607;" glyph-name="tablemergecells" d="M0 896v-896h1024v896h-1024zM384 64v448h576v-448h-576zM640 768v-192h-256v192h256zM320 768v-192h-256v192h256zM64 512h256v-192h-256v192zM704 576v192h256v-192h-256zM64 256h256v-192h-256v192z" />
+<glyph unicode="&#xe608;" glyph-name="tableinsertcolbefore" d="M320 188.8v182.4h-182.4v89.6h182.4v182.4h86.4v-182.4h185.6v-89.6h-185.6v-182.4zM0 896v-896h1024v896h-1024zM640 64h-576v704h576v-704zM960 64h-256v192h256v-192zM960 320h-256v192h256v-192zM960 576h-256v192h256v-192z" />
+<glyph unicode="&#xe609;" glyph-name="tableinsertcolafter" d="M704 643.2v-182.4h182.4v-89.6h-182.4v-182.4h-86.4v182.4h-185.6v89.6h185.6v182.4zM0 896v-896h1024v896h-1024zM320 64h-256v192h256v-192zM320 320h-256v192h256v-192zM320 576h-256v192h256v-192zM960 64h-576v704h576v-704z" />
+<glyph unicode="&#xe60a;" glyph-name="tableinsertrowbefore" d="M691.2 508.8h-144v-144h-70.4v144h-144v67.2h144v144h70.4v-144h144zM0 896v-896h1024v896h-1024zM320 64h-256v192h256v-192zM640 64h-256v192h256v-192zM960 64h-256v192h256v-192zM960 316.8h-896v451.2h896v-451.2z" />
+<glyph unicode="&#xe60b;" glyph-name="tableinsertrowafter" d="M332.8 323.2h144v144h70.4v-144h144v-67.2h-144v-144h-70.4v144h-144zM0 896v-896h1024v896h-1024zM384 768h256v-192h-256v192zM64 768h256v-192h-256v192zM960 64h-896v451.2h896v-451.2zM960 576h-256v192h256v-192z" />
+<glyph unicode="&#xe60d;" glyph-name="tablesplitcells" d="M0 896v-896h1024v896h-1024zM384 768h256v-192h-256v192zM320 64h-256v192h256v-192zM320 320h-256v192h256v-192zM320 576h-256v192h256v-192zM960 64h-576v448h576v-448zM960 576h-256v192h256v-192zM864 156.8l-60.8-60.8-131.2 131.2-131.2-131.2-60.8 60.8 131.2 131.2-131.2 131.2 60.8 60.8 131.2-131.2 131.2 131.2 60.8-60.8-131.2-131.2z" />
+<glyph unicode="&#xe60e;" glyph-name="tabledelete" d="M0 896h1024v-896h-1024v896zM60.8 768v-704h899.2v704h-899.2zM809.6 211.2l-96-96-204.8 204.8-204.8-204.8-96 96 204.8 204.8-204.8 204.8 96 96 204.8-204.8 204.8 204.8 96-96-204.8-204.8z" />
+<glyph unicode="&#xe62a;" glyph-name="tableleftheader" d="M0 896v-832h1024v832h-1024zM640 128h-256v192h256v-192zM640 384h-256v192h256v-192zM640 640h-256v192h256v-192zM960 128h-256v192h256v-192zM960 384h-256v192h256v-192zM960 640h-256v192h256v-192z" />
+<glyph unicode="&#xe62b;" glyph-name="tabletopheader" d="M0 896v-832h1024v832h-1024zM320 128h-256v192h256v-192zM320 384h-256v192h256v-192zM640 128h-256v192h256v-192zM640 384h-256v192h256v-192zM960 128h-256v192h256v-192zM960 384h-256v192h256v-192z" />
+<glyph unicode="&#xe800;" glyph-name="tabledeleterow" d="M886.4 572.8l-156.8-156.8 160-160-76.8-76.8-160 160-156.8-156.8-76.8 73.6 160 160-163.2 163.2 76.8 76.8 163.2-163.2 156.8 156.8 73.6-76.8zM0 896v-896h1024v896h-1024zM960 576h-22.4l-64-64h86.4v-192h-89.6l64-64h25.6v-192h-896v192h310.4l64 64h-374.4v192h371.2l-64 64h-307.2v192h896v-192z" />
+<glyph unicode="&#xe801;" glyph-name="tabledeletecol" d="M320 499.2l64-64v-12.8l-64-64v140.8zM640 422.4l64-64v137.6l-64-64v-9.6zM1024 896v-896h-1024v896h1024zM960 768h-256v-51.2l-12.8 12.8-51.2-51.2v89.6h-256v-89.6l-51.2 51.2-12.8-12.8v51.2h-256v-704h256v118.4l35.2-35.2 28.8 28.8v-115.2h256v115.2l48-48 16 16v-83.2h256v707.2zM672 662.4l-156.8-156.8-163.2 163.2-76.8-76.8 163.2-163.2-156.8-156.8 76.8-76.8 156.8 156.8 160-160 76.8 76.8-160 160 156.8 156.8-76.8 76.8z" />
+<glyph unicode="&#xe900;" glyph-name="a11y" d="M960 704v64l-448-128-448 128v-64l320-128v-256l-128-448h64l192 448 192-448h64l-128 448v256zM416 800q0 40 28 68t68 28 68-28 28-68-28-68-68-28-68 28-28 68z" />
+<glyph unicode="&#xe901;" glyph-name="toc" d="M0 896h128v-128h-128v128zM192 896h832v-128h-832v128zM0 512h128v-128h-128v128zM192 512h832v-128h-832v128zM0 128h128v-128h-128v128zM192 128h832v-128h-832v128zM192 704h128v-128h-128v128zM384 704h640v-128h-640v128zM192 320h128v-128h-128v128zM384 320h640v-128h-640v128z" />
+<glyph unicode="&#xe902;" glyph-name="fill" d="M521.6 915.2l-67.2-67.2-86.4 86.4-86.4-86.4 86.4-86.4-368-368 432-432 518.4 518.4-428.8 435.2zM435.2 134.4l-262.4 262.4 35.2 35.2 576 51.2-348.8-348.8zM953.6 409.6c-6.4-6.4-16-16-28.8-32-28.8-32-41.6-64-41.6-89.6v0 0 0 0 0 0 0c0-16 6.4-35.2 22.4-48 12.8-12.8 32-22.4 48-22.4s35.2 6.4 48 22.4 22.4 32 22.4 48v0 0 0 0 0 0 0c0 25.6-12.8 54.4-41.6 89.6-9.6 16-22.4 25.6-28.8 32v0z" />
+<glyph unicode="&#xe903;" glyph-name="borderwidth" d="M0 265.6h1024v-128h-1024v128zM0 32h1024v-64h-1024v64zM0 566.4h1024v-192h-1024v192zM0 928h1024v-256h-1024v256z" />
+<glyph unicode="&#xe904;" glyph-name="line" d="M739.2 627.2l-502.4-502.4h-185.6v185.6l502.4 502.4 185.6-185.6zM803.2 688l-185.6 185.6 67.2 67.2c22.4 22.4 54.4 22.4 76.8 0l108.8-108.8c22.4-22.4 22.4-54.4 0-76.8l-67.2-67.2zM41.6 48h940.8v-112h-940.8v112z" />
+<glyph unicode="&#xe905;" glyph-name="count" d="M0 480h1024v-64h-1024v64zM304 912v-339.2h-67.2v272h-67.2v67.2zM444.8 694.4v-54.4h134.4v-67.2h-201.6v153.6l134.4 64v54.4h-134.4v67.2h201.6v-153.6zM854.4 912v-339.2h-204.8v67.2h137.6v67.2h-137.6v70.4h137.6v67.2h-137.6v67.2zM115.2 166.4c3.2 57.6 38.4 83.2 108.8 83.2 38.4 0 67.2-9.6 86.4-25.6s25.6-35.2 25.6-70.4v-112c0-25.6 0-28.8 9.6-41.6h-73.6c-3.2 9.6-3.2 9.6-6.4 19.2-22.4-19.2-41.6-25.6-70.4-25.6-54.4 0-89.6 32-89.6 76.8s28.8 70.4 99.2 80l38.4 6.4c16 3.2 22.4 6.4 22.4 16 0 12.8-12.8 22.4-38.4 22.4s-41.6-9.6-44.8-28.8h-67.2zM262.4 115.2c-6.4-3.2-12.8-6.4-25.6-6.4l-25.6-6.4c-25.6-6.4-38.4-16-38.4-28.8 0-16 12.8-25.6 35.2-25.6s41.6 9.6 54.4 32v35.2zM390.4 336h73.6v-112c22.4 16 41.6 22.4 67.2 22.4 64 0 105.6-51.2 105.6-124.8 0-76.8-44.8-134.4-108.8-134.4-32 0-48 9.6-67.2 35.2v-28.8h-70.4v342.4zM460.8 121.6c0-41.6 22.4-70.4 51.2-70.4s51.2 28.8 51.2 70.4c0 44.8-19.2 70.4-51.2 70.4-28.8 0-51.2-28.8-51.2-70.4zM851.2 153.6c-3.2 22.4-19.2 35.2-44.8 35.2-32 0-51.2-25.6-51.2-70.4 0-48 19.2-73.6 51.2-73.6 25.6 0 41.6 12.8 44.8 41.6l70.4-3.2c-9.6-60.8-54.4-96-118.4-96-73.6 0-121.6 51.2-121.6 128 0 80 48 131.2 124.8 131.2 64 0 108.8-35.2 112-96h-67.2z" />
+<glyph unicode="&#xe906;" glyph-name="reload" d="M889.68 793.68c-93.608 102.216-228.154 166.32-377.68 166.32-282.77 0-512-229.23-512-512h96c0 229.75 186.25 416 416 416 123.020 0 233.542-53.418 309.696-138.306l-149.696-149.694h352v352l-134.32-134.32zM928 448c0-229.75-186.25-416-416-416-123.020 0-233.542 53.418-309.694 138.306l149.694 149.694h-352v-352l134.32 134.32c93.608-102.216 228.154-166.32 377.68-166.32 282.77 0 512 229.23 512 512h-96z" />
+<glyph unicode="&#xe907;" glyph-name="translate" d="M553.6 304l-118.4 118.4c80 89.6 137.6 195.2 172.8 304h137.6v92.8h-326.4v92.8h-92.8v-92.8h-326.4v-92.8h518.4c-32-89.6-80-176-147.2-249.6-44.8 48-80 99.2-108.8 156.8h-92.8c35.2-76.8 80-147.2 137.6-211.2l-236.8-233.6 67.2-67.2 233.6 233.6 144-144c3.2 0 38.4 92.8 38.4 92.8zM816 540.8h-92.8l-208-560h92.8l51.2 140.8h220.8l51.2-140.8h92.8l-208 560zM691.2 214.4l76.8 201.6 76.8-201.6h-153.6z" />
+<glyph unicode="&#xe908;" glyph-name="drag" d="M576 896h128v-128h-128v128zM576 640h128v-128h-128v128zM320 640h128v-128h-128v128zM576 384h128v-128h-128v128zM320 384h128v-128h-128v128zM320 128h128v-128h-128v128zM576 128h128v-128h-128v128zM320 896h128v-128h-128v128z" />
+<glyph unicode="&#xe90b;" glyph-name="home" d="M1024 369.556l-512 397.426-512-397.428v162.038l512 397.426 512-397.428zM896 384v-384h-256v256h-256v-256h-256v384l384 288z" />
+<glyph unicode="&#xe911;" glyph-name="books" d="M576.234 670.73l242.712 81.432 203.584-606.784-242.712-81.432zM0 64h256v704h-256v-704zM64 640h128v-64h-128v64zM320 64h256v704h-256v-704zM384 640h128v-64h-128v64z" />
+<glyph unicode="&#xe914;" glyph-name="upload" d="M839.432 760.57c27.492-27.492 50.554-78.672 55.552-120.57h-318.984v318.984c41.898-4.998 93.076-28.060 120.568-55.552l142.864-142.862zM512 576v384h-368c-44 0-80-36-80-80v-864c0-44 36-80 80-80h672c44 0 80 36 80 80v560h-384zM576 192v-192h-192v192h-160l256 256 256-256h-160z" />
+<glyph unicode="&#xe915;" glyph-name="editimage" d="M768 416v-352h-640v640h352l128 128h-512c-52.8 0-96-43.2-96-96v-704c0-52.8 43.2-96 96-96h704c52.798 0 96 43.2 96 96v512l-128-128zM864 960l-608-608v-160h160l608 608c0 96-64 160-160 160zM416 320l-48 48 480 480 48-48-480-480z" />
+<glyph unicode="&#xe91c;" glyph-name="bubble" d="M928 896h-832c-52.8 0-96-43.2-96-96v-512c0-52.8 43.2-96 96-96h160v-256l307.2 256h364.8c52.8 0 96 43.2 96 96v512c0 52.8-43.2 96-96 96zM896 320h-379.142l-196.858-174.714v174.714h-192v448h768v-448z" />
+<glyph unicode="&#xe91d;" glyph-name="user" d="M622.826 257.264c-22.11 3.518-22.614 64.314-22.614 64.314s64.968 64.316 79.128 150.802c38.090 0 61.618 91.946 23.522 124.296 1.59 34.054 48.96 267.324-190.862 267.324s-192.45-233.27-190.864-267.324c-38.094-32.35-14.57-124.296 23.522-124.296 14.158-86.486 79.128-150.802 79.128-150.802s-0.504-60.796-22.614-64.314c-71.22-11.332-337.172-128.634-337.172-257.264h896c0 128.63-265.952 245.932-337.174 257.264z" />
+<glyph unicode="&#xe926;" glyph-name="lock" d="M592 512h-16v192c0 105.87-86.13 192-192 192h-128c-105.87 0-192-86.13-192-192v-192h-16c-26.4 0-48-21.6-48-48v-480c0-26.4 21.6-48 48-48h544c26.4 0 48 21.6 48 48v480c0 26.4-21.6 48-48 48zM192 704c0 35.29 28.71 64 64 64h128c35.29 0 64-28.71 64-64v-192h-256v192z" />
+<glyph unicode="&#xe927;" glyph-name="unlock" d="M768 896c105.87 0 192-86.13 192-192v-192h-128v192c0 35.29-28.71 64-64 64h-128c-35.29 0-64-28.71-64-64v-192h16c26.4 0 48-21.6 48-48v-480c0-26.4-21.6-48-48-48h-544c-26.4 0-48 21.6-48 48v480c0 26.4 21.6 48 48 48h400v192c0 105.87 86.13 192 192 192h128z" />
+<glyph unicode="&#xe928;" glyph-name="settings" d="M448 832v16c0 26.4-21.6 48-48 48h-160c-26.4 0-48-21.6-48-48v-16h-192v-128h192v-16c0-26.4 21.6-48 48-48h160c26.4 0 48 21.6 48 48v16h576v128h-576zM256 704v128h128v-128h-128zM832 528c0 26.4-21.6 48-48 48h-160c-26.4 0-48-21.6-48-48v-16h-576v-128h576v-16c0-26.4 21.6-48 48-48h160c26.4 0 48 21.6 48 48v16h192v128h-192v16zM640 384v128h128v-128h-128zM448 208c0 26.4-21.6 48-48 48h-160c-26.4 0-48-21.6-48-48v-16h-192v-128h192v-16c0-26.4 21.6-48 48-48h160c26.4 0 48 21.6 48 48v16h576v128h-576v16zM256 64v128h128v-128h-128z" />
+<glyph unicode="&#xe92a;" glyph-name="remove2" d="M192-64h640l64 704h-768zM640 832v128h-256v-128h-320v-192l64 64h768l64-64v192h-320zM576 832h-128v64h128v-64z" />
+<glyph unicode="&#xe92d;" glyph-name="menu" d="M384 896h256v-256h-256zM384 576h256v-256h-256zM384 256h256v-256h-256z" />
+<glyph unicode="&#xe930;" glyph-name="warning" d="M1009.956 44.24l-437.074 871.112c-16.742 29.766-38.812 44.648-60.882 44.648s-44.14-14.882-60.884-44.648l-437.074-871.112c-33.486-59.532-5-108.24 63.304-108.24h869.308c68.302 0 96.792 48.708 63.302 108.24zM512 64c-35.346 0-64 28.654-64 64 0 35.348 28.654 64 64 64 35.348 0 64-28.652 64-64 0-35.346-28.652-64-64-64zM556 256h-88l-20 256c0 35.346 28.654 64 64 64s64-28.654 64-64l-20-256z" />
+<glyph unicode="&#xe931;" glyph-name="question" d="M448 256h128v-128h-128zM704 704c35.346 0 64-28.654 64-64v-192l-192-128h-128v64l192 128v64h-320v128h384zM512 864c-111.118 0-215.584-43.272-294.156-121.844s-121.844-183.038-121.844-294.156c0-111.118 43.272-215.584 121.844-294.156s183.038-121.844 294.156-121.844c111.118 0 215.584 43.272 294.156 121.844s121.844 183.038 121.844 294.156c0 111.118-43.272 215.584-121.844 294.156s-183.038 121.844-294.156 121.844zM512 960v0c282.77 0 512-229.23 512-512s-229.23-512-512-512c-282.77 0-512 229.23-512 512s229.23 512 512 512z" />
+<glyph unicode="&#xe932;" glyph-name="pluscircle" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 64c-212.078 0-384 171.922-384 384s171.922 384 384 384c212.078 0 384-171.922 384-384s-171.922-384-384-384zM768 384h-192v-192h-128v192h-192v128h192v192h128v-192h192z" />
+<glyph unicode="&#xe933;" glyph-name="info" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM448 768h128v-128h-128v128zM640 128h-256v64h64v256h-64v64h192v-320h64v-64z" />
+<glyph unicode="&#xe934;" glyph-name="notice" d="M1024 224l-288 736h-448l-288-288v-448l288-288h448l288 288v448l-288 288zM576 128h-128v128h128v-128zM576 384h-128v384h128v-384z" />
+<glyph unicode="&#xe935;" glyph-name="drop" d="M864.626 486.838c-65.754 183.44-205.11 348.15-352.626 473.162-147.516-125.012-286.87-289.722-352.626-473.162-40.664-113.436-44.682-236.562 12.584-345.4 65.846-125.14 198.632-205.438 340.042-205.438s274.196 80.298 340.040 205.44c57.27 108.838 53.25 231.962 12.586 345.398zM738.764 201.044c-43.802-83.252-132.812-137.044-226.764-137.044-55.12 0-108.524 18.536-152.112 50.652 13.242-1.724 26.632-2.652 40.112-2.652 117.426 0 228.668 67.214 283.402 171.242 44.878 85.292 40.978 173.848 23.882 244.338 14.558-28.15 26.906-56.198 36.848-83.932 22.606-63.062 40.024-156.34-5.368-242.604z" />
+<glyph unicode="&#xe939;" glyph-name="minus" d="M0 544v-192c0-17.672 14.328-32 32-32h960c17.672 0 32 14.328 32 32v192c0 17.672-14.328 32-32 32h-960c-17.672 0-32-14.328-32-32z" />
+<glyph unicode="&#xe93a;" glyph-name="plus" d="M992 576h-352v352c0 17.672-14.328 32-32 32h-192c-17.672 0-32-14.328-32-32v-352h-352c-17.672 0-32-14.328-32-32v-192c0-17.672 14.328-32 32-32h352v-352c0-17.672 14.328-32 32-32h192c17.672 0 32 14.328 32 32v352h352c17.672 0 32 14.328 32 32v192c0 17.672-14.328 32-32 32z" />
+<glyph unicode="&#xe93b;" glyph-name="arrowup" d="M0 320l192-192 320 320 320-320 192 192-511.998 512z" />
+<glyph unicode="&#xe93c;" glyph-name="arrowright" d="M384 960l-192-192 320-320-320-320 192-192 512 512z" />
+<glyph unicode="&#xe93d;" glyph-name="arrowdown" d="M1024 576l-192 192-320-320-320 320-192-192 512-511.998z" />
+<glyph unicode="&#xe93f;" glyph-name="arrowup2" d="M768 320l-256 256-256-256z" />
+<glyph unicode="&#xe940;" glyph-name="arrowdown2" d="M256 576l256-256 256 256z" />
+<glyph unicode="&#xe941;" glyph-name="menu2" d="M256 704l256-256 256 256zM255.996 384.004l256-256 256 256z" />
+<glyph unicode="&#xe961;" glyph-name="newtab" d="M704 384l128 128v-512h-768v768h512l-128-128h-256v-512h512zM960 896v-352l-130.744 130.744-354.746-354.744h-90.51v90.512l354.744 354.744-130.744 130.744z" />
+<glyph unicode="&#xeaa8;" glyph-name="rotateleft" d="M607.998 831.986c-212.070 0-383.986-171.916-383.986-383.986h-191.994l246.848-246.848 246.848 246.848h-191.994c0 151.478 122.798 274.276 274.276 274.276 151.48 0 274.276-122.798 274.276-274.276 0-151.48-122.796-274.276-274.276-274.276v-109.71c212.070 0 383.986 171.916 383.986 383.986s-171.916 383.986-383.986 383.986z" />
+<glyph unicode="&#xeaa9;" glyph-name="rotateright" d="M416.002 831.986c212.070 0 383.986-171.916 383.986-383.986h191.994l-246.848-246.848-246.848 246.848h191.994c0 151.478-122.798 274.276-274.276 274.276-151.48 0-274.276-122.798-274.276-274.276 0-151.48 122.796-274.276 274.276-274.276v-109.71c-212.070 0-383.986 171.916-383.986 383.986s171.916 383.986 383.986 383.986z" />
+<glyph unicode="&#xeaaa;" glyph-name="flipv" d="M0 576h1024v384zM1024 0v384h-1024z" />
+<glyph unicode="&#xeaac;" glyph-name="fliph" d="M576 960v-1024h384zM0-64h384v1024z" />
+<glyph unicode="&#xeb35;" glyph-name="zoomin" d="M992.262 88.604l-242.552 206.294c-25.074 22.566-51.89 32.926-73.552 31.926 57.256 67.068 91.842 154.078 91.842 249.176 0 212.078-171.922 384-384 384-212.076 0-384-171.922-384-384s171.922-384 384-384c95.098 0 182.108 34.586 249.176 91.844-1-21.662 9.36-48.478 31.926-73.552l206.294-242.552c35.322-39.246 93.022-42.554 128.22-7.356s31.892 92.898-7.354 128.22zM384 320c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.614-256-256-256zM448 768h-128v-128h-128v-128h128v-128h128v128h128v128h-128z" />
+<glyph unicode="&#xeb36;" glyph-name="zoomout" d="M992.262 88.604l-242.552 206.294c-25.074 22.566-51.89 32.926-73.552 31.926 57.256 67.068 91.842 154.078 91.842 249.176 0 212.078-171.922 384-384 384-212.076 0-384-171.922-384-384s171.922-384 384-384c95.098 0 182.108 34.586 249.176 91.844-1-21.662 9.36-48.478 31.926-73.552l206.294-242.552c35.322-39.246 93.022-42.554 128.22-7.356s31.892 92.898-7.354 128.22zM384 320c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.614-256-256-256zM192 640h384v-128h-384z" />
+<glyph unicode="&#xeba7;" glyph-name="sharpen" d="M768 832h-512l-256-256 512-576 512 576-256 256zM512 181.334v2.666h-2.37l-14.222 16h16.592v16h-30.814l-14.222 16h45.036v16h-59.258l-14.222 16h73.48v16h-87.704l-14.222 16h101.926v16h-116.148l-14.222 16h130.37v16h-144.592l-14.222 16h158.814v16h-173.038l-14.222 16h187.26v16h-201.482l-14.222 16h215.704v16h-229.926l-14.222 16h244.148v16h-258.372l-14.222 16h272.594v16h-286.816l-14.222 16h301.038v16h-315.26l-14.222 16h329.482v16h-343.706l-7.344 8.262 139.072 139.072h211.978v-3.334h215.314l16-16h-231.314v-16h247.314l16-16h-263.314v-16h279.314l16-16h-295.314v-16h311.314l16-16h-327.314v-16h343.312l7.738-7.738-351.050-394.928z" />
+<glyph unicode="&#xec6a;" glyph-name="options" d="M64 768h896v-192h-896zM64 512h896v-192h-896zM64 256h896v-192h-896z" />
+<glyph unicode="&#xeccc;" glyph-name="sun" d="M512 128c35.346 0 64-28.654 64-64v-64c0-35.346-28.654-64-64-64s-64 28.654-64 64v64c0 35.346 28.654 64 64 64zM512 768c-35.346 0-64 28.654-64 64v64c0 35.346 28.654 64 64 64s64-28.654 64-64v-64c0-35.346-28.654-64-64-64zM960 512c35.346 0 64-28.654 64-64s-28.654-64-64-64h-64c-35.348 0-64 28.654-64 64s28.652 64 64 64h64zM192 448c0-35.346-28.654-64-64-64h-64c-35.346 0-64 28.654-64 64s28.654 64 64 64h64c35.346 0 64-28.654 64-64zM828.784 221.726l45.256-45.258c24.992-24.99 24.992-65.516 0-90.508-24.994-24.992-65.518-24.992-90.51 0l-45.256 45.256c-24.992 24.99-24.992 65.516 0 90.51 24.994 24.992 65.518 24.992 90.51 0zM195.216 674.274l-45.256 45.256c-24.994 24.994-24.994 65.516 0 90.51s65.516 24.994 90.51 0l45.256-45.256c24.994-24.994 24.994-65.516 0-90.51s-65.516-24.994-90.51 0zM828.784 674.274c-24.992-24.992-65.516-24.992-90.51 0-24.992 24.994-24.992 65.516 0 90.51l45.256 45.254c24.992 24.994 65.516 24.994 90.51 0 24.992-24.994 24.992-65.516 0-90.51l-45.256-45.254zM195.216 221.726c24.992 24.992 65.518 24.992 90.508 0 24.994-24.994 24.994-65.52 0-90.51l-45.254-45.256c-24.994-24.992-65.516-24.992-90.51 0s-24.994 65.518 0 90.508l45.256 45.258zM512 704c-141.384 0-256-114.616-256-256 0-141.382 114.616-256 256-256 141.382 0 256 114.618 256 256 0 141.384-114.616 256-256 256zM512 288c-88.366 0-160 71.634-160 160s71.634 160 160 160 160-71.634 160-160-71.634-160-160-160z" />
+<glyph unicode="&#xeccd;" glyph-name="moon" d="M715.812 895.52c-60.25 34.784-124.618 55.904-189.572 64.48 122.936-160.082 144.768-384.762 37.574-570.42-107.2-185.67-312.688-279.112-512.788-252.68 39.898-51.958 90.376-97.146 150.628-131.934 245.908-141.974 560.37-57.72 702.344 188.198 141.988 245.924 57.732 560.372-188.186 702.356z" />
+<glyph unicode="&#xecd4;" glyph-name="contrast" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM128 448c0 212.078 171.922 384 384 384v-768c-212.078 0-384 171.922-384 384z" />
+<glyph unicode="&#xed6a;" glyph-name="remove22" d="M893.254 738.746l-90.508 90.508-290.746-290.744-290.746 290.744-90.508-90.506 290.746-290.748-290.746-290.746 90.508-90.508 290.746 290.746 290.746-290.746 90.508 90.51-290.744 290.744z" />
+<glyph unicode="&#xedc0;" glyph-name="arrowleft" d="M672-64l192 192-320 320 320 320-192 192-512-512z" />
+<glyph unicode="&#xedf9;" glyph-name="resize2" d="M0 896v-384c0-35.346 28.654-64 64-64s64 28.654 64 64v229.488l677.488-677.488h-229.488c-35.346 0-64-28.652-64-64 0-35.346 28.654-64 64-64h384c35.346 0 64 28.654 64 64v384c0 35.348-28.654 64-64 64s-64-28.652-64-64v-229.488l-677.488 677.488h229.488c35.346 0 64 28.654 64 64s-28.652 64-64 64h-384c-35.346 0-64-28.654-64-64z" />
+<glyph unicode="&#xee78;" glyph-name="crop" d="M832 704l192 192-64 64-192-192h-448v192h-128v-192h-192v-128h192v-512h512v-192h128v192h192v128h-192v448zM320 640h320l-320-320v320zM384 256l320 320v-320h-320z" />
+</font></defs></svg>
\ No newline at end of file
diff --git a/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.ttf b/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.ttf
new file mode 100644
index 0000000..61a48a5
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.ttf
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.woff b/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.woff
new file mode 100644
index 0000000..aace5d9
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/skins/lightgray/fonts/tinymce.woff
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/skins/lightgray/img/anchor.gif b/project-web/public/static/tinymce4.7.5/skins/lightgray/img/anchor.gif
new file mode 100644
index 0000000..606348c
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/skins/lightgray/img/anchor.gif
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/skins/lightgray/img/loader.gif b/project-web/public/static/tinymce4.7.5/skins/lightgray/img/loader.gif
new file mode 100644
index 0000000..c69e937
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/skins/lightgray/img/loader.gif
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/skins/lightgray/img/object.gif b/project-web/public/static/tinymce4.7.5/skins/lightgray/img/object.gif
new file mode 100644
index 0000000..cccd7f0
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/skins/lightgray/img/object.gif
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/skins/lightgray/img/trans.gif b/project-web/public/static/tinymce4.7.5/skins/lightgray/img/trans.gif
new file mode 100644
index 0000000..3884865
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/skins/lightgray/img/trans.gif
Binary files differ
diff --git a/project-web/public/static/tinymce4.7.5/skins/lightgray/skin.min.css b/project-web/public/static/tinymce4.7.5/skins/lightgray/skin.min.css
new file mode 100644
index 0000000..4ad815b
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/skins/lightgray/skin.min.css
@@ -0,0 +1 @@
+.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#595959;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.word-wrap{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:inherit !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2)}.mce-statusbar>.mce-container-body{display:flex;padding-right:16px}.mce-statusbar>.mce-container-body .mce-path{flex:1}.mce-wordcount{font-size:inherit;text-transform:uppercase;padding:8px 0}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative;font-size:11px}.mce-fullscreen .mce-resizehandle{display:none}.mce-statusbar .mce-flow-layout-item{margin:0}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #c5c5c5;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:white}.mce-grid td.mce-grid-cell div{border:1px solid #c5c5c5;width:15px;height:15px;margin:0;cursor:pointer}.mce-grid td.mce-grid-cell div:focus{border-color:#91bbe9}.mce-grid td.mce-grid-cell div[disabled]{cursor:not-allowed}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#91bbe9}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#c5c5c5;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#91bbe9;background:#bdd6f2}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%}.mce-colorbtn-trans div{text-align:center;vertical-align:middle;font-weight:bold;font-size:20px;line-height:16px;color:#8b8b8b}.mce-monospace{font-family:"Courier New",Courier,monospace}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-container b{font-weight:bold}.mce-container p{margin-bottom:5px}.mce-container a{cursor:pointer;color:#2276d2}.mce-container a:hover{text-decoration:underline}.mce-container ul{margin-left:15px}.mce-container .mce-table-striped{border-collapse:collapse;margin:10px}.mce-container .mce-table-striped thead>tr{background-color:#fafafa}.mce-container .mce-table-striped thead>tr th{font-weight:bold}.mce-container .mce-table-striped td,.mce-container .mce-table-striped th{padding:5px}.mce-container .mce-table-striped tr:nth-child(even){background-color:#fafafa}.mce-container .mce-table-striped tbody>tr:hover{background-color:#e1e1e1}.mce-branding{font-size:inherit;text-transform:uppercase;white-space:pre;padding:8px 0}.mce-branding a{font-size:inherit;color:inherit}.mce-top-part{position:relative}.mce-top-part::before{content:'';position:absolute;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);top:0;right:0;bottom:0;left:0;pointer-events:none}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-rtl .mce-statusbar>.mce-container-body>*:last-child{padding-right:0;padding-left:10px}.mce-rtl .mce-path{text-align:right;padding-right:16px}.mce-croprect-container{position:absolute;top:0;left:0}.mce-croprect-handle{position:absolute;top:0;left:0;width:20px;height:20px;border:2px solid white}.mce-croprect-handle-nw{border-width:2px 0 0 2px;margin:-2px 0 0 -2px;cursor:nw-resize;top:100px;left:100px}.mce-croprect-handle-ne{border-width:2px 2px 0 0;margin:-2px 0 0 -20px;cursor:ne-resize;top:100px;left:200px}.mce-croprect-handle-sw{border-width:0 0 2px 2px;margin:-20px 2px 0 -2px;cursor:sw-resize;top:200px;left:100px}.mce-croprect-handle-se{border-width:0 2px 2px 0;margin:-20px 0 0 -20px;cursor:se-resize;top:200px;left:200px}.mce-croprect-handle-move{position:absolute;cursor:move;border:0}.mce-croprect-block{opacity:.5;filter:alpha(opacity=50);zoom:1;position:absolute;background:black}.mce-croprect-handle:focus{border-color:#2276d2}.mce-croprect-handle-move:focus{outline:1px solid #2276d2}.mce-imagepanel{overflow:auto;background:black}.mce-imagepanel-bg{position:absolute;background:url('data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==')}.mce-imagepanel img{position:absolute}.mce-imagetool.mce-btn .mce-ico{display:block;width:20px;height:20px;text-align:center;line-height:20px;font-size:20px;padding:5px}.mce-arrow-up{margin-top:12px}.mce-arrow-down{margin-top:-12px}.mce-arrow:before,.mce-arrow:after{position:absolute;left:50%;display:block;width:0;height:0;border-style:solid;border-color:transparent;content:""}.mce-arrow.mce-arrow-up:before{top:-9px;border-bottom-color:#c5c5c5;border-width:0 9px 9px;margin-left:-9px}.mce-arrow.mce-arrow-down:before{bottom:-9px;border-top-color:#c5c5c5;border-width:9px 9px 0;margin-left:-9px}.mce-arrow.mce-arrow-up:after{top:-8px;border-bottom-color:#fff;border-width:0 8px 8px;margin-left:-8px}.mce-arrow.mce-arrow-down:after{bottom:-8px;border-top-color:#fff;border-width:8px 8px 0;margin-left:-8px}.mce-arrow.mce-arrow-left:before,.mce-arrow.mce-arrow-left:after{margin:0}.mce-arrow.mce-arrow-left:before{left:8px}.mce-arrow.mce-arrow-left:after{left:9px}.mce-arrow.mce-arrow-right:before,.mce-arrow.mce-arrow-right:after{left:auto;margin:0}.mce-arrow.mce-arrow-right:before{right:8px}.mce-arrow.mce-arrow-right:after{right:9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:before{left:-9px;top:50%;border-right-color:#c5c5c5;border-width:9px 9px 9px 0;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:after{left:-8px;top:50%;border-right-color:#fff;border-width:8px 8px 8px 0;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left{margin-left:12px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:before{right:-9px;top:50%;border-left-color:#c5c5c5;border-width:9px 0 9px 9px;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:after{right:-8px;top:50%;border-left-color:#fff;border-width:8px 0 8px 8px;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right{margin-left:-14px}.mce-edit-aria-container>.mce-container-body{display:flex}.mce-edit-aria-container>.mce-container-body .mce-edit-area{flex:1}.mce-edit-aria-container>.mce-container-body .mce-sidebar>.mce-container-body{display:flex;align-items:stretch;height:100%}.mce-edit-aria-container>.mce-container-body .mce-sidebar-panel{min-width:250px;max-width:250px;position:relative}.mce-edit-aria-container>.mce-container-body .mce-sidebar-panel>.mce-container-body{position:absolute;width:100%;height:100%;overflow:auto;top:0;left:0}.mce-sidebar-toolbar{border:0 solid #c5c5c5;border-left-width:1px}.mce-sidebar-toolbar .mce-btn{border-left:0;border-right:0}.mce-sidebar-toolbar .mce-btn.mce-active,.mce-sidebar-toolbar .mce-btn.mce-active:hover{background-color:#555c66}.mce-sidebar-toolbar .mce-btn.mce-active button,.mce-sidebar-toolbar .mce-btn.mce-active:hover button,.mce-sidebar-toolbar .mce-btn.mce-active button i,.mce-sidebar-toolbar .mce-btn.mce-active:hover button i{color:white;text-shadow:1px 1px none}.mce-sidebar-panel{border:0 solid #c5c5c5;border-left-width:1px}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1}.mce-scroll{position:relative}.mce-panel{border:0 solid #f3f3f3;border:0 solid #c5c5c5;background-color:#fff}.mce-floatpanel{position:absolute;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2)}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);top:0;left:0;background:#FFF;border:1px solid #c5c5c5;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#c5c5c5;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#FFF}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#FFF}#mce-modal-block.mce-in{opacity:.5;filter:alpha(opacity=50);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#FFF;position:fixed;top:0;left:0;opacity:0;transform:scale(.1);transition:transform 100ms ease-in,opacity 150ms ease-in}.mce-window.mce-in{transform:scale(1);opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:0;top:0;height:38px;width:38px;text-align:center;cursor:pointer}.mce-window-head .mce-close i{color:#9b9b9b}.mce-close:hover i{color:#bdbdbd}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:20px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#FFF;border-top:1px solid #c5c5c5}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window-body .mce-listbox{border-color:#e2e4e7}.mce-window .mce-btn:hover{border-color:#c5c5c5}.mce-window .mce-btn:focus{border-color:#2276d2}.mce-window-body .mce-btn,.mce-foot .mce-btn{border-color:#c5c5c5}.mce-foot .mce-btn.mce-primary{border-color:transparent}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1;margin-top:1px}.mce-tooltip-inner{font-size:11px;background-color:#000;color:white;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-ne,.mce-tooltip-se{margin-left:14px}.mce-tooltip-n .mce-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-progress{display:inline-block;position:relative;height:20px}.mce-progress .mce-bar-container{display:inline-block;width:100px;height:100%;margin-right:8px;border:1px solid #ccc;overflow:hidden}.mce-progress .mce-text{display:inline-block;margin-top:auto;margin-bottom:auto;font-size:14px;width:40px;color:#595959}.mce-bar{display:block;width:0;height:100%;background-color:#dfdfdf;-webkit-transition:width .2s ease;transition:width .2s ease}.mce-notification{position:absolute;background-color:#fff;padding:5px;margin-top:5px;border-width:1px;border-style:solid;border-color:#c5c5c5;transition:transform 100ms ease-in,opacity 150ms ease-in;opacity:0;box-sizing:border-box}.mce-notification.mce-in{opacity:1}.mce-notification-success{background-color:#dff0d8;border-color:#d6e9c6}.mce-notification-info{background-color:#d9edf7;border-color:#779ECB}.mce-notification-warning{background-color:#fcf8e3;border-color:#faebcc}.mce-notification-error{background-color:#f2dede;border-color:#ebccd1}.mce-notification.mce-has-close{padding-right:15px}.mce-notification .mce-ico{margin-top:5px}.mce-notification-inner{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;display:inline-block;font-size:14px;margin:5px 8px 4px 8px;text-align:center;white-space:normal;color:#31708f}.mce-notification-inner a{text-decoration:underline;cursor:pointer}.mce-notification .mce-progress{margin-right:8px}.mce-notification .mce-progress .mce-text{margin-top:5px}.mce-notification *,.mce-notification .mce-progress .mce-text{color:#595959}.mce-notification .mce-progress .mce-bar-container{border-color:#c5c5c5}.mce-notification .mce-progress .mce-bar-container .mce-bar{background-color:#595959}.mce-notification-success *,.mce-notification-success .mce-progress .mce-text{color:#3c763d}.mce-notification-success .mce-progress .mce-bar-container{border-color:#d6e9c6}.mce-notification-success .mce-progress .mce-bar-container .mce-bar{background-color:#3c763d}.mce-notification-info *,.mce-notification-info .mce-progress .mce-text{color:#31708f}.mce-notification-info .mce-progress .mce-bar-container{border-color:#779ECB}.mce-notification-info .mce-progress .mce-bar-container .mce-bar{background-color:#31708f}.mce-notification-warning *,.mce-notification-warning .mce-progress .mce-text{color:#8a6d3b}.mce-notification-warning .mce-progress .mce-bar-container{border-color:#faebcc}.mce-notification-warning .mce-progress .mce-bar-container .mce-bar{background-color:#8a6d3b}.mce-notification-error *,.mce-notification-error .mce-progress .mce-text{color:#a94442}.mce-notification-error .mce-progress .mce-bar-container{border-color:#ebccd1}.mce-notification-error .mce-progress .mce-bar-container .mce-bar{background-color:#a94442}.mce-notification .mce-close{position:absolute;top:6px;right:8px;font-size:20px;font-weight:bold;line-height:20px;color:#9b9b9b;cursor:pointer}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-btn{border:1px solid #b3b3b3;border-color:transparent transparent transparent transparent;position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);background:white;display:inline-block;*display:inline;*zoom:1;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-btn:hover,.mce-btn:active{background:white;color:#595959;border-color:#e2e4e7}.mce-btn:focus{background:white;color:#595959;border-color:#e2e4e7}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover,.mce-btn.mce-active:focus,.mce-btn.mce-active:active{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background:#555c66;color:white;border-color:transparent}.mce-btn.mce-active button,.mce-btn.mce-active:hover button,.mce-btn.mce-active i,.mce-btn.mce-active:hover i{color:white}.mce-btn:hover .mce-caret{border-top-color:#b5bcc2}.mce-btn.mce-active .mce-caret,.mce-btn.mce-active:hover .mce-caret{border-top-color:white}.mce-btn button{padding:4px 6px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#595959;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px none}.mce-primary.mce-btn-has-text{min-width:50px}.mce-primary{color:white;border:1px solid transparent;border-color:transparent;background-color:#2276d2}.mce-primary:hover,.mce-primary:focus{background-color:#1e6abc;border-color:transparent}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#1e6abc;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-primary button,.mce-primary button i{color:white;text-shadow:1px 1px none}.mce-btn .mce-txt{font-size:inherit;line-height:inherit;color:inherit}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #b5bcc2;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #b5bcc2;border-top:0}.mce-btn-flat{border:0;background:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-btn-has-text .mce-ico{padding-right:5px}.mce-rtl .mce-btn button{direction:rtl}.mce-toolbar .mce-btn-group{margin:0;padding:2px 0}.mce-btn-group .mce-btn{border-width:1px;margin:0;margin-left:2px}.mce-btn-group:not(:first-child){border-left:1px solid #d9d9d9;padding-left:0;margin-left:2px}.mce-btn-group{margin-left:2px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-rtl .mce-btn-group .mce-btn{margin-left:0;margin-right:2px}.mce-rtl .mce-btn-group .mce-first{margin-right:0}.mce-rtl .mce-btn-group:not(:first-child){border-left:none;border-right:1px solid #d9d9d9;padding-right:4px;margin-right:4px}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background-color:white;text-indent:-10em;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#595959;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid #2276d2;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#bdbdbd}.mce-checkbox .mce-label{vertical-align:middle}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{position:relative;display:inline-block;*display:inline;*zoom:1;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#bdbdbd}.mce-combobox .mce-btn{border:1px solid #c5c5c5;border-left:0;margin:0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-combobox .mce-status{position:absolute;right:2px;top:50%;line-height:16px;margin-top:-8px;font-size:12px;width:15px;height:15px;text-align:center;cursor:pointer}.mce-combobox.mce-has-status input{padding-right:20px}.mce-combobox.mce-has-open .mce-status{right:37px}.mce-combobox .mce-status.mce-i-warning{color:#c09853}.mce-combobox .mce-status.mce-i-checkmark{color:#468847}.mce-menu.mce-combobox-menu{border-top:0;margin-top:0;max-height:200px}.mce-menu.mce-combobox-menu .mce-menu-item{padding:4px 6px 4px 4px;font-size:11px}.mce-menu.mce-combobox-menu .mce-menu-item-sep{padding:0}.mce-menu.mce-combobox-menu .mce-text{font-size:11px}.mce-menu.mce-combobox-menu .mce-menu-item-link,.mce-menu.mce-combobox-menu .mce-menu-item-link b{font-size:11px}.mce-menu.mce-combobox-menu .mce-text b{font-size:11px}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-17px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;padding-left:2px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:0}.mce-colorpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selector1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid black;background:white;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal;font-size:inherit}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#595959;font-size:inherit;text-transform:uppercase}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#555c66;color:white}.mce-path .mce-divider{display:inline;font-size:inherit}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #c5c5c5;width:100%;height:100%}.mce-infobox{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden;border:1px solid red}.mce-infobox div{display:block;margin:5px}.mce-infobox div button{position:absolute;top:50%;right:4px;cursor:pointer;margin-top:-8px;display:none}.mce-infobox div button:focus{outline:2px solid #e2e4e7}.mce-infobox.mce-has-help div{margin-right:25px}.mce-infobox.mce-has-help button{display:block}.mce-infobox.mce-success{background:#dff0d8;border-color:#d6e9c6}.mce-infobox.mce-success div{color:#3c763d}.mce-infobox.mce-warning{background:#fcf8e3;border-color:#faebcc}.mce-infobox.mce-warning div{color:#8a6d3b}.mce-infobox.mce-error{background:#f2dede;border-color:#ebccd1}.mce-infobox.mce-error div{color:#a94442}.mce-rtl .mce-infobox div{text-align:right;direction:rtl}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-success{color:#468847}.mce-label.mce-warning{color:#c09853}.mce-label.mce-error{color:#b94a48}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar{border:1px solid #e2e4e7}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar .mce-menubtn button span{color:#595959}.mce-menubar .mce-caret{border-top-color:#b5bcc2}.mce-menubar .mce-active .mce-caret,.mce-menubar .mce-menubtn:hover .mce-caret{border-top-color:#b5bcc2}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:#e2e4e7;background:white;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubar .mce-menubtn.mce-active{border-bottom:none;z-index:65537}div.mce-menubtn.mce-opened{border-bottom-color:white;z-index:65537}.mce-menubtn button{color:#595959}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-rtl .mce-menubtn.mce-fixed-width span{direction:rtl;text-align:right}.mce-menu-item{display:block;padding:6px 4px 6px 4px;clear:both;font-weight:normal;line-height:20px;color:#595959;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-caret{margin-top:4px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #595959}.mce-menu-item .mce-menu-shortcut{display:inline-block;padding:0 10px 0 20px;color:#aaa}.mce-menu-item .mce-ico{padding-right:4px}.mce-menu-item:hover,.mce-menu-item:focus{background:#ededee}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#aaa}.mce-menu-item:hover .mce-text,.mce-menu-item:focus .mce-text,.mce-menu-item:hover .mce-ico,.mce-menu-item:focus .mce-ico{color:#595959}.mce-menu-item.mce-selected{background:#ededee}.mce-menu-item.mce-selected .mce-text,.mce-menu-item.mce-selected .mce-ico{color:#595959}.mce-menu-item.mce-active.mce-menu-item-normal{background:#555c66}.mce-menu-item.mce-active.mce-menu-item-normal .mce-text,.mce-menu-item.mce-active.mce-menu-item-normal .mce-ico{color:white}.mce-menu-item.mce-active.mce-menu-item-checkbox .mce-ico{visibility:visible}.mce-menu-item.mce-disabled,.mce-menu-item.mce-disabled:hover{background:white}.mce-menu-item.mce-disabled:focus,.mce-menu-item.mce-disabled:hover:focus{background:#ededee}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled:hover .mce-text,.mce-menu-item.mce-disabled .mce-ico,.mce-menu-item.mce-disabled:hover .mce-ico{color:#aaa}.mce-menu-item.mce-menu-item-preview.mce-active{border-left:5px solid #555c66;background:white}.mce-menu-item.mce-menu-item-preview.mce-active .mce-text,.mce-menu-item.mce-menu-item-preview.mce-active .mce-ico{color:#595959}.mce-menu-item.mce-menu-item-preview.mce-active:hover{background:#ededee}.mce-menu-item-link{color:#093;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mce-menu-item-link b{color:#093}.mce-menu-item-ellipsis{display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mce-menu-item:hover *,.mce-menu-item.mce-selected *,.mce-menu-item:focus *{color:#595959}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,0.1);cursor:default;filter:none}div.mce-menu .mce-menu-item b{font-weight:bold}.mce-menu-item-indent-1{padding-left:20px}.mce-menu-item-indent-2{padding-left:35px}.mce-menu-item-indent-2{padding-left:35px}.mce-menu-item-indent-3{padding-left:40px}.mce-menu-item-indent-4{padding-left:45px}.mce-menu-item-indent-5{padding-left:50px}.mce-menu-item-indent-6{padding-left:55px}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #595959;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#595959}.mce-rtl .mce-menu-item .mce-ico{padding-right:0;padding-left:4px}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}.mce-menu .mce-throbber-inline{height:25px;background-size:contain}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:-1px 0 0;min-width:180px;background:white;border:1px solid #c5c9cf;border:1px solid #e2e4e7;z-index:1002;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);max-height:500px;overflow:auto;overflow-x:hidden}.mce-menu.mce-animate{opacity:.01;transform:rotateY(10deg) rotateX(-10deg);transform-origin:left top}.mce-menu.mce-menu-align .mce-menu-shortcut,.mce-menu.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block}.mce-menu.mce-in.mce-animate{opacity:1;transform:rotateY(0) rotateX(0);transition:opacity .075s ease,transform .1s ease}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-rtl .mce-menu-item .mce-ico{padding-right:0;padding-left:4px}.mce-rtl.mce-menu-align .mce-caret,.mce-rtl .mce-menu-shortcut{right:auto;left:0}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#595959}.mce-selectbox{background:#fff;border:1px solid #c5c5c5}.mce-slider{border:1px solid #c5c5c5;background:#fff;width:100px;height:10px;position:relative;display:block}.mce-slider.mce-vertical{width:10px;height:100px}.mce-slider-handle{border:1px solid #c5c5c5;background:#e6e6e6;display:block;width:13px;height:13px;position:absolute;top:0;left:0;margin-left:-1px;margin-top:-2px}.mce-slider-handle:focus{border-color:#2276d2}.mce-spacer{visibility:hidden}.mce-splitbtn:hover .mce-open{border-left:1px solid #e2e4e7}.mce-splitbtn .mce-open{border-left:1px solid transparent;padding-right:4px;padding-left:4px}.mce-splitbtn .mce-open:focus{border-left:1px solid #e2e4e7}.mce-splitbtn .mce-open:hover,.mce-splitbtn .mce-open:active{border-left:1px solid #e2e4e7}.mce-splitbtn.mce-active:hover .mce-open{border-left:1px solid white}.mce-splitbtn.mce-opened{border-color:#e2e4e7}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:4px;padding-left:4px}.mce-rtl .mce-splitbtn .mce-open{border-left:0}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tabs,.mce-tabs+.mce-container-body{background:#fff}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#fff;padding:8px 15px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#FDFDFD}.mce-tab.mce-active{background:#FDFDFD;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-tab:focus{color:#2276d2}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#595959}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#2276d2;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px;height:auto}.mce-textbox.mce-disabled{color:#bdbdbd}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-dropzone{border:3px dashed gray;text-align:center}.mce-dropzone span{text-transform:uppercase;display:inline-block;vertical-align:middle}.mce-dropzone:after{content:"";height:100%;display:inline-block;vertical-align:middle}.mce-dropzone.mce-disabled{opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-dropzone.mce-disabled.mce-dragenter{cursor:not-allowed}.mce-browsebutton{position:relative;overflow:hidden}.mce-browsebutton button{position:relative;z-index:1}.mce-browsebutton input{opacity:0;filter:alpha(opacity=0);zoom:1;position:absolute;top:0;left:0;width:100%;height:100%;z-index:0}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-variant:normal;font-size:16px;line-height:16px;speak:none;vertical-align:text-top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;background:transparent center center;background-size:cover;width:16px;height:16px;color:#595959}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-alignnone:before{content:"\e003"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-insertdatetime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-rotateleft:before{content:"\eaa8"}.mce-i-rotateright:before{content:"\eaa9"}.mce-i-crop:before{content:"\ee78"}.mce-i-editimage:before{content:"\e915"}.mce-i-options:before{content:"\ec6a"}.mce-i-flipv:before{content:"\eaaa"}.mce-i-fliph:before{content:"\eaac"}.mce-i-zoomin:before{content:"\eb35"}.mce-i-zoomout:before{content:"\eb36"}.mce-i-sun:before{content:"\eccc"}.mce-i-moon:before{content:"\eccd"}.mce-i-arrowleft:before{content:"\edc0"}.mce-i-arrowright:before{content:"\e93c"}.mce-i-drop:before{content:"\e935"}.mce-i-contrast:before{content:"\ecd4"}.mce-i-sharpen:before{content:"\eba7"}.mce-i-resize2:before{content:"\edf9"}.mce-i-orientation:before{content:"\e601"}.mce-i-invert:before{content:"\e602"}.mce-i-gamma:before{content:"\e600"}.mce-i-remove:before{content:"\ed6a"}.mce-i-tablerowprops:before{content:"\e604"}.mce-i-tablecellprops:before{content:"\e605"}.mce-i-table2:before{content:"\e606"}.mce-i-tablemergecells:before{content:"\e607"}.mce-i-tableinsertcolbefore:before{content:"\e608"}.mce-i-tableinsertcolafter:before{content:"\e609"}.mce-i-tableinsertrowbefore:before{content:"\e60a"}.mce-i-tableinsertrowafter:before{content:"\e60b"}.mce-i-tablesplitcells:before{content:"\e60d"}.mce-i-tabledelete:before{content:"\e60e"}.mce-i-tableleftheader:before{content:"\e62a"}.mce-i-tabletopheader:before{content:"\e62b"}.mce-i-tabledeleterow:before{content:"\e800"}.mce-i-tabledeletecol:before{content:"\e801"}.mce-i-codesample:before{content:"\e603"}.mce-i-fill:before{content:"\e902"}.mce-i-borderwidth:before{content:"\e903"}.mce-i-line:before{content:"\e904"}.mce-i-count:before{content:"\e905"}.mce-i-translate:before{content:"\e907"}.mce-i-drag:before{content:"\e908"}.mce-i-home:before{content:"\e90b"}.mce-i-upload:before{content:"\e914"}.mce-i-bubble:before{content:"\e91c"}.mce-i-user:before{content:"\e91d"}.mce-i-lock:before{content:"\e926"}.mce-i-unlock:before{content:"\e927"}.mce-i-settings:before{content:"\e928"}.mce-i-remove2:before{content:"\e92a"}.mce-i-menu:before{content:"\e92d"}.mce-i-warning:before{content:"\e930"}.mce-i-question:before{content:"\e931"}.mce-i-pluscircle:before{content:"\e932"}.mce-i-info:before{content:"\e933"}.mce-i-notice:before{content:"\e934"}.mce-i-arrowup:before{content:"\e93b"}.mce-i-arrowdown:before{content:"\e93d"}.mce-i-arrowup2:before{content:"\e93f"}.mce-i-arrowdown2:before{content:"\e940"}.mce-i-menu2:before{content:"\e941"}.mce-i-newtab:before{content:"\e961"}.mce-i-a11y:before{content:"\e900"}.mce-i-plus:before{content:"\e93a"}.mce-i-insert:before{content:"\e93a"}.mce-i-minus:before{content:"\e939"}.mce-i-books:before{content:"\e911"}.mce-i-reload:before{content:"\e906"}.mce-i-toc:before{content:"\e901"}.mce-i-checkmark:before{content:"\e033"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-insert{font-size:14px}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#BBB}.mce-rtl .mce-filepicker input{direction:ltr}/*# sourceMappingURL=skin.min.css.map */
\ No newline at end of file
diff --git a/project-web/public/static/tinymce4.7.5/skins/lightgray/skin.min.css.map b/project-web/public/static/tinymce4.7.5/skins/lightgray/skin.min.css.map
new file mode 100644
index 0000000..c8763dc
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/skins/lightgray/skin.min.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["./src/skins/lightgray/main/less/desktop/Reset.less","./src/skins/lightgray/main/less/desktop/Variables.less","./src/skins/lightgray/main/less/desktop/Mixins.less","./src/skins/lightgray/main/less/desktop/Animations.less","./src/skins/lightgray/main/less/desktop/TinyMCE.less","./src/skins/lightgray/main/less/desktop/CropRect.less","./src/skins/lightgray/main/less/desktop/ImagePanel.less","./src/skins/lightgray/main/less/desktop/Arrows.less","./src/skins/lightgray/main/less/desktop/Sidebar.less","./src/skins/lightgray/main/less/desktop/Container.less","./src/skins/lightgray/main/less/desktop/Scrollable.less","./src/skins/lightgray/main/less/desktop/Panel.less","./src/skins/lightgray/main/less/desktop/FloatPanel.less","./src/skins/lightgray/main/less/desktop/Window.less","./src/skins/lightgray/main/less/desktop/ToolTip.less","./src/skins/lightgray/main/less/desktop/Progress.less","./src/skins/lightgray/main/less/desktop/Notification.less","./src/skins/lightgray/main/less/desktop/AbsoluteLayout.less","./src/skins/lightgray/main/less/desktop/Button.less","./src/skins/lightgray/main/less/desktop/ButtonGroup.less","./src/skins/lightgray/main/less/desktop/Checkbox.less","./src/skins/lightgray/main/less/desktop/ComboBox.less","./src/skins/lightgray/main/less/desktop/ColorBox.less","./src/skins/lightgray/main/less/desktop/ColorButton.less","./src/skins/lightgray/main/less/desktop/ColorPicker.less","./src/skins/lightgray/main/less/desktop/Path.less","./src/skins/lightgray/main/less/desktop/FieldSet.less","./src/skins/lightgray/main/less/desktop/FitLayout.less","./src/skins/lightgray/main/less/desktop/FlowLayout.less","./src/skins/lightgray/main/less/desktop/Iframe.less","./src/skins/lightgray/main/less/desktop/InfoBox.less","./src/skins/lightgray/main/less/desktop/Label.less","./src/skins/lightgray/main/less/desktop/MenuBar.less","./src/skins/lightgray/main/less/desktop/MenuButton.less","./src/skins/lightgray/main/less/desktop/MenuItem.less","./src/skins/lightgray/main/less/desktop/Throbber.less","./src/skins/lightgray/main/less/desktop/Menu.less","./src/skins/lightgray/main/less/desktop/ListBox.less","./src/skins/lightgray/main/less/desktop/ResizeHandle.less","./src/skins/lightgray/main/less/desktop/SelectBox.less","./src/skins/lightgray/main/less/desktop/Slider.less","./src/skins/lightgray/main/less/desktop/Spacer.less","./src/skins/lightgray/main/less/desktop/SplitButton.less","./src/skins/lightgray/main/less/desktop/StackLayout.less","./src/skins/lightgray/main/less/desktop/TabPanel.less","./src/skins/lightgray/main/less/desktop/TextBox.less","./src/skins/lightgray/main/less/desktop/DropZone.less","./src/skins/lightgray/main/less/desktop/BrowseButton.less","./src/skins/lightgray/main/less/desktop/Icons.less","./src/skins/lightgray/main/less/desktop/FilePicker.less"],"names":[],"mappings":"AAEA,CAAC,GAAS,WAAY,CAAC,GAAS,UAAW,GAAG,CAAC,GAAS,QAAS,CAAC,GAAS,OAAQ,GAAG,CAAC,GAAS,OAC9F,QAAA,CAAW,SAAA,CAAY,QAAA,CAAW,SAAA,CAClC,kBAAA,CAAqB,sBAAA,CACrB,oBAAA,CAAuB,aAAA,CACvB,YCU+B,2CDV/B,CACA,cAAA,CAAuB,gBAAA,CAAmB,UAAA,CAC1C,eAAA,CAAkB,UAAA,CAAa,WAAA,CAC/B,kBAAA,CAAqB,cAAA,CACrB,uCAAA,CACA,kBAAA,CAAqB,kBAAA,CACrB,eAAA,CACA,2BAAA,CACA,8BAAA,CACA,sBAAA,CACA,aAAA,CACA,eAGF,CAAC,GAAS,OAAQ,QAChB,0BAAA,CACA,6BAAA,CACA,sBAGF,CAAC,GAAS,UAAW,EAAC,eACpB,qBAAA,CACA,wBAAA,CACA,mBAAA,CACA,iBEyBF,WACE,oBAAA,CACA,wBAAA,CACA,oBAAA,CACA,qBAAA,CACA,gBAAA,CACA,iBAAA,CACA,oBAAA,CACA,aC7DF,CAAC,GAAS,MACR,SAAA,CDqCA,sCAAA,CACA,+BCnCA,CAJD,GAAS,KAIP,CAAC,GAAS,IACT,UCPJ,CAAC,GAAS,SAER,kBAAA,YACA,kBAGF,CAAC,GAAS,YACR,QAAA,CAAW,SAAA,CAAY,QAAA,CACvB,eAAA,CACA,WAAA,CACA,YAGF,GAAG,CAAC,GAAS,YACX,cAAA,CACA,KAAA,CAAQ,MAAA,CACR,UAAA,CACA,YAGF,CAAC,GAAS,SACR,aAAA,CFaA,+CAAA,CACA,4CAAA,CACA,wCEVF,CAAC,GAAS,UAAW,EAAG,GAAS,gBAC/B,YAAA,CACA,mBAFF,CAAC,GAAS,UAAW,EAAG,GAAS,eAI/B,EAAC,GAAS,MACR,OAIJ,CAAC,GAAS,WACR,iBAAA,CACA,wBAAA,CACA,cAGF,GAAG,CAAC,GAAS,WACX,eAAA,CACA,YAGF,CAAC,GAAS,WACR,kBAGF,CAAC,GAAS,UAAW,EAAC,GAAS,gBAC7B,iBAAA,CACA,eAGF,CAAC,GAAS,WAAY,EAAC,GAAS,cAC9B,aAGF,CAAC,GAAS,UAAW,EAAC,GAAS,kBAC7B,SAKF,CAAC,GAAS,SACR,yBAGF,CAAC,GAAS,QAAS,IACjB,cAAA,CACA,wBAAA,CACA,UAAA,CACA,WAAA,CACA,gBAAA,CACA,iBAAA,CACA,qBAAA,CACA,YAGF,CAAC,GAAS,QAAS,GAAG,KACpB,kBAGF,CAAC,GAAS,QAAS,GAAE,OACnB,iBAGF,CAAC,GAAS,KAAM,GAAE,CAAC,GAAS,UAAW,KACrC,wBAAA,CACA,UAAA,CAAa,WAAA,CACb,QAAA,CACA,eAEA,CAND,GAAS,KAAM,GAAE,CAAC,GAAS,UAAW,IAMpC,OACC,qBAGF,CAVD,GAAS,KAAM,GAAE,CAAC,GAAS,UAAW,IAUpC,WACC,mBAIJ,CAAC,GAAS,MACR,kBAAA,CACA,yBAFF,CAAC,GAAS,KAIR,GACE,aAAA,CACA,6BAEA,CARH,GAAS,KAIR,EAIG,OAAQ,CARZ,GAAS,KAIR,EAIY,OACR,qBAKN,CAAC,GAAS,aACR,mBADF,CAAC,GAAS,YAGR,GACE,oBAAA,CACA,UAAA,CAAa,YALjB,CAAC,GAAS,YAQR,EAAC,OARH,CAAC,GAAS,YAQC,EAAC,CAAC,GAAS,QAClB,oBAAA,CACA,mBAIJ,CAAC,GAAS,aACR,kBAGF,GAAG,CAAC,GAAS,gBACX,WAGF,CAAC,GAAS,eAAgB,KACxB,iBAAA,CACA,qBAAA,CACA,gBAAA,CACA,cAAA,CACA,gBAAA,CACA,cAGF,CAAC,GAAS,WACR,YAAa,gCASf,CAAC,GAAS,YAAa,EAAC,GAAS,kBAC/B,gBAKF,CAAC,GAAS,UAAW,GACnB,iBAGF,CAAC,GAAS,UAAW,GACnB,kBAGF,CAAC,GAAS,UAAW,GACnB,cAAA,CACA,cACA,CAHD,GAAS,UAAW,EAGlB,OACC,0BAIJ,CAAC,GAAS,UAAW,IACnB,iBAGF,CAAC,GAAS,UAAW,EAAC,GAAS,eAC7B,wBAAA,CACA,YAFF,CAAC,GAAS,UAAW,EAAC,GAAS,cAG7B,MAAM,IACJ,yBAJJ,CAAC,GAAS,UAAW,EAAC,GAAS,cAG7B,MAAM,GAEJ,IACE,iBANN,CAAC,GAAS,UAAW,EAAC,GAAS,cAS7B,IATF,CAAC,GAAS,UAAW,EAAC,GAAS,cASzB,IACF,YAVJ,CAAC,GAAS,UAAW,EAAC,GAAS,cAY7B,GAAE,UAAU,OACV,yBAbJ,CAAC,GAAS,UAAW,EAAC,GAAS,cAe7B,MAAM,GAAI,OACR,yBAIJ,CAAC,GAAS,UACR,iBAAA,CACA,wBAAA,CACA,eAAA,CACA,cAJF,CAAC,GAAS,SAMR,GACE,iBAAA,CACA,cAIJ,CAAC,GAAS,UACR,kBAGF,CAAC,GAAS,SAAS,SAEjB,QAAS,EAAT,CACA,iBAAA,CF7LA,+CAAA,CACA,4CAAA,CACA,uCAAA,CE6LA,KAAA,CACA,OAAA,CACA,QAAA,CACA,MAAA,CACA,oBAKF,CAAC,GAAS,IAAK,EAAC,GAAS,WACvB,MAAA,CACA,WAGF,CAAC,GAAS,IACR,EAAC,GAAS,UAAW,EAAG,GAAS,eAC/B,EAAG,YACD,eAAA,CACA,kBAJN,CAAC,GAAS,IAQR,EAAC,GAAS,MACR,gBAAA,CACA,mBCvPJ,CAAC,GAAS,oBACR,iBAAA,CACA,KAAA,CACA,OAGF,CAAC,GAAS,iBACR,iBAAA,CACA,KAAA,CAAQ,MAAA,CACR,UAAA,CAAa,WAAA,CACb,uBAGF,CAAC,GAAS,oBACR,wBAAA,CACA,oBAAA,CACA,gBAAA,CACA,SAAA,CAAY,WAGd,CAAC,GAAS,oBACR,wBAAA,CACA,qBAAA,CACA,gBAAA,CACA,SAAA,CAAY,WAGd,CAAC,GAAS,oBACR,wBAAA,CACA,uBAAA,CACA,gBAAA,CACA,SAAA,CAAY,WAGd,CAAC,GAAS,oBACR,wBAAA,CACA,sBAAA,CACA,gBAAA,CACA,SAAA,CAAY,WAGd,CAAC,GAAS,sBACR,iBAAA,CACA,WAAA,CACA,SAGF,CAAC,GAAS,gBH9CR,UAAA,CAEA,wBAAA,CACA,MAAA,CG6CA,iBAAA,CACA,iBAGF,CAAC,GAAS,gBAAgB,OACxB,qBAGF,CAAC,GAAS,qBAAqB,OAC7B,0BC1DF,CAAC,GAAS,YACR,aAAA,CACA,iBAGF,CAAC,GAAS,eACR,iBAAA,CACA,eAAgB,sGAGlB,CAAC,GAAS,WAAY,KACpB,kBAGF,CAAC,GAAS,UAAU,CAAC,GAAS,IAAK,EAAC,GAAS,KAC3C,aAAA,CACA,UAAA,CACA,WAAA,CACA,iBAAA,CACA,gBAAA,CACA,cAAA,CACA,YCrBF,CAAC,GAAS,UACR,gBAGF,CAAC,GAAS,YACR,iBAGF,CAAC,GAAS,MAAM,QAChB,CAAC,GAAS,MAAM,OACd,iBAAA,CACA,QAAA,CACA,aAAA,CACA,OAAA,CACA,QAAA,CACA,kBAAA,CACA,wBAAA,CACA,QAAS,GAGX,CAAC,GAAS,MAAM,CAAC,GAAS,SAAS,QACjC,QAAA,CACA,2BAAA,CACA,sBAAA,CACA,iBAGF,CAAC,GAAS,MAAM,CAAC,GAAS,WAAW,QACnC,WAAA,CACA,wBAAA,CACA,sBAAA,CACA,iBAGF,CAAC,GAAS,MAAM,CAAC,GAAS,SAAS,OACjC,QAAA,CACA,wBAAA,CACA,sBAAA,CACA,iBAGF,CAAC,GAAS,MAAM,CAAC,GAAS,WAAW,OACnC,WAAA,CACA,qBAAA,CACA,sBAAA,CACA,iBAGF,CAAC,GAAS,MAAM,CAAC,GAAS,WAAW,QACrC,CAAC,GAAS,MAAM,CAAC,GAAS,WAAW,OACnC,SAGF,CAAC,GAAS,MAAM,CAAC,GAAS,WAAW,QACnC,SAEF,CAAC,GAAS,MAAM,CAAC,GAAS,WAAW,OACnC,SAGF,CAAC,GAAS,MAAM,CAAC,GAAS,YAAY,QACtC,CAAC,GAAS,MAAM,CAAC,GAAS,YAAY,OACpC,SAAA,CACA,SAGF,CAAC,GAAS,MAAM,CAAC,GAAS,YAAY,QACpC,UAGF,CAAC,GAAS,MAAM,CAAC,GAAS,YAAY,OACpC,UAGF,CAAC,GAAS,MAAM,CAAC,GAAS,aAAa,CAAC,GAAS,MAAM,CAAC,GAAS,WAAW,QAC1E,SAAA,CACA,OAAA,CACA,0BAAA,CACA,0BAAA,CACA,gBAGF,CAAC,GAAS,MAAM,CAAC,GAAS,aAAa,CAAC,GAAS,MAAM,CAAC,GAAS,WAAW,OAC1E,SAAA,CACA,OAAA,CACA,uBAAA,CACA,0BAAA,CACA,gBAGF,CAAC,GAAS,MAAM,CAAC,GAAS,aAAa,CAAC,GAAS,MAAM,CAAC,GAAS,YAC/D,iBAGF,CAAC,GAAS,MAAM,CAAC,GAAS,aAAa,CAAC,GAAS,MAAM,CAAC,GAAS,YAAY,QAC3E,UAAA,CACA,OAAA,CACA,yBAAA,CACA,0BAAA,CACA,gBAGF,CAAC,GAAS,MAAM,CAAC,GAAS,aAAa,CAAC,GAAS,MAAM,CAAC,GAAS,YAAY,OAC3E,UAAA,CACA,OAAA,CACA,sBAAA,CACA,0BAAA,CACA,gBAGF,CAAC,GAAS,MAAM,CAAC,GAAS,aAAa,CAAC,GAAS,MAAM,CAAC,GAAS,aAC/D,kBC/GF,CAAC,GAAS,oBAAqB,EAAG,GAAS,gBACzC,aADF,CAAC,GAAS,oBAAqB,EAAG,GAAS,eAGzC,EAAC,GAAS,WACR,OAJJ,CAAC,GAAS,oBAAqB,EAAG,GAAS,eAOzC,EAAC,GAAS,QAAS,EAAG,GAAS,gBAC7B,YAAA,CACA,mBAAA,CACA,YAVJ,CAAC,GAAS,oBAAqB,EAAG,GAAS,eAazC,EAAC,GAAS,eACR,eAAA,CACA,eAAA,CACA,kBAhBJ,CAAC,GAAS,oBAAqB,EAAG,GAAS,eAazC,EAAC,GAAS,cAKR,EAAG,GAAS,gBACV,iBAAA,CACA,UAAA,CAAa,WAAA,CACb,aAAA,CACA,KAAA,CAAQ,OAKd,CAAC,GAAS,iBACR,sBAAA,CACA,sBAFF,CAAC,GAAS,gBAIR,EAAC,GAAS,KACR,aAAA,CACA,eANJ,CAAC,GAAS,gBASR,EAAC,GAAS,IAAI,CAAC,GAAS,QAT1B,CAAC,GAAS,gBASyB,EAAC,GAAS,IAAI,CAAC,GAAS,OAAO,OAC9D,yBAVJ,CAAC,GAAS,gBASR,EAAC,GAAS,IAAI,CAAC,GAAS,OAGtB,QAZJ,CAAC,GAAS,gBASyB,EAAC,GAAS,IAAI,CAAC,GAAS,OAAO,MAG9D,QAZJ,CAAC,GAAS,gBASR,EAAC,GAAS,IAAI,CAAC,GAAS,OAGd,OAAO,GAZnB,CAAC,GAAS,gBASyB,EAAC,GAAS,IAAI,CAAC,GAAS,OAAO,MAGtD,OAAO,GACb,WAAA,CACA,yBAKN,CAAC,GAAS,eACR,sBAAA,CACA,sBChDF,CAAC,GAAS,WAAY,CAAC,GAAS,gBAC9B,cAGF,CAAC,GAAS,YACR,gBCLF,CAAC,GAAS,WACR,iBAAA,CACA,SAAA,CACA,WAAA,CACA,OAAA,CACA,SAAA,CRJA,UAAA,CAEA,wBAAA,CACA,OQKF,CAAC,GAAS,aACR,QAAA,CACA,UAAA,CACA,QAAA,CACA,UAAA,CACA,UAAA,CACA,WAGF,CAAC,GAAS,iBACR,iBAAA,CACA,qBAAA,CACA,qBAAA,CACA,+BAAA,CACA,SAAA,CACA,YAIF,CAAC,GAAS,YAAa,EAAC,GAAS,iBAC/B,UAAA,CACA,WAGF,CAAC,GAAS,UAAU,OAAQ,CAAC,GAAS,UAAU,CAAC,GAAS,QACxD,qBAAA,CRjCA,UAAA,CAEA,wBAAA,CACA,OQmCF,CAAC,GAAS,QACR,kBCxCF,CAAC,GAAS,OACR,sBAAA,CACA,sBAAA,CACA,sBCHF,CAAC,GAAS,YACR,iBAAA,CV+BA,+CAAA,CACA,4CAAA,CACA,wCU7BF,CAAC,GAAS,WAAW,CAAC,GAAS,OAC7B,eAKF,CAAC,GAAS,WAAY,EAAC,GAAS,OAChC,CAAC,GAAS,WAAY,EAAC,GAAS,MAAM,OACpC,iBAAA,CACA,aAAA,CACA,OAAA,CACA,QAAA,CACA,wBAAA,CACA,mBAGF,CAAC,GAAS,WAAY,EAAC,GAAS,OAC9B,kBAGF,CAAC,GAAS,WAAY,EAAC,GAAS,MAAM,OACpC,iBAAA,CACA,QAAS,GAGX,CAAC,GAAS,WAAW,CAAC,GAAS,SVmB7B,OAAQ,2DAAR,CACA,sBAAA,CAlBA,+CAAA,CACA,4CAAA,CACA,uCAAA,CUAA,KAAA,CACA,MAAA,CACA,eAAA,CACA,wBAAA,CACA,kCAEA,CAVD,GAAS,WAAW,CAAC,GAAS,QAU5B,CAAC,GAAS,QACT,eAAA,CACA,cAEA,CAdH,GAAS,WAAW,CAAC,GAAS,QAU5B,CAAC,GAAS,OAIP,EAAG,GAAS,OACZ,QAAA,CACA,iBAAA,CACA,kBAAA,CACA,2BAAA,CACA,oCAAA,CACA,UAEA,CAtBL,GAAS,WAAW,CAAC,GAAS,QAU5B,CAAC,GAAS,OAIP,EAAG,GAAS,MAQX,OACC,OAAA,CACA,iBAAA,CACA,kBAAA,CACA,yBAIJ,CA9BH,GAAS,WAAW,CAAC,GAAS,QAU5B,CAAC,GAAS,OAoBR,CAAC,GAAS,OAAS,kBACpB,CA/BH,GAAS,WAAW,CAAC,GAAS,QAU5B,CAAC,GAAS,OAqBR,CAAC,GAAS,MAAO,EAAG,GAAS,OAAS,UAEvC,CAjCH,GAAS,WAAW,CAAC,GAAS,QAU5B,CAAC,GAAS,OAuBR,CAAC,GAAS,KAAO,iBAClB,CAlCH,GAAS,WAAW,CAAC,GAAS,QAU5B,CAAC,GAAS,OAwBR,CAAC,GAAS,IAAK,EAAG,GAAS,OAAS,UAAA,CAAa,UChEtD,CAAC,GAAS,YACR,QAAA,CAAW,SAAA,CAAY,QAAA,CACvB,eAAA,CACA,YAGF,GAAG,CAAC,GAAS,YACX,cAAA,CACA,KAAA,CAAQ,OAGV,CAAC,GAAS,aXVR,SAAA,CAEA,uBAAA,CACA,MAAA,CWSA,cAAA,CACA,MAAA,CAAS,KAAA,CACT,UAAA,CAAa,WAAA,CACb,gBAGF,CAAC,GAAS,YAAY,CAAC,GAAS,IXlB9B,UAAA,CAEA,wBAAA,CACA,OWmBF,CAAC,GAAS,aACR,YAGF,CAAC,GAAS,QXKR,+CAAA,CACA,4CAAA,CACA,uCAAA,CAeA,OAAQ,2DAAR,CACA,sBAAA,CWnBA,eAAA,CACA,cAAA,CACA,KAAA,CAAQ,MAAA,CACR,SAAA,CACA,UAAW,SAAX,CACA,yDAGF,CAAC,GAAS,OAAO,CAAC,GAAS,IACzB,UAAW,QAAX,CACA,UAGF,CAAC,GAAS,aACR,gBAAA,CACA,+BAAA,CACA,kBAGF,CAAC,GAAS,YAAa,EAAC,GAAS,OAC/B,iBAAA,CACA,OAAA,CACA,KAAA,CACA,WAAA,CACA,UAAA,CACA,iBAAA,CACA,eAPF,CAAC,GAAS,YAAa,EAAC,GAAS,MAS/B,GACE,cAIJ,CAAC,GAAS,MAAM,MAAO,GACrB,cAGF,CAAC,GAAS,YAAa,EAAC,GAAS,OAC/B,gBAAA,CACA,cAAA,CACA,gBAAA,CACA,iCAAA,CACA,mBAGF,CAAC,GAAS,OAAQ,EAAC,GAAS,gBAC1B,cAGF,CAAC,GAAS,MACR,aAAA,CACA,qBAAA,CACA,6BAIF,CAAC,GAAS,YAAa,EAAC,GAAS,OAC/B,iBAAA,CACA,KAAA,CAAQ,MAAA,CACR,WAAA,CACA,SAAA,CACA,YAGF,CAAC,GAAS,OAAQ,QAChB,UAAA,CACA,YAOF,CAAC,GAAS,YAAa,EAAC,GAAS,SAC/B,qBAGF,CAAC,GAAS,OACR,EAAC,GAAS,IAAI,OACZ,qBAFJ,CAAC,GAAS,OAKR,EAAC,GAAS,IAAI,OACZ,qBAIJ,CAAC,GAAS,YAAa,EAAC,GAAS,KAAM,CAAC,GAAS,KAAM,EAAC,GAAS,KAC/D,qBAGF,CAAC,GAAS,KAAM,EAAC,GAAS,IAAI,CAAC,GAAS,SACtC,yBAKF,CAAC,GAAS,IAAK,EAAC,GAAS,YAAa,EAAC,GAAS,OAC9C,iBAAA,CACA,UAAA,CACA,UAGF,CAAC,GAAS,IAAK,EAAC,GAAS,YAAa,EAAC,GAAS,OAC9C,SAAA,CACA,QAGF,CAAC,GAAS,IAAK,EAAC,GAAS,YAAa,EAAC,GAAS,OAC9C,aAAA,CACA,iBC7IF,CAAC,GAAS,SACR,iBAAA,CACA,WAAA,CZDA,UAAA,CAEA,wBAAA,CACA,MAAA,CYAA,eAGF,CAAC,GAAS,eACR,cAAA,CACA,qBAAA,CACA,WAAA,CACA,eAAA,CACA,uBAAA,CACA,iBAAA,CACA,mBAOF,CAAC,GAAS,eZWR,uBAAA,CACA,oBAAA,CACA,gBYTF,CAAC,GAAS,eACR,iBAAA,CACA,OAAA,CACA,QAAA,CACA,aAAA,CACA,uBAGF,CAAC,GAAS,iBACR,yBAGF,CAAC,GAAS,iBACR,sBAGF,CAAC,GAAS,iBACR,uBAGF,CAAC,GAAS,iBACR,wBAGF,CAAC,GAAS,YAAa,CAAC,GAAS,YAC/B,kBAGF,CAAC,GAAS,YAAa,CAAC,GAAS,YAC/B,iBAGF,CAAC,GAAS,UAAW,EAAC,GAAS,eAC7B,KAAA,CACA,QAAA,CACA,gBAAA,CACA,yBAAA,CACA,eAAA,CACA,6BAAA,CACA,+BAGF,CAAC,GAAS,WAAY,EAAC,GAAS,eAC9B,KAAA,CACA,SAAA,CACA,yBAAA,CACA,eAAA,CACA,6BAAA,CACA,+BAGF,CAAC,GAAS,WAAY,EAAC,GAAS,eAC9B,KAAA,CACA,UAAA,CACA,yBAAA,CACA,eAAA,CACA,6BAAA,CACA,+BAGF,CAAC,GAAS,UAAW,EAAC,GAAS,eAC7B,QAAA,CACA,QAAA,CACA,gBAAA,CACA,sBAAA,CACA,kBAAA,CACA,6BAAA,CACA,+BAGF,CAAC,GAAS,WAAY,EAAC,GAAS,eAC9B,QAAA,CACA,SAAA,CACA,sBAAA,CACA,kBAAA,CACA,6BAAA,CACA,+BAGF,CAAC,GAAS,WAAY,EAAC,GAAS,eAC9B,QAAA,CACA,UAAA,CACA,sBAAA,CACA,kBAAA,CACA,6BAAA,CACA,+BAGF,CAAC,GAAS,UAAW,EAAC,GAAS,eAC7B,OAAA,CACA,OAAA,CACA,eAAA,CACA,uBAAA,CACA,iBAAA,CACA,4BAAA,CACA,gCAGF,CAAC,GAAS,UAAW,EAAC,GAAS,eAC7B,MAAA,CACA,OAAA,CACA,eAAA,CACA,wBAAA,CACA,gBAAA,CACA,4BAAA,CACA,gCClIF,CAAC,GAAS,UACR,oBAAA,CACA,iBAAA,CACA,YAGF,CAAC,GAAS,SAAU,EAAC,GAAS,eAC5B,oBAAA,CACA,WAAA,CACA,WAAA,CACA,gBAAA,CACA,qBAAA,CACA,gBAIF,CAAC,GAAS,SAAU,EAAC,GAAS,MAC5B,oBAAA,CACA,eAAA,CACA,kBAAA,CACA,cAAA,CACA,UAAA,CACA,cAGF,CAAC,GAAS,KACR,aAAA,CACA,OAAA,CACA,WAAA,CACA,wBAAA,CbSA,iCAAA,CACA,0BcvCF,CAAC,GAAS,cACR,iBAAA,CACA,qBAAA,CACA,WAAA,CACA,cAAA,CACA,gBAAA,CACA,kBAAA,CACA,oBAAA,CACA,wDAAA,CACA,SAAA,CACA,sBAGF,CAAC,GAAS,aAAa,CAAC,GAAS,IAC/B,UAGF,CAAC,GAAS,sBACR,wBAAA,CACA,qBAGF,CAAC,GAAS,mBACR,wBAAA,CACA,qBAGF,CAAC,GAAS,sBACR,wBAAA,CACA,qBAGF,CAAC,GAAS,oBACR,wBAAA,CACA,qBAGF,CAAC,GAAS,aAAa,CAAC,GAAS,WAC/B,mBAGF,CAAC,GAAS,aAAc,EAAC,GAAS,KAChC,eAGF,CAAC,GAAS,oBdSR,oBAAA,CACA,wBAAA,CACA,oBAAA,CACA,qBAAA,CACA,gBAAA,CACA,iBAAA,CACA,oBAAA,CACA,YAAA,CcdA,oBAAA,CACA,cAAA,CACA,sBAAA,CACA,iBAAA,CACA,kBAAA,CACA,cAGF,CAAC,GAAS,mBAAoB,GAC5B,yBAAA,CACA,eAGF,CAAC,GAAS,aAAc,EAAC,GAAS,UAChC,iBAGF,CAAC,GAAS,aAAc,EAAC,GAAS,SAAU,EAAC,GAAS,MACpD,eAGF,CAAC,GAAS,aAAc,GAAG,CAAC,GAAS,aAAc,EAAC,GAAS,SAAU,EAAC,GAAS,MAC/E,cAGF,CAAC,GAAS,aAAc,EAAC,GAAS,SAAU,EAAC,GAAS,eACpD,qBAGF,CAAC,GAAS,aAAc,EAAC,GAAS,SAAU,EAAC,GAAS,cAAe,EAAC,GAAS,KAC7E,yBAGF,CAAC,GAAS,qBAAsB,GAAG,CAAC,GAAS,qBAAsB,EAAC,GAAS,SAAU,EAAC,GAAS,MAC/F,cAGF,CAAC,GAAS,qBAAsB,EAAC,GAAS,SAAU,EAAC,GAAS,eAC5D,qBAGF,CAAC,GAAS,qBAAsB,EAAC,GAAS,SAAU,EAAC,GAAS,cAAe,EAAC,GAAS,KACrF,yBAGF,CAAC,GAAS,kBAAmB,GAAG,CAAC,GAAS,kBAAmB,EAAC,GAAS,SAAU,EAAC,GAAS,MACzF,cAGF,CAAC,GAAS,kBAAmB,EAAC,GAAS,SAAU,EAAC,GAAS,eACzD,qBAGF,CAAC,GAAS,kBAAmB,EAAC,GAAS,SAAU,EAAC,GAAS,cAAe,EAAC,GAAS,KAClF,yBAGF,CAAC,GAAS,qBAAsB,GAAG,CAAC,GAAS,qBAAsB,EAAC,GAAS,SAAU,EAAC,GAAS,MAC/F,cAGF,CAAC,GAAS,qBAAsB,EAAC,GAAS,SAAU,EAAC,GAAS,eAC5D,qBAGF,CAAC,GAAS,qBAAsB,EAAC,GAAS,SAAU,EAAC,GAAS,cAAe,EAAC,GAAS,KACrF,yBAGF,CAAC,GAAS,mBAAoB,GAAG,CAAC,GAAS,mBAAoB,EAAC,GAAS,SAAU,EAAC,GAAS,MAC3F,cAGF,CAAC,GAAS,mBAAoB,EAAC,GAAS,SAAU,EAAC,GAAS,eAC1D,qBAGF,CAAC,GAAS,mBAAoB,EAAC,GAAS,SAAU,EAAC,GAAS,cAAe,EAAC,GAAS,KACnF,yBAGF,CAAC,GAAS,aAAc,EAAC,GAAS,OAChC,iBAAA,CACA,OAAA,CACA,SAAA,CACA,cAAA,CACA,gBAAA,CACA,gBAAA,CACA,aAAA,CACA,eCxIF,CAAC,GAAS,YACR,kBAGF,IAAK,EAAC,GAAS,iBAAkB,CAAC,GAAS,SACzC,kBAGF,CAAC,GAAS,SACR,SAAA,CAAY,WAGd,CAAC,GAAS,eAAe,CAAC,GAAS,YACjC,gBCbF,CAAC,GAAS,KACR,wBAAA,CACA,4DAAA,CACA,iBAAA,CACA,4CAAA,CACA,gBAAA,ChBsCA,oBAAA,CACA,eAAA,CACA,OAAA,CAbA,uBAAA,CACA,oBAAA,CACA,gBgBvBA,CAXD,GAAS,IAWP,OAAQ,CAXV,GAAS,IAWE,QACR,gBAAA,CACA,aAAA,CACA,qBAGF,CAjBD,GAAS,IAiBP,OACC,gBAAA,CACA,aAAA,CACA,qBAGF,CAvBD,GAAS,IAuBP,CAAC,GAAS,SAAU,QAAQ,CAvB9B,GAAS,IAuBsB,CAAC,GAAS,SAAS,MAAO,QACtD,cAAA,ChBQF,uBAAA,CACA,oBAAA,CACA,eAAA,CAjCA,UAAA,CAEA,wBAAA,CACA,OgByBA,CA7BD,GAAS,IA6BP,CAAC,GAAS,QACX,CA9BD,GAAS,IA8BP,CAAC,GAAS,OAAO,OAClB,CA/BD,GAAS,IA+BP,CAAC,GAAS,OAAO,OAClB,CAhCD,GAAS,IAgCP,CAAC,GAAS,OAAO,QhBAlB,uBAAA,CACA,oBAAA,CACA,eAAA,CgBAE,kBAAA,CACA,WAAA,CACA,yBAGF,CAvCD,GAAS,IAuCP,CAAC,GAAS,OAAQ,QAAQ,CAvC5B,GAAS,IAuCoB,CAAC,GAAS,OAAO,MAAO,QACpD,CAxCD,GAAS,IAwCP,CAAC,GAAS,OAAQ,GAAG,CAxCvB,GAAS,IAwCe,CAAC,GAAS,OAAO,MAAO,GAC7C,YAGF,CA5CD,GAAS,IA4CP,MAAO,EAAC,GAAS,OAChB,yBAGF,CAhDD,GAAS,IAgDP,CAAC,GAAS,OAAQ,EAAC,GAAS,OAAQ,CAhDtC,GAAS,IAgD8B,CAAC,GAAS,OAAO,MAAO,EAAC,GAAS,OACtE,uBAIJ,CAAC,GAAS,IAAK,QACb,eAAA,CACA,cAAA,CACA,gBAAA,CACA,iBAAA,CACA,cAAA,CACA,aAAA,CACA,iBAAA,CAGA,gBAAA,CACA,wBACA,CAZD,GAAS,IAAK,OAYZ,mBACC,QAAA,CACA,UAIJ,CAAC,GAAS,IAAK,GACb,yBAGF,CAAC,GAAS,QAAQ,CAAC,GAAS,cAC1B,eAGF,CAAC,GAAS,SACR,WAAA,CACA,4BAAA,CACA,wBAAA,CACA,yBAEA,CAND,GAAS,QAMP,OAAQ,CANV,GAAS,QAME,OACR,wBAAA,CACA,yBAGF,CAXD,GAAS,QAWP,CAAC,GAAS,SAAU,QAAQ,CAX9B,GAAS,QAWsB,CAAC,GAAS,SAAS,MAAO,QACtD,cAAA,ChB3DF,uBAAA,CACA,oBAAA,CACA,eAAA,CAjCA,UAAA,CAEA,wBAAA,CACA,OgB4FA,CAjBD,GAAS,QAiBP,CAAC,GAAS,QAAS,CAjBrB,GAAS,QAiBa,CAAC,GAAS,OAAO,OAAQ,CAjB/C,GAAS,QAiBuC,IAAI,eAAqB,QACtE,wBAAA,ChBjEF,uBAAA,CACA,oBAAA,CACA,gBgBoEF,CAAC,GAAS,QAAS,QAAQ,CAAC,GAAS,QAAS,OAAO,GACnD,WAAA,CACA,yBAGF,CAAC,GAAS,IAAK,EAAC,GAAS,KACvB,iBAAA,CACA,mBAAA,CACA,cAGF,CAAC,GAAS,UAAW,QACnB,gBAAA,CACA,cAAA,CACA,mBAIF,CAAC,GAAS,UAAW,GACnB,eAGF,CAAC,GAAS,UAAW,QACnB,eAAA,CACA,cAAA,CACA,oBAGF,CAAC,GAAS,UAAW,GACnB,gBAAA,CACA,kBAAA,CACA,kBAGF,CAAC,GAAS,IAAK,EAAC,GAAS,OACvB,cAAA,CACA,cAGF,CAAC,GAAS,UAAW,EAAC,GAAS,OAC7B,cAAA,CACA,cAGF,CAAC,GAAS,OhBvGR,oBAAA,CACA,eAAA,CACA,OAAA,CgBuGA,OAAA,CAAU,QAAA,CACV,kBAAA,CACA,4BAAA,CACA,kCAAA,CACA,iCAAA,CACA,QAAS,GAGX,CAAC,GAAS,SAAU,EAAC,GAAS,OAC5B,sBAGF,CAAC,GAAS,MAAM,CAAC,GAAS,IACxB,+BAAA,CACA,aAGF,CAAC,GAAS,UACR,QAAA,CACA,sBAAA,ChBvIA,uBAAA,CACA,oBAAA,CACA,eAAA,CgBwIA,YAGF,CAAC,GAAS,SAAS,OAAQ,CAAC,GAAS,SAAS,CAAC,GAAS,QAAS,CAAC,GAAS,SAAS,OAAQ,CAAC,GAAS,SAAS,QAC7G,QAAA,CACA,kBAAA,CACA,WAAA,ChBhJA,uBAAA,CACA,oBAAA,CACA,gBgBkJF,CAAC,GAAS,aAAc,EAAC,GAAS,KAChC,kBAKF,CAAC,GAAS,IAAK,EAAC,GAAS,IAAK,QAC5B,cC3LF,CAAC,GAAS,QAAS,EAAC,GAAS,WAC3B,QAAA,CACA,cAWF,CAAC,GAAS,UAAW,EAAC,GAAS,KAC7B,gBAAA,CACA,QAAA,CAEA,gBAcF,CAAC,GAAS,UAAU,IAAI,eACtB,6BAAA,CACA,cAAA,CACA,gBAGF,CAAC,GAAS,WAGR,gBAYF,CAAC,GAAS,UAAW,EAAC,GAAS,IAAI,CAAC,GAAS,kBAC3C,SAKF,CAAC,GAAS,IAAK,EAAC,GAAS,UAAW,EAAC,GAAS,KAC5C,aAAA,CACA,iBAGF,CAAC,GAAS,IAAK,EAAC,GAAS,UAAW,EAAC,GAAS,OAC5C,eAGF,CAAC,GAAS,IAAK,EAAC,GAAS,UAAU,IAAI,eACrC,gBAAA,CACA,8BAAA,CACA,iBAAA,CACA,iBCvEF,CAAC,GAAS,UACR,eAGF,CAAC,CAAC,GAAS,YACT,gBAAA,CACA,wBAAA,ClB0BA,uBAAA,CACA,oBAAA,CACA,eAAA,CkBzBA,sBAAA,CACA,iBAAA,CACA,gBAGF,CAAC,GAAS,QAAS,EAAC,CAAC,GAAS,YAC5B,aAAA,CACA,cAAA,CACA,gBAAA,CACA,cAGF,CAAC,GAAS,SAAS,MAAO,EAAC,CAAC,GAAS,YAAa,CAAC,GAAS,SAAS,CAAC,GAAS,MAAO,EAAC,CAAC,GAAS,YAC/F,wBAAA,ClBUA,uBAAA,CACA,oBAAA,CACA,gBkBRF,CAAC,GAAS,SAAS,CAAC,GAAS,SAAU,EAAC,GAAS,OAAQ,CAAC,GAAS,SAAS,CAAC,GAAS,SAAU,EAAC,CAAC,GAAS,YACzG,cAGF,CAAC,GAAS,SAAU,EAAC,GAAS,OAC5B,sBAKF,CAAC,GAAS,IAAK,EAAC,GAAS,UACvB,aAAA,CACA,iBAGF,CAAC,GAAS,IAAK,EAAC,CAAC,GAAS,YACxB,iBC1CF,CAAC,GAAS,UACR,iBAAA,CnB0CA,oBAAA,CACA,eAAA,CACA,OAAA,CAbA,uBAAA,CACA,oBAAA,CACA,eAAA,CmB7BA,aAGF,CAAC,GAAS,SAAU,OAClB,wBAAA,CACA,0BAAA,CACA,YAGF,CAAC,GAAS,SAAS,CAAC,GAAS,SAAU,OACrC,cAOF,CAAC,GAAS,SAAU,EAAC,GAAS,KAC5B,wBAAA,CACA,aAAA,CAEA,SAGF,CAAC,GAAS,SAAU,QAClB,iBAAA,CACA,iBAGF,CAAC,GAAS,SAAS,CAAC,GAAS,SAAU,EAAC,GAAS,IAAK,QACpD,cAAA,CnBHA,uBAAA,CACA,oBAAA,CACA,eAAA,CAjCA,UAAA,CAEA,wBAAA,CACA,OmBoCF,CAAC,GAAS,SAAU,EAAC,GAAS,QAC5B,iBAAA,CACA,SAAA,CACA,OAAA,CACA,gBAAA,CACA,eAAA,CACA,cAAA,CACA,UAAA,CACA,WAAA,CACA,iBAAA,CACA,eAGF,CAAC,GAAS,SAAS,CAAC,GAAS,WAAY,OACvC,mBAGF,CAAC,GAAS,SAAS,CAAC,GAAS,SAAU,EAAC,GAAS,QAC/C,WAGF,CAAC,GAAS,SAAU,EAAC,GAAS,OAAO,CAAC,GAAS,WAC7C,cAGF,CAAC,GAAS,SAAU,EAAC,GAAS,OAAO,CAAC,GAAS,aAC7C,cAGF,CAAC,GAAS,KAAK,CAAC,GAAS,eACvB,YAAA,CACA,YAAA,CACA,iBAHF,CAAC,GAAS,KAAK,CAAC,GAAS,cAKvB,EAAC,GAAS,WACR,uBAAA,CACA,eAPJ,CAAC,GAAS,KAAK,CAAC,GAAS,cAUvB,EAAC,GAAS,eACR,UAXJ,CAAC,GAAS,KAAK,CAAC,GAAS,cAcvB,EAAC,GAAS,MACR,eAfJ,CAAC,GAAS,KAAK,CAAC,GAAS,cAkBvB,EAAC,GAAS,gBAlBZ,CAAC,GAAS,KAAK,CAAC,GAAS,cAkBI,EAAC,GAAS,eAAgB,GACnD,eAnBJ,CAAC,GAAS,KAAK,CAAC,GAAS,cAsBvB,EAAC,GAAS,KAAM,GACd,eC5FJ,CAAC,GAAS,SAAU,GAClB,wBAAA,CACA,UAAA,CAAa,YCFf,CAAC,GAAS,YAAa,EAAC,GAAS,KAC/B,kBAGF,CAAC,GAAS,kBACR,WAQF,CAAC,GAAS,YAAa,EAAC,GAAS,SAC/B,iBAAA,CACA,aAAA,CACA,iBAAA,CACA,QAAA,CACA,OAAA,CACA,iBAAA,CACA,cAAA,CACA,eAAA,CACA,UAAA,CACA,UAAA,CACA,gBAGF,CAAC,GAAS,YAAY,CAAC,GAAS,UAAW,EAAC,GAAS,SACnD,iBAAA,CACA,eAAA,CACA,WAmBF,CAAC,GAAS,IAAK,EAAC,GAAS,aACvB,cAGF,CAAC,GAAS,IAAK,EAAC,GAAS,YAAa,EAAC,GAAS,SAC9C,aAAA,CACA,eAAA,CACA,iBAGF,CAAC,GAAS,IAAK,EAAC,GAAS,YAAY,CAAC,GAAS,UAAW,EAAC,GAAS,SAClE,aAAA,CACA,eAAA,CACA,iBAGF,CAAC,GAAS,IAAK,EAAC,GAAS,YAAa,EAAC,GAAS,MAC9C,gBAAA,CACA,iBAAA,CACA,cCpEF,CAAC,GAAS,aACR,iBAAA,CACA,WAAA,CACA,aAGF,CAAC,GAAS,gBACR,iBAAA,CACA,KAAA,CAAQ,MAAA,CACR,SAAA,CACA,WAAA,CACA,wBAAA,CACA,gBAAA,CACA,gBAGF,CAAC,GAAS,qBACR,WAGF,CAAC,GAAS,sBAAuB,CAAC,GAAS,sBACzC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,KAAA,CACA,OAGF,CAAC,GAAS,sBACR,OAAQ,yEAAwE,uBAAuB,YAAvG,CACA,WAAY,6GAAZ,CACA,WAAY,qDAGd,CAAC,GAAS,sBACR,OAAQ,yEAAwE,yBAAyB,UAAzG,CACA,WAAY,6GAAZ,CACA,WAAY,gDAGd,CAAC,GAAS,uBACR,eAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CACA,oBAAA,CACA,sBAAA,CACA,kBAGF,CAAC,GAAS,uBACR,iBAAA,CACA,UAAA,CACA,WAAA,CACA,sBAAA,CACA,kBAGF,CAAC,GAAS,eACR,iBAAA,CACA,KAAA,CAAQ,OAAA,CACR,UAAA,CACA,WAAA,CACA,wBAAA,CACA,iBAGF,CAAC,GAAS,sBACR,eAAA,CACA,iBAAA,CACA,KAAA,CACA,SAAA,CACA,UAAA,CACA,sBAAA,CACA,gBAAA,CACA,UAAA,CACA,YC5EF,CAAC,GAAS,MvB2CR,oBAAA,CACA,eAAA,CACA,OAAA,CuB3CA,WAAA,CACA,kBAAA,CACA,kBAGF,CAAC,GAAS,KAAM,EAAC,GAAS,KACxB,oBAAA,CACA,kBAGF,CAAC,GAAS,KAAM,EAAC,GAAS,WACxB,qBAGF,CAAC,GAAS,WvB2BR,oBAAA,CACA,eAAA,CACA,OAAA,CuB3BA,cAAA,CACA,aAAA,CACA,iBAAA,CACA,yBAGF,CAAC,GAAS,UAAU,OAClB,0BAGF,CAAC,GAAS,UAAU,OAClB,kBAAA,CACA,YAGF,CAAC,GAAS,KAAM,EAAC,GAAS,SACxB,cAAA,CACA,kBAGF,CAAC,GAAS,SAAU,EAAC,GAAS,WAC5B,WAKF,CAAC,GAAS,IAAK,EAAC,GAAS,MACvB,cC7CF,CAAC,GAAS,UACR,uBAIF,CAAC,GAAS,SAAU,EAAG,GAAS,gBAC9B,iBAGF,CAAC,GAAS,gBACR,eAAA,CACA,oBCXF,CAAC,GAAS,YzB2CR,oBAAA,CACA,eAAA,CACA,QyBzCF,CAAC,GAAS,iBACR,kBCLF,CAAC,GAAS,kB1B2CR,oBAAA,CACA,eAAA,CACA,Q0BzCF,CAAC,GAAS,kBACR,qBAGF,CAAC,GAAS,iBAAiB,CAAC,GAAS,MACnC,iBAGF,CAAC,GAAS,aACR,mBAGF,CAAC,GAAS,eAAgB,EAAC,GAAS,aAClC,mBAKF,CAAC,GAAS,IAAK,EAAC,GAAS,aACvB,gBAAA,CACA,cAGF,CAAC,GAAS,IAAK,EAAC,GAAS,kBACvB,qBAGF,CAAC,GAAS,IAAK,EAAC,GAAS,iBAAiB,CAAC,GAAS,MAClD,gBChCF,CAAC,GAAS,QACR,sBAAA,CACA,UAAA,CAAa,YCFf,CAAC,GAAS,S5B2CR,oBAAA,CACA,eAAA,CACA,OAAA,C4B3CA,4CAAA,CACA,eAAA,CACA,qBAJF,CAAC,GAAS,QAMR,KACE,aAAA,CACA,WARJ,CAAC,GAAS,QAMR,IAIE,QACE,iBAAA,CACA,OAAA,CAAU,SAAA,CACV,cAAA,CACA,eAAA,CACA,aAfN,CAAC,GAAS,QAMR,IAYE,OAAM,OACJ,0BAKN,CAAC,GAAS,QAAQ,CAAC,GAAS,SAC1B,KACE,kBAFJ,CAAC,GAAS,QAAQ,CAAC,GAAS,SAK1B,QACE,cAIJ,CAAC,GAAS,QAAQ,CAAC,GAAS,SAC1B,kBAAA,CACA,qBAFF,CAAC,GAAS,QAAQ,CAAC,GAAS,QAI1B,KACE,cAIJ,CAAC,GAAS,QAAQ,CAAC,GAAS,SAC1B,kBAAA,CACA,qBAFF,CAAC,GAAS,QAAQ,CAAC,GAAS,QAI1B,KACE,cAIJ,CAAC,GAAS,QAAQ,CAAC,GAAS,OAC1B,kBAAA,CACA,qBAFF,CAAC,GAAS,QAAQ,CAAC,GAAS,MAI1B,KACE,cAMJ,CAAC,GAAS,IAAK,EAAC,GAAS,QACvB,KACE,gBAAA,CACA,cClEJ,CAAC,GAAS,O7B2CR,oBAAA,CACA,eAAA,CACA,OAAA,C6B3CA,4CAAA,CACA,gBAGF,CAAC,GAAS,MAAM,CAAC,GAAS,YACxB,cAGF,CAAC,GAAS,MAAM,CAAC,GAAS,UACxB,WAGF,CAAC,GAAS,MAAM,CAAC,GAAS,WACxB,qBAGF,CAAC,GAAS,MAAM,CAAC,GAAS,SACxB,cAGF,CAAC,GAAS,MAAM,CAAC,GAAS,SACxB,cAGF,CAAC,GAAS,MAAM,CAAC,GAAS,OACxB,cAKF,CAAC,GAAS,IAAK,EAAC,GAAS,OACvB,gBAAA,CACA,cClCF,CAAC,GAAS,SACR,yBAGF,CAAC,GAAS,QAAS,EAAC,GAAS,SAC3B,wBAAA,CACA,sBAAA,C9B0BA,uBAAA,CACA,oBAAA,CACA,eAAA,C8BzBA,YAGF,CAAC,GAAS,QAAS,EAAC,GAAS,QAAS,OAAO,MAC3C,cAGF,CAAC,GAAS,QAAS,EAAC,GAAS,OAC3B,yBAGF,CAAC,GAAS,QAAS,EAAC,GAAS,OAC3B,EAAC,GAAS,OAD0B,CAAC,GAAS,QAAS,EAAC,GAAS,QAAQ,MACzE,EAAC,GAAS,OACR,yBAIJ,CAAC,GAAS,QAAS,EAAC,GAAS,QAAQ,OAAQ,CAAC,GAAS,QAAS,EAAC,GAAS,QAAQ,CAAC,GAAS,QAAS,CAAC,GAAS,QAAS,EAAC,GAAS,QAAQ,OACxI,oBAAA,CACA,gBAAA,CACA,WAAA,C9BGA,uBAAA,CACA,oBAAA,CACA,gB8BDF,CAAC,GAAS,QAAS,EAAC,GAAS,QAAQ,CAAC,GAAS,QAC7C,kBAAA,CACA,cCnCF,GAAG,CAAC,GAAS,QAAQ,CAAC,GAAS,QAC7B,yBAAA,CACA,cAGF,CAAC,GAAS,QAAS,QACjB,cAGF,CAAC,GAAS,QAAQ,CAAC,GAAS,UAAW,MACrC,eAGF,CAAC,GAAS,QAAQ,CAAC,GAAS,YAAa,MACvC,oBAAA,CACA,iBAAA,CACA,sBAAA,CACA,WAGF,CAAC,GAAS,QAAQ,CAAC,GAAS,YAAY,CAAC,GAAS,UAAW,MAC3D,WAGF,CAAC,GAAS,QAAS,EAAC,GAAS,OAC3B,gBAKF,CAAC,GAAS,IACR,EAAC,GAAS,QAAS,QACjB,aAAA,CACA,iBAHJ,CAAC,GAAS,IAMR,EAAC,GAAS,QAAQ,CAAC,GAAS,YAAa,MACvC,aAAA,CACA,iBCtCJ,CAAC,GAAS,WACR,aAAA,CACA,uBAAA,CACA,UAAA,CACA,kBAAA,CACA,gBAAA,CACA,aAAA,CACA,kBAAA,CACA,cAAA,CACA,kBAAA,CACA,iCAAA,CACA,kBAXF,CAAC,GAAS,UAaR,EAAC,GAAS,OACR,cAAA,CACA,gBAAA,CACA,gCAAA,CACA,mCAAA,CACA,8BAlBJ,CAAC,GAAS,UAqBR,EAAC,GAAS,eACR,oBAAA,CACA,qBAAA,CACA,WAxBJ,CAAC,GAAS,UA2BR,EAAC,GAAS,KACR,kBAGF,CA/BD,GAAS,UA+BP,OAAQ,CA/BV,GAAS,UA+BE,OACR,mBADF,CA/BD,GAAS,UA+BP,MAGC,EAAC,GAAS,eAHH,CA/BV,GAAS,UA+BE,MAGR,EAAC,GAAS,eACR,WAJJ,CA/BD,GAAS,UA+BP,MAOC,EAAC,GAAS,MAPH,CA/BV,GAAS,UA+BE,MAOR,EAAC,GAAS,MAPZ,CA/BD,GAAS,UA+BP,MAOkB,EAAC,GAAS,KAPpB,CA/BV,GAAS,UA+BE,MAOS,EAAC,GAAS,KACzB,cAIJ,CA3CD,GAAS,UA2CP,CAAC,GAAS,UACT,mBADF,CA3CD,GAAS,UA2CP,CAAC,GAAS,SAGT,EAAC,GAAS,MAHZ,CA3CD,GAAS,UA2CP,CAAC,GAAS,SAGQ,EAAC,GAAS,KACzB,cAIJ,CAnDD,GAAS,UAmDP,CAAC,GAAS,OAAO,CAAC,GAAS,kBAC1B,mBADF,CAnDD,GAAS,UAmDP,CAAC,GAAS,OAAO,CAAC,GAAS,iBAG1B,EAAC,GAAS,MAHZ,CAnDD,GAAS,UAmDP,CAAC,GAAS,OAAO,CAAC,GAAS,iBAGT,EAAC,GAAS,KACzB,YAIJ,CA3DD,GAAS,UA2DP,CAAC,GAAS,OAAO,CAAC,GAAS,mBAC1B,EAAC,GAAS,KACR,mBAIJ,CAjED,GAAS,UAiEP,CAAC,GAAS,UAAW,CAjEvB,GAAS,UAiEe,CAAC,GAAS,SAAS,OACxC,iBAEA,CApEH,GAAS,UAiEP,CAAC,GAAS,SAGR,OAAD,CApEH,GAAS,UAiEe,CAAC,GAAS,SAAS,MAGvC,OACC,mBAJJ,CAjED,GAAS,UAiEP,CAAC,GAAS,SAOT,EAAC,GAAS,MAPU,CAjEvB,GAAS,UAiEe,CAAC,GAAS,SAAS,MAOxC,EAAC,GAAS,MAPZ,CAjED,GAAS,UAiEP,CAAC,GAAS,SAOQ,EAAC,GAAS,KAPP,CAjEvB,GAAS,UAiEe,CAAC,GAAS,SAAS,MAOvB,EAAC,GAAS,KACzB,WAIJ,CA7ED,GAAS,UA6EP,CAAC,GAAS,kBAAkB,CAAC,GAAS,QACrC,6BAAA,CACA,iBAFF,CA7ED,GAAS,UA6EP,CAAC,GAAS,kBAAkB,CAAC,GAAS,OAIrC,EAAC,GAAS,MAJZ,CA7ED,GAAS,UA6EP,CAAC,GAAS,kBAAkB,CAAC,GAAS,OAIpB,EAAC,GAAS,KACzB,cAGF,CArFH,GAAS,UA6EP,CAAC,GAAS,kBAAkB,CAAC,GAAS,OAQpC,OACC,mBAKN,CAAC,GAAS,gBACR,UAAA,CACA,eAAA,CACA,sBAAA,CACA,mBAJF,CAAC,GAAS,eAMR,GACE,WAIJ,CAAC,GAAS,oBACR,aAAA,CACA,sBAAA,CACA,kBAAA,CACA,gBAGF,CAAC,GAAS,UAAU,MAAO,GAAG,CAAC,GAAS,UAAU,CAAC,GAAS,SAAU,GAAG,CAAC,GAAS,UAAU,MAAO,GAClG,cAGF,GAAG,CAAC,GAAS,KAAM,EAAC,GAAS,eAAgB,CAAC,GAAS,cAAc,OACnE,QAAA,CACA,SAAA,CACA,UAAA,CACA,cAAA,CACA,eAAA,CACA,sBAAA,CACA,uCAAA,CACA,cAAA,CACA,YAGF,GAAG,CAAC,GAAS,KAAM,EAAC,GAAS,UAAW,GACtC,iBAGF,CAAC,GAAS,oBAAsB,kBAChC,CAAC,GAAS,oBAAsB,kBAChC,CAAC,GAAS,oBAAsB,kBAChC,CAAC,GAAS,oBAAsB,kBAChC,CAAC,GAAS,oBAAsB,kBAChC,CAAC,GAAS,oBAAsB,kBAChC,CAAC,GAAS,oBAAsB,kBAIhC,CAAC,GAAS,KAAK,CAAC,GAAS,KACvB,cAGF,CAAC,GAAS,IAAK,EAAC,GAAS,WACvB,gBAAA,CACA,aAAA,CACA,0BAGF,CAAC,GAAS,IAAK,EAAC,GAAS,UAAW,EAAC,GAAS,OAC5C,eAAA,CACA,cAAA,CACA,8BAAA,CACA,cAGF,CAAC,GAAS,IAAK,EAAC,GAAS,UAAU,CAAC,GAAS,SAAU,EAAC,GAAS,OAAQ,CAAC,GAAS,IAAK,EAAC,GAAS,UAAU,MAAO,EAAC,GAAS,OAAQ,CAAC,GAAS,IAAK,EAAC,GAAS,UAAU,MAAO,EAAC,GAAS,OACvL,6BAAA,CACA,2BAGF,CAAC,GAAS,IACR,EAAC,GAAS,UAAW,EAAC,GAAS,KAC7B,eAAA,CACA,iBCpKJ,CAAC,GAAS,UACR,iBAAA,CACA,KAAA,CAAQ,MAAA,CACR,UAAA,CAAa,WAAA,CjCFb,UAAA,CAEA,wBAAA,CACA,MAAA,CiCCA,oBlCyO6C,0CkCtO/C,CAAC,GAAS,iBACR,eAAA,CACA,YAGF,CAAC,GAAS,KAAM,EAAC,GAAS,iBACxB,WAAA,CACA,wBCfF,CAAC,GAAS,MACR,iBAAA,CACA,MAAA,CAAS,KAAA,ClC+CT,OAAQ,2DAAR,CACA,sBAAA,CkC9CA,YAAA,CACA,mBAAA,CACA,eAAA,CACA,eAAA,CACA,gBAAA,CACA,wBAAA,CACA,wBAAA,CACA,YAAA,ClCqBA,+CAAA,CACA,4CAAA,CACA,uCAAA,CkCpBA,gBAAA,CACA,aAAA,CACA,kBAEA,CAlBD,GAAS,KAkBP,CAAC,GAAS,SACT,WAAA,CACA,UAAW,eAAe,eAA1B,CACA,0BAGF,CAxBD,GAAS,KAwBP,CAAC,GAAS,WACT,EAAC,GAAS,eADZ,CAxBD,GAAS,KAwBP,CAAC,GAAS,WACiB,EAAC,GAAS,OAClC,iBAAA,CACA,QAKN,CAAC,GAAS,KAAM,GACd,aAGF,CAAC,GAAS,eAAgB,GACxB,qBAIA,CADD,GAAS,KAAK,CAAC,GAAS,GACtB,CAAC,GAAS,SACT,SAAA,CACA,UAAW,WAAW,UAAtB,CACA,iDAIJ,CAAC,GAAS,gBAAkB,qBAC5B,CAAC,GAAS,gBAAkB,oBAC5B,CAAC,GAAS,gBAAkB,oBAC5B,CAAC,GAAS,gBAAkB,mBAI5B,CAAC,GAAS,IACR,EAAC,GAAS,UAAW,EAAC,GAAS,KAC7B,eAAA,CACA,iBAGF,CAND,GAAS,IAMP,CAAC,GAAS,WAAY,EAAC,GAAS,OANnC,CAAC,GAAS,IAMiC,EAAC,GAAS,eACjD,UAAA,CACA,OC/DJ,CAAC,GAAS,QAAS,QACjB,eAAA,CACA,kBAAA,CACA,kBAGF,CAAC,GAAS,QAAS,EAAC,GAAS,OAC3B,iBAAA,CACA,eAAA,CACA,SAAA,CACA,QAKF,CAAC,GAAS,IAAK,EAAC,GAAS,QAAS,EAAC,GAAS,OAC1C,UAAA,CACA,SAGF,CAAC,GAAS,IAAK,EAAC,GAAS,QAAS,QAChC,kBAAA,CACA,kBCxBF,CAAC,GAAS,eAAgB,EAAC,GAAS,cAClC,iBAAA,CACA,OAAA,CACA,QAAA,CACA,UAAA,CACA,WAAA,CACA,kBAAA,CACA,eAAA,CACA,SAGF,CAAC,GAAS,eAAgB,EAAC,GAAS,mBAClC,iBAGF,CAAC,CAAC,GAAS,UACT,cCdF,CAAC,GAAS,WACR,eAAA,CACA,yBCFF,CAAC,GAAS,QAER,wBAAA,CACA,eAAA,CACA,WAAA,CACA,WAAA,CACA,iBAAA,CACA,cAGF,CAAC,GAAS,OAAO,CAAC,GAAS,UACzB,UAAA,CACA,aAGF,CAAC,GAAS,eAER,wBAAA,CACA,kBAAA,CACA,aAAA,CACA,UAAA,CACA,WAAA,CACA,iBAAA,CACA,KAAA,CAAQ,MAAA,CACR,gBAAA,CACA,gBAGF,CAAC,GAAS,cAAc,OACtB,qBC7BF,CAAC,GAAS,QACR,kBCAA,CADD,GAAS,SACP,MAAO,EAAC,GAAS,MAChB,8BAFJ,CAAC,GAAS,SAKR,EAAC,GAAS,MACR,iCAAA,CACA,iBAAA,CACA,iBARJ,CAAC,GAAS,SAWR,EAAC,GAAS,KAAK,OACb,8BAZJ,CAAC,GAAS,SAeR,EAAC,GAAS,KAAK,OAfjB,CAAC,GAAS,SAee,EAAC,GAAS,KAAK,QACpC,8BAGF,CAnBD,GAAS,SAmBP,CAAC,GAAS,OAAO,MAAO,EAAC,GAAS,MACjC,4BAGF,CAvBD,GAAS,SAuBP,CAAC,GAAS,QACT,qBAIJ,CAAC,GAAS,SAAS,CAAC,GAAS,UAAW,EAAC,GAAS,MAChD,oBAKF,CAAC,GAAS,IAAK,EAAC,GAAS,UACvB,aAAA,CACA,iBAGF,CAAC,GAAS,IAAK,EAAC,GAAS,SAAU,QACjC,iBAAA,CACA,iBAGF,CAAC,GAAS,IAAK,EAAC,GAAS,SAAU,EAAC,GAAS,MAC3C,cC7CF,CAAC,GAAS,mBACR,cCDF,CAAC,GAAS,MACR,aAAA,CACA,gCAGF,CAAC,GAAS,MACV,CAAC,GAAS,KAAM,EAAG,GAAS,gBAC1B,gBAGF,CAAC,GAAS,K1CiCR,oBAAA,CACA,eAAA,CACA,OAAA,C0CjCA,wBAAA,CACA,sBAAA,CACA,eAAA,CACA,gBAAA,CACA,4CAAA,CACA,WAAA,CACA,eAGF,CAAC,GAAS,IAAI,OACZ,mBAGF,CAAC,GAAS,IAAI,CAAC,GAAS,QACtB,kBAAA,CACA,+BAAA,CACA,kBAAA,CACA,YAIF,CAAC,GAAS,IAAI,OACZ,cAKF,CAAC,GAAS,IAAK,EAAC,GAAS,MACvB,gBAAA,CACA,cAGF,CAAC,GAAS,IAAK,EAAC,GAAS,KACvB,uBC7CF,CAAC,GAAS,SACR,eAAA,CACA,wBAAA,C3C8BA,uBAAA,CACA,oBAAA,CACA,eAAA,C2C7BA,oBAAA,C3CiCA,2DAAA,CACA,mDAAA,C2ChCA,WAAA,CACA,WAAA,CACA,mBAAA,CACA,oBAAA,CACA,gBAAA,CACA,cAGF,CAAC,GAAS,QAAQ,OAAQ,CAAC,GAAS,QAAQ,CAAC,GAAS,OACpD,oBAAA,C3CgBA,uBAAA,CACA,oBAAA,CACA,gB2CdF,CAAC,GAAS,YAAa,EAAC,GAAS,SAC/B,WAGF,CAAC,GAAS,QAAQ,CAAC,GAAS,WAC1B,WAAA,CACA,YAGF,CAAC,GAAS,QAAQ,CAAC,GAAS,UAC1B,cAKF,CAAC,GAAS,IAAK,EAAC,GAAS,SACvB,gBAAA,CACA,cCrCF,CAAC,GAAS,UACR,sBAAA,CACA,kBAEA,CAJD,GAAS,SAIN,MACA,wBAAA,CACA,oBAAA,CACA,sBAGF,CAVD,GAAS,SAUP,OACC,QAAQ,EAAR,CACA,WAAA,CACA,oBAAA,CACA,sBAGF,CAjBD,GAAS,SAiBP,CAAC,GAAS,U5ChBX,UAAA,CAEA,wBAAA,CACA,O4CgBE,CApBH,GAAS,SAiBP,CAAC,GAAS,SAGR,CAAC,GAAS,WACT,mBCrBN,CAAC,GAAS,cACR,iBAAA,CACA,gBAEA,CAJD,GAAS,aAIN,QACA,iBAAA,CACA,UAGF,CATD,GAAS,aASN,O7CRF,SAAA,CAEA,uBAAA,CACA,MAAA,C6COE,iBAAA,CACA,KAAA,CACA,MAAA,CACA,UAAA,CACA,WAAA,CACA,UChBJ,WACE,YAAa,SAAb,CACA,QAAQ,oBAAR,CACA,QAAQ,4BAA4B,OAAO,yBACrC,sBAAsB,OAAO,YAC7B,qBAAqB,OAAO,gBAC5B,6BAA6B,OAAO,MAH1C,CAIA,kBAAA,CACA,kBAGF,WACE,YAAa,eAAb,CACA,QAAQ,0BAAR,CACA,QAAQ,kCAAkC,OAAO,yBAC3C,4BAA4B,OAAO,YACnC,2BAA2B,OAAO,gBAClC,mCAAmC,OAAO,MAHhD,CAIA,kBAAA,CACA,kBAGF,CAAC,GAAS,KACR,YAAa,eAAb,CACA,iBAAA,CACA,kBAAA,CACA,mBAAA,CACA,cAAA,CACA,gBAAA,CACA,UAAA,CACA,uBAAA,CACA,kCAAA,CACA,iCAAA,CAEA,oBAAA,CACA,oCAAA,CACA,qBAAA,CACA,UAAA,CACA,WAAA,CACA,cAGF,CAAC,GAAS,UAAW,EAAC,GAAS,KAC7B,YAAa,sBAGf,CAAC,GAAS,OAAO,QAA0B,QAAS,QACpD,CAAC,GAAS,cAAc,QAAmB,QAAS,QACpD,CAAC,GAAS,WAAW,QAAsB,QAAS,QACpD,CAAC,GAAS,YAAY,QAAqB,QAAS,QACpD,CAAC,GAAS,cAAc,QAAmB,QAAS,QACpD,CAAC,GAAS,aAAa,QAAoB,QAAS,QACpD,CAAC,GAAS,eAAe,QAAkB,QAAS,QACpD,CAAC,GAAS,YAAY,QAAqB,QAAS,QACpD,CAAC,GAAS,MAAM,QAA2B,QAAS,QACpD,CAAC,GAAS,QAAQ,QAAyB,QAAS,QACpD,CAAC,GAAS,gBAAgB,QAAiB,QAAS,QACpD,CAAC,GAAS,UAAU,QAAuB,QAAS,QACpD,CAAC,GAAS,UAAU,QAAuB,QAAS,QACpD,CAAC,GAAS,SAAS,QAAwB,QAAS,QACpD,CAAC,GAAS,UAAU,QAAuB,QAAS,QACpD,CAAC,GAAS,aAAa,QAAoB,QAAS,QACpD,CAAC,GAAS,OAAO,QAA0B,QAAS,QACpD,CAAC,GAAS,OAAO,QAA0B,QAAS,QACpD,CAAC,GAAS,OAAO,QAA0B,QAAS,QACpD,CAAC,GAAS,SAAS,QAAwB,QAAS,QACpD,CAAC,GAAS,SAAS,QAAwB,QAAS,QACpD,CAAC,GAAS,QAAQ,QAAyB,QAAS,QACpD,CAAC,GAAS,QAAQ,QAAyB,QAAS,QACpD,CAAC,GAAS,OAAO,QAA0B,QAAS,QACpD,CAAC,GAAS,OAAO,QAA0B,QAAS,QACpD,CAAC,GAAS,iBAAiB,QAAgB,QAAS,QACpD,CAAC,GAAS,UAAU,QAAuB,QAAS,QACpD,CAAC,GAAS,YAAY,QAAqB,QAAS,QACpD,CAAC,GAAS,YAAY,QAAqB,QAAS,QACpD,CAAC,GAAS,QAAQ,QAAyB,QAAS,QACpD,CAAC,GAAS,KAAK,QAA4B,QAAS,QACpD,CAAC,GAAS,eAAe,QAAkB,QAAS,QACpD,CAAC,GAAS,YAAY,QAAqB,QAAS,QACpD,CAAC,GAAS,cAAc,QAAmB,QAAS,QACpD,CAAC,GAAS,UAAU,QAAuB,QAAS,QACpD,CAAC,GAAS,YAAY,QAAqB,QAAS,QACpD,CAAC,GAAS,QAAQ,QAAyB,QAAS,QACpD,CAAC,GAAS,aAAa,QAAoB,QAAS,QACpD,CAAC,GAAS,eAAe,QAAkB,QAAS,QACpD,CAAC,GAAS,cAAc,QAAmB,QAAS,QACpD,CAAC,GAAS,WAAW,QAAsB,QAAS,QACpD,CAAC,GAAS,YAAY,QAAqB,QAAS,QACpD,CAAC,GAAS,eAAe,QAAkB,QAAS,QACpD,CAAC,GAAS,OAAO,QAA0B,QAAS,QACpD,CAAC,GAAS,SAAS,QAAwB,QAAS,QACpD,CAAC,GAAS,YAAY,QAAqB,QAAS,QACpD,CAAC,GAAS,gBAAgB,QAAiB,QAAS,QACpD,CAAC,GAAS,cAAc,QAAmB,QAAS,QACpD,CAAC,GAAS,eAAe,QAAkB,QAAS,QACpD,CAAC,GAAS,MAAM,QAA2B,QAAS,QACpD,CAAC,GAAS,MAAM,QAA2B,QAAS,QACpD,CAAC,GAAS,OAAO,QAA0B,QAAS,QACpD,CAAC,GAAS,SAAS,QAAwB,QAAS,QACpD,CAAC,GAAS,SAAS,QAAwB,QAAS,QACpD,CAAC,GAAS,YAAY,QAAqB,QAAS,QACpD,CAAC,GAAS,aAAa,QAAoB,QAAS,QACpD,CAAC,GAAS,cAAc,QAAmB,QAAS,QACpD,CAAC,GAAS,OAAO,QAA0B,QAAS,QACpD,CAAC,GAAS,YAAY,QAAqB,QAAS,QACpD,CAAC,GAAS,UAAU,QAAuB,QAAS,QACpD,CAAC,GAAS,QAAQ,QAAyB,QAAS,QACpD,CAAC,GAAS,QAAQ,QAAyB,QAAS,QACpD,CAAC,GAAS,SAAS,QAAwB,QAAS,QACpD,CAAC,GAAS,UAAU,QAAuB,QAAS,QACpD,CAAC,GAAS,MAAM,QAA2B,QAAS,QACpD,CAAC,GAAS,OAAO,QAA0B,QAAS,QACpD,CAAC,GAAS,YAAY,QAAqB,QAAS,QACpD,CAAC,GAAS,aAAa,QAAoB,QAAS,QACpD,CAAC,GAAS,OAAO,QAA0B,QAAS,QACpD,CAAC,GAAS,WAAW,QAAsB,QAAS,QACpD,CAAC,GAAS,UAAU,QAAuB,QAAS,QACpD,CAAC,GAAS,UAAU,QAAuB,QAAS,QACpD,CAAC,GAAS,cAAc,QAAmB,QAAS,QACpD,CAAC,GAAS,SAAS,QAAwB,QAAS,QACpD,CAAC,GAAS,QAAQ,QAAyB,QAAS,QACpD,CAAC,GAAS,SAAS,QAAwB,QAAS,QACpD,CAAC,GAAS,gBAAgB,QAAiB,QAAS,QACpD,CAAC,GAAS,iBAAiB,QAAgB,QAAS,QACpD,CAAC,GAAS,SAAS,QAAwB,QAAS,QACpD,CAAC,GAAS,kBAAkB,QAAe,QAAS,QACpD,CAAC,GAAS,uBAAuB,QAAU,QAAS,QACpD,CAAC,GAAS,sBAAsB,QAAW,QAAS,QACpD,CAAC,GAAS,uBAAuB,QAAU,QAAS,QACpD,CAAC,GAAS,sBAAsB,QAAW,QAAS,QACpD,CAAC,GAAS,kBAAkB,QAAe,QAAS,QACpD,CAAC,GAAS,cAAc,QAAmB,QAAS,QACpD,CAAC,GAAS,kBAAkB,QAAe,QAAS,QACpD,CAAC,GAAS,iBAAiB,QAAgB,QAAS,QACpD,CAAC,GAAS,iBAAiB,QAAgB,QAAS,QACpD,CAAC,GAAS,iBAAiB,QAAgB,QAAS,QACpD,CAAC,GAAS,aAAa,QAAoB,QAAS,QACpD,CAAC,GAAS,OAAO,QAA0B,QAAS,QACpD,CAAC,GAAS,cAAc,QAAmB,QAAS,QACpD,CAAC,GAAS,OAAO,QAA0B,QAAS,QACpD,CAAC,GAAS,QAAQ,QAAyB,QAAS,QACpD,CAAC,GAAS,YAAY,QAAqB,QAAS,QACpD,CAAC,GAAS,OAAO,QAA0B,QAAS,QACpD,CAAC,GAAS,OAAO,QAA0B,QAAS,QACpD,CAAC,GAAS,SAAS,QAAwB,QAAS,QACpD,CAAC,GAAS,SAAS,QAAwB,QAAS,QACpD,CAAC,GAAS,OAAO,QAA0B,QAAS,QACpD,CAAC,GAAS,OAAO,QAA0B,QAAS,QACpD,CAAC,GAAS,SAAS,QAAwB,QAAS,QACpD,CAAC,GAAS,WAAW,QAAsB,QAAS,QACpD,CAAC,GAAS,UAAU,QAAuB,QAAS,QACpD,CAAC,GAAS,OAAO,QAA0B,QAAS,QACpD,CAAC,GAAS,UAAU,QAAuB,QAAS,QACpD,CAAC,GAAS,WAAW,QAAsB,QAAS,QACpD,CAAC,GAAS,aAAa,QAAoB,QAAS,QACpD,CAAC,GAAS,OAAO,QAA0B,QAAS,QACpD,CAAC,GAAS,SAAS,QAAwB,QAAS,QACpD,CAAC,GAAS,UAAU,QAAuB,QAAS,QACpD,CAAC,GAAS,YAAY,QAAqB,QAAS,QACpD,CAAC,GAAS,WAAW,QAAsB,QAAS,QACpD,CAAC,GAAS,aAAa,QAAoB,QAAS,QACpD,CAAC,GAAS,QAAQ,QAAyB,QAAS,QACpD,CAAC,GAAS,SAAS,QAAwB,QAAS,QACpD,CAAC,GAAS,OAAO,QAA0B,QAAS,QACpD,CAAC,GAAS,OAAO,QAA0B,QAAS,QACpD,CAAC,GAAS,SAAS,QAAwB,QAAS,QACpD,CAAC,GAAS,QAAQ,QAAyB,QAAS,QACpD,CAAC,GAAS,QAAQ,QAAyB,QAAS,QACpD,CAAC,GAAS,SAAS,QAAwB,QAAS,QACpD,CAAC,GAAS,MAAM,QAA2B,QAAS,QACpD,CAAC,GAAS,YAAY,QAAqB,QAAS,QACpD,CAAC,GAAS,WAAW,QAAS,CAAC,GAAS,WAAW,QACjD,QAAS,QAGX,CAAC,GAAS,UAA2B,eACrC,CAAC,GAAS,YAA2B,kBACrC,CAAC,CAAC,GAAS,aAA0B,gBAAA,CAAmB,gBCjLxD,CAAC,GAAS,IAAK,EAAC,GAAS,WAAY,OACnC"}
\ No newline at end of file
diff --git a/project-web/public/static/tinymce4.7.5/tinymce.min.js b/project-web/public/static/tinymce4.7.5/tinymce.min.js
new file mode 100644
index 0000000..75bb09c
--- /dev/null
+++ b/project-web/public/static/tinymce4.7.5/tinymce.min.js
@@ -0,0 +1,2 @@
+// 4.7.5 (2018-01-22)
+!function(){"use strict";var e,t,n,r,o,i,a,s,u,c,l,f,d,m,p,g,h,v=function(e){return function(){return e}},y={noop:function(){},noarg:function(e){return function(){return e()}},compose:function(e,t){return function(){return e(t.apply(null,arguments))}},constant:v,identity:function(e){return e},tripleEquals:function(e,t){return e===t},curry:function(e){for(var t=new Array(arguments.length-1),n=1;n<arguments.length;n++)t[n-1]=arguments[n];return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];var o=t.concat(n);return e.apply(null,o)}},not:function(e){return function(){return!e.apply(null,arguments)}},die:function(e){return function(){throw new Error(e)}},apply:function(e){return e()},call:function(e){e()},never:v(!1),always:v(!0)},b=y.never,C=y.always,x=function(){return w},w=(r={fold:function(e,t){return e()},is:b,isSome:b,isNone:C,getOr:n=function(e){return e},getOrThunk:t=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},or:n,orThunk:t,map:x,ap:x,each:function(){},bind:x,flatten:x,exists:b,forall:C,filter:x,equals:e=function(e){return e.isNone()},equals_:e,toArray:function(){return[]},toString:y.constant("none()")},Object.freeze&&Object.freeze(r),r),N=function(e){var t=function(){return e},n=function(){return o},r=function(t){return t(e)},o={fold:function(t,n){return n(e)},is:function(t){return e===t},isSome:C,isNone:b,getOr:t,getOrThunk:t,getOrDie:t,or:n,orThunk:n,map:function(t){return N(t(e))},ap:function(t){return t.fold(x,function(t){return N(t(e))})},each:function(t){t(e)},bind:r,flatten:t,exists:r,forall:r,filter:function(t){return t(e)?o:w},equals:function(t){return t.is(e)},equals_:function(t,n){return t.fold(b,function(t){return n(e,t)})},toArray:function(){return[e]},toString:function(){return"some("+e+")"}};return o},E={some:N,none:x,from:function(e){return null===e||e===undefined?w:N(e)}},S=(o=Array.prototype.indexOf)===undefined?function(e,t){return D(e,t)}:function(e,t){return o.call(e,t)},k=function(e,t){return S(e,t)>-1},T=function(e,t){for(var n=e.length,r=new Array(n),o=0;o<n;o++){var i=e[o];r[o]=t(i,o,e)}return r},A=function(e,t){for(var n=0,r=e.length;n<r;n++)t(e[n],n,e)},_=function(e,t){for(var n=e.length-1;n>=0;n--)t(e[n],n,e)},B=function(e,t){for(var n=[],r=0,o=e.length;r<o;r++){var i=e[r];t(i,r,e)&&n.push(i)}return n},R=function(e,t){for(var n=0,r=e.length;n<r;n++)if(t(e[n],n,e))return E.some(n);return E.none()},D=function(e,t){for(var n=0,r=e.length;n<r;++n)if(e[n]===t)return n;return-1},O=Array.prototype.push,P=function(e){for(var t=[],n=0,r=e.length;n<r;++n){if(!Array.prototype.isPrototypeOf(e[n]))throw new Error("Arr.flatten item "+n+" was not an array, input: "+e);O.apply(t,e[n])}return t},I=function(e,t){for(var n=0,r=e.length;n<r;++n)if(!0!==t(e[n],n,e))return!1;return!0},L=Array.prototype.slice,M={map:T,each:A,eachr:_,partition:function(e,t){for(var n=[],r=[],o=0,i=e.length;o<i;o++){var a=e[o];(t(a,o,e)?n:r).push(a)}return{pass:n,fail:r}},filter:B,groupBy:function(e,t){if(0===e.length)return[];for(var n=t(e[0]),r=[],o=[],i=0,a=e.length;i<a;i++){var s=e[i],u=t(s);u!==n&&(r.push(o),o=[]),n=u,o.push(s)}return 0!==o.length&&r.push(o),r},indexOf:function(e,t){var n=S(e,t);return-1===n?E.none():E.some(n)},foldr:function(e,t,n){return _(e,function(e){n=t(n,e)}),n},foldl:function(e,t,n){return A(e,function(e){n=t(n,e)}),n},find:function(e,t){for(var n=0,r=e.length;n<r;n++){var o=e[n];if(t(o,n,e))return E.some(o)}return E.none()},findIndex:R,flatten:P,bind:function(e,t){var n=T(e,t);return P(n)},forall:I,exists:function(e,t){return R(e,t).isSome()},contains:k,equal:function(e,t){return e.length===t.length&&I(e,function(e,n){return e===t[n]})},reverse:function(e){var t=L.call(e,0);return t.reverse(),t},chunk:function(e,t){for(var n=[],r=0;r<e.length;r+=t){var o=e.slice(r,r+t);n.push(o)}return n},difference:function(e,t){return B(e,function(e){return!k(t,e)})},mapToObject:function(e,t){for(var n={},r=0,o=e.length;r<o;r++){var i=e[r];n[String(i)]=t(i,r)}return n},pure:function(e){return[e]},sort:function(e,t){var n=L.call(e,0);return n.sort(t),n},range:function(e,t){for(var n=[],r=0;r<e;r++)n.push(t(r));return n},head:function(e){return 0===e.length?E.none():E.some(e[0])},last:function(e){return 0===e.length?E.none():E.some(e[e.length-1])}},F="undefined"!=typeof window?window:Function("return this;")(),z=function(e,t){for(var n=t!==undefined&&null!==t?t:F,r=0;r<e.length&&n!==undefined&&null!==n;++r)n=n[e[r]];return n},U=function(e,t){var n=e.split(".");return z(n,t)},V=function(e,t){var n=U(e,t);if(n===undefined||null===n)throw e+" not available on this browser";return n},H=function(){return V("URL")},q=function(e){return H().createObjectURL(e)},j=function(e){H().revokeObjectURL(e)},$=navigator,W=$.userAgent,K=function(e){return"matchMedia"in window&&matchMedia(e).matches};d=/Android/.test(W),a=(a=!(i=/WebKit/.test(W))&&/MSIE/gi.test(W)&&/Explorer/gi.test($.appName))&&/MSIE (\w+)\./.exec(W)[1],s=-1!==W.indexOf("Trident/")&&(-1!==W.indexOf("rv:")||-1!==$.appName.indexOf("Netscape"))&&11,u=-1!==W.indexOf("Edge/")&&!a&&!s&&12,a=a||s||u,c=!i&&!s&&/Gecko/.test(W),l=-1!==W.indexOf("Mac"),f=/(iPad|iPhone)/.test(W),m="FormData"in window&&"FileReader"in window&&"URL"in window&&!!q,p=K("only screen and (max-device-width: 480px)")&&(d||f),g=K("only screen and (min-width: 800px)")&&(d||f),h=-1!==W.indexOf("Windows Phone"),u&&(i=!1);var X,Y,G,J,Q,Z,ee,te,ne,re,oe,ie,ae,se,ue,ce,le,fe,de,me={opera:!1,webkit:i,ie:a,gecko:c,mac:l,iOS:f,android:d,contentEditable:!f||m||parseInt(W.match(/AppleWebKit\/(\d*)/)[1],10)>=534,transparentSrc:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",caretAfter:8!==a,range:window.getSelection&&"Range"in window,documentMode:a&&!u?document.documentMode||7:10,fileApi:m,ceFalse:!1===a||a>8,cacheSuffix:"",container:null,overrideViewPort:null,experimentalShadowDom:!1,canHaveCSP:!1===a||a>11,desktop:!p&&!g,windowsPhone:h},pe=window.Promise?window.Promise:function(){function e(e,t){return function(){e.apply(t,arguments)}}var t=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},n=function(t){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof t)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],u(t,e(i,this),e(a,this))},r=n.immediateFn||"function"==typeof setImmediate&&setImmediate||function(e){setTimeout(e,1)};function o(e){var t=this;null!==this._state?r(function(){var n=t._state?e.onFulfilled:e.onRejected;if(null!==n){var r;try{r=n(t._value)}catch(o){return void e.reject(o)}e.resolve(r)}else(t._state?e.resolve:e.reject)(t._value)}):this._deferreds.push(e)}function i(t){try{if(t===this)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"==typeof t||"function"==typeof t)){var n=t.then;if("function"==typeof n)return void u(e(n,t),e(i,this),e(a,this))}this._state=!0,this._value=t,s.call(this)}catch(r){a.call(this,r)}}function a(e){this._state=!1,this._value=e,s.call(this)}function s(){for(var e=0,t=this._deferreds.length;e<t;e++)o.call(this,this._deferreds[e]);this._deferreds=null}function u(e,t,n){var r=!1;try{e(function(e){r||(r=!0,t(e))},function(e){r||(r=!0,n(e))})}catch(o){if(r)return;r=!0,n(o)}}return n.prototype["catch"]=function(e){return this.then(null,e)},n.prototype.then=function(e,t){var r=this;return new n(function(n,i){o.call(r,new function(e,t,n,r){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.resolve=n,this.reject=r}(e,t,n,i))})},n.all=function(){var e=Array.prototype.slice.call(1===arguments.length&&t(arguments[0])?arguments[0]:arguments);return new n(function(t,n){if(0===e.length)return t([]);var r=e.length;function o(i,a){try{if(a&&("object"==typeof a||"function"==typeof a)){var s=a.then;if("function"==typeof s)return void s.call(a,function(e){o(i,e)},n)}e[i]=a,0==--r&&t(e)}catch(u){n(u)}}for(var i=0;i<e.length;i++)o(i,e[i])})},n.resolve=function(e){return e&&"object"==typeof e&&e.constructor===n?e:new n(function(t){t(e)})},n.reject=function(e){return new n(function(t,n){n(e)})},n.race=function(e){return new n(function(t,n){for(var r=0,o=e.length;r<o;r++)e[r].then(t,n)})},n}(),ge=function(e,t){return"number"!=typeof t&&(t=0),setTimeout(e,t)},he=function(e,t){return"number"!=typeof t&&(t=1),setInterval(e,t)},ve=function(e,t){var n,r;return(r=function(){var r=arguments;clearTimeout(n),n=ge(function(){e.apply(this,r)},t)}).stop=function(){clearTimeout(n)},r},ye={requestAnimationFrame:function(e,t){X?X.then(e):X=new pe(function(e){t||(t=document.body),function(e,t){var n,r=window.requestAnimationFrame,o=["ms","moz","webkit"];for(n=0;n<o.length&&!r;n++)r=window[o[n]+"RequestAnimationFrame"];r||(r=function(e){window.setTimeout(e,0)}),r(e,t)}(e,t)}).then(e)},setTimeout:ge,setInterval:he,setEditorTimeout:function(e,t,n){return ge(function(){e.removed||t()},n)},setEditorInterval:function(e,t,n){var r;return r=he(function(){e.removed?clearInterval(r):t()},n)},debounce:ve,throttle:ve,clearInterval:function(e){return clearInterval(e)},clearTimeout:function(e){return clearTimeout(e)}},be=/^(?:mouse|contextmenu)|click/,Ce={keyLocation:1,layerX:1,layerY:1,returnValue:1,webkitMovementX:1,webkitMovementY:1,keyIdentifier:1},xe=function(){return!1},we=function(){return!0},Ne=function(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r||!1):e.attachEvent&&e.attachEvent("on"+t,n)},Ee=function(e,t,n,r){e.removeEventListener?e.removeEventListener(t,n,r||!1):e.detachEvent&&e.detachEvent("on"+t,n)},Se=function(e,t){var n,r,o,i,a,s,u=t||{};for(n in e)Ce[n]||(u[n]=e[n]);if(u.target||(u.target=u.srcElement||document),me.experimentalShadowDom&&(u.target=(r=e,o=u.target,a=o,(i=r.path)&&i.length>0&&(a=i[0]),r.deepPath&&(i=r.deepPath())&&i.length>0&&(a=i[0]),a)),e&&be.test(e.type)&&e.pageX===undefined&&e.clientX!==undefined){var c=u.target.ownerDocument||document,l=c.documentElement,f=c.body;u.pageX=e.clientX+(l&&l.scrollLeft||f&&f.scrollLeft||0)-(l&&l.clientLeft||f&&f.clientLeft||0),u.pageY=e.clientY+(l&&l.scrollTop||f&&f.scrollTop||0)-(l&&l.clientTop||f&&f.clientTop||0)}return u.preventDefault=function(){u.isDefaultPrevented=we,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},u.stopPropagation=function(){u.isPropagationStopped=we,e&&(e.stopPropagation?e.stopPropagation():e.cancelBubble=!0)},u.stopImmediatePropagation=function(){u.isImmediatePropagationStopped=we,u.stopPropagation()},0==((s=u).isDefaultPrevented===we||s.isDefaultPrevented===xe)&&(u.isDefaultPrevented=xe,u.isPropagationStopped=xe,u.isImmediatePropagationStopped=xe),"undefined"==typeof u.metaKey&&(u.metaKey=!1),u},ke=function(e,t,n){var r=e.document,o={type:"ready"};if(n.domLoaded)t(o);else{var i=function(){return"complete"===r.readyState||"interactive"===r.readyState&&r.body},a=function(){n.domLoaded||(n.domLoaded=!0,t(o))},s=function(){i()&&(Ee(r,"readystatechange",s),a())},u=function(){try{r.documentElement.doScroll("left")}catch(e){return void ye.setTimeout(u)}a()};!r.addEventListener||me.ie&&me.ie<11?(Ne(r,"readystatechange",s),r.documentElement.doScroll&&e.self===e.top&&u()):i()?a():Ne(e,"DOMContentLoaded",a),Ne(e,"load",a)}},Te=function(){var e,t,n,r,o,i=this,a={};t="mce-data-"+(+new Date).toString(32),r="onmouseenter"in document.documentElement,n="onfocusin"in document.documentElement,o={mouseenter:"mouseover",mouseleave:"mouseout"},e=1,i.domLoaded=!1,i.events=a;var s=function(e,t){var n,r,o,i,s=a[t];if(n=s&&s[e.type])for(r=0,o=n.length;r<o;r++)if((i=n[r])&&!1===i.func.call(i.scope,e)&&e.preventDefault(),e.isImmediatePropagationStopped())return};i.bind=function(u,c,l,f){var d,m,p,g,h,v,y,b=window,C=function(e){s(Se(e||b.event),d)};if(u&&3!==u.nodeType&&8!==u.nodeType){for(u[t]?d=u[t]:(d=e++,u[t]=d,a[d]={}),f=f||u,p=(c=c.split(" ")).length;p--;)v=C,h=y=!1,"DOMContentLoaded"===(g=c[p])&&(g="ready"),i.domLoaded&&"ready"===g&&"complete"===u.readyState?l.call(f,Se({type:g})):(r||(h=o[g])&&(v=function(e){var t,n;if(t=e.currentTarget,(n=e.relatedTarget)&&t.contains)n=t.contains(n);else for(;n&&n!==t;)n=n.parentNode;n||((e=Se(e||b.event)).type="mouseout"===e.type?"mouseleave":"mouseenter",e.target=t,s(e,d))}),n||"focusin"!==g&&"focusout"!==g||(y=!0,h="focusin"===g?"focus":"blur",v=function(e){(e=Se(e||b.event)).type="focus"===e.type?"focusin":"focusout",s(e,d)}),(m=a[d][g])?"ready"===g&&i.domLoaded?l({type:g}):m.push({func:l,scope:f}):(a[d][g]=m=[{func:l,scope:f}],m.fakeName=h,m.capture=y,m.nativeHandler=v,"ready"===g?ke(u,v,i):Ne(u,h||g,v,y)));return u=m=0,l}},i.unbind=function(e,n,r){var o,s,u,c,l,f;if(!e||3===e.nodeType||8===e.nodeType)return i;if(o=e[t]){if(f=a[o],n){for(u=(n=n.split(" ")).length;u--;)if(s=f[l=n[u]]){if(r)for(c=s.length;c--;)if(s[c].func===r){var d=s.nativeHandler,m=s.fakeName,p=s.capture;(s=s.slice(0,c).concat(s.slice(c+1))).nativeHandler=d,s.fakeName=m,s.capture=p,f[l]=s}r&&0!==s.length||(delete f[l],Ee(e,s.fakeName||l,s.nativeHandler,s.capture))}}else{for(l in f)s=f[l],Ee(e,s.fakeName||l,s.nativeHandler,s.capture);f={}}for(l in f)return i;delete a[o];try{delete e[t]}catch(g){e[t]=null}}return i},i.fire=function(e,n,r){var o;if(!e||3===e.nodeType||8===e.nodeType)return i;(r=Se(null,r)).type=n,r.target=e;do{(o=e[t])&&s(r,o),e=e.parentNode||e.ownerDocument||e.defaultView||e.parentWindow}while(e&&!r.isPropagationStopped());return i},i.clean=function(e){var n,r,o=i.unbind;if(!e||3===e.nodeType||8===e.nodeType)return i;if(e[t]&&o(e),e.getElementsByTagName||(e=e.document),e&&e.getElementsByTagName)for(o(e),n=(r=e.getElementsByTagName("*")).length;n--;)(e=r[n])[t]&&o(e);return i},i.destroy=function(){a={}},i.cancel=function(e){return e&&(e.preventDefault(),e.stopImmediatePropagation()),!1}};(Te.Event=new Te).bind(window,"ready",function(){});var Ae="sizzle"+-new Date,_e=window.document,Be=0,Re=0,De=ft(),Oe=ft(),Pe=ft(),Ie=function(e,t){return e===t&&(ie=!0),0},Le=typeof undefined,Me=1<<31,Fe={}.hasOwnProperty,ze=[],Ue=ze.pop,Ve=ze.push,He=ze.push,qe=ze.slice,je=ze.indexOf||function(e){for(var t=0,n=this.length;t<n;t++)if(this[t]===e)return t;return-1},$e="[\\x20\\t\\r\\n\\f]",We="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",Ke="\\["+$e+"*("+We+")(?:"+$e+"*([*^$|!~]?=)"+$e+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+We+"))|)"+$e+"*\\]",Xe=":("+We+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+Ke+")*)|.*)\\)|)",Ye=new RegExp("^"+$e+"+|((?:^|[^\\\\])(?:\\\\.)*)"+$e+"+$","g"),Ge=new RegExp("^"+$e+"*,"+$e+"*"),Je=new RegExp("^"+$e+"*([>+~]|"+$e+")"+$e+"*"),Qe=new RegExp("="+$e+"*([^\\]'\"]*?)"+$e+"*\\]","g"),Ze=new RegExp(Xe),et=new RegExp("^"+We+"$"),tt={ID:new RegExp("^#("+We+")"),CLASS:new RegExp("^\\.("+We+")"),TAG:new RegExp("^("+We+"|[*])"),ATTR:new RegExp("^"+Ke),PSEUDO:new RegExp("^"+Xe),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+$e+"*(even|odd|(([+-]|)(\\d*)n|)"+$e+"*(?:([+-]|)"+$e+"*(\\d+)|))"+$e+"*\\)|)","i"),bool:new RegExp("^(?:checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)$","i"),needsContext:new RegExp("^"+$e+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+$e+"*((?:-\\d)?\\d*)"+$e+"*\\)|)(?=[^-]|$)","i")},nt=/^(?:input|select|textarea|button)$/i,rt=/^h\d$/i,ot=/^[^{]+\{\s*\[native \w/,it=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,at=/[+~]/,st=/'|\\/g,ut=new RegExp("\\\\([\\da-f]{1,6}"+$e+"?|("+$e+")|.)","ig"),ct=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)};try{He.apply(ze=qe.call(_e.childNodes),_e.childNodes),ze[_e.childNodes.length].nodeType}catch(yC){He={apply:ze.length?function(e,t){Ve.apply(e,qe.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}var lt=function(e,t,n,r){var o,i,a,s,u,c,l,f,d,m;if((t?t.ownerDocument||t:_e)!==se&&ae(t),t=t||se,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(ce&&!r){if(o=it.exec(e))if(a=o[1]){if(9===s){if(!(i=t.getElementById(a))||!i.parentNode)return n;if(i.id===a)return n.push(i),n}else if(t.ownerDocument&&(i=t.ownerDocument.getElementById(a))&&de(t,i)&&i.id===a)return n.push(i),n}else{if(o[2])return He.apply(n,t.getElementsByTagName(e)),n;if((a=o[3])&&G.getElementsByClassName)return He.apply(n,t.getElementsByClassName(a)),n}if(G.qsa&&(!le||!le.test(e))){if(f=l=Ae,d=t,m=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){for(c=ee(e),(l=t.getAttribute("id"))?f=l.replace(st,"\\$&"):t.setAttribute("id",f),f="[id='"+f+"'] ",u=c.length;u--;)c[u]=f+bt(c[u]);d=at.test(e)&&vt(t.parentNode)||t,m=c.join(",")}if(m)try{return He.apply(n,d.querySelectorAll(m)),n}catch(p){}finally{l||t.removeAttribute("id")}}}return ne(e.replace(Ye,"$1"),t,n,r)};function ft(){var e=[];return function t(n,r){return e.push(n+" ")>J.cacheLength&&delete t[e.shift()],t[n+" "]=r}}function dt(e){return e[Ae]=!0,e}function mt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||Me)-(~e.sourceIndex||Me);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function pt(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function gt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return dt(function(t){return t=+t,dt(function(n,r){for(var o,i=e([],n.length,t),a=i.length;a--;)n[o=i[a]]&&(n[o]=!(r[o]=n[o]))})})}function vt(e){return e&&typeof e.getElementsByTagName!==Le&&e}for(Y in G=lt.support={},Z=lt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},ae=lt.setDocument=function(e){var t,n=e?e.ownerDocument||e:_e,r=n.defaultView;return n!==se&&9===n.nodeType&&n.documentElement?(se=n,ue=n.documentElement,ce=!Z(n),r&&r!==function(e){try{return e.top}catch(t){}return null}(r)&&(r.addEventListener?r.addEventListener("unload",function(){ae()},!1):r.attachEvent&&r.attachEvent("onunload",function(){ae()})),G.attributes=!0,G.getElementsByTagName=!0,G.getElementsByClassName=ot.test(n.getElementsByClassName),G.getById=!0,J.find.ID=function(e,t){if(typeof t.getElementById!==Le&&ce){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},J.filter.ID=function(e){var t=e.replace(ut,ct);return function(e){return e.getAttribute("id")===t}},J.find.TAG=G.getElementsByTagName?function(e,t){if(typeof t.getElementsByTagName!==Le)return t.getElementsByTagName(e)}:function(e,t){var n,r=[],o=0,i=t.getElementsByTagName(e);if("*"===e){for(;n=i[o++];)1===n.nodeType&&r.push(n);return r}return i},J.find.CLASS=G.getElementsByClassName&&function(e,t){if(ce)return t.getElementsByClassName(e)},fe=[],le=[],G.disconnectedMatch=!0,le=le.length&&new RegExp(le.join("|")),fe=fe.length&&new RegExp(fe.join("|")),t=ot.test(ue.compareDocumentPosition),de=t||ot.test(ue.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},Ie=t?function(e,t){if(e===t)return ie=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!G.sortDetached&&t.compareDocumentPosition(e)===r?e===n||e.ownerDocument===_e&&de(_e,e)?-1:t===n||t.ownerDocument===_e&&de(_e,t)?1:oe?je.call(oe,e)-je.call(oe,t):0:4&r?-1:1)}:function(e,t){if(e===t)return ie=!0,0;var r,o=0,i=e.parentNode,a=t.parentNode,s=[e],u=[t];if(!i||!a)return e===n?-1:t===n?1:i?-1:a?1:oe?je.call(oe,e)-je.call(oe,t):0;if(i===a)return mt(e,t);for(r=e;r=r.parentNode;)s.unshift(r);for(r=t;r=r.parentNode;)u.unshift(r);for(;s[o]===u[o];)o++;return o?mt(s[o],u[o]):s[o]===_e?-1:u[o]===_e?1:0},n):se},lt.matches=function(e,t){return lt(e,null,null,t)},lt.matchesSelector=function(e,t){if((e.ownerDocument||e)!==se&&ae(e),t=t.replace(Qe,"='$1']"),G.matchesSelector&&ce&&(!fe||!fe.test(t))&&(!le||!le.test(t)))try{var n=(void 0).call(e,t);if(n||G.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(yC){}return lt(t,se,null,[e]).length>0},lt.contains=function(e,t){return(e.ownerDocument||e)!==se&&ae(e),de(e,t)},lt.attr=function(e,t){(e.ownerDocument||e)!==se&&ae(e);var n=J.attrHandle[t.toLowerCase()],r=n&&Fe.call(J.attrHandle,t.toLowerCase())?n(e,t,!ce):undefined;return r!==undefined?r:G.attributes||!ce?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},lt.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},lt.uniqueSort=function(e){var t,n=[],r=0,o=0;if(ie=!G.detectDuplicates,oe=!G.sortStable&&e.slice(0),e.sort(Ie),ie){for(;t=e[o++];)t===e[o]&&(r=n.push(o));for(;r--;)e.splice(n[r],1)}return oe=null,e},Q=lt.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=Q(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[r++];)n+=Q(t);return n},(J=lt.selectors={cacheLength:50,createPseudo:dt,match:tt,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(ut,ct),e[3]=(e[3]||e[4]||e[5]||"").replace(ut,ct),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||lt.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&lt.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return tt.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&Ze.test(n)&&(t=ee(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(ut,ct).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=De[e+" "];return t||(t=new RegExp("(^|"+$e+")"+e+"("+$e+"|$)"))&&De(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==Le&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var o=lt.attr(r,e);return null==o?"!="===t:!t||(o+="","="===t?o===n:"!="===t?o!==n:"^="===t?n&&0===o.indexOf(n):"*="===t?n&&o.indexOf(n)>-1:"$="===t?n&&o.slice(-n.length)===n:"~="===t?(" "+o+" ").indexOf(n)>-1:"|="===t&&(o===n||o.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,o){var i="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===o?function(e){return!!e.parentNode}:function(t,n,u){var c,l,f,d,m,p,g=i!==a?"nextSibling":"previousSibling",h=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!u&&!s;if(h){if(i){for(;g;){for(f=t;f=f[g];)if(s?f.nodeName.toLowerCase()===v:1===f.nodeType)return!1;p=g="only"===e&&!p&&"nextSibling"}return!0}if(p=[a?h.firstChild:h.lastChild],a&&y){for(m=(c=(l=h[Ae]||(h[Ae]={}))[e]||[])[0]===Be&&c[1],d=c[0]===Be&&c[2],f=m&&h.childNodes[m];f=++m&&f&&f[g]||(d=m=0)||p.pop();)if(1===f.nodeType&&++d&&f===t){l[e]=[Be,m,d];break}}else if(y&&(c=(t[Ae]||(t[Ae]={}))[e])&&c[0]===Be)d=c[1];else for(;(f=++m&&f&&f[g]||(d=m=0)||p.pop())&&((s?f.nodeName.toLowerCase()!==v:1!==f.nodeType)||!++d||(y&&((f[Ae]||(f[Ae]={}))[e]=[Be,d]),f!==t)););return(d-=o)===r||d%r==0&&d/r>=0}}},PSEUDO:function(e,t){var n,r=J.pseudos[e]||J.setFilters[e.toLowerCase()]||lt.error("unsupported pseudo: "+e);return r[Ae]?r(t):r.length>1?(n=[e,e,"",t],J.setFilters.hasOwnProperty(e.toLowerCase())?dt(function(e,n){for(var o,i=r(e,t),a=i.length;a--;)e[o=je.call(e,i[a])]=!(n[o]=i[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:dt(function(e){var t=[],n=[],r=te(e.replace(Ye,"$1"));return r[Ae]?dt(function(e,t,n,o){for(var i,a=r(e,null,o,[]),s=e.length;s--;)(i=a[s])&&(e[s]=!(t[s]=i))}):function(e,o,i){return t[0]=e,r(t,null,i,n),!n.pop()}}),has:dt(function(e){return function(t){return lt(e,t).length>0}}),contains:dt(function(e){return e=e.replace(ut,ct),function(t){return(t.textContent||t.innerText||Q(t)).indexOf(e)>-1}}),lang:dt(function(e){return et.test(e||"")||lt.error("unsupported lang: "+e),e=e.replace(ut,ct).toLowerCase(),function(t){var n;do{if(n=ce?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(e){var t=window.location&&window.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===ue},focus:function(e){return e===se.activeElement&&(!se.hasFocus||se.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return!1===e.disabled},disabled:function(e){return!0===e.disabled},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!J.pseudos.empty(e)},header:function(e){return rt.test(e.nodeName)},input:function(e){return nt.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[n<0?n+t:n]}),even:ht(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ht(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=J.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})J.pseudos[Y]=pt(Y);for(Y in{submit:!0,reset:!0})J.pseudos[Y]=gt(Y);function yt(){}function bt(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function Ct(e,t,n){var r=t.dir,o=n&&"parentNode"===r,i=Re++;return t.first?function(t,n,i){for(;t=t[r];)if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,a){var s,u,c=[Be,i];if(a){for(;t=t[r];)if((1===t.nodeType||o)&&e(t,n,a))return!0}else for(;t=t[r];)if(1===t.nodeType||o){if((s=(u=t[Ae]||(t[Ae]={}))[r])&&s[0]===Be&&s[1]===i)return c[2]=s[2];if(u[r]=c,c[2]=e(t,n,a))return!0}}}function xt(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)if(!e[o](t,n,r))return!1;return!0}:e[0]}function wt(e,t,n,r,o){for(var i,a=[],s=0,u=e.length,c=null!=t;s<u;s++)(i=e[s])&&(n&&!n(i,r,o)||(a.push(i),c&&t.push(s)));return a}function Nt(e,t,n,r,o,i){return r&&!r[Ae]&&(r=Nt(r)),o&&!o[Ae]&&(o=Nt(o,i)),dt(function(i,a,s,u){var c,l,f,d=[],m=[],p=a.length,g=i||function(e,t,n){for(var r=0,o=t.length;r<o;r++)lt(e,t[r],n);return n}(t||"*",s.nodeType?[s]:s,[]),h=!e||!i&&t?g:wt(g,d,e,s,u),v=n?o||(i?e:p||r)?[]:a:h;if(n&&n(h,v,s,u),r)for(c=wt(v,m),r(c,[],s,u),l=c.length;l--;)(f=c[l])&&(v[m[l]]=!(h[m[l]]=f));if(i){if(o||e){if(o){for(c=[],l=v.length;l--;)(f=v[l])&&c.push(h[l]=f);o(null,v=[],c,u)}for(l=v.length;l--;)(f=v[l])&&(c=o?je.call(i,f):d[l])>-1&&(i[c]=!(a[c]=f))}}else v=wt(v===a?v.splice(p,v.length):v),o?o(null,a,v,u):He.apply(a,v)})}function Et(e){for(var t,n,r,o=e.length,i=J.relative[e[0].type],a=i||J.relative[" "],s=i?1:0,u=Ct(function(e){return e===t},a,!0),c=Ct(function(e){return je.call(t,e)>-1},a,!0),l=[function(e,n,r){return!i&&(r||n!==re)||((t=n).nodeType?u(e,n,r):c(e,n,r))}];s<o;s++)if(n=J.relative[e[s].type])l=[Ct(xt(l),n)];else{if((n=J.filter[e[s].type].apply(null,e[s].matches))[Ae]){for(r=++s;r<o&&!J.relative[e[r].type];r++);return Nt(s>1&&xt(l),s>1&&bt(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(Ye,"$1"),n,s<r&&Et(e.slice(s,r)),r<o&&Et(e=e.slice(r)),r<o&&bt(e))}l.push(n)}return xt(l)}yt.prototype=J.filters=J.pseudos,J.setFilters=new yt,ee=lt.tokenize=function(e,t){var n,r,o,i,a,s,u,c=Oe[e+" "];if(c)return t?0:c.slice(0);for(a=e,s=[],u=J.preFilter;a;){for(i in n&&!(r=Ge.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(o=[])),n=!1,(r=Je.exec(a))&&(n=r.shift(),o.push({value:n,type:r[0].replace(Ye," ")}),a=a.slice(n.length)),J.filter)!(r=tt[i].exec(a))||u[i]&&!(r=u[i](r))||(n=r.shift(),o.push({value:n,type:i,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?lt.error(e):Oe(e,s).slice(0)},te=lt.compile=function(e,t){var n,r,o,i,a,s,u=[],c=[],l=Pe[e+" "];if(!l){for(t||(t=ee(e)),n=t.length;n--;)(l=Et(t[n]))[Ae]?u.push(l):c.push(l);(l=Pe(e,(r=c,i=(o=u).length>0,a=r.length>0,s=function(e,t,n,s,u){var c,l,f,d=0,m="0",p=e&&[],g=[],h=re,v=e||a&&J.find.TAG("*",u),y=Be+=null==h?1:Math.random()||.1,b=v.length;for(u&&(re=t!==se&&t);m!==b&&null!=(c=v[m]);m++){if(a&&c){for(l=0;f=r[l++];)if(f(c,t,n)){s.push(c);break}u&&(Be=y)}i&&((c=!f&&c)&&d--,e&&p.push(c))}if(d+=m,i&&m!==d){for(l=0;f=o[l++];)f(p,g,t,n);if(e){if(d>0)for(;m--;)p[m]||g[m]||(g[m]=Ue.call(s));g=wt(g)}He.apply(s,g),u&&!e&&g.length>0&&d+o.length>1&&lt.uniqueSort(s)}return u&&(Be=y,re=h),p},i?dt(s):s))).selector=e}return l},ne=lt.select=function(e,t,n,r){var o,i,a,s,u,c="function"==typeof e&&e,l=!r&&ee(e=c.selector||e);if(n=n||[],1===l.length){if((i=l[0]=l[0].slice(0)).length>2&&"ID"===(a=i[0]).type&&G.getById&&9===t.nodeType&&ce&&J.relative[i[1].type]){if(!(t=(J.find.ID(a.matches[0].replace(ut,ct),t)||[])[0]))return n;c&&(t=t.parentNode),e=e.slice(i.shift().value.length)}for(o=tt.needsContext.test(e)?0:i.length;o--&&(a=i[o],!J.relative[s=a.type]);)if((u=J.find[s])&&(r=u(a.matches[0].replace(ut,ct),at.test(i[0].type)&&vt(t.parentNode)||t))){if(i.splice(o,1),!(e=r.length&&bt(i)))return He.apply(n,r),n;break}}return(c||te(e,l))(r,t,!ce,n,at.test(e)&&vt(t.parentNode)||t),n},G.sortStable=Ae.split("").sort(Ie).join("")===Ae,G.detectDuplicates=!!ie,ae(),G.sortDetached=!0;var St=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},kt=function(e,t,n){var r,o;if(!e)return 0;if(n=n||e,e.length!==undefined){for(r=0,o=e.length;r<o;r++)if(!1===t.call(n,e[r],r,e))return 0}else for(r in e)if(e.hasOwnProperty(r)&&!1===t.call(n,e[r],r,e))return 0;return 1},Tt=function(e,t,n){var r,o;for(r=0,o=e.length;r<o;r++)if(t.call(n,e[r],r,e))return r;return-1},At={isArray:St,toArray:function(e){var t,n,r=e;if(!St(e))for(r=[],t=0,n=e.length;t<n;t++)r[t]=e[t];return r},each:kt,map:function(e,t){var n=[];return kt(e,function(r,o){n.push(t(r,o,e))}),n},filter:function(e,t){var n=[];return kt(e,function(r,o){t&&!t(r,o,e)||n.push(r)}),n},indexOf:function(e,t){var n,r;if(e)for(n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},reduce:function(e,t,n,r){var o=0;for(arguments.length<3&&(n=e[0]);o<e.length;o++)n=t.call(r,n,e[o],o);return n},findIndex:Tt,find:function(e,t,n){var r=Tt(e,t,n);return-1!==r?e[r]:undefined},last:function(e){return e[e.length-1]}},_t=/^\s*|\s*$/g,Bt=function(e){return null===e||e===undefined?"":(""+e).replace(_t,"")},Rt=function(e,t){return t?!("array"!==t||!At.isArray(e))||typeof e===t:e!==undefined},Dt=function(e,t,n,r){r=r||this,e&&(n&&(e=e[n]),At.each(e,function(e,o){if(!1===t.call(r,e,o,n))return!1;Dt(e,t,n,r)}))},Ot={trim:Bt,isArray:At.isArray,is:Rt,toArray:At.toArray,makeMap:function(e,t,n){var r;for(e=e||[],t=t||",","string"==typeof e&&(e=e.split(t)),n=n||{},r=e.length;r--;)n[e[r]]={};return n},each:At.each,map:At.map,grep:At.filter,inArray:At.indexOf,hasOwn:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},extend:function(e,t){for(var n,r,o,i=[],a=2;a<arguments.length;a++)i[a-2]=arguments[a];var s,u=arguments;for(n=1,r=u.length;n<r;n++)for(o in t=u[n])t.hasOwnProperty(o)&&(s=t[o])!==undefined&&(e[o]=s);return e},create:function(e,t,n){var r,o,i,a,s,u=this,c=0;if(e=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(e),i=e[3].match(/(^|\.)(\w+)$/i)[2],!(o=u.createNS(e[3].replace(/\.\w+$/,""),n))[i]){if("static"===e[2])return o[i]=t,void(this.onCreate&&this.onCreate(e[2],e[3],o[i]));t[i]||(t[i]=function(){},c=1),o[i]=t[i],u.extend(o[i].prototype,t),e[5]&&(r=u.resolve(e[5]).prototype,a=e[5].match(/\.(\w+)$/i)[1],s=o[i],o[i]=c?function(){return r[a].apply(this,arguments)}:function(){return this.parent=r[a],s.apply(this,arguments)},o[i].prototype[i]=o[i],u.each(r,function(e,t){o[i].prototype[t]=r[t]}),u.each(t,function(e,t){r[t]?o[i].prototype[t]=function(){return this.parent=r[t],e.apply(this,arguments)}:t!==i&&(o[i].prototype[t]=e)})),u.each(t["static"],function(e,t){o[i][t]=e})}},walk:Dt,createNS:function(e,t){var n,r;for(t=t||window,e=e.split("."),n=0;n<e.length;n++)t[r=e[n]]||(t[r]={}),t=t[r];return t},resolve:function(e,t){var n,r;for(t=t||window,n=0,r=(e=e.split(".")).length;n<r&&(t=t[e[n]]);n++);return t},explode:function(e,t){return!e||Rt(e,"array")?e:At.map(e.split(t||","),Bt)},_addCacheSuffix:function(e){var t=me.cacheSuffix;return t&&(e+=(-1===e.indexOf("?")?"?":"&")+t),e}},Pt=document,It=Array.prototype.push,Lt=Array.prototype.slice,Mt=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,Ft=Te.Event,zt=Ot.makeMap("children,contents,next,prev"),Ut=function(e){return void 0!==e},Vt=function(e){return"string"==typeof e},Ht=function(e,t){var n,r,o;for(o=(t=t||Pt).createElement("div"),n=t.createDocumentFragment(),o.innerHTML=e;r=o.firstChild;)n.appendChild(r);return n},qt=function(e,t,n,r){var o;if(Vt(t))t=Ht(t,rn(e[0]));else if(t.length&&!t.nodeType){if(t=Qt.makeArray(t),r)for(o=t.length-1;o>=0;o--)qt(e,t[o],n,r);else for(o=0;o<t.length;o++)qt(e,t[o],n,r);return e}if(t.nodeType)for(o=e.length;o--;)n.call(e[o],t);return e},jt=function(e,t){return e&&t&&-1!==(" "+e.className+" ").indexOf(" "+t+" ")},$t=function(e,t,n){var r,o;return t=Qt(t)[0],e.each(function(){var e=this;n&&r===e.parentNode?o.appendChild(e):(r=e.parentNode,o=t.cloneNode(!1),e.parentNode.insertBefore(o,e),o.appendChild(e))}),e},Wt=Ot.makeMap("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"," "),Kt=Ot.makeMap("checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected"," "),Xt={"for":"htmlFor","class":"className",readonly:"readOnly"},Yt={"float":"cssFloat"},Gt={},Jt={},Qt=function(e,t){return new Qt.fn.init(e,t)},Zt=/^\s*|\s*$/g,en=function(e){return null===e||e===undefined?"":(""+e).replace(Zt,"")},tn=function(e,t){var n,r,o,i;if(e)if((n=e.length)===undefined){for(r in e)if(e.hasOwnProperty(r)&&(i=e[r],!1===t.call(i,r,i)))break}else for(o=0;o<n&&(i=e[o],!1!==t.call(i,o,i));o++);return e},nn=function(e,t){var n=[];return tn(e,function(e,r){t(r,e)&&n.push(r)}),n},rn=function(e){return e?9===e.nodeType?e:e.ownerDocument:Pt};Qt.fn=Qt.prototype={constructor:Qt,selector:"",context:null,length:0,init:function(e,t){var n,r,o=this;if(!e)return o;if(e.nodeType)return o.context=o[0]=e,o.length=1,o;if(t&&t.nodeType)o.context=t;else{if(t)return Qt(e).attr(t);o.context=t=document}if(Vt(e)){if(o.selector=e,!(n="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:Mt.exec(e)))return Qt(t).find(e);if(n[1])for(r=Ht(e,rn(t)).firstChild;r;)It.call(o,r),r=r.nextSibling;else{if(!(r=rn(t).getElementById(n[2])))return o;if(r.id!==n[2])return o.find(e);o.length=1,o[0]=r}}else this.add(e,!1);return o},toArray:function(){return Ot.toArray(this)},add:function(e,t){var n,r,o=this;if(Vt(e))return o.add(Qt(e));if(!1!==t)for(n=Qt.unique(o.toArray().concat(Qt.makeArray(e))),o.length=n.length,r=0;r<n.length;r++)o[r]=n[r];else It.apply(o,Qt.makeArray(e));return o},attr:function(e,t){var n,r=this;if("object"==typeof e)tn(e,function(e,t){r.attr(e,t)});else{if(!Ut(t)){if(r[0]&&1===r[0].nodeType){if((n=Gt[e])&&n.get)return n.get(r[0],e);if(Kt[e])return r.prop(e)?e:undefined;null===(t=r[0].getAttribute(e,2))&&(t=undefined)}return t}this.each(function(){var n;if(1===this.nodeType){if((n=Gt[e])&&n.set)return void n.set(this,t);null===t?this.removeAttribute(e,2):this.setAttribute(e,t,2)}})}return r},removeAttr:function(e){return this.attr(e,null)},prop:function(e,t){var n=this;if("object"==typeof(e=Xt[e]||e))tn(e,function(e,t){n.prop(e,t)});else{if(!Ut(t))return n[0]&&n[0].nodeType&&e in n[0]?n[0][e]:t;this.each(function(){1===this.nodeType&&(this[e]=t)})}return n},css:function(e,t){var n,r,o=this,i=function(e){return e.replace(/-(\D)/g,function(e,t){return t.toUpperCase()})},a=function(e){return e.replace(/[A-Z]/g,function(e){return"-"+e})};if("object"==typeof e)tn(e,function(e,t){o.css(e,t)});else if(Ut(t))e=i(e),"number"!=typeof t||Wt[e]||(t=t.toString()+"px"),o.each(function(){var n=this.style;if((r=Jt[e])&&r.set)r.set(this,t);else{try{this.style[Yt[e]||e]=t}catch(o){}null!==t&&""!==t||(n.removeProperty?n.removeProperty(a(e)):n.removeAttribute(e))}});else{if(n=o[0],(r=Jt[e])&&r.get)return r.get(n);if(n.ownerDocument.defaultView)try{return n.ownerDocument.defaultView.getComputedStyle(n,null).getPropertyValue(a(e))}catch(s){return undefined}else if(n.currentStyle)return n.currentStyle[i(e)]}return o},remove:function(){for(var e,t=this.length;t--;)e=this[t],Ft.clean(e),e.parentNode&&e.parentNode.removeChild(e);return this},empty:function(){for(var e,t=this.length;t--;)for(e=this[t];e.firstChild;)e.removeChild(e.firstChild);return this},html:function(e){var t,n=this;if(Ut(e)){t=n.length;try{for(;t--;)n[t].innerHTML=e}catch(r){Qt(n[t]).empty().append(e)}return n}return n[0]?n[0].innerHTML:""},text:function(e){var t,n=this;if(Ut(e)){for(t=n.length;t--;)"innerText"in n[t]?n[t].innerText=e:n[0].textContent=e;return n}return n[0]?n[0].innerText||n[0].textContent:""},append:function(){return qt(this,arguments,function(e){(1===this.nodeType||this.host&&1===this.host.nodeType)&&this.appendChild(e)})},prepend:function(){return qt(this,arguments,function(e){(1===this.nodeType||this.host&&1===this.host.nodeType)&&this.insertBefore(e,this.firstChild)},!0)},before:function(){return this[0]&&this[0].parentNode?qt(this,arguments,function(e){this.parentNode.insertBefore(e,this)}):this},after:function(){return this[0]&&this[0].parentNode?qt(this,arguments,function(e){this.parentNode.insertBefore(e,this.nextSibling)},!0):this},appendTo:function(e){return Qt(e).append(this),this},prependTo:function(e){return Qt(e).prepend(this),this},replaceWith:function(e){return this.before(e).remove()},wrap:function(e){return $t(this,e)},wrapAll:function(e){return $t(this,e,!0)},wrapInner:function(e){return this.each(function(){Qt(this).contents().wrapAll(e)}),this},unwrap:function(){return this.parent().each(function(){Qt(this).replaceWith(this.childNodes)})},clone:function(){var e=[];return this.each(function(){e.push(this.cloneNode(!0))}),Qt(e)},addClass:function(e){return this.toggleClass(e,!0)},removeClass:function(e){return this.toggleClass(e,!1)},toggleClass:function(e,t){var n=this;return"string"!=typeof e?n:(-1!==e.indexOf(" ")?tn(e.split(" "),function(){n.toggleClass(this,t)}):n.each(function(n,r){var o,i;(i=jt(r,e))!==t&&(o=r.className,i?r.className=en((" "+o+" ").replace(" "+e+" "," ")):r.className+=o?" "+e:e)}),n)},hasClass:function(e){return jt(this[0],e)},each:function(e){return tn(this,e)},on:function(e,t){return this.each(function(){Ft.bind(this,e,t)})},off:function(e,t){return this.each(function(){Ft.unbind(this,e,t)})},trigger:function(e){return this.each(function(){"object"==typeof e?Ft.fire(this,e.type,e):Ft.fire(this,e)})},show:function(){return this.css("display","")},hide:function(){return this.css("display","none")},slice:function(){return new Qt(Lt.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},find:function(e){var t,n,r=[];for(t=0,n=this.length;t<n;t++)Qt.find(e,this[t],r);return Qt(r)},filter:function(e){return Qt("function"==typeof e?nn(this.toArray(),function(t,n){return e(n,t)}):Qt.filter(e,this.toArray()))},closest:function(e){var t=[];return e instanceof Qt&&(e=e[0]),this.each(function(n,r){for(;r;){if("string"==typeof e&&Qt(r).is(e)){t.push(r);break}if(r===e){t.push(r);break}r=r.parentNode}}),Qt(t)},offset:function(e){var t,n,r,o,i=0,a=0;return e?this.css(e):((t=this[0])&&(r=(n=t.ownerDocument).documentElement,t.getBoundingClientRect&&(i=(o=t.getBoundingClientRect()).left+(r.scrollLeft||n.body.scrollLeft)-r.clientLeft,a=o.top+(r.scrollTop||n.body.scrollTop)-r.clientTop)),{left:i,top:a})},push:It,sort:[].sort,splice:[].splice},Ot.extend(Qt,{extend:Ot.extend,makeArray:function(e){return(t=e)&&t===t.window||e.nodeType?[e]:Ot.toArray(e);var t},inArray:function(e,t){var n;if(t.indexOf)return t.indexOf(e);for(n=t.length;n--;)if(t[n]===e)return n;return-1},isArray:Ot.isArray,each:tn,trim:en,grep:nn,find:lt,expr:lt.selectors,unique:lt.uniqueSort,text:lt.getText,contains:lt.contains,filter:function(e,t,n){var r=t.length;for(n&&(e=":not("+e+")");r--;)1!==t[r].nodeType&&t.splice(r,1);return t=1===t.length?Qt.find.matchesSelector(t[0],e)?[t[0]]:[]:Qt.find.matches(e,t)}});var on=function(e,t,n){var r=[],o=e[t];for("string"!=typeof n&&n instanceof Qt&&(n=n[0]);o&&9!==o.nodeType;){if(n!==undefined){if(o===n)break;if("string"==typeof n&&Qt(o).is(n))break}1===o.nodeType&&r.push(o),o=o[t]}return r},an=function(e,t,n,r){var o=[];for(r instanceof Qt&&(r=r[0]);e;e=e[t])if(!n||e.nodeType===n){if(r!==undefined){if(e===r)break;if("string"==typeof r&&Qt(e).is(r))break}o.push(e)}return o},sn=function(e,t,n){for(e=e[t];e;e=e[t])if(e.nodeType===n)return e;return null};tn({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return on(e,"parentNode")},next:function(e){return sn(e,"nextSibling",1)},prev:function(e){return sn(e,"previousSibling",1)},children:function(e){return an(e.firstChild,"nextSibling",1)},contents:function(e){return Ot.toArray(("iframe"===e.nodeName?e.contentDocument||e.contentWindow.document:e).childNodes)}},function(e,t){Qt.fn[e]=function(n){var r=[];return this.each(function(){var e=t.call(r,this,n,r);e&&(Qt.isArray(e)?r.push.apply(r,e):r.push(e))}),this.length>1&&(zt[e]||(r=Qt.unique(r)),0===e.indexOf("parents")&&(r=r.reverse())),r=Qt(r),n?r.filter(n):r}}),tn({parentsUntil:function(e,t){return on(e,"parentNode",t)},nextUntil:function(e,t){return an(e,"nextSibling",1,t).slice(1)},prevUntil:function(e,t){return an(e,"previousSibling",1,t).slice(1)}},function(e,t){Qt.fn[e]=function(n,r){var o=[];return this.each(function(){var e=t.call(o,this,n,o);e&&(Qt.isArray(e)?o.push.apply(o,e):o.push(e))}),this.length>1&&(o=Qt.unique(o),0!==e.indexOf("parents")&&"prevUntil"!==e||(o=o.reverse())),o=Qt(o),r?o.filter(r):o}}),Qt.fn.is=function(e){return!!e&&this.filter(e).length>0},Qt.fn.init.prototype=Qt.fn,Qt.overrideDefaults=function(e){var t,n=function(r,o){return t=t||e(),0===arguments.length&&(r=t.element),o||(o=t.context),new n.fn.init(r,o)};return Qt.extend(n,this),n};var un=function(e,t,n){tn(n,function(n,r){e[n]=e[n]||{},e[n][t]=r})};me.ie&&me.ie<8&&(un(Gt,"get",{maxlength:function(e){var t=e.maxLength;return 2147483647===t?undefined:t},size:function(e){var t=e.size;return 20===t?undefined:t},"class":function(e){return e.className},style:function(e){var t=e.style.cssText;return 0===t.length?undefined:t}}),un(Gt,"set",{"class":function(e,t){e.className=t},style:function(e,t){e.style.cssText=t}})),me.ie&&me.ie<9&&(Yt["float"]="styleFloat",un(Jt,"set",{opacity:function(e,t){var n=e.style;null===t||""===t?n.removeAttribute("filter"):(n.zoom=1,n.filter="alpha(opacity="+100*t+")")}})),Qt.attrHooks=Gt,Qt.cssHooks=Jt;var cn,ln,fn,dn,mn=function(e){var t,n=!1;return function(){return n||(n=!0,t=e.apply(null,arguments)),t}},pn=function(e,t){var n=function(e,t){for(var n=0;n<e.length;n++){var r=e[n];if(r.test(t))return r}return undefined}(e,t);if(!n)return{major:0,minor:0};var r=function(e){return Number(t.replace(n,"$"+e))};return hn(r(1),r(2))},gn=function(){return hn(0,0)},hn=function(e,t){return{major:e,minor:t}},vn={nu:hn,detect:function(e,t){var n=String(t).toLowerCase();return 0===e.length?gn():pn(e,n)},unknown:gn},yn="Firefox",bn=function(e,t){return function(){return t===e}},Cn=function(e){var t=e.current;return{current:t,version:e.version,isEdge:bn("Edge",t),isChrome:bn("Chrome",t),isIE:bn("IE",t),isOpera:bn("Opera",t),isFirefox:bn(yn,t),isSafari:bn("Safari",t)}},xn={unknown:function(){return Cn({current:undefined,version:vn.unknown()})},nu:Cn,edge:y.constant("Edge"),chrome:y.constant("Chrome"),ie:y.constant("IE"),opera:y.constant("Opera"),firefox:y.constant(yn),safari:y.constant("Safari")},wn="Windows",Nn="Android",En="Solaris",Sn="FreeBSD",kn=function(e,t){return function(){return t===e}},Tn=function(e){var t=e.current;return{current:t,version:e.version,isWindows:kn(wn,t),isiOS:kn("iOS",t),isAndroid:kn(Nn,t),isOSX:kn("OSX",t),isLinux:kn("Linux",t),isSolaris:kn(En,t),isFreeBSD:kn(Sn,t)}},An={unknown:function(){return Tn({current:undefined,version:vn.unknown()})},nu:Tn,windows:y.constant(wn),ios:y.constant("iOS"),android:y.constant(Nn),linux:y.constant("Linux"),osx:y.constant("OSX"),solaris:y.constant(En),freebsd:y.constant(Sn)},_n=function(e,t){var n=String(t).toLowerCase();return M.find(e,function(e){return e.search(n)})},Bn=function(e,t){return _n(e,t).map(function(e){var n=vn.detect(e.versionRegexes,t);return{current:e.name,version:n}})},Rn=function(e,t){return _n(e,t).map(function(e){var n=vn.detect(e.versionRegexes,t);return{current:e.name,version:n}})},Dn=function(e,t){return-1!==e.indexOf(t)},On=function(e){return e.replace(/^\s+|\s+$/g,"")},Pn=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,In=function(e){return function(t){return Dn(t,e)}},Ln=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(e){return Dn(e,"edge/")&&Dn(e,"chrome")&&Dn(e,"safari")&&Dn(e,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,Pn],search:function(e){return Dn(e,"chrome")&&!Dn(e,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(e){return Dn(e,"msie")||Dn(e,"trident")}},{name:"Opera",versionRegexes:[Pn,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:In("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:In("firefox")},{name:"Safari",versionRegexes:[Pn,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(e){return(Dn(e,"safari")||Dn(e,"mobile/"))&&Dn(e,"applewebkit")}}],Mn=[{name:"Windows",search:In("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(e){return Dn(e,"iphone")||Dn(e,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:In("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:In("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:In("linux"),versionRegexes:[]},{name:"Solaris",search:In("sunos"),versionRegexes:[]},{name:"FreeBSD",search:In("freebsd"),versionRegexes:[]}],Fn={browsers:y.constant(Ln),oses:y.constant(Mn)},zn=function(e){var t,n,r,o,i,a,s,u,c,l,f,d=Fn.browsers(),m=Fn.oses(),p=Bn(d,e).fold(xn.unknown,xn.nu),g=Rn(m,e).fold(An.unknown,An.nu);return{browser:p,os:g,deviceType:(n=p,r=e,o=(t=g).isiOS()&&!0===/ipad/i.test(r),i=t.isiOS()&&!o,a=t.isAndroid()&&3===t.version.major,s=t.isAndroid()&&4===t.version.major,u=o||a||s&&!0===/mobile/i.test(r),c=t.isiOS()||t.isAndroid(),l=c&&!u,f=n.isSafari()&&t.isiOS()&&!1===/safari/i.test(r),{isiPad:y.constant(o),isiPhone:y.constant(i),isTablet:y.constant(u),isPhone:y.constant(l),isTouch:y.constant(c),isAndroid:t.isAndroid,isiOS:t.isiOS,isWebView:y.constant(f)})}},Un={detect:mn(function(){var e=navigator.userAgent;return zn(e)})},Vn=function(e){if(null===e||e===undefined)throw new Error("Node cannot be null or undefined");return{dom:y.constant(e)}},Hn={fromHtml:function(e,t){var n=(t||document).createElement("div");if(n.innerHTML=e,!n.hasChildNodes()||n.childNodes.length>1)throw console.error("HTML does not have a single root node",e),"HTML must have a single root node";return Vn(n.childNodes[0])},fromTag:function(e,t){var n=(t||document).createElement(e);return Vn(n)},fromText:function(e,t){var n=(t||document).createTextNode(e);return Vn(n)},fromDom:Vn,fromPoint:function(e,t,n){return E.from(e.dom().elementFromPoint(t,n)).map(Vn)}},qn=8,jn=9,$n=1,Wn=3,Kn=function(e){return e.dom().nodeName.toLowerCase()},Xn=function(e){return e.dom().nodeType},Yn=function(e){return function(t){return Xn(t)===e}},Gn=Yn($n),Jn=Yn(Wn),Qn=Yn(jn),Zn={name:Kn,type:Xn,value:function(e){return e.dom().nodeValue},isElement:Gn,isText:Jn,isDocument:Qn,isComment:function(e){return Xn(e)===qn||"#comment"===Kn(e)}},er=function(e){return function(t){return function(e){if(null===e)return"null";var t=typeof e;return"object"===t&&Array.prototype.isPrototypeOf(e)?"array":"object"===t&&String.prototype.isPrototypeOf(e)?"string":t}(t)===e}},tr={isString:er("string"),isObject:er("object"),isArray:er("array"),isNull:er("null"),isBoolean:er("boolean"),isUndefined:er("undefined"),isFunction:er("function"),isNumber:er("number")},nr=(cn=Object.keys)===undefined?function(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(n);return t}:cn,rr=function(e,t){for(var n=nr(e),r=0,o=n.length;r<o;r++){var i=n[r];t(e[i],i,e)}},or=function(e,t){var n={};return rr(e,function(r,o){var i=t(r,o,e);n[i.k]=i.v}),n},ir=function(e,t){var n=[];return rr(e,function(e,r){n.push(t(e,r))}),n},ar=function(e){return ir(e,function(e){return e})},sr={bifilter:function(e,t){var n={},r={};return rr(e,function(e,o){(t(e,o)?n:r)[o]=e}),{t:n,f:r}},each:rr,map:function(e,t){return or(e,function(e,n,r){return{k:n,v:t(e,n,r)}})},mapToArray:ir,tupleMap:or,find:function(e,t){for(var n=nr(e),r=0,o=n.length;r<o;r++){var i=n[r],a=e[i];if(t(a,i,e))return E.some(a)}return E.none()},keys:nr,values:ar,size:function(e){return ar(e).length}},ur=function(e,t,n){if(!(tr.isString(n)||tr.isBoolean(n)||tr.isNumber(n)))throw console.error("Invalid call to Attr.set. Key ",t,":: Value ",n,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,n+"")},cr=function(e,t,n){ur(e.dom(),t,n)},lr=function(e,t){var n=e.dom().getAttribute(t);return null===n?undefined:n},fr=function(e,t){var n=e.dom();return!(!n||!n.hasAttribute)&&n.hasAttribute(t)},dr={clone:function(e){return M.foldl(e.dom().attributes,function(e,t){return e[t.name]=t.value,e},{})},set:cr,setAll:function(e,t){var n=e.dom();sr.each(t,function(e,t){ur(n,t,e)})},get:lr,has:fr,remove:function(e,t){e.dom().removeAttribute(t)},hasNone:function(e){var t=e.dom().attributes;return t===undefined||null===t||0===t.length},transfer:function(e,t,n){Zn.isElement(e)&&Zn.isElement(t)&&M.each(n,function(n){var r,o,i;o=t,fr(r=e,i=n)&&!fr(o,i)&&cr(o,i,lr(r,i))})}},mr=mn(function(){return pr(Hn.fromDom(document))}),pr=function(e){var t=e.dom().body;if(null===t||t===undefined)throw"Body is not available yet";return Hn.fromDom(t)},gr={body:mr,getBody:pr,inBody:function(e){var t=Zn.isText(e)?e.dom().parentNode:e.dom();return t!==undefined&&null!==t&&t.ownerDocument.body.contains(t)}},hr=function(e){return e.style!==undefined},vr=function(e,t,n){if(!tr.isString(n))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",n,":: Element ",e),new Error("CSS value must be a string: "+n);hr(e)&&e.style.setProperty(t,n)},yr=function(e,t){return hr(e)?e.style.getPropertyValue(t):""},br=function(e,t){var n=e.dom();sr.each(t,function(e,t){vr(n,t,e)})},Cr=function(e,t){var n=e.dom(),r=window.getComputedStyle(n).getPropertyValue(t),o=""!==r||gr.inBody(e)?r:yr(n,t);return null===o?undefined:o},xr=function(){var e=arguments;return function(){for(var t=new Array(arguments.length),n=0;n<t.length;n++)t[n]=arguments[n];if(e.length!==t.length)throw new Error('Wrong number of arguments to struct. Expected "['+e.length+']", got '+t.length+" arguments");var r={};return M.each(e,function(e,n){r[e]=y.constant(t[n])}),r}},wr=function(e,t){var n=[],r=function(e){return n.push(e),t(e)},o=t(e);do{o=o.bind(r)}while(o.isSome());return n},Nr=function(){return V("Node")},Er=function(e,t,n){return 0!=(e.compareDocumentPosition(t)&n)},Sr=function(e,t){return Er(e,t,Nr().DOCUMENT_POSITION_CONTAINED_BY)},kr=$n,Tr=jn,Ar=function(e){return e.nodeType!==kr&&e.nodeType!==Tr||0===e.childElementCount},_r={all:function(e,t){var n=t===undefined?document:t.dom();return Ar(n)?[]:M.map(n.querySelectorAll(e),Hn.fromDom)},is:function(e,t){var n=e.dom();if(n.nodeType!==kr)return!1;if(n.matches!==undefined)return n.matches(t);if(n.msMatchesSelector!==undefined)return n.msMatchesSelector(t);if(n.webkitMatchesSelector!==undefined)return n.webkitMatchesSelector(t);if(n.mozMatchesSelector!==undefined)return n.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")},one:function(e,t){var n=t===undefined?document:t.dom();return Ar(n)?E.none():E.from(n.querySelector(e)).map(Hn.fromDom)}},Br=function(e,t){return e.dom()===t.dom()},Rr=Un.detect().browser.isIE()?function(e,t){return Sr(e.dom(),t.dom())}:function(e,t){var n=e.dom(),r=t.dom();return n!==r&&n.contains(r)},Dr={eq:Br,isEqualNode:function(e,t){return e.dom().isEqualNode(t.dom())},member:function(e,t){return M.exists(t,y.curry(Br,e))},contains:Rr,is:_r.is},Or=function(e){return Hn.fromDom(e.dom().ownerDocument)},Pr=function(e){var t=e.dom();return E.from(t.parentNode).map(Hn.fromDom)},Ir=function(e){var t=e.dom();return E.from(t.previousSibling).map(Hn.fromDom)},Lr=function(e){var t=e.dom();return E.from(t.nextSibling).map(Hn.fromDom)},Mr=function(e){var t=e.dom();return M.map(t.childNodes,Hn.fromDom)},Fr=function(e,t){var n=e.dom().childNodes;return E.from(n[t]).map(Hn.fromDom)},zr=xr("element","offset"),Ur={owner:Or,defaultView:function(e){var t=e.dom().ownerDocument.defaultView;return Hn.fromDom(t)},documentElement:function(e){var t=Or(e);return Hn.fromDom(t.dom().documentElement)},parent:Pr,findIndex:function(e){return Pr(e).bind(function(t){var n=Mr(t);return M.findIndex(n,function(t){return Dr.eq(e,t)})})},parents:function(e,t){for(var n=tr.isFunction(t)?t:y.constant(!1),r=e.dom(),o=[];null!==r.parentNode&&r.parentNode!==undefined;){var i=r.parentNode,a=Hn.fromDom(i);if(o.push(a),!0===n(a))break;r=i}return o},siblings:function(e){return Pr(e).map(Mr).map(function(t){return M.filter(t,function(t){return!Dr.eq(e,t)})}).getOr([])},prevSibling:Ir,offsetParent:function(e){var t=e.dom();return E.from(t.offsetParent).map(Hn.fromDom)},prevSiblings:function(e){return M.reverse(wr(e,Ir))},nextSibling:Lr,nextSiblings:function(e){return wr(e,Lr)},children:Mr,child:Fr,firstChild:function(e){return Fr(e,0)},lastChild:function(e){return Fr(e,e.dom().childNodes.length-1)},childNodesCount:function(e){return e.dom().childNodes.length},hasChildNodes:function(e){return e.dom().hasChildNodes()},leaf:function(e,t){var n=Mr(e);return n.length>0&&t<n.length?zr(n[t],0):zr(e,t)}},Vr=Un.detect().browser,Hr=function(e){return M.find(e,Zn.isElement)},qr=function(e,t,n){var r,o,i,a=0,s=0,u=e.ownerDocument;if(n=n||e,t){if(n===e&&t.getBoundingClientRect&&"static"===Cr(Hn.fromDom(e),"position"))return{x:a=(o=t.getBoundingClientRect()).left+(u.documentElement.scrollLeft||e.scrollLeft)-u.documentElement.clientLeft,y:s=o.top+(u.documentElement.scrollTop||e.scrollTop)-u.documentElement.clientTop};for(r=t;r&&r!==n&&r.nodeType;)a+=r.offsetLeft||0,s+=r.offsetTop||0,r=r.offsetParent;for(r=t.parentNode;r&&r!==n&&r.nodeType;)a-=r.scrollLeft||0,s-=r.scrollTop||0,r=r.parentNode;s+=(i=Hn.fromDom(t),Vr.isFirefox()&&"table"===Zn.name(i)?Hr(Ur.children(i)).filter(function(e){return"caption"===Zn.name(e)}).bind(function(e){return Hr(Ur.nextSiblings(e)).map(function(t){var n=t.dom().offsetTop,r=e.dom().offsetTop,o=e.dom().offsetHeight;return n<=r?-o:0})}).getOr(0):0)}return{x:a,y:s}},jr=function(e){var t=E.none(),n=[],r=function(e){o()?a(e):n.push(e)},o=function(){return t.isSome()},i=function(e){M.each(e,a)},a=function(e){t.each(function(t){setTimeout(function(){e(t)},0)})};return e(function(e){t=E.some(e),i(n),n=[]}),{get:r,map:function(e){return jr(function(t){r(function(n){t(e(n))})})},isReady:o}},$r={nu:jr,pure:function(e){return jr(function(t){t(e)})}},Wr=function(e){return function(){var t=Array.prototype.slice.call(arguments),n=this;setTimeout(function(){e.apply(n,t)},0)}},Kr=function(e){var t=function(t){e(Wr(t))};return{map:function(e){return Kr(function(n){t(function(t){var r=e(t);n(r)})})},bind:function(e){return Kr(function(n){t(function(t){e(t).get(n)})})},anonBind:function(e){return Kr(function(n){t(function(t){e.get(n)})})},toLazy:function(){return $r.nu(t)},get:t}},Xr={nu:Kr,pure:function(e){return Kr(function(t){t(e)})}},Yr=function(e,t){return t(function(t){var n=[],r=0;0===e.length?t([]):M.each(e,function(o,i){var a;o.get((a=i,function(o){n[a]=o,++r>=e.length&&t(n)}))})})},Gr=function(e){return Yr(e,Xr.nu)},Jr=Gr,Qr=function(e){return{is:function(t){return e===t},isValue:y.constant(!0),isError:y.constant(!1),getOr:y.constant(e),getOrThunk:y.constant(e),getOrDie:y.constant(e),or:function(t){return Qr(e)},orThunk:function(t){return Qr(e)},fold:function(t,n){return n(e)},map:function(t){return Qr(t(e))},each:function(t){t(e)},bind:function(t){return t(e)},exists:function(t){return t(e)},forall:function(t){return t(e)},toOption:function(){return E.some(e)}}},Zr=function(e){return{is:y.constant(!1),isValue:y.constant(!1),isError:y.constant(!0),getOr:y.identity,getOrThunk:function(e){return e()},getOrDie:function(){return y.die(e)()},or:function(e){return e},orThunk:function(e){return e()},fold:function(t,n){return t(e)},map:function(t){return Zr(e)},each:y.noop,bind:function(t){return Zr(e)},exists:y.constant(!1),forall:y.constant(!0),toOption:E.none}},eo={value:Qr,error:Zr},to=function(e,t){var n=e,r=function(e,n,r,o){var i,a;if(e){if(!o&&e[n])return e[n];if(e!==t){if(i=e[r])return i;for(a=e.parentNode;a&&a!==t;a=a.parentNode)if(i=a[r])return i}}};this.current=function(){return n},this.next=function(e){return n=r(n,"firstChild","nextSibling",e)},this.prev=function(e){return n=r(n,"lastChild","previousSibling",e)},this.prev2=function(e){return n=function(e,n,r,o){var i,a,s;if(e){if(i=e[r],t&&i===t)return;if(i){if(!o)for(s=i[n];s;s=s[n])if(!s[n])return s;return i}if((a=e.parentNode)&&a!==t)return a}}(n,"lastChild","previousSibling",e)}},no=function(e){var t;return function(n){return(t=t||M.mapToObject(e,y.constant(!0))).hasOwnProperty(Zn.name(n))}},ro=no(["h1","h2","h3","h4","h5","h6"]),oo=no(["article","aside","details","div","dt","figcaption","footer","form","fieldset","header","hgroup","html","main","nav","section","summary","body","p","dl","multicol","dd","figure","address","center","blockquote","h1","h2","h3","h4","h5","h6","listing","xmp","pre","plaintext","menu","dir","ul","ol","li","hr","table","tbody","thead","tfoot","th","tr","td","caption"]),io={isBlock:oo,isInline:function(e){return Zn.isElement(e)&&!oo(e)},isHeading:ro,isTextBlock:no(["h1","h2","h3","h4","h5","h6","p","div","address","pre","form","blockquote","center","dir","fieldset","header","footer","article","section","hgroup","aside","nav","figure"]),isList:no(["ul","ol","dl"]),isListItem:no(["li","dd","dt"]),isVoid:no(["area","base","basefont","br","col","frame","hr","img","input","isindex","link","meta","param","embed","source","wbr","track"]),isTableSection:no(["thead","tbody","tfoot"]),isTableCell:no(["td","th"]),isBr:function(e){return Zn.isElement(e)&&"br"===Zn.name(e)}},ao=function(e){return function(t){return!!t&&t.nodeType===e}},so=ao(1),uo=function(e){var t=e.toLowerCase().split(" ");return function(e){var n,r;if(e&&e.nodeType)for(r=e.nodeName.toLowerCase(),n=0;n<t.length;n++)if(r===t[n])return!0;return!1}},co=function(e){return function(t){if(so(t)){if(t.contentEditable===e)return!0;if(t.getAttribute("data-mce-contenteditable")===e)return!0}return!1}},lo=ao(3),fo=ao(8),mo=ao(9),po=uo("br"),go=co("true"),ho=co("false"),vo={isText:lo,isElement:so,isComment:fo,isDocument:mo,isBr:po,isContentEditableTrue:go,isContentEditableFalse:ho,matchNodeNames:uo,hasPropValue:function(e,t){return function(n){return so(n)&&n[e]===t}},hasAttribute:function(e,t){return function(t){return so(t)&&t.hasAttribute(e)}},hasAttributeValue:function(e,t){return function(n){return so(n)&&n.getAttribute(e)===t}},matchStyleValues:function(e,t){var n=t.toLowerCase().split(" ");return function(t){var r;if(so(t))for(r=0;r<n.length;r++)if(t.ownerDocument.defaultView.getComputedStyle(t,null).getPropertyValue(e)===n[r])return!0;return!1}},isBogus:function(e){return so(e)&&e.hasAttribute("data-mce-bogus")}},yo=function(e){return e&&"SPAN"===e.tagName&&"bookmark"===e.getAttribute("data-mce-type")},bo=function(e,t){var n,r=t.childNodes;if(!vo.isElement(t)||!yo(t)){for(n=r.length-1;n>=0;n--)bo(e,r[n]);if(!1===vo.isDocument(t)){if(vo.isText(t)&&t.nodeValue.length>0){var o=Ot.trim(t.nodeValue).length;if(e.isBlock(t.parentNode)||o>0)return;if(0===o&&(a=(i=t).previousSibling&&"SPAN"===i.previousSibling.nodeName,s=i.nextSibling&&"SPAN"===i.nextSibling.nodeName,a&&s))return}else if(vo.isElement(t)&&(1===(r=t.childNodes).length&&yo(r[0])&&t.parentNode.insertBefore(r[0],t),r.length||io.isVoid(Hn.fromDom(t))))return;e.remove(t)}var i,a,s;return t}},Co={trimNode:bo},xo=Ot.makeMap,wo=/[&<>\"\u0060\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,No=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,Eo=/[<>&\"\']/g,So=/&#([a-z0-9]+);?|&([a-z0-9]+);/gi,ko={128:"\u20ac",130:"\u201a",131:"\u0192",132:"\u201e",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02c6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017d",145:"\u2018",146:"\u2019",147:"\u201c",148:"\u201d",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02dc",153:"\u2122",154:"\u0161",155:"\u203a",156:"\u0153",158:"\u017e",159:"\u0178"};fn={'"':"&quot;","'":"&#39;","<":"&lt;",">":"&gt;","&":"&amp;","`":"&#96;"},dn={"&lt;":"<","&gt;":">","&amp;":"&","&quot;":'"',"&apos;":"'"};var To=function(e,t){var n,r,o,i={};if(e){for(e=e.split(","),t=t||10,n=0;n<e.length;n+=2)r=String.fromCharCode(parseInt(e[n],t)),fn[r]||(o="&"+e[n+1]+";",i[r]=o,i[o]=r);return i}};ln=To("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);var Ao={encodeRaw:function(e,t){return e.replace(t?wo:No,function(e){return fn[e]||e})},encodeAllRaw:function(e){return(""+e).replace(Eo,function(e){return fn[e]||e})},encodeNumeric:function(e,t){return e.replace(t?wo:No,function(e){return e.length>1?"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";":fn[e]||"&#"+e.charCodeAt(0)+";"})},encodeNamed:function(e,t,n){return n=n||ln,e.replace(t?wo:No,function(e){return fn[e]||n[e]||e})},getEncodeFunc:function(e,t){return t=To(t)||ln,(e=xo(e.replace(/\+/g,","))).named&&e.numeric?function(e,n){return e.replace(n?wo:No,function(e){return fn[e]!==undefined?fn[e]:t[e]!==undefined?t[e]:e.length>1?"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";":"&#"+e.charCodeAt(0)+";"})}:e.named?t?function(e,n){return Ao.encodeNamed(e,n,t)}:Ao.encodeNamed:e.numeric?Ao.encodeNumeric:Ao.encodeRaw},decode:function(e){return e.replace(So,function(e,t){return t?(t="x"===t.charAt(0).toLowerCase()?parseInt(t.substr(1),16):parseInt(t,10))>65535?(t-=65536,String.fromCharCode(55296+(t>>10),56320+(1023&t))):ko[t]||String.fromCharCode(t):dn[e]||ln[e]||(n=e,(r=Hn.fromTag("div").dom()).innerHTML=n,r.textContent||r.innerText||n);var n,r})}},_o={},Bo={},Ro=Ot.makeMap,Do=Ot.each,Oo=Ot.extend,Po=Ot.explode,Io=Ot.inArray,Lo=function(e,t){return(e=Ot.trim(e))?e.split(t||" "):[]},Mo=function(e,t){var n;return e&&(n={},"string"==typeof e&&(e={"*":e}),Do(e,function(e,r){n[r]=n[r.toUpperCase()]="map"===t?Ro(e,/[, ]/):Po(e,/[, ]/)})),n},Fo=function(e){var t,n,r,o,i,a,s,u,c,l,f,d,m,p,g,h,v,y,b,C,x,w,N,E={},S={},k={},T=[],A={},_={},B=function(t,n,r){var o=e[t];return o?o=Ro(o,/[, ]/,Ro(o.toUpperCase(),/[, ]/)):(o=_o[t])||(o=Ro(n," ",Ro(n.toUpperCase()," ")),o=Oo(o,r),_o[t]=o),o};p=(e=e||{}).schema,x={},w=function(e,t,n){var r,o,i,a=function(e,t){var n,r,o={};for(n=0,r=e.length;n<r;n++)o[e[n]]=t||{};return o};for(n=n||[],t=t||"","string"==typeof n&&(n=Lo(n)),r=(e=Lo(e)).length;r--;)i={attributes:a(o=Lo([g,t].join(" "))),attributesOrder:o,children:a(n,Bo)},x[e[r]]=i},N=function(e,t){var n,r,o,i;for(n=(e=Lo(e)).length,t=Lo(t);n--;)for(r=x[e[n]],o=0,i=t.length;o<i;o++)r.attributes[t[o]]={},r.attributesOrder.push(t[o])},r=_o[p]?_o[p]:(g="id accesskey class dir lang style tabindex title role",h="address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul",v="a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd label map noscript object q s samp script select small span strong sub sup textarea u var #text #comment","html4"!==p&&(g+=" contenteditable contextmenu draggable dropzone hidden spellcheck translate",h+=" article aside details dialog figure header footer hgroup section nav",v+=" audio canvas command datalist mark meter output picture progress time wbr video ruby bdi keygen"),"html5-strict"!==p&&(g+=" xml:lang",v=[v,C="acronym applet basefont big font strike tt"].join(" "),Do(Lo(C),function(e){w(e,"",v)}),h=[h,b="center dir isindex noframes"].join(" "),y=[h,v].join(" "),Do(Lo(b),function(e){w(e,"",y)})),y=y||[h,v].join(" "),w("html","manifest","head body"),w("head","","base command link meta noscript script style title"),w("title hr noscript br"),w("base","href target"),w("link","href rel media hreflang type sizes hreflang"),w("meta","name http-equiv content charset"),w("style","media type scoped"),w("script","src async defer type charset"),w("body","onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload onmessage onoffline ononline onpagehide onpageshow onpopstate onresize onscroll onstorage onunload",y),w("address dt dd div caption","",y),w("h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn","",v),w("blockquote","cite",y),w("ol","reversed start type","li"),w("ul","","li"),w("li","value",y),w("dl","","dt dd"),w("a","href target rel media hreflang type",v),w("q","cite",v),w("ins del","cite datetime",y),w("img","src sizes srcset alt usemap ismap width height"),w("iframe","src name width height",y),w("embed","src type width height"),w("object","data type typemustmatch name usemap form width height",[y,"param"].join(" ")),w("param","name value"),w("map","name",[y,"area"].join(" ")),w("area","alt coords shape href target rel media hreflang type"),w("table","border","caption colgroup thead tfoot tbody tr"+("html4"===p?" col":"")),w("colgroup","span","col"),w("col","span"),w("tbody thead tfoot","","tr"),w("tr","","td th"),w("td","colspan rowspan headers",y),w("th","colspan rowspan headers scope abbr",y),w("form","accept-charset action autocomplete enctype method name novalidate target",y),w("fieldset","disabled form name",[y,"legend"].join(" ")),w("label","form for",v),w("input","accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate formtarget height list max maxlength min multiple name pattern readonly required size src step type value width"),w("button","disabled form formaction formenctype formmethod formnovalidate formtarget name type value","html4"===p?y:v),w("select","disabled form multiple name required size","option optgroup"),w("optgroup","disabled label","option"),w("option","disabled label selected value"),w("textarea","cols dirname disabled form maxlength name readonly required rows wrap"),w("menu","type label",[y,"li"].join(" ")),w("noscript","",y),"html4"!==p&&(w("wbr"),w("ruby","",[v,"rt rp"].join(" ")),w("figcaption","",y),w("mark rt rp summary bdi","",v),w("canvas","width height",y),w("video","src crossorigin poster preload autoplay mediagroup loop muted controls width height buffered",[y,"track source"].join(" ")),w("audio","src crossorigin preload autoplay mediagroup loop muted controls buffered volume",[y,"track source"].join(" ")),w("picture","","img source"),w("source","src srcset type media sizes"),w("track","kind src srclang label default"),w("datalist","",[v,"option"].join(" ")),w("article section nav aside header footer","",y),w("hgroup","","h1 h2 h3 h4 h5 h6"),w("figure","",[y,"figcaption"].join(" ")),w("time","datetime",v),w("dialog","open",y),w("command","type label icon disabled checked radiogroup command"),w("output","for form name",v),w("progress","value max",v),w("meter","value min max low high optimum",v),w("details","open",[y,"summary"].join(" ")),w("keygen","autofocus challenge disabled form keytype name")),"html5-strict"!==p&&(N("script","language xml:space"),N("style","xml:space"),N("object","declare classid code codebase codetype archive standby align border hspace vspace"),N("embed","align name hspace vspace"),N("param","valuetype type"),N("a","charset name rev shape coords"),N("br","clear"),N("applet","codebase archive code object alt name width height align hspace vspace"),N("img","name longdesc align border hspace vspace"),N("iframe","longdesc frameborder marginwidth marginheight scrolling align"),N("font basefont","size color face"),N("input","usemap align"),N("select","onchange"),N("textarea"),N("h1 h2 h3 h4 h5 h6 div p legend caption","align"),N("ul","type compact"),N("li","type"),N("ol dl menu dir","compact"),N("pre","width xml:space"),N("hr","align noshade size width"),N("isindex","prompt"),N("table","summary width frame rules cellspacing cellpadding align bgcolor"),N("col","width align char charoff valign"),N("colgroup","width align char charoff valign"),N("thead","align char charoff valign"),N("tr","align char charoff valign bgcolor"),N("th","axis align char charoff valign nowrap bgcolor width height"),N("form","accept"),N("td","abbr axis scope align char charoff valign nowrap bgcolor width height"),N("tfoot","align char charoff valign"),N("tbody","align char charoff valign"),N("area","nohref"),N("body","background bgcolor text link vlink alink")),"html4"!==p&&(N("input button select textarea","autofocus"),N("input textarea","placeholder"),N("a","download"),N("link script img","crossorigin"),N("iframe","sandbox seamless allowfullscreen")),Do(Lo("a form meter progress dfn"),function(e){x[e]&&delete x[e].children[e]}),delete x.caption.children.table,delete x.script,_o[p]=x,x),!1===e.verify_html&&(e.valid_elements="*[*]"),t=Mo(e.valid_styles),n=Mo(e.invalid_styles,"map"),u=Mo(e.valid_classes,"map"),o=B("whitespace_elements","pre script noscript style textarea video audio iframe object code"),i=B("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr"),a=B("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr track"),s=B("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls"),l=B("non_empty_elements","td th iframe video audio object script pre code",a),f=B("move_caret_before_on_enter_elements","table",l),d=B("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure"),c=B("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex option datalist select optgroup figcaption",d),m=B("text_inline_elements","span strong b em i font strike u var cite dfn code mark q sup sub samp"),Do((e.special||"script noscript noframes noembed title style textarea xmp").split(" "),function(e){_[e]=new RegExp("</"+e+"[^>]*>","gi")});var R=function(e){return new RegExp("^"+e.replace(/([?+*])/g,".$1")+"$")},D=function(e){var t,n,r,o,i,a,s,u,c,l,f,d,m,p,g,h,v,y,b,C=/^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/,x=/^([!\-])?(\w+[\\:]:\w+|[^=:<]+)?(?:([=:<])(.*))?$/,w=/[*?+]/;if(e)for(e=Lo(e,","),S["@"]&&(h=S["@"].attributes,v=S["@"].attributesOrder),t=0,n=e.length;t<n;t++)if(i=C.exec(e[t])){if(p=i[1],c=i[2],g=i[3],u=i[5],a={attributes:d={},attributesOrder:m=[]},"#"===p&&(a.paddEmpty=!0),"-"===p&&(a.removeEmpty=!0),"!"===i[4]&&(a.removeEmptyAttrs=!0),h){for(y in h)d[y]=h[y];m.push.apply(m,v)}if(u)for(r=0,o=(u=Lo(u,"|")).length;r<o;r++)if(i=x.exec(u[r])){if(s={},f=i[1],l=i[2].replace(/[\\:]:/g,":"),p=i[3],b=i[4],"!"===f&&(a.attributesRequired=a.attributesRequired||[],a.attributesRequired.push(l),s.required=!0),"-"===f){delete d[l],m.splice(Io(m,l),1);continue}p&&("="===p&&(a.attributesDefault=a.attributesDefault||[],a.attributesDefault.push({name:l,value:b}),s.defaultValue=b),":"===p&&(a.attributesForced=a.attributesForced||[],a.attributesForced.push({name:l,value:b}),s.forcedValue=b),"<"===p&&(s.validValues=Ro(b,"?"))),w.test(l)?(a.attributePatterns=a.attributePatterns||[],s.pattern=R(l),a.attributePatterns.push(s)):(d[l]||m.push(l),d[l]=s)}h||"@"!==c||(h=d,v=m),g&&(a.outputName=c,S[g]=a),w.test(c)?(a.pattern=R(c),T.push(a)):S[c]=a}},O=function(e){S={},T=[],D(e),Do(r,function(e,t){k[t]=e.children})},P=function(e){var t=/^(~)?(.+)$/;e&&(_o.text_block_elements=_o.block_elements=null,Do(Lo(e,","),function(e){var n=t.exec(e),r="~"===n[1],o=r?"span":"div",i=n[2];if(k[i]=k[o],A[i]=o,r||(c[i.toUpperCase()]={},c[i]={}),!S[i]){var a=S[o];delete(a=Oo({},a)).removeEmptyAttrs,delete a.removeEmpty,S[i]=a}Do(k,function(e,t){e[o]&&(k[t]=e=Oo({},k[t]),e[i]=e[o])})}))},I=function(t){var n=/^([+\-]?)(\w+)\[([^\]]+)\]$/;_o[e.schema]=null,t&&Do(Lo(t,","),function(e){var t,r,o=n.exec(e);o&&(r=o[1],t=r?k[o[2]]:k[o[2]]={"#comment":{}},t=k[o[2]],Do(Lo(o[3],"|"),function(e){"-"===r?delete t[e]:t[e]={}}))})},L=function(e){var t,n=S[e];if(n)return n;for(t=T.length;t--;)if((n=T[t]).pattern.test(e))return n};return e.valid_elements?O(e.valid_elements):(Do(r,function(e,t){S[t]={attributes:e.attributes,attributesOrder:e.attributesOrder},k[t]=e.children}),"html5"!==e.schema&&Do(Lo("strong/b em/i"),function(e){e=Lo(e,"/"),S[e[1]].outputName=e[0]}),Do(Lo("ol ul sub sup blockquote span font a table tbody tr strong em b i"),function(e){S[e]&&(S[e].removeEmpty=!0)}),Do(Lo("p h1 h2 h3 h4 h5 h6 th td pre div address caption li"),function(e){S[e].paddEmpty=!0}),Do(Lo("span"),function(e){S[e].removeEmptyAttrs=!0})),P(e.custom_elements),I(e.valid_children),D(e.extended_valid_elements),I("+ol[ul|ol],+ul[ul|ol]"),Do({dd:"dl",dt:"dl",li:"ul ol",td:"tr",th:"tr",tr:"tbody thead tfoot",tbody:"table",thead:"table",tfoot:"table",legend:"fieldset",area:"map",param:"video audio object"},function(e,t){S[t]&&(S[t].parentsRequired=Lo(e))}),e.invalid_elements&&Do(Po(e.invalid_elements),function(e){S[e]&&delete S[e]}),L("span")||D("span[!data-mce-type|*]"),E.children=k,E.getValidStyles=function(){return t},E.getInvalidStyles=function(){return n},E.getValidClasses=function(){return u},E.getBoolAttrs=function(){return s},E.getBlockElements=function(){return c},E.getTextBlockElements=function(){return d},E.getTextInlineElements=function(){return m},E.getShortEndedElements=function(){return a},E.getSelfClosingElements=function(){return i},E.getNonEmptyElements=function(){return l},E.getMoveCaretBeforeOnEnterElements=function(){return f},E.getWhiteSpaceElements=function(){return o},E.getSpecialElements=function(){return _},E.isValidChild=function(e,t){var n=k[e.toLowerCase()];return!(!n||!n[t.toLowerCase()])},E.isValid=function(e,t){var n,r,o=L(e);if(o){if(!t)return!0;if(o.attributes[t])return!0;if(n=o.attributePatterns)for(r=n.length;r--;)if(n[r].pattern.test(e))return!0}return!1},E.getElementRule=L,E.getCustomElements=function(){return A},E.addValidElements=D,E.setValidElements=O,E.addCustomElements=P,E.addValidChildren=I,E.elements=S,E},zo=function(e,t){var n,r,o,i,a=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,s=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,u=/\s*([^:]+):\s*([^;]+);?/g,c=/\s+$/,l={},f="\ufeff";for(e=e||{},t&&(o=t.getValidStyles(),i=t.getInvalidStyles()),r=("\\\" \\' \\; \\: ; : "+f).split(" "),n=0;n<r.length;n++)l[r[n]]=f+n,l[f+n]=r[n];var d=function(e,t,n,r){var o=function(e){return(e=parseInt(e,10).toString(16)).length>1?e:"0"+e};return"#"+o(t)+o(n)+o(r)};return{toHex:function(e){return e.replace(a,d)},parse:function(t){var r,o,i,m,p,g,h,v,y={},b=e.url_converter,C=e.url_converter_scope||this,x=function(e,t,r){var o,i,a,s;if((o=y[e+"-top"+t])&&(i=y[e+"-right"+t])&&(a=y[e+"-bottom"+t])&&(s=y[e+"-left"+t])){var u=[o,i,a,s];for(n=u.length-1;n--&&u[n]===u[n+1];);n>-1&&r||(y[e+t]=-1===n?u[0]:u.join(" "),delete y[e+"-top"+t],delete y[e+"-right"+t],delete y[e+"-bottom"+t],delete y[e+"-left"+t])}},w=function(e){var t,n=y[e];if(n){for(t=(n=n.split(" ")).length;t--;)if(n[t]!==n[0])return!1;return y[e]=n[0],!0}},N=function(e){return m=!0,l[e]},E=function(e,t){return m&&(e=e.replace(/\uFEFF[0-9]/g,function(e){return l[e]})),t||(e=e.replace(/\\([\'\";:])/g,"$1")),e},S=function(e){return String.fromCharCode(parseInt(e.slice(1),16))},k=function(e){return e.replace(/\\[0-9a-f]+/gi,S)},T=function(t,n,r,o,i,a){if(i=i||a)return"'"+(i=E(i)).replace(/\'/g,"\\'")+"'";if(n=E(n||r||o),!e.allow_script_urls){var s=n.replace(/[\s\r\n]+/g,"");if(/(java|vb)script:/i.test(s))return"";if(!e.allow_svg_data_urls&&/^data:image\/svg/i.test(s))return""}return b&&(n=b.call(C,n,"style")),"url('"+n.replace(/\'/g,"\\'")+"')"};if(t){for(t=(t=t.replace(/[\u0000-\u001F]/g,"")).replace(/\\[\"\';:\uFEFF]/g,N).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(e){return e.replace(/[;:]/g,N)});r=u.exec(t);)if(u.lastIndex=r.index+r[0].length,o=r[1].replace(c,"").toLowerCase(),i=r[2].replace(c,""),o&&i){if(o=k(o),i=k(i),-1!==o.indexOf(f)||-1!==o.indexOf('"'))continue;if(!e.allow_script_urls&&("behavior"===o||/expression\s*\(|\/\*|\*\//.test(i)))continue;"font-weight"===o&&"700"===i?i="bold":"color"!==o&&"background-color"!==o||(i=i.toLowerCase()),i=(i=i.replace(a,d)).replace(s,T),y[o]=m?E(i,!0):i}x("border","",!0),x("border","-width"),x("border","-color"),x("border","-style"),x("padding",""),x("margin",""),p="border",h="border-style",v="border-color",w(g="border-width")&&w(h)&&w(v)&&(y[p]=y[g]+" "+y[h]+" "+y[v],delete y[g],delete y[h],delete y[v]),"medium none"===y.border&&delete y.border,"none"===y["border-image"]&&delete y["border-image"]}return y},serialize:function(e,t){var n,r,a,s,u,c="",l=function(t){var n,r,i,a;if(n=o[t])for(r=0,i=n.length;r<i;r++)t=n[r],(a=e[t])&&(c+=(c.length>0?" ":"")+t+": "+a+";")};if(t&&o)l("*"),l(t);else for(n in e)!(r=e[n])||i&&(a=n,s=t,u=void 0,(u=i["*"])&&u[a]||(u=i[s])&&u[a])||(c+=(c.length>0?" ":"")+n+": "+r+";");return c}}},Uo=Ot.each,Vo=Ot.is,Ho=Ot.grep,qo=me.ie,jo=/^([a-z0-9],?)+$/i,$o=/^[ \t\r\n]*$/,Wo=function(e,t){var n=t.attr("style");(n=e.serializeStyle(e.parseStyle(n),t[0].nodeName))||(n=null),t.attr("data-mce-style",n)},Ko=function(e,t){var n,r,o=0;if(e)for(n=e.nodeType,e=e.previousSibling;e;e=e.previousSibling)r=e.nodeType,(!t||3!==r||r!==n&&e.nodeValue.length)&&(o++,n=r);return o},Xo=function(e,t){var n,r,o,i,a,s,u=this;u.doc=e,u.win=window,u.files={},u.counter=0,u.stdMode=!qo||e.documentMode>=8,u.boxModel=!qo||"CSS1Compat"===e.compatMode||u.stdMode,u.styleSheetLoader=function(e,t){var n,r=0,o={};n=(t=t||{}).maxLoadTime||5e3;var i=function(t){e.getElementsByTagName("head")[0].appendChild(t)},a=function(t,a,s){var u,c,l,f,d=function(){for(var e=f.passed,t=e.length;t--;)e[t]();f.status=2,f.passed=[],f.failed=[]},m=function(){for(var e=f.failed,t=e.length;t--;)e[t]();f.status=3,f.passed=[],f.failed=[]},p=function(e,t){e()||((new Date).getTime()-l<n?ye.setTimeout(t):m())},g=function(){p(function(){for(var t,n,r=e.styleSheets,o=r.length;o--;)if((n=(t=r[o]).ownerNode?t.ownerNode:t.owningElement)&&n.id===u.id)return d(),!0},g)},h=function(){p(function(){try{var e=c.sheet.cssRules;return d(),!!e}catch(t){}},h)};if(t=Ot._addCacheSuffix(t),o[t]?f=o[t]:(f={passed:[],failed:[]},o[t]=f),a&&f.passed.push(a),s&&f.failed.push(s),1!==f.status)if(2!==f.status)if(3!==f.status){if(f.status=1,(u=e.createElement("link")).rel="stylesheet",u.type="text/css",u.id="u"+r++,u.async=!1,u.defer=!1,l=(new Date).getTime(),"onload"in u&&!((v=navigator.userAgent.match(/WebKit\/(\d*)/))&&parseInt(v[1],10)<536))u.onload=g,u.onerror=m;else{if(navigator.userAgent.indexOf("Firefox")>0)return(c=e.createElement("style")).textContent='@import "'+t+'"',h(),void i(c);g()}var v;i(u),u.href=t}else m();else d()},s=function(e){return Xr.nu(function(t){a(e,y.compose(t,y.constant(eo.value(e))),y.compose(t,y.constant(eo.error(e))))})},u=function(e){return e.fold(y.identity,y.identity)};return{load:a,loadAll:function(e,t,n){Jr(M.map(e,s)).get(function(e){var r=M.partition(e,function(e){return e.isValue()});r.fail.length>0?n(r.fail.map(u)):t(r.pass.map(u))})}}}(e),u.boundEvents=[],u.settings=t=t||{},u.schema=t.schema?t.schema:Fo({}),u.styles=zo({url_converter:t.url_converter,url_converter_scope:t.url_converter_scope},t.schema),u.fixDoc(e),u.events=t.ownEvents?new Te(t.proxy):Te.Event,u.attrHooks=(r=u,a={},s=(o=t).keep_values,i={set:function(e,t,n){o.url_converter&&(t=o.url_converter.call(o.url_converter_scope||r,t,n,e[0])),e.attr("data-mce-"+n,t).attr(n,t)},get:function(e,t){return e.attr("data-mce-"+t)||e.attr(t)}},a={style:{set:function(e,t){null===t||"object"!=typeof t?(s&&e.attr("data-mce-style",t),e.attr("style",t)):e.css(t)},get:function(e){var t=e.attr("data-mce-style")||e.attr("style");return t=r.serializeStyle(r.parseStyle(t),e[0].nodeName)}}},s&&(a.href=a.src=i),a),n=u.schema.getBlockElements(),u.$=Qt.overrideDefaults(function(){return{context:e,element:u.getRoot()}}),u.isBlock=function(e){if(!e)return!1;var t=e.nodeType;return t?!(1!==t||!n[e.nodeName]):!!n[e]}};Xo.prototype={$$:function(e){return"string"==typeof e&&(e=this.get(e)),this.$(e)},root:null,fixDoc:function(e){},clone:function(e,t){var n,r,o=this;return!qo||1!==e.nodeType||t?e.cloneNode(t):(r=o.doc,t?n.firstChild:(n=r.createElement(e.nodeName),Uo(o.getAttribs(e),function(t){o.setAttrib(n,t.nodeName,o.getAttrib(e,t.nodeName))}),n))},getRoot:function(){return this.settings.root_element||this.doc.body},getViewPort:function(e){var t,n;return t=(e=e||this.win).document,n=this.boxModel?t.documentElement:t.body,{x:e.pageXOffset||n.scrollLeft,y:e.pageYOffset||n.scrollTop,w:e.innerWidth||n.clientWidth,h:e.innerHeight||n.clientHeight}},getRect:function(e){var t,n;return e=this.get(e),t=this.getPos(e),n=this.getSize(e),{x:t.x,y:t.y,w:n.w,h:n.h}},getSize:function(e){var t,n;return e=this.get(e),t=this.getStyle(e,"width"),n=this.getStyle(e,"height"),-1===t.indexOf("px")&&(t=0),-1===n.indexOf("px")&&(n=0),{w:parseInt(t,10)||e.offsetWidth||e.clientWidth,h:parseInt(n,10)||e.offsetHeight||e.clientHeight}},getParent:function(e,t,n){return this.getParents(e,t,n,!1)},getParents:function(e,t,n,r){var o,i=this,a=[];for(e=i.get(e),r=r===undefined,n=n||("BODY"!==i.getRoot().nodeName?i.getRoot().parentNode:null),Vo(t,"string")&&(o=t,t="*"===t?function(e){return 1===e.nodeType}:function(e){return i.is(e,o)});e&&e!==n&&e.nodeType&&9!==e.nodeType;){if(!t||t(e)){if(!r)return e;a.push(e)}e=e.parentNode}return r?a:null},get:function(e){var t;return e&&this.doc&&"string"==typeof e&&(t=e,(e=this.doc.getElementById(e))&&e.id!==t)?this.doc.getElementsByName(t)[1]:e},getNext:function(e,t){return this._findSib(e,t,"nextSibling")},getPrev:function(e,t){return this._findSib(e,t,"previousSibling")},select:function(e,t){return lt(e,this.get(t)||this.settings.root_element||this.doc,[])},is:function(e,t){var n;if(!e)return!1;if(e.length===undefined){if("*"===t)return 1===e.nodeType;if(jo.test(t)){for(t=t.toLowerCase().split(/,/),e=e.nodeName.toLowerCase(),n=t.length-1;n>=0;n--)if(t[n]===e)return!0;return!1}}if(e.nodeType&&1!==e.nodeType)return!1;var r=e.nodeType?[e]:e;return lt(t,r[0].ownerDocument||r[0],null,r).length>0},add:function(e,t,n,r,o){var i=this;return this.run(e,function(e){var a;return a=Vo(t,"string")?i.doc.createElement(t):t,i.setAttribs(a,n),r&&(r.nodeType?a.appendChild(r):i.setHTML(a,r)),o?a:e.appendChild(a)})},create:function(e,t,n){return this.add(this.doc.createElement(e),e,t,n,1)},createHTML:function(e,t,n){var r,o="";for(r in o+="<"+e,t)t.hasOwnProperty(r)&&null!==t[r]&&"undefined"!=typeof t[r]&&(o+=" "+r+'="'+this.encode(t[r])+'"');return void 0!==n?o+">"+n+"</"+e+">":o+" />"},createFragment:function(e){var t,n,r,o=this.doc;for(r=o.createElement("div"),t=o.createDocumentFragment(),e&&(r.innerHTML=e);n=r.firstChild;)t.appendChild(n);return t},remove:function(e,t){return e=this.$$(e),t?e.each(function(){for(var e;e=this.firstChild;)3===e.nodeType&&0===e.data.length?this.removeChild(e):this.parentNode.insertBefore(e,this)}).remove():e.remove(),e.length>1?e.toArray():e[0]},setStyle:function(e,t,n){e=this.$$(e).css(t,n),this.settings.update_styles&&Wo(this,e)},getStyle:function(e,t,n){return e=this.$$(e),n?e.css(t):("float"===(t=t.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}))&&(t=me.ie&&me.ie<12?"styleFloat":"cssFloat"),e[0]&&e[0].style?e[0].style[t]:undefined)},setStyles:function(e,t){e=this.$$(e).css(t),this.settings.update_styles&&Wo(this,e)},removeAllAttribs:function(e){return this.run(e,function(e){var t,n=e.attributes;for(t=n.length-1;t>=0;t--)e.removeAttributeNode(n.item(t))})},setAttrib:function(e,t,n){var r,o,i=this.settings;""===n&&(n=null),r=(e=this.$$(e)).attr(t),e.length&&((o=this.attrHooks[t])&&o.set?o.set(e,n,t):e.attr(t,n),r!==n&&i.onSetAttrib&&i.onSetAttrib({attrElm:e,attrName:t,attrValue:n}))},setAttribs:function(e,t){var n=this;n.$$(e).each(function(e,r){Uo(t,function(e,t){n.setAttrib(r,t,e)})})},getAttrib:function(e,t,n){var r,o;return(e=this.$$(e)).length&&(o=(r=this.attrHooks[t])&&r.get?r.get(e,t):e.attr(t)),void 0===o&&(o=n||""),o},getPos:function(e,t){return qr(this.doc.body,this.get(e),t)},parseStyle:function(e){return this.styles.parse(e)},serializeStyle:function(e,t){return this.styles.serialize(e,t)},addStyle:function(e){var t,n,r=this.doc;if(this!==Xo.DOM&&r===document){var o=Xo.DOM.addedStyles;if((o=o||[])[e])return;o[e]=!0,Xo.DOM.addedStyles=o}(n=r.getElementById("mceDefaultStyles"))||((n=r.createElement("style")).id="mceDefaultStyles",n.type="text/css",(t=r.getElementsByTagName("head")[0]).firstChild?t.insertBefore(n,t.firstChild):t.appendChild(n)),n.styleSheet?n.styleSheet.cssText+=e:n.appendChild(r.createTextNode(e))},loadCSS:function(e){var t,n=this,r=n.doc;n===Xo.DOM||r!==document?(e||(e=""),t=r.getElementsByTagName("head")[0],Uo(e.split(","),function(e){var o;e=Ot._addCacheSuffix(e),n.files[e]||(n.files[e]=!0,o=n.create("link",{rel:"stylesheet",href:e}),qo&&r.documentMode&&r.recalc&&(o.onload=function(){r.recalc&&r.recalc(),o.onload=null}),t.appendChild(o))})):Xo.DOM.loadCSS(e)},addClass:function(e,t){this.$$(e).addClass(t)},removeClass:function(e,t){this.toggleClass(e,t,!1)},hasClass:function(e,t){return this.$$(e).hasClass(t)},toggleClass:function(e,t,n){this.$$(e).toggleClass(t,n).each(function(){""===this.className&&Qt(this).attr("class",null)})},show:function(e){this.$$(e).show()},hide:function(e){this.$$(e).hide()},isHidden:function(e){return"none"===this.$$(e).css("display")},uniqueId:function(e){return(e||"mce_")+this.counter++},setHTML:function(e,t){e=this.$$(e),qo?e.each(function(e,n){if(!1!==n.canHaveHTML){for(;n.firstChild;)n.removeChild(n.firstChild);try{n.innerHTML="<br>"+t,n.removeChild(n.firstChild)}catch(r){Qt("<div></div>").html("<br>"+t).contents().slice(1).appendTo(n)}return t}}):e.html(t)},getOuterHTML:function(e){return 1===(e=this.get(e)).nodeType&&"outerHTML"in e?e.outerHTML:Qt("<div></div>").append(Qt(e).clone()).html()},setOuterHTML:function(e,t){var n=this;n.$$(e).each(function(){try{if("outerHTML"in this)return void(this.outerHTML=t)}catch(e){}n.remove(Qt(this).html(t),!0)})},decode:Ao.decode,encode:Ao.encodeAllRaw,insertAfter:function(e,t){return t=this.get(t),this.run(e,function(e){var n,r;return n=t.parentNode,(r=t.nextSibling)?n.insertBefore(e,r):n.appendChild(e),e})},replace:function(e,t,n){return this.run(t,function(t){return Vo(t,"array")&&(e=e.cloneNode(!0)),n&&Uo(Ho(t.childNodes),function(t){e.appendChild(t)}),t.parentNode.replaceChild(e,t)})},rename:function(e,t){var n,r=this;return e.nodeName!==t.toUpperCase()&&(n=r.create(t),Uo(r.getAttribs(e),function(t){r.setAttrib(n,t.nodeName,r.getAttrib(e,t.nodeName))}),r.replace(n,e,1)),n||e},findCommonAncestor:function(e,t){for(var n,r=e;r;){for(n=t;n&&r!==n;)n=n.parentNode;if(r===n)break;r=r.parentNode}return!r&&e.ownerDocument?e.ownerDocument.documentElement:r},toHex:function(e){return this.styles.toHex(Ot.trim(e))},run:function(e,t,n){var r,o=this;return"string"==typeof e&&(e=o.get(e)),!!e&&(n=n||this,e.nodeType||!e.length&&0!==e.length?t.call(n,e):(r=[],Uo(e,function(e,i){e&&("string"==typeof e&&(e=o.get(e)),r.push(t.call(n,e,i)))}),r))},getAttribs:function(e){var t;return(e=this.get(e))?qo?(t=[],"OBJECT"===e.nodeName?e.attributes:("OPTION"===e.nodeName&&this.getAttrib(e,"selected")&&t.push({specified:1,nodeName:"selected"}),e.cloneNode(!1).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(e){t.push({specified:1,nodeName:e})}),t)):e.attributes:[]},isEmpty:function(e,t){var n,r,o,i,a,s,u=0;if(e=e.firstChild){a=new to(e,e.parentNode),t=t||(this.schema?this.schema.getNonEmptyElements():null),i=this.schema?this.schema.getWhiteSpaceElements():{};do{if(1===(o=e.nodeType)){var c=e.getAttribute("data-mce-bogus");if(c){e=a.next("all"===c);continue}if(s=e.nodeName.toLowerCase(),t&&t[s]){if("br"===s){u++,e=a.next();continue}return!1}for(n=(r=this.getAttribs(e)).length;n--;)if("name"===(s=r[n].nodeName)||"data-mce-bookmark"===s)return!1}if(8===o)return!1;if(3===o&&!$o.test(e.nodeValue))return!1;if(3===o&&e.parentNode&&i[e.parentNode.nodeName]&&$o.test(e.nodeValue))return!1;e=a.next()}while(e)}return u<=1},createRng:function(){return this.doc.createRange()},nodeIndex:Ko,split:function(e,t,n){var r,o,i,a=this.createRng();if(e&&t)return a.setStart(e.parentNode,this.nodeIndex(e)),a.setEnd(t.parentNode,this.nodeIndex(t)),r=a.extractContents(),(a=this.createRng()).setStart(t.parentNode,this.nodeIndex(t)+1),a.setEnd(e.parentNode,this.nodeIndex(e)+1),o=a.extractContents(),(i=e.parentNode).insertBefore(Co.trimNode(this,r),e),n?i.insertBefore(n,e):i.insertBefore(t,e),i.insertBefore(Co.trimNode(this,o),e),this.remove(e),n||t},bind:function(e,t,n,r){if(Ot.isArray(e)){for(var o=e.length;o--;)e[o]=this.bind(e[o],t,n,r);return e}return!this.settings.collect||e!==this.doc&&e!==this.win||this.boundEvents.push([e,t,n,r]),this.events.bind(e,t,n,r||this)},unbind:function(e,t,n){var r;if(Ot.isArray(e)){for(r=e.length;r--;)e[r]=this.unbind(e[r],t,n);return e}if(this.boundEvents&&(e===this.doc||e===this.win))for(r=this.boundEvents.length;r--;){var o=this.boundEvents[r];e!==o[0]||t&&t!==o[1]||n&&n!==o[2]||this.events.unbind(o[0],o[1],o[2])}return this.events.unbind(e,t,n)},fire:function(e,t,n){return this.events.fire(e,t,n)},getContentEditable:function(e){var t;return e&&1===e.nodeType?(t=e.getAttribute("data-mce-contenteditable"))&&"inherit"!==t?t:"inherit"!==e.contentEditable?e.contentEditable:null:null},getContentEditableParent:function(e){for(var t=this.getRoot(),n=null;e&&e!==t&&null===(n=this.getContentEditable(e));e=e.parentNode);return n},destroy:function(){if(this.boundEvents){for(var e=this.boundEvents.length;e--;){var t=this.boundEvents[e];this.events.unbind(t[0],t[1],t[2])}this.boundEvents=null}lt.setDocument&&lt.setDocument(),this.win=this.doc=this.root=this.events=this.frag=null},isChildOf:function(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1},dumpRng:function(e){return"startContainer: "+e.startContainer.nodeName+", startOffset: "+e.startOffset+", endContainer: "+e.endContainer.nodeName+", endOffset: "+e.endOffset},_findSib:function(e,t,n){var r=this,o=t;if(e)for("string"==typeof o&&(o=function(e){return r.is(e,t)}),e=e[n];e;e=e[n])if(o(e))return e;return null}},Xo.DOM=new Xo(document),Xo.nodeIndex=Ko;var Yo=Xo.DOM,Go=Ot.each,Jo=Ot.grep,Qo=function(e){return"function"==typeof e},Zo=function(){var e={},t=[],n={},r=[],o=0;this.isDone=function(t){return 2===e[t]},this.markDone=function(t){e[t]=2},this.add=this.load=function(r,o,i,a){e[r]===undefined&&(t.push(r),e[r]=0),o&&(n[r]||(n[r]=[]),n[r].push({success:o,failure:a,scope:i||this}))},this.remove=function(t){delete e[t],delete n[t]},this.loadQueue=function(e,n,r){this.loadScripts(t,e,n,r)},this.loadScripts=function(t,i,a,s){var u,c=[],l=function(e,t){Go(n[t],function(t){Qo(t[e])&&t[e].call(t.scope)}),n[t]=undefined};r.push({success:i,failure:s,scope:a||this}),(u=function(){var n=Jo(t);if(t.length=0,Go(n,function(t){var n,r,i,a,s,f,d;2!==e[t]?3!==e[t]?1!==e[t]&&(e[t]=1,o++,n=t,r=function(){e[t]=2,o--,l("success",t),u()},i=function(){e[t]=3,o--,c.push(t),l("failure",t),u()},d=function(){f.remove(s),a&&(a.onreadystatechange=a.onload=a=null),r()},s=(f=Yo).uniqueId(),(a=document.createElement("script")).id=s,a.type="text/javascript",a.src=Ot._addCacheSuffix(n),"onreadystatechange"in a?a.onreadystatechange=function(){/loaded|complete/.test(a.readyState)&&d()}:a.onload=d,a.onerror=function(){Qo(i)?i():"undefined"!=typeof console&&console.log&&console.log("Failed to load script: "+n)},(document.getElementsByTagName("head")[0]||document.body).appendChild(a)):l("failure",t):l("success",t)}),!o){var i=r.slice(0);r.length=0,Go(i,function(e){0===c.length?Qo(e.success)&&e.success.call(e.scope):Qo(e.failure)&&e.failure.call(e.scope,c)})}})()}};Zo.ScriptLoader=new Zo;var ei=Ot.each,ti=function(){this.items=[],this.urls={},this.lookup={},this._listeners=[]};ti.prototype={get:function(e){return this.lookup[e]?this.lookup[e].instance:undefined},dependencies:function(e){var t;return this.lookup[e]&&(t=this.lookup[e].dependencies),t||[]},requireLangPack:function(e,t){var n=ti.language;if(n&&!1!==ti.languageLoad){if(t)if(-1!==(t=","+t+",").indexOf(","+n.substr(0,2)+","))n=n.substr(0,2);else if(-1===t.indexOf(","+n+","))return;Zo.ScriptLoader.add(this.urls[e]+"/langs/"+n+".js")}},add:function(e,t,n){this.items.push(t),this.lookup[e]={instance:t,dependencies:n};var r=M.partition(this._listeners,function(t){return t.name===e});return this._listeners=r.fail,ei(r.pass,function(e){e.callback()}),t},remove:function(e){delete this.urls[e],delete this.lookup[e]},createUrl:function(e,t){return"object"==typeof t?t:{prefix:e.prefix,resource:t,suffix:e.suffix}},addComponents:function(e,t){var n=this.urls[e];ei(t,function(e){Zo.ScriptLoader.add(n+"/"+e)})},load:function(e,t,n,r,o){var i=this,a=t,s=function(){var o=i.dependencies(e);ei(o,function(e){var n=i.createUrl(t,e);i.load(n.resource,n,undefined,undefined)}),n&&(r?n.call(r):n.call(Zo))};i.urls[e]||("object"==typeof t&&(a=t.prefix+t.resource+t.suffix),0!==a.indexOf("/")&&-1===a.indexOf("://")&&(a=ti.baseURL+"/"+a),i.urls[e]=a.substring(0,a.lastIndexOf("/")),i.lookup[e]?s():Zo.ScriptLoader.add(a,s,r,o))},waitFor:function(e,t){this.lookup.hasOwnProperty(e)?t():this._listeners.push({name:e,callback:t})}},ti.PluginManager=new ti,ti.ThemeManager=new ti;var ni="\ufeff",ri=function(e){return e===ni},oi=ni,ii=function(e){return e.replace(new RegExp(ni,"g"),"")},ai=vo.isElement,si=vo.isText,ui=function(e){return si(e)&&(e=e.parentNode),ai(e)&&e.hasAttribute("data-mce-caret")},ci=function(e){return si(e)&&ri(e.data)},li=function(e){return ui(e)||ci(e)},fi=function(e){return si(e)&&e.data[0]===oi},di=function(e){return si(e)&&e.data[e.data.length-1]===oi},mi={isCaretContainer:li,isCaretContainerBlock:ui,isCaretContainerInline:ci,showCaretContainerBlock:function(e){return e&&e.hasAttribute("data-mce-caret")?(t=e.getElementsByTagName("br"),n=t[t.length-1],vo.isBogus(n)&&n.parentNode.removeChild(n),e.removeAttribute("data-mce-caret"),e.removeAttribute("data-mce-bogus"),e.removeAttribute("style"),e.removeAttribute("_moz_abspos"),e):null;var t,n},insertInline:function(e,t){var n,r,o;if(r=e.ownerDocument.createTextNode(oi),o=e.parentNode,t){if(n=e.previousSibling,si(n)){if(li(n))return n;if(di(n))return n.splitText(n.data.length-1)}o.insertBefore(r,e)}else{if(n=e.nextSibling,si(n)){if(li(n))return n;if(fi(n))return n.splitText(1),n}e.nextSibling?o.insertBefore(r,e.nextSibling):o.appendChild(r)}return r},prependInline:function(e){if(vo.isText(e)){var t=e.data;return t.length>0&&t.charAt(0)!==oi&&e.insertData(0,oi),e}return null},appendInline:function(e){if(vo.isText(e)){var t=e.data;return t.length>0&&t.charAt(t.length-1)!==oi&&e.insertData(t.length,oi),e}return null},isBeforeInline:function(e){return e&&vo.isText(e.container())&&e.container().data.charAt(e.offset())===oi},isAfterInline:function(e){return e&&vo.isText(e.container())&&e.container().data.charAt(e.offset()-1)===oi},insertBlock:function(e,t,n){var r,o,i;return(r=t.ownerDocument.createElement(e)).setAttribute("data-mce-caret",n?"before":"after"),r.setAttribute("data-mce-bogus","all"),r.appendChild(((i=document.createElement("br")).setAttribute("data-mce-bogus","1"),i)),o=t.parentNode,n?o.insertBefore(r,t):t.nextSibling?o.insertBefore(r,t.nextSibling):o.appendChild(r),r},hasContent:function(e){return e.firstChild!==e.lastChild||!vo.isBr(e.firstChild)},startsWithCaretContainer:fi,endsWithCaretContainer:di},pi=vo.isContentEditableTrue,gi=vo.isContentEditableFalse,hi=vo.isBr,vi=vo.isText,yi=vo.matchNodeNames("script style textarea"),bi=vo.matchNodeNames("img input textarea hr iframe video audio object"),Ci=vo.matchNodeNames("table"),xi=mi.isCaretContainer,wi=function(e){return!xi(e)&&(vi(e)?!yi(e.parentNode):bi(e)||hi(e)||Ci(e)||gi(e))},Ni=function(e,t){for(e=e.parentNode;e&&e!==t;e=e.parentNode){if(gi(e))return!1;if(pi(e))return!0}return!0},Ei=wi,Si=function(e){return bi(e)||!!gi(t=e)&&!0!==At.reduce(t.getElementsByTagName("*"),function(e,t){return e||pi(t)},!1);var t},ki=function(e,t){return wi(e)&&Ni(e,t)},Ti=Math.round,Ai=function(e){return e?{left:Ti(e.left),top:Ti(e.top),bottom:Ti(e.bottom),right:Ti(e.right),width:Ti(e.width),height:Ti(e.height)}:{left:0,top:0,bottom:0,right:0,width:0,height:0}},_i=function(e,t,n){return e>=0&&e<=Math.min(t.height,n.height)/2},Bi=function(e,t){return e.bottom-e.height/2<t.top||!(e.top>t.bottom)&&_i(t.top-e.bottom,e,t)},Ri=function(e,t){return e.top>t.bottom||!(e.bottom<t.top)&&_i(t.bottom-e.top,e,t)},Di=Ai,Oi=function(e,t){return e=Ai(e),t?e.right=e.left:(e.left=e.left+e.width,e.right=e.left),e.width=0,e},Pi=function(e,t){return e.left===t.left&&e.top===t.top&&e.bottom===t.bottom&&e.right===t.right},Ii=Bi,Li=Ri,Mi=function(e,t,n){return t>=e.left&&t<=e.right&&n>=e.top&&n<=e.bottom},Fi=function(e){var t=e.startContainer,n=e.startOffset;return t.hasChildNodes()&&e.endOffset===n+1?t.childNodes[n]:null},zi=function(e,t){return 1===e.nodeType&&e.hasChildNodes()&&(t>=e.childNodes.length&&(t=e.childNodes.length-1),e=e.childNodes[t]),e},Ui=new RegExp("[\u0300-\u036f\u0483-\u0487\u0488-\u0489\u0591-\u05bd\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7-\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e3-\u0902\u093a\u093c\u0941-\u0948\u094d\u0951-\u0957\u0962-\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2-\u09e3\u0a01-\u0a02\u0a3c\u0a41-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a51\u0a70-\u0a71\u0a75\u0a81-\u0a82\u0abc\u0ac1-\u0ac5\u0ac7-\u0ac8\u0acd\u0ae2-\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62-\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c00\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c62-\u0c63\u0c81\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc-\u0ccd\u0cd5-\u0cd6\u0ce2-\u0ce3\u0d01\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62-\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb-\u0ebc\u0ec8-\u0ecd\u0f18-\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86-\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039-\u103a\u103d-\u103e\u1058-\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085-\u1086\u108d\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17b4-\u17b5\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193b\u1a17-\u1a18\u1a1b\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1ab0-\u1abd\u1abe\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80-\u1b81\u1ba2-\u1ba5\u1ba8-\u1ba9\u1bab-\u1bad\u1be6\u1be8-\u1be9\u1bed\u1bef-\u1bf1\u1c2c-\u1c33\u1c36-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8-\u1cf9\u1dc0-\u1df5\u1dfc-\u1dff\u200c-\u200d\u20d0-\u20dc\u20dd-\u20e0\u20e1\u20e2-\u20e4\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302d\u302e-\u302f\u3099-\u309a\ua66f\ua670-\ua672\ua674-\ua67d\ua69e-\ua69f\ua6f0-\ua6f1\ua802\ua806\ua80b\ua825-\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\ua9e5\uaa29-\uaa2e\uaa31-\uaa32\uaa35-\uaa36\uaa43\uaa4c\uaa7c\uaab0\uaab2-\uaab4\uaab7-\uaab8\uaabe-\uaabf\uaac1\uaaec-\uaaed\uaaf6\uabe5\uabe8\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\uff9e-\uff9f]"),Vi=function(e){return"string"==typeof e&&e.charCodeAt(0)>=768&&Ui.test(e)},Hi=[].slice,qi=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var r=Hi.call(arguments);return r.length-1>=e.length?e.apply(this,r.slice(1)):function(){var e=r.concat([].slice.call(arguments));return qi.apply(this,e)}},ji={constant:function(e){return function(){return e}},negate:function(e){return function(t){return!e(t)}},and:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=Hi.call(arguments);return function(e){for(var t=0;t<n.length;t++)if(!n[t](e))return!1;return!0}},or:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=Hi.call(arguments);return function(e){for(var t=0;t<n.length;t++)if(n[t](e))return!0;return!1}},curry:qi,compose:function(e,t){return function(n){return e(t(n))}},noop:function(){}},$i=vo.isElement,Wi=Ei,Ki=vo.matchStyleValues("display","block table"),Xi=vo.matchStyleValues("float","left right"),Yi=ji.and($i,Wi,ji.negate(Xi)),Gi=ji.negate(vo.matchStyleValues("white-space","pre pre-line pre-wrap")),Ji=vo.isText,Qi=vo.isBr,Zi=Xo.nodeIndex,ea=zi,ta=function(e){return"createRange"in e?e.createRange():Xo.DOM.createRng()},na=function(e){return e&&/[\r\n\t ]/.test(e)},ra=function(e){var t,n=e.startContainer,r=e.startOffset;return!!(na(e.toString())&&Gi(n.parentNode)&&(t=n.data,na(t[r-1])||na(t[r+1])))},oa=function(e){var t,n,r=[],o=function(e){var t,n,r,o,i,a,s,u;return t=(n=e.getClientRects()).length>0?Di(n[0]):Di(e.getBoundingClientRect()),Qi(e)&&0===t.left?(i=(r=e).ownerDocument,a=ta(i),s=i.createTextNode("\xa0"),(u=r.parentNode).insertBefore(s,r),a.setStart(s,0),a.setEnd(s,1),o=Di(a.getBoundingClientRect()),u.removeChild(s),o):t},i=function(e,t){return(e=Oi(e,t)).width=1,e.right=e.left+1,e},a=function(e){0!==e.height&&(r.length>0&&Pi(e,r[r.length-1])||r.push(e))},s=function(e,t){var n=ta(e.ownerDocument);if(t<e.data.length){if(Vi(e.data[t]))return r;if(Vi(e.data[t-1])&&(n.setStart(e,t),n.setEnd(e,t+1),!ra(n)))return a(i(o(n),!1)),r}t>0&&(n.setStart(e,t-1),n.setEnd(e,t),ra(n)||a(i(o(n),!1))),t<e.data.length&&(n.setStart(e,t),n.setEnd(e,t+1),ra(n)||a(i(o(n),!0)))};if(Ji(e.container()))return s(e.container(),e.offset()),r;if($i(e.container()))if(e.isAtEnd())n=ea(e.container(),e.offset()),Ji(n)&&s(n,n.data.length),Yi(n)&&!Qi(n)&&a(i(o(n),!1));else{if(n=ea(e.container(),e.offset()),Ji(n)&&s(n,0),Yi(n)&&e.isAtEnd())return a(i(o(n),!1)),r;t=ea(e.container(),e.offset()-1),Yi(t)&&!Qi(t)&&(Ki(t)||Ki(n)||!Yi(n))&&a(i(o(t),!1)),Yi(n)&&a(i(o(n),!0))}return r},ia=function(e,t,n){var r=function(){return n||(n=oa(new ia(e,t))),n};return{container:ji.constant(e),offset:ji.constant(t),toRange:function(){var n;return(n=ta(e.ownerDocument)).setStart(e,t),n.setEnd(e,t),n},getClientRects:r,isVisible:function(){return r().length>0},isAtStart:function(){return Ji(e),0===t},isAtEnd:function(){return Ji(e)?t>=e.data.length:t>=e.childNodes.length},isEqual:function(n){return n&&e===n.container()&&t===n.offset()},getNode:function(n){return ea(e,n?t-1:t)}}};ia.fromRangeStart=function(e){return new ia(e.startContainer,e.startOffset)},ia.fromRangeEnd=function(e){return new ia(e.endContainer,e.endOffset)},ia.after=function(e){return new ia(e.parentNode,Zi(e)+1)},ia.before=function(e){return new ia(e.parentNode,Zi(e))},ia.isAtStart=function(e){return!!e&&e.isAtStart()},ia.isAtEnd=function(e){return!!e&&e.isAtEnd()},ia.isTextPosition=function(e){return!!e&&vo.isText(e.container())};var aa,sa,ua,ca,la,fa=vo.isContentEditableTrue,da=vo.isContentEditableFalse,ma=vo.matchStyleValues("display","block table table-cell table-caption list-item"),pa=mi.isCaretContainer,ga=mi.isCaretContainerBlock,ha=ji.curry,va=vo.isElement,ya=Ei,ba=function(e){return e>0},Ca=function(e){return e<0},xa=function(e,t){for(var n;n=e(t);)if(!ga(n))return n;return null},wa=function(e,t){for(e=e.parentNode;e&&e!==t;e=e.parentNode)if(fa(e))return e;return t},Na=function(e,t){for(;e&&e!==t;){if(ma(e))return e;e=e.parentNode}return null},Ea=function(e,t){var n=t.ownerDocument.createRange();return e?(n.setStartBefore(t),n.setEndBefore(t)):(n.setStartAfter(t),n.setEndAfter(t)),n},Sa=function(e,t,n){var r,o,i,a;for(o=e?"previousSibling":"nextSibling";n&&n!==t;){if(r=n[o],pa(r)&&(r=r[o]),da(r)){if(a=n,Na(r,i=t)===Na(a,i))return r;break}if(ya(r))break;n=n.parentNode}return null},ka=ha(Ea,!0),Ta=ha(Ea,!1),Aa=function(e,t){return da((n=e,(r=t)?(o=r.container(),i=r.offset(),va(o)?o.childNodes[i+n]:null):null));var n,r,o,i},_a={isForwards:ba,isBackwards:Ca,findNode:function(e,t,n,r,o){var i=new to(e,r);if(Ca(t)){if((da(e)||ga(e))&&n(e=xa(i.prev,!0)))return e;for(;e=xa(i.prev,o);)if(n(e))return e}if(ba(t)){if((da(e)||ga(e))&&n(e=xa(i.next,!0)))return e;for(;e=xa(i.next,o);)if(n(e))return e}return null},getEditingHost:wa,getParentBlock:Na,isInSameBlock:function(e,t,n){return Na(e.container(),n)===Na(t.container(),n)},isInSameEditingHost:function(e,t,n){return wa(e.container(),n)===wa(t.container(),n)},isBeforeContentEditableFalse:ha(Aa,0),isAfterContentEditableFalse:ha(Aa,-1),normalizeRange:function(e,t,n){var r,o,i,a,s=ha(Sa,!0,t),u=ha(Sa,!1,t);if(o=n.startContainer,i=n.startOffset,mi.isCaretContainerBlock(o)){if(va(o)||(o=o.parentNode),"before"===(a=o.getAttribute("data-mce-caret"))&&(r=o.nextSibling,da(r)))return ka(r);if("after"===a&&(r=o.previousSibling,da(r)))return Ta(r)}if(!n.collapsed)return n;if(vo.isText(o)){if(pa(o)){if(1===e){if(r=u(o))return ka(r);if(r=s(o))return Ta(r)}if(-1===e){if(r=s(o))return Ta(r);if(r=u(o))return ka(r)}return n}if(mi.endsWithCaretContainer(o)&&i>=o.data.length-1)return 1===e&&(r=u(o))?ka(r):n;if(mi.startsWithCaretContainer(o)&&i<=1)return-1===e&&(r=s(o))?Ta(r):n;if(i===o.data.length)return(r=u(o))?ka(r):n;if(0===i)return(r=s(o))?Ta(r):n}return n}},Ba=vo.isContentEditableFalse,Ra=vo.isText,Da=vo.isElement,Oa=vo.isBr,Pa=_a.isForwards,Ia=_a.isBackwards,La=Ei,Ma=Si,Fa=ki,za=function(e,t){return e.hasChildNodes()&&t<e.childNodes.length?e.childNodes[t]:null},Ua=function(e,t){if(Pa(e)){if(La(t.previousSibling)&&!Ra(t.previousSibling))return ia.before(t);if(Ra(t))return ia(t,0)}if(Ia(e)){if(La(t.nextSibling)&&!Ra(t.nextSibling))return ia.after(t);if(Ra(t))return ia(t,t.data.length)}return Ia(e)?Oa(t)?ia.before(t):ia.after(t):ia.before(t)},Va=function(e,t,n){var r,o,i,a,s,u,c,l,f,d;if(!Da(n)||!t)return null;if(t.isEqual(ia.after(n))&&n.lastChild){if(c=ia.after(n.lastChild),Ia(e)&&La(n.lastChild)&&Da(n.lastChild))return Oa(n.lastChild)?ia.before(n.lastChild):c}else c=t;if(r=c.container(),o=c.offset(),Ra(r)){if(Ia(e)&&o>0)return ia(r,--o);if(Pa(e)&&o<r.length)return ia(r,++o);i=r}else{if(Ia(e)&&o>0&&(a=za(r,o-1),La(a)))return!Ma(a)&&(s=_a.findNode(a,e,Fa,a))?Ra(s)?ia(s,s.data.length):ia.after(s):Ra(a)?ia(a,a.data.length):ia.before(a);if(Pa(e)&&o<r.childNodes.length&&(a=za(r,o),La(a)))return l=a,f=n,vo.isBr(l)&&(d=Va(1,ia.after(l),f))&&!_a.isInSameBlock(ia.before(l),ia.before(d),f)?Va(e,ia.after(a),n):!Ma(a)&&(s=_a.findNode(a,e,Fa,a))?Ra(s)?ia(s,0):ia.before(s):Ra(a)?ia(a,0):ia.after(a);i=c.getNode()}return(Pa(e)&&c.isAtEnd()||Ia(e)&&c.isAtStart())&&(i=_a.findNode(i,e,ji.constant(!0),n,!0),Fa(i,n))?Ua(e,i):(a=_a.findNode(i,e,Fa,n),!(u=At.last(At.filter(function(e,t){for(var n=[];e&&e!==t;)n.push(e),e=e.parentNode;return n}(r,n),Ba)))||a&&u.contains(a)?a?Ua(e,a):null:c=Pa(e)?ia.after(u):ia.before(u))},Ha=function(e){return{next:function(t){return Va(1,t,e)},prev:function(t){return Va(-1,t,e)}}},qa=function(e){return Ot.grep(e.childNodes,function(e){return"LI"===e.nodeName})},ja=function(e){return e&&e.firstChild&&e.firstChild===e.lastChild&&("\xa0"===(t=e.firstChild).data||vo.isBr(t));var t},$a=function(e){return e.length>0&&(!(t=e[e.length-1]).firstChild||ja(t))?e.slice(0,-1):e;var t},Wa=function(e,t){var n=e.getParent(t,e.isBlock);return n&&"LI"===n.nodeName?n:null},Ka=function(e,t){var n=ia.after(e),r=Ha(t).prev(n);return r?r.toRange():null},Xa=function(e,t,n){var r,o,i,a,s=e.parentNode;return Ot.each(t,function(t){s.insertBefore(t,e)}),r=e,o=n,i=ia.before(r),(a=Ha(o).next(i))?a.toRange():null},Ya=function(e,t){var n,r,o,i,a,s,u=t.firstChild,c=t.lastChild;return u&&"meta"===u.name&&(u=u.next),c&&"mce_marker"===c.attr("id")&&(c=c.prev),r=c,s=(n=e).getNonEmptyElements(),r&&(r.isEmpty(s)||(o=r,n.getBlockElements()[o.name]&&(a=o).firstChild&&a.firstChild===a.lastChild&&("br"===(i=o.firstChild).name||"\xa0"===i.value)))&&(c=c.prev),!(!u||u!==c||"ul"!==u.name&&"ol"!==u.name)},Ga=function(e,t,n,r){var o,i,a,s,u,c,l,f,d,m,p,g,h,v,y,b,C,x,w,N=(o=t,i=r,c=e.serialize(i),l=o.createFragment(c),s=(a=l).firstChild,u=a.lastChild,s&&"META"===s.nodeName&&s.parentNode.removeChild(s),u&&"mce_marker"===u.id&&u.parentNode.removeChild(u),a),E=Wa(t,n.startContainer),S=$a(qa(N.firstChild)),k=t.getRoot(),T=function(e){var r=ia.fromRangeStart(n),o=Ha(t.getRoot()),i=1===e?o.prev(r):o.next(r);return!i||Wa(t,i.getNode())!==E};return T(1)?Xa(E,S,k):T(2)?(f=E,d=S,m=k,t.insertAfter(d.reverse(),f),Ka(d[0],m)):(g=S,h=k,v=p=E,b=(y=n).cloneRange(),C=y.cloneRange(),b.setStartBefore(v),C.setEndAfter(v),x=[b.cloneContents(),C.cloneContents()],(w=p.parentNode).insertBefore(x[0],p),Ot.each(g,function(e){w.insertBefore(e,p)}),w.insertBefore(x[1],p),w.removeChild(p),Ka(g[g.length-1],h))},Ja=function(e,t){return!!Wa(e,t)},Qa=vo.isText,Za=vo.isBogus,es=Xo.nodeIndex,ts=function(e){var t=e.parentNode;return Za(t)?ts(t):t},ns=function(e){return e?At.reduce(e.childNodes,function(e,t){return Za(t)&&"BR"!==t.nodeName?e=e.concat(ns(t)):e.push(t),e},[]):[]},rs=function(e){return function(t){return e===t}},os=function(e){var t,n,r,o;return(Qa(e)?"text()":e.nodeName.toLowerCase())+"["+(n=ns(ts(t=e)),r=At.findIndex(n,rs(t),t),n=n.slice(0,r+1),o=At.reduce(n,function(e,t,r){return Qa(t)&&Qa(n[r-1])&&e++,e},0),n=At.filter(n,vo.matchNodeNames(t.nodeName)),(r=At.findIndex(n,rs(t),t))-o)+"]"},is=function(e,t){var n,r,o,i,a,s=[];return n=t.container(),r=t.offset(),Qa(n)?o=function(e,t){for(;(e=e.previousSibling)&&Qa(e);)t+=e.data.length;return t}(n,r):(r>=(i=n.childNodes).length?(o="after",r=i.length-1):o="before",n=i[r]),s.push(os(n)),a=function(e,t,n){var r=[];for(t=t.parentNode;!(t===e||n&&n(t));t=t.parentNode)r.push(t);return r}(e,n),a=At.filter(a,ji.negate(vo.isBogus)),(s=s.concat(At.map(a,function(e){return os(e)}))).reverse().join("/")+","+o},as=function(e,t){var n,r,o;return t?(t=(n=t.split(","))[0].split("/"),o=n.length>1?n[1]:"before",(r=At.reduce(t,function(e,t){return(t=/([\w\-\(\)]+)\[([0-9]+)\]/.exec(t))?("text()"===t[1]&&(t[1]="#text"),n=e,r=t[1],o=parseInt(t[2],10),i=ns(n),i=At.filter(i,function(e,t){return!Qa(e)||!Qa(i[t-1])}),(i=At.filter(i,vo.matchNodeNames(r)))[o]):null;var n,r,o,i},e))?Qa(r)?function(e,t){for(var n,r=e,o=0;Qa(r);){if(n=r.data.length,t>=o&&t<=o+n){e=r,t-=o;break}if(!Qa(r.nextSibling)){e=r,t=n;break}o+=n,r=r.nextSibling}return t>e.data.length&&(t=e.data.length),new ia(e,t)}(r,parseInt(o,10)):(o="after"===o?es(r)+1:es(r),new ia(r.parentNode,o)):null):null},ss=vo.isContentEditableFalse,us=function(e,t,n,r,o){var i,a=r[o?"startContainer":"endContainer"],s=r[o?"startOffset":"endOffset"],u=[],c=0,l=e.getRoot();for(vo.isText(a)?u.push(n?function(e,t,n){var r,o;for(o=e(t.data.slice(0,n)).length,r=t.previousSibling;r&&vo.isText(r);r=r.previousSibling)o+=e(r.data).length;return o}(t,a,s):s):(s>=(i=a.childNodes).length&&i.length&&(c=1,s=Math.max(0,i.length-1)),u.push(e.nodeIndex(i[s],n)+c));a&&a!==l;a=a.parentNode)u.push(e.nodeIndex(a,n));return u},cs=function(e){vo.isText(e)&&0===e.data.length&&e.parentNode.removeChild(e)},ls=function(e,t,n){var r=0;return Ot.each(e.select(t),function(e){if("all"!==e.getAttribute("data-mce-bogus"))return e!==n&&void r++}),r},fs=function(e,t){var n,r,o,i=t?"start":"end";n=e[i+"Container"],r=e[i+"Offset"],vo.isElement(n)&&"TR"===n.nodeName&&(n=(o=n.childNodes)[Math.min(t?r:r-1,o.length-1)])&&(r=t?0:n.childNodes.length,e["set"+(t?"Start":"End")](n,r))},ds=function(e){return fs(e,!0),fs(e,!1),e},ms=function(e,t){var n;if(vo.isElement(e)&&(e=zi(e,t),ss(e)))return e;if(mi.isCaretContainer(e)){if(vo.isText(e)&&mi.isCaretContainerBlock(e)&&(e=e.parentNode),n=e.previousSibling,ss(n))return n;if(n=e.nextSibling,ss(n))return n}},ps=function(e,t,n){var r,o,i,a,s,u,c,l=n.getNode(),f=l?l.nodeName:null,d=n.getRng();return ss(l)||"IMG"===f?{name:f,index:ls(n.dom,f,l)}:(l=ms((r=d).startContainer,r.startOffset)||ms(r.endContainer,r.endOffset))?{name:f=l.tagName,index:ls(n.dom,f,l)}:(o=e,a=t,s=d,u=(i=n).dom,(c={}).start=us(u,o,a,s,!0),i.isCollapsed()||(c.end=us(u,o,a,s,!1)),c)},gs={getBookmark:function(e,t,n){return 2===t?ps(ii,n,e):3===t?(o=(r=e).getRng(),{start:is(r.dom.getRoot(),ia.fromRangeStart(o)),end:is(r.dom.getRoot(),ia.fromRangeEnd(o))}):t?{rng:e.getRng()}:function(e){var t=e.dom,n=e.getRng(),r=t.uniqueId(),o=e.isCollapsed(),i="overflow:hidden;line-height:0px",a=e.getNode(),s=a.nodeName;if("IMG"===s)return{name:s,index:ls(t,s,a)};var u=ds(n.cloneRange());if(!o){u.collapse(!1);var c=t.create("span",{"data-mce-type":"bookmark",id:r+"_end",style:i},"&#xFEFF;");u.insertNode(c),cs(c.nextSibling)}(n=ds(n)).collapse(!0);var l=t.create("span",{"data-mce-type":"bookmark",id:r+"_start",style:i},"&#xFEFF;");return n.insertNode(l),cs(l.previousSibling),e.moveToBookmark({id:r,keep:1}),{id:r}}(e);var r,o},getUndoBookmark:y.curry(ps,y.identity,!0)},hs=function(e,t){for(var n=[],r=0;r<e.length;r++){var o=e[r];if(!o.isSome())return E.none();n.push(o.getOrDie())}return E.some(t.apply(null,n))},vs=function(e,t){return!e.isBlock(t)||t.innerHTML||me.ie||(t.innerHTML='<br data-mce-bogus="1" />'),t},ys=function(e,t,n,r){var o,i,a,s,u=n[t?"start":"end"],c=e.getRoot();if(u){for(a=u[0],i=c,o=u.length-1;o>=1;o--){if(s=i.childNodes,u[o]>s.length-1)return;i=s[u[o]]}3===i.nodeType&&(a=Math.min(u[0],i.nodeValue.length)),1===i.nodeType&&(a=Math.min(u[0],i.childNodes.length)),t?r.setStart(i,a):r.setEnd(i,a)}return!0},bs=function(e,t,n){var r,o,i,a,s,u,c=e.get(n.id+"_"+t),l=n.keep;if(c){if(r=c.parentNode,l?(r=c.firstChild,o=1):o=e.nodeIndex(c),s=r,u=o,!l){for(a=c.previousSibling,i=c.nextSibling,Ot.each(Ot.grep(c.childNodes),function(e){vo.isText(e)&&(e.nodeValue=e.nodeValue.replace(/\uFEFF/g,""))});c=e.get(n.id+"_"+t);)e.remove(c,1);a&&i&&a.nodeType===i.nodeType&&vo.isText(a)&&!me.opera&&(o=a.nodeValue.length,a.appendData(i.nodeValue),e.remove(i),s=a,u=o)}return E.some(ia(s,u))}return E.none()},Cs=function(e,t){var n,r,o,i,a,s,u,c,l,f,d,m,p,g,h,v=e.dom;if(t){if(Ot.isArray(t.start))return g=t,h=(p=v).createRng(),ys(p,!0,g,h)&&ys(p,!1,g,h)?E.some(h):E.none();if("string"==typeof t.start)return E.some((f=t,d=(l=v).createRng(),m=as(l.getRoot(),f.start),d.setStart(m.container(),m.offset()),m=as(l.getRoot(),f.end),d.setEnd(m.container(),m.offset()),d));if(t.id)return u=bs(o=v,"start",i=t),c=bs(o,"end",i),hs([u,(a=c,s=u,a.isSome()?a:s)],function(e,t){var n=o.createRng();return n.setStart(vs(o,e.container()),e.offset()),n.setEnd(vs(o,t.container()),t.offset()),n});if(t.name)return n=v,r=t,E.from(n.select(r.name)[r.index]).map(function(e){var t=n.createRng();return t.selectNode(e),t});if(t.rng)return E.some(t.rng)}return E.none()},xs={getBookmark:function(e,t,n){return gs.getBookmark(e,t,n)},moveToBookmark:function(e,t){Cs(e,t).each(function(t){e.setRng(t)})},isBookmarkNode:function(e){return vo.isElement(e)&&"SPAN"===e.tagName&&"bookmark"===e.getAttribute("data-mce-type")}},ws=Ot.each,Ns=function(e){this.compare=function(t,n){if(t.nodeName!==n.nodeName)return!1;var r=function(t){var n={};return ws(e.getAttribs(t),function(r){var o=r.nodeName.toLowerCase();0!==o.indexOf("_")&&"style"!==o&&0!==o.indexOf("data-")&&(n[o]=e.getAttrib(t,o))}),n},o=function(e,t){var n,r;for(r in e)if(e.hasOwnProperty(r)){if(void 0===(n=t[r]))return!1;if(e[r]!==n)return!1;delete t[r]}for(r in t)if(t.hasOwnProperty(r))return!1;return!0};return!(!o(r(t),r(n))||!o(e.parseStyle(e.getAttrib(t,"style")),e.parseStyle(e.getAttrib(n,"style")))||xs.isBookmarkNode(t)||xs.isBookmarkNode(n))}},Es=function(e,t){Ur.parent(e).each(function(n){n.dom().insertBefore(t.dom(),e.dom())})},Ss=function(e,t){e.dom().appendChild(t.dom())},ks={before:Es,after:function(e,t){Ur.nextSibling(e).fold(function(){Ur.parent(e).each(function(e){Ss(e,t)})},function(e){Es(e,t)})},prepend:function(e,t){Ur.firstChild(e).fold(function(){Ss(e,t)},function(n){e.dom().insertBefore(t.dom(),n.dom())})},append:Ss,appendAt:function(e,t,n){Ur.child(e,n).fold(function(){Ss(e,t)},function(e){Es(e,t)})},wrap:function(e,t){Es(e,t),Ss(t,e)}},Ts=function(e,t){M.each(t,function(t){ks.before(e,t)})},As=function(e,t){M.each(t,function(t){ks.append(e,t)})},_s=function(e){var t=e.dom();null!==t.parentNode&&t.parentNode.removeChild(t)},Bs={empty:function(e){e.dom().textContent="",M.each(Ur.children(e),function(e){_s(e)})},remove:_s,unwrap:function(e){var t=Ur.children(e);t.length>0&&Ts(e,t),_s(e)}},Rs=(aa=Zn.isText,sa="text",ua=function(e){return aa(e)?E.from(e.dom().nodeValue):E.none()},ca=Un.detect().browser,{get:function(e){if(!aa(e))throw new Error("Can only get "+sa+" value of a "+sa+" node");return la(e).getOr("")},getOption:la=ca.isIE()&&10===ca.version.major?function(e){try{return ua(e)}catch(yC){return E.none()}}:ua,set:function(e,t){if(!aa(e))throw new Error("Can only set raw "+sa+" value of a "+sa+" node");e.dom().nodeValue=t}}),Ds=function(e){return Rs.get(e)},Os=function(e,t){return _r.all(t,e)},Ps=function(e){var t=Os(e,"br"),n=M.filter(function(e){for(var t=[],n=e.dom();n;)t.push(Hn.fromDom(n)),n=n.lastChild;return t}(e).slice(-1),io.isBr);t.length===n.length&&M.each(n,Bs.remove)},Is=function(e){Bs.empty(e),ks.append(e,Hn.fromHtml('<br data-mce-bogus="1">'))},Ls=function(e){Ur.lastChild(e).each(function(t){Ur.prevSibling(t).each(function(n){io.isBlock(e)&&io.isBr(t)&&io.isBlock(n)&&Bs.remove(t)})})},Ms=Ot.makeMap,Fs=function(e){var t,n,r,o,i,a=[];return t=(e=e||{}).indent,n=Ms(e.indent_before||""),r=Ms(e.indent_after||""),o=Ao.getEncodeFunc(e.entity_encoding||"raw",e.entities),i="html"===e.element_format,{start:function(e,s,u){var c,l,f,d;if(t&&n[e]&&a.length>0&&(d=a[a.length-1]).length>0&&"\n"!==d&&a.push("\n"),a.push("<",e),s)for(c=0,l=s.length;c<l;c++)f=s[c],a.push(" ",f.name,'="',o(f.value,!0),'"');a[a.length]=!u||i?">":" />",u&&t&&r[e]&&a.length>0&&(d=a[a.length-1]).length>0&&"\n"!==d&&a.push("\n")},end:function(e){var n;a.push("</",e,">"),t&&r[e]&&a.length>0&&(n=a[a.length-1]).length>0&&"\n"!==n&&a.push("\n")},text:function(e,t){e.length>0&&(a[a.length]=t?e:o(e))},cdata:function(e){a.push("<![CDATA[",e,"]]>")},comment:function(e){a.push("\x3c!--",e,"--\x3e")},pi:function(e,n){n?a.push("<?",e," ",o(n),"?>"):a.push("<?",e,"?>"),t&&a.push("\n")},doctype:function(e){a.push("<!DOCTYPE",e,">",t?"\n":"")},reset:function(){a.length=0},getContent:function(){return a.join("").replace(/\n$/,"")}}},zs=function(e,t){var n={},r=Fs(e);return(e=e||{}).validate=!("validate"in e)||e.validate,n.schema=t=t||Fo(),n.writer=r,n.serialize=function(n){var o,i;i=e.validate,o={3:function(e){r.text(e.value,e.raw)},8:function(e){r.comment(e.value)},7:function(e){r.pi(e.name,e.value)},10:function(e){r.doctype(e.value)},4:function(e){r.cdata(e.value)},11:function(e){if(e=e.firstChild)do{a(e)}while(e=e.next)}},r.reset();var a=function(e){var n,s,u,c,l,f,d,m,p,g=o[e.type];if(g)g(e);else{if(n=e.name,s=e.shortEnded,u=e.attributes,i&&u&&u.length>1&&((f=[]).map={},p=t.getElementRule(e.name))){for(d=0,m=p.attributesOrder.length;d<m;d++)(c=p.attributesOrder[d])in u.map&&(l=u.map[c],f.map[c]=l,f.push({name:c,value:l}));for(d=0,m=u.length;d<m;d++)(c=u[d].name)in f.map||(l=u.map[c],f.map[c]=l,f.push({name:c,value:l}));u=f}if(r.start(e.name,u,s),!s){if(e=e.firstChild)do{a(e)}while(e=e.next);r.end(n)}}};return 1!==n.type||e.inner?o[11](n):a(n),r.getContent()},n},Us=function(e){return ia.isTextPosition(e)?0===e.offset():Ei(e.getNode())},Vs=function(e){return ia.isTextPosition(e)?e.offset()===e.container().data.length:Ei(e.getNode(!0))},Hs=function(e,t){return!ia.isTextPosition(e)&&!ia.isTextPosition(t)&&e.getNode()===t.getNode(!0)},qs=function(e,t,n){return e?!Hs(t,n)&&(r=t,!(!ia.isTextPosition(r)&&vo.isBr(r.getNode())))&&Vs(t)&&Us(n):!Hs(n,t)&&Us(t)&&Vs(n);var r},js=function(e,t,n){var r=Ha(t);return E.from(e?r.next(n):r.prev(n))},$s=function(e,t){var n,r,o,i,a,s=e?t.firstChild:t.lastChild;return vo.isText(s)?E.some(new ia(s,e?0:s.data.length)):s?Ei(s)?E.some(e?ia.before(s):(a=s,vo.isBr(a)?ia.before(a):ia.after(a))):(r=t,o=s,i=(n=e)?ia.before(o):ia.after(o),js(n,r,i)):E.none()},Ws={fromPosition:js,nextPosition:y.curry(js,!0),prevPosition:y.curry(js,!1),navigate:function(e,t,n){return js(e,t,n).bind(function(r){return _a.isInSameBlock(n,r,t)&&qs(e,n,r)?js(e,t,r):E.some(r)})},positionIn:$s,firstPositionIn:y.curry($s,!0),lastPositionIn:y.curry($s,!1)},Ks=function(e){var t=ia.fromRangeStart(e),n=ia.fromRangeEnd(e),r=e.commonAncestorContainer;return Ws.fromPosition(!1,r,n).map(function(o){return!_a.isInSameBlock(t,n,r)&&_a.isInSameBlock(t,o,r)?(i=t.container(),a=t.offset(),s=o.container(),u=o.offset(),(c=document.createRange()).setStart(i,a),c.setEnd(s,u),c):e;var i,a,s,u,c}).getOr(e)},Xs=function(e){return(t=e).collapsed?t:Ks(t);var t},Ys=vo.matchNodeNames("td th"),Gs=function(e,t,n){var r,o,i,a,s,u,c,l,f,d,m,p,g=e.schema.getTextInlineElements(),h=e.selection,v=e.dom;if(/^ | $/.test(t)&&(t=function(e){var t,n,r;t=h.getRng(),n=t.startContainer,r=t.startOffset;var o=function(e){return n[e]&&3===n[e].nodeType};return 3===n.nodeType&&(r>0?e=e.replace(/^&nbsp;/," "):o("previousSibling")||(e=e.replace(/^ /,"&nbsp;")),r<n.length?e=e.replace(/&nbsp;(<br>|)$/," "):o("nextSibling")||(e=e.replace(/(&nbsp;| )(<br>|)$/,"&nbsp;"))),e}(t)),r=e.parser,p=n.merge,o=zs({validate:e.settings.validate},e.schema),m='<span id="mce_marker" data-mce-type="bookmark">&#xFEFF;&#x200B;</span>',u={content:t,format:"html",selection:!0,paste:n.paste},(u=e.fire("BeforeSetContent",u)).isDefaultPrevented())e.fire("SetContent",{content:u.content,format:"html",selection:!0,paste:n.paste});else{-1===(t=u.content).indexOf("{$caret}")&&(t+="{$caret}"),t=t.replace(/\{\$caret\}/,m);var y,b,C,x,w=(l=h.getRng()).startContainer||(l.parentElement?l.parentElement():null),N=e.getBody();w===N&&h.isCollapsed()&&v.isBlock(N.firstChild)&&(y=N.firstChild)&&!e.schema.getShortEndedElements()[y.nodeName]&&v.isEmpty(N.firstChild)&&((l=v.createRng()).setStart(N.firstChild,0),l.setEnd(N.firstChild,0),h.setRng(l)),h.isCollapsed()||(e.selection.setRng(Xs(e.selection.getRng())),e.getDoc().execCommand("Delete",!1,null),C=(b=h.getRng()).startContainer,x=b.startOffset,3===C.nodeType&&b.collapsed&&("\xa0"===C.data[x]?(C.deleteData(x,1),/[\u00a0| ]$/.test(t)||(t+=" ")):"\xa0"===C.data[x-1]&&(C.deleteData(x-1,1),/[\u00a0| ]$/.test(t)||(t=" "+t))));var S,k,T,A={context:(i=h.getNode()).nodeName.toLowerCase(),data:n.data,insert:!0};if(s=r.parse(t,A),!0===n.paste&&Ya(e.schema,s)&&Ja(v,i))return l=Ga(o,v,e.selection.getRng(!0),s),e.selection.setRng(l),void e.fire("SetContent",u);if(function(e){for(var t=e;t=t.walk();)1===t.type&&t.attr("data-mce-fragment","1")}(s),"mce_marker"===(f=s.lastChild).attr("id"))for(c=f,f=f.prev;f;f=f.walk(!0))if(3===f.type||!v.isBlock(f.name)){e.schema.isValidChild(f.parent.name,"span")&&f.parent.insert(c,f,"br"===f.name);break}if(e._selectionOverrides.showBlockCaretContainer(i),A.invalid){for(h.setContent(m),i=h.getNode(),a=e.getBody(),9===i.nodeType?i=f=a:f=i;f!==a;)i=f,f=f.parentNode;t=i===a?a.innerHTML:v.getOuterHTML(i),t=o.serialize(r.parse(t.replace(/<span (id="mce_marker"|id=mce_marker).+?<\/span>/i,function(){return o.serialize(s)}))),i===a?v.setHTML(a,t):v.setOuterHTML(i,t)}else t=o.serialize(s),function(e,t,n){if("all"===n.getAttribute("data-mce-bogus"))n.parentNode.insertBefore(e.dom.createFragment(t),n);else{var r=n.firstChild,o=n.lastChild;!r||r===o&&"BR"===r.nodeName?e.dom.setHTML(n,t):e.selection.setContent(t)}}(e,t,i);!function(){if(p){var t=e.getBody(),n=new Ns(v);Ot.each(v.select("*[data-mce-fragment]"),function(e){for(var r=e.parentNode;r&&r!==t;r=r.parentNode)g[e.nodeName.toLowerCase()]&&n.compare(r,e)&&v.remove(e,!0)})}}(),function(t){var n,r,o;if(t){if(h.scrollIntoView(t),n=function(t){for(var n=e.getBody();t&&t!==n;t=t.parentNode)if("false"===e.dom.getContentEditable(t))return t;return null}(t))return v.remove(t),void h.select(n);l=v.createRng(),(f=t.previousSibling)&&3===f.nodeType?(l.setStart(f,f.nodeValue.length),me.ie||(d=t.nextSibling)&&3===d.nodeType&&(f.appendData(d.data),d.parentNode.removeChild(d))):(l.setStartBefore(t),l.setEndBefore(t)),r=v.getParent(t,v.isBlock),v.remove(t),r&&v.isEmpty(r)&&(e.$(r).empty(),l.setStart(r,0),l.setEnd(r,0),Ys(r)||r.getAttribute("data-mce-fragment")||!(o=function(t){var n=ia.fromRangeStart(t);if(n=Ha(e.getBody()).next(n))return n.toRange()}(l))?v.add(r,v.create("br",{"data-mce-bogus":"1"})):(l=o,v.remove(r))),h.setRng(l)}}(v.get("mce_marker")),S=e.getBody(),Ot.each(S.getElementsByTagName("*"),function(e){e.removeAttribute("data-mce-fragment")}),k=e.dom,T=e.selection.getStart(),E.from(k.getParent(T,"td,th")).map(Hn.fromDom).each(Ls),e.fire("SetContent",u),e.addVisual()}},Js=function(e,t){var n,r,o="string"!=typeof(n=t)?(r=Ot.extend({paste:n.paste,data:{paste:n.paste}},n),{content:n.content,details:r}):{content:n,details:{}};Gs(e,o.content,o.details)},Qs=function(e,t,n,r,o){return e(n,r)?E.some(n):tr.isFunction(o)&&o(n)?E.none():t(n,r,o)},Zs=function(e,t,n){for(var r=e.dom(),o=tr.isFunction(n)?n:y.constant(!1);r.parentNode;){r=r.parentNode;var i=Hn.fromDom(r);if(t(i))return E.some(i);if(o(i))break}return E.none()},eu=function(e,t){return M.find(e.dom().childNodes,y.compose(t,Hn.fromDom)).map(Hn.fromDom)},tu=function(e,t){var n=function(e){for(var r=0;r<e.childNodes.length;r++){if(t(Hn.fromDom(e.childNodes[r])))return E.some(Hn.fromDom(e.childNodes[r]));var o=n(e.childNodes[r]);if(o.isSome())return o}return E.none()};return n(e.dom())},nu={first:function(e){return tu(gr.body(),e)},ancestor:Zs,closest:function(e,t,n){return Qs(function(e){return t(e)},Zs,e,t,n)},sibling:function(e,t){var n=e.dom();return n.parentNode?eu(Hn.fromDom(n.parentNode),function(n){return!Dr.eq(e,n)&&t(n)}):E.none()},child:eu,descendant:tu},ru=xr("sections","settings"),ou=Un.detect().deviceType.isTouch(),iu=["lists","autolink","autosave"],au={theme:"mobile"},su=function(e){var t=tr.isArray(e)?e.join(" "):e,n=M.map(tr.isString(t)?t.split(" "):[],On);return M.filter(n,function(e){return e.length>0})},uu=function(e,t){return e.sections().hasOwnProperty(t)},cu=function(e,t,n,r){var o,i,a=su(n.forced_plugins),s=su(r.plugins),u=e&&uu(t,"mobile")?(o=s,M.filter(o,y.curry(M.contains,iu))):s,c=(i=u,[].concat(su(a)).concat(su(i)));return Ot.extend(r,{plugins:c.join(" ")})},lu=function(e,t,n,r){var o,i,a,s,u,c,l,f,d,m,p,g,h,v=(o=["mobile"],i=r,a=sr.bifilter(i,function(e,t){return M.contains(o,t)}),ru(a.t,a.f)),y=Ot.extend(t,n,v.settings(),(p=e,h=(g=v).settings().inline,p&&uu(g,"mobile")&&!h?(l="mobile",f=au,d=v.sections(),m=d.hasOwnProperty(l)?d[l]:{},Ot.extend({},f,m)):{}),{validate:!0,content_editable:v.settings().inline,external_plugins:(s=n,u=v.settings(),c=u.external_plugins?u.external_plugins:{},s&&s.external_plugins?Ot.extend({},s.external_plugins,c):c)});return cu(e,v,n,y)},fu=function(e,t,n){return E.from(t.settings[n]).filter(e)},du=y.curry(fu,tr.isString),mu=function(e,t,n,r){var o,i,a=t in e.settings?e.settings[t]:n;return"hash"===r?(i={},"string"==typeof(o=a)?M.each(o.indexOf("=")>0?o.split(/[;,](?![^=;,]*(?:[;,]|$))/):o.split(","),function(e){(e=e.split("=")).length>1?i[Ot.trim(e[0])]=Ot.trim(e[1]):i[Ot.trim(e[0])]=Ot.trim(e)}):i=o,i):"string"===r?fu(tr.isString,e,t).getOr(n):"number"===r?fu(tr.isNumber,e,t).getOr(n):"boolean"===r?fu(tr.isBoolean,e,t).getOr(n):"object"===r?fu(tr.isObject,e,t).getOr(n):"array"===r?fu(tr.isArray,e,t).getOr(n):"function"===r?fu(tr.isFunction,e,t).getOr(n):a},pu=/[\u0591-\u07FF\uFB1D-\uFDFF\uFE70-\uFEFC]/,gu=function(e){return pu.test(e)},hu=function(e,t){var n=t.container(),r=t.offset();return e?mi.isCaretContainerInline(n)?vo.isText(n.nextSibling)?new ia(n.nextSibling,0):ia.after(n):mi.isBeforeInline(t)?new ia(n,r+1):t:mi.isCaretContainerInline(n)?vo.isText(n.previousSibling)?new ia(n.previousSibling,n.previousSibling.data.length):ia.before(n):mi.isAfterInline(t)?new ia(n,r-1):t},vu={isInlineTarget:function(e,t){var n=du(e,"inline_boundaries_selector").getOr("a[href],code");return _r.is(Hn.fromDom(t),n)},findRootInline:function(e,t,n){var r,o,i,a=(r=e,o=t,i=n,M.filter(Xo.DOM.getParents(i.container(),"*",o),r));return E.from(a[a.length-1])},isRtl:function(e){return"rtl"===Xo.DOM.getStyle(e,"direction",!0)||gu(e.textContent)},isAtZwsp:function(e){return mi.isBeforeInline(e)||mi.isAfterInline(e)},normalizePosition:hu,normalizeForwards:y.curry(hu,!0),normalizeBackwards:y.curry(hu,!1),hasSameParentBlock:function(e,t,n){var r=_a.getParentBlock(t,e),o=_a.getParentBlock(n,e);return r&&r===o}},yu=function(e,t){return Dr.contains(e,t)?nu.closest(t,function(e){return io.isTextBlock(e)||io.isListItem(e)},(n=e,function(e){return Dr.eq(n,Hn.fromDom(e.dom().parentNode))})):E.none();var n},bu=function(e){var t,n,r;e.dom.isEmpty(e.getBody())&&(e.setContent(""),n=(t=e).getBody(),r=n.firstChild&&t.dom.isBlock(n.firstChild)?n.firstChild:n,t.selection.setCursorLocation(r,0))},Cu=function(e,t,n){return hs([Ws.firstPositionIn(n),Ws.lastPositionIn(n)],function(r,o){var i=vu.normalizePosition(!0,r),a=vu.normalizePosition(!1,o),s=vu.normalizePosition(!1,t);return e?Ws.nextPosition(n,s).map(function(e){return e.isEqual(a)&&t.isEqual(i)}).getOr(!1):Ws.prevPosition(n,s).map(function(e){return e.isEqual(i)&&t.isEqual(a)}).getOr(!1)}).getOr(!0)},xu=function(e,t,n){return nu.ancestor(e,function(e){return _r.is(e,t)},n)},wu=xu,Nu=function(e,t){return _r.one(t,e)},Eu=function(e,t,n){return Qs(_r.is,xu,e,t,n)},Su=function(e,t,n){return wu(e,t,n).isSome()},ku=function(e,t){return vo.isText(t)&&/^[ \t\r\n]*$/.test(t.data)&&!1===(n=e,r=t,o=Hn.fromDom(n),i=Hn.fromDom(r),Su(i,"pre,code",y.curry(Dr.eq,o)));var n,r,o,i},Tu=function(e,t){return Ei(t)&&!1===ku(e,t)||(n=t,vo.isElement(n)&&"A"===n.nodeName&&n.hasAttribute("name"))||Au(t);var n},Au=vo.hasAttribute("data-mce-bookmark"),_u=vo.hasAttribute("data-mce-bogus"),Bu=vo.hasAttributeValue("data-mce-bogus","all"),Ru=function(e){return function(e){var t,n,r=0;if(Tu(e,e))return!1;if(!(n=e.firstChild))return!0;t=new to(n,e);do{if(Bu(n))n=t.next(!0);else if(_u(n))n=t.next();else if(vo.isBr(n))r++,n=t.next();else{if(Tu(e,n))return!1;n=t.next()}}while(n);return r<=1}(e.dom())},Du=xr("block","position"),Ou=xr("from","to"),Pu=function(e,t){var n=Hn.fromDom(e),r=Hn.fromDom(t.container());return yu(n,r).map(function(e){return Du(e,t)})},Iu=function(e,t,n){var r=Pu(e,ia.fromRangeStart(n)),o=r.bind(function(n){return Ws.fromPosition(t,e,n.position()).bind(function(n){return Pu(e,n).map(function(n){return r=e,o=t,i=n,vo.isBr(i.position().getNode())&&!1===Ru(i.block())?Ws.positionIn(!1,i.block().dom()).bind(function(e){return e.isEqual(i.position())?Ws.fromPosition(o,r,e).bind(function(e){return Pu(r,e)}):E.some(i)}).getOr(i):i;var r,o,i})})});return hs([r,o],Ou).filter(function(e){return r=e,!1===Dr.eq(r.from().block(),r.to().block())&&(n=e,Ur.parent(n.from().block()).bind(function(e){return Ur.parent(n.to().block()).filter(function(t){return Dr.eq(e,t)})}).isSome())&&(t=e,!1===vo.isContentEditableFalse(t.from().block())&&!1===vo.isContentEditableFalse(t.to().block()));var t,n,r})},Lu=function(e,t,n){return n.collapsed?Iu(e,t,n):E.none()},Mu=function(e,t,n){return Dr.contains(t,e)?Ur.parents(e,function(e){return n(e)||Dr.eq(e,t)}).slice(0,-1):[]},Fu=function(e,t){return Mu(e,t,y.constant(!1))},zu=Fu,Uu=function(e,t){return[e].concat(Fu(e,t))},Vu=function(e){var t,n,r=(t=e,n=Ur.children(t),M.findIndex(n,io.isBlock).fold(function(){return n},function(e){return n.slice(0,e)}));return M.each(r,function(e){Bs.remove(e)}),r},Hu=function(e,t){Ws.positionIn(e,t.dom()).each(function(e){var t=e.getNode();vo.isBr(t)&&Bs.remove(Hn.fromDom(t))})},qu=function(e,t){var n=Uu(t,e);return M.find(n.reverse(),Ru).each(Bs.remove)},ju=function(e,t){return Dr.contains(t,e)?Ur.parent(e).bind(function(n){return Dr.eq(n,t)?E.some(e):(r=t,o=e,i=Ur.parents(o,function(e){return Dr.eq(e,r)}),E.from(i[i.length-2]));var r,o,i}):E.none()},$u=function(e,t,n){if(Ru(n))return Bs.remove(n),Ru(t)&&Is(t),Ws.firstPositionIn(t.dom());Hu(!0,t),Hu(!1,n);var r=Vu(t);return ju(t,n).fold(function(){qu(e,t);var o=Ws.lastPositionIn(n.dom());return M.each(r,function(e){ks.append(n,e)}),o},function(o){var i=Ws.prevPosition(n.dom(),ia.before(o.dom()));return M.each(r,function(e){ks.before(o,e)}),qu(e,t),i})},Wu=function(e,t,n,r){return t?$u(e,r,n):$u(e,n,r)},Ku=function(e,t){var n,r=Hn.fromDom(e.getBody());return(n=Lu(r.dom(),t,e.selection.getRng()).bind(function(e){return Wu(r,t,e.from().block(),e.to().block())})).each(function(t){e.selection.setRng(t.toRange())}),n.isSome()},Xu=function(e,t){var n=Hn.fromDom(t),r=y.curry(Dr.eq,e);return nu.ancestor(n,io.isTableCell,r).isSome()},Yu=function(e,t){var n,r,o=Ws.prevPosition(e.dom(),ia.fromRangeStart(t)).isNone(),i=Ws.nextPosition(e.dom(),ia.fromRangeEnd(t)).isNone();return!(Xu(n=e,(r=t).startContainer)||Xu(n,r.endContainer))&&o&&i},Gu=function(e){var t,n,r,o,i=Hn.fromDom(e.getBody()),a=e.selection.getRng();return Yu(i,a)?((o=e).setContent(""),o.selection.setCursorLocation(),!0):(t=i,n=e.selection,r=n.getRng(),hs([yu(t,Hn.fromDom(r.startContainer)),yu(t,Hn.fromDom(r.endContainer))],function(e,o){return!1===Dr.eq(e,o)&&(r.deleteContents(),Wu(t,!0,e,o).each(function(e){n.setRng(e.toRange())}),!0)}).getOr(!1))},Ju=function(e,t){return!e.selection.isCollapsed()&&Gu(e)},Qu=function(e){if(!tr.isArray(e))throw new Error("cases must be an array");if(0===e.length)throw new Error("there must be at least one case");var t=[],n={};return M.each(e,function(r,o){var i=sr.keys(r);if(1!==i.length)throw new Error("one and only one name per case");var a=i[0],s=r[a];if(n[a]!==undefined)throw new Error("duplicate key detected:"+a);if("cata"===a)throw new Error("cannot have a case named cata (sorry)");if(!tr.isArray(s))throw new Error("case arguments must be an array");t.push(a),n[a]=function(){var n=arguments.length;if(n!==s.length)throw new Error("Wrong number of arguments to case "+a+". Expected "+s.length+" ("+s+"), got "+n);for(var r=new Array(n),i=0;i<r.length;i++)r[i]=arguments[i];return{fold:function(){if(arguments.length!==e.length)throw new Error("Wrong number of arguments to fold. Expected "+e.length+", got "+arguments.length);return arguments[o].apply(null,r)},match:function(e){var n=sr.keys(e);if(t.length!==n.length)throw new Error("Wrong number of arguments to match. Expected: "+t.join(",")+"\nActual: "+n.join(","));if(!M.forall(t,function(e){return M.contains(n,e)}))throw new Error("Not all branches were specified when using match. Specified: "+n.join(", ")+"\nRequired: "+t.join(", "));return e[a].apply(null,r)},log:function(e){console.log(e,{constructors:t,constructor:a,params:r})}}}}),n},Zu=Qu([{remove:["element"]},{moveToElement:["element"]},{moveToPosition:["position"]}]),ec=function(e,t,n,r){var o=r.getNode(!1===t);return yu(Hn.fromDom(e),Hn.fromDom(n.getNode())).map(function(e){return Ru(e)?Zu.remove(e.dom()):Zu.moveToElement(o)}).orThunk(function(){return E.some(Zu.moveToElement(o))})},tc=function(e,t,n){return Ws.fromPosition(t,e,n).bind(function(r){return t&&vo.isContentEditableFalse(r.getNode())?ec(e,t,n,r):!1===t&&vo.isContentEditableFalse(r.getNode(!0))?ec(e,t,n,r):t&&_a.isAfterContentEditableFalse(n)?E.some(Zu.moveToPosition(r)):!1===t&&_a.isBeforeContentEditableFalse(n)?E.some(Zu.moveToPosition(r)):E.none()})},nc=function(e,t,n){return i=t,a=n.getNode(!1===i),s=i?"after":"before",vo.isElement(a)&&a.getAttribute("data-mce-caret")===s?(r=t,o=n.getNode(!1===t),r&&vo.isContentEditableFalse(o.nextSibling)?E.some(Zu.moveToElement(o.nextSibling)):!1===r&&vo.isContentEditableFalse(o.previousSibling)?E.some(Zu.moveToElement(o.previousSibling)):E.none()).fold(function(){return tc(e,t,n)},E.some):tc(e,t,n).bind(function(t){return r=e,o=n,t.fold(function(e){return E.some(Zu.remove(e))},function(e){return E.some(Zu.moveToElement(e))},function(e){return _a.isInSameBlock(o,e,r)?E.none():E.some(Zu.moveToPosition(e))});var r,o});var r,o,i,a,s},rc=function(e,t,n){var r=_a.normalizeRange(t?1:-1,e,n),o=ia.fromRangeStart(r);return!1===t&&_a.isAfterContentEditableFalse(o)?E.some(Zu.remove(o.getNode(!0))):t&&_a.isBeforeContentEditableFalse(o)?E.some(Zu.remove(o.getNode())):nc(e,t,o)},oc=function(e,t){return r=e,o=(n=t).container(),i=n.offset(),!1===ia.isTextPosition(n)&&o===r.parentNode&&i>ia.before(r).offset()?new ia(t.container(),t.offset()-1):t;var n,r,o,i},ic=function(e){return Ei(e.previousSibling)?E.some((t=e.previousSibling,vo.isText(t)?new ia(t,t.data.length):ia.after(t))):e.previousSibling?Ws.lastPositionIn(e.previousSibling):E.none();var t},ac=function(e){return Ei(e.nextSibling)?E.some((t=e.nextSibling,vo.isText(t)?new ia(t,0):ia.before(t))):e.nextSibling?Ws.firstPositionIn(e.nextSibling):E.none();var t},sc=function(e,t){return ic(t).orThunk(function(){return ac(t)}).orThunk(function(){return n=e,r=t,o=ia.before(r.previousSibling?r.previousSibling:r.parentNode),Ws.prevPosition(n,o).fold(function(){return Ws.nextPosition(n,ia.after(r))},E.some);var n,r,o})},uc=function(e,t){return ac(t).orThunk(function(){return ic(t)}).orThunk(function(){return n=e,r=t,Ws.nextPosition(n,ia.after(r)).fold(function(){return Ws.prevPosition(n,ia.before(r))},E.some);var n,r})},cc=function(e,t,n){return(r=e,o=t,i=n,r?uc(o,i):sc(o,i)).map(y.curry(oc,n));var r,o,i},lc=function(e,t,n){n.fold(function(){e.focus()},function(n){e.selection.setRng(n.toRange(),t)})},fc=function(e,t){return t&&e.schema.getBlockElements().hasOwnProperty(Zn.name(t))},dc=function(e){if(Ru(e)){var t=Hn.fromHtml('<br data-mce-bogus="1">');return Bs.empty(e),ks.append(e,t),E.some(ia.before(t.dom()))}return E.none()},mc=function(e,t,n){var r,o,i,a=cc(t,e.getBody(),n.dom()),s=nu.ancestor(n,y.curry(fc,e),(r=e.getBody(),function(e){return e.dom()===r})),u=(o=n,i=a,hs([Ur.prevSibling(o),Ur.nextSibling(o),i],function(e,t,n){var r,i=e.dom(),a=t.dom();return vo.isText(i)&&vo.isText(a)?(r=i.data.length,i.appendData(a.data),Bs.remove(t),Bs.remove(o),n.container()===a?new ia(i,r):n):(Bs.remove(o),n)}).orThunk(function(){return Bs.remove(o),i}));e.dom.isEmpty(e.getBody())?(e.setContent(""),e.selection.setCursorLocation()):s.bind(dc).fold(function(){lc(e,t,u)},function(n){lc(e,t,E.some(n))})},pc=function(e,t){return rc(e.getBody(),t,e.selection.getRng()).map(function(n){return n.fold((a=e,s=t,function(e){return a._selectionOverrides.hideFakeCaret(),mc(a,s,Hn.fromDom(e)),!0}),(o=e,i=t,function(e){var t=i?ia.before(e):ia.after(e);return o.selection.setRng(t.toRange()),!0}),(r=e,function(e){return r.selection.setRng(e.toRange()),!0}));var r,o,i,a,s}).getOr(!1)},gc=function(e,t){var n,r=e.selection.getNode();return!!vo.isContentEditableFalse(r)&&(n=Hn.fromDom(e.getBody()),M.each(Os(n,".mce-offscreen-selection"),Bs.remove),mc(e,t,Hn.fromDom(e.selection.getNode())),bu(e),!0)},hc=function(e,t){return e.selection.isCollapsed()?pc(e,t):gc(e,t)},vc=function(e){var t,n=function(e,t){for(;t&&t!==e;){if(vo.isContentEditableTrue(t)||vo.isContentEditableFalse(t))return t;t=t.parentNode}return null}(e.getBody(),e.selection.getNode());return vo.isContentEditableTrue(n)&&e.dom.isBlock(n)&&e.dom.isEmpty(n)&&(t=e.dom.create("br",{"data-mce-bogus":"1"}),e.dom.setHTML(n,""),n.appendChild(t),e.selection.setRng(ia.before(t).toRange())),!0},yc=vo.isText,bc=function(e){return yc(e)&&e.data[0]===oi},Cc=function(e){return yc(e)&&e.data[e.data.length-1]===oi},xc=function(e){return e.ownerDocument.createTextNode(oi)},wc=function(e,t){return e?function(e){if(yc(e.previousSibling))return Cc(e.previousSibling)?e.previousSibling:(e.previousSibling.appendData(oi),e.previousSibling);if(yc(e))return bc(e)?e:(e.insertData(0,oi),e);var t=xc(e);return e.parentNode.insertBefore(t,e),t}(t):function(e){if(yc(e.nextSibling))return bc(e.nextSibling)?e.nextSibling:(e.nextSibling.insertData(0,oi),e.nextSibling);if(yc(e))return Cc(e)?e:(e.appendData(oi),e);var t=xc(e);return e.nextSibling?e.parentNode.insertBefore(t,e.nextSibling):e.parentNode.appendChild(t),t}(t)},Nc={insertInline:wc,insertInlineBefore:y.curry(wc,!0),insertInlineAfter:y.curry(wc,!1)},Ec=vo.isElement,Sc=vo.isText,kc=function(e){var t=e.parentNode;t&&t.removeChild(e)},Tc=function(e,t){0===t.length?kc(e):e.nodeValue=t},Ac=function(e){var t=ii(e);return{count:e.length-t.length,text:t}},_c=function(e,t){return Dc(e),t},Bc=function(e,t){return t.container()===e?(r=t,o=Ac((n=e).data.substr(0,r.offset())),i=Ac(n.data.substr(r.offset())),(a=o.text+i.text).length>0?(Tc(n,a),new ia(n,r.offset()-o.count)):r):_c(e,t);var n,r,o,i,a},Rc=function(e,t){return t.container()===e.parentNode?(n=e,o=(r=t).container(),i=M.indexOf(o.childNodes,n).map(function(e){return e<r.offset()?new ia(o,r.offset()-1):r}).getOr(r),Dc(n),i):_c(e,t);var n,r,o,i},Dc=function(e){if(Ec(e)&&mi.isCaretContainer(e)&&(mi.hasContent(e)?e.removeAttribute("data-mce-caret"):kc(e)),Sc(e)){var t=ii(function(e){try{return e.nodeValue}catch(t){return""}}(e));Tc(e,t)}},Oc={removeAndReposition:function(e,t){return ia.isTextPosition(t)?Bc(e,t):Rc(e,t)},remove:Dc},Pc=function(e,t){return vo.isText(e.container())?Nc.insertInline(t,e.container()):Nc.insertInline(t,e.getNode())},Ic=function(e,t){var n=t.get();return n&&e.container()===n&&mi.isCaretContainerInline(n)},Lc=function(e,t){return t.fold(function(t){Oc.remove(e.get());var n=Nc.insertInlineBefore(t);return e.set(n),E.some(new ia(n,n.length-1))},function(t){return Ws.firstPositionIn(t).map(function(t){if(Ic(t,e))return new ia(e.get(),1);Oc.remove(e.get());var n=Pc(t,!0);return e.set(n),new ia(n,1)})},function(t){return Ws.lastPositionIn(t).map(function(t){if(Ic(t,e))return new ia(e.get(),e.get().length-1);Oc.remove(e.get());var n=Pc(t,!1);return e.set(n),new ia(n,n.length-1)})},function(t){Oc.remove(e.get());var n=Nc.insertInlineAfter(t);return e.set(n),E.some(new ia(n,1))})},Mc=function(e){return e&&/^(IMG)$/.test(e.nodeName)},Fc=function(e){return e&&3===e.nodeType&&/^([\t \r\n]+|)$/.test(e.nodeValue)},zc=function(e,t,n){return"color"!==n&&"backgroundColor"!==n||(t=e.toHex(t)),"fontWeight"===n&&700===t&&(t="bold"),"fontFamily"===n&&(t=t.replace(/[\'\"]/g,"").replace(/,\s+/g,",")),""+t},Uc={isInlineBlock:Mc,moveStart:function(e,t,n){var r,o,i,a=n.startContainer,s=n.startOffset;if((n.startContainer!==n.endContainer||!Mc(n.startContainer.childNodes[n.startOffset]))&&(3===a.nodeType&&s>=a.nodeValue.length&&(s=e.nodeIndex(a),a=a.parentNode),1===a.nodeType))for(s<(i=a.childNodes).length?(a=i[s],r=new to(a,e.getParent(a,e.isBlock))):(a=i[i.length-1],(r=new to(a,e.getParent(a,e.isBlock))).next(!0)),o=r.current();o;o=r.next())if(3===o.nodeType&&!Fc(o))return n.setStart(o,0),void t.setRng(n)},getNonWhiteSpaceSibling:function(e,t,n){if(e)for(t=t?"nextSibling":"previousSibling",e=n?e:e[t];e;e=e[t])if(1===e.nodeType||!Fc(e))return e},isTextBlock:function(e,t){return t.nodeType&&(t=t.nodeName),!!e.schema.getTextBlockElements()[t.toLowerCase()]},isValid:function(e,t,n){return e.schema.isValidChild(t,n)},isWhiteSpaceNode:Fc,replaceVars:function(e,t){return"string"!=typeof e?e=e(t):t&&(e=e.replace(/%(\w+)/g,function(e,n){return t[n]||e})),e},isEq:function(e,t){return e=e||"",t=t||"",e=""+(e.nodeName||e),t=""+(t.nodeName||t),e.toLowerCase()===t.toLowerCase()},normalizeStyleValue:zc,getStyle:function(e,t,n){return zc(e,e.getStyle(t,n),n)},getTextDecoration:function(e,t){var n;return e.getParent(t,function(t){return(n=e.getStyle(t,"text-decoration"))&&"none"!==n}),n},getParents:function(e,t,n){return e.getParents(t,n,e.getRoot())}},Vc=xs.isBookmarkNode,Hc=Uc.getParents,qc=Uc.isWhiteSpaceNode,jc=Uc.isTextBlock,$c=function(e,t){for(void 0===t&&(t=3===e.nodeType?e.length:e.childNodes.length);e&&e.hasChildNodes();)(e=e.childNodes[t])&&(t=3===e.nodeType?e.length:e.childNodes.length);return{node:e,offset:t}},Wc=function(e,t){for(var n=t;n;){if(1===n.nodeType&&e.getContentEditable(n))return"false"===e.getContentEditable(n)?n:t;n=n.parentNode}return t},Kc=function(e,t,n,r){var o,i,a=n.nodeValue;return void 0===r&&(r=e?a.length:0),e?-1===(o=(o=a.lastIndexOf(" ",r))>(i=a.lastIndexOf("\xa0",r))?o:i)||t||o++:(o=a.indexOf(" ",r),i=a.indexOf("\xa0",r),o=-1!==o&&(-1===i||o<i)?o:i),o},Xc=function(e,t,n,r,o,i){var a,s,u,c;if(3===n.nodeType){if(-1!==(u=Kc(o,i,n,r)))return{container:n,offset:u};c=n}for(a=new to(n,e.getParent(n,e.isBlock)||t);s=a[o?"prev":"next"]();)if(3===s.nodeType){if(c=s,-1!==(u=Kc(o,i,s)))return{container:s,offset:u}}else if(e.isBlock(s))break;if(c)return{container:c,offset:r=o?0:c.length}},Yc=function(e,t,n,r,o){var i,a,s,u;for(3===r.nodeType&&0===r.nodeValue.length&&r[o]&&(r=r[o]),i=Hc(e,r),a=0;a<i.length;a++)for(s=0;s<t.length;s++)if(!("collapsed"in(u=t[s])&&u.collapsed!==n.collapsed)&&e.is(i[a],u.selector))return i[a];return r},Gc=function(e,t,n,r){var o,i=e.dom,a=i.getRoot();if(t[0].wrapper||(o=i.getParent(n,t[0].block,a)),!o){var s=i.getParent(n,"LI,TD,TH");o=i.getParent(3===n.nodeType?n.parentNode:n,function(t){return t!==a&&jc(e,t)},s)}if(o&&t[0].wrapper&&(o=Hc(i,o,"ul,ol").reverse()[0]||o),!o)for(o=n;o[r]&&!i.isBlock(o[r])&&(o=o[r],!Uc.isEq(o,"br")););return o||n},Jc=function(e,t,n,r,o,i,a){var s,u,c,l,f,d;if(s=u=a?n:o,l=a?"previousSibling":"nextSibling",f=e.getRoot(),3===s.nodeType&&!qc(s)&&(a?r>0:i<s.nodeValue.length))return s;for(;;){if(!t[0].block_expand&&e.isBlock(u))return u;for(c=u[l];c;c=c[l])if(!Vc(c)&&!qc(c)&&("BR"!==(d=c).nodeName||!d.getAttribute("data-mce-bogus")||d.nextSibling))return u;if(u===f||u.parentNode===f){s=u;break}u=u.parentNode}return s},Qc=function(e,t,n,r){var o,i=t.startContainer,a=t.startOffset,s=t.endContainer,u=t.endOffset,c=e.dom;return 1===i.nodeType&&i.hasChildNodes()&&3===(i=zi(i,a)).nodeType&&(a=0),1===s.nodeType&&s.hasChildNodes()&&3===(s=zi(s,t.collapsed?u:u-1)).nodeType&&(u=s.nodeValue.length),i=Wc(c,i),s=Wc(c,s),(Vc(i.parentNode)||Vc(i))&&3===(i=(i=Vc(i)?i:i.parentNode).nextSibling||i).nodeType&&(a=0),(Vc(s.parentNode)||Vc(s))&&3===(s=(s=Vc(s)?s:s.parentNode).previousSibling||s).nodeType&&(u=s.length),n[0].inline&&(t.collapsed&&((o=Xc(c,e.getBody(),i,a,!0,r))&&(i=o.container,a=o.offset),(o=Xc(c,e.getBody(),s,u,!1,r))&&(s=o.container,u=o.offset)),s=r?s:function(e,t){var n=$c(e,t);if(n.node){for(;n.node&&0===n.offset&&n.node.previousSibling;)n=$c(n.node.previousSibling);n.node&&n.offset>0&&3===n.node.nodeType&&" "===n.node.nodeValue.charAt(n.offset-1)&&n.offset>1&&(e=n.node).splitText(n.offset-1)}return e}(s,u)),(n[0].inline||n[0].block_expand)&&(n[0].inline&&3===i.nodeType&&0!==a||(i=Jc(c,n,i,a,s,u,!0)),n[0].inline&&3===s.nodeType&&u!==s.nodeValue.length||(s=Jc(c,n,i,a,s,u,!1))),n[0].selector&&!1!==n[0].expand&&!n[0].inline&&(i=Yc(c,n,t,i,"previousSibling"),s=Yc(c,n,t,s,"nextSibling")),(n[0].block||n[0].selector)&&(i=Gc(e,n,i,"previousSibling"),s=Gc(e,n,s,"nextSibling"),n[0].block&&(c.isBlock(i)||(i=Jc(c,n,i,a,s,u,!0)),c.isBlock(s)||(s=Jc(c,n,i,a,s,u,!1)))),1===i.nodeType&&(a=c.nodeIndex(i),i=i.parentNode),1===s.nodeType&&(u=c.nodeIndex(s)+1,s=s.parentNode),{startContainer:i,startOffset:a,endContainer:s,endOffset:u}},Zc=Uc.isEq,el=function(e,t,n){var r=e.formatter.get(n);if(r)for(var o=0;o<r.length;o++)if(!1===r[o].inherit&&e.dom.is(t,r[o].selector))return!0;return!1},tl=function(e,t,n,r){var o=e.dom.getRoot();return t!==o&&(t=e.dom.getParent(t,function(t){return!!el(e,t,n)||t.parentNode===o||!!ol(e,t,n,r,!0)}),ol(e,t,n,r))},nl=function(e,t,n){return!!Zc(t,n.inline)||!!Zc(t,n.block)||(n.selector?1===t.nodeType&&e.is(t,n.selector):void 0)},rl=function(e,t,n,r,o,i){var a,s,u,c=n[r];if(n.onmatch)return n.onmatch(t,n,r);if(c)if("undefined"==typeof c.length){for(a in c)if(c.hasOwnProperty(a)){if(s="attributes"===r?e.getAttrib(t,a):Uc.getStyle(e,t,a),o&&!s&&!n.exact)return;if((!o||n.exact)&&!Zc(s,Uc.normalizeStyleValue(e,Uc.replaceVars(c[a],i),a)))return}}else for(u=0;u<c.length;u++)if("attributes"===r?e.getAttrib(t,c[u]):Uc.getStyle(e,t,c[u]))return n;return n},ol=function(e,t,n,r,o){var i,a,s,u,c=e.formatter.get(n),l=e.dom;if(c&&t)for(a=0;a<c.length;a++)if(i=c[a],nl(e.dom,t,i)&&rl(l,t,i,"attributes",o,r)&&rl(l,t,i,"styles",o,r)){if(u=i.classes)for(s=0;s<u.length;s++)if(!e.dom.hasClass(t,u[s]))return;return i}},il={matchNode:ol,matchName:nl,match:function(e,t,n,r){var o;return r?tl(e,r,t,n):(r=e.selection.getNode(),!!tl(e,r,t,n)||!((o=e.selection.getStart())===r||!tl(e,o,t,n)))},matchAll:function(e,t,n){var r,o=[],i={};return r=e.selection.getStart(),e.dom.getParent(r,function(r){var a,s;for(a=0;a<t.length;a++)s=t[a],!i[s]&&ol(e,r,s,n)&&(i[s]=!0,o.push(s))},e.dom.getRoot()),o},canApply:function(e,t){var n,r,o,i,a,s=e.formatter.get(t),u=e.dom;if(s)for(n=e.selection.getStart(),r=Uc.getParents(u,n),i=s.length-1;i>=0;i--){if(!(a=s[i].selector)||s[i].defaultBlock)return!0;for(o=r.length-1;o>=0;o--)if(u.is(r[o],a))return!0}return!1},matchesUnInheritedFormatSelector:el},al=function(e,t){return e.splitText(t)},sl={split:function(e){var t=e.startContainer,n=e.startOffset,r=e.endContainer,o=e.endOffset;return t===r&&vo.isText(t)?n>0&&n<t.nodeValue.length&&(t=(r=al(t,n)).previousSibling,o>n?(t=r=al(r,o-=n).previousSibling,o=r.nodeValue.length,n=0):o=0):(vo.isText(t)&&n>0&&n<t.nodeValue.length&&(t=al(t,n),n=0),vo.isText(r)&&o>0&&o<r.nodeValue.length&&(o=(r=al(r,o).previousSibling).nodeValue.length)),{startContainer:t,startOffset:n,endContainer:r,endOffset:o}}},ul=oi,cl="_mce_caret",ll=function(e){return 1===e.nodeType&&e.id===cl},fl=function(e){return function(e){for(var t=[];e;){if(3===e.nodeType&&e.nodeValue!==ul||e.childNodes.length>1)return[];1===e.nodeType&&t.push(e),e=e.firstChild}return t}(e).length>0},dl=function(e){var t;if(e)for(e=(t=new to(e,e)).current();e;e=t.next())if(3===e.nodeType)return e;return null},ml=function(e){var t=Hn.fromTag("span");return dr.setAll(t,{id:cl,"data-mce-bogus":"1","data-mce-type":"format-caret"}),e&&ks.append(t,Hn.fromText(ul)),t},pl=function(e,t){for(;t&&t!==e;){if(t.id===cl)return t;t=t.parentNode}return null},gl=function(e,t,n,r){var o,i,a,s;o=t.getRng(!0),i=e.getParent(n,e.isBlock),fl(n)?(!1!==r&&(o.setStartBefore(n),o.setEndBefore(n)),e.remove(n)):((s=dl(n))&&s.nodeValue.charAt(0)===ul&&s.deleteData(0,1),a=s,o.startContainer===a&&o.startOffset>0&&o.setStart(a,o.startOffset-1),o.endContainer===a&&o.endOffset>0&&o.setEnd(a,o.endOffset-1),e.remove(n,!0)),i&&e.isEmpty(i)&&Is(Hn.fromDom(i)),t.setRng(o)},hl=function(e,t,n,r,o){if(r)gl(t,n,r,o);else if(!(r=pl(e,n.getStart())))for(;r=t.get(cl);)gl(t,n,r,!1)},vl=function(e,t,n){var r=e.dom,o=r.getParent(n,ji.curry(Uc.isTextBlock,e));o&&r.isEmpty(o)?n.parentNode.replaceChild(t,n):(Ps(Hn.fromDom(n)),r.isEmpty(n)?n.parentNode.replaceChild(t,n):r.insertAfter(t,n))},yl=function(e,t){return e.appendChild(t),t},bl=function(e,t){var n=M.foldr(e,function(e,t){return yl(e,t.cloneNode(!1))},t);return yl(n,n.ownerDocument.createTextNode(ul))},Cl=function(e){var t=e.dom,n=e.selection,r=e.getBody();e.on("mouseup keydown",function(e){var o,i,a,s;o=r,i=t,a=n,s=e.keyCode,hl(o,i,a,null,!1),8===s&&a.isCollapsed()&&a.getStart().innerHTML===ul&&hl(o,i,a,pl(o,a.getStart())),37!==s&&39!==s||hl(o,i,a,pl(o,a.getStart()))})},xl=function(e,t,n){var r,o,i,a,s,u,c=e.selection;a=(r=c.getRng(!0)).startOffset,u=r.startContainer.nodeValue,(o=pl(e.getBody(),c.getStart()))&&(i=dl(o));var l,f,d=/[^\s\u00a0\u00ad\u200b\ufeff]/;u&&a>0&&a<u.length&&d.test(u.charAt(a))&&d.test(u.charAt(a-1))?(s=c.getBookmark(),r.collapse(!0),r=Qc(e,r,e.formatter.get(t)),r=sl.split(r),e.formatter.apply(t,n,r),c.moveToBookmark(s)):(o&&i.nodeValue===ul?e.formatter.apply(t,n,o):(l=e.getDoc(),f=ml(!0).dom(),i=(o=l.importNode(f,!0)).firstChild,r.insertNode(o),a=1,e.formatter.apply(t,n,o)),c.setCursorLocation(i,a))},wl=function(e,t,n,r){var o,i,a,s,u,c,l,f=e.dom,d=e.selection,m=[],p=d.getRng();for(o=p.startContainer,i=p.startOffset,u=o,3===o.nodeType&&(i!==o.nodeValue.length&&(s=!0),u=u.parentNode);u;){if(il.matchNode(e,u,t,n,r)){c=u;break}u.nextSibling&&(s=!0),m.push(u),u=u.parentNode}if(c)if(s){a=d.getBookmark(),p.collapse(!0);var g=Qc(e,p,e.formatter.get(t),!0);g=sl.split(g),e.formatter.remove(t,n,g),d.moveToBookmark(a)}else{l=pl(e.getBody(),c);var h=ml(!1).dom(),v=bl(m,h);vl(e,h,l||c),gl(f,d,l,!1),d.setCursorLocation(v,1),f.isEmpty(c)&&f.remove(c)}},Nl=ll,El=pl,Sl=function(e,t){var n=ml(!1),r=bl(t,n.dom());return ks.before(Hn.fromDom(e),n),Bs.remove(Hn.fromDom(e)),ia(r,0)},kl=function(e,t){return e.schema.getTextInlineElements().hasOwnProperty(Zn.name(t))&&!ll(t.dom())&&!vo.isBogus(t.dom())},Tl=function(e,t){for(var n=0;n<e.length;n++){var r=e[n].apply(null,t);if(r.isSome())return r}return E.none()},Al=Qu([{before:["element"]},{start:["element"]},{end:["element"]},{after:["element"]}]),_l=function(e,t){var n=_a.getParentBlock(t,e);return n||e},Bl=function(e,t,n){var r=vu.normalizeForwards(n),o=_l(t,r.container());return vu.findRootInline(e,o,r).fold(function(){return Ws.nextPosition(o,r).bind(y.curry(vu.findRootInline,e,o)).map(function(e){return Al.before(e)})},E.none)},Rl=function(e,t){return null===El(e,t)},Dl=function(e,t,n){return vu.findRootInline(e,t,n).filter(y.curry(Rl,t))},Ol=function(e,t,n){var r=vu.normalizeBackwards(n);return Dl(e,t,r).bind(function(e){return Ws.prevPosition(e,r).isNone()?E.some(Al.start(e)):E.none()})},Pl=function(e,t,n){var r=vu.normalizeForwards(n);return Dl(e,t,r).bind(function(e){return Ws.nextPosition(e,r).isNone()?E.some(Al.end(e)):E.none()})},Il=function(e,t,n){var r=vu.normalizeBackwards(n),o=_l(t,r.container());return vu.findRootInline(e,o,r).fold(function(){return Ws.prevPosition(o,r).bind(y.curry(vu.findRootInline,e,o)).map(function(e){return Al.after(e)})},E.none)},Ll=function(e){return!1===vu.isRtl(Fl(e))},Ml=function(e,t,n){return Tl([Bl,Ol,Pl,Il],[e,t,n]).filter(Ll)},Fl=function(e){return e.fold(y.identity,y.identity,y.identity,y.identity)},zl=function(e){return e.fold(y.constant("before"),y.constant("start"),y.constant("end"),y.constant("after"))},Ul=function(e){return e.fold(Al.before,Al.before,Al.after,Al.after)},Vl=function(e,t,n,r,o,i){return hs([vu.findRootInline(t,n,r),vu.findRootInline(t,n,o)],function(t,r){return t!==r&&vu.hasSameParentBlock(n,t,r)?Al.after(e?t:r):i}).getOr(i)},Hl=function(e,t){return e.fold(y.constant(!0),function(e){return r=t,!(zl(n=e)===zl(r)&&Fl(n)===Fl(r));var n,r})},ql=function(e,t){return e?t.fold(y.compose(E.some,Al.start),E.none,y.compose(E.some,Al.after),E.none):t.fold(E.none,y.compose(E.some,Al.before),E.none,y.compose(E.some,Al.end))},jl=function(e,t,n,r){var o=vu.normalizePosition(e,r),i=Ml(t,n,o);return Ml(t,n,o).bind(y.curry(ql,e)).orThunk(function(){return o=e,a=t,s=n,u=i,c=r,l=vu.normalizePosition(o,c),Ws.fromPosition(o,s,l).map(y.curry(vu.normalizePosition,o)).fold(function(){return u.map(Ul)},function(e){return Ml(a,s,e).map(y.curry(Vl,o,a,s,l,e)).filter(y.curry(Hl,u))}).filter(Ll);var o,a,s,u,c,l})},$l=Ml,Wl=jl,Kl=(y.curry(jl,!1),y.curry(jl,!0),Ul),Xl=function(e){return e.fold(Al.start,Al.start,Al.end,Al.end)},Yl=function(e){var t=e,n=function(){return t};return{get:n,set:function(e){t=e},clone:function(){return Yl(n())}}},Gl=function(e){return tr.isFunction(e.selection.getSel().modify)},Jl=function(e,t,n){var r=e?1:-1;return t.setRng(ia(n.container(),n.offset()+r).toRange()),t.getSel().modify("move",e?"forward":"backward","word"),!0},Ql=function(e,t){var n=t.selection.getRng(),r=e?ia.fromRangeEnd(n):ia.fromRangeStart(n);return!!Gl(t)&&(e&&mi.isBeforeInline(r)?Jl(!0,t.selection,r):!(e||!mi.isAfterInline(r))&&Jl(!1,t.selection,r))},Zl=function(e,t){var n=e.dom.createRng();n.setStart(t.container(),t.offset()),n.setEnd(t.container(),t.offset()),e.selection.setRng(n)},ef=function(e){return!1!==e.settings.inline_boundaries},tf=function(e,t){e?t.setAttribute("data-mce-selected","inline-boundary"):t.removeAttribute("data-mce-selected")},nf=function(e,t,n){return Lc(t,n).map(function(t){return Zl(e,t),n})},rf=function(e,t,n){return function(){return!!ef(t)&&Ql(e,t)}},of={move:function(e,t,n){return function(){return!!ef(e)&&(r=e,o=t,i=n,a=r.getBody(),s=ia.fromRangeStart(r.selection.getRng()),u=y.curry(vu.isInlineTarget,r),Wl(i,u,a,s).bind(function(e){return nf(r,o,e)})).isSome();var r,o,i,a,s,u}},moveNextWord:y.curry(rf,!0),movePrevWord:y.curry(rf,!1),setupSelectedState:function(e){var t=new Yl(null),n=y.curry(vu.isInlineTarget,e);return e.on("NodeChange",function(r){var o,i,a,s,u;ef(e)&&(o=n,i=e.dom,a=r.parents,s=M.filter(i.select('*[data-mce-selected="inline-boundary"]'),o),u=M.filter(a,o),M.each(M.difference(s,u),y.curry(tf,!1)),M.each(M.difference(u,s),y.curry(tf,!0)),function(e,t){if(e.selection.isCollapsed()&&!0!==e.composing&&t.get()){var n=ia.fromRangeStart(e.selection.getRng());ia.isTextPosition(n)&&!1===vu.isAtZwsp(n)&&(Zl(e,Oc.removeAndReposition(t.get(),n)),t.set(null))}}(e,t),function(e,t,n,r){if(t.selection.isCollapsed()){var o=M.filter(r,e);M.each(o,function(r){var o=ia.fromRangeStart(t.selection.getRng());$l(e,t.getBody(),o).bind(function(e){return nf(t,n,e)})})}}(n,e,t,r.parents))}),t},setCaretPosition:Zl},af=function(e,t){return function(n){return Lc(t,n).map(function(t){return of.setCaretPosition(e,t),!0}).getOr(!1)}},sf=function(e,t,n,r){var o=e.getBody(),i=y.curry(vu.isInlineTarget,e);e.undoManager.ignore(function(){var a,s,u;e.selection.setRng((a=n,s=r,(u=document.createRange()).setStart(a.container(),a.offset()),u.setEnd(s.container(),s.offset()),u)),e.execCommand("Delete"),$l(i,o,ia.fromRangeStart(e.selection.getRng())).map(Xl).map(af(e,t))}),e.nodeChanged()},uf=function(e,t,n,r){var o,i,a=(o=e.getBody(),i=r.container(),_a.getParentBlock(i,o)||o),s=y.curry(vu.isInlineTarget,e),u=$l(s,a,r);return u.bind(function(e){return n?e.fold(y.constant(E.some(Xl(e))),E.none,y.constant(E.some(Kl(e))),E.none):e.fold(E.none,y.constant(E.some(Kl(e))),E.none,y.constant(E.some(Xl(e))))}).map(af(e,t)).getOrThunk(function(){var o=Ws.navigate(n,a,r),i=o.bind(function(e){return $l(s,a,e)});return u.isSome()&&i.isSome()?vu.findRootInline(s,a,r).map(function(t){return r=t,!!hs([Ws.firstPositionIn(r),Ws.lastPositionIn(r)],function(e,t){var n=vu.normalizePosition(!0,e),o=vu.normalizePosition(!1,t);return Ws.nextPosition(r,n).map(function(e){return e.isEqual(o)}).getOr(!0)}).getOr(!0)&&(mc(e,n,Hn.fromDom(t)),!0);var r}).getOr(!1):i.bind(function(i){return o.map(function(o){return n?sf(e,t,r,o):sf(e,t,o,r),!0})}).getOr(!1)})},cf=function(e,t,n){if(e.selection.isCollapsed()&&!1!==e.settings.inline_boundaries){var r=ia.fromRangeStart(e.selection.getRng());return uf(e,t,n,r)}return!1},lf=xr("start","end"),ff=xr("rng","table","cells"),df=Qu([{removeTable:["element"]},{emptyCells:["cells"]}]),mf=function(e,t){return Eu(Hn.fromDom(e),"td,th",t)},pf=function(e,t){return wu(e,"table",t)},gf=function(e){return!1===Dr.eq(e.start(),e.end())},hf=function(e,t){return(n=e,r=t,pf(n.start(),r).bind(function(e){return pf(n.end(),r).bind(function(t){return Dr.eq(e,t)?E.some(e):E.none()})})).bind(function(t){var n=Os(t,"td,th");return ff(e,t,n)});var n,r},vf=function(e,t){var n,r,o=y.curry(Dr.eq,e);return(n=t,r=o,hs([mf(n.startContainer,r),mf(n.endContainer,r)],lf).filter(gf)).map(function(e){return hf(e,o)})},yf=function(e,t){return M.findIndex(e,function(e){return Dr.eq(e,t)})},bf=function(e){return(t=e,hs([yf(t.cells(),t.rng().start()),yf(t.cells(),t.rng().end())],function(e,n){return t.cells().slice(e,n+1)})).bind(function(t){var n=e.cells();return t.length===n.length?df.removeTable(e.table()):df.emptyCells(t)});var t},Cf=function(e,t){return vf(e,t).map(bf)},xf=function(e){var t=[];if(e)for(var n=0;n<e.rangeCount;n++)t.push(e.getRangeAt(n));return t},wf=xf,Nf=function(e){return M.bind(e,function(e){var t=Fi(e);return t?[Hn.fromDom(t)]:[]})},Ef=function(e){return xf(e).length>1},Sf=function(e){return M.filter(Nf(e),io.isTableCell)},kf=function(e){return Os(e,"td[data-mce-selected],th[data-mce-selected]")},Tf=function(e,t){var n=kf(t),r=Sf(e);return n.length>0?n:r},Af=Tf,_f=function(e){return Tf(wf(e.selection.getSel()),Hn.fromDom(e.getBody()))},Bf=function(e,t){return M.each(t,Is),e.selection.setCursorLocation(t[0].dom(),0),!0},Rf=function(e,t){return mc(e,!1,t),!0},Df=function(e,t,n,r){return Pf(t,r).fold(function(){return r=e,Cf(t,n).map(function(e){return e.fold(y.curry(Rf,r),y.curry(Bf,r))});var r},function(t){return If(e,t)}).getOr(!1)},Of=function(e,t){return M.find(Uu(t,e),io.isTableCell)},Pf=function(e,t){return M.find(Uu(t,e),function(e){return"caption"===Zn.name(e)})},If=function(e,t){return Is(t),e.selection.setCursorLocation(t.dom(),0),E.some(!0)},Lf=function(e,t,n,r,o){return Ws.navigate(n,e.getBody(),o).bind(function(i){return u=r,c=n,l=o,f=i,Ws.firstPositionIn(u.dom()).bind(function(e){return Ws.lastPositionIn(u.dom()).map(function(t){return c?l.isEqual(e)&&f.isEqual(t):l.isEqual(t)&&f.isEqual(e)})}).getOr(!0)?If(e,r):(a=r,s=i,Pf(t,Hn.fromDom(s.getNode())).map(function(e){return!1===Dr.eq(e,a)}));var a,s,u,c,l,f}).or(E.some(!0))},Mf=function(e,t,n,r){var o=ia.fromRangeStart(e.selection.getRng());return Of(n,r).bind(function(r){return Ru(r)?If(e,r):(i=e,a=n,s=t,u=r,c=o,Ws.navigate(s,i.getBody(),c).bind(function(e){return Of(a,Hn.fromDom(e.getNode())).map(function(e){return!1===Dr.eq(e,u)})}));var i,a,s,u,c})},Ff=function(e,t,n){var r=Hn.fromDom(e.getBody());return Pf(r,n).fold(function(){return Mf(e,t,r,n)},function(n){return o=e,i=t,a=r,s=n,u=ia.fromRangeStart(o.selection.getRng()),Ru(s)?If(o,s):Lf(o,a,i,s,u);var o,i,a,s,u}).getOr(!1)},zf=function(e,t){var n,r,o,i,a,s=Hn.fromDom(e.selection.getStart(!0));return e.selection.isCollapsed()?Ff(e,t,s):(n=e,r=s,o=Hn.fromDom(n.getBody()),i=n.selection.getRng(),0!==(a=_f(n)).length?Bf(n,a):Df(n,o,i,r))},Uf=function(e,t){e.getDoc().execCommand(t,!1,null)},Vf=function(e){hc(e,!1)||cf(e,!1)||Ku(e,!1)||zf(e)||Ju(e,!1)||(Uf(e,"Delete"),bu(e))},Hf=function(e){hc(e,!0)||cf(e,!0)||Ku(e,!0)||zf(e)||Ju(e,!0)||Uf(e,"ForwardDelete")},qf=function(e,t){return e&&t&&e.startContainer===t.startContainer&&e.startOffset===t.startOffset&&e.endContainer===t.endContainer&&e.endOffset===t.endOffset},jf=xr("container","offset"),$f=function(e,t,n){return null!==function(e,t,n){for(;e&&e!==t;){if(n(e))return e;e=e.parentNode}return null}(e,t,n)},Wf=function(e,t,n){return $f(e,t,function(e){return e.nodeName===n})},Kf=function(e){return e&&"TABLE"===e.nodeName},Xf=function(e,t,n){for(var r=new to(t,e.getParent(t.parentNode,e.isBlock)||e.getRoot());t=r[n?"prev":"next"]();)if(vo.isBr(t))return!0},Yf=function(e,t,n,r,o){var i,a,s,u,c,l,f=e.getRoot(),d=e.schema.getNonEmptyElements();if(s=e.getParent(o.parentNode,e.isBlock)||f,r&&vo.isBr(o)&&t&&e.isEmpty(s))return E.some(jf(o.parentNode,e.nodeIndex(o)));for(i=new to(o,s);u=i[r?"prev":"next"]();){if("false"===e.getContentEditableParent(u)||(c=u,l=f,mi.isCaretContainer(c)&&!1===$f(c,l,Nl)))return E.none();if(vo.isText(u)&&u.nodeValue.length>0)return!1===Wf(u,f,"A")?E.some(jf(u,r?u.nodeValue.length:0)):E.none();if(e.isBlock(u)||d[u.nodeName.toLowerCase()])return E.none();a=u}return n&&a?E.some(jf(a,0)):E.none()},Gf=function(e,t,n,r){var o,i,a,s,u,c,l,f,d,m,p=e.getRoot(),g=!1;if(o=r[(n?"start":"end")+"Container"],i=r[(n?"start":"end")+"Offset"],l=vo.isElement(o)&&i===o.childNodes.length,u=e.schema.getNonEmptyElements(),c=n,mi.isCaretContainer(o))return E.none();if(vo.isElement(o)&&i>o.childNodes.length-1&&(c=!1),vo.isDocument(o)&&(o=p,i=0),o===p){if(c&&(s=o.childNodes[i>0?i-1:0])){if(mi.isCaretContainer(s))return E.none();if(u[s.nodeName]||Kf(s))return E.none()}if(o.hasChildNodes()){if(i=Math.min(!c&&i>0?i-1:i,o.childNodes.length-1),o=o.childNodes[i],i=vo.isText(o)&&l?o.data.length:0,!t&&o===p.lastChild&&Kf(o))return E.none();if(function(e,t){for(;t&&t!==e;){if(vo.isContentEditableFalse(t))return!0;t=t.parentNode}return!1}(p,o)||mi.isCaretContainer(o))return E.none();if(o.hasChildNodes()&&!1===Kf(o)){s=o,a=new to(o,p);do{if(vo.isContentEditableFalse(s)||mi.isCaretContainer(s)){g=!1;break}if(vo.isText(s)&&s.nodeValue.length>0){i=c?0:s.nodeValue.length,o=s,g=!0;break}if(u[s.nodeName.toLowerCase()]&&(!(f=s)||!/^(TD|TH|CAPTION)$/.test(f.nodeName))){i=e.nodeIndex(s),o=s.parentNode,"IMG"!==s.nodeName&&"PRE"!==s.nodeName||c||i++,g=!0;break}}while(s=c?a.next():a.prev())}}}return t&&(vo.isText(o)&&0===i&&Yf(e,l,t,!0,o).each(function(e){o=e.container(),i=e.offset(),g=!0}),vo.isElement(o)&&((s=o.childNodes[i])||(s=o.childNodes[i-1]),!s||!vo.isBr(s)||(m="A",(d=s).previousSibling&&d.previousSibling.nodeName===m)||Xf(e,s,!1)||Xf(e,s,!0)||Yf(e,l,t,!0,s).each(function(e){o=e.container(),i=e.offset(),g=!0}))),c&&!t&&vo.isText(o)&&i===o.nodeValue.length&&Yf(e,l,t,!1,o).each(function(e){o=e.container(),i=e.offset(),g=!0}),g?E.some(jf(o,i)):E.none()},Jf={normalize:function(e,t){var n=t.collapsed,r=t.cloneRange();return Gf(e,n,!0,r).each(function(e){r.setStart(e.container(),e.offset())}),n||Gf(e,n,!1,r).each(function(e){r.setEnd(e.container(),e.offset())}),n&&r.collapse(!0),qf(t,r)?E.none():E.some(r)}},Qf=function(e,t,n){var r=e.create("span",{},"&nbsp;");n.parentNode.insertBefore(r,n),t.scrollIntoView(r),e.remove(r)},Zf=function(e,t,n,r){var o=e.createRng();r?(o.setStartBefore(n),o.setEndBefore(n)):(o.setStartAfter(n),o.setEndAfter(n)),t.setRng(o)},ed=function(e,t){var n,r,o=e.selection,i=e.dom,a=o.getRng();Jf.normalize(i,a).each(function(e){a.setStart(e.startContainer,e.startOffset),a.setEnd(e.endContainer,e.endOffset)});var s=a.startOffset,u=a.startContainer;if(1===u.nodeType&&u.hasChildNodes()){var c=s>u.childNodes.length-1;u=u.childNodes[Math.min(s,u.childNodes.length-1)]||u,s=c&&3===u.nodeType?u.nodeValue.length:0}var l=i.getParent(u,i.isBlock),f=l?i.getParent(l.parentNode,i.isBlock):null,d=f?f.nodeName.toUpperCase():"",m=t&&t.ctrlKey;"LI"!==d||m||(l=f),u&&3===u.nodeType&&s>=u.nodeValue.length&&(function(e,t,n){for(var r,o=new to(t,n),i=e.getNonEmptyElements();r=o.next();)if(i[r.nodeName.toLowerCase()]||r.length>0)return!0}(e.schema,u,l)||(n=i.create("br"),a.insertNode(n),a.setStartAfter(n),a.setEndAfter(n),r=!0)),n=i.create("br"),a.insertNode(n),Qf(i,o,n),Zf(i,o,n,r),e.undoManager.add()},td=function(e,t){var n=Hn.fromTag("br");ks.before(Hn.fromDom(t),n),e.undoManager.add()},nd=function(e,t){rd(e.getBody(),t)||ks.after(Hn.fromDom(t),Hn.fromTag("br"));var n=Hn.fromTag("br");ks.after(Hn.fromDom(t),n),Qf(e.dom,e.selection,n.dom()),Zf(e.dom,e.selection,n.dom(),!1),e.undoManager.add()},rd=function(e,t){return n=ia.after(t),!!vo.isBr(n.getNode())||Ws.nextPosition(e,ia.after(t)).map(function(e){return vo.isBr(e.getNode())}).getOr(!1);var n},od=function(e){return e&&"A"===e.nodeName&&"href"in e},id=function(e){return e.fold(y.constant(!1),od,od,y.constant(!1))},ad=function(e,t){t.fold(y.noop,y.curry(td,e),y.curry(nd,e),y.noop)},sd=function(e,t){var n,r,o,i=(n=e,r=y.curry(vu.isInlineTarget,n),o=ia.fromRangeStart(n.selection.getRng()),$l(r,n.getBody(),o).filter(id));i.isSome()?i.each(y.curry(ad,e)):ed(e,t)},ud=Qu([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),cd=(ud.before,ud.on,ud.after,function(e){return e.fold(y.identity,y.identity,y.identity)}),ld=Qu([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),fd=xr("start","soffset","finish","foffset"),dd={domRange:ld.domRange,relative:ld.relative,exact:ld.exact,exactFromRange:function(e){return ld.exact(e.start(),e.soffset(),e.finish(),e.foffset())},range:fd,getWin:function(e){var t=e.match({domRange:function(e){return Hn.fromDom(e.startContainer)},relative:function(e,t){return cd(e)},exact:function(e,t,n,r){return e}});return Ur.defaultView(t)}},md=Un.detect().browser,pd=function(e,t){var n=Zn.isText(t)?Ds(t).length:Ur.children(t).length+1;return e>n?n:e<0?0:e},gd=function(e){return dd.range(e.start(),pd(e.soffset(),e.start()),e.finish(),pd(e.foffset(),e.finish()))},hd=function(e,t){return Dr.contains(e,t)||Dr.eq(e,t)},vd=function(e){return function(t){return hd(e,t.start())&&hd(e,t.finish())}},yd=function(e){return!0===e.inline||md.isIE()},bd=function(e){return dd.range(Hn.fromDom(e.startContainer),e.startOffset,Hn.fromDom(e.endContainer),e.endOffset)},Cd=function(e){var t=e.getSelection();return(t&&0!==t.rangeCount?E.from(t.getRangeAt(0)):E.none()).map(bd)},xd=function(e){var t=Ur.defaultView(e);return Cd(t.dom()).filter(vd(e))},wd=function(e,t){return E.from(t).filter(vd(e)).map(gd)},Nd=function(e){var t=document.createRange();return t.setStart(e.start().dom(),e.soffset()),t.setEnd(e.finish().dom(),e.foffset()),E.some(t)},Ed=function(e){return(e.bookmark?e.bookmark:E.none()).bind(y.curry(wd,Hn.fromDom(e.getBody()))).bind(Nd)},Sd=function(e){var t=yd(e)?xd(Hn.fromDom(e.getBody())):E.none();e.bookmark=t.isSome()?t:e.bookmark},kd=function(e){Ed(e).each(function(t){e.selection.setRng(t)})},Td=Ed,Ad=Ot.each,_d=Ot.extend,Bd=Ot.map,Rd=Ot.inArray,Dd=Ot.explode,Od=function(e){var t,n,r,o,i={state:{},exec:{},value:{}},a=e.settings;e.on("PreInit",function(){t=e.dom,n=e.selection,a=e.settings,r=e.formatter});var s=function(t){var n;if(!e.quirks.isHidden()&&!e.removed){if(t=t.toLowerCase(),n=i.state[t])return n(t);try{return e.getDoc().queryCommandState(t)}catch(r){}return!1}},u=function(e,t){t=t||"exec",Ad(e,function(e,n){Ad(n.toLowerCase().split(","),function(n){i[t][n]=e})})};_d(this,{execCommand:function(t,n,r,o){var a,s,u=!1;if(!e.removed){if(/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(t)||o&&o.skip_focus?kd(e):e.focus(),(o=e.fire("BeforeExecCommand",{command:t,ui:n,value:r})).isDefaultPrevented())return!1;if(s=t.toLowerCase(),a=i.exec[s])return a(s,n,r),e.fire("ExecCommand",{command:t,ui:n,value:r}),!0;if(Ad(e.plugins,function(o){if(o.execCommand&&o.execCommand(t,n,r))return e.fire("ExecCommand",{command:t,ui:n,value:r}),u=!0,!1}),u)return u;if(e.theme&&e.theme.execCommand&&e.theme.execCommand(t,n,r))return e.fire("ExecCommand",{command:t,ui:n,value:r}),!0;try{u=e.getDoc().execCommand(t,n,r)}catch(c){}return!!u&&(e.fire("ExecCommand",{command:t,ui:n,value:r}),!0)}},queryCommandState:s,queryCommandValue:function(t){var n;if(!e.quirks.isHidden()&&!e.removed){if(t=t.toLowerCase(),n=i.value[t])return n(t);try{return e.getDoc().queryCommandValue(t)}catch(r){}}},queryCommandSupported:function(t){if(t=t.toLowerCase(),i.exec[t])return!0;try{return e.getDoc().queryCommandSupported(t)}catch(n){}return!1},addCommands:u,addCommand:function(t,n,r){t=t.toLowerCase(),i.exec[t]=function(t,o,i,a){return n.call(r||e,o,i,a)}},addQueryStateHandler:function(t,n,r){t=t.toLowerCase(),i.state[t]=function(){return n.call(r||e)}},addQueryValueHandler:function(t,n,r){t=t.toLowerCase(),i.value[t]=function(){return n.call(r||e)}},hasCustomCommand:function(e){return e=e.toLowerCase(),!!i.exec[e]}});var c=function(t,n,r){return n===undefined&&(n=!1),r===undefined&&(r=null),e.getDoc().execCommand(t,n,r)},l=function(e){return r.match(e)},f=function(t,n){r.toggle(t,n?{value:n}:undefined),e.nodeChanged()},d=function(e){o=n.getBookmark(e)},m=function(){n.moveToBookmark(o)};u({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){e.undoManager.add()},"Cut,Copy,Paste":function(t){var n,r=e.getDoc();try{c(t)}catch(i){n=!0}if("paste"!==t||r.queryCommandEnabled(t)||(n=!0),n||!r.queryCommandSupported(t)){var o=e.translate("Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.");me.mac&&(o=o.replace(/Ctrl\+/g,"\u2318+")),e.notificationManager.open({text:o,type:"error"})}},unlink:function(){if(n.isCollapsed()){var t=e.dom.getParent(e.selection.getStart(),"a");t&&e.dom.remove(t,!0)}else r.remove("link")},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone":function(e){var t=e.substring(7);"full"===t&&(t="justify"),Ad("left,center,right,justify".split(","),function(e){t!==e&&r.remove("align"+e)}),"none"!==t&&f("align"+t)},"InsertUnorderedList,InsertOrderedList":function(e){var r,o;c(e),(r=t.getParent(n.getNode(),"ol,ul"))&&(o=r.parentNode,/^(H[1-6]|P|ADDRESS|PRE)$/.test(o.nodeName)&&(d(),t.split(o,r),m()))},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){f(e)},"ForeColor,HiliteColor,FontName":function(e,t,n){f(e,n)},FontSize:function(e,t,n){var r,o;n>=1&&n<=7&&(o=Dd(a.font_size_style_values),n=(r=Dd(a.font_size_classes))?r[n-1]||n:o[n-1]||n),f(e,n)},RemoveFormat:function(e){r.remove(e)},mceBlockQuote:function(){f("blockquote")},FormatBlock:function(e,t,n){return f(n||"p")},mceCleanup:function(){var t=n.getBookmark();e.setContent(e.getContent({cleanup:!0}),{cleanup:!0}),n.moveToBookmark(t)},mceRemoveNode:function(t,r,o){var i=o||n.getNode();i!==e.getBody()&&(d(),e.dom.remove(i,!0),m())},mceSelectNodeDepth:function(r,o,i){var a=0;t.getParent(n.getNode(),function(e){if(1===e.nodeType&&a++===i)return n.select(e),!1},e.getBody())},mceSelectNode:function(e,t,r){n.select(r)},mceInsertContent:function(t,n,r){Js(e,r)},mceInsertRawHTML:function(t,r,o){n.setContent("tiny_mce_marker"),e.setContent(e.getContent().replace(/tiny_mce_marker/g,function(){return o}))},mceToggleFormat:function(e,t,n){f(n)},mceSetContent:function(t,n,r){e.setContent(r)},"Indent,Outdent":function(o){var i,u,l;i=a.indentation,u=/[a-z%]+$/i.exec(i),i=parseInt(i,10),s("InsertUnorderedList")||s("InsertOrderedList")?c(o):(a.forced_root_block||t.getParent(n.getNode(),t.isBlock)||r.apply("div"),Ad(n.getSelectedBlocks(),function(n){if("false"!==t.getContentEditable(n)&&"LI"!==n.nodeName){var r=e.getParam("indent_use_margin",!1)?"margin":"padding";r="TABLE"===n.nodeName?"margin":r,r+="rtl"===t.getStyle(n,"direction",!0)?"Right":"Left","outdent"===o?(l=Math.max(0,parseInt(n.style[r]||0,10)-i),t.setStyle(n,r,l?l+u:"")):(l=parseInt(n.style[r]||0,10)+i+u,t.setStyle(n,r,l))}}))},mceRepaint:function(){},InsertHorizontalRule:function(){e.execCommand("mceInsertContent",!1,"<hr />")},mceToggleVisualAid:function(){e.hasVisual=!e.hasVisual,e.addVisual()},mceReplaceContent:function(t,r,o){e.execCommand("mceInsertContent",!1,o.replace(/\{\$selection\}/g,n.getContent({format:"text"})))},mceInsertLink:function(e,o,i){var a;"string"==typeof i&&(i={href:i}),a=t.getParent(n.getNode(),"a"),i.href=i.href.replace(" ","%20"),a&&i.href||r.remove("link"),i.href&&r.apply("link",i,a)},selectAll:function(){var e=t.getParent(n.getStart(),vo.isContentEditableTrue);if(e){var r=t.createRng();r.selectNodeContents(e),n.setRng(r)}},"delete":function(){Vf(e)},forwardDelete:function(){Hf(e)},mceNewDocument:function(){e.setContent("")},InsertLineBreak:function(t,n,r){return sd(e,r),!0}}),u({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(e){var o="align"+e.substring(7),i=n.isCollapsed()?[t.getParent(n.getNode(),t.isBlock)]:n.getSelectedBlocks(),a=Bd(i,function(e){return!!r.matchNode(e,o)});return-1!==Rd(a,!0)},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){return l(e)},mceBlockQuote:function(){return l("blockquote")},Outdent:function(){var e;if(a.inline_styles){if((e=t.getParent(n.getStart(),t.isBlock))&&parseInt(e.style.paddingLeft,10)>0)return!0;if((e=t.getParent(n.getEnd(),t.isBlock))&&parseInt(e.style.paddingLeft,10)>0)return!0}return s("InsertUnorderedList")||s("InsertOrderedList")||!a.inline_styles&&!!t.getParent(n.getNode(),"BLOCKQUOTE")},"InsertUnorderedList,InsertOrderedList":function(e){var r=t.getParent(n.getNode(),"ul,ol");return r&&("insertunorderedlist"===e&&"UL"===r.tagName||"insertorderedlist"===e&&"OL"===r.tagName)}},"state"),u({"FontSize,FontName":function(e){var r,o=0;return(r=t.getParent(n.getNode(),"span"))&&(o="fontsize"===e?r.style.fontSize:r.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()),o}},"value"),u({Undo:function(){e.undoManager.undo()},Redo:function(){e.undoManager.redo()}})},Pd=Ot.makeMap("focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave wheel keydown keypress keyup input contextmenu dragstart dragend dragover draggesture dragdrop drop drag submit compositionstart compositionend compositionupdate touchstart touchmove touchend"," "),Id=function(e){var t,n,r=this,o={},i=function(){return!1},a=function(){return!0};t=(e=e||{}).scope||r,n=e.toggleEvent||i;var s=function(e,t,a,s){var u,c,l;if(!1===t&&(t=i),t)for(t={func:t},s&&Ot.extend(t,s),l=(c=e.toLowerCase().split(" ")).length;l--;)e=c[l],(u=o[e])||(u=o[e]=[],n(e,!0)),a?u.unshift(t):u.push(t);return r},u=function(e,t){var i,a,s,u,c;if(e)for(i=(u=e.toLowerCase().split(" ")).length;i--;){if(e=u[i],a=o[e],!e){for(s in o)n(s,!1),delete o[s];return r}if(a){if(t)for(c=a.length;c--;)a[c].func===t&&(a=a.slice(0,c).concat(a.slice(c+1)),o[e]=a);else a.length=0;a.length||(n(e,!1),delete o[e])}}else{for(e in o)n(e,!1);o={}}return r};r.fire=function(n,r){var s,c,l,f;if(n=n.toLowerCase(),(r=r||{}).type=n,r.target||(r.target=t),r.preventDefault||(r.preventDefault=function(){r.isDefaultPrevented=a},r.stopPropagation=function(){r.isPropagationStopped=a},r.stopImmediatePropagation=function(){r.isImmediatePropagationStopped=a},r.isDefaultPrevented=i,r.isPropagationStopped=i,r.isImmediatePropagationStopped=i),e.beforeFire&&e.beforeFire(r),s=o[n])for(c=0,l=s.length;c<l;c++){if((f=s[c]).once&&u(n,f.func),r.isImmediatePropagationStopped())return r.stopPropagation(),r;if(!1===f.func.call(t,r))return r.preventDefault(),r}return r},r.on=s,r.off=u,r.once=function(e,t,n){return s(e,t,n,{once:!0})},r.has=function(e){return e=e.toLowerCase(),!(!o[e]||0===o[e].length)}};Id.isNative=function(e){return!!Pd[e.toLowerCase()]};var Ld,Md=function(e){return e._eventDispatcher||(e._eventDispatcher=new Id({scope:e,toggleEvent:function(t,n){Id.isNative(t)&&e.toggleNativeEvent&&e.toggleNativeEvent(t,n)}})),e._eventDispatcher},Fd={fire:function(e,t,n){if(this.removed&&"remove"!==e)return t;if(t=Md(this).fire(e,t,n),!1!==n&&this.parent)for(var r=this.parent();r&&!t.isPropagationStopped();)r.fire(e,t,!1),r=r.parent();return t},on:function(e,t,n){return Md(this).on(e,t,n)},off:function(e,t){return Md(this).off(e,t)},once:function(e,t){return Md(this).once(e,t)},hasEventListeners:function(e){return Md(this).has(e)}},zd=Xo.DOM,Ud=function(e,t){return"selectionchange"===t?e.getDoc():!e.inline&&/^mouse|touch|click|contextmenu|drop|dragover|dragend/.test(t)?e.getDoc().documentElement:e.settings.event_root?(e.eventRoot||(e.eventRoot=zd.select(e.settings.event_root)[0]),e.eventRoot):e.getBody()},Vd=function(e,t){var n,r,o=function(e){return!e.hidden&&!e.readonly};if(e.delegates||(e.delegates={}),!e.delegates[t]&&!e.removed)if(n=Ud(e,t),e.settings.event_root){if(Ld||(Ld={},e.editorManager.on("removeEditor",function(){var t;if(!e.editorManager.activeEditor&&Ld){for(t in Ld)e.dom.unbind(Ud(e,t));Ld=null}})),Ld[t])return;r=function(n){for(var r=n.target,i=e.editorManager.get(),a=i.length;a--;){var s=i[a].getBody();(s===r||zd.isChildOf(r,s))&&o(i[a])&&i[a].fire(t,n)}},Ld[t]=r,zd.bind(n,t,r)}else r=function(n){o(e)&&e.fire(t,n)},zd.bind(n,t,r),e.delegates[t]=r},Hd={bindPendingEventDelegates:function(){var e=this;Ot.each(e._pendingNativeEvents,function(t){Vd(e,t)})},toggleNativeEvent:function(e,t){var n=this;"focus"!==e&&"blur"!==e&&(t?n.initialized?Vd(n,e):n._pendingNativeEvents?n._pendingNativeEvents.push(e):n._pendingNativeEvents=[e]:n.initialized&&(n.dom.unbind(Ud(n,e),e,n.delegates[e]),delete n.delegates[e]))},unbindAllNativeEvents:function(){var e,t=this;if(t.delegates){for(e in t.delegates)t.dom.unbind(Ud(t,e),e,t.delegates[e]);delete t.delegates}t.inline||(t.getBody().onload=null,t.dom.unbind(t.getWin()),t.dom.unbind(t.getDoc())),t.dom.unbind(t.getBody()),t.dom.unbind(t.getContainer())}},qd=Hd=Ot.extend({},Fd,Hd),jd=function(e,t,n){try{e.getDoc().execCommand(t,!1,n)}catch(r){}},$d=function(e,t){var n,r,o;e._clickBlocker&&(e._clickBlocker.unbind(),e._clickBlocker=null),t?(e._clickBlocker=(r=(n=e).getBody(),o=function(e){n.dom.getParents(e.target,"a").length>0&&e.preventDefault()},n.dom.bind(r,"click",o),{unbind:function(){n.dom.unbind(r,"click",o)}}),e.selection.controlSelection.hideResizeRect(),e.readonly=!0,e.getBody().contentEditable=!1):(e.readonly=!1,e.getBody().contentEditable=!0,jd(e,"StyleWithCSS",!1),jd(e,"enableInlineTableEditing",!1),jd(e,"enableObjectResizing",!1),e.focus(),e.nodeChanged())},Wd=function(e,t){var n=e.readonly?"readonly":"design";t!==n&&(e.initialized?$d(e,"readonly"===t):e.on("init",function(){$d(e,"readonly"===t)}),e.fire("SwitchMode",{mode:t}))},Kd=Ot.each,Xd=Ot.explode,Yd={f9:120,f10:121,f11:122},Gd=Ot.makeMap("alt,ctrl,shift,meta,access"),Jd=function(e){var t={},n=[],r=function(e){var t,n,r={};for(n in Kd(Xd(e,"+"),function(e){e in Gd?r[e]=!0:/^[0-9]{2,}$/.test(e)?r.keyCode=parseInt(e,10):(r.charCode=e.charCodeAt(0),r.keyCode=Yd[e]||e.toUpperCase().charCodeAt(0))}),t=[r.keyCode],Gd)r[n]?t.push(n):r[n]=!1;return r.id=t.join(","),r.access&&(r.alt=!0,me.mac?r.ctrl=!0:r.shift=!0),r.meta&&(me.mac?r.meta=!0:(r.ctrl=!0,r.meta=!1)),r},o=function(t,n,o,i){var a;return(a=Ot.map(Xd(t,">"),r))[a.length-1]=Ot.extend(a[a.length-1],{func:o,scope:i||e}),Ot.extend(a[0],{desc:e.translate(n),subpatterns:a.slice(1)})},i=function(e,t){return!!t&&t.ctrl===e.ctrlKey&&t.meta===e.metaKey&&t.alt===e.altKey&&t.shift===e.shiftKey&&!!(e.keyCode===t.keyCode||e.charCode&&e.charCode===t.charCode)&&(e.preventDefault(),!0)},a=function(e){return e.func?e.func.call(e.scope):null};e.on("keyup keypress keydown",function(e){var r,o;((o=e).altKey||o.ctrlKey||o.metaKey||"keydown"===(r=e).type&&r.keyCode>=112&&r.keyCode<=123)&&!e.isDefaultPrevented()&&(Kd(t,function(t){if(i(e,t))return n=t.subpatterns.slice(0),"keydown"===e.type&&a(t),!0}),i(e,n[0])&&(1===n.length&&"keydown"===e.type&&a(n[0]),n.shift()))}),this.add=function(n,r,i,a){var s;return s=i,"string"==typeof i?i=function(){e.execCommand(s,!1,null)}:Ot.isArray(s)&&(i=function(){e.execCommand(s[0],s[1],s[2])}),Kd(Xd(Ot.trim(n.toLowerCase())),function(e){var n=o(e,r,i,a);t[n.id]=n}),!0},this.remove=function(e){var n=o(e);return!!t[n.id]&&(delete t[n.id],!0)}},Qd=Ot.each,Zd=function(e,t,n){var r,o,i,a,s=1;for(a=e.getShortEndedElements(),(i=/<([!?\/])?([A-Za-z0-9\-_\:\.]+)((?:\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\/|\s+)>/g).lastIndex=r=n;o=i.exec(t);){if(r=i.lastIndex,"/"===o[1])s--;else if(!o[1]){if(o[2]in a)continue;s++}if(0===s)break}return r},em=function(e,t){var n=this,r=function(){};e=e||{},n.schema=t=t||Fo(),!1!==e.fix_self_closing&&(e.fix_self_closing=!0),Qd("comment cdata text start end pi doctype".split(" "),function(t){t&&(n[t]=e[t]||r)}),n.parse=function(n){var r,o,i,a,s,u,c,l,f,d,m,p,g,h,v,y,b,C,x,w,N,E,S,k,T,A,_,B,R,D=this,O=0,P=[],I=0,L=Ao.decode,M=Ot.makeMap("src,href,data,background,formaction,poster"),F=/((java|vb)script|mhtml):/i,z=/^data:/i,U=function(e){var t,n;for(t=P.length;t--&&P[t].name!==e;);if(t>=0){for(n=P.length-1;n>=t;n--)(e=P[n]).valid&&D.end(e.name);P.length=t}},V=function(t,n,r,o,i){var s,u,c;if(r=(n=n.toLowerCase())in m?n:L(r||o||i||""),g&&!l&&0==(0===(c=n).indexOf("data-")||0===c.indexOf("aria-"))){if(!(s=C[n])&&x){for(u=x.length;u--&&!(s=x[u]).pattern.test(n););-1===u&&(s=null)}if(!s)return;if(s.validValues&&!(r in s.validValues))return}if(M[n]&&!e.allow_script_urls){var f=r.replace(/[\s\u0000-\u001F]+/g,"");try{f=decodeURIComponent(f)}catch(d){f=unescape(f)}if(F.test(f))return;if(!e.allow_html_data_urls&&z.test(f)&&!/^data:image\//i.test(f))return}l&&(n in M||0===n.indexOf("on"))||(a.map[n]=r,a.push({name:n,value:r}))};for(T=new RegExp("<(?:(?:!--([\\w\\W]*?)--\x3e)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)>)|(?:([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g"),A=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g,d=t.getShortEndedElements(),k=e.self_closing_elements||t.getSelfClosingElements(),m=t.getBoolAttrs(),g=e.validate,f=e.remove_internals,R=e.fix_self_closing,_=t.getSpecialElements(),S=n+">";r=T.exec(S);){if(O<r.index&&D.text(L(n.substr(O,r.index-O))),o=r[6])":"===(o=o.toLowerCase()).charAt(0)&&(o=o.substr(1)),U(o);else if(o=r[7]){if(r.index+r[0].length>n.length){D.text(L(n.substr(r.index))),O=r.index+r[0].length;continue}if(":"===(o=o.toLowerCase()).charAt(0)&&(o=o.substr(1)),p=o in d,R&&k[o]&&P.length>0&&P[P.length-1].name===o&&U(o),!g||(h=t.getElementRule(o))){if(v=!0,g&&(C=h.attributes,x=h.attributePatterns),(b=r[8])?((l=-1!==b.indexOf("data-mce-type"))&&f&&(v=!1),(a=[]).map={},b.replace(A,V)):(a=[]).map={},g&&!l){if(w=h.attributesRequired,N=h.attributesDefault,E=h.attributesForced,h.removeEmptyAttrs&&!a.length&&(v=!1),E)for(s=E.length;s--;)c=(y=E[s]).name,"{$uid}"===(B=y.value)&&(B="mce_"+I++),a.map[c]=B,a.push({name:c,value:B});if(N)for(s=N.length;s--;)(c=(y=N[s]).name)in a.map||("{$uid}"===(B=y.value)&&(B="mce_"+I++),a.map[c]=B,a.push({name:c,value:B}));if(w){for(s=w.length;s--&&!(w[s]in a.map););-1===s&&(v=!1)}if(y=a.map["data-mce-bogus"]){if("all"===y){O=Zd(t,n,T.lastIndex),T.lastIndex=O;continue}v=!1}}v&&D.start(o,a,p)}else v=!1;if(i=_[o]){i.lastIndex=O=r.index+r[0].length,(r=i.exec(n))?(v&&(u=n.substr(O,r.index-O)),O=r.index+r[0].length):(u=n.substr(O),O=n.length),v&&(u.length>0&&D.text(u,!0),D.end(o)),T.lastIndex=O;continue}p||(b&&b.indexOf("/")===b.length-1?v&&D.end(o):P.push({name:o,valid:v}))}else(o=r[1])?(">"===o.charAt(0)&&(o=" "+o),e.allow_conditional_comments||"[if"!==o.substr(0,3).toLowerCase()||(o=" "+o),D.comment(o)):(o=r[2])?D.cdata(o.replace(/<!--|-->/g,"")):(o=r[3])?D.doctype(o):(o=r[4])&&D.pi(o,r[5]);O=r.index+r[0].length}for(O<n.length&&D.text(L(n.substr(O))),s=P.length-1;s>=0;s--)(o=P[s]).valid&&D.end(o.name)}};em.findEndTag=Zd;var tm,nm,rm=function(e,t){var n,r,o,i,a,s,u,c,l=t,f=/<(\w+) [^>]*data-mce-bogus="all"[^>]*>/g,d=e.schema;for(s=e.getTempAttrs(),u=l,c=new RegExp(["\\s?("+s.join("|")+')="[^"]+"'].join("|"),"gi"),l=u.replace(c,""),a=d.getShortEndedElements();i=f.exec(l);)r=f.lastIndex,o=i[0].length,n=a[i[1]]?r:em.findEndTag(d,l,r),l=l.substring(0,r-o)+l.substring(n),f.lastIndex=r-o;return l},om=function(e,t){return ii(rm(e,t))},im=rm,am=function(e){var t=e!==undefined?e.dom():document;return E.from(t.activeElement).map(Hn.fromDom)},sm=function(e){var t=Ur.owner(e).dom();return e.dom()===t.activeElement},um=function(e){return am(Ur.owner(e)).filter(function(t){return e.dom().contains(t.dom())})},cm=function(e,t){return(n=t,n.collapsed?E.from(zi(n.startContainer,n.startOffset)).map(Hn.fromDom):E.none()).bind(function(t){return io.isTableSection(t)?E.some(t):!1===Dr.contains(e,t)?E.some(e):E.none()});var n},lm=function(e,t){cm(Hn.fromDom(e.getBody()),t).bind(function(e){return Ws.firstPositionIn(e.dom())}).fold(function(){e.selection.normalize()},function(t){e.selection.setRng(t.toRange())})},fm=function(e){if(e.setActive)try{e.setActive()}catch(t){e.focus()}else e.focus()},dm=function(e){var t,n=e.getBody();return n&&(t=Hn.fromDom(n),sm(t)||um(t).isSome())},mm=function(e){return e.inline?dm(e):(t=e).iframeElement&&sm(Hn.fromDom(t.iframeElement));var t},pm=function(e){e.editorManager.setActive(e)},gm=function(e,t){e.removed||(t?pm(e):function(e){var t,n,r,o=e.selection,i=e.settings.content_editable,a=e.getBody(),s=o.getRng();if(e.quirks.refreshContentEditable(),n=e,r=o.getNode(),t=n.dom.getParent(r,function(e){return"true"===n.dom.getContentEditable(e)}),e.$.contains(a,t))return fm(t),lm(e,s),void pm(e);e.bookmark!==undefined&&!1===mm(e)&&Td(e).each(function(t){e.selection.setRng(t),s=t}),i||(me.opera||fm(a),e.getWin().focus()),(me.gecko||i)&&(fm(a),lm(e,s)),pm(e)}(e))},hm=mm,vm=function(e,t){return t.dom()[e]},ym=function(e,t){return parseInt(Cr(t,e),10)},bm=y.curry(vm,"clientWidth"),Cm=y.curry(vm,"clientHeight"),xm=y.curry(ym,"margin-top"),wm=y.curry(ym,"margin-left"),Nm=function(e,t,n){var r,o,i,a,s,u,c,l,f,d,m=Hn.fromDom(e.getBody()),p=e.inline?m:Ur.documentElement(m),g=(r=e.inline,i=t,a=n,s=(o=p).dom().getBoundingClientRect(),{x:i-(r?s.left+o.dom().clientLeft+wm(o):0),y:a-(r?s.top+o.dom().clientTop+xm(o):0)});return c=g.x,l=g.y,f=bm(u=p),d=Cm(u),c>=0&&l>=0&&c<=f&&l<=d},Em=function(e){var t,n=e.inline?e.getBody():e.getContentAreaContainer();return(t=n,E.from(t).map(Hn.fromDom)).map(function(e){return Dr.contains(Ur.owner(e),e)}).getOr(!1)},Sm=function(e){var t,n=[],r=function(){var t,n=e.theme;return n&&n.getNotificationManagerImpl?n.getNotificationManagerImpl():{open:t=function(){throw new Error("Theme did not provide a NotificationManager implementation.")},close:t,reposition:t,getArgs:t}},o=function(){n.length>0&&r().reposition(n)},i=function(e){M.findIndex(n,function(t){return t===e}).each(function(e){n.splice(e,1)})},a=function(t){if(!e.removed&&Em(e))return M.find(n,function(e){return n=r().getArgs(e),o=t,!(n.type!==o.type||n.text!==o.text||n.progressBar||n.timeout||o.progressBar||o.timeout);var n,o}).getOrThunk(function(){e.editorManager.setActive(e);var a,s=r().open(t,function(){i(s),o()});return a=s,n.push(a),o(),s})};return(t=e).on("SkinLoaded",function(){var e=t.settings.service_message;e&&a({text:e,type:"warning",timeout:0,icon:""})}),t.on("ResizeEditor ResizeWindow",function(){ye.requestAnimationFrame(o)}),t.on("remove",function(){M.each(n,function(e){r().close(e)})}),{open:a,close:function(){E.from(n[0]).each(function(e){r().close(e),i(e),o()})},getNotifications:function(){return n}}},km=function(e){var t=[],n=function(){var t,n=e.theme;return n&&n.getWindowManagerImpl?n.getWindowManagerImpl():{open:t=function(){throw new Error("Theme did not provide a WindowManager implementation.")},alert:t,confirm:t,close:t,getParams:t,setParams:t}},r=function(e,t){return function(){return t?t.apply(e,arguments):undefined}},o=function(n){var r;t.push(n),r=n,e.fire("OpenWindow",{win:r})},i=function(n){M.findIndex(t,function(e){return e===n}).each(function(r){var o;t.splice(r,1),o=n,e.fire("CloseWindow",{win:o}),0===t.length&&e.focus()})},a=function(){return E.from(t[t.length-1])};return e.on("remove",function(){M.each(t.slice(0),function(e){n().close(e)})}),{windows:t,open:function(t,r){e.editorManager.setActive(e),Sd(e);var a=n().open(t,r,i);return o(a),a},alert:function(e,t,a){var s=n().alert(e,r(a||this,t),i);o(s)},confirm:function(e,t,a){var s=n().confirm(e,r(a||this,t),i);o(s)},close:function(){a().each(function(e){n().close(e),i(e)})},getParams:function(){return a().map(n().getParams).getOr(null)},setParams:function(e){a().each(function(t){n().setParams(t,e)})},getWindows:function(){return t}}},Tm=ti.PluginManager,Am=function(e,t){var n=function(e,t){for(var n in Tm.urls)if(Tm.urls[n]+"/plugin"+t+".js"===e)return n;return null}(t,e.suffix);return n?"Failed to load plugin: "+n+" from url "+t:"Failed to load plugin url: "+t},_m=function(e,t){e.notificationManager.open({type:"error",text:t})},Bm=function(e,t){e._skinLoaded?_m(e,t):e.on("SkinLoaded",function(){_m(e,t)})},Rm=function(e,t){Bm(e,Am(e,t))},Dm=function(e,t){Bm(e,"Failed to upload image: "+t)},Om=Bm,Pm=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var r=window.console;r&&(r.error?r.error.apply(r,arguments):r.log.apply(r,arguments))},Im=ti.PluginManager,Lm=ti.ThemeManager,Mm=function(){return new(V("XMLHttpRequest"))},Fm=function(e,t){var n={},r=function(e,n,r,o){var i,a;(i=new Mm).open("POST",t.url),i.withCredentials=t.credentials,i.upload.onprogress=function(e){o(e.loaded/e.total*100)},i.onerror=function(){r("Image upload failed due to a XHR Transport error. Code: "+i.status)},i.onload=function(){var e,o,a;i.status<200||i.status>=300?r("HTTP Error: "+i.status):(e=JSON.parse(i.responseText))&&"string"==typeof e.location?n((o=t.basePath,a=e.location,o?o.replace(/\/$/,"")+"/"+a.replace(/^\//,""):a)):r("Invalid JSON: "+i.responseText)},(a=new FormData).append("file",e.blob(),e.filename()),i.send(a)},o=function(e,t){return{url:t,blobInfo:e,status:!0}},i=function(e,t){return{url:"",blobInfo:e,status:!1,error:t}},a=function(e,t){Ot.each(n[e],function(e){e(t)}),delete n[e]},s=function(r,s){return r=Ot.grep(r,function(t){return!e.isUploaded(t.blobUri())}),pe.all(Ot.map(r,function(r){return e.isPending(r.blobUri())?(f=r.blobUri(),new pe(function(e){n[f]=n[f]||[],n[f].push(e)})):(u=r,c=t.handler,l=s,e.markPending(u.blobUri()),new pe(function(t){var n;try{var r=function(){n&&n.close()};c(u,function(n){r(),e.markUploaded(u.blobUri(),n),a(u.blobUri(),o(u,n)),t(o(u,n))},function(n){r(),e.removeFailed(u.blobUri()),a(u.blobUri(),i(u,n)),t(i(u,n))},function(e){e<0||e>100||(n||(n=l()),n.progressBar.value(e))})}catch(s){t(i(u,s.message))}}));var u,c,l,f}))};return t=Ot.extend({credentials:!1,handler:r},t),{upload:function(e,n){return t.url||t.handler!==r?s(e,n):new pe(function(e){e([])})}}},zm=function(e,t){return new(V("Blob"))(e,t)},Um=function(e){return V("atob")(e)},Vm=function(e){var t,n;return e=decodeURIComponent(e).split(","),(n=/data:([^;]+)/.exec(e[0]))&&(t=n[1]),{type:t,data:e[1]}},Hm=function(e){return new pe(function(t){var n,r,o;e=Vm(e);try{n=Um(e.data)}catch(yC){return void t(new zm([]))}for(r=new function(e){return new(V("Uint8Array"))(e)}(n.length),o=0;o<r.length;o++)r[o]=n.charCodeAt(o);t(new zm([r],{type:e.type}))})},qm=function(e){return 0===e.indexOf("blob:")?(t=e,new pe(function(e,n){var r=function(){n("Cannot convert "+t+" to Blob. Resource might not exist or is inaccessible.")};try{var o=new Mm;o.open("GET",t,!0),o.responseType="blob",o.onload=function(){200===this.status?e(this.response):r()},o.onerror=r,o.send()}catch(i){r()}})):0===e.indexOf("data:")?Hm(e):null;var t},jm=function(e){return new pe(function(t){var n=new function(){return new(V("FileReader"))};n.onloadend=function(){t(n.result)},n.readAsDataURL(e)})},$m=Vm,Wm=0,Km=function(e){return(e||"blobid")+Wm++},Xm=function(e,t){var n={};return{findAll:function(r,o){var i,a,s;return o||(o=ji.constant(!0)),i=At.filter((s=r)?s.getElementsByTagName("img"):[],function(t){var n=t.src;return!!me.fileApi&&!t.hasAttribute("data-mce-bogus")&&!t.hasAttribute("data-mce-placeholder")&&!(!n||n===me.transparentSrc)&&(0===n.indexOf("blob:")?!e.isUploaded(n):0===n.indexOf("data:")&&o(t))}),a=At.map(i,function(e){var r;return n[e.src]?new pe(function(t){n[e.src].then(function(n){if("string"==typeof n)return n;t({image:e,blobInfo:n.blobInfo})})}):(r=new pe(function(n,r){var o,i,a,s,u,c;o=t,a=n,s=r,0!==(i=e).src.indexOf("blob:")?(u=$m(i.src).data,(c=o.findFirst(function(e){return e.base64()===u}))?a({image:i,blobInfo:c}):qm(i.src).then(function(e){c=o.create(Km(),e,u),o.add(c),a({image:i,blobInfo:c})},function(e){s(e)})):(c=o.getByUri(i.src))?a({image:i,blobInfo:c}):qm(i.src).then(function(e){jm(e).then(function(t){u=$m(t).data,c=o.create(Km(),e,u),o.add(c),a({image:i,blobInfo:c})})},function(e){s(e)})}).then(function(e){return delete n[e.image.src],e})["catch"](function(t){return delete n[e.src],t}),n[e.src]=r,r)}),pe.all(a)}}},Ym=0,Gm=function(e){return e+Ym+++(t=function(){return Math.round(4294967295*Math.random()).toString(36)},"s"+(new Date).getTime().toString(36)+t()+t()+t());var t},Jm=function(e){var t,n,r,o,i,a,s,u,c,l,f=(t=[],n=ji.constant,r=function(e){var t,r,o;if(!e.blob||!e.base64)throw new Error("blob and base64 representations of the image are required for BlobInfo to be created");return t=e.id||Gm("blobid"),r=e.name||t,{id:n(t),name:n(r),filename:n(r+"."+(o=e.blob.type,{"image/jpeg":"jpg","image/jpg":"jpg","image/gif":"gif","image/png":"png"}[o.toLowerCase()]||"dat")),blob:n(e.blob),base64:n(e.base64),blobUri:n(e.blobUri||q(e.blob)),uri:n(e.uri)}},{create:function(e,t,n,o){return r("object"==typeof e?e:{id:e,name:o,blob:t,base64:n})},add:function(e){o(e.id())||t.push(e)},get:o=function(e){return i(function(t){return t.id()===e})},getByUri:function(e){return i(function(t){return t.blobUri()===e})},findFirst:i=function(e){return At.filter(t,e)[0]},removeByUri:function(e){t=At.filter(t,function(t){return t.blobUri()!==e||(j(t.blobUri()),!1)})},destroy:function(){At.each(t,function(e){j(e.blobUri())}),t=[]}}),d=e.settings,m=(u={},c=function(e,t){return{status:e,resultUri:t}},{hasBlobUri:l=function(e){return e in u},getResultUri:function(e){var t=u[e];return t?t.resultUri:null},isPending:function(e){return!!l(e)&&1===u[e].status},isUploaded:function(e){return!!l(e)&&2===u[e].status},markPending:function(e){u[e]=c(1,null)},markUploaded:function(e,t){u[e]=c(2,t)},removeFailed:function(e){delete u[e]},destroy:function(){u={}}}),p=function(t){return function(n){return e.selection?t(n):[]}},g=function(e,t,n){var r=0;do{-1!==(r=e.indexOf(t,r))&&(e=e.substring(0,r)+n+e.substr(r+t.length),r+=n.length-t.length+1)}while(-1!==r);return e},h=function(e,t,n){return e=g(e,'src="'+t+'"','src="'+n+'"'),e=g(e,'data-mce-src="'+t+'"','data-mce-src="'+n+'"')},v=function(t,n){At.each(e.undoManager.data,function(e){"fragmented"===e.type?e.fragments=At.map(e.fragments,function(e){return h(e,t,n)}):e.content=h(e.content,t,n)})},y=function(){return e.notificationManager.open({text:e.translate("Image uploading..."),type:"info",timeout:-1,progressBar:!0})},b=function(t,n){f.removeByUri(t.src),v(t.src,n),e.$(t).attr({src:d.images_reuse_filename?n+"?"+(new Date).getTime():n,"data-mce-src":e.convertURL(n,"src")})},C=function(t){return a||(a=Fm(m,{url:d.images_upload_url,basePath:d.images_upload_base_path,credentials:d.images_upload_credentials,handler:d.images_upload_handler})),N().then(p(function(n){var r;return r=At.map(n,function(e){return e.blobInfo}),a.upload(r,y).then(p(function(r){var o=At.map(r,function(t,r){var o=n[r].image;return t.status&&!1!==e.settings.images_replace_blob_uris?b(o,t.url):t.error&&Dm(e,t.error),{element:o,status:t.status}});return t&&t(o),o}))}))},x=function(e){if(!1!==d.automatic_uploads)return C(e)},w=function(e){return!d.images_dataimg_filter||d.images_dataimg_filter(e)},N=function(){return s||(s=Xm(m,f)),s.findAll(e.getBody(),w).then(p(function(t){return t=At.filter(t,function(t){return"string"!=typeof t||(Om(e,t),!1)}),At.each(t,function(e){v(e.image.src,e.blobInfo.blobUri()),e.image.src=e.blobInfo.blobUri(),e.image.removeAttribute("data-mce-src")}),t}))},E=function(t){return t.replace(/src="(blob:[^"]+)"/g,function(t,n){var r=m.getResultUri(n);if(r)return'src="'+r+'"';var o=f.getByUri(n);return o||(o=At.reduce(e.editorManager.get(),function(e,t){return e||t.editorUpload&&t.editorUpload.blobCache.getByUri(n)},null)),o?'src="data:'+o.blob().type+";base64,"+o.base64()+'"':t})};return e.on("setContent",function(){!1!==e.settings.automatic_uploads?x():N()}),e.on("RawSaveContent",function(e){e.content=E(e.content)}),e.on("getContent",function(e){e.source_view||"raw"===e.format||(e.content=E(e.content))}),e.on("PostRender",function(){e.parser.addNodeFilter("img",function(e){At.each(e,function(e){var t=e.attr("src");if(!f.getByUri(t)){var n=m.getResultUri(t);n&&e.attr("src",n)}})})}),{blobCache:f,uploadImages:C,uploadImagesAuto:x,scanForImages:N,destroy:function(){f.destroy(),m.destroy(),s=a=null}}},Qm=function(e,t){return e.hasOwnProperty(t.nodeName)},Zm=function(e){var t,n,r,o,i,a,s,u,c,l,f,d=e.settings,m=e.dom,p=e.selection,g=e.schema,h=g.getBlockElements(),v=p.getStart(),y=e.getBody();if(f=d.forced_root_block,v&&vo.isElement(v)&&f&&(l=y.nodeName.toLowerCase(),g.isValidChild(l,f.toLowerCase())&&(b=h,C=y,x=v,!M.exists(zu(Hn.fromDom(x),Hn.fromDom(C)),function(e){return Qm(b,e.dom())})))){var b,C,x,w,N;for(n=(t=p.getRng()).startContainer,r=t.startOffset,o=t.endContainer,i=t.endOffset,c=hm(e),v=y.firstChild;v;)if(w=h,N=v,vo.isText(N)||vo.isElement(N)&&!Qm(w,N)&&!xs.isBookmarkNode(N)){if(vo.isText(v)&&0===v.nodeValue.length){s=v,v=v.nextSibling,m.remove(s);continue}a||(a=m.create(f,e.settings.forced_root_block_attrs),v.parentNode.insertBefore(a,v),u=!0),s=v,v=v.nextSibling,a.appendChild(s)}else a=null,v=v.nextSibling;u&&c&&(t.setStart(n,r),t.setEnd(o,i),p.setRng(t),e.nodeChanged())}},ep=function(e){e.settings.forced_root_block&&e.on("NodeChange",y.curry(Zm,e))},tp=function(e){var t,n=[];"onselectionchange"in e.getDoc()||e.on("NodeChange Click MouseUp KeyUp Focus",function(n){var r,o;o={startContainer:(r=e.selection.getRng()).startContainer,startOffset:r.startOffset,endContainer:r.endContainer,endOffset:r.endOffset},"nodechange"!==n.type&&qf(o,t)||e.fire("SelectionChange"),t=o}),e.on("contextmenu",function(){e.fire("SelectionChange")}),e.on("SelectionChange",function(){var t=e.selection.getStart(!0);!t||!me.range&&e.selection.isCollapsed()||!function(t){var r,o;if((o=e.$(t).parentsUntil(e.getBody()).add(t)).length===n.length){for(r=o.length;r>=0&&o[r]===n[r];r--);if(-1===r)return n=o,!0}return n=o,!1}(t)&&e.dom.isChildOf(t,e.getBody())&&e.nodeChanged({selectionChange:!0})}),e.on("MouseUp",function(t){t.isDefaultPrevented()||("IMG"===e.selection.getNode().nodeName?ye.setEditorTimeout(e,function(){e.nodeChanged()}):e.nodeChanged())}),this.nodeChanged=function(t){var n,r,o,i=e.selection;e.initialized&&i&&!e.settings.disable_nodechange&&!e.readonly&&(o=e.getBody(),(n=i.getStart(!0)||o).ownerDocument===e.getDoc()&&e.dom.isChildOf(n,o)||(n=o),r=[],e.dom.getParent(n,function(e){if(e===o)return!0;r.push(e)}),(t=t||{}).element=n,t.parents=r,e.fire("NodeChange",t))}},np=function(e){var t,n,r,o;return o=e.getBoundingClientRect(),n=(t=e.ownerDocument).documentElement,r=t.defaultView,{top:o.top+r.pageYOffset-n.clientTop,left:o.left+r.pageXOffset-n.clientLeft}},rp=function(e,t){return n=(s=e).inline?np(s.getBody()):{left:0,top:0},a=(i=e).getBody(),r=i.inline?{left:a.scrollLeft,top:a.scrollTop}:{left:0,top:0},{pageX:(o=function(e,t){if(t.target.ownerDocument!==e.getDoc()){var n=np(e.getContentAreaContainer()),r=(i=(o=e).getBody(),a=o.getDoc().documentElement,s={left:i.scrollLeft,top:i.scrollTop},u={left:i.scrollLeft||a.scrollLeft,top:i.scrollTop||a.scrollTop},o.inline?s:u);return{left:t.pageX-n.left+r.left,top:t.pageY-n.top+r.top}}var o,i,a,s,u;return{left:t.pageX,top:t.pageY}}(e,t)).left-n.left+r.left,pageY:o.top-n.top+r.top};var n,r,o,i,a,s},op=vo.isContentEditableFalse,ip=vo.isContentEditableTrue,ap=function(e){e&&e.parentNode&&e.parentNode.removeChild(e)},sp=function(e,t){return function(n){if(0===n.button){var r=At.find(t.dom.getParents(n.target),ji.or(op,ip));if(s=t.getBody(),op(u=r)&&u!==s){var o=t.dom.getPos(r),i=t.getBody(),a=t.getDoc().documentElement;e.element=r,e.screenX=n.screenX,e.screenY=n.screenY,e.maxX=(t.inline?i.scrollWidth:a.offsetWidth)-2,e.maxY=(t.inline?i.scrollHeight:a.offsetHeight)-2,e.relX=n.pageX-o.x,e.relY=n.pageY-o.y,e.width=r.offsetWidth,e.height=r.offsetHeight,e.ghost=function(e,t,n,r){var o=t.cloneNode(!0);e.dom.setStyles(o,{width:n,height:r}),e.dom.setAttrib(o,"data-mce-selected",null);var i=e.dom.create("div",{"class":"mce-drag-container","data-mce-bogus":"all",unselectable:"on",contenteditable:"false"});return e.dom.setStyles(i,{position:"absolute",opacity:.5,overflow:"hidden",border:0,padding:0,margin:0,width:n,height:r}),e.dom.setStyles(o,{margin:0,boxSizing:"border-box"}),i.appendChild(o),i}(t,r,e.width,e.height)}}var s,u}},up=function(e,t){return function(n){if(e.dragging&&(s=t,l=t.selection,f=l.getSel().getRangeAt(0).startContainer,u=3===f.nodeType?f.parentNode:f,c=e.element,u!==c&&!s.dom.isChildOf(u,c)&&!op(u))){var r=(i=e.element,(a=i.cloneNode(!0)).removeAttribute("data-mce-selected"),a),o=t.fire("drop",{targetClone:r,clientX:n.clientX,clientY:n.clientY});o.isDefaultPrevented()||(r=o.targetClone,t.undoManager.transact(function(){ap(e.element),t.insertContent(t.dom.getOuterHTML(r)),t._selectionOverrides.hideFakeCaret()}))}var i,a,s,u,c,l,f;cp(e)}},cp=function(e){e.dragging=!1,e.element=null,ap(e.ghost)},lp=function(e){var t,n,r,o,i,a,s,u,c,l,f,d={};t=Xo.DOM,a=document,n=sp(d,e),s=d,u=e,c=ye.throttle(function(e,t){u._selectionOverrides.hideFakeCaret(),u.selection.placeCaretAt(e,t)},0),r=function(e){var t,n,r,o,i,a,l,f,d,m,p,g,h=Math.max(Math.abs(e.screenX-s.screenX),Math.abs(e.screenY-s.screenY));if(s.element&&!s.dragging&&h>10){if(u.fire("dragstart",{target:s.element}).isDefaultPrevented())return;s.dragging=!0,u.focus()}if(s.dragging){var v=(p=s,{pageX:(g=rp(u,e)).pageX-p.relX,pageY:g.pageY+5});d=s.ghost,m=u.getBody(),d.parentNode!==m&&m.appendChild(d),t=s.ghost,n=v,r=s.width,o=s.height,i=s.maxX,a=s.maxY,l=0,f=0,t.style.left=n.pageX+"px",t.style.top=n.pageY+"px",n.pageX+r>i&&(l=n.pageX+r-i),n.pageY+o>a&&(f=n.pageY+o-a),t.style.width=r-l+"px",t.style.height=o-f+"px",c(e.clientX,e.clientY)}},o=up(d,e),l=d,f=e,i=function(){cp(l),l.dragging&&f.fire("dragend")},e.on("mousedown",n),e.on("mousemove",r),e.on("mouseup",o),t.bind(a,"mousemove",r),t.bind(a,"mouseup",i),e.on("remove",function(){t.unbind(a,"mousemove",r),t.unbind(a,"mouseup",i)})},fp=function(e){var t;lp(e),(t=e).on("drop",function(e){var n="undefined"!=typeof e.clientX?t.getDoc().elementFromPoint(e.clientX,e.clientY):null;(op(n)||op(t.dom.getContentEditableParent(n)))&&e.preventDefault()})},dp=vo.isContentEditableFalse,mp=function(e,t){var n,r,o=null,i=function(){!function(){var t,n,r,o,i;for(t=Qt("*[contentEditable=false]",e),o=0;o<t.length;o++)r=(n=t[o]).previousSibling,mi.endsWithCaretContainer(r)&&(1===(i=r.data).length?r.parentNode.removeChild(r):r.deleteData(i.length-1,1)),r=n.nextSibling,mi.startsWithCaretContainer(r)&&(1===(i=r.data).length?r.parentNode.removeChild(r):r.deleteData(0,1))}(),r&&(Oc.remove(r),r=null),o&&(o.remove(),o=null),clearInterval(n)},a=function(){n=ye.setInterval(function(){e.ownerDocument.activeElement===e?Qt("div.mce-visual-caret",e).toggleClass("mce-visual-caret-hidden"):Qt("div.mce-visual-caret",e).addClass("mce-visual-caret-hidden")},500)};return{show:function(n,s){var u,c,l,f,d,m,p,g,h,v,y;return i(),(l=s)&&/^(TD|TH)$/i.test(l.nodeName)?null:t(s)?(r=mi.insertBlock("p",s,n),d=n,y=Oi((f=s).getBoundingClientRect(),d),"BODY"===e.tagName?(m=e.ownerDocument.documentElement,p=e.scrollLeft||m.scrollLeft,g=e.scrollTop||m.scrollTop):(v=e.getBoundingClientRect(),p=e.scrollLeft-v.left,g=e.scrollTop-v.top),y.left+=p,y.right+=p,y.top+=g,y.bottom+=g,y.width=1,(h=f.offsetWidth-f.clientWidth)>0&&(d&&(h*=-1),y.left+=h,y.right+=h),u=y,Qt(r).css("top",u.top),o=Qt('<div class="mce-visual-caret" data-mce-bogus="all"></div>').css(u).appendTo(e),n&&o.addClass("mce-visual-caret-before"),a(),(c=s.ownerDocument.createRange()).setStart(r,0),c.setEnd(r,0),c):(r=mi.insertInline(s,n),c=s.ownerDocument.createRange(),dp(r.nextSibling)?(c.setStart(r,0),c.setEnd(r,0)):(c.setStart(r,1),c.setEnd(r,1)),c)},hide:i,getCss:function(){return".mce-visual-caret {position: absolute;background-color: black;background-color: currentcolor;}.mce-visual-caret-hidden {display: none;}*[data-mce-caret] {position: absolute;left: -1000px;right: auto;top: 0;margin: 0;padding: 0;}"},destroy:function(){ye.clearInterval(n)}}},pp=function(e){var t=function(t){return At.map(t,function(t){return(t=Di(t)).node=e,t})};if(At.isArray(e))return At.reduce(e,function(e,t){return e.concat(pp(t))},[]);if(vo.isElement(e))return t(e.getClientRects());if(vo.isText(e)){var n=e.ownerDocument.createRange();return n.setStart(e,0),n.setEnd(e,e.data.length),t(n.getClientRects())}},gp={getClientRects:pp},hp=vo.isContentEditableFalse,vp=_a.findNode,yp=ji.curry,bp=function(e,t){return Math.abs(e.left-t)},Cp=function(e,t){return Math.abs(e.right-t)},xp=function(e,t){var n=function(e,t){return e>=t.left&&e<=t.right};return At.reduce(e,function(e,r){var o,i;return o=Math.min(bp(e,t),Cp(e,t)),i=Math.min(bp(r,t),Cp(r,t)),n(t,r)?r:n(t,e)?e:i===o&&hp(r.node)?r:i<o?r:e})},wp=function(e,t,n,r){for(;r=vp(r,e,ki,t);)if(n(r))return},Np=function(e,t){var n=[],r=function(e,r){var o;return o=At.filter(gp.getClientRects(r),function(n){return!e(n,t)}),n=n.concat(o),0===o.length};return n.push(t),wp(-1,e,yp(r,Ii),t.node),wp(1,e,yp(r,Li),t.node),n},Ep=xp,Sp=function(e,t,n){var r,o,i,a,s;return r=gp.getClientRects((i=e,At.filter(At.toArray(i.getElementsByTagName("*")),hp))),r=At.filter(r,function(e){return n>=e.top&&n<=e.bottom}),(o=xp(r,t))&&(o=xp(Np(e,o),t))&&hp(o.node)?(s=t,{node:(a=o).node,before:bp(a,s)<Cp(a,s)}):null},kp=function(e,t,n){return!n.collapsed&&M.foldl(n.getClientRects(),function(n,r){return n||Mi(r,e,t)},!1)},Tp=function(e,t){var n=null;return{cancel:function(){null!==n&&(clearTimeout(n),n=null)},throttle:function(){var r=arguments;null===n&&(n=setTimeout(function(){e.apply(null,r),n=null,r=null},t))}}},Ap=vo.isContentEditableTrue,_p=vo.isContentEditableFalse,Bp=function(e,t,n,r){return t._selectionOverrides.showCaret(e,n,r)},Rp=function(e,t){var n,r;return t=_a.normalizeRange(1,e.getBody(),t),n=ia.fromRangeStart(t),_p(n.getNode())?Bp(1,e,n.getNode(),!n.isAtEnd()):_p(n.getNode(!0))?Bp(1,e,n.getNode(!0),!1):(r=e.dom.getParent(n.getNode(),ji.or(_p,Ap)),_p(r)?Bp(1,e,r,!1):null)},Dp=Bp,Op=function(e,t){var n,r;return e.fire("BeforeObjectSelected",{target:t}).isDefaultPrevented()?null:((r=(n=t).ownerDocument.createRange()).selectNode(n),r)},Pp=Rp,Ip=function(e,t){return t&&t.collapsed&&Rp(e,t)||t},Lp=function(e){var t=Tp(function(){if(!e.removed){var t=Ip(e,e.selection.getRng());e.selection.setRng(t)}},0);e.on("focus",function(){t.throttle()}),e.on("blur",function(){t.cancel()})},Mp={BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(e){return e.shiftKey||e.ctrlKey||e.altKey||this.metaKeyPressed(e)},metaKeyPressed:function(e){return me.mac?e.metaKey:e.ctrlKey&&!e.altKey}},Fp=vo.isContentEditableTrue,zp=vo.isContentEditableFalse,Up=_a.isAfterContentEditableFalse,Vp=_a.isBeforeContentEditableFalse,Hp=function(e){var t,n,r,o=e.getBody(),i=mp(e.getBody(),function(t){return e.dom.isBlock(t)}),a="sel-"+e.dom.uniqueId(),s=function(t){t&&e.selection.setRng(t)},u=function(){return e.selection.getRng()},c=function(t,n){e.selection.scrollIntoView(t,n)},l=function(t,n,r){return e.fire("ShowCaret",{target:n,direction:t,before:r}).isDefaultPrevented()?null:(c(n,-1===t),i.show(r,n))},f=function(e,t){return t=_a.normalizeRange(e,o,t),-1===e?ia.fromRangeStart(t):ia.fromRangeEnd(t)},d=function(e){return mi.isCaretContainer(e)||mi.startsWithCaretContainer(e)||mi.endsWithCaretContainer(e)},m=function(e){return d(e.startContainer)||d(e.endContainer)},p=function(n,r){var o,i,s,u,c,d,p,g,v,y,b=e.$,C=e.dom;if(!n)return null;if(n.collapsed){if(!m(n))if(!1===r){if(g=f(-1,n),zp(g.getNode(!0)))return l(-1,g.getNode(!0),!1);if(zp(g.getNode()))return l(-1,g.getNode(),!g.isAtEnd())}else{if(g=f(1,n),zp(g.getNode()))return l(1,g.getNode(),!g.isAtEnd());if(zp(g.getNode(!0)))return l(1,g.getNode(!0),!1)}return null}return u=n.startContainer,c=n.startOffset,d=n.endOffset,3===u.nodeType&&0===c&&zp(u.parentNode)&&(u=u.parentNode,c=C.nodeIndex(u),u=u.parentNode),1!==u.nodeType?null:(d===c+1&&(o=u.childNodes[c]),zp(o)?(v=y=o.cloneNode(!0),(p=e.fire("ObjectSelected",{target:o,targetClone:v})).isDefaultPrevented()?null:(i=Nu(Hn.fromDom(e.getBody()),"#"+a).fold(function(){return b([])},function(e){return b([e.dom()])}),v=p.targetClone,0===i.length&&(i=b('<div data-mce-bogus="all" class="mce-offscreen-selection"></div>').attr("id",a)).appendTo(e.getBody()),n=e.dom.createRng(),v===y&&me.ie?(i.empty().append('<p style="font-size: 0" data-mce-bogus="all">\xa0</p>').append(v),n.setStartAfter(i[0].firstChild.firstChild),n.setEndAfter(v)):(i.empty().append("\xa0").append(v).append("\xa0"),n.setStart(i[0].firstChild,1),n.setEnd(i[0].lastChild,0)),i.css({top:C.getPos(o,e.getBody()).y}),i[0].focus(),(s=e.selection.getSel()).removeAllRanges(),s.addRange(n),M.each(Os(Hn.fromDom(e.getBody()),"*[data-mce-selected]"),function(e){dr.remove(e,"data-mce-selected")}),o.setAttribute("data-mce-selected","1"),t=o,h(),n)):null)},g=function(){t&&(t.removeAttribute("data-mce-selected"),Nu(Hn.fromDom(e.getBody()),"#"+a).each(Bs.remove),t=null)},h=function(){i.hide()};return me.ceFalse&&(function(){var n=function(t){for(var n=e.getBody();t&&t!==n;){if(Fp(t)||zp(t))return t;t=t.parentNode}return null};e.on("mouseup",function(t){var n=u();n.collapsed&&Nm(e,t.clientX,t.clientY)&&s(Pp(e,n))}),e.on("click",function(t){var r;(r=n(t.target))&&(zp(r)&&(t.preventDefault(),e.focus()),Fp(r)&&e.dom.isChildOf(r,e.selection.getNode())&&g())}),e.on("blur NewBlock",function(){g()});var r,i,c=function(t,n){var r,o,i=e.dom.getParent(t,e.dom.isBlock),a=e.dom.getParent(n,e.dom.isBlock);return i&&(r=i,o=a,!(e.dom.getParent(r,e.dom.isBlock)===e.dom.getParent(o,e.dom.isBlock)))&&function(e){var t=Ha(e);if(!e.firstChild)return!1;var n=ia.before(e.firstChild),r=t.next(n);return r&&!Vp(r)&&!Up(r)}(i)};i=!1,(r=e).on("touchstart",function(){i=!1}),r.on("touchmove",function(){i=!0}),r.on("touchend",function(e){var t=n(e.target);zp(t)&&(i||(e.preventDefault(),p(Op(r,t))))}),e.on("mousedown",function(t){var r;if(!1!==Nm(e,t.clientX,t.clientY))if(r=n(t.target))zp(r)?(t.preventDefault(),p(Op(e,r))):(g(),Fp(r)&&t.shiftKey||kp(t.clientX,t.clientY,e.selection.getRng())||e.selection.placeCaretAt(t.clientX,t.clientY));else{g(),h();var i=Sp(o,t.clientX,t.clientY);i&&(c(t.target,i.node)||(t.preventDefault(),e.getBody().focus(),s(l(1,i.node,i.before))))}}),e.on("keypress",function(t){Mp.modifierPressed(t)||(t.keyCode,zp(e.selection.getNode())&&t.preventDefault())}),e.on("getSelectionRange",function(e){var n=e.range;if(t){if(!t.parentNode)return void(t=null);(n=n.cloneRange()).selectNode(t),e.range=n}}),e.on("setSelectionRange",function(e){var t;(t=p(e.range,e.forward))&&(e.range=t)}),e.on("AfterSetSelectionRange",function(t){var n,r=t.range;m(r)||h(),n=r.startContainer.parentNode,e.dom.hasClass(n,"mce-offscreen-selection")||g()}),e.on("copy",function(t){var n,r=t.clipboardData;if(!t.isDefaultPrevented()&&t.clipboardData&&!me.ie){var o=(n=e.dom.get(a))?n.getElementsByTagName("*")[0]:n;o&&(t.preventDefault(),r.clearData(),r.setData("text/html",o.outerHTML),r.setData("text/plain",o.outerText))}}),fp(e),Lp(e)}(),n=e.contentStyles,r=".mce-content-body",n.push(i.getCss()),n.push(r+" .mce-offscreen-selection {position: absolute;left: -9999999999px;max-width: 1000000px;}"+r+" *[contentEditable=false] {cursor: default;}"+r+" *[contentEditable=true] {cursor: text;}")),{showCaret:l,showBlockCaretContainer:function(e){e.hasAttribute("data-mce-caret")&&(mi.showCaretContainerBlock(e),s(u()),c(e[0]))},hideFakeCaret:h,destroy:function(){i.destroy(),t=null}}},qp=0,jp=2,$p=1,Wp=function(e,t){var n=e.length+t.length+2,r=new Array(n),o=new Array(n),i=function(n,r,o,a,u){var c=s(n,r,o,a);if(null===c||c.start===r&&c.diag===r-a||c.end===n&&c.diag===n-o)for(var l=n,f=o;l<r||f<a;)l<r&&f<a&&e[l]===t[f]?(u.push([0,e[l]]),++l,++f):r-n>a-o?(u.push([2,e[l]]),++l):(u.push([1,t[f]]),++f);else{i(n,c.start,o,c.start-c.diag,u);for(var d=c.start;d<c.end;++d)u.push([0,e[d]]);i(c.end,r,c.end-c.diag,a,u)}},a=function(n,r,o,i){for(var a=n;a-r<i&&a<o&&e[a]===t[a-r];)++a;return{start:n,end:a,diag:r}},s=function(n,i,s,u){var c=i-n,l=u-s;if(0===c||0===l)return null;var f,d,m,p,g,h=c-l,v=l+c,y=(v%2==0?v:v+1)/2;for(r[1+y]=n,o[1+y]=i+1,f=0;f<=y;++f){for(d=-f;d<=f;d+=2){for(m=d+y,d===-f||d!==f&&r[m-1]<r[m+1]?r[m]=r[m+1]:r[m]=r[m-1]+1,g=(p=r[m])-n+s-d;p<i&&g<u&&e[p]===t[g];)r[m]=++p,++g;if(h%2!=0&&h-f<=d&&d<=h+f&&o[m-h]<=r[m])return a(o[m-h],d+n-s,i,u)}for(d=h-f;d<=h+f;d+=2){for(m=d+y-h,d===h-f||d!==h+f&&o[m+1]<=o[m-1]?o[m]=o[m+1]-1:o[m]=o[m-1],g=(p=o[m]-1)-n+s-d;p>=n&&g>=s&&e[p]===t[g];)o[m]=p--,g--;if(h%2==0&&-f<=d&&d<=f&&o[m]<=r[m+h])return a(o[m],d+n-s,i,u)}}},u=[];return i(0,e.length,0,t.length,u),u},Kp=function(e){return 1===e.nodeType?e.outerHTML:3===e.nodeType?Ao.encodeRaw(e.data,!1):8===e.nodeType?"\x3c!--"+e.data+"--\x3e":""},Xp=function(e,t,n){var r=function(e){var t,n,r;for(r=document.createElement("div"),t=document.createDocumentFragment(),e&&(r.innerHTML=e);n=r.firstChild;)t.appendChild(n);return t}(t);if(e.hasChildNodes()&&n<e.childNodes.length){var o=e.childNodes[n];o.parentNode.insertBefore(r,o)}else e.appendChild(r)},Yp=function(e){return At.filter(At.map(e.childNodes,Kp),function(e){return e.length>0})},Gp=function(e,t){var n,r,o,i=At.map(t.childNodes,Kp);return n=Wp(i,e),r=t,o=0,At.each(n,function(e){e[0]===qp?o++:e[0]===$p?(Xp(r,e[1],o),o++):e[0]===jp&&function(e,t){if(e.hasChildNodes()&&t<e.childNodes.length){var n=e.childNodes[t];n.parentNode.removeChild(n)}}(r,o)}),t},Jp=function(e){return{type:"fragmented",fragments:e,content:"",bookmark:null,beforeBookmark:null}},Qp=function(e){return{type:"complete",fragments:null,content:e,bookmark:null,beforeBookmark:null}},Zp=function(e){return"fragmented"===e.type?e.fragments.join(""):e.content},eg=function(e){var t,n,r;return t=Yp(e.getBody()),-1!==(n=(r=M.bind(t,function(t){var n=im(e.serializer,t);return n.length>0?[n]:[]})).join("")).indexOf("</iframe>")?Jp(r):Qp(n)},tg=function(e,t,n){"fragmented"===t.type?Gp(t.fragments,e.getBody()):e.setContent(t.content,{format:"raw"}),e.selection.moveToBookmark(n?t.beforeBookmark:t.bookmark)},ng=function(e,t){return!!e&&!!t&&Zp(e)===Zp(t)},rg=function(e){var t,n,r=this,o=0,i=[],a=0,s=function(){return 0===a},u=function(e){s()&&(r.typing=e)},c=function(t){e.setDirty(t)},l=function(e){u(!1),r.add({},e)},f=function(){r.typing&&(u(!1),r.add())};return e.on("init",function(){r.add()}),e.on("BeforeExecCommand",function(e){var t=e.command;"Undo"!==t&&"Redo"!==t&&"mceRepaint"!==t&&(f(),r.beforeChange())}),e.on("ExecCommand",function(e){var t=e.command;"Undo"!==t&&"Redo"!==t&&"mceRepaint"!==t&&l(e)}),e.on("ObjectResizeStart Cut",function(){r.beforeChange()}),e.on("SaveContent ObjectResized blur",l),e.on("DragEnd",l),e.on("KeyUp",function(t){var o=t.keyCode;t.isDefaultPrevented()||((o>=33&&o<=36||o>=37&&o<=40||45===o||t.ctrlKey)&&(l(),e.nodeChanged()),46!==o&&8!==o||e.nodeChanged(),n&&r.typing&&!1===ng(eg(e),i[0])&&(!1===e.isDirty()&&(c(!0),e.fire("change",{level:i[0],lastLevel:null})),e.fire("TypingUndo"),n=!1,e.nodeChanged()))}),e.on("KeyDown",function(e){var t=e.keyCode;if(!e.isDefaultPrevented())if(t>=33&&t<=36||t>=37&&t<=40||45===t)r.typing&&l(e);else{var o=e.ctrlKey&&!e.altKey||e.metaKey;!(t<16||t>20)||224===t||91===t||r.typing||o||(r.beforeChange(),u(!0),r.add({},e),n=!0)}}),e.on("MouseDown",function(e){r.typing&&l(e)}),e.addShortcut("meta+z","","Undo"),e.addShortcut("meta+y,meta+shift+z","","Redo"),e.on("AddUndo Undo Redo ClearUndos",function(t){t.isDefaultPrevented()||e.nodeChanged()}),r={data:i,typing:!1,beforeChange:function(){s()&&(t=gs.getUndoBookmark(e.selection))},add:function(n,r){var a,u,l,f=e.settings;if(l=eg(e),n=n||{},n=Ot.extend(n,l),!1===s()||e.removed)return null;if(u=i[o],e.fire("BeforeAddUndo",{level:n,lastLevel:u,originalEvent:r}).isDefaultPrevented())return null;if(u&&ng(u,n))return null;if(i[o]&&(i[o].beforeBookmark=t),f.custom_undo_redo_levels&&i.length>f.custom_undo_redo_levels){for(a=0;a<i.length-1;a++)i[a]=i[a+1];i.length--,o=i.length}n.bookmark=gs.getUndoBookmark(e.selection),o<i.length-1&&(i.length=o+1),i.push(n),o=i.length-1;var d={level:n,lastLevel:u,originalEvent:r};return e.fire("AddUndo",d),o>0&&(c(!0),e.fire("change",d)),n},undo:function(){var t;return r.typing&&(r.add(),r.typing=!1,u(!1)),o>0&&(t=i[--o],tg(e,t,!0),c(!0),e.fire("undo",{level:t})),t},redo:function(){var t;return o<i.length-1&&(t=i[++o],tg(e,t,!1),c(!0),e.fire("redo",{level:t})),t},clear:function(){i=[],o=0,r.typing=!1,r.data=i,e.fire("ClearUndos")},hasUndo:function(){return o>0||r.typing&&i[0]&&!ng(eg(e),i[0])},hasRedo:function(){return o<i.length-1&&!r.typing},transact:function(e){return f(),r.beforeChange(),r.ignore(e),r.add()},ignore:function(e){try{a++,e()}finally{a--}},extra:function(t,n){var a,s;r.transact(t)&&(s=i[o].bookmark,a=i[o-1],tg(e,a,!0),r.transact(n)&&(i[o-1].beforeBookmark=s))}}},og={},ig=At.filter,ag=At.each;nm=function(e){var t,n,r=e.selection.getRng();t=vo.matchNodeNames("pre"),r.collapsed||(n=e.selection.getSelectedBlocks(),ag(ig(ig(n,t),function(e){return t(e.previousSibling)&&-1!==At.indexOf(n,e.previousSibling)}),function(e){var t,n;t=e.previousSibling,Qt(n=e).remove(),Qt(t).append("<br><br>").append(n.childNodes)}))},og[tm="pre"]||(og[tm]=[]),og[tm].push(nm);var sg=function(e,t){ag(og[e],function(e){e(t)})},ug=Ot.each,cg={walk:function(e,t,n){var r,o,i,a,s,u,c,l=t.startContainer,f=t.startOffset,d=t.endContainer,m=t.endOffset;if((c=e.select("td[data-mce-selected],th[data-mce-selected]")).length>0)ug(c,function(e){n([e])});else{var p,g,h,v=function(e){var t;return 3===(t=e[0]).nodeType&&t===l&&f>=t.nodeValue.length&&e.splice(0,1),t=e[e.length-1],0===m&&e.length>0&&t===d&&3===t.nodeType&&e.splice(e.length-1,1),e},y=function(e,t,n){for(var r=[];e&&e!==n;e=e[t])r.push(e);return r},b=function(e,t){do{if(e.parentNode===t)return e;e=e.parentNode}while(e)},C=function(e,t,r){var o=r?"nextSibling":"previousSibling";for(s=(a=e).parentNode;a&&a!==t;a=s)s=a.parentNode,(u=y(a===e?a:a[o],o)).length&&(r||u.reverse(),n(v(u)))};if(1===l.nodeType&&l.hasChildNodes()&&(l=l.childNodes[f]),1===d.nodeType&&d.hasChildNodes()&&(g=m,h=(p=d).childNodes,--g>h.length-1?g=h.length-1:g<0&&(g=0),d=h[g]||p),l===d)return n(v([l]));for(r=e.findCommonAncestor(l,d),a=l;a;a=a.parentNode){if(a===d)return C(l,r,!0);if(a===r)break}for(a=d;a;a=a.parentNode){if(a===l)return C(d,r);if(a===r)break}o=b(l,r)||l,i=b(d,r)||d,C(l,o,!0),(u=y(o===l?o:o.nextSibling,"nextSibling",i===d?i.nextSibling:i)).length&&n(v(u)),C(d,i)}}},lg=/^(src|href|style)$/,fg=Ot.each,dg=Uc.isEq,mg=function(e){return/^(TH|TD)$/.test(e.nodeName)},pg=function(e,t,n){var r,o,i;return r=t[n?"startContainer":"endContainer"],o=t[n?"startOffset":"endOffset"],vo.isElement(r)&&(i=r.childNodes.length-1,!n&&o&&o--,r=r.childNodes[o>i?i:o]),vo.isText(r)&&n&&o>=r.nodeValue.length&&(r=new to(r,e.getBody()).next()||r),vo.isText(r)&&!n&&0===o&&(r=new to(r,e.getBody()).prev()||r),r},gg=function(e,t,n,r){var o=e.create(n,r);return t.parentNode.insertBefore(o,t),o.appendChild(t),o},hg=function(e,t,n,r){return!(t=Uc.getNonWhiteSpaceSibling(t,n,r))||"BR"===t.nodeName||e.isBlock(t)},vg=function(e,t,n,r,o){var i,a,s,u,c,l,f,d,m,p,g,h,v,y,b,C=e.dom;if(l=C,!(dg(f=r,(d=t).inline)||dg(f,d.block)||(d.selector?vo.isElement(f)&&l.is(f,d.selector):void 0)||(u=r,c=t,c.links&&"A"===u.tagName)))return!1;if("all"!==t.remove)for(fg(t.styles,function(e,i){e=Uc.normalizeStyleValue(C,Uc.replaceVars(e,n),i),"number"==typeof i&&(i=e,o=0),(t.remove_similar||!o||dg(Uc.getStyle(C,o,i),e))&&C.setStyle(r,i,""),s=1}),s&&""===C.getAttrib(r,"style")&&(r.removeAttribute("style"),r.removeAttribute("data-mce-style")),fg(t.attributes,function(e,t){var i;if(e=Uc.replaceVars(e,n),"number"==typeof t&&(t=e,o=0),!o||dg(C.getAttrib(o,t),e)){if("class"===t&&(e=C.getAttrib(r,t))&&(i="",fg(e.split(/\s+/),function(e){/mce\-\w+/.test(e)&&(i+=(i?" ":"")+e)}),i))return void C.setAttrib(r,t,i);"class"===t&&r.removeAttribute("className"),lg.test(t)&&r.removeAttribute("data-mce-"+t),r.removeAttribute(t)}}),fg(t.classes,function(e){e=Uc.replaceVars(e,n),o&&!C.hasClass(o,e)||C.removeClass(r,e)}),a=C.getAttribs(r),i=0;i<a.length;i++){var x=a[i].nodeName;if(0!==x.indexOf("_")&&0!==x.indexOf("data-"))return!1}return"none"!==t.remove?(m=e,g=t,v=(p=r).parentNode,y=m.dom,b=m.settings.forced_root_block,g.block&&(b?v===y.getRoot()&&(g.list_block&&dg(p,g.list_block)||fg(Ot.grep(p.childNodes),function(e){Uc.isValid(m,b,e.nodeName.toLowerCase())?h?h.appendChild(e):(h=gg(y,e,b),y.setAttribs(h,m.settings.forced_root_block_attrs)):h=0})):y.isBlock(p)&&!y.isBlock(v)&&(hg(y,p,!1)||hg(y,p.firstChild,!0,1)||p.insertBefore(y.create("br"),p.firstChild),hg(y,p,!0)||hg(y,p.lastChild,!1,1)||p.appendChild(y.create("br")))),g.selector&&g.inline&&!dg(g.inline,p)||y.remove(p,1),!0):void 0},yg=vg,bg=function(e,t,n,r,o){var i,a,s=e.formatter.get(t),u=s[0],c=!0,l=e.dom,f=e.selection,d=function(r){var i,a,c,l,f,d,m=(i=e,a=r,c=t,l=n,f=o,fg(Uc.getParents(i.dom,a.parentNode).reverse(),function(e){var t;d||"_start"===e.id||"_end"===e.id||(t=il.matchNode(i,e,c,l,f))&&!1!==t.split&&(d=e)}),d);return function(e,t,n,r,o,i,a,s){var u,c,l,f,d,m,p=e.dom;if(n){for(m=n.parentNode,u=r.parentNode;u&&u!==m;u=u.parentNode){for(c=p.clone(u,!1),d=0;d<t.length;d++)if(vg(e,t[d],s,c,c)){c=0;break}c&&(l&&c.appendChild(l),f||(f=c),l=c)}!i||a.mixed&&p.isBlock(n)||(r=p.split(n,r)),l&&(o.parentNode.insertBefore(l,o),f.appendChild(o))}return r}(e,s,m,r,r,!0,u,n)},m=function(t){var r,o,i,a,f;if(vo.isElement(t)&&l.getContentEditable(t)&&(a=c,c="true"===l.getContentEditable(t),f=!0),r=Ot.grep(t.childNodes),c&&!f)for(o=0,i=s.length;o<i&&!vg(e,s[o],n,t,t);o++);if(u.deep&&r.length){for(o=0,i=r.length;o<i;o++)m(r[o]);f&&(c=a)}},p=function(e){var t=l.get(e?"_start":"_end"),n=t[e?"firstChild":"lastChild"];return xs.isBookmarkNode(n)&&(n=n[e?"firstChild":"lastChild"]),vo.isText(n)&&0===n.data.length&&(n=e?t.previousSibling||t.nextSibling:t.nextSibling||t.previousSibling),l.remove(t,!0),n},g=function(t){var n,r,o=t.commonAncestorContainer;if(t=Qc(e,t,s,!0),u.split){if((n=pg(e,t,!0))!==(r=pg(e,t))){if(/^(TR|TH|TD)$/.test(n.nodeName)&&n.firstChild&&(n="TR"===n.nodeName?n.firstChild.firstChild||n:n.firstChild||n),o&&/^T(HEAD|BODY|FOOT|R)$/.test(o.nodeName)&&mg(r)&&r.firstChild&&(r=r.firstChild||r),l.isChildOf(n,r)&&n!==r&&!l.isBlock(r)&&!mg(n)&&!mg(r))return n=gg(l,n,"span",{id:"_start","data-mce-type":"bookmark"}),d(n),void(n=p(!0));n=gg(l,n,"span",{id:"_start","data-mce-type":"bookmark"}),r=gg(l,r,"span",{id:"_end","data-mce-type":"bookmark"}),d(n),d(r),n=p(!0),r=p()}else n=r=d(n);t.startContainer=n.parentNode?n.parentNode:n,t.startOffset=l.nodeIndex(n),t.endContainer=r.parentNode?r.parentNode:r,t.endOffset=l.nodeIndex(r)+1}cg.walk(l,t,function(t){fg(t,function(t){m(t),vo.isElement(t)&&"underline"===e.dom.getStyle(t,"text-decoration")&&t.parentNode&&"underline"===Uc.getTextDecoration(l,t.parentNode)&&vg(e,{deep:!1,exact:!0,inline:"span",styles:{textDecoration:"underline"}},null,t)})})};if(r)r.nodeType?((a=l.createRng()).setStartBefore(r),a.setEndAfter(r),g(a)):g(r);else if("false"!==l.getContentEditable(f.getNode()))f.isCollapsed()&&u.inline&&!l.select("td[data-mce-selected],th[data-mce-selected]").length?wl(e,t,n,o):(i=f.getBookmark(),g(f.getRng()),f.moveToBookmark(i),u.inline&&il.match(e,t,n,f.getStart())&&Uc.moveStart(l,f,f.getRng()),e.nodeChanged());else{r=f.getNode();for(var h=0,v=s.length;h<v&&(!s[h].ceFalseOverride||!vg(e,s[h],n,r,r));h++);}},Cg=Ot.each,xg=function(e){return e&&1===e.nodeType&&!xs.isBookmarkNode(e)&&!Nl(e)&&!vo.isBogus(e)},wg=function(e,t){var n;for(n=e;n;n=n[t]){if(3===n.nodeType&&0!==n.nodeValue.length)return e;if(1===n.nodeType&&!xs.isBookmarkNode(n))return n}return e},Ng=function(e,t,n){var r,o,i=new Ns(e);if(t&&n&&(t=wg(t,"previousSibling"),n=wg(n,"nextSibling"),i.compare(t,n))){for(r=t.nextSibling;r&&r!==n;)o=r,r=r.nextSibling,t.appendChild(o);return e.remove(n),Ot.each(Ot.grep(n.childNodes),function(e){t.appendChild(e)}),t}return n},Eg=function(e,t,n){Cg(e.childNodes,function(e){xg(e)&&(t(e)&&n(e),e.hasChildNodes()&&Eg(e,t,n))})},Sg=function(e,t){return y.curry(function(t,n){return!(!n||!Uc.getStyle(e,n,t))},t)},kg=function(e,t,n){return y.curry(function(t,n,r){e.setStyle(r,t,n),""===r.getAttribute("style")&&r.removeAttribute("style"),Tg(e,r)},t,n)},Tg=function(e,t){"SPAN"===t.nodeName&&0===e.getAttribs(t).length&&e.remove(t,!0)},Ag=function(e,t){var n;1===t.nodeType&&t.parentNode&&1===t.parentNode.nodeType&&(n=Uc.getTextDecoration(e,t.parentNode),e.getStyle(t,"color")&&n?e.setStyle(t,"text-decoration",n):e.getStyle(t,"text-decoration")===n&&e.setStyle(t,"text-decoration",null))},_g=function(e,t,n,r){Cg(t,function(t){Cg(e.dom.select(t.inline,r),function(r){xg(r)&&yg(e,t,n,r,t.exact?r:null)}),function(e,t,n){if(t.clear_child_styles){var r=t.links?"*:not(a)":"*";Cg(e.select(r,n),function(n){xg(n)&&Cg(t.styles,function(t,r){e.setStyle(n,r,"")})})}}(e.dom,t,r)})},Bg=function(e,t,n,r){(t.styles.color||t.styles.textDecoration)&&(Ot.walk(r,y.curry(Ag,e),"childNodes"),Ag(e,r))},Rg=function(e,t,n,r){t.styles&&t.styles.backgroundColor&&Eg(r,Sg(e,"fontSize"),kg(e,"backgroundColor",Uc.replaceVars(t.styles.backgroundColor,n)))},Dg=function(e,t,n,r){"sub"!==t.inline&&"sup"!==t.inline||(Eg(r,Sg(e,"fontSize"),kg(e,"fontSize","")),e.remove(e.select("sup"===t.inline?"sub":"sup",r),!0))},Og=function(e,t,n,r){r&&!1!==t.merge_siblings&&(r=Ng(e,Uc.getNonWhiteSpaceSibling(r),r),r=Ng(e,r,Uc.getNonWhiteSpaceSibling(r,!0)))},Pg=function(e,t,n,r,o){il.matchNode(e,o.parentNode,n,r)&&yg(e,t,r,o)||t.merge_with_parents&&e.dom.getParent(o.parentNode,function(i){if(il.matchNode(e,i,n,r))return yg(e,t,r,o),!0})},Ig=Ot.each,Lg=function(e,t,n,r){var o,i,a=e.formatter.get(t),s=a[0],u=!r&&e.selection.isCollapsed(),c=e.dom,l=e.selection,f=function(e,t){if(t=t||s,e){if(t.onformat&&t.onformat(e,t,n,r),Ig(t.styles,function(t,r){c.setStyle(e,r,Uc.replaceVars(t,n))}),t.styles){var o=c.getAttrib(e,"style");o&&e.setAttribute("data-mce-style",o)}Ig(t.attributes,function(t,r){c.setAttrib(e,r,Uc.replaceVars(t,n))}),Ig(t.classes,function(t){t=Uc.replaceVars(t,n),c.hasClass(e,t)||c.addClass(e,t)})}},d=function(e,t){var n=!1;return!!s.selector&&(Ig(e,function(e){if(!("collapsed"in e&&e.collapsed!==u))return c.is(t,e.selector)&&!Nl(t)?(f(t,e),n=!0,!1):void 0}),n)},m=function(r,o,i,u){var c,l,m=[],p=!0;c=s.inline||s.block,l=r.create(c),f(l),cg.walk(r,o,function(o){var i,g=function(o){var h,v,y,b;if(b=p,h=o.nodeName.toLowerCase(),v=o.parentNode.nodeName.toLowerCase(),1===o.nodeType&&r.getContentEditable(o)&&(b=p,p="true"===r.getContentEditable(o),y=!0),Uc.isEq(h,"br"))return i=0,void(s.block&&r.remove(o));if(s.wrapper&&il.matchNode(e,o,t,n))i=0;else{if(p&&!y&&s.block&&!s.wrapper&&Uc.isTextBlock(e,h)&&Uc.isValid(e,v,c))return o=r.rename(o,c),f(o),m.push(o),void(i=0);if(s.selector){var C=d(a,o);if(!s.inline||C)return void(i=0)}!p||y||!Uc.isValid(e,c,h)||!Uc.isValid(e,v,c)||!u&&3===o.nodeType&&1===o.nodeValue.length&&65279===o.nodeValue.charCodeAt(0)||Nl(o)||s.inline&&r.isBlock(o)?(i=0,Ig(Ot.grep(o.childNodes),g),y&&(p=b),i=0):(i||(i=r.clone(l,!1),o.parentNode.insertBefore(i,o),m.push(i)),i.appendChild(o))}};Ig(o,g)}),!0===s.links&&Ig(m,function(e){var t=function(e){"A"===e.nodeName&&f(e,s),Ig(Ot.grep(e.childNodes),t)};t(e)}),Ig(m,function(o){var i,u,c,l,d,p=function(e){var t=!1;return Ig(e.childNodes,function(e){if((n=e)&&1===n.nodeType&&!xs.isBookmarkNode(n)&&!Nl(n)&&!vo.isBogus(n))return t=e,!1;var n}),t};u=0,Ig(o.childNodes,function(e){Uc.isWhiteSpaceNode(e)||xs.isBookmarkNode(e)||u++}),i=u,!(m.length>1)&&r.isBlock(o)||0!==i?(s.inline||s.wrapper)&&(s.exact||1!==i||((l=p(c=o))&&!xs.isBookmarkNode(l)&&il.matchName(r,l,s)&&(d=r.clone(l,!1),f(d),r.replace(d,c,!0),r.remove(l,1)),o=d||c),_g(e,a,n,o),Pg(e,s,t,n,o),Rg(r,s,n,o),Dg(r,s,n,o),Og(r,s,n,o)):r.remove(o,1)})};if("false"!==c.getContentEditable(l.getNode())){if(s){if(r)r.nodeType?d(a,r)||((i=c.createRng()).setStartBefore(r),i.setEndAfter(r),m(c,Qc(e,i,a),0,!0)):m(c,r,0,!0);else if(u&&s.inline&&!c.select("td[data-mce-selected],th[data-mce-selected]").length)xl(e,t,n);else{var p=e.selection.getNode();e.settings.forced_root_block||!a[0].defaultBlock||c.getParent(p,c.isBlock)||Lg(e,a[0].defaultBlock),e.selection.setRng(Xs(e.selection.getRng())),o=l.getBookmark(),m(c,Qc(e,l.getRng(),a)),s.styles&&Bg(c,s,n,p),l.moveToBookmark(o),Uc.moveStart(c,l,l.getRng()),e.nodeChanged()}sg(t,e)}}else{r=l.getNode();for(var g=0,h=a.length;g<h;g++)if(a[g].ceFalseOverride&&c.is(r,a[g].selector))return void f(r,a[g])}},Mg={applyFormat:Lg},Fg=Ot.each,zg=function(e,t,n,r,o){var i,a,s,u,c,l,f,d;null===t.get()&&(a=e,s={},(i=t).set({}),a.on("NodeChange",function(e){var t=Uc.getParents(a.dom,e.element),n={};t=Ot.grep(t,function(e){return 1===e.nodeType&&!e.getAttribute("data-mce-bogus")}),Fg(i.get(),function(e,r){Fg(t,function(o){return a.formatter.matchNode(o,r,{},e.similar)?(s[r]||(Fg(e,function(e){e(!0,{node:o,format:r,parents:t})}),s[r]=e),n[r]=e,!1):!il.matchesUnInheritedFormatSelector(a,o,r)&&void 0})}),Fg(s,function(r,o){n[o]||(delete s[o],Fg(r,function(n){n(!1,{node:e.element,format:o,parents:t})}))})})),c=n,l=r,f=o,d=(u=t).get(),Fg(c.split(","),function(e){d[e]||(d[e]=[],d[e].similar=f),d[e].push(l)}),u.set(d)},Ug=function(e){var t={valigntop:[{selector:"td,th",styles:{verticalAlign:"top"}}],valignmiddle:[{selector:"td,th",styles:{verticalAlign:"middle"}}],valignbottom:[{selector:"td,th",styles:{verticalAlign:"bottom"}}],alignleft:[{selector:"figure.image",collapsed:!1,classes:"align-left",ceFalseOverride:!0,preview:"font-family font-size"},{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"left"},inherit:!1,preview:!1,defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"left"},preview:"font-family font-size"}],aligncenter:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"center"},inherit:!1,preview:"font-family font-size",defaultBlock:"div"},{selector:"figure.image",collapsed:!1,classes:"align-center",ceFalseOverride:!0,preview:"font-family font-size"},{selector:"img",collapsed:!1,styles:{display:"block",marginLeft:"auto",marginRight:"auto"},preview:!1},{selector:"table",collapsed:!1,styles:{marginLeft:"auto",marginRight:"auto"},preview:"font-family font-size"}],alignright:[{selector:"figure.image",collapsed:!1,classes:"align-right",ceFalseOverride:!0,preview:"font-family font-size"},{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"right"},inherit:!1,preview:"font-family font-size",defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"right"},preview:"font-family font-size"}],alignjustify:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"justify"},inherit:!1,defaultBlock:"div",preview:"font-family font-size"}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:!0},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:!0},{inline:"strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0},fontname:{inline:"span",styles:{fontFamily:"%value"},clear_child_styles:!0},fontsize:{inline:"span",styles:{fontSize:"%value"},clear_child_styles:!0},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:1,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},code:{inline:"code"},link:{inline:"a",selector:"a",remove:"all",split:!0,deep:!0,onmatch:function(){return!0},onformat:function(t,n,r){Ot.each(r,function(n,r){e.setAttrib(t,r,n)})}},removeformat:[{selector:"b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins",remove:"all",split:!0,expand:!1,block_expand:!0,deep:!0},{selector:"span",attributes:["style","class"],remove:"empty",split:!0,expand:!1,deep:!0},{selector:"*",attributes:["style","class"],split:!1,expand:!1,deep:!0}]};return Ot.each("p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp".split(/\s/),function(e){t[e]={block:e,remove:"all"}}),t},Vg=Ot.each,Hg=Xo.DOM,qg=function(e,t){var n,r,o,i=t&&t.schema||Fo({}),a=function(e){var t,n,o;return r="string"==typeof e?{name:e,classes:[],attrs:{}}:e,t=Hg.create(r.name),n=t,(o=r).classes.length&&Hg.addClass(n,o.classes.join(" ")),Hg.setAttribs(n,o.attrs),t},s=function(e,t,n){var r,o,u,c,l,f,d,m,p=t.length>0&&t[0],g=p&&p.name;if(l=g,f="string"!=typeof(c=e)?c.nodeName.toLowerCase():c,d=i.getElementRule(f),u=!(!(m=d&&d.parentsRequired)||!m.length)&&(l&&-1!==Ot.inArray(m,l)?l:m[0]))g===u?(o=t[0],t=t.slice(1)):o=u;else if(p)o=t[0],t=t.slice(1);else if(!n)return e;return o&&(r=a(o)).appendChild(e),n&&(r||(r=Hg.create("div")).appendChild(e),Ot.each(n,function(t){var n=a(t);r.insertBefore(n,e)})),s(r,t,o&&o.siblings)};return e&&e.length?(r=e[0],n=a(r),(o=Hg.create("div")).appendChild(s(n,e.slice(1),r.siblings)),o):""},jg=function(e){var t,n={classes:[],attrs:{}};return"*"!==(e=n.selector=Ot.trim(e))&&(t=e.replace(/(?:([#\.]|::?)([\w\-]+)|(\[)([^\]]+)\]?)/g,function(e,t,r,o,i){switch(t){case"#":n.attrs.id=r;break;case".":n.classes.push(r);break;case":":-1!==Ot.inArray("checked disabled enabled read-only required".split(" "),r)&&(n.attrs[r]=r)}if("["===o){var a=i.match(/([\w\-]+)(?:\=\"([^\"]+))?/);a&&(n.attrs[a[1]]=a[2])}return""})),n.name=t||"div",n},$g=function(e){return e&&"string"==typeof e?(e=(e=e.split(/\s*,\s*/)[0]).replace(/\s*(~\+|~|\+|>)\s*/g,"$1"),Ot.map(e.split(/(?:>|\s+(?![^\[\]]+\]))/),function(e){var t=Ot.map(e.split(/(?:~\+|~|\+)/),jg),n=t.pop();return t.length&&(n.siblings=t),n}).reverse()):[]},Wg=function(e,t){var n,r,o,i,a,s,u="";if(!1===(s=e.settings.preview_styles))return"";"string"!=typeof s&&(s="font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow");var c=function(e){return e.replace(/%(\w+)/g,"")};if("string"==typeof t){if(!(t=e.formatter.get(t)))return;t=t[0]}return"preview"in t&&!1===(s=t.preview)?"":(n=t.block||t.inline||"span",(i=$g(t.selector)).length?(i[0].name||(i[0].name=n),n=t.selector,r=qg(i,e)):r=qg([n],e),o=Hg.select(n,r)[0]||r.firstChild,Vg(t.styles,function(e,t){(e=c(e))&&Hg.setStyle(o,t,e)}),Vg(t.attributes,function(e,t){(e=c(e))&&Hg.setAttrib(o,t,e)}),Vg(t.classes,function(e){e=c(e),Hg.hasClass(o,e)||Hg.addClass(o,e)}),e.fire("PreviewFormats"),Hg.setStyles(r,{position:"absolute",left:-65535}),e.getBody().appendChild(r),a=Hg.getStyle(e.getBody(),"fontSize",!0),a=/px$/.test(a)?parseInt(a,10):0,Vg(s.split(" "),function(t){var n=Hg.getStyle(o,t,!0);if(!("background-color"===t&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(n)&&(n=Hg.getStyle(e.getBody(),t,!0),"#ffffff"===Hg.toHex(n).toLowerCase())||"color"===t&&"#000000"===Hg.toHex(n).toLowerCase())){if("font-size"===t&&/em|%$/.test(n)){if(0===a)return;n=(n=parseFloat(n)/(/%$/.test(n)?100:1))*a+"px"}"border"===t&&n&&(u+="padding:0 2px;"),u+=t+":"+n+";"}}),e.fire("AfterPreviewFormats"),Hg.remove(r),u)},Kg=function(e,t,n,r,o){var i=t.get(n);!il.match(e,n,r,o)||"toggle"in i[0]&&!i[0].toggle?Mg.applyFormat(e,n,r,o):bg(e,n,r,o)},Xg=function(e){e.addShortcut("meta+b","","Bold"),e.addShortcut("meta+i","","Italic"),e.addShortcut("meta+u","","Underline");for(var t=1;t<=6;t++)e.addShortcut("access+"+t,"",["FormatBlock",!1,"h"+t]);e.addShortcut("access+7","",["FormatBlock",!1,"p"]),e.addShortcut("access+8","",["FormatBlock",!1,"div"]),e.addShortcut("access+9","",["FormatBlock",!1,"address"])},Yg=function(e){var t,n,r,o=(n={},(r=function(e,t){e&&("string"!=typeof e?Ot.each(e,function(e,t){r(t,e)}):(t=t.length?t:[t],Ot.each(t,function(e){"undefined"==typeof e.deep&&(e.deep=!e.selector),"undefined"==typeof e.split&&(e.split=!e.selector||e.inline),"undefined"==typeof e.remove&&e.selector&&!e.inline&&(e.remove="none"),e.selector&&e.inline&&(e.mixed=!0,e.block_expand=!0),"string"==typeof e.classes&&(e.classes=e.classes.split(/\s+/))}),n[e]=t))})(Ug((t=e).dom)),r(t.settings.formats),{get:function(e){return e?n[e]:n},register:r,unregister:function(e){return e&&n[e]&&delete n[e],n}}),i=Yl(null);return Xg(e),Cl(e),{get:o.get,register:o.register,unregister:o.unregister,apply:y.curry(Mg.applyFormat,e),remove:y.curry(bg,e),toggle:y.curry(Kg,e,o),match:y.curry(il.match,e),matchAll:y.curry(il.matchAll,e),matchNode:y.curry(il.matchNode,e),canApply:y.curry(il.canApply,e),formatChanged:y.curry(zg,e,i),getCssText:y.curry(Wg,e)}},Gg=function(e){return function(){for(var t=new Array(arguments.length),n=0;n<t.length;n++)t[n]=arguments[n];if(0===t.length)throw new Error("Can't merge zero objects");for(var r={},o=0;o<t.length;o++){var i=t[o];for(var a in i)i.hasOwnProperty(a)&&(r[a]=e(r[a],i[a]))}return r}},Jg=Gg(function(e,t){return tr.isObject(e)&&tr.isObject(t)?Jg(e,t):t}),Qg=Gg(function(e,t){return t}),Zg={deepMerge:Jg,merge:Qg},eh=function(e,t){return e.fire("PreProcess",t)},th=function(e,t){return e.fire("PostProcess",t)},nh=function(e,t,n){e.addAttributeFilter("data-mce-tabindex",function(e,t){for(var n,r=e.length;r--;)(n=e[r]).attr("tabindex",n.attributes.map["data-mce-tabindex"]),n.attr(t,null)}),e.addAttributeFilter("src,href,style",function(e,r){for(var o,i,a=e.length,s="data-mce-"+r,u=t.url_converter,c=t.url_converter_scope;a--;)(i=(o=e[a]).attributes.map[s])!==undefined?(o.attr(r,i.length>0?i:null),o.attr(s,null)):(i=o.attributes.map[r],"style"===r?i=n.serializeStyle(n.parseStyle(i),o.name):u&&(i=u.call(c,i,r,o.name)),o.attr(r,i.length>0?i:null))}),e.addAttributeFilter("class",function(e){for(var t,n,r=e.length;r--;)(n=(t=e[r]).attr("class"))&&(n=t.attr("class").replace(/(?:^|\s)mce-item-\w+(?!\S)/g,""),t.attr("class",n.length>0?n:null))}),e.addAttributeFilter("data-mce-type",function(e,t,n){for(var r,o=e.length;o--;)"bookmark"!==(r=e[o]).attributes.map["data-mce-type"]||n.cleanup||r.remove()}),e.addNodeFilter("noscript",function(e){for(var t,n=e.length;n--;)(t=e[n].firstChild)&&(t.value=Ao.decode(t.value))}),e.addNodeFilter("script,style",function(e,n){for(var r,o,i,a=e.length,s=function(e){return e.replace(/(<!--\[CDATA\[|\]\]-->)/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*((<!--)?(\s*\/\/)?\s*<!\[CDATA\[|(<!--\s*)?\/\*\s*<!\[CDATA\[\s*\*\/|(\/\/)?\s*<!--|\/\*\s*<!--\s*\*\/)\s*[\r\n]*/gi,"").replace(/\s*(\/\*\s*\]\]>\s*\*\/(-->)?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")};a--;)o=(r=e[a]).firstChild?r.firstChild.value:"","script"===n?((i=r.attr("type"))&&r.attr("type","mce-no/type"===i?null:i.replace(/^mce\-/,"")),"xhtml"===t.element_format&&o.length>0&&(r.firstChild.value="// <![CDATA[\n"+s(o)+"\n// ]]>")):"xhtml"===t.element_format&&o.length>0&&(r.firstChild.value="\x3c!--\n"+s(o)+"\n--\x3e")}),e.addNodeFilter("#comment",function(e){for(var t,n=e.length;n--;)0===(t=e[n]).value.indexOf("[CDATA[")?(t.name="#cdata",t.type=4,t.value=t.value.replace(/^\[CDATA\[|\]\]$/g,"")):0===t.value.indexOf("mce:protected ")&&(t.name="#text",t.type=3,t.raw=!0,t.value=unescape(t.value).substr(14))}),e.addNodeFilter("xml:namespace,input",function(e,t){for(var n,r=e.length;r--;)7===(n=e[r]).type?n.remove():1===n.type&&("input"!==t||"type"in n.attributes.map||n.attr("type","text"))}),e.addAttributeFilter("data-mce-type",function(t){M.each(t,function(t){"format-caret"===t.attr("data-mce-type")&&(t.isEmpty(e.schema.getNonEmptyElements())?t.remove():t.unwrap())})}),e.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style,data-mce-selected,data-mce-expando,data-mce-type,data-mce-resize",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)})},rh=function(e){var t,n,r=function(e){return e&&"br"===e.name};r(t=e.lastChild)&&r(n=t.prev)&&(t.remove(),n.remove())},oh=function(e,t,n){return f=n,(l=e)&&l.hasEventListeners("PreProcess")&&!f.no_events?(o=t,i=n,c=(r=e).dom,o=o.cloneNode(!0),(a=document.implementation).createHTMLDocument&&(s=a.createHTMLDocument(""),Ot.each("BODY"===o.nodeName?o.childNodes:[o],function(e){s.body.appendChild(s.importNode(e,!0))}),o="BODY"!==o.nodeName?s.body.firstChild:s.body,u=c.doc,c.doc=s),eh(r,Zg.merge(i,{node:o})),u&&(c.doc=u),o):t;var r,o,i,a,s,u,c,l,f},ih=function(e,t,n){e.addNodeFilter("font",function(e){M.each(e,function(e){var r,o,i=t.parse(e.attr("style")),a=e.attr("color"),s=e.attr("face"),u=e.attr("size");a&&(i.color=a),s&&(i["font-family"]=s),u&&(i["font-size"]=n[parseInt(e.attr("size"),10)-1]),e.name="span",e.attr("style",t.serialize(i)),r=e,o=["color","face","size"],M.each(o,function(e){r.attr(e,null)})})})},ah=function(e,t){var n,r=zo();t.convert_fonts_to_spans&&ih(e,r,Ot.explode(t.font_size_legacy_values)),n=r,e.addNodeFilter("strike",function(e){M.each(e,function(e){var t=n.parse(e.attr("style"));t["text-decoration"]="line-through",e.name="span",e.attr("style",n.serialize(t))})})},sh=function(e,t){t.inline_styles&&ah(e,t)},uh=/^[ \t\r\n]*$/,ch={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11},lh=function(e,t,n){var r,o,i=n?"lastChild":"firstChild",a=n?"prev":"next";if(e[i])return e[i];if(e!==t){if(r=e[a])return r;for(o=e.parent;o&&o!==t;o=o.parent)if(r=o[a])return r}},fh=function(e,t){this.name=e,this.type=t,1===t&&(this.attributes=[],this.attributes.map={})};fh.prototype={replace:function(e){return e.parent&&e.remove(),this.insert(e,this),this.remove(),this},attr:function(e,t){var n,r;if("string"!=typeof e){for(r in e)this.attr(r,e[r]);return this}if(n=this.attributes){if(t!==undefined){if(null===t){if(e in n.map)for(delete n.map[e],r=n.length;r--;)if(n[r].name===e)return n=n.splice(r,1),this;return this}if(e in n.map){for(r=n.length;r--;)if(n[r].name===e){n[r].value=t;break}}else n.push({name:e,value:t});return n.map[e]=t,this}return n.map[e]}},clone:function(){var e,t,n,r,o,i=new fh(this.name,this.type);if(n=this.attributes){for((o=[]).map={},e=0,t=n.length;e<t;e++)"id"!==(r=n[e]).name&&(o[o.length]={name:r.name,value:r.value},o.map[r.name]=r.value);i.attributes=o}return i.value=this.value,i.shortEnded=this.shortEnded,i},wrap:function(e){return this.parent.insert(e,this),e.append(this),this},unwrap:function(){var e,t;for(e=this.firstChild;e;)t=e.next,this.insert(e,this,!0),e=t;this.remove()},remove:function(){var e=this.parent,t=this.next,n=this.prev;return e&&(e.firstChild===this?(e.firstChild=t,t&&(t.prev=null)):n.next=t,e.lastChild===this?(e.lastChild=n,n&&(n.next=null)):t.prev=n,this.parent=this.next=this.prev=null),this},append:function(e){var t;return e.parent&&e.remove(),(t=this.lastChild)?(t.next=e,e.prev=t,this.lastChild=e):this.lastChild=this.firstChild=e,e.parent=this,e},insert:function(e,t,n){var r;return e.parent&&e.remove(),r=t.parent||this,n?(t===r.firstChild?r.firstChild=e:t.prev.next=e,e.prev=t.prev,e.next=t,t.prev=e):(t===r.lastChild?r.lastChild=e:t.next.prev=e,e.next=t.next,e.prev=t,t.next=e),e.parent=r,e},getAll:function(e){var t,n=[];for(t=this.firstChild;t;t=lh(t,this))t.name===e&&n.push(t);return n},empty:function(){var e,t,n;if(this.firstChild){for(e=[],n=this.firstChild;n;n=lh(n,this))e.push(n);for(t=e.length;t--;)(n=e[t]).parent=n.firstChild=n.lastChild=n.next=n.prev=null}return this.firstChild=this.lastChild=null,this},isEmpty:function(e,t,n){var r,o,i=this.firstChild;if(t=t||{},i)do{if(1===i.type){if(i.attributes.map["data-mce-bogus"])continue;if(e[i.name])return!1;for(r=i.attributes.length;r--;)if("name"===(o=i.attributes[r].name)||0===o.indexOf("data-mce-bookmark"))return!1}if(8===i.type)return!1;if(3===i.type&&!uh.test(i.value))return!1;if(3===i.type&&i.parent&&t[i.parent.name]&&uh.test(i.value))return!1;if(n&&n(i))return!1}while(i=lh(i,this));return!0},walk:function(e){return lh(this,null,e)}},fh.create=function(e,t){var n,r;if(n=new fh(e,ch[e]||1),t)for(r in t)n.attr(r,t[r]);return n};var dh=Ot.makeMap,mh=Ot.each,ph=Ot.explode,gh=Ot.extend,hh=function(e,t,n,r){(e.padd_empty_with_br||t.insert)&&n[r.name]?r.empty().append(new fh("br","1")).shortEnded=!0:r.empty().append(new fh("#text","3")).value="\xa0"},vh=function(e,t){return e&&e.firstChild&&e.firstChild===e.lastChild&&e.firstChild.name===t},yh=function(e,t,n,r){return r.isEmpty(t,n,function(t){return n=t,(r=e.getElementRule(n.name))&&r.paddEmpty;var n,r})},bh=function(e,t){var n={},r={},o=[],i={},a={};return(e=e||{}).validate=!("validate"in e)||e.validate,e.root_name=e.root_name||"body",n.schema=t=t||Fo(),n.filterNode=function(e){var t,n,s;n in r&&((s=i[n])?s.push(e):i[n]=[e]),t=o.length;for(;t--;)(n=o[t].name)in e.attributes.map&&((s=a[n])?s.push(e):a[n]=[e]);return e},n.addNodeFilter=function(e,t){mh(ph(e),function(e){var n=r[e];n||(r[e]=n=[]),n.push(t)})},n.addAttributeFilter=function(e,t){mh(ph(e),function(e){var n;for(n=0;n<o.length;n++)if(o[n].name===e)return void o[n].callbacks.push(t);o.push({name:e,callbacks:[t]})})},n.parse=function(s,u){var c,l,f,d,m,p,g,h,v,y,b,C,x,w,N,E,S,k,T,A,_,B=[];u=u||{},i={},a={},C=gh(dh("script,style,head,html,body,title,meta,param"),t.getBlockElements()),A=t.getNonEmptyElements(),T=t.children,b=e.validate,_="forced_root_block"in u?u.forced_root_block:e.forced_root_block,k=t.getWhiteSpaceElements(),x=/^[ \t\r\n]+/,N=/[ \t\r\n]+$/,E=/[ \t\r\n]+/g,S=/^[ \t\r\n]+$/;var R=function(e,t){var n,o=new fh(e,t);return e in r&&((n=i[e])?n.push(o):i[e]=[o]),o},D=function(e){var n,r,o,i,a=t.getBlockElements();for(n=e.prev;n&&3===n.type;){if((o=n.value.replace(N,"")).length>0)return void(n.value=o);if(r=n.next){if(3===r.type&&r.value.length){n=n.prev;continue}if(!a[r.name]&&"script"!==r.name&&"style"!==r.name){n=n.prev;continue}}i=n.prev,n.remove(),n=i}};if(c=new em({validate:b,allow_script_urls:e.allow_script_urls,allow_conditional_comments:e.allow_conditional_comments,self_closing_elements:function(e){var t,n={};for(t in e)"li"!==t&&"p"!==t&&(n[t]=e[t]);return n}(t.getSelfClosingElements()),cdata:function(e){f.append(R("#cdata",4)).value=e},text:function(e,t){var n;w||(e=e.replace(E," "),f.lastChild&&C[f.lastChild.name]&&(e=e.replace(x,""))),0!==e.length&&((n=R("#text",3)).raw=!!t,f.append(n).value=e)},comment:function(e){f.append(R("#comment",8)).value=e},pi:function(e,t){f.append(R(e,7)).value=t,D(f)},doctype:function(e){f.append(R("#doctype",10)).value=e,D(f)},start:function(e,n,r){var i,s,u,c,l;if(u=b?t.getElementRule(e):{}){for((i=R(u.outputName||e,1)).attributes=n,i.shortEnded=r,f.append(i),(l=T[f.name])&&T[i.name]&&!l[i.name]&&B.push(i),s=o.length;s--;)(c=o[s].name)in n.map&&((v=a[c])?v.push(i):a[c]=[i]);C[e]&&D(i),r||(f=i),!w&&k[e]&&(w=!0)}},end:function(n){var r,o,i,a,s,c;if(o=b?t.getElementRule(n):{}){if(C[n]&&!w){if((r=f.firstChild)&&3===r.type)if((i=r.value.replace(x,"")).length>0)r.value=i,r=r.next;else for(a=r.next,r.remove(),r=a;r&&3===r.type;)i=r.value,a=r.next,(0===i.length||S.test(i))&&(r.remove(),r=a),r=a;if((r=f.lastChild)&&3===r.type)if((i=r.value.replace(N,"")).length>0)r.value=i,r=r.prev;else for(a=r.prev,r.remove(),r=a;r&&3===r.type;)i=r.value,a=r.prev,(0===i.length||S.test(i))&&(r.remove(),r=a),r=a}if(w&&k[n]&&(w=!1),o.removeEmpty&&yh(t,A,k,f)&&!f.attributes.map.name&&!f.attributes.map.id)return s=f.parent,C[f.name]?f.empty().remove():f.unwrap(),void(f=s);o.paddEmpty&&(vh(c=f,"#text")&&"\xa0"===c.firstChild.value||yh(t,A,k,f))&&hh(e,u,C,f),f=f.parent}}},t),l=f=new fh(u.context||e.root_name,11),c.parse(s),b&&B.length&&(u.context?u.invalid=!0:function(e){var r,o,i,a,s,u,c,l,f,d,m,p,g,h,v,y;for(p=dh("tr,td,th,tbody,thead,tfoot,table"),d=t.getNonEmptyElements(),m=t.getWhiteSpaceElements(),g=t.getTextBlockElements(),h=t.getSpecialElements(),r=0;r<e.length;r++)if((o=e[r]).parent&&!o.fixed)if(g[o.name]&&"li"===o.parent.name){for(v=o.next;v&&g[v.name];)v.name="li",v.fixed=!0,o.parent.insert(v,o.parent),v=v.next;o.unwrap(o)}else{for(a=[o],i=o.parent;i&&!t.isValidChild(i.name,o.name)&&!p[i.name];i=i.parent)a.push(i);if(i&&a.length>1){for(a.reverse(),s=u=n.filterNode(a[0].clone()),f=0;f<a.length-1;f++){for(t.isValidChild(u.name,a[f].name)?(c=n.filterNode(a[f].clone()),u.append(c)):c=u,l=a[f].firstChild;l&&l!==a[f+1];)y=l.next,c.append(l),l=y;u=c}yh(t,d,m,s)?i.insert(o,a[0],!0):(i.insert(s,a[0],!0),i.insert(o,s)),i=a[0],(yh(t,d,m,i)||vh(i,"br"))&&i.empty().remove()}else if(o.parent){if("li"===o.name){if((v=o.prev)&&("ul"===v.name||"ul"===v.name)){v.append(o);continue}if((v=o.next)&&("ul"===v.name||"ul"===v.name)){v.insert(o,v.firstChild,!0);continue}o.wrap(n.filterNode(new fh("ul",1)));continue}t.isValidChild(o.parent.name,"div")&&t.isValidChild("div",o.name)?o.wrap(n.filterNode(new fh("div",1))):h[o.name]?o.empty().remove():o.unwrap()}}}(B)),_&&("body"===l.name||u.isRootContent)&&function(){var n,r,o=l.firstChild,i=function(e){e&&((o=e.firstChild)&&3===o.type&&(o.value=o.value.replace(x,"")),(o=e.lastChild)&&3===o.type&&(o.value=o.value.replace(N,"")))};if(t.isValidChild(l.name,_.toLowerCase())){for(;o;)n=o.next,3===o.type||1===o.type&&"p"!==o.name&&!C[o.name]&&!o.attr("data-mce-type")?r?r.append(o):((r=R(_,1)).attr(e.forced_root_block_attrs),l.insert(r,o),r.append(o)):(i(r),r=null),o=n;i(r)}}(),!u.invalid){for(y in i){for(v=r[y],g=(d=i[y]).length;g--;)d[g].parent||d.splice(g,1);for(m=0,p=v.length;m<p;m++)v[m](d,y,u)}for(m=0,p=o.length;m<p;m++)if((v=o[m]).name in a){for(g=(d=a[v.name]).length;g--;)d[g].parent||d.splice(g,1);for(g=0,h=v.callbacks.length;g<h;g++)v.callbacks[g](d,v.name,u)}}return l},e.remove_trailing_brs&&n.addNodeFilter("br",function(n,r,o){var i,a,s,u,c,l,f,d,m=n.length,p=gh({},t.getBlockElements()),g=t.getNonEmptyElements(),h=t.getNonEmptyElements();for(p.body=1,i=0;i<m;i++)if(s=(a=n[i]).parent,p[a.parent.name]&&a===s.lastChild){for(c=a.prev;c;){if("span"!==(l=c.name)||"bookmark"!==c.attr("data-mce-type")){if("br"!==l)break;if("br"===l){a=null;break}}c=c.prev}a&&(a.remove(),yh(t,g,h,s)&&(f=t.getElementRule(s.name))&&(f.removeEmpty?s.remove():f.paddEmpty&&hh(e,o,p,s)))}else{for(u=a;s&&s.firstChild===u&&s.lastChild===u&&(u=s,!p[s.name]);)s=s.parent;u===s&&!0!==e.padd_empty_with_br&&((d=new fh("#text",3)).value="\xa0",a.replace(d))}}),n.addAttributeFilter("href",function(t){var n,r,o,i=t.length;if(!e.allow_unsafe_link_target)for(;i--;)"a"===(n=t[i]).name&&"_blank"===n.attr("target")&&n.attr("rel",(r=n.attr("rel"),o=r?Ot.trim(r):"",/\b(noopener)\b/g.test(o)?o:o.split(" ").filter(function(e){return e.length>0}).concat(["noopener"]).sort().join(" ")))}),e.allow_html_in_named_anchor||n.addAttributeFilter("id,name",function(e){for(var t,n,r,o,i=e.length;i--;)if("a"===(o=e[i]).name&&o.firstChild&&!o.attr("href")){r=o.parent,t=o.lastChild;do{n=t.prev,r.insert(t,o),t=n}while(t)}}),e.fix_list_elements&&n.addNodeFilter("ul,ol",function(e){for(var t,n,r=e.length;r--;)if("ul"===(n=(t=e[r]).parent).name||"ol"===n.name)if(t.prev&&"li"===t.prev.name)t.prev.append(t);else{var o=new fh("li",1);o.attr("style","list-style-type: none"),t.wrap(o)}}),e.validate&&t.getValidClasses()&&n.addAttributeFilter("class",function(e){for(var n,r,o,i,a,s,u,c=e.length,l=t.getValidClasses();c--;){for(r=(n=e[c]).attr("class").split(" "),a="",o=0;o<r.length;o++)i=r[o],u=!1,(s=l["*"])&&s[i]&&(u=!0),s=l[n.name],!u&&s&&s[i]&&(u=!0),u&&(a&&(a+=" "),a+=i);a.length||(a=null),n.attr("class",a)}}),sh(n,e),n},Ch=function(e,t,n){-1===Ot.inArray(t,n)&&(e.addAttributeFilter(n,function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),t.push(n))},xh=function(e,t,n,r,o){var i,a,s,u,c=(i=r,zs(t,n).serialize(i));return a=e,u=c,!(s=o).no_events&&a?th(a,Zg.merge(s,{content:u})).content:u},wh=function(e,t){var n,r,o,i=["data-mce-selected"];return n=t&&t.dom?t.dom:Xo.DOM,r=t&&t.schema?t.schema:Fo(e),e.entity_encoding=e.entity_encoding||"named",e.remove_trailing_brs=!("remove_trailing_brs"in e)||e.remove_trailing_brs,o=bh(e,r),nh(o,e,n),{schema:r,addNodeFilter:o.addNodeFilter,addAttributeFilter:o.addAttributeFilter,serialize:function(i,a){var s,u,c,l,f,d,m,p,g,h=Zg.merge({format:"html"},a||{}),v=oh(t,i,h),y=(s=n,u=v,l=ii((c=h).getInner?u.innerHTML:s.getOuterHTML(u)),c.selection?l:Ot.trim(l)),b=(f=o,d=y,p=(m=h).selection?Zg.merge({forced_root_block:!1},m):m,g=f.parse(d,p),rh(g),g);return"tree"===h.format?b:xh(t,e,r,b,h)},addRules:function(e){r.addValidElements(e)},setRules:function(e){r.setValidElements(e)},addTempAttr:y.curry(Ch,o,i),getTempAttrs:function(){return i}}},Nh=function(e,t){var n=wh(e,t);return{schema:n.schema,addNodeFilter:n.addNodeFilter,addAttributeFilter:n.addAttributeFilter,serialize:n.serialize,addRules:n.addRules,setRules:n.setRules,addTempAttr:n.addTempAttr,getTempAttrs:n.getTempAttrs}},Eh=function(e,t){var n;t.hasAttribute("data-mce-caret")&&(mi.showCaretContainerBlock(t),(n=e).selection.setRng(n.selection.getRng()),e.selection.scrollIntoView(t))},Sh=function(e,t){var n,r=(n=e,Nu(Hn.fromDom(n.getBody()),"*[data-mce-caret]").fold(y.constant(null),function(e){return e.dom()}));if(r)return"compositionstart"===t.type?(t.preventDefault(),t.stopPropagation(),void Eh(e,r)):void(mi.hasContent(r)&&Eh(e,r))},kh=function(e){e.on("keyup compositionstart",y.curry(Sh,e))};function Th(e){return{getBookmark:y.curry(xs.getBookmark,e),moveToBookmark:y.curry(xs.moveToBookmark,e)}}(Th||(Th={})).isBookmarkNode=xs.isBookmarkNode;var Ah=Th,_h=vo.isContentEditableFalse,Bh=vo.isContentEditableTrue,Rh=function(e,t){var n,r,o,i,a,s,u,c,l,f,d,m,p,g,h,v,y,b=t.dom,C=Ot.each,x=t.getDoc(),w=document,N=Math.abs,E=Math.round,S=t.getBody();i={nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};var k=".mce-content-body";t.contentStyles.push(k+" div.mce-resizehandle {position: absolute;border: 1px solid black;box-sizing: content-box;background: #FFF;width: 7px;height: 7px;z-index: 10000}"+k+" .mce-resizehandle:hover {background: #000}"+k+" img[data-mce-selected],"+k+" hr[data-mce-selected] {outline: 1px solid black;resize: none}"+k+" .mce-clonedresizable {position: absolute;"+(me.gecko?"":"outline: 1px dashed black;")+"opacity: .5;filter: alpha(opacity=50);z-index: 10000}"+k+" .mce-resize-helper {background: #555;background: rgba(0,0,0,0.75);border-radius: 3px;border: 1px;color: white;display: none;font-family: sans-serif;font-size: 12px;white-space: nowrap;line-height: 14px;margin: 5px 10px;padding: 5px;position: absolute;z-index: 10001}");var T=function(e){return e&&("IMG"===e.nodeName||t.dom.is(e,"figure.image"))},A=function(e){var n,r,o=e.target;n=e,r=t.selection.getRng(),!T(n.target)||kp(n.clientX,n.clientY,r)||e.isDefaultPrevented()||(e.preventDefault(),t.selection.select(o))},_=function(e){return t.dom.is(e,"figure.image")?e.querySelector("img"):e},B=function(e){var n=t.settings.object_resizing;return!1!==n&&!me.iOS&&("string"!=typeof n&&(n="table,img,figure.image,div"),"false"!==e.getAttribute("data-mce-resize")&&e!==t.getBody()&&_r.is(Hn.fromDom(e),n))},R=function(e){var i,C,x,w;i=e.screenX-s,C=e.screenY-u,g=i*a[2]+f,h=C*a[3]+d,g=g<5?5:g,h=h<5?5:h,(T(n)&&!1!==t.settings.resize_img_proportional?!Mp.modifierPressed(e):Mp.modifierPressed(e)||T(n)&&a[2]*a[3]!=0)&&(N(i)>N(C)?(h=E(g*m),g=E(h/m)):(g=E(h/m),h=E(g*m))),b.setStyles(_(r),{width:g,height:h}),x=a.startPos.x+i,w=a.startPos.y+C,x=x>0?x:0,w=w>0?w:0,b.setStyles(o,{left:x,top:w,display:"block"}),o.innerHTML=g+" &times; "+h,a[2]<0&&r.clientWidth<=g&&b.setStyle(r,"left",c+(f-g)),a[3]<0&&r.clientHeight<=h&&b.setStyle(r,"top",l+(d-h)),(i=S.scrollWidth-v)+(C=S.scrollHeight-y)!=0&&b.setStyles(o,{left:x-i,top:w-C}),p||(t.fire("ObjectResizeStart",{target:n,width:f,height:d}),p=!0)},D=function(){p=!1;var e=function(e,r){r&&(n.style[e]||!t.schema.isValid(n.nodeName.toLowerCase(),e)?b.setStyle(_(n),e,r):b.setAttrib(_(n),e,r))};e("width",g),e("height",h),b.unbind(x,"mousemove",R),b.unbind(x,"mouseup",D),w!==x&&(b.unbind(w,"mousemove",R),b.unbind(w,"mouseup",D)),b.remove(r),b.remove(o),O(n),t.fire("ObjectResized",{target:n,width:g,height:h}),b.setAttrib(n,"style",b.getAttrib(n,"style")),t.nodeChanged()},O=function(e){var p,N,E,k,T;P(),M(),p=b.getPos(e,S),c=p.x,l=p.y,T=e.getBoundingClientRect(),N=T.width||T.right-T.left,E=T.height||T.bottom-T.top,n!==e&&(n=e,g=h=0),k=t.fire("ObjectSelected",{target:e}),B(e)&&!k.isDefaultPrevented()?C(i,function(e,t){var i;(i=b.get("mceResizeHandle"+t))&&b.remove(i),i=b.add(S,"div",{id:"mceResizeHandle"+t,"data-mce-bogus":"all","class":"mce-resizehandle",unselectable:!0,style:"cursor:"+t+"-resize; margin:0; padding:0"}),me.ie&&(i.contentEditable=!1),b.bind(i,"mousedown",function(t){var i;t.stopImmediatePropagation(),t.preventDefault(),s=(i=t).screenX,u=i.screenY,f=_(n).clientWidth,d=_(n).clientHeight,m=d/f,a=e,e.startPos={x:N*e[0]+c,y:E*e[1]+l},v=S.scrollWidth,y=S.scrollHeight,r=n.cloneNode(!0),b.addClass(r,"mce-clonedresizable"),b.setAttrib(r,"data-mce-bogus","all"),r.contentEditable=!1,r.unSelectabe=!0,b.setStyles(r,{left:c,top:l,margin:0}),r.removeAttribute("data-mce-selected"),S.appendChild(r),b.bind(x,"mousemove",R),b.bind(x,"mouseup",D),w!==x&&(b.bind(w,"mousemove",R),b.bind(w,"mouseup",D)),o=b.add(S,"div",{"class":"mce-resize-helper","data-mce-bogus":"all"},f+" &times; "+d)}),e.elm=i,b.setStyles(i,{left:N*e[0]+c-i.offsetWidth/2,top:E*e[1]+l-i.offsetHeight/2})}):P(),n.setAttribute("data-mce-selected","1")},P=function(){var e,t;for(e in M(),n&&n.removeAttribute("data-mce-selected"),i)(t=b.get("mceResizeHandle"+e))&&(b.unbind(t),b.remove(t))},I=function(n){var r,o=function(e,t){if(e)do{if(e===t)return!0}while(e=e.parentNode)};p||t.removed||(C(b.select("img[data-mce-selected],hr[data-mce-selected]"),function(e){e.removeAttribute("data-mce-selected")}),r="mousedown"===n.type?n.target:e.getNode(),o(r=b.$(r).closest("table,img,figure.image,hr")[0],S)&&(F(),o(e.getStart(!0),r)&&o(e.getEnd(!0),r))?O(r):P())},L=function(e){return _h(function(e,t){for(;t&&t!==e;){if(Bh(t)||_h(t))return t;t=t.parentNode}return null}(t.getBody(),e))},M=function(){for(var e in i){var t=i[e];t.elm&&(b.unbind(t.elm),delete t.elm)}},F=function(){try{t.getDoc().execCommand("enableObjectResizing",!1,!1)}catch(e){}};return t.on("init",function(){F(),me.ie&&me.ie>=11&&(t.on("mousedown click",function(e){var n=e.target,r=n.nodeName;p||!/^(TABLE|IMG|HR)$/.test(r)||L(n)||(2!==e.button&&t.selection.select(n,"TABLE"===r),"mousedown"===e.type&&t.nodeChanged())}),t.dom.bind(S,"mscontrolselect",function(e){var n=function(e){ye.setEditorTimeout(t,function(){t.selection.select(e)})};if(L(e.target))return e.preventDefault(),void n(e.target);/^(TABLE|IMG|HR)$/.test(e.target.nodeName)&&(e.preventDefault(),"IMG"===e.target.tagName&&n(e.target))}));var e=ye.throttle(function(e){t.composing||I(e)});t.on("nodechange ResizeEditor ResizeWindow drop",e),t.on("keyup compositionend",function(t){n&&"TABLE"===n.nodeName&&e(t)}),t.on("hide blur",P),t.on("contextmenu",A)}),t.on("remove",M),{isResizable:B,showResizeRect:O,hideResizeRect:P,updateResizeRect:I,destroy:function(){n=r=null}}},Dh=function(e){for(var t=0,n=0,r=e;r&&r.nodeType;)t+=r.offsetLeft||0,n+=r.offsetTop||0,r=r.offsetParent;return{x:t,y:n}},Oh=function(e,t,n){var r,o,i,a,s,u=e.dom,c=u.getRoot(),l=0;if(s={elm:t,alignToTop:n},e.fire("scrollIntoView",s),!s.isDefaultPrevented()&&vo.isElement(t)){if(!1===n&&(l=t.offsetHeight),"BODY"!==c.nodeName){var f=e.selection.getScrollContainer();if(f)return r=Dh(t).y-Dh(f).y+l,a=f.clientHeight,void((r<(i=f.scrollTop)||r+25>i+a)&&(f.scrollTop=r<i?r:r-a+25))}o=u.getViewPort(e.getWin()),r=u.getPos(t).y+l,i=o.y,a=o.h,(r<o.y||r+25>i+a)&&e.getWin().scrollTo(0,r<i?r:r-a+25)}},Ph=function(e){return vo.isContentEditableTrue(e)||vo.isContentEditableFalse(e)},Ih=function(e,t,n){var r,o,i,a,s,u=n;if(u.caretPositionFromPoint)(o=u.caretPositionFromPoint(e,t))&&((r=n.createRange()).setStart(o.offsetNode,o.offset),r.collapse(!0));else if(n.caretRangeFromPoint)r=n.caretRangeFromPoint(e,t);else if(u.body.createTextRange){r=u.body.createTextRange();try{r.moveToPoint(e,t),r.collapse(!0)}catch(c){r=function(e,t,n){var r,o,i;if(r=n.elementFromPoint(e,t),o=n.body.createTextRange(),r&&"HTML"!==r.tagName||(r=n.body),o.moveToElementText(r),(i=(i=Ot.toArray(o.getClientRects())).sort(function(e,n){return(e=Math.abs(Math.max(e.top-t,e.bottom-t)))-(n=Math.abs(Math.max(n.top-t,n.bottom-t)))})).length>0){t=(i[0].bottom+i[0].top)/2;try{return o.moveToPoint(e,t),o.collapse(!0),o}catch(a){}}return null}(e,t,n)}return i=r,a=n.body,s=i&&i.parentElement?i.parentElement():null,vo.isContentEditableFalse(function(e,t,n){for(;e&&e!==t;){if(n(e))return e;e=e.parentNode}return null}(s,a,Ph))?null:i}return r},Lh=function(e,t){return M.map(t,function(t){var n=e.fire("GetSelectionRange",{range:t});return n.range!==t?n.range:t})},Mh=function(e,t){return Hn.fromDom(e.dom().cloneNode(t))},Fh=function(e){return Mh(e,!0)},zh=function(e){return Mh(e,!1)},Uh=Fh,Vh=function(e,t){var n=(t||document).createDocumentFragment();return M.each(e,function(e){n.appendChild(e.dom())}),Hn.fromDom(n)},Hh=function(e){return Ur.firstChild(e).fold(y.constant([e]),function(t){return[e].concat(Hh(t))})},qh=function(e){return Ur.lastChild(e).fold(y.constant([e]),function(t){return"br"===Zn.name(t)?Ur.prevSibling(t).map(function(t){return[e].concat(qh(t))}).getOr([]):[e].concat(qh(t))})},jh=function(e,t){return hs([(i=t,a=i.startContainer,s=i.startOffset,vo.isText(a)?0===s?E.some(Hn.fromDom(a)):E.none():E.from(a.childNodes[s]).map(Hn.fromDom)),(n=t,r=n.endContainer,o=n.endOffset,vo.isText(r)?o===r.data.length?E.some(Hn.fromDom(r)):E.none():E.from(r.childNodes[o-1]).map(Hn.fromDom))],function(t,n){var r=M.find(Hh(e),y.curry(Dr.eq,t)),o=M.find(qh(e),y.curry(Dr.eq,n));return r.isSome()&&o.isSome()}).getOr(!1);var n,r,o,i,a,s},$h=function(e,t,n,r){var o=n,i=new to(n,o),a=e.schema.getNonEmptyElements();do{if(3===n.nodeType&&0!==Ot.trim(n.nodeValue).length)return void(r?t.setStart(n,0):t.setEnd(n,n.nodeValue.length));if(a[n.nodeName]&&!/^(TD|TH)$/.test(n.nodeName))return void(r?t.setStartBefore(n):"BR"===n.nodeName?t.setEndBefore(n):t.setEndAfter(n));if(me.ie&&me.ie<11&&e.isBlock(n)&&e.isEmpty(n))return void(r?t.setStart(n,0):t.setEnd(n,0))}while(n=r?i.next():i.prev());"BODY"===o.nodeName&&(r?t.setStart(o,0):t.setEnd(o,o.childNodes.length))},Wh=xr("element","width","rows"),Kh=xr("element","cells"),Xh=xr("x","y"),Yh=function(e,t){var n=parseInt(dr.get(e,t),10);return isNaN(n)?1:n},Gh=function(e){return M.foldl(e,function(e,t){return t.cells().length>e?t.cells().length:e},0)},Jh=function(e,t){for(var n=e.rows(),r=0;r<n.length;r++)for(var o=n[r].cells(),i=0;i<o.length;i++)if(Dr.eq(o[i],t))return E.some(Xh(i,r));return E.none()},Qh=function(e,t,n,r,o){for(var i=[],a=e.rows(),s=n;s<=o;s++){var u=a[s].cells(),c=t<r?u.slice(t,r+1):u.slice(r,t+1);i.push(Kh(a[s].element(),c))}return i},Zh=function(e){var t=Wh(zh(e),0,[]);return M.each(Os(e,"tr"),function(e,n){M.each(Os(e,"td,th"),function(r,o){!function(e,t,n,r,o){for(var i=Yh(o,"rowspan"),a=Yh(o,"colspan"),s=e.rows(),u=n;u<n+i;u++){s[u]||(s[u]=Kh(Uh(r),[]));for(var c=t;c<t+a;c++)s[u].cells()[c]=u===n&&c===t?o:zh(o)}}(t,function(e,t,n){for(;r=t,o=n,i=void 0,((i=e.rows())[o]?i[o].cells():[])[r];)t++;var r,o,i;return t}(t,o,n),n,e,r)})}),Wh(t.element(),Gh(t.rows()),t.rows())},ev=function(e){return t=e,i=e,n=M.map(i.rows(),function(e){var t=M.map(e.cells(),function(e){var t=Uh(e);return dr.remove(t,"colspan"),dr.remove(t,"rowspan"),t}),n=zh(e.element());return As(n,t),n}),r=zh(t.element()),o=Hn.fromTag("tbody"),As(o,n),ks.append(r,o),r;var t,n,r,o,i},tv=function(e,t,n){return Jh(e,t).bind(function(t){return Jh(e,n).map(function(n){return r=e,i=n,a=(o=t).x(),s=o.y(),u=i.x(),c=i.y(),l=s<c?Qh(r,a,s,u,c):Qh(r,a,c,u,s),Wh(r.element(),Gh(l),l);var r,o,i,a,s,u,c,l})})},nv=function(e,t){return M.find(e,function(e){return"li"===Zn.name(e)&&jh(e,t)}).fold(y.constant([]),function(t){return(n=e,M.find(n,function(e){return"ul"===Zn.name(e)||"ol"===Zn.name(e)})).map(function(e){return[Hn.fromTag("li"),Hn.fromTag(Zn.name(e))]}).getOr([]);var n})},rv=function(e,t){var n,r=Hn.fromDom(t.commonAncestorContainer),o=Uu(r,e),i=M.filter(o,function(e){return io.isInline(e)||io.isHeading(e)}),a=nv(o,t),s=i.concat(a.length?a:(n=r,io.isListItem(n)?Ur.parent(n).filter(io.isList).fold(y.constant([]),function(e){return[n,e]}):io.isList(n)?[n]:[]));return M.map(s,zh)},ov=function(){return Vh([])},iv=function(e,t){return n=Hn.fromDom(t.cloneContents()),r=rv(e,t),o=M.foldl(r,function(e,t){return ks.append(t,e),t},n),r.length>0?Vh([o]):o;var n,r,o},av=function(e,t){return(n=e,r=t[0],wu(r,"table",y.curry(Dr.eq,n))).bind(function(e){var n=t[0],r=t[t.length-1],o=Zh(e);return tv(o,n,r).map(function(e){return Vh([ev(e)])})}).getOrThunk(ov);var n,r},sv=function(e,t){var n,r,o=Af(t,e);return o.length>0?av(e,o):(n=e,(r=t).length>0&&r[0].collapsed?ov():iv(n,r[0]))},uv=function(e,t){var n,r=e.selection.getRng(),o=e.dom.create("body"),i=e.selection.getSel(),a=Lh(e,wf(i));if((t=t||{}).get=!0,t.format=t.format||"html",t.selection=!0,(t=e.fire("BeforeGetContent",t)).isDefaultPrevented())return e.fire("GetContent",t),t.content;if("text"===t.format)return e.selection.isCollapsed()?"":ii(r.text||(i.toString?i.toString():""));r.cloneContents?(n=t.contextual?sv(Hn.fromDom(e.getBody()),a).dom():r.cloneContents())&&o.appendChild(n):r.item!==undefined||r.htmlText!==undefined?(o.innerHTML="<br>"+(r.item?r.item(0).outerHTML:r.htmlText),o.removeChild(o.firstChild)):o.innerHTML=r.toString(),t.getInner=!0;var s=e.selection.serializer.serialize(o,t);return"tree"===t.format?s:(t.content=e.selection.isCollapsed()?"":s,e.fire("GetContent",t),t.content)},cv=function(e,t,n){var r,o,i,a=e.selection.getRng(),s=e.getDoc();if((n=n||{format:"html"}).set=!0,n.selection=!0,n.content=t,n.no_events||!(n=e.fire("BeforeSetContent",n)).isDefaultPrevented()){if(t=n.content,a.insertNode){t+='<span id="__caret">_</span>',a.startContainer===s&&a.endContainer===s?s.body.innerHTML=t:(a.deleteContents(),0===s.body.childNodes.length?s.body.innerHTML=t:a.createContextualFragment?a.insertNode(a.createContextualFragment(t)):(o=s.createDocumentFragment(),i=s.createElement("div"),o.appendChild(i),i.outerHTML=t,a.insertNode(o))),r=e.dom.get("__caret"),(a=s.createRange()).setStartBefore(r),a.setEndBefore(r),e.selection.setRng(a),e.dom.remove("__caret");try{e.selection.setRng(a)}catch(u){}}else a.item&&(s.execCommand("Delete",!1,null),a=e.getRng()),/^\s+/.test(t)?(a.pasteHTML('<span id="__mce_tmp">_</span>'+t),e.dom.remove("__mce_tmp")):a.pasteHTML(t);n.no_events||e.fire("SetContent",n)}else e.fire("SetContent",n)},lv=function(e,t,n,r,o){var i=n?t.startContainer:t.endContainer,a=n?t.startOffset:t.endOffset;return E.from(i).map(Hn.fromDom).map(function(e){return r&&t.collapsed?e:Ur.child(e,o(e,a)).getOr(e)}).bind(function(e){return Zn.isElement(e)?E.some(e):Ur.parent(e)}).map(function(e){return e.dom()}).getOr(e)},fv=function(e,t,n){return lv(e,t,!0,n,function(e,t){return Math.min(Ur.childNodesCount(e),t)})},dv=function(e,t,n){return lv(e,t,!1,n,function(e,t){return t>0?t-1:t})},mv=function(e,t){for(var n=e;e&&vo.isText(e)&&0===e.length;)e=t?e.nextSibling:e.previousSibling;return e||n},pv=Ot.each,gv=function(e){return!!e.select},hv=function(e){return!(!e||!e.ownerDocument)&&Dr.contains(Hn.fromDom(e.ownerDocument),Hn.fromDom(e))},vv=function(e,t,n,r){var o,i,a,s,u,c=function(e,t){return cv(r,e,t)},l=function(e){var t=d();t.collapse(!!e),m(t)},f=function(){return t.getSelection?t.getSelection():t.document.selection},d=function(){var n,o,i,u,c=function(e,t,n){try{return t.compareBoundaryPoints(e,n)}catch(r){return-1}};if(!t)return null;if(void 0===(u=t.document)||null===u)return null;if(r.bookmark!==undefined&&!1===hm(r)){var l=Td(r);if(l.isSome())return l.map(function(e){return Lh(r,[e])[0]}).getOr(u.createRange())}try{(n=f())&&(o=n.rangeCount>0?n.getRangeAt(0):n.createRange?n.createRange():u.createRange())}catch(d){}return(o=Lh(r,[o])[0])||(o=u.createRange?u.createRange():u.body.createTextRange()),o.setStart&&9===o.startContainer.nodeType&&o.collapsed&&(i=e.getRoot(),o.setStart(i,0),o.setEnd(i,0)),a&&s&&(0===c(o.START_TO_START,o,a)&&0===c(o.END_TO_END,o,a)?o=s:(a=null,s=null)),o},m=function(e,t){var n,o;if((i=e)&&(gv(i)||hv(i.startContainer)&&hv(i.endContainer))){var i,u=gv(e)?e:null;if(u){s=null;try{u.select()}catch(c){}}else{if(n=f(),e=r.fire("SetSelectionRange",{range:e,forward:t}).range,n){s=e;try{n.removeAllRanges(),n.addRange(e)}catch(c){}!1===t&&n.extend&&(n.collapse(e.endContainer,e.endOffset),n.extend(e.startContainer,e.startOffset)),a=n.rangeCount>0?n.getRangeAt(0):null}e.collapsed||e.startContainer!==e.endContainer||!n.setBaseAndExtent||me.ie||e.endOffset-e.startOffset<2&&e.startContainer.hasChildNodes()&&(o=e.startContainer.childNodes[e.startOffset])&&"IMG"===o.tagName&&(n.setBaseAndExtent(e.startContainer,e.startOffset,e.endContainer,e.endOffset),n.anchorNode===e.startContainer&&n.focusNode===e.endContainer||n.setBaseAndExtent(o,0,o,1)),r.fire("AfterSetSelectionRange",{range:e,forward:t})}}},p=function(){var t,n,r=f();return!(r&&r.anchorNode&&r.focusNode)||((t=e.createRng()).setStart(r.anchorNode,r.anchorOffset),t.collapse(!0),(n=e.createRng()).setStart(r.focusNode,r.focusOffset),n.collapse(!0),t.compareBoundaryPoints(t.START_TO_START,n)<=0)},g={bookmarkManager:null,controlSelection:null,dom:e,win:t,serializer:n,editor:r,collapse:l,setCursorLocation:function(t,n){var o=e.createRng();t?(o.setStart(t,n),o.setEnd(t,n),m(o),l(!1)):($h(e,o,r.getBody(),!0),m(o))},getContent:function(e){return uv(r,e)},setContent:c,getBookmark:function(e,t){return o.getBookmark(e,t)},moveToBookmark:function(e){return o.moveToBookmark(e)},select:function(t,n){var r,o,i;return(r=e,o=t,i=n,E.from(o).map(function(e){var t=r.nodeIndex(e),n=r.createRng();return n.setStart(e.parentNode,t),n.setEnd(e.parentNode,t+1),i&&($h(r,n,e,!0),$h(r,n,e,!1)),n})).each(m),t},isCollapsed:function(){var e=d(),t=f();return!(!e||e.item)&&(e.compareEndPoints?0===e.compareEndPoints("StartToEnd",e):!t||e.collapsed)},isForward:p,setNode:function(t){return c(e.getOuterHTML(t)),t},getNode:function(){return e=r.getBody(),(t=d())?(o=t.startContainer,i=t.endContainer,a=t.startOffset,s=t.endOffset,n=t.commonAncestorContainer,!t.collapsed&&(o===i&&s-a<2&&o.hasChildNodes()&&(n=o.childNodes[a]),3===o.nodeType&&3===i.nodeType&&(o=o.length===a?mv(o.nextSibling,!0):o.parentNode,i=0===s?mv(i.previousSibling,!1):i.parentNode,o&&o===i))?o:n&&3===n.nodeType?n.parentNode:n):e;var e,t,n,o,i,a,s},getSel:f,setRng:m,getRng:d,getStart:function(e){return fv(r.getBody(),d(),e)},getEnd:function(e){return dv(r.getBody(),d(),e)},getSelectedBlocks:function(t,n){return function(e,t,n,r){var o,i,a=[];if(i=e.getRoot(),n=e.getParent(n||fv(i,t,!1),e.isBlock),r=e.getParent(r||dv(i,t,!1),e.isBlock),n&&n!==i&&a.push(n),n&&r&&n!==r){o=n;for(var s=new to(n,i);(o=s.next())&&o!==r;)e.isBlock(o)&&a.push(o)}return r&&n!==r&&r!==i&&a.push(r),a}(e,d(),t,n)},normalize:function(){var t=d();if(!Ef(f())){var n=Jf.normalize(e,t);return n.each(function(e){m(e,p())}),n.getOr(t)}return t},selectorChanged:function(t,n){var o;return u||(u={},o={},r.on("NodeChange",function(t){var n=t.element,r=e.getParents(n,null,e.getRoot()),i={};pv(u,function(t,n){pv(r,function(a){if(e.is(a,n))return o[n]||(pv(t,function(e){e(!0,{node:a,selector:n,parents:r})}),o[n]=t),i[n]=t,!1})}),pv(o,function(e,t){i[t]||(delete o[t],pv(e,function(e){e(!1,{node:n,selector:t,parents:r})}))})})),u[t]||(u[t]=[]),u[t].push(n),g},getScrollContainer:function(){for(var t,n=e.getRoot();n&&"BODY"!==n.nodeName;){if(n.scrollHeight>n.clientHeight){t=n;break}n=n.parentNode}return t},scrollIntoView:function(e,t){return Oh(r,e,t)},placeCaretAt:function(e,t){return m(Ih(e,t,r.getDoc()))},getBoundingClientRect:function(){var e=d();return e.collapsed?ia.fromRangeStart(e).getClientRects()[0]:e.getBoundingClientRect()},destroy:function(){t=null,i.destroy()}};return o=Ah(g),i=Rh(g,r),g.bookmarkManager=o,g.controlSelection=i,g},yv=ji.curry,bv=function(e,t,n,r,o,i){var a,s,u=0,c=[],l=function(r){var i,a,l;for(l=gp.getClientRects(r),-1===e&&(l=l.reverse()),i=0;i<l.length;i++)if(a=l[i],!n(a,s)){if(c.length>0&&t(a,At.last(c))&&u++,a.line=u,o(a))return!0;c.push(a)}};return(s=At.last(i.getClientRects()))?(l(a=i.getNode()),function(e,t,n,r){for(;r=_a.findNode(r,e,ki,t);)if(n(r))return}(e,r,l,a),c):c},Cv={upUntil:yv(bv,-1,Ii,Li),downUntil:yv(bv,1,Li,Ii),positionsUntil:function(e,t,n,r){var o,i,a,s,u,c,l=Ha(t),f=[],d=0,m=function(e){return At.last(e.getClientRects())};1===e?(o=l.next,i=Li,a=Ii,s=ia.after(r)):(o=l.prev,i=Ii,a=Li,s=ia.before(r)),c=m(s);do{if(s.isVisible()&&!a(u=m(s),c)){if(f.length>0&&i(u,At.last(f))&&d++,(u=Di(u)).position=s,u.line=d,n(u))return f;f.push(u)}}while(s=o(s));return f},isAboveLine:yv(function(e,t){return t.line>e}),isLine:yv(function(e,t){return t.line===e})},xv=vo.isContentEditableFalse,wv=Fi,Nv=_a.isAfterContentEditableFalse,Ev=_a.isBeforeContentEditableFalse,Sv=function(e,t){for(;t=e(t);)if(t.isVisible())return t;return t},kv=function(e,t,n){return n=_a.normalizeRange(e,t,n),-1===e?ia.fromRangeStart(n):ia.fromRangeEnd(n)},Tv=function(e,t,n,r,o){var i,a,s,u,c,l,f,d;return!o.collapsed&&(i=wv(o),xv(i))?Dp(e,t,i,-1===e):(c=o,u=mi.isCaretContainerBlock(c.startContainer),r(a=kv(e,t.getBody(),o))?Op(t,a.getNode(-1===e)):(a=n(a))?r(a)?Dp(e,t,a.getNode(-1===e),1===e):r(s=n(a))&&(l=a,f=s,!(d=_a.isInSameBlock(l,f))&&vo.isBr(l.getNode())||d)?Dp(e,t,s.getNode(-1===e),1===e):u?Ip(t,a.toRange()):null:u?o:null)},Av=function(e,t,n){var r,o,i,a,s=Ha(e.getBody()),u=ji.curry(Sv,s.next),c=ji.curry(Sv,s.prev);if(n.collapsed&&e.settings.forced_root_block){if(!(r=e.dom.getParent(n.startContainer,"PRE")))return;(1===t?u(ia.fromRangeStart(n)):c(ia.fromRangeStart(n)))||(a=(i=e).dom.create(i.settings.forced_root_block),(!me.ie||me.ie>=11)&&(a.innerHTML='<br data-mce-bogus="1">'),o=a,1===t?e.$(r).after(o):e.$(r).before(o),e.selection.select(o,!0),e.selection.collapse())}},_v=function(e,t){var n,r=t?1:-1,o=t?Cv.downUntil:Cv.upUntil,i=e.selection.getRng();return(n=function(e,t,n,r){var o,i,a,s,u,c,l,f,d;if(d=wv(r),o=kv(e,t.getBody(),r),i=n(t.getBody(),Cv.isAboveLine(1),o),a=At.filter(i,Cv.isLine(1)),u=At.last(o.getClientRects()),Ev(o)&&(d=o.getNode()),Nv(o)&&(d=o.getNode(!0)),!u)return null;if(c=u.left,(s=Ep(a,c))&&xv(s.node))return l=Math.abs(c-s.left),f=Math.abs(c-s.right),Dp(e,t,s.node,l<f);if(d){var m=Cv.positionsUntil(e,t.getBody(),Cv.isAboveLine(1),d);if(s=Ep(At.filter(m,Cv.isLine(1)),c))return Ip(t,s.position.toRange());if(s=At.last(At.filter(m,Cv.isLine(0))))return Ip(t,s.position.toRange())}}(r,e,o,i))?n:(n=Av(e,r,i))||null},Bv=function(e,t){return function(){var n,r,o,i,a,s,u,c,l,f,d=(r=t,i=Ha((n=e).getBody()),a=ji.curry(Sv,i.next),s=ji.curry(Sv,i.prev),u=r?1:-1,c=r?a:s,l=r?Ev:Nv,f=n.selection.getRng(),(o=Tv(u,n,c,l,f))?o:(o=Av(n,u,f))||null);return!!d&&(e.selection.setRng(d),!0)}},Rv=function(e,t){return function(){var n=_v(e,t);return!!n&&(e.selection.setRng(n),!0)}},Dv=function(e,t){return M.bind((n=e,M.map(n,function(e){return Zg.merge({shiftKey:!1,altKey:!1,ctrlKey:!1,metaKey:!1,keyCode:0,action:y.noop},e)})),function(e){return n=e,(r=t).keyCode===n.keyCode&&r.shiftKey===n.shiftKey&&r.altKey===n.altKey&&r.ctrlKey===n.ctrlKey&&r.metaKey===n.metaKey?[e]:[];var n,r});var n},Ov=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var r=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,r)}},Pv=function(e,t){return M.find(Dv(e,t),function(e){return e.action()})},Iv=function(e,t){e.on("keydown",function(n){var r,o,i,a;!1===n.isDefaultPrevented()&&(r=e,o=t,i=n,a=Un.detect().os,Pv([{keyCode:Mp.RIGHT,action:Bv(r,!0)},{keyCode:Mp.LEFT,action:Bv(r,!1)},{keyCode:Mp.UP,action:Rv(r,!1)},{keyCode:Mp.DOWN,action:Rv(r,!0)},{keyCode:Mp.RIGHT,action:of.move(r,o,!0)},{keyCode:Mp.LEFT,action:of.move(r,o,!1)},{keyCode:Mp.RIGHT,ctrlKey:!a.isOSX(),altKey:a.isOSX(),action:of.moveNextWord(r,o)},{keyCode:Mp.LEFT,ctrlKey:!a.isOSX(),altKey:a.isOSX(),action:of.movePrevWord(r,o)}],i).each(function(e){i.preventDefault()}))})},Lv=function(e){return 1===Ur.children(e).length},Mv=function(e,t){var n,r=Hn.fromDom(e.getBody()),o=Hn.fromDom(e.selection.getStart()),i=M.filter((n=Uu(o,r),M.findIndex(n,io.isBlock).fold(y.constant(n),function(e){return n.slice(0,e)})),Lv);return M.last(i).map(function(n){var r=ia.fromRangeStart(e.selection.getRng());return!!Cu(t,r,n.dom())&&(function(e,t,n,r){var o=y.curry(kl,t),i=M.map(M.filter(r,o),function(e){return e.dom()});if(0===i.length)mc(t,e,n);else{var a=Sl(n.dom(),i);t.selection.setRng(a.toRange())}}(t,e,n,i),!0)}).getOr(!1)},Fv=function(e,t){return!!e.selection.isCollapsed()&&Mv(e,t)},zv=function(e,t){e.on("keydown",function(n){var r,o,i;!1===n.isDefaultPrevented()&&(r=e,o=t,i=n,Pv([{keyCode:Mp.BACKSPACE,action:Ov(hc,r,!1)},{keyCode:Mp.DELETE,action:Ov(hc,r,!0)},{keyCode:Mp.BACKSPACE,action:Ov(cf,r,o,!1)},{keyCode:Mp.DELETE,action:Ov(cf,r,o,!0)},{keyCode:Mp.BACKSPACE,action:Ov(Ju,r,!1)},{keyCode:Mp.DELETE,action:Ov(Ju,r,!0)},{keyCode:Mp.BACKSPACE,action:Ov(Ku,r,!1)},{keyCode:Mp.DELETE,action:Ov(Ku,r,!0)},{keyCode:Mp.BACKSPACE,action:Ov(zf,r,!1)},{keyCode:Mp.DELETE,action:Ov(zf,r,!0)},{keyCode:Mp.BACKSPACE,action:Ov(Fv,r,!1)},{keyCode:Mp.DELETE,action:Ov(Fv,r,!0)}],i).each(function(e){i.preventDefault()}))}),e.on("keyup",function(t){var n,r;!1===t.isDefaultPrevented()&&(n=e,r=t,Pv([{keyCode:Mp.BACKSPACE,action:Ov(vc,n)},{keyCode:Mp.DELETE,action:Ov(vc,n)}],r))})},Uv=function(e,t,n){var r=e.getParam(t,n);if(-1!==r.indexOf("=")){var o=e.getParam(t,"","hash");return o.hasOwnProperty(e.id)?o[e.id]:n}return r},Vv=function(e){return e.getParam("iframe_attrs",{})},Hv=function(e){return e.getParam("doctype","<!DOCTYPE html>")},qv=function(e){return e.getParam("document_base_url","")},jv=function(e){return Uv(e,"body_id","tinymce")},$v=function(e){return Uv(e,"body_class","")},Wv=function(e){return e.getParam("content_security_policy","")},Kv=function(e){return e.getParam("br_in_pre",!0)},Xv=function(e){if(e.getParam("force_p_newlines",!1))return"p";var t=e.getParam("forced_root_block","p");return!1===t?"":t},Yv=function(e){return e.getParam("forced_root_block_attrs",{})},Gv=function(e){return e.getParam("br_newline_selector",".mce-toc h2,figcaption,caption")},Jv=function(e){return e.getParam("no_newline_selector","")},Qv=function(e){return e.getParam("keep_styles",!0)},Zv=function(e){return e.getParam("end_container_on_empty_block",!1)},ey=function(e){return E.from(e.dom.getParent(e.selection.getStart(!0),e.dom.isBlock))},ty=function(e,t){var n,r,o,i=t,a=e.dom,s=e.schema.getMoveCaretBeforeOnEnterElements();if(t){if(/^(LI|DT|DD)$/.test(t.nodeName)){var u=function(e){for(;e;){if(1===e.nodeType||3===e.nodeType&&e.data&&/[\r\n\s]/.test(e.data))return e;e=e.nextSibling}}(t.firstChild);u&&/^(UL|OL|DL)$/.test(u.nodeName)&&t.insertBefore(a.doc.createTextNode("\xa0"),t.firstChild)}if(o=a.createRng(),t.normalize(),t.hasChildNodes()){for(n=new to(t,t);r=n.current();){if(vo.isText(r)){o.setStart(r,0),o.setEnd(r,0);break}if(s[r.nodeName.toLowerCase()]){o.setStartBefore(r),o.setEndBefore(r);break}i=r,r=n.next()}r||(o.setStart(i,0),o.setEnd(i,0))}else vo.isBr(t)?t.nextSibling&&a.isBlock(t.nextSibling)?(o.setStartBefore(t),o.setEndBefore(t)):(o.setStartAfter(t),o.setEndAfter(t)):(o.setStart(t,0),o.setEnd(t,0));e.selection.setRng(o),a.remove(void 0),e.selection.scrollIntoView(t)}},ny=function(e,t){var n,r,o=e.getRoot();for(n=t;n!==o&&"false"!==e.getContentEditable(n);)"true"===e.getContentEditable(n)&&(r=n),n=n.parentNode;return n!==o?r:o},ry=ey,oy=function(e){return ey(e).fold(y.constant(""),function(e){return e.nodeName.toUpperCase()})},iy=function(e){return ey(e).filter(function(e){return io.isListItem(Hn.fromDom(e))}).isSome()},ay=function(e,t){return e&&e.parentNode&&e.parentNode.nodeName===t},sy=function(e){return e&&/^(OL|UL|LI)$/.test(e.nodeName)},uy=function(e){var t=e.parentNode;return/^(LI|DT|DD)$/.test(t.nodeName)?t:e},cy=function(e,t,n){for(var r=e[n?"firstChild":"lastChild"];r&&!vo.isElement(r);)r=r[n?"nextSibling":"previousSibling"];return r===t},ly=function(e,t,n,r,o){var i=e.dom,a=e.selection.getRng();if(n!==e.getBody()){var s;sy(s=n)&&sy(s.parentNode)&&(o="LI");var u,c,l=o?t(o):i.create("BR");if(cy(n,r,!0)&&cy(n,r,!1))ay(n,"LI")?i.insertAfter(l,uy(n)):i.replace(l,n);else if(cy(n,r,!0))ay(n,"LI")?(i.insertAfter(l,uy(n)),l.appendChild(i.doc.createTextNode(" ")),l.appendChild(n)):n.parentNode.insertBefore(l,n);else if(cy(n,r,!1))i.insertAfter(l,uy(n));else{n=uy(n);var f=a.cloneRange();f.setStartAfter(r),f.setEndAfter(n);var d=f.extractContents();"LI"===o&&(c="LI",(u=d).firstChild&&u.firstChild.nodeName===c)?(l=d.firstChild,i.insertAfter(d,n)):(i.insertAfter(d,n),i.insertAfter(l,n))}i.remove(r),ty(e,l)}},fy=function(e){e.innerHTML='<br data-mce-bogus="1">'},dy=function(e,t){return e.nodeName===t||e.previousSibling&&e.previousSibling.nodeName===t},my=function(e,t){return t&&e.isBlock(t)&&!/^(TD|TH|CAPTION|FORM)$/.test(t.nodeName)&&!/^(fixed|absolute)/i.test(t.style.position)&&"true"!==e.getContentEditable(t)},py=function(e,t,n){return!1===vo.isText(t)?n:e?1===n&&t.data.charAt(n-1)===oi?0:n:n===t.data.length-1&&t.data.charAt(n)===oi?t.data.length:n},gy=function(e,t){var n,r,o=e.getRoot();for(n=t;n!==o&&"false"!==e.getContentEditable(n);)"true"===e.getContentEditable(n)&&(r=n),n=n.parentNode;return n!==o?r:o},hy=function(e,t){var n=Xv(e);n&&n.toLowerCase()===t.tagName.toLowerCase()&&e.dom.setAttribs(t,Yv(e))},vy=function(e,t){var n,r,o,i,a,s,u,c,l,f,d,m,p,g,h,v,y,b,C=e.dom,x=e.schema,w=x.getNonEmptyElements(),N=e.selection.getRng(),E=function(t){var n,i,s,u=o,c=x.getTextInlineElements();if(t||"TABLE"===f||"HR"===f?(n=C.create(t||m),hy(e,n)):n=a.cloneNode(!1),s=n,!1===Qv(e))C.setAttrib(n,"style",null),C.setAttrib(n,"class",null);else do{if(c[u.nodeName]){if(Nl(u))continue;i=u.cloneNode(!1),C.setAttrib(i,"id",""),n.hasChildNodes()?(i.appendChild(n.firstChild),n.appendChild(i)):(s=i,n.appendChild(i))}}while((u=u.parentNode)&&u!==r);return fy(s),n},S=function(e){var t,n,r,s;if(s=py(e,o,i),vo.isText(o)&&(e?s>0:s<o.nodeValue.length))return!1;if(o.parentNode===a&&p&&!e)return!0;if(e&&vo.isElement(o)&&o===a.firstChild)return!0;if(dy(o,"TABLE")||dy(o,"HR"))return p&&!e||!p&&e;for(t=new to(o,a),vo.isText(o)&&(e&&0===s?t.prev():e||s!==o.nodeValue.length||t.next());n=t.current();){if(vo.isElement(n)){if(!n.getAttribute("data-mce-bogus")&&(r=n.nodeName.toLowerCase(),w[r]&&"br"!==r))return!1}else if(vo.isText(n)&&!/^[ \t\r\n]*$/.test(n.nodeValue))return!1;e?t.prev():t.next()}return!0},k=function(){u=/^(H[1-6]|PRE|FIGURE)$/.test(f)&&"HGROUP"!==d?E(m):E(),Zv(e)&&my(C,l)&&C.isEmpty(a)?u=C.split(l,a):C.insertAfter(u,a),ty(e,u)};Jf.normalize(C,N).each(function(e){N.setStart(e.startContainer,e.startOffset),N.setEnd(e.endContainer,e.endOffset)}),o=N.startContainer,i=N.startOffset,m=Xv(e),s=t.shiftKey,vo.isElement(o)&&o.hasChildNodes()&&(p=i>o.childNodes.length-1,o=o.childNodes[Math.min(i,o.childNodes.length-1)]||o,i=p&&vo.isText(o)?o.nodeValue.length:0),(r=gy(C,o))&&((m&&!s||!m&&s)&&(o=function(e,t,n,r,o){var i,a,s,u,c,l,f,d=t||"P",m=e.dom,p=gy(m,r);if(!(a=m.getParent(r,m.isBlock))||!my(m,a)){if(l=(a=a||p)===e.getBody()||(f=a)&&/^(TD|TH|CAPTION)$/.test(f.nodeName)?a.nodeName.toLowerCase():a.parentNode.nodeName.toLowerCase(),!a.hasChildNodes())return i=m.create(d),hy(e,i),a.appendChild(i),n.setStart(i,0),n.setEnd(i,0),i;for(u=r;u.parentNode!==a;)u=u.parentNode;for(;u&&!m.isBlock(u);)s=u,u=u.previousSibling;if(s&&e.schema.isValidChild(l,d.toLowerCase())){for(i=m.create(d),hy(e,i),s.parentNode.insertBefore(i,s),u=s;u&&!m.isBlock(u);)c=u.nextSibling,i.appendChild(u),u=c;n.setStart(r,o),n.setEnd(r,o)}}return r}(e,m,N,o,i)),a=C.getParent(o,C.isBlock),l=a?C.getParent(a.parentNode,C.isBlock):null,f=a?a.nodeName.toUpperCase():"","LI"!==(d=l?l.nodeName.toUpperCase():"")||t.ctrlKey||(a=l,l=l.parentNode,f=d),/^(LI|DT|DD)$/.test(f)&&C.isEmpty(a)?ly(e,E,l,a,m):m&&a===e.getBody()||(m=m||"P",mi.isCaretContainerBlock(a)?(u=mi.showCaretContainerBlock(a),C.isEmpty(a)&&fy(a),ty(e,u)):S()?k():S(!0)?(u=a.parentNode.insertBefore(E(),a),ty(e,dy(a,"HR")?u:a)):((n=(y=N,b=y.cloneRange(),b.setStart(y.startContainer,py(!0,y.startContainer,y.startOffset)),b.setEnd(y.endContainer,py(!1,y.endContainer,y.endOffset)),b).cloneRange()).setEndAfter(a),function(e){do{vo.isText(e)&&(e.nodeValue=e.nodeValue.replace(/^[\r\n]+/,"")),e=e.firstChild}while(e)}(c=n.extractContents()),u=c.firstChild,C.insertAfter(c,a),function(e,t,n){var r,o=n,i=[];if(o){for(;o=o.firstChild;){if(e.isBlock(o))return;vo.isElement(o)&&!t[o.nodeName.toLowerCase()]&&i.push(o)}for(r=i.length;r--;)!(o=i[r]).hasChildNodes()||o.firstChild===o.lastChild&&""===o.firstChild.nodeValue?e.remove(o):(a=o)&&"A"===a.nodeName&&0===Ot.trim(ii(a.innerText||a.textContent)).length&&e.remove(o);var a}}(C,w,u),g=C,(h=a).normalize(),(v=h.lastChild)&&!/^(left|right)$/gi.test(g.getStyle(v,"float",!0))||g.add(h,"br"),C.isEmpty(a)&&fy(a),u.normalize(),C.isEmpty(u)?(C.remove(u),k()):ty(e,u)),C.setAttrib(u,"id",""),e.fire("NewBlock",{newBlock:u})))},yy=function(e,t){return ry(e).filter(function(e){return t.length>0&&_r.is(Hn.fromDom(e),t)}).isSome()},by=function(e){return yy(e,Gv(e))},Cy=function(e){return yy(e,Jv(e))},xy=Qu([{br:[]},{block:[]},{none:[]}]),wy=function(e,t){return Cy(e)},Ny=function(e){return function(t,n){return""===Xv(t)===e}},Ey=function(e){return function(t,n){return iy(t)===e}},Sy=function(e){return function(t,n){return"PRE"===oy(t)===e}},ky=function(e){return function(t,n){return Kv(t)===e}},Ty=function(e,t){return by(e)},Ay=function(e,t){return t},_y=function(e){var t=Xv(e),n=ny(e.dom,e.selection.getStart());return n&&e.schema.isValidChild(n.nodeName,t||"P")},By=function(e,t){return function(n,r){return M.foldl(e,function(e,t){return e&&t(n,r)},!0)?E.some(t):E.none()}},Ry=function(e,t){return Tl([By([wy],xy.none()),By([Sy(!0),ky(!1),Ay],xy.br()),By([Sy(!0),ky(!1)],xy.block()),By([Sy(!0),ky(!0),Ay],xy.block()),By([Sy(!0),ky(!0)],xy.br()),By([Ey(!0),Ay],xy.br()),By([Ey(!0)],xy.block()),By([Ny(!0),Ay,_y],xy.block()),By([Ny(!0)],xy.br()),By([Ty],xy.br()),By([Ny(!1),Ay],xy.br()),By([_y],xy.block())],[e,t.shiftKey]).getOr(xy.none())},Dy=function(e,t){Ry(e,t).fold(function(){sd(e,t)},function(){vy(e,t)},y.noop)},Oy=function(e){e.on("keydown",function(t){var n,r,o;t.keyCode===Mp.ENTER&&(n=e,(r=t).isDefaultPrevented()||(r.preventDefault(),(o=n.undoManager).typing&&(o.typing=!1,o.add()),n.undoManager.transact(function(){!1===n.selection.isCollapsed()&&n.execCommand("Delete"),Dy(n,r)})))})},Py=function(e,t,n){return s=t,!(!Iy(n)||!vo.isText(s.container())||(r=e,i=(o=t).container(),a=o.offset(),i.insertData(a,"\xa0"),r.selection.setCursorLocation(i,a+1),0));var r,o,i,a,s},Iy=function(e){return e.fold(y.constant(!1),y.constant(!0),y.constant(!0),y.constant(!1))},Ly=function(e){return!!e.selection.isCollapsed()&&(t=e,n=y.curry(vu.isInlineTarget,t),r=ia.fromRangeStart(t.selection.getRng()),$l(n,t.getBody(),r).map(y.curry(Py,t,r)).getOr(!1));var t,n,r},My=function(e){e.on("keydown",function(t){var n,r;!1===t.isDefaultPrevented()&&(n=e,r=t,Pv([{keyCode:Mp.SPACEBAR,action:Ov(Ly,n)}],r).each(function(e){r.preventDefault()}))})},Fy=function(e){var t=of.setupSelectedState(e);Iv(e,t),zv(e,t),Oy(e),My(e)},zy=function(e){var t,n,r,o=Ot.each,i=Mp.BACKSPACE,a=Mp.DELETE,s=e.dom,u=e.selection,c=e.settings,l=e.parser,f=me.gecko,d=me.ie,m=me.webkit,p="data:text/mce-internal,",g=d?"Text":"URL",h=function(t,n){try{e.getDoc().execCommand(t,!1,n)}catch(r){}},v=function(e){return e.isDefaultPrevented()},y=function(){e.shortcuts.add("meta+a",null,"SelectAll")},b=function(){e.on("keydown",function(e){if(!v(e)&&e.keyCode===i&&u.isCollapsed()&&0===u.getRng().startOffset){var t=u.getNode().previousSibling;if(t&&t.nodeName&&"table"===t.nodeName.toLowerCase())return e.preventDefault(),!1}})},C=function(){e.inline||(e.contentStyles.push("body {min-height: 150px}"),e.on("click",function(t){var n;if("HTML"===t.target.nodeName){if(me.ie>11)return void e.getBody().focus();n=e.selection.getRng(),e.getBody().focus(),e.selection.setRng(n),e.selection.normalize(),e.nodeChanged()}}))};return e.on("keydown",function(t){var n,r,o,i,a;if(!v(t)&&t.keyCode===Mp.BACKSPACE&&(r=(n=u.getRng()).startContainer,o=n.startOffset,i=s.getRoot(),a=r,n.collapsed&&0===o)){for(;a&&a.parentNode&&a.parentNode.firstChild===a&&a.parentNode!==i;)a=a.parentNode;"BLOCKQUOTE"===a.tagName&&(e.formatter.toggle("blockquote",null,a),(n=s.createRng()).setStart(r,0),n.setEnd(r,0),u.setRng(n))}}),t=function(e){var t=s.create("body"),n=e.cloneContents();return t.appendChild(n),u.serializer.serialize(t,{format:"html"})},e.on("keydown",function(n){var r,o,u,c,l,f=n.keyCode;if(!v(n)&&(f===a||f===i)){if(r=e.selection.isCollapsed(),o=e.getBody(),r&&!s.isEmpty(o))return;if(!r&&(u=e.selection.getRng(),c=t(u),(l=s.createRng()).selectNode(e.getBody()),c!==t(l)))return;n.preventDefault(),e.setContent(""),o.firstChild&&s.isBlock(o.firstChild)?e.selection.setCursorLocation(o.firstChild,0):e.selection.setCursorLocation(o,0),e.nodeChanged()}}),me.windowsPhone||e.on("keyup focusin mouseup",function(e){Mp.modifierPressed(e)||u.normalize()},!0),m&&(e.settings.content_editable||s.bind(e.getDoc(),"mousedown mouseup",function(t){var n;if(t.target===e.getDoc().documentElement)if(n=u.getRng(),e.getBody().focus(),"mousedown"===t.type){if(mi.isCaretContainer(n.startContainer))return;u.placeCaretAt(t.clientX,t.clientY)}else u.setRng(n)}),e.on("click",function(t){var n=t.target;/^(IMG|HR)$/.test(n.nodeName)&&"false"!==s.getContentEditableParent(n)&&(t.preventDefault(),e.selection.select(n),e.nodeChanged()),"A"===n.nodeName&&s.hasClass(n,"mce-item-anchor")&&(t.preventDefault(),u.select(n))}),c.forced_root_block&&e.on("init",function(){h("DefaultParagraphSeparator",c.forced_root_block)}),e.on("init",function(){e.dom.bind(e.getBody(),"submit",function(e){e.preventDefault()})}),b(),l.addNodeFilter("br",function(e){for(var t=e.length;t--;)"Apple-interchange-newline"===e[t].attr("class")&&e[t].remove()}),me.iOS?(e.inline||e.on("keydown",function(){document.activeElement===document.body&&e.getWin().focus()}),C(),e.on("click",function(e){var t=e.target;do{if("A"===t.tagName)return void e.preventDefault()}while(t=t.parentNode)}),e.contentStyles.push(".mce-content-body {-webkit-touch-callout: none}")):y()),me.ie>=11&&(C(),b()),me.ie&&(y(),h("AutoUrlDetect",!1),e.on("dragstart",function(t){var n,r,o;(n=t).dataTransfer&&(e.selection.isCollapsed()&&"IMG"===n.target.tagName&&u.select(n.target),(r=e.selection.getContent()).length>0&&(o=p+escape(e.id)+","+escape(r),n.dataTransfer.setData(g,o)))}),e.on("drop",function(t){if(!v(t)){var n=(a=t).dataTransfer&&(s=a.dataTransfer.getData(g))&&s.indexOf(p)>=0?(s=s.substr(p.length).split(","),{id:unescape(s[0]),html:unescape(s[1])}):null;if(n&&n.id!==e.id){t.preventDefault();var r=Ih(t.x,t.y,e.getDoc());u.setRng(r),o=n.html,i=!0,e.queryCommandSupported("mceInsertClipboardContent")?e.execCommand("mceInsertClipboardContent",!1,{content:o,internal:i}):e.execCommand("mceInsertContent",!1,o)}}var o,i,a,s})),f&&(e.on("keydown",function(t){if(!v(t)&&t.keyCode===i){if(!e.getBody().getElementsByTagName("hr").length)return;if(u.isCollapsed()&&0===u.getRng().startOffset){var n=u.getNode(),r=n.previousSibling;if("HR"===n.nodeName)return s.remove(n),void t.preventDefault();r&&r.nodeName&&"hr"===r.nodeName.toLowerCase()&&(s.remove(r),t.preventDefault())}}}),Range.prototype.getClientRects||e.on("mousedown",function(t){if(!v(t)&&"HTML"===t.target.nodeName){var n=e.getBody();n.blur(),ye.setEditorTimeout(e,function(){n.focus()})}}),n=function(){var t=s.getAttribs(u.getStart().cloneNode(!1));return function(){var n=u.getStart();n!==e.getBody()&&(s.setAttrib(n,"style",null),o(t,function(e){n.setAttributeNode(e.cloneNode(!0))}))}},r=function(){return!u.isCollapsed()&&s.getParent(u.getStart(),s.isBlock)!==s.getParent(u.getEnd(),s.isBlock)},e.on("keypress",function(t){var o;if(!v(t)&&(8===t.keyCode||46===t.keyCode)&&r())return o=n(),e.getDoc().execCommand("delete",!1,null),o(),t.preventDefault(),!1}),s.bind(e.getDoc(),"cut",function(t){var o;!v(t)&&r()&&(o=n(),ye.setEditorTimeout(e,function(){o()}))}),c.readonly||e.on("BeforeExecCommand MouseDown",function(){h("StyleWithCSS",!1),h("enableInlineTableEditing",!1),c.object_resizing||h("enableObjectResizing",!1)}),e.on("SetContent ExecCommand",function(e){"setcontent"!==e.type&&"mceInsertLink"!==e.command||o(s.select("a"),function(e){var t=e.parentNode,n=s.getRoot();if(t.lastChild===e){for(;t&&!s.isBlock(t);){if(t.parentNode.lastChild!==t||t===n)return;t=t.parentNode}s.add(t,"br",{"data-mce-bogus":1})}})}),e.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}"),me.mac&&e.on("keydown",function(t){!Mp.metaKeyPressed(t)||t.shiftKey||37!==t.keyCode&&39!==t.keyCode||(t.preventDefault(),e.selection.getSel().modify("move",37===t.keyCode?"backward":"forward","lineboundary"))}),b()),{refreshContentEditable:function(){},isHidden:function(){var t;return!f||e.removed?0:!(t=e.selection.getSel())||!t.rangeCount||0===t.rangeCount}}},Uy=Xo.DOM,Vy=function(e){var t;e.bindPendingEventDelegates(),e.initialized=!0,e.fire("init"),e.focus(!0),e.nodeChanged({initial:!0}),e.execCallback("init_instance_callback",e),(t=e).settings.auto_focus&&ye.setEditorTimeout(t,function(){var e;(e=!0===t.settings.auto_focus?t:t.editorManager.get(t.settings.auto_focus)).destroyed||e.focus()},100)},Hy=function(e,t){var n,r,o,i,a,s,u,c,l,f=e.settings,d=e.getElement(),m=e.getDoc();f.inline||(e.getElement().style.visibility=e.orgVisibility),t||f.content_editable||(m.open(),m.write(e.iframeHTML),m.close()),f.content_editable&&(e.on("remove",function(){var e=this.getBody();Uy.removeClass(e,"mce-content-body"),Uy.removeClass(e,"mce-edit-focus"),Uy.setAttrib(e,"contentEditable",null)}),Uy.addClass(d,"mce-content-body"),e.contentDocument=m=f.content_document||document,e.contentWindow=f.content_window||window,e.bodyElement=d,f.content_document=f.content_window=null,f.root_name=d.nodeName.toLowerCase()),(n=e.getBody()).disabled=!0,e.readonly=f.readonly,e.readonly||(e.inline&&"static"===Uy.getStyle(n,"position",!0)&&(n.style.position="relative"),n.contentEditable=e.getParam("content_editable_state",!0)),n.disabled=!1,e.editorUpload=Jm(e),e.schema=Fo(f),e.dom=new Xo(m,{keep_values:!0,url_converter:e.convertURL,url_converter_scope:e,hex_colors:f.force_hex_style_colors,class_filter:f.class_filter,update_styles:!0,root_element:e.inline?e.getBody():null,collect:f.content_editable,schema:e.schema,onSetAttrib:function(t){e.fire("SetAttrib",t)}}),e.parser=((i=bh((o=e).settings,o.schema)).addAttributeFilter("src,href,style,tabindex",function(e,t){for(var n,r,i,a=e.length,s=o.dom;a--;)if(r=(n=e[a]).attr(t),i="data-mce-"+t,!n.attributes.map[i]){if(0===r.indexOf("data:")||0===r.indexOf("blob:"))continue;"style"===t?((r=s.serializeStyle(s.parseStyle(r),n.name)).length||(r=null),n.attr(i,r),n.attr(t,r)):"tabindex"===t?(n.attr(i,r),n.attr(t,null)):n.attr(i,o.convertURL(r,t,n.name))}}),i.addNodeFilter("script",function(e){for(var t,n,r=e.length;r--;)0!==(n=(t=e[r]).attr("type")||"no/type").indexOf("mce-")&&t.attr("type","mce-"+n)}),i.addNodeFilter("#cdata",function(e){for(var t,n=e.length;n--;)(t=e[n]).type=8,t.name="#comment",t.value="[CDATA["+t.value+"]]"}),i.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(e){for(var t,n=e.length,r=o.schema.getNonEmptyElements();n--;)(t=e[n]).isEmpty(r)&&0===t.getAll("br").length&&(t.append(new fh("br",1)).shortEnded=!0)}),i),e.serializer=Nh(f,e),e.selection=vv(e.dom,e.getWin(),e.serializer,e),e.formatter=Yg(e),e.undoManager=rg(e),e._nodeChangeDispatcher=new tp(e),e._selectionOverrides=Hp(e),kh(e),Fy(e),ep(e),e.fire("PreInit"),f.browser_spellcheck||f.gecko_spellcheck||(m.body.spellcheck=!1,Uy.setAttrib(n,"spellcheck","false")),e.quirks=zy(e),e.fire("PostRender"),f.directionality&&(n.dir=f.directionality),f.nowrap&&(n.style.whiteSpace="nowrap"),f.protect&&e.on("BeforeSetContent",function(e){Ot.each(f.protect,function(t){e.content=e.content.replace(t,function(e){return"\x3c!--mce:protected "+escape(e)+"--\x3e"})})}),e.on("SetContent",function(){e.addVisual(e.getBody())}),f.padd_empty_editor&&e.on("PostProcess",function(e){e.content=e.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|<br \/>|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/,"")}),e.load({initial:!0,format:"html"}),e.startContent=e.getContent({format:"raw"}),e.on("compositionstart compositionend",function(t){e.composing="compositionstart"===t.type}),e.contentStyles.length>0&&(r="",Ot.each(e.contentStyles,function(e){r+=e+"\r\n"}),e.dom.addStyle(r)),(a=e,a.inline?Uy.styleSheetLoader:a.dom.styleSheetLoader).loadAll(e.contentCSS,function(t){Vy(e)},function(t){Vy(e)}),f.content_style&&(s=e,u=f.content_style,c=Hn.fromDom(s.getDoc().head),l=Hn.fromTag("style"),dr.set(l,"type","text/css"),ks.append(l,Hn.fromText(u)),ks.append(c,l))},qy=Xo.DOM,jy=function(e,t){var n,r,o,i,a,s,u,c=e.editorManager.translate("Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help"),l=(n=e.id,r=c,o=t.height,i=Vv(e),u=Hn.fromTag("iframe"),dr.setAll(u,i),dr.setAll(u,{id:n+"_ifr",frameBorder:"0",allowTransparency:"true",title:r}),br(u,{width:"100%",height:(a=o,s="number"==typeof a?a+"px":a,s||""),display:"block"}),u).dom();l.onload=function(){l.onload=null,e.fire("load")};var f,d,m,p,g=function(e,t){if(document.domain!==window.location.hostname&&me.ie&&me.ie<12){var n=Gm("mce");e[n]=function(){Hy(e)};var r='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinymce.get("'+e.id+'");document.write(ed.iframeHTML);document.close();ed.'+n+"(true);})()";return qy.setAttrib(t,"src",r),!0}return!1}(e,l);return e.contentAreaContainer=t.iframeContainer,e.iframeElement=l,e.iframeHTML=(p=Hv(f=e)+"<html><head>",qv(f)!==f.documentBaseUrl&&(p+='<base href="'+f.documentBaseURI.getURI()+'" />'),p+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />',d=jv(f),m=$v(f),Wv(f)&&(p+='<meta http-equiv="Content-Security-Policy" content="'+Wv(f)+'" />'),p+='</head><body id="'+d+'" class="mce-content-body '+m+'" data-id="'+f.id+'"><br></body></html>'),qy.add(t.iframeContainer,l),g},$y=function(e,t){var n=jy(e,t);t.editorContainer&&(qy.get(t.editorContainer).style.display=e.orgDisplay,e.hidden=qy.isHidden(t.editorContainer)),e.getElement().style.display="none",qy.setAttrib(e.id,"aria-hidden",!0),n||Hy(e)},Wy=Xo.DOM,Ky=function(e,t,n){var r,o,i=Im.get(n);if(r=Im.urls[n]||e.documentBaseUrl.replace(/\/$/,""),n=Ot.trim(n),i&&-1===Ot.inArray(t,n)){if(Ot.each(Im.dependencies(n),function(n){Ky(e,t,n)}),e.plugins[n])return;o=new i(e,r,e.$),e.plugins[n]=o,o.init&&(o.init(e,r),t.push(n))}},Xy=function(e){return e.replace(/^\-/,"")},Yy=function(e){return{editorContainer:e,iframeContainer:e}},Gy=function(e){var t,n,r=e.getElement();return e.inline?Yy(null):(t=r,n=Wy.create("div"),Wy.insertAfter(n,t),Yy(n))},Jy=function(e){var t,n,r,o,i,a,s,u,c,l,f,d=e.settings,m=e.getElement();return e.orgDisplay=m.style.display,tr.isString(d.theme)?(l=(o=e).settings,f=o.getElement(),i=l.width||Wy.getStyle(f,"width")||"100%",a=l.height||Wy.getStyle(f,"height")||f.offsetHeight,s=l.min_height||100,(u=/^[0-9\.]+(|px)$/i).test(""+i)&&(i=Math.max(parseInt(i,10),100)),u.test(""+a)&&(a=Math.max(parseInt(a,10),s)),c=o.theme.renderUI({targetNode:f,width:i,height:a,deltaWidth:l.delta_width,deltaHeight:l.delta_height}),l.content_editable||(a=(c.iframeHeight||a)+("number"==typeof a?c.deltaHeight||0:""))<s&&(a=s),c.height=a,c):tr.isFunction(d.theme)?(r=(t=e).getElement(),(n=t.settings.theme(t,r)).editorContainer.nodeType&&(n.editorContainer.id=n.editorContainer.id||t.id+"_parent"),n.iframeContainer&&n.iframeContainer.nodeType&&(n.iframeContainer.id=n.iframeContainer.id||t.id+"_iframecontainer"),n.height=n.iframeHeight?n.iframeHeight:r.offsetHeight,n):Gy(e)},Qy=function(e){var t,n,r,o,i,a,s=e.settings,u=e.getElement();return e.rtl=s.rtl_ui||e.editorManager.i18n.rtl,e.editorManager.i18n.setCode(s.language),s.aria_label=s.aria_label||Wy.getAttrib(u,"aria-label",e.getLang("aria.rich_text_area")),e.fire("ScriptsLoaded"),o=(n=e).settings.theme,tr.isString(o)?(n.settings.theme=Xy(o),r=Lm.get(o),n.theme=new r(n,Lm.urls[o]),n.theme.init&&n.theme.init(n,Lm.urls[o]||n.documentBaseUrl.replace(/\/$/,""),n.$)):n.theme={},i=e,a=[],Ot.each(i.settings.plugins.split(/[ ,]/),function(e){Ky(i,a,Xy(e))}),t=Jy(e),e.editorContainer=t.editorContainer?t.editorContainer:null,s.content_css&&Ot.each(Ot.explode(s.content_css),function(t){e.contentCSS.push(e.documentBaseURI.toAbsolute(t))}),s.content_editable?Hy(e):$y(e,t)},Zy=Xo.DOM,eb=function(e){return"-"===e.charAt(0)},tb=function(e,t){var n=Zo.ScriptLoader;!function(e,t,n,r){var o=t.settings,i=o.theme;if(tr.isString(i)){if(!eb(i)&&!Lm.urls.hasOwnProperty(i)){var a=o.theme_url;a?Lm.load(i,t.documentBaseURI.toAbsolute(a)):Lm.load(i,"themes/"+i+"/theme"+n+".js")}e.loadQueue(function(){Lm.waitFor(i,r)})}else r()}(n,e,t,function(){var r,o,i,a,s;r=n,(i=(o=e).settings).language&&"en"!==i.language&&!i.language_url&&(i.language_url=o.editorManager.baseURL+"/langs/"+i.language+".js"),i.language_url&&!o.editorManager.i18n.data[i.language]&&r.add(i.language_url),a=e.settings,s=t,Ot.isArray(a.plugins)&&(a.plugins=a.plugins.join(" ")),Ot.each(a.external_plugins,function(e,t){Im.load(t,e),a.plugins+=" "+t}),Ot.each(a.plugins.split(/[ ,]/),function(e){if((e=Ot.trim(e))&&!Im.urls[e])if(eb(e)){e=e.substr(1,e.length);var t=Im.dependencies(e);Ot.each(t,function(e){var t={prefix:"plugins/",resource:e,suffix:"/plugin"+s+".js"};e=Im.createUrl(t,e),Im.load(e.resource,e)})}else Im.load(e,{prefix:"plugins/",resource:e,suffix:"/plugin"+s+".js"})}),n.loadQueue(function(){e.removed||Qy(e)},e,function(t){Rm(e,t[0]),e.removed||Qy(e)})})},nb=function(e){var t=e.settings,n=e.id,r=function(){Zy.unbind(window,"ready",r),e.render()};if(Te.Event.domLoaded){if(e.getElement()&&me.contentEditable){t.inline?e.inline=!0:(e.orgVisibility=e.getElement().style.visibility,e.getElement().style.visibility="hidden");var o=e.getElement().form||Zy.getParent(n,"form");o&&(e.formElement=o,t.hidden_input&&!/TEXTAREA|INPUT/i.test(e.getElement().nodeName)&&(Zy.insertAfter(Zy.create("input",{type:"hidden",name:n}),n),e.hasHiddenInput=!0),e.formEventDelegate=function(t){e.fire(t.type,t)},Zy.bind(o,"submit reset",e.formEventDelegate),e.on("reset",function(){e.setContent(e.startContent,{format:"raw"})}),!t.submit_patch||o.submit.nodeType||o.submit.length||o._mceOldSubmit||(o._mceOldSubmit=o.submit,o.submit=function(){return e.editorManager.triggerSave(),e.setDirty(!1),o._mceOldSubmit(o)})),e.windowManager=km(e),e.notificationManager=Sm(e),"xml"===t.encoding&&e.on("GetContent",function(e){e.save&&(e.content=Zy.encode(e.content))}),t.add_form_submit_trigger&&e.on("submit",function(){e.initialized&&e.save()}),t.add_unload_trigger&&(e._beforeUnload=function(){!e.initialized||e.destroyed||e.isHidden()||e.save({format:"raw",no_events:!0,set_dirty:!1})},e.editorManager.on("BeforeUnload",e._beforeUnload)),e.editorManager.add(e),tb(e,e.suffix)}}else Zy.bind(window,"ready",r)},rb=function(e,t,n){var r=e.sidebars?e.sidebars:[];r.push({name:t,settings:n}),e.sidebars=r},ob=Ot.each,ib=Ot.trim,ab="source protocol authority userInfo user password host port relative path directory file query anchor".split(" "),sb={ftp:21,http:80,https:443,mailto:25},ub=function(e,t){var n,r,o=this;if(e=ib(e),n=(t=o.settings=t||{}).base_uri,/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e))o.source=e;else{var i=0===e.indexOf("//");0!==e.indexOf("/")||i||(e=(n&&n.protocol||"http")+"://mce_host"+e),/^[\w\-]*:?\/\//.test(e)||(r=t.base_uri?t.base_uri.path:new ub(document.location.href).directory,""==t.base_uri.protocol?e="//mce_host"+o.toAbsPath(r,e):(e=/([^#?]*)([#?]?.*)/.exec(e),e=(n&&n.protocol||"http")+"://mce_host"+o.toAbsPath(r,e[1])+e[2])),e=e.replace(/@@/g,"(mce_at)"),e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e),ob(ab,function(t,n){var r=e[n];r&&(r=r.replace(/\(mce_at\)/g,"@@")),o[t]=r}),n&&(o.protocol||(o.protocol=n.protocol),o.userInfo||(o.userInfo=n.userInfo),o.port||"mce_host"!==o.host||(o.port=n.port),o.host&&"mce_host"!==o.host||(o.host=n.host),o.source=""),i&&(o.protocol="")}};ub.prototype={setPath:function(e){e=/^(.*?)\/?(\w+)?$/.exec(e),this.path=e[0],this.directory=e[1],this.file=e[2],this.source="",this.getURI()},toRelative:function(e){var t;if("./"===e)return e;if("mce_host"!==(e=new ub(e,{base_uri:this})).host&&this.host!==e.host&&e.host||this.port!==e.port||this.protocol!==e.protocol&&""!==e.protocol)return e.getURI();var n=this.getURI(),r=e.getURI();return n===r||"/"===n.charAt(n.length-1)&&n.substr(0,n.length-1)===r?n:(t=this.toRelPath(this.path,e.path),e.query&&(t+="?"+e.query),e.anchor&&(t+="#"+e.anchor),t)},toAbsolute:function(e,t){return(e=new ub(e,{base_uri:this})).getURI(t&&this.isSameOrigin(e))},isSameOrigin:function(e){if(this.host==e.host&&this.protocol==e.protocol){if(this.port==e.port)return!0;var t=sb[this.protocol];if(t&&(this.port||t)==(e.port||t))return!0}return!1},toRelPath:function(e,t){var n,r,o,i=0,a="";if(e=(e=e.substring(0,e.lastIndexOf("/"))).split("/"),n=t.split("/"),e.length>=n.length)for(r=0,o=e.length;r<o;r++)if(r>=n.length||e[r]!==n[r]){i=r+1;break}if(e.length<n.length)for(r=0,o=n.length;r<o;r++)if(r>=e.length||e[r]!==n[r]){i=r+1;break}if(1===i)return t;for(r=0,o=e.length-(i-1);r<o;r++)a+="../";for(r=i-1,o=n.length;r<o;r++)a+=r!==i-1?"/"+n[r]:n[r];return a},toAbsPath:function(e,t){var n,r,o,i=0,a=[];for(r=/\/$/.test(t)?"/":"",e=e.split("/"),t=t.split("/"),ob(e,function(e){e&&a.push(e)}),e=a,n=t.length-1,a=[];n>=0;n--)0!==t[n].length&&"."!==t[n]&&(".."!==t[n]?i>0?i--:a.push(t[n]):i++);return 0!==(o=(n=e.length-i)<=0?a.reverse().join("/"):e.slice(0,n).join("/")+"/"+a.reverse().join("/")).indexOf("/")&&(o="/"+o),r&&o.lastIndexOf("/")!==o.length-1&&(o+=r),o},getURI:function(e){var t,n=this;return n.source&&!e||(t="",e||(n.protocol?t+=n.protocol+"://":t+="//",n.userInfo&&(t+=n.userInfo+"@"),n.host&&(t+=n.host),n.port&&(t+=":"+n.port)),n.path&&(t+=n.path),n.query&&(t+="?"+n.query),n.anchor&&(t+="#"+n.anchor),n.source=t),n.source}},ub.parseDataUri=function(e){var t,n;return e=decodeURIComponent(e).split(","),(n=/data:([^;]+)/.exec(e[0]))&&(t=n[1]),{type:t,data:e[1]}},ub.getDocumentBaseUrl=function(e){var t;return t=0!==e.protocol.indexOf("http")&&"file:"!==e.protocol?e.href:e.protocol+"//"+e.host+e.pathname,/^[^:]+:\/\/\/?[^\/]+\//.test(t)&&(t=t.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,""),/[\/\\]$/.test(t)||(t+="/")),t};var cb=Xo.DOM,lb=Ot.extend,fb=Ot.each,db=Ot.trim,mb=Ot.resolve,pb=me.ie,gb=function(e,t,n){var r,o,i,a,s,u,c,l,f,d=this;r=d.documentBaseUrl=n.documentBaseURL,o=n.baseURI,i=d,a=e,s=r,u=n.defaultSettings,c=t,f={id:a,theme:"modern",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:s,add_form_submit_trigger:!0,submit_patch:!0,add_unload_trigger:!0,convert_urls:!0,relative_urls:!0,remove_script_host:!0,object_resizing:!0,doctype:"<!DOCTYPE html>",visual:!0,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",forced_root_block:"p",hidden_input:!0,padd_empty_editor:!0,render_ui:!0,indentation:"30px",inline_styles:!0,convert_fonts_to_spans:!0,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,figcaption,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,figcaption,option,optgroup,datalist",entity_encoding:"named",url_converter:(l=i).convertURL,url_converter_scope:l,ie7_compat:!0},t=lu(ou,f,u,c),d.settings=t,ti.language=t.language||"en",ti.languageLoad=t.language_load,ti.baseURL=n.baseURL,d.id=e,d.setDirty(!1),d.plugins={},d.documentBaseURI=new ub(t.document_base_url,{base_uri:o}),d.baseURI=o,d.contentCSS=[],d.contentStyles=[],d.shortcuts=new Jd(d),d.loadedCSS={},d.editorCommands=new Od(d),d.suffix=n.suffix,d.editorManager=n,d.inline=t.inline,d.buttons={},d.menuItems={},t.cache_suffix&&(me.cacheSuffix=t.cache_suffix.replace(/^[\?\&]+/,"")),!1===t.override_viewport&&(me.overrideViewPort=!1),n.fire("SetupEditor",d),d.execCallback("setup",d),d.$=Qt.overrideDefaults(function(){return{context:d.inline?d.getBody():d.getDoc(),element:d.getBody()}})};lb(gb.prototype={render:function(){nb(this)},focus:function(e){gm(this,e)},execCallback:function(e){var t,n=this.settings[e];if(n)return this.callbackLookup&&(t=this.callbackLookup[e])&&(n=t.func,t=t.scope),"string"==typeof n&&(t=(t=n.replace(/\.\w+$/,""))?mb(t):0,n=mb(n),this.callbackLookup=this.callbackLookup||{},this.callbackLookup[e]={func:n,scope:t}),n.apply(t||this,Array.prototype.slice.call(arguments,1))},translate:function(e){if(e&&Ot.is(e,"string")){var t=this.settings.language||"en",n=this.editorManager.i18n;e=n.data[t+"."+e]||e.replace(/\{\#([^\}]+)\}/g,function(e,r){return n.data[t+"."+r]||"{#"+r+"}"})}return this.editorManager.translate(e)},getLang:function(e,t){return this.editorManager.i18n.data[(this.settings.language||"en")+"."+e]||(t!==undefined?t:"{#"+e+"}")},getParam:function(e,t,n){return mu(this,e,t,n)},nodeChanged:function(e){this._nodeChangeDispatcher.nodeChanged(e)},addButton:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),t.stateSelector&&"undefined"==typeof t.active&&(t.active=!1),t.text||t.icon||(t.icon=e),n.buttons=n.buttons,t.tooltip=t.tooltip||t.title,n.buttons[e]=t},addSidebar:function(e,t){return rb(this,e,t)},addMenuItem:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),n.menuItems=n.menuItems,n.menuItems[e]=t},addContextToolbar:function(e,t){var n,r=this;r.contextToolbars=r.contextToolbars||[],"string"==typeof e&&(n=e,e=function(e){return r.dom.is(e,n)}),r.contextToolbars.push({id:Gm("mcet"),predicate:e,items:t})},addCommand:function(e,t,n){this.editorCommands.addCommand(e,t,n)},addQueryStateHandler:function(e,t,n){this.editorCommands.addQueryStateHandler(e,t,n)},addQueryValueHandler:function(e,t,n){this.editorCommands.addQueryValueHandler(e,t,n)},addShortcut:function(e,t,n,r){this.shortcuts.add(e,t,n,r)},execCommand:function(e,t,n,r){return this.editorCommands.execCommand(e,t,n,r)},queryCommandState:function(e){return this.editorCommands.queryCommandState(e)},queryCommandValue:function(e){return this.editorCommands.queryCommandValue(e)},queryCommandSupported:function(e){return this.editorCommands.queryCommandSupported(e)},show:function(){this.hidden&&(this.hidden=!1,this.inline?this.getBody().contentEditable=!0:(cb.show(this.getContainer()),cb.hide(this.id)),this.load(),this.fire("show"))},hide:function(){var e=this,t=e.getDoc();e.hidden||(pb&&t&&!e.inline&&t.execCommand("SelectAll"),e.save(),e.inline?(e.getBody().contentEditable=!1,e===e.editorManager.focusedEditor&&(e.editorManager.focusedEditor=null)):(cb.hide(e.getContainer()),cb.setStyle(e.id,"display",e.orgDisplay)),e.hidden=!0,e.fire("hide"))},isHidden:function(){return!!this.hidden},setProgressState:function(e,t){this.fire("ProgressState",{state:e,time:t})},load:function(e){var t,n=this.getElement();return this.removed?"":n?((e=e||{}).load=!0,t=this.setContent(n.value!==undefined?n.value:n.innerHTML,e),e.element=n,e.no_events||this.fire("LoadContent",e),e.element=n=null,t):void 0},save:function(e){var t,n,r=this,o=r.getElement();if(o&&r.initialized&&!r.removed)return(e=e||{}).save=!0,e.element=o,e.content=r.getContent(e),e.no_events||r.fire("SaveContent",e),"raw"===e.format&&r.fire("RawSaveContent",e),t=e.content,/TEXTAREA|INPUT/i.test(o.nodeName)?o.value=t:(r.inline||(o.innerHTML=t),(n=cb.getParent(r.id,"form"))&&fb(n.elements,function(e){if(e.name===r.id)return e.value=t,!1})),e.element=o=null,!1!==e.set_dirty&&r.setDirty(!1),t},setContent:function(e,t){var n,r,o=this,i=o.getBody();return(t=t||{}).format=t.format||"html",t.set=!0,t.content=e,t.no_events||o.fire("BeforeSetContent",t),0===(e=t.content).length||/^\s+$/.test(e)?(r=pb&&pb<11?"":'<br data-mce-bogus="1">',"TABLE"===i.nodeName?e="<tr><td>"+r+"</td></tr>":/^(UL|OL)$/.test(i.nodeName)&&(e="<li>"+r+"</li>"),(n=o.settings.forced_root_block)&&o.schema.isValidChild(i.nodeName.toLowerCase(),n.toLowerCase())?(e=r,e=o.dom.createHTML(n,o.settings.forced_root_block_attrs,e)):pb||e||(e='<br data-mce-bogus="1">'),o.dom.setHTML(i,e),o.fire("SetContent",t)):("raw"!==t.format&&(e=zs({validate:o.validate},o.schema).serialize(o.parser.parse(e,{isRootContent:!0,insert:!0}))),t.content=db(e),o.dom.setHTML(i,t.content),t.no_events||o.fire("SetContent",t)),t.content},getContent:function(e){var t,n=this.getBody();if(this.removed)return"";if((e=e||{}).format=e.format||"html",e.get=!0,e.getInner=!0,e.no_events||this.fire("BeforeGetContent",e),"raw"===e.format)t=Ot.trim(om(this.serializer,n.innerHTML));else if("text"===e.format)t=n.innerText||n.textContent;else{if("tree"===e.format)return this.serializer.serialize(n,e);t=this.serializer.serialize(n,e)}return"text"!==e.format?e.content=db(t):e.content=t,e.no_events||this.fire("GetContent",e),e.content},insertContent:function(e,t){t&&(e=lb({content:e},t)),this.execCommand("mceInsertContent",!1,e)},isDirty:function(){return!this.isNotDirty},setDirty:function(e){var t=!this.isNotDirty;this.isNotDirty=!e,e&&e!==t&&this.fire("dirty")},setMode:function(e){Wd(this,e)},getContainer:function(){return this.container||(this.container=cb.get(this.editorContainer||this.id+"_parent")),this.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return this.targetElm||(this.targetElm=cb.get(this.id)),this.targetElm},getWin:function(){var e;return this.contentWindow||(e=this.iframeElement)&&(this.contentWindow=e.contentWindow),this.contentWindow},getDoc:function(){var e;return this.contentDocument||(e=this.getWin())&&(this.contentDocument=e.document),this.contentDocument},getBody:function(){var e=this.getDoc();return this.bodyElement||(e?e.body:null)},convertURL:function(e,t,n){var r=this.settings;return r.urlconverter_callback?this.execCallback("urlconverter_callback",e,n,!0,t):!r.convert_urls||n&&"LINK"===n.nodeName||0===e.indexOf("file:")||0===e.length?e:r.relative_urls?this.documentBaseURI.toRelative(e):e=this.documentBaseURI.toAbsolute(e,r.remove_script_host)},addVisual:function(e){var t,n=this,r=n.settings,o=n.dom;e=e||n.getBody(),n.hasVisual===undefined&&(n.hasVisual=r.visual),fb(o.select("table,a",e),function(e){var i;switch(e.nodeName){case"TABLE":return t=r.visual_table_class||"mce-item-table",void((i=o.getAttrib(e,"border"))&&"0"!==i||!n.hasVisual?o.removeClass(e,t):o.addClass(e,t));case"A":return void(o.getAttrib(e,"href",!1)||(i=o.getAttrib(e,"name")||e.id,t=r.visual_anchor_class||"mce-item-anchor",i&&n.hasVisual?o.addClass(e,t):o.removeClass(e,t)))}}),n.fire("VisualAid",{element:e,hasVisual:n.hasVisual})},remove:function(){var e=this;e.removed||(e.save(),e.removed=1,e.unbindAllNativeEvents(),e.hasHiddenInput&&cb.remove(e.getElement().nextSibling),e.inline||(pb&&pb<10&&e.getDoc().execCommand("SelectAll",!1,null),cb.setStyle(e.id,"display",e.orgDisplay),e.getBody().onload=null),e.fire("remove"),e.editorManager.remove(e),cb.remove(e.getContainer()),e._selectionOverrides.destroy(),e.editorUpload.destroy(),e.destroy())},destroy:function(e){var t,n=this;n.destroyed||(e||n.removed?(e||(n.editorManager.off("beforeunload",n._beforeUnload),n.theme&&n.theme.destroy&&n.theme.destroy(),n.selection.destroy(),n.dom.destroy()),(t=n.formElement)&&(t._mceOldSubmit&&(t.submit=t._mceOldSubmit,t._mceOldSubmit=null),cb.unbind(t,"submit reset",n.formEventDelegate)),n.contentAreaContainer=n.formElement=n.container=n.editorContainer=null,n.bodyElement=n.contentDocument=n.contentWindow=null,n.iframeElement=n.targetElm=null,n.selection&&(n.selection=n.selection.win=n.selection.dom=n.selection.dom.doc=null),n.destroyed=1):n.remove())},uploadImages:function(e){return this.editorUpload.uploadImages(e)},_scanForImages:function(){return this.editorUpload.scanForImages()}},qd);var hb,vb,yb,bb={isEditorUIElement:function(e){return-1!==e.className.toString().indexOf("mce-")}},Cb=function(e,t){var n,r,o=Un.detect().browser;o.isIE()||o.isEdge()?(r=e).on("focusout",function(){Sd(r)}):(n=t,e.on("mouseup touchend",function(e){n.throttle()})),e.on("keyup nodechange",function(t){var n;"nodechange"===(n=t).type&&n.selectionChange||Sd(e)})},xb=function(e){var t,n,r,o=Tp(function(){Sd(e)},0);e.inline&&(t=e,n=o,r=function(){n.throttle()},Xo.DOM.bind(document,"mouseup",r),t.on("remove",function(){Xo.DOM.unbind(document,"mouseup",r)})),e.on("init",function(){Cb(e,o)}),e.on("remove",function(){o.cancel()})},wb=Xo.DOM,Nb=function(e){return bb.isEditorUIElement(e)},Eb=function(e,t){var n=e?e.settings.custom_ui_selector:"";return null!==wb.getParent(t,function(t){return Nb(t)||!!n&&e.dom.is(t,n)})},Sb=function(e,t){var n=t.editor;xb(n),n.on("focusin",function(){var t=e.focusedEditor;t!==this&&(t&&t.fire("blur",{focusedEditor:this}),e.setActive(this),e.focusedEditor=this,this.fire("focus",{blurredEditor:t}),this.focus(!0))}),n.on("focusout",function(){var t=this;ye.setEditorTimeout(t,function(){var n=e.focusedEditor;Eb(t,function(){try{return document.activeElement}catch(e){return document.body}}())||n!==t||(t.fire("blur",{focusedEditor:null}),e.focusedEditor=null)})}),hb||(hb=function(t){var n,r=e.activeEditor;n=t.target,r&&n.ownerDocument===document&&(n===document.body||Eb(r,n)||e.focusedEditor!==r||(r.fire("blur",{focusedEditor:null}),e.focusedEditor=null))},wb.bind(document,"focusin",hb))},kb=function(e,t){e.focusedEditor===t.editor&&(e.focusedEditor=null),e.activeEditor||(wb.unbind(document,"focusin",hb),hb=null)},Tb=function(e){e.on("AddEditor",y.curry(Sb,e)),e.on("RemoveEditor",y.curry(kb,e))},Ab={},_b="en",Bb={setCode:function(e){e&&(_b=e,this.rtl=!!this.data[e]&&"rtl"===this.data[e]._dir)},getCode:function(){return _b},rtl:!1,add:function(e,t){var n=Ab[e];for(var r in n||(Ab[e]=n={}),t)n[r]=t[r];this.setCode(e)},translate:function(e){var t=Ab[_b]||{},n=function(e){return Ot.is(e,"function")?Object.prototype.toString.call(e):r(e)?"":""+e},r=function(e){return""===e||null===e||Ot.is(e,"undefined")},o=function(e){return e=n(e),Ot.hasOwn(t,e)?n(t[e]):e};if(r(e))return"";if(Ot.is(e,"object")&&Ot.hasOwn(e,"raw"))return n(e.raw);if(Ot.is(e,"array")){var i=e.slice(1);e=o(e[0]).replace(/\{([0-9]+)\}/g,function(e,t){return Ot.hasOwn(i,t)?n(i[t]):e})}return o(e).replace(/{context:\w+}$/,"")},data:Ab},Rb=Xo.DOM,Db=Ot.explode,Ob=Ot.each,Pb=Ot.extend,Ib=0,Lb=!1,Mb=[],Fb=[],zb=function(e){Ob(yb.get(),function(t){"scroll"===e.type?t.fire("ScrollWindow",e):t.fire("ResizeWindow",e)})},Ub=function(e){e!==Lb&&(e?Qt(window).on("resize scroll",zb):Qt(window).off("resize scroll",zb),Lb=e)},Vb=function(e){var t=Fb;delete Mb[e.id];for(var n=0;n<Mb.length;n++)if(Mb[n]===e){Mb.splice(n,1);break}return Fb=M.filter(Fb,function(t){return e!==t}),yb.activeEditor===e&&(yb.activeEditor=Fb.length>0?Fb[0]:null),yb.focusedEditor===e&&(yb.focusedEditor=null),t.length!==Fb.length};Pb(yb={defaultSettings:{},$:Qt,majorVersion:"4",minorVersion:"7.5",releaseDate:"2018-01-22",editors:Mb,i18n:Bb,activeEditor:null,settings:{},setup:function(){var e,t,n,r,o="";if(t=ub.getDocumentBaseUrl(document.location),/^[^:]+:\/\/\/?[^\/]+\//.test(t)&&(t=t.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,""),/[\/\\]$/.test(t)||(t+="/")),n=window.tinymce||window.tinyMCEPreInit)e=n.base||n.baseURL,o=n.suffix;else{for(var i=document.getElementsByTagName("script"),a=0;a<i.length;a++){var s=(r=i[a].src).substring(r.lastIndexOf("/"));if(/tinymce(\.full|\.jquery|)(\.min|\.dev|)\.js/.test(r)){-1!==s.indexOf(".min")&&(o=".min"),e=r.substring(0,r.lastIndexOf("/"));break}}!e&&document.currentScript&&(-1!==(r=document.currentScript.src).indexOf(".min")&&(o=".min"),e=r.substring(0,r.lastIndexOf("/")))}this.baseURL=new ub(t).toAbsolute(e),this.documentBaseURL=t,this.baseURI=new ub(this.baseURL),this.suffix=o,Tb(this)},overrideDefaults:function(e){var t,n;(t=e.base_url)&&(this.baseURL=new ub(this.documentBaseURL).toAbsolute(t.replace(/\/+$/,"")),this.baseURI=new ub(this.baseURL)),n=e.suffix,e.suffix&&(this.suffix=n),this.defaultSettings=e;var r=e.plugin_base_urls;for(var o in r)ti.PluginManager.urls[o]=r[o]},init:function(e){var t,n,r=this;n=Ot.makeMap("area base basefont br col frame hr img input isindex link meta param embed source wbr track colgroup option tbody tfoot thead tr script noscript style textarea video audio iframe object menu"," ");var o=function(e){var t=e.id;return t||(t=(t=e.name)&&!Rb.get(t)?e.name:Rb.uniqueId(),e.setAttribute("id",t)),t},i=function(e,t){return t.constructor===RegExp?t.test(e.className):Rb.hasClass(e,t)},a=function(e){t=e},s=function(){var t,u=0,c=[],l=function(e,n,o){var i=new gb(e,n,r);c.push(i),i.on("init",function(){++u===t.length&&a(c)}),i.targetElm=i.targetElm||o,i.render()};Rb.unbind(window,"ready",s),function(t){var n=e[t];n&&n.apply(r,Array.prototype.slice.call(arguments,2))}("onpageload"),t=Qt.unique(function(e){var t,n=[];if(me.ie&&me.ie<11)return Pm("TinyMCE does not support the browser you are using. For a list of supported browsers please see: https://www.tinymce.com/docs/get-started/system-requirements/"),[];if(e.types)return Ob(e.types,function(e){n=n.concat(Rb.select(e.selector))}),n;if(e.selector)return Rb.select(e.selector);if(e.target)return[e.target];switch(e.mode){case"exact":(t=e.elements||"").length>0&&Ob(Db(t),function(e){var t;(t=Rb.get(e))?n.push(t):Ob(document.forms,function(t){Ob(t.elements,function(t){t.name===e&&(e="mce_editor_"+Ib++,Rb.setAttrib(t,"id",e),n.push(t))})})});break;case"textareas":case"specific_textareas":Ob(Rb.select("textarea"),function(t){e.editor_deselector&&i(t,e.editor_deselector)||e.editor_selector&&!i(t,e.editor_selector)||n.push(t)})}return n}(e)),e.types?Ob(e.types,function(n){Ot.each(t,function(t){return!Rb.is(t,n.selector)||(l(o(t),Pb({},e,n),t),!1)})}):(Ot.each(t,function(e){var t;(t=r.get(e.id))&&t.initialized&&!(t.getContainer()||t.getBody()).parentNode&&(Vb(t),t.unbindAllNativeEvents(),t.destroy(!0),t.removed=!0,t=null)}),0===(t=Ot.grep(t,function(e){return!r.get(e.id)})).length?a([]):Ob(t,function(t){var r;r=t,e.inline&&r.tagName.toLowerCase()in n?Pm("Could not initialize inline editor on invalid inline target element",t):l(o(t),e,t)}))};return r.settings=e,Rb.bind(window,"ready",s),new pe(function(e){t?e(t):a=function(t){e(t)}})},get:function(e){return 0===arguments.length?Fb.slice(0):tr.isString(e)?M.find(Fb,function(t){return t.id===e}).getOr(null):tr.isNumber(e)&&Fb[e]?Fb[e]:null},add:function(e){var t=this;return Mb[e.id]===e?e:(null===t.get(e.id)&&("length"!==e.id&&(Mb[e.id]=e),Mb.push(e),Fb.push(e)),Ub(!0),t.activeEditor=e,t.fire("AddEditor",{editor:e}),vb||(vb=function(){t.fire("BeforeUnload")},Rb.bind(window,"beforeunload",vb)),e)},createEditor:function(e,t){return this.add(new gb(e,t,this))},remove:function(e){var t,n,r=this;if(e)return tr.isString(e)?(e=e.selector||e,void Ob(Rb.select(e),function(e){(n=r.get(e.id))&&r.remove(n)})):(n=e,tr.isNull(r.get(n.id))?null:(Vb(n)&&r.fire("RemoveEditor",{editor:n}),0===Fb.length&&Rb.unbind(window,"beforeunload",vb),n.remove(),Ub(Fb.length>0),n));for(t=Fb.length-1;t>=0;t--)r.remove(Fb[t])},execCommand:function(e,t,n){var r=this.get(n);switch(e){case"mceAddEditor":return this.get(n)||new gb(n,this.settings,this).render(),!0;case"mceRemoveEditor":return r&&r.remove(),!0;case"mceToggleEditor":return r?(r.isHidden()?r.show():r.hide(),!0):(this.execCommand("mceAddEditor",0,n),!0)}return!!this.activeEditor&&this.activeEditor.execCommand(e,t,n)},triggerSave:function(){Ob(Fb,function(e){e.save()})},addI18n:function(e,t){Bb.add(e,t)},translate:function(e){return Bb.translate(e)},setActive:function(e){var t=this.activeEditor;this.activeEditor!==e&&(t&&t.fire("deactivate",{relatedTarget:e}),e.fire("activate",{relatedTarget:t})),this.activeEditor=e}},Fd),yb.setup();var Hb,qb=yb;function jb(e){return{walk:function(t,n){return cg.walk(e,t,n)},split:sl.split,normalize:function(t){return Jf.normalize(e,t).fold(y.constant(!1),function(e){return t.setStart(e.startContainer,e.startOffset),t.setEnd(e.endContainer,e.endOffset),!0})}}}(Hb=jb||(jb={})).compareRanges=qf,Hb.getCaretRangeFromPoint=Ih,Hb.getSelectedNode=Fi,Hb.getNode=zi;var $b,Wb,Kb=jb,Xb=Math.min,Yb=Math.max,Gb=Math.round,Jb=function(e,t,n){var r,o,i,a,s,u;return r=t.x,o=t.y,i=e.w,a=e.h,s=t.w,u=t.h,"b"===(n=(n||"").split(""))[0]&&(o+=u),"r"===n[1]&&(r+=s),"c"===n[0]&&(o+=Gb(u/2)),"c"===n[1]&&(r+=Gb(s/2)),"b"===n[3]&&(o-=a),"r"===n[4]&&(r-=i),"c"===n[3]&&(o-=Gb(a/2)),"c"===n[4]&&(r-=Gb(i/2)),Qb(r,o,i,a)},Qb=function(e,t,n,r){return{x:e,y:t,w:n,h:r}},Zb={inflate:function(e,t,n){return Qb(e.x-t,e.y-n,e.w+2*t,e.h+2*n)},relativePosition:Jb,findBestRelativePosition:function(e,t,n,r){var o,i;for(i=0;i<r.length;i++)if((o=Jb(e,t,r[i])).x>=n.x&&o.x+o.w<=n.w+n.x&&o.y>=n.y&&o.y+o.h<=n.h+n.y)return r[i];return null},intersect:function(e,t){var n,r,o,i;return n=Yb(e.x,t.x),r=Yb(e.y,t.y),o=Xb(e.x+e.w,t.x+t.w),i=Xb(e.y+e.h,t.y+t.h),o-n<0||i-r<0?null:Qb(n,r,o-n,i-r)},clamp:function(e,t,n){var r,o,i,a,s,u,c,l,f,d;return s=e.x,u=e.y,c=e.x+e.w,l=e.y+e.h,f=t.x+t.w,d=t.y+t.h,r=Yb(0,t.x-s),o=Yb(0,t.y-u),i=Yb(0,c-f),a=Yb(0,l-d),s+=r,u+=o,n&&(c+=r,l+=o,s-=i,u-=a),Qb(s,u,(c-=i)-s,(l-=a)-u)},create:Qb,fromClientRect:function(e){return Qb(e.left,e.top,e.width,e.height)}},eC={},tC={add:function(e,t){eC[e.toLowerCase()]=t},has:function(e){return!!eC[e.toLowerCase()]},get:function(e){var t=e.toLowerCase(),n=eC.hasOwnProperty(t)?eC[t]:null;if(null===n)throw new Error("Could not find module for type: "+e);return n},create:function(e,t){var n;if("string"==typeof e?(t=t||{}).type=e:e=(t=e).type,e=e.toLowerCase(),!(n=eC[e]))throw new Error("Could not find control by type: "+e);return(n=new n(t)).type=e,n}},nC=Ot.each,rC=Ot.extend,oC=function(){};oC.extend=$b=function(e){var t,n,r,o=this.prototype,i=function(){var e,t,n;if(!Wb&&(this.init&&this.init.apply(this,arguments),t=this.Mixins))for(e=t.length;e--;)(n=t[e]).init&&n.init.apply(this,arguments)},a=function(){return this},s=function(e,t){return function(){var n,r=this._super;return this._super=o[e],n=t.apply(this,arguments),this._super=r,n}};for(n in Wb=!0,t=new this,Wb=!1,e.Mixins&&(nC(e.Mixins,function(t){for(var n in t)"init"!==n&&(e[n]=t[n])}),o.Mixins&&(e.Mixins=o.Mixins.concat(e.Mixins))),e.Methods&&nC(e.Methods.split(","),function(t){e[t]=a}),e.Properties&&nC(e.Properties.split(","),function(t){var n="_"+t;e[t]=function(e){return e!==undefined?(this[n]=e,this):this[n]}}),e.Statics&&nC(e.Statics,function(e,t){i[t]=e}),e.Defaults&&o.Defaults&&(e.Defaults=rC({},o.Defaults,e.Defaults)),e)"function"==typeof(r=e[n])&&o[n]?t[n]=s(n,r):t[n]=r;return i.prototype=t,i.constructor=i,i.extend=$b,i};var iC=Math.min,aC=Math.max,sC=Math.round,uC=function(e,t){var n,r,o,i;if(t=t||'"',null===e)return"null";if("string"==(o=typeof e))return r="\bb\tt\nn\ff\rr\"\"''\\\\",t+e.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(e,o){return'"'===t&&"'"===e?e:(n=r.indexOf(o))+1?"\\"+r.charAt(n+1):(e=o.charCodeAt().toString(16),"\\u"+"0000".substring(e.length)+e)})+t;if("object"===o){if(e.hasOwnProperty&&"[object Array]"===Object.prototype.toString.call(e)){for(n=0,r="[";n<e.length;n++)r+=(n>0?",":"")+uC(e[n],t);return r+"]"}for(i in r="{",e)e.hasOwnProperty(i)&&(r+="function"!=typeof e[i]?(r.length>1?","+t:t)+i+t+":"+uC(e[i],t):"");return r+"}"}return""+e},cC={serialize:uC,parse:function(e){try{return window[String.fromCharCode(101)+"val"]("("+e+")")}catch(t){}}},lC={callbacks:{},count:0,send:function(e){var t=this,n=Xo.DOM,r=e.count!==undefined?e.count:t.count,o="tinymce_jsonp_"+r;t.callbacks[r]=function(i){n.remove(o),delete t.callbacks[r],e.callback(i)},n.add(n.doc.body,"script",{id:o,src:e.url,type:"text/javascript"}),t.count++}},fC={send:function(e){var t,n=0,r=function(){!e.async||4===t.readyState||n++>1e4?(e.success&&n<1e4&&200===t.status?e.success.call(e.success_scope,""+t.responseText,t,e):e.error&&e.error.call(e.error_scope,n>1e4?"TIMED_OUT":"GENERAL",t,e),t=null):setTimeout(r,10)};if(e.scope=e.scope||this,e.success_scope=e.success_scope||e.scope,e.error_scope=e.error_scope||e.scope,e.async=!1!==e.async,e.data=e.data||"",fC.fire("beforeInitialize",{settings:e}),t=new Mm){if(t.overrideMimeType&&t.overrideMimeType(e.content_type),t.open(e.type||(e.data?"POST":"GET"),e.url,e.async),e.crossDomain&&(t.withCredentials=!0),e.content_type&&t.setRequestHeader("Content-Type",e.content_type),e.requestheaders&&Ot.each(e.requestheaders,function(e){t.setRequestHeader(e.key,e.value)}),t.setRequestHeader("X-Requested-With","XMLHttpRequest"),(t=fC.fire("beforeSend",{xhr:t,settings:e}).xhr).send(e.data),!e.async)return r();setTimeout(r,10)}}};Ot.extend(fC,Fd);var dC=Ot.extend,mC=function(e){this.settings=dC({},e),this.count=0};mC.sendRPC=function(e){return(new mC).send(e)},mC.prototype={send:function(e){var t=e.error,n=e.success;(e=dC(this.settings,e)).success=function(r,o){void 0===(r=cC.parse(r))&&(r={error:"JSON Parse error."}),r.error?t.call(e.error_scope||e.scope,r.error,o):n.call(e.success_scope||e.scope,r.result)},e.error=function(n,r){t&&t.call(e.error_scope||e.scope,n,r)},e.data=cC.serialize({id:e.id||"c"+this.count++,method:e.method,params:e.params}),e.content_type="application/json",fC.send(e)}};var pC,gC=window.localStorage,hC=qb,vC={geom:{Rect:Zb},util:{Promise:pe,Delay:ye,Tools:Ot,VK:Mp,URI:ub,Class:oC,EventDispatcher:Id,Observable:Fd,I18n:Bb,XHR:fC,JSON:cC,JSONRequest:mC,JSONP:lC,LocalStorage:gC,Color:function(e){var t={},n=0,r=0,o=0,i=function(e){var i;return"object"==typeof e?"r"in e?(n=e.r,r=e.g,o=e.b):"v"in e&&function(e,t,i){var a,s,u,c;if(e=(parseInt(e,10)||0)%360,t=parseInt(t,10)/100,i=parseInt(i,10)/100,t=aC(0,iC(t,1)),i=aC(0,iC(i,1)),0!==t){switch(a=e/60,u=(s=i*t)*(1-Math.abs(a%2-1)),c=i-s,Math.floor(a)){case 0:n=s,r=u,o=0;break;case 1:n=u,r=s,o=0;break;case 2:n=0,r=s,o=u;break;case 3:n=0,r=u,o=s;break;case 4:n=u,r=0,o=s;break;case 5:n=s,r=0,o=u;break;default:n=r=o=0}n=sC(255*(n+c)),r=sC(255*(r+c)),o=sC(255*(o+c))}else n=r=o=sC(255*i)}(e.h,e.s,e.v):(i=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)[^\)]*\)/gi.exec(e))?(n=parseInt(i[1],10),r=parseInt(i[2],10),o=parseInt(i[3],10)):(i=/#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(e))?(n=parseInt(i[1],16),r=parseInt(i[2],16),o=parseInt(i[3],16)):(i=/#([0-F])([0-F])([0-F])/gi.exec(e))&&(n=parseInt(i[1]+i[1],16),r=parseInt(i[2]+i[2],16),o=parseInt(i[3]+i[3],16)),n=n<0?0:n>255?255:n,r=r<0?0:r>255?255:r,o=o<0?0:o>255?255:o,t};return e&&i(e),t.toRgb=function(){return{r:n,g:r,b:o}},t.toHsv=function(){return e=n,t=r,i=o,s=0,(u=iC(e/=255,iC(t/=255,i/=255)))===(c=aC(e,aC(t,i)))?{h:0,s:0,v:100*(s=u)}:(a=(c-u)/c,s=c,{h:sC(60*((e===u?3:i===u?1:5)-(e===u?t-i:i===u?e-t:i-e)/(c-u))),s:sC(100*a),v:sC(100*s)});var e,t,i,a,s,u,c},t.toHex=function(){var e=function(e){return(e=parseInt(e,10).toString(16)).length>1?e:"0"+e};return"#"+e(n)+e(r)+e(o)},t.parse=i,t}},dom:{EventUtils:Te,Sizzle:lt,DomQuery:Qt,TreeWalker:to,DOMUtils:Xo,ScriptLoader:Zo,RangeUtils:Kb,Serializer:Nh,ControlSelection:Rh,BookmarkManager:Ah,Selection:vv,Event:Te.Event},html:{Styles:zo,Entities:Ao,Node:fh,Schema:Fo,SaxParser:em,DomParser:bh,Writer:Fs,Serializer:zs},ui:{Factory:tC},Env:me,AddOnManager:ti,Formatter:Yg,UndoManager:rg,EditorCommands:Od,WindowManager:km,NotificationManager:Sm,EditorObservable:qd,Shortcuts:Jd,Editor:gb,FocusManager:bb,EditorManager:qb,DOM:Xo.DOM,ScriptLoader:Zo.ScriptLoader,PluginManager:ti.PluginManager,ThemeManager:ti.ThemeManager,trim:Ot.trim,isArray:Ot.isArray,is:Ot.is,toArray:Ot.toArray,makeMap:Ot.makeMap,each:Ot.each,map:Ot.map,grep:Ot.grep,inArray:Ot.inArray,extend:Ot.extend,create:Ot.create,walk:Ot.walk,createNS:Ot.createNS,resolve:Ot.resolve,explode:Ot.explode,_addCacheSuffix:Ot._addCacheSuffix,isOpera:me.opera,isWebKit:me.webkit,isIE:me.ie,isGecko:me.gecko,isMac:me.mac};hC=Ot.extend(hC,vC),pC=hC,window.tinymce=pC,window.tinyMCE=pC}();!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),n="[-'\\.\u2018\u2019\u2024\ufe52\uff07\uff0e]",t="[:\xb7\xb7\u05f4\u2027\ufe13\ufe55\uff1a]",r="[+*/,;;\u0589\u060c\u060d\u066c\u07f8\u2044\ufe10\ufe14\ufe50\ufe54\uff0c\uff1b]",E="[0-9\u0660-\u0669\u066b\u06f0-\u06f9\u07c0-\u07c9\u0966-\u096f\u09e6-\u09ef\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0be6-\u0bef\u0c66-\u0c6f\u0ce6-\u0cef\u0d66-\u0d6f\u0e50-\u0e59\u0ed0-\u0ed9\u0f20-\u0f29\u1040-\u1049\u1090-\u1099\u17e0-\u17e9\u1810-\u1819\u1946-\u194f\u19d0-\u19d9\u1a80-\u1a89\u1a90-\u1a99\u1b50-\u1b59\u1bb0-\u1bb9\u1c40-\u1c49\u1c50-\u1c59\ua620-\ua629\ua8d0-\ua8d9\ua900-\ua909\ua9d0-\ua9d9\uaa50-\uaa59\uabf0-\uabf9]",T="\\r",u="\\n",i="[\x0B\f\x85\u2028\u2029]",o="[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0c01-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d02\u0d03\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f\u109a-\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b6-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u192b\u1930-\u193b\u19b0-\u19c0\u19c8\u19c9\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f\u1b00-\u1b04\u1b34-\u1b44\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1baa\u1be6-\u1bf3\u1c24-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf2\u1dc0-\u1de6\u1dfc-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa7b\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe3-\uabea\uabec\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]",c="[\xad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200e\u200f\u202a-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb]",a="[\u3031-\u3035\u309b\u309c\u30a0-\u30fa\u30fc-\u30ff\u31f0-\u31ff\u32d0-\u32fe\u3300-\u3357\uff66-\uff9d]",R="[=_\u203f\u2040\u2054\ufe33\ufe34\ufe4d-\ufe4f\uff3f\u2200-\u22ff<>]",f="[!-#%-*,-\\/:;?@\\[-\\]_{}\xa1\xab\xb7\xbb\xbf;\xb7\u055a-\u055f\u0589\u058a\u05be\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f3a-\u0f3d\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1361-\u1368\u1400\u166d\u166e\u169b\u169c\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cd3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205e\u207d\u207e\u208d\u208e\u3008\u3009\u2768-\u2775\u27c5\u27c6\u27e6-\u27ef\u2983-\u2998\u29d8-\u29db\u29fc\u29fd\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00-\u2e2e\u2e30\u2e31\u3001-\u3003\u3008-\u3011\u3014-\u301f\u3030\u303d\u30a0\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uabeb\ufd3e\ufd3f\ufe10-\ufe19\ufe30-\ufe52\ufe54-\ufe61\ufe63\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff0a\uff0c-\uff0f\uff1a\uff1b\uff1f\uff20\uff3b-\uff3d\uff3f\uff5b\uff5d\uff5f-\uff65]",A={characterIndices:{ALETTER:0,MIDNUMLET:1,MIDLETTER:2,MIDNUM:3,NUMERIC:4,CR:5,LF:6,NEWLINE:7,EXTEND:8,FORMAT:9,KATAKANA:10,EXTENDNUMLET:11,AT:12,OTHER:13},SETS:[new RegExp("[A-Za-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f3\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u10a0-\u10c5\u10d0-\u10fa\u10fc\u1100-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1a00-\u1a16\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bc0-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u24b6-\u24e9\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2d00-\u2d25\u2d30-\u2d65\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005\u303b\u303c\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790\ua791\ua7a0-\ua7a9\ua7fa-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uffa0-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]"),new RegExp(n),new RegExp(t),new RegExp(r),new RegExp(E),new RegExp(T),new RegExp(u),new RegExp(i),new RegExp(o),new RegExp(c),new RegExp(a),new RegExp(R),new RegExp("@")],EMPTY_STRING:"",PUNCTUATION:new RegExp("^"+f+"$"),WHITESPACE:/^\s+$/},N=function(e,n,t){var r,E;if(!e)return 0;if(t=t||e,e.length!==undefined){for(r=0,E=e.length;r<E;r++)if(!1===n.call(t,e[r],r,e))return 0}else for(r in e)if(e.hasOwnProperty(r)&&!1===n.call(t,e[r],r,e))return 0;return 1},s=function(e,n){var t=[];return N(e,function(r,E){t.push(n(r,E,e))}),t},l=A.SETS,M=A.characterIndices.OTHER,d=function(e){var n,t,r=M,E=l.length;for(n=0;n<E;++n)if((t=l[n])&&t.test(e)){r=n;break}return r},I=function(e){var n,t,r=(n=d,t={},function(e){if(t[e])return t[e];var r=n(e);return t[e]=r,r});return s(e.split(""),r)},L=A.characterIndices,g=function(e,n){var t,r,E=e[n],T=e[n+1];return!(n<0||n>e.length-1&&0!==n||E===L.ALETTER&&T===L.ALETTER||(r=e[n+2],E===L.ALETTER&&(T===L.MIDLETTER||T===L.MIDNUMLET||T===L.AT)&&r===L.ALETTER||(t=e[n-1],(E===L.MIDLETTER||E===L.MIDNUMLET||T===L.AT)&&T===L.ALETTER&&t===L.ALETTER||!(E!==L.NUMERIC&&E!==L.ALETTER||T!==L.NUMERIC&&T!==L.ALETTER)||(E===L.MIDNUM||E===L.MIDNUMLET)&&T===L.NUMERIC&&t===L.NUMERIC||E===L.NUMERIC&&(T===L.MIDNUM||T===L.MIDNUMLET)&&r===L.NUMERIC||E===L.EXTEND||E===L.FORMAT||t===L.EXTEND||t===L.FORMAT||T===L.EXTEND||T===L.FORMAT||E===L.CR&&T===L.LF||E!==L.NEWLINE&&E!==L.CR&&E!==L.LF&&T!==L.NEWLINE&&T!==L.CR&&T!==L.LF&&(E===L.KATAKANA&&T===L.KATAKANA||T===L.EXTENDNUMLET&&(E===L.ALETTER||E===L.NUMERIC||E===L.KATAKANA||E===L.EXTENDNUMLET)||E===L.EXTENDNUMLET&&(T===L.ALETTER||T===L.NUMERIC||T===L.KATAKANA)||E===L.AT))))},p=A.EMPTY_STRING,U=A.WHITESPACE,w=A.PUNCTUATION,h=function(e,n,t){var r=function(e,n){var t;for(t=n;t<e.length;++t){var r=e.charAt(t);if(U.test(r))break}return t}(n,t+1),E=n.substring(t+1,r);return"://"===E.substr(0,3)?{word:e+E,index:r}:{word:e,index:t}},v=function(e,n){return function(e,n){var t,r,E,T,u=0,i=I(e),o=i.length,c=[],a=[];for(n||(n={}),n.ignoreCase&&(e=e.toLowerCase()),r=n.includePunctuation,E=n.includeWhitespace;u<o;++u)if(t=e.charAt(u),c.push(t),g(i,u)){if((c=c.join(p))&&(E||!U.test(c))&&(r||!w.test(c)))if("http"===(T=c)||"https"===T){var R=h(c,e,u);a.push(R.word),u=R.index}else a.push(c);c=[]}return a}(e.replace(/\ufeff/g,""),n)},x=function(e){return v((n=e,n.removed?"":n.getBody().innerText)).length;var n},C=function(e){return{getCount:function(){return x(e)}}},D=tinymce.util.Tools.resolve("tinymce.util.Delay"),m=tinymce.util.Tools.resolve("tinymce.util.I18n"),y=function(e){var n=function(e){return m.translate(["{0} words",x(e)])},t=function(){e.theme.panel.find("#wordcount").text(n(e))};e.on("init",function(){var r=e.theme.panel&&e.theme.panel.find("#statusbar")[0],E=D.debounce(t,300);r&&D.setEditorTimeout(e,function(){r.insert({type:"label",name:"wordcount",text:n(e),classes:"wordcount",disabled:e.settings.readonly},0),e.on("setcontent beforeaddundo undo redo keyup",E)},0)})};e.add("wordcount",function(e){return y(e),C(e)})}();!function(){"use strict";var n,e,t,r,o=function(n){var e=n,t=function(){return e};return{get:t,set:function(n){e=n},clone:function(){return o(t())}}},u=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=function(n){return{isEnabled:function(){return n.get()}}},c=function(n,e){return n.fire("VisualChars",{state:e})},a={"\xa0":"nbsp","\xad":"shy"},f=function(n,e){var t,r="";for(t in n)r+=t;return new RegExp("["+r+"]",e?"g":"")},l=function(n){var e,t="";for(e in n)t&&(t+=","),t+="span.mce-"+n[e];return t},s={charMap:a,regExp:f(a),regExpGlobal:f(a,!0),selector:l(a),charMapToRegExp:f,charMapToSelector:l},d=function(n){return function(){return n}},m={noop:function(){},noarg:function(n){return function(){return n()}},compose:function(n,e){return function(){return n(e.apply(null,arguments))}},constant:d,identity:function(n){return n},tripleEquals:function(n,e){return n===e},curry:function(n){for(var e=new Array(arguments.length-1),t=1;t<arguments.length;t++)e[t-1]=arguments[t];return function(){for(var t=new Array(arguments.length),r=0;r<t.length;r++)t[r]=arguments[r];var o=e.concat(t);return n.apply(null,o)}},not:function(n){return function(){return!n.apply(null,arguments)}},die:function(n){return function(){throw new Error(n)}},apply:function(n){return n()},call:function(n){n()},never:d(!1),always:d(!0)},p=m.never,h=m.always,v=function(){return g},g=(r={fold:function(n,e){return n()},is:p,isSome:p,isNone:h,getOr:t=function(n){return n},getOrThunk:e=function(n){return n()},getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},or:t,orThunk:e,map:v,ap:v,each:function(){},bind:v,flatten:v,exists:p,forall:h,filter:v,equals:n=function(n){return n.isNone()},equals_:n,toArray:function(){return[]},toString:m.constant("none()")},Object.freeze&&Object.freeze(r),r),y=function(n){var e=function(){return n},t=function(){return o},r=function(e){return e(n)},o={fold:function(e,t){return t(n)},is:function(e){return n===e},isSome:h,isNone:p,getOr:e,getOrThunk:e,getOrDie:e,or:t,orThunk:t,map:function(e){return y(e(n))},ap:function(e){return e.fold(v,function(e){return y(e(n))})},each:function(e){e(n)},bind:r,flatten:e,exists:r,forall:r,filter:function(e){return e(n)?o:g},equals:function(e){return e.is(n)},equals_:function(e,t){return e.fold(p,function(e){return t(n,e)})},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return o},T={some:y,none:v,from:function(n){return null===n||n===undefined?g:y(n)}},w=(Array.prototype.indexOf,undefined,function(n,e){for(var t=n.length,r=new Array(t),o=0;o<t;o++){var u=n[o];r[o]=e(u,o,n)}return r}),x=function(n,e){for(var t=0,r=n.length;t<r;t++)e(n[t],t,n)},E=(Array.prototype.push,Array.prototype.slice,w),b=x,k=function(n){if(null===n||n===undefined)throw new Error("Node cannot be null or undefined");return{dom:m.constant(n)}},N={fromHtml:function(n,e){var t=(e||document).createElement("div");if(t.innerHTML=n,!t.hasChildNodes()||t.childNodes.length>1)throw console.error("HTML does not have a single root node",n),"HTML must have a single root node";return k(t.childNodes[0])},fromTag:function(n,e){var t=(e||document).createElement(n);return k(t)},fromText:function(n,e){var t=(e||document).createTextNode(n);return k(t)},fromDom:k,fromPoint:function(n,e,t){return T.from(n.dom().elementFromPoint(e,t)).map(k)}},C=8,M=9,D=3,O=function(n){return n.dom().nodeName.toLowerCase()},A=function(n){return n.dom().nodeType},S=function(n){return function(e){return A(e)===n}},B=S(1),P=S(D),V=S(M),q={name:O,type:A,value:function(n){return n.dom().nodeValue},isElement:B,isText:P,isDocument:V,isComment:function(n){return A(n)===C||"#comment"===O(n)}},H=function(n){return'<span data-mce-bogus="1" class="mce-'+s.charMap[n]+'">'+n+"</span>"},L=function(n,e){var t=[],r=n.dom(),o=E(r.childNodes,N.fromDom);return b(o,function(n){e(n)&&(t=t.concat([n])),t=t.concat(L(n,e))}),t},R={isMatch:function(n){return q.isText(n)&&q.value(n)!==undefined&&s.regExp.test(q.value(n))},filterDescendants:L,findParentElm:function(n,e){for(;n.parentNode;){if(n.parentNode===e)return n;n=n.parentNode}},replaceWithSpans:function(n){return n.replace(s.regExpGlobal,H)}},_=function(n,e){var t,r,o=R.filterDescendants(N.fromDom(e),R.isMatch);b(o,function(e){var o=R.replaceWithSpans(q.value(e));for(r=n.dom.create("div",null,o);t=r.lastChild;)n.dom.insertAfter(t,e.dom());n.dom.remove(e.dom())})},j=function(n,e){var t=n.dom.select(s.selector,e);b(t,function(e){n.dom.remove(e,1)})},z=_,G=j,W=function(n){var e=n.getBody(),t=n.selection.getBookmark(),r=R.findParentElm(n.selection.getNode(),e);r=r!==undefined?r:e,j(n,r),_(n,r),n.selection.moveToBookmark(t)},F=function(n,e){var t,r=n.getBody(),o=n.selection;e.set(!e.get()),c(n,e.get()),t=o.getBookmark(),!0===e.get()?z(n,r):G(n,r),o.moveToBookmark(t)},I=function(n,e){n.addCommand("mceVisualChars",function(){F(n,e)})},J=tinymce.util.Tools.resolve("tinymce.util.Delay"),K=function(n,e){var t=J.debounce(function(){W(n)},300);!1!==n.settings.forced_root_block&&n.on("keydown",function(r){!0===e.get()&&(13===r.keyCode?W(n):t())})},Q=function(n){return function(e){var t=e.control;n.on("VisualChars",function(n){t.active(n.state)})}};u.add("visualchars",function(n){var e,t=o(!1);return I(n,t),(e=n).addButton("visualchars",{active:!1,title:"Show invisible characters",cmd:"mceVisualChars",onPostRender:Q(e)}),e.addMenuItem("visualchars",{text:"Show invisible characters",cmd:"mceVisualChars",onPostRender:Q(e),selectable:!0,context:"view",prependToContext:!0}),K(n,t),i(t)})}();!function(){"use strict";var e=function(t){var n=t,o=function(){return n};return{get:o,set:function(e){n=e},clone:function(){return e(o())}}},t=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=function(e,t){e.fire("VisualBlocks",{state:t})},o=function(e){return e.getParam("visualblocks_default_state",!1)},s=function(e){return e.settings.visualblocks_content_css},i=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),c=tinymce.util.Tools.resolve("tinymce.util.Tools"),l=i.DOM.uniqueId(),u=function(e,t){var n=c.toArray(e.getElementsByTagName("link"));if(0===c.grep(n,function(e){return e.id===l}).length){var o=i.DOM.create("link",{id:l,rel:"stylesheet",href:t});e.getElementsByTagName("head")[0].appendChild(o)}},a=function(e,t,o){var i=e.dom,c=s(e);u(e.getDoc(),c||t+"/css/visualblocks.css"),i.toggleClass(e.getBody(),"mce-visualblocks"),o.set(!o.get()),n(e,o.get())},r=function(e,t,n){e.addCommand("mceVisualBlocks",function(){a(e,t,n)})},m=function(e,t,n){e.on("PreviewFormats AfterPreviewFormats",function(t){n.get()&&e.dom.toggleClass(e.getBody(),"mce-visualblocks","afterpreviewformats"===t.type)}),e.on("init",function(){o(e)&&a(e,t,n)}),e.on("remove",function(){e.dom.removeClass(e.getBody(),"mce-visualblocks")})},f=function(e,t){return function(n){var o=n.control;o.active(t.get()),e.on("VisualBlocks",function(e){o.active(e.state)})}},d=function(e,t){e.addButton("visualblocks",{active:!1,title:"Show blocks",cmd:"mceVisualBlocks",onPostRender:f(e,t)}),e.addMenuItem("visualblocks",{text:"Show blocks",cmd:"mceVisualBlocks",onPostRender:f(e,t),selectable:!0,context:"view",prependToContext:!0})};t.add("visualblocks",function(t,n){var o=e(!1);r(t,n,o),d(t,o),m(t,n,o)})}();!function(){"use strict";var t=function(e){var n=e,r=function(){return n};return{get:r,set:function(t){n=t},clone:function(){return t(r())}}},e=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=function(t){return{setPatterns:function(e){t.set(e)},getPatterns:function(){return t.get()}}},r=[{start:"*",end:"*",format:"italic"},{start:"**",end:"**",format:"bold"},{start:"***",end:"***",format:["bold","italic"]},{start:"#",format:"h1"},{start:"##",format:"h2"},{start:"###",format:"h3"},{start:"####",format:"h4"},{start:"#####",format:"h5"},{start:"######",format:"h6"},{start:"1. ",cmd:"InsertOrderedList"},{start:"* ",cmd:"InsertUnorderedList"},{start:"- ",cmd:"InsertUnorderedList"}],a=function(t){return t.textpattern_patterns!==undefined?t.textpattern_patterns:r},o=tinymce.util.Tools.resolve("tinymce.util.Delay"),i=tinymce.util.Tools.resolve("tinymce.util.VK"),s=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),l=tinymce.util.Tools.resolve("tinymce.util.Tools"),d=function(t,e){for(var n=0;n<t.length;n++)if(0===e.indexOf(t[n].start)&&(!t[n].end||e.lastIndexOf(t[n].end)===e.length-t[n].end.length))return t[n]},f=function(t,e,n,r){var a,o,i,s,l,d,f=t.sort(function(t,e){return t.start.length>e.start.length?-1:t.start.length<e.start.length?1:0});for(o=0;o<f.length;o++)if((a=f[o]).end!==undefined&&(s=a,l=n,d=r,e.substr(l-s.end.length-d,s.end.length)===s.end)&&n-r-(i=a).end.length-i.start.length>0)return a},c=function(t,e,n){if(!1!==e.collapsed){var r=e.startContainer,a=r.data,o=!0===n?1:0;if(3===r.nodeType){var i=f(t,a,e.startOffset,o);if(i!==undefined){var s=a.lastIndexOf(i.end,e.startOffset-o),l=a.lastIndexOf(i.start,s-i.end.length);if(s=a.indexOf(i.end,l+i.start.length),-1!==l){var c=document.createRange();c.setStart(r,l),c.setEnd(r,s+i.end.length);var u=d(t,c.toString());if(!(i===undefined||u!==i||r.data.length<=i.start.length+i.end.length))return{pattern:i,startOffset:l,endOffset:s}}}}}},u=function(t,e,n){var r=t.selection.getRng(!0),a=c(e,r,n);if(a)return function(t,e,n,r){var a=l.isArray(n.pattern.format)?n.pattern.format:[n.pattern.format];if(0!==l.grep(a,function(e){var n=t.formatter.get(e);return n&&n[0].inline}).length)return t.undoManager.transact(function(){var r,o,i,s;r=e,o=n.pattern,i=n.endOffset,s=n.startOffset,(r=s>0?r.splitText(s):r).splitText(i-s+o.end.length),r.deleteData(0,o.start.length),r.deleteData(r.data.length-o.end.length,o.end.length),e=r,a.forEach(function(n){t.formatter.apply(n,{},e)})}),e}(t,r.startContainer,a)},g={patternFromRng:c,applyInlineFormatSpace:function(t,e){return u(t,e,!0)},applyInlineFormatEnter:function(t,e){return u(t,e,!1)},applyBlockFormat:function(t,e){var n,r,a,o,i,f,c,u,g,h,m;if(n=t.selection,r=t.dom,n.isCollapsed()&&(c=r.getParent(n.getStart(),"p"))){for(g=new s(c,c);i=g.next();)if(3===i.nodeType){o=i;break}if(o){if(!(u=d(e,o.data)))return;if(a=(h=n.getRng(!0)).startContainer,m=h.startOffset,o===a&&(m=Math.max(0,m-u.start.length)),l.trim(o.data).length===u.start.length)return;u.format&&(f=t.formatter.get(u.format))&&f[0].block&&(o.deleteData(0,u.start.length),t.formatter.apply(u.format,{},o),h.setStart(a,m),h.collapse(!0),n.setRng(h)),u.cmd&&t.undoManager.transact(function(){o.deleteData(0,u.start.length),t.execCommand(u.cmd)})}}}},h=function(t,e,n){for(var r=0;r<t.length;r++)if(n(t[r],e))return!0},m={handleEnter:function(t,e){var n,r;(n=g.applyInlineFormatEnter(t,e))&&((r=t.dom.createRng()).setStart(n,n.data.length),r.setEnd(n,n.data.length),t.selection.setRng(r)),g.applyBlockFormat(t,e)},handleInlineKey:function(t,e){var n,r,a,o,i;(n=g.applyInlineFormatSpace(t,e))&&(i=t.dom,r=n.data.slice(-1),/[\u00a0 ]/.test(r)&&(n.deleteData(n.data.length-1,1),a=i.doc.createTextNode(r),i.insertAfter(a,n.parentNode),(o=i.createRng()).setStart(a,1),o.setEnd(a,1),t.selection.setRng(o)))},checkCharCode:function(t,e){return h(t,e,function(t,e){return t.charCodeAt(0)===e.charCode})},checkKeyCode:function(t,e){return h(t,e,function(t,e){return t===e.keyCode&&!1===i.modifierPressed(e)})}},p=function(t,e){var n=[",",".",";",":","!","?"],r=[32];t.on("keydown",function(n){13!==n.keyCode||i.modifierPressed(n)||m.handleEnter(t,e.get())},!0),t.on("keyup",function(n){m.checkKeyCode(r,n)&&m.handleInlineKey(t,e.get())}),t.on("keypress",function(r){m.checkCharCode(n,r)&&o.setEditorTimeout(t,function(){m.handleInlineKey(t,e.get())})})};e.add("textpattern",function(e){var r=t(a(e.settings));return p(e,r),n(r)})}();!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),e=function(t,e){var o;return t.dom.getParents(t.selection.getStart(),function(t){var r;(r=t.style["forecolor"===e?"color":"background-color"])&&(o=r)}),o},o=function(t){var e,o=[];for(e=0;e<t.length;e+=2)o.push({text:t[e+1],color:"#"+t[e]});return o},r=function(t,e,o){t.undoManager.transact(function(){t.focus(),t.formatter.apply(e,{value:o}),t.nodeChanged()})},n=function(t,e){t.undoManager.transact(function(){t.focus(),t.formatter.remove(e,{value:null},null,!0),t.nodeChanged()})},a=function(t){t.addCommand("mceApplyTextcolor",function(e,o){r(t,e,o)}),t.addCommand("mceRemoveTextcolor",function(e){n(t,e)})},l=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),c=tinymce.util.Tools.resolve("tinymce.util.Tools"),i=["000000","Black","993300","Burnt orange","333300","Dark olive","003300","Dark green","003366","Dark azure","000080","Navy Blue","333399","Indigo","333333","Very dark gray","800000","Maroon","FF6600","Orange","808000","Olive","008000","Green","008080","Teal","0000FF","Blue","666699","Grayish blue","808080","Gray","FF0000","Red","FF9900","Amber","99CC00","Yellow green","339966","Sea green","33CCCC","Turquoise","3366FF","Royal blue","800080","Purple","999999","Medium gray","FF00FF","Magenta","FFCC00","Gold","FFFF00","Yellow","00FF00","Lime","00FFFF","Aqua","00CCFF","Sky blue","993366","Red violet","FFFFFF","White","FF99CC","Pink","FFCC99","Peach","FFFF99","Light yellow","CCFFCC","Pale green","CCFFFF","Pale cyan","99CCFF","Light sky blue","CC99FF","Plum"],u=function(t){return t.getParam("textcolor_map",i)},m=function(t){return t.getParam("textcolor_rows",5)},s=function(t){return t.getParam("textcolor_cols",8)},d=function(t){return t.getParam("color_picker_callback",null)},f=function(t){return t.getParam("forecolor_map",u(t))},g=function(t){return t.getParam("backcolor_map",u(t))},F=function(t){return t.getParam("forecolor_rows",m(t))},b=function(t){return t.getParam("backcolor_rows",m(t))},p=function(t){return t.getParam("forecolor_cols",s(t))},C=function(t){return t.getParam("backcolor_cols",s(t))},y=d,v=function(t){return"function"==typeof d(t)},h=tinymce.util.Tools.resolve("tinymce.util.I18n"),P=function(t,e,r,n){var a,c,i,u,m,s,d,f=0,g=l.DOM.uniqueId("mcearia"),F=function(t,e){var o="transparent"===t;return'<td class="mce-grid-cell'+(o?" mce-colorbtn-trans":"")+'"><div id="'+g+"-"+f+++'" data-mce-color="'+(t||"")+'" role="option" tabIndex="-1" style="'+(t?"background-color: "+t:"")+'" title="'+h.translate(e)+'">'+(o?"&#215;":"")+"</div></td>"};for((a=o(r)).push({text:h.translate("No color"),color:"transparent"}),i='<table class="mce-grid mce-grid-border mce-colorbutton-grid" role="list" cellspacing="0"><tbody>',u=a.length-1,s=0;s<e;s++){for(i+="<tr>",m=0;m<t;m++)i+=(d=s*t+m)>u?"<td></td>":F((c=a[d]).color,c.text);i+="</tr>"}if(n){for(i+='<tr><td colspan="'+t+'" class="mce-custom-color-btn"><div id="'+g+'-c" class="mce-widget mce-btn mce-btn-small mce-btn-flat" role="button" tabindex="-1" aria-labelledby="'+g+'-c" style="width: 100%"><button type="button" role="presentation" tabindex="-1">'+h.translate("Custom...")+"</button></div></td></tr>",i+="<tr>",m=0;m<t;m++)i+=F("","Custom color");i+="</tr>"}return i+="</tbody></table>"},k=function(t,e){t.style.background=e,t.setAttribute("data-mce-color",e)},x=function(t){return function(e){var o=e.control;o._color?t.execCommand("mceApplyTextcolor",o.settings.format,o._color):t.execCommand("mceRemoveTextcolor",o.settings.format)}},T=function(t,o){return function(r){var n,a=this.parent(),i=e(t,a.settings.format),u=function(e){a.hidePanel(),a.color(e),t.execCommand("mceApplyTextcolor",a.settings.format,e)};l.DOM.getParent(r.target,".mce-custom-color-btn")&&(a.hidePanel(),y(t).call(t,function(t){var e,r,n,l=a.panel.getEl().getElementsByTagName("table")[0];for(e=c.map(l.rows[l.rows.length-1].childNodes,function(t){return t.firstChild}),n=0;n<e.length&&(r=e[n]).getAttribute("data-mce-color");n++);if(n===o)for(n=0;n<o-1;n++)k(e[n],e[n+1].getAttribute("data-mce-color"));k(r,t),u(t)},i)),(n=r.target.getAttribute("data-mce-color"))?(this.lastId&&l.DOM.get(this.lastId).setAttribute("aria-selected",!1),r.target.setAttribute("aria-selected",!0),this.lastId=r.target.id,"transparent"===n?(a.hidePanel(),a.resetColor(),t.execCommand("mceRemoveTextcolor",a.settings.format)):u(n)):null!==n&&a.hidePanel()}},_=function(t,e){return function(){var o=e?p(t):C(t),r=e?F(t):b(t),n=e?f(t):g(t),a=v(t);return P(o,r,n,a)}},A=function(t){t.addButton("forecolor",{type:"colorbutton",tooltip:"Text color",format:"forecolor",panel:{role:"application",ariaRemember:!0,html:_(t,!0),onclick:T(t,p(t))},onclick:x(t)}),t.addButton("backcolor",{type:"colorbutton",tooltip:"Background color",format:"hilitecolor",panel:{role:"application",ariaRemember:!0,html:_(t,!1),onclick:T(t,C(t))},onclick:x(t)})};t.add("textcolor",function(t){a(t),A(t)})}();!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=function(e){return function(){return e}},n=function(e){for(var t=new Array(arguments.length-1),n=1;n<arguments.length;n++)t[n-1]=arguments[n];return function(){for(var n=new Array(arguments.length),a=0;a<n.length;a++)n[a]=arguments[a];var r=t.concat(n);return e.apply(null,r)}},a=(t(!1),t(!0),tinymce.util.Tools.resolve("tinymce.util.Tools")),r=tinymce.util.Tools.resolve("tinymce.util.XHR"),l=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),c=function(e){return e.getParam("template_cdate_classes","cdate")},o=function(e){return e.getParam("template_mdate_classes","mdate")},i=function(e){return e.getParam("template_selected_content_classes","selcontent")},s=function(e){return e.getParam("template_preview_replace_values")},u=function(e){return e.getParam("template_replace_values")},p=function(e){return e.templates},m=function(e){return e.getParam("template_cdate_format",e.getLang("template.cdate_format"))},d=function(e){return e.getParam("template_mdate_format",e.getLang("template.mdate_format"))},f=function(e){return e.getParam("template_popup_width",600)},g=function(e){return Math.min(l.DOM.getViewPort().h,e.getParam("template_popup_height",500))},h=function(e,t){if((e=""+e).length<t)for(var n=0;n<t-e.length;n++)e="0"+e;return e},y=function(e,t,n){var a="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),r="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),l="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),c="January February March April May June July August September October November December".split(" ");return n=n||new Date,t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace("%D","%m/%d/%Y")).replace("%r","%I:%M:%S %p")).replace("%Y",""+n.getFullYear())).replace("%y",""+n.getYear())).replace("%m",h(n.getMonth()+1,2))).replace("%d",h(n.getDate(),2))).replace("%H",""+h(n.getHours(),2))).replace("%M",""+h(n.getMinutes(),2))).replace("%S",""+h(n.getSeconds(),2))).replace("%I",""+((n.getHours()+11)%12+1))).replace("%p",n.getHours()<12?"AM":"PM")).replace("%B",""+e.translate(c[n.getMonth()]))).replace("%b",""+e.translate(l[n.getMonth()]))).replace("%A",""+e.translate(r[n.getDay()]))).replace("%a",""+e.translate(a[n.getDay()]))).replace("%%","%")},v=function(e,t,n){return a.each(n,function(e,n){"function"==typeof e&&(e=e(n)),t=t.replace(new RegExp("\\{\\$"+n+"\\}","g"),e)}),t},M=function(e,t){var n=e.dom,r=u(e);a.each(n.select("*",t),function(e){a.each(r,function(t,a){n.hasClass(e,a)&&"function"==typeof r[a]&&r[a](e)})})},_=function(e,t){return new RegExp("\\b"+t+"\\b","g").test(e.className)},b=function(e,t){return function(){var n=p(e);"function"!=typeof n?"string"==typeof n?r.send({url:n,success:function(e){t(JSON.parse(e))}}):t(n):n(t)}},T=v,x=M,P=function(e,t,n){var r,l,s=e.dom,p=e.selection.getContent();n=v(0,n,u(e)),r=s.create("div",null,n),(l=s.select(".mceTmpl",r))&&l.length>0&&(r=s.create("div",null)).appendChild(l[0].cloneNode(!0)),a.each(s.select("*",r),function(t){_(t,c(e).replace(/\s+/g,"|"))&&(t.innerHTML=y(e,m(e))),_(t,o(e).replace(/\s+/g,"|"))&&(t.innerHTML=y(e,d(e))),_(t,i(e).replace(/\s+/g,"|"))&&(t.innerHTML=p)}),M(e,r),e.execCommand("mceInsertContent",!1,r.innerHTML),e.addVisual()},S=function(e){e.addCommand("mceInsertTemplate",n(P,e))},w=function(e){e.on("PreProcess",function(t){var n=e.dom,r=d(e);a.each(n.select("div",t.node),function(t){n.hasClass(t,"mceTmpl")&&(a.each(n.select("*",t),function(t){n.hasClass(t,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))&&(t.innerHTML=y(e,r))}),x(e,t))})})},D=function(e,t,n){if(-1===n.indexOf("<html>")){var r="";a.each(e.contentCSS,function(t){r+='<link type="text/css" rel="stylesheet" href="'+e.documentBaseURI.toAbsolute(t)+'">'});var l=e.settings.body_class||"";-1!==l.indexOf("=")&&(l=(l=e.getParam("body_class","","hash"))[e.id]||""),n="<!DOCTYPE html><html><head>"+r+'</head><body class="'+l+'">'+n+"</body></html>"}n=T(e,n,s(e));var c=t.find("iframe")[0].getEl().contentWindow.document;c.open(),c.write(n),c.close()},H=function(e,t){var n,l,c=[];if(t&&0!==t.length)a.each(t,function(e){c.push({selected:!c.length,text:e.title,value:{url:e.url,content:e.content,description:e.description}})}),(n=e.windowManager.open({title:"Insert template",layout:"flex",direction:"column",align:"stretch",padding:15,spacing:10,items:[{type:"form",flex:0,padding:0,items:[{type:"container",label:"Templates",items:{type:"listbox",label:"Templates",name:"template",values:c,onselect:function(t){var a=t.control.value();a.url?r.send({url:a.url,success:function(t){D(e,n,l=t)}}):(l=a.content,D(e,n,l)),n.find("#description")[0].text(t.control.value().description)}}}]},{type:"label",name:"description",label:"Description",text:"\xa0"},{type:"iframe",flex:1,border:1}],onsubmit:function(){P(e,!1,l)},minWidth:f(e),minHeight:g(e)})).find("listbox")[0].fire("select");else{var o=e.translate("No templates defined.");e.notificationManager.open({text:o,type:"info"})}},C=function(e){return function(t){H(e,t)}},A=function(e){e.addButton("template",{title:"Insert template",onclick:b(e.settings,C(e))}),e.addMenuItem("template",{text:"Template",onclick:b(e.settings,C(e)),icon:"template",context:"insert"})};e.add("template",function(e){A(e),S(e),w(e)})}();!function(){"use strict";var n,t,e,r,o,i,u,a,c,l,s,f=tinymce.util.Tools.resolve("tinymce.PluginManager"),d=function(n){return function(){return n}},m={noop:function(){},noarg:function(n){return function(){return n()}},compose:function(n,t){return function(){return n(t.apply(null,arguments))}},constant:d,identity:function(n){return n},tripleEquals:function(n,t){return n===t},curry:function(n){for(var t=new Array(arguments.length-1),e=1;e<arguments.length;e++)t[e-1]=arguments[e];return function(){for(var e=new Array(arguments.length),r=0;r<e.length;r++)e[r]=arguments[r];var o=t.concat(e);return n.apply(null,o)}},not:function(n){return function(){return!n.apply(null,arguments)}},die:function(n){return function(){throw new Error(n)}},apply:function(n){return n()},call:function(n){n()},never:d(!1),always:d(!0)},g=m.never,p=m.always,h=function(){return v},v=(r={fold:function(n,t){return n()},is:g,isSome:g,isNone:p,getOr:e=function(n){return n},getOrThunk:t=function(n){return n()},getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},or:e,orThunk:t,map:h,ap:h,each:function(){},bind:h,flatten:h,exists:g,forall:p,filter:h,equals:n=function(n){return n.isNone()},equals_:n,toArray:function(){return[]},toString:m.constant("none()")},Object.freeze&&Object.freeze(r),r),b=function(n){var t=function(){return n},e=function(){return o},r=function(t){return t(n)},o={fold:function(t,e){return e(n)},is:function(t){return n===t},isSome:p,isNone:g,getOr:t,getOrThunk:t,getOrDie:t,or:e,orThunk:e,map:function(t){return b(t(n))},ap:function(t){return t.fold(h,function(t){return b(t(n))})},each:function(t){t(n)},bind:r,flatten:t,exists:r,forall:r,filter:function(t){return t(n)?o:v},equals:function(t){return t.is(n)},equals_:function(t,e){return t.fold(g,function(t){return e(n,t)})},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return o},w={some:b,none:h,from:function(n){return null===n||n===undefined?v:b(n)}},y=(o=Array.prototype.indexOf)===undefined?function(n,t){return A(n,t)}:function(n,t){return o.call(n,t)},x=function(n,t){return y(n,t)>-1},C=function(n,t){for(var e=n.length,r=new Array(e),o=0;o<e;o++){var i=n[o];r[o]=t(i,o,n)}return r},S=function(n,t){for(var e=0,r=n.length;e<r;e++)t(n[e],e,n)},R=function(n,t){for(var e=n.length-1;e>=0;e--)t(n[e],e,n)},T=function(n,t){for(var e=[],r=0,o=n.length;r<o;r++){var i=n[r];t(i,r,n)&&e.push(i)}return e},D=function(n,t){for(var e=0,r=n.length;e<r;e++)if(t(n[e],e,n))return w.some(e);return w.none()},A=function(n,t){for(var e=0,r=n.length;e<r;++e)if(n[e]===t)return e;return-1},k=Array.prototype.push,N=function(n){for(var t=[],e=0,r=n.length;e<r;++e){if(!Array.prototype.isPrototypeOf(n[e]))throw new Error("Arr.flatten item "+e+" was not an array, input: "+n);k.apply(t,n[e])}return t},O=function(n,t){for(var e=0,r=n.length;e<r;++e)if(!0!==t(n[e],e,n))return!1;return!0},E=Array.prototype.slice,B={map:C,each:S,eachr:R,partition:function(n,t){for(var e=[],r=[],o=0,i=n.length;o<i;o++){var u=n[o];(t(u,o,n)?e:r).push(u)}return{pass:e,fail:r}},filter:T,groupBy:function(n,t){if(0===n.length)return[];for(var e=t(n[0]),r=[],o=[],i=0,u=n.length;i<u;i++){var a=n[i],c=t(a);c!==e&&(r.push(o),o=[]),e=c,o.push(a)}return 0!==o.length&&r.push(o),r},indexOf:function(n,t){var e=y(n,t);return-1===e?w.none():w.some(e)},foldr:function(n,t,e){return R(n,function(n){e=t(e,n)}),e},foldl:function(n,t,e){return S(n,function(n){e=t(e,n)}),e},find:function(n,t){for(var e=0,r=n.length;e<r;e++){var o=n[e];if(t(o,e,n))return w.some(o)}return w.none()},findIndex:D,flatten:N,bind:function(n,t){var e=C(n,t);return N(e)},forall:O,exists:function(n,t){return D(n,t).isSome()},contains:x,equal:function(n,t){return n.length===t.length&&O(n,function(n,e){return n===t[e]})},reverse:function(n){var t=E.call(n,0);return t.reverse(),t},chunk:function(n,t){for(var e=[],r=0;r<n.length;r+=t){var o=n.slice(r,r+t);e.push(o)}return e},difference:function(n,t){return T(n,function(n){return!x(t,n)})},mapToObject:function(n,t){for(var e={},r=0,o=n.length;r<o;r++){var i=n[r];e[String(i)]=t(i,r)}return e},pure:function(n){return[n]},sort:function(n,t){var e=E.call(n,0);return e.sort(t),e},range:function(n,t){for(var e=[],r=0;r<n;r++)e.push(t(r));return e},head:function(n){return 0===n.length?w.none():w.some(n[0])},last:function(n){return 0===n.length?w.none():w.some(n[n.length-1])}},I=(i=Object.keys)===undefined?function(n){var t=[];for(var e in n)n.hasOwnProperty(e)&&t.push(e);return t}:i,P=function(n,t){for(var e=I(n),r=0,o=e.length;r<o;r++){var i=e[r];t(n[i],i,n)}},W=function(n,t){var e={};return P(n,function(r,o){var i=t(r,o,n);e[i.k]=i.v}),e},_=function(n,t){var e=[];return P(n,function(n,r){e.push(t(n,r))}),e},M=function(n){return _(n,function(n){return n})},L={bifilter:function(n,t){var e={},r={};return P(n,function(n,o){(t(n,o)?e:r)[o]=n}),{t:e,f:r}},each:P,map:function(n,t){return W(n,function(n,e,r){return{k:e,v:t(n,e,r)}})},mapToArray:_,tupleMap:W,find:function(n,t){for(var e=I(n),r=0,o=e.length;r<o;r++){var i=e[r],u=n[i];if(t(u,i,n))return w.some(u)}return w.none()},keys:I,values:M,size:function(n){return M(n).length}},q=function(n){return function(t){return function(n){if(null===n)return"null";var t=typeof n;return"object"===t&&Array.prototype.isPrototypeOf(n)?"array":"object"===t&&String.prototype.isPrototypeOf(n)?"string":t}(t)===n}},z={isString:q("string"),isObject:q("object"),isArray:q("array"),isNull:q("null"),isBoolean:q("boolean"),isUndefined:q("undefined"),isFunction:q("function"),isNumber:q("number")},F=function(n){return n.slice(0).sort()},j=function(n,t){throw new Error("All required keys ("+F(n).join(", ")+") were not specified. Specified keys were: "+F(t).join(", ")+".")},H=function(n){throw new Error("Unsupported keys for object: "+F(n).join(", "))},V=function(n,t){if(!z.isArray(t))throw new Error("The "+n+" fields must be an array. Was: "+t+".");B.each(t,function(t){if(!z.isString(t))throw new Error("The value "+t+" in the "+n+" fields was not a string.")})},U=function(n,t){throw new Error("All values need to be of type: "+t+". Keys ("+F(n).join(", ")+") were not.")},G=function(n){var t=F(n);B.find(t,function(n,e){return e<t.length-1&&n===t[e+1]}).each(function(n){throw new Error("The field: "+n+" occurs more than once in the combined fields: ["+t.join(", ")+"].")})},X={immutable:function(){var n=arguments;return function(){for(var t=new Array(arguments.length),e=0;e<t.length;e++)t[e]=arguments[e];if(n.length!==t.length)throw new Error('Wrong number of arguments to struct. Expected "['+n.length+']", got '+t.length+" arguments");var r={};return B.each(n,function(n,e){r[n]=m.constant(t[e])}),r}},immutableBag:function(n,t){var e=n.concat(t);if(0===e.length)throw new Error("You must specify at least one required or optional field.");return V("required",n),V("optional",t),G(e),function(r){var o=L.keys(r);B.forall(n,function(n){return B.contains(o,n)})||j(n,o);var i=B.filter(o,function(n){return!B.contains(e,n)});i.length>0&&H(i);var u={};return B.each(n,function(n){u[n]=m.constant(r[n])}),B.each(t,function(n){u[n]=m.constant(Object.prototype.hasOwnProperty.call(r,n)?w.some(r[n]):w.none())}),u}}},Y=X.immutable("width","height"),$=X.immutable("rows","columns"),K=X.immutable("row","column"),J=X.immutable("x","y"),Q=X.immutable("element","rowspan","colspan"),Z=X.immutable("element","rowspan","colspan","isNew"),nn={dimensions:Y,grid:$,address:K,coords:J,extended:X.immutable("element","rowspan","colspan","row","column"),detail:Q,detailnew:Z,rowdata:X.immutable("element","cells","section"),elementnew:X.immutable("element","isNew"),rowdatanew:X.immutable("element","cells","section","isNew"),rowcells:X.immutable("cells","section"),rowdetails:X.immutable("details","section"),bounds:X.immutable("startRow","startCol","finishRow","finishCol")},tn=function(n){if(null===n||n===undefined)throw new Error("Node cannot be null or undefined");return{dom:m.constant(n)}},en={fromHtml:function(n,t){var e=(t||document).createElement("div");if(e.innerHTML=n,!e.hasChildNodes()||e.childNodes.length>1)throw console.error("HTML does not have a single root node",n),"HTML must have a single root node";return tn(e.childNodes[0])},fromTag:function(n,t){var e=(t||document).createElement(n);return tn(e)},fromText:function(n,t){var e=(t||document).createTextNode(n);return tn(e)},fromDom:tn,fromPoint:function(n,t,e){return w.from(n.dom().elementFromPoint(t,e)).map(tn)}},rn=8,on=9,un=1,an=3,cn=un,ln=on,sn=function(n){return n.nodeType!==cn&&n.nodeType!==ln||0===n.childElementCount},fn={all:function(n,t){var e=t===undefined?document:t.dom();return sn(e)?[]:B.map(e.querySelectorAll(n),en.fromDom)},is:function(n,t){var e=n.dom();if(e.nodeType!==cn)return!1;if(e.matches!==undefined)return e.matches(t);if(e.msMatchesSelector!==undefined)return e.msMatchesSelector(t);if(e.webkitMatchesSelector!==undefined)return e.webkitMatchesSelector(t);if(e.mozMatchesSelector!==undefined)return e.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")},one:function(n,t){var e=t===undefined?document:t.dom();return sn(e)?w.none():w.from(e.querySelector(n)).map(en.fromDom)}},dn=function(n,t){var e=[],r=function(n){return e.push(n),t(n)},o=t(n);do{o=o.bind(r)}while(o.isSome());return e},mn="undefined"!=typeof window?window:Function("return this;")(),gn=function(n,t){for(var e=t!==undefined&&null!==t?t:mn,r=0;r<n.length&&e!==undefined&&null!==e;++r)e=e[n[r]];return e},pn=function(n,t){var e=n.split(".");return gn(e,t)},hn=function(n,t){var e=pn(n,t);if(e===undefined||null===e)throw n+" not available on this browser";return e},vn=function(){return hn("Node")},bn=function(n,t,e){return 0!=(n.compareDocumentPosition(t)&e)},wn=function(n,t){return bn(n,t,vn().DOCUMENT_POSITION_CONTAINED_BY)},yn=function(n){var t,e=!1;return function(){return e||(e=!0,t=n.apply(null,arguments)),t}},xn=function(n,t){var e=function(n,t){for(var e=0;e<n.length;e++){var r=n[e];if(r.test(t))return r}return undefined}(n,t);if(!e)return{major:0,minor:0};var r=function(n){return Number(t.replace(e,"$"+n))};return Sn(r(1),r(2))},Cn=function(){return Sn(0,0)},Sn=function(n,t){return{major:n,minor:t}},Rn={nu:Sn,detect:function(n,t){var e=String(t).toLowerCase();return 0===n.length?Cn():xn(n,e)},unknown:Cn},Tn="Firefox",Dn=function(n,t){return function(){return t===n}},An=function(n){var t=n.current;return{current:t,version:n.version,isEdge:Dn("Edge",t),isChrome:Dn("Chrome",t),isIE:Dn("IE",t),isOpera:Dn("Opera",t),isFirefox:Dn(Tn,t),isSafari:Dn("Safari",t)}},kn={unknown:function(){return An({current:undefined,version:Rn.unknown()})},nu:An,edge:m.constant("Edge"),chrome:m.constant("Chrome"),ie:m.constant("IE"),opera:m.constant("Opera"),firefox:m.constant(Tn),safari:m.constant("Safari")},Nn="Windows",On="Android",En="Solaris",Bn="FreeBSD",In=function(n,t){return function(){return t===n}},Pn=function(n){var t=n.current;return{current:t,version:n.version,isWindows:In(Nn,t),isiOS:In("iOS",t),isAndroid:In(On,t),isOSX:In("OSX",t),isLinux:In("Linux",t),isSolaris:In(En,t),isFreeBSD:In(Bn,t)}},Wn={unknown:function(){return Pn({current:undefined,version:Rn.unknown()})},nu:Pn,windows:m.constant(Nn),ios:m.constant("iOS"),android:m.constant(On),linux:m.constant("Linux"),osx:m.constant("OSX"),solaris:m.constant(En),freebsd:m.constant(Bn)},_n=function(n,t){var e=String(t).toLowerCase();return B.find(n,function(n){return n.search(e)})},Mn=function(n,t){return _n(n,t).map(function(n){var e=Rn.detect(n.versionRegexes,t);return{current:n.name,version:e}})},Ln=function(n,t){return _n(n,t).map(function(n){var e=Rn.detect(n.versionRegexes,t);return{current:n.name,version:e}})},qn=function(n,t){return t+n},zn=function(n,t){return n+t},Fn=function(n,t){return n.substring(t)},jn=function(n,t){return n.substring(0,n.length-t)},Hn=function(n){return""===n?w.none():w.some(n.substr(0,1))},Vn=function(n){return""===n?w.none():w.some(n.substring(1))},Un=function(n,t,e){return""===t||!(n.length<t.length)&&n.substr(e,e+t.length)===t},Gn=function(n,t){return Un(n,t,0)},Xn=function(n,t){return Un(n,t,n.length-t.length)},Yn={supplant:function(n,t){return n.replace(/\${([^{}]*)}/g,function(n,e){var r,o=t[e];return"string"==(r=typeof o)||"number"===r?o:n})},startsWith:Gn,removeLeading:function(n,t){return Gn(n,t)?Fn(n,t.length):n},removeTrailing:function(n,t){return Xn(n,t)?jn(n,t.length):n},ensureLeading:function(n,t){return Gn(n,t)?n:qn(n,t)},ensureTrailing:function(n,t){return Xn(n,t)?n:zn(n,t)},endsWith:Xn,contains:function(n,t){return-1!==n.indexOf(t)},trim:function(n){return n.replace(/^\s+|\s+$/g,"")},lTrim:function(n){return n.replace(/^\s+/g,"")},rTrim:function(n){return n.replace(/\s+$/g,"")},capitalize:function(n){return Hn(n).bind(function(t){return Vn(n).map(function(n){return t.toUpperCase()+n})}).getOr(n)}},$n=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,Kn=function(n){return function(t){return Yn.contains(t,n)}},Jn=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(n){return Yn.contains(n,"edge/")&&Yn.contains(n,"chrome")&&Yn.contains(n,"safari")&&Yn.contains(n,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,$n],search:function(n){return Yn.contains(n,"chrome")&&!Yn.contains(n,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(n){return Yn.contains(n,"msie")||Yn.contains(n,"trident")}},{name:"Opera",versionRegexes:[$n,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:Kn("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:Kn("firefox")},{name:"Safari",versionRegexes:[$n,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(n){return(Yn.contains(n,"safari")||Yn.contains(n,"mobile/"))&&Yn.contains(n,"applewebkit")}}],Qn=[{name:"Windows",search:Kn("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(n){return Yn.contains(n,"iphone")||Yn.contains(n,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:Kn("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:Kn("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:Kn("linux"),versionRegexes:[]},{name:"Solaris",search:Kn("sunos"),versionRegexes:[]},{name:"FreeBSD",search:Kn("freebsd"),versionRegexes:[]}],Zn={browsers:m.constant(Jn),oses:m.constant(Qn)},nt=function(n){var t,e,r,o,i,u,a,c,l,s,f,d=Zn.browsers(),g=Zn.oses(),p=Mn(d,n).fold(kn.unknown,kn.nu),h=Ln(g,n).fold(Wn.unknown,Wn.nu);return{browser:p,os:h,deviceType:(e=p,r=n,o=(t=h).isiOS()&&!0===/ipad/i.test(r),i=t.isiOS()&&!o,u=t.isAndroid()&&3===t.version.major,a=t.isAndroid()&&4===t.version.major,c=o||u||a&&!0===/mobile/i.test(r),l=t.isiOS()||t.isAndroid(),s=l&&!c,f=e.isSafari()&&t.isiOS()&&!1===/safari/i.test(r),{isiPad:m.constant(o),isiPhone:m.constant(i),isTablet:m.constant(c),isPhone:m.constant(s),isTouch:m.constant(l),isAndroid:t.isAndroid,isiOS:t.isiOS,isWebView:m.constant(f)})}},tt={detect:yn(function(){var n=navigator.userAgent;return nt(n)})},et=function(n,t){return n.dom()===t.dom()},rt=tt.detect().browser.isIE()?function(n,t){return wn(n.dom(),t.dom())}:function(n,t){var e=n.dom(),r=t.dom();return e!==r&&e.contains(r)},ot={eq:et,isEqualNode:function(n,t){return n.dom().isEqualNode(t.dom())},member:function(n,t){return B.exists(t,m.curry(et,n))},contains:rt,is:fn.is},it=function(n){return en.fromDom(n.dom().ownerDocument)},ut=function(n){var t=n.dom();return w.from(t.parentNode).map(en.fromDom)},at=function(n){var t=n.dom();return w.from(t.previousSibling).map(en.fromDom)},ct=function(n){var t=n.dom();return w.from(t.nextSibling).map(en.fromDom)},lt=function(n){var t=n.dom();return B.map(t.childNodes,en.fromDom)},st=function(n,t){var e=n.dom().childNodes;return w.from(e[t]).map(en.fromDom)},ft=X.immutable("element","offset"),dt={owner:it,defaultView:function(n){var t=n.dom().ownerDocument.defaultView;return en.fromDom(t)},documentElement:function(n){var t=it(n);return en.fromDom(t.dom().documentElement)},parent:ut,findIndex:function(n){return ut(n).bind(function(t){var e=lt(t);return B.findIndex(e,function(t){return ot.eq(n,t)})})},parents:function(n,t){for(var e=z.isFunction(t)?t:m.constant(!1),r=n.dom(),o=[];null!==r.parentNode&&r.parentNode!==undefined;){var i=r.parentNode,u=en.fromDom(i);if(o.push(u),!0===e(u))break;r=i}return o},siblings:function(n){return ut(n).map(lt).map(function(t){return B.filter(t,function(t){return!ot.eq(n,t)})}).getOr([])},prevSibling:at,offsetParent:function(n){var t=n.dom();return w.from(t.offsetParent).map(en.fromDom)},prevSiblings:function(n){return B.reverse(dn(n,at))},nextSibling:ct,nextSiblings:function(n){return dn(n,ct)},children:lt,child:st,firstChild:function(n){return st(n,0)},lastChild:function(n){return st(n,n.dom().childNodes.length-1)},childNodesCount:function(n){return n.dom().childNodes.length},hasChildNodes:function(n){return n.dom().hasChildNodes()},leaf:function(n,t){var e=lt(n);return e.length>0&&t<e.length?ft(e[t],0):ft(n,t)}},mt=function(n,t,e){return B.bind(dt.children(n),function(n){return fn.is(n,t)?e(n)?[n]:[]:mt(n,t,e)})},gt={firstLayer:function(n,t){return mt(n,t,m.constant(!0))},filterFirstLayer:mt},pt=function(n){return n.dom().nodeName.toLowerCase()},ht=function(n){return n.dom().nodeType},vt=function(n){return function(t){return ht(t)===n}},bt=vt(un),wt=vt(an),yt=vt(on),xt={name:pt,type:ht,value:function(n){return n.dom().nodeValue},isElement:bt,isText:wt,isDocument:yt,isComment:function(n){return ht(n)===rn||"#comment"===pt(n)}},Ct=function(n,t,e){if(!(z.isString(e)||z.isBoolean(e)||z.isNumber(e)))throw console.error("Invalid call to Attr.set. Key ",t,":: Value ",e,":: Element ",n),new Error("Attribute value was not simple");n.setAttribute(t,e+"")},St=function(n,t,e){Ct(n.dom(),t,e)},Rt=function(n,t){var e=n.dom().getAttribute(t);return null===e?undefined:e},Tt=function(n,t){var e=n.dom();return!(!e||!e.hasAttribute)&&e.hasAttribute(t)},Dt={clone:function(n){return B.foldl(n.dom().attributes,function(n,t){return n[t.name]=t.value,n},{})},set:St,setAll:function(n,t){var e=n.dom();L.each(t,function(n,t){Ct(e,t,n)})},get:Rt,has:Tt,remove:function(n,t){n.dom().removeAttribute(t)},hasNone:function(n){var t=n.dom().attributes;return t===undefined||null===t||0===t.length},transfer:function(n,t,e){xt.isElement(n)&&xt.isElement(t)&&B.each(e,function(e){var r,o,i;o=t,Tt(r=n,i=e)&&!Tt(o,i)&&St(o,i,Rt(r,i))})}},At=yn(function(){return kt(en.fromDom(document))}),kt=function(n){var t=n.dom().body;if(null===t||t===undefined)throw"Body is not available yet";return en.fromDom(t)},Nt={body:At,getBody:kt,inBody:function(n){var t=xt.isText(n)?n.dom().parentNode:n.dom();return t!==undefined&&null!==t&&t.ownerDocument.body.contains(t)}},Ot=function(n,t){var e=[];return B.each(dt.children(n),function(n){t(n)&&(e=e.concat([n])),e=e.concat(Ot(n,t))}),e},Et={all:function(n){return Ot(Nt.body(),n)},ancestors:function(n,t,e){return B.filter(dt.parents(n,e),t)},siblings:function(n,t){return B.filter(dt.siblings(n),t)},children:function(n,t){return B.filter(dt.children(n),t)},descendants:Ot},Bt={all:function(n){return fn.all(n)},ancestors:function(n,t,e){return Et.ancestors(n,function(n){return fn.is(n,t)},e)},siblings:function(n,t){return Et.siblings(n,function(n){return fn.is(n,t)})},children:function(n,t){return Et.children(n,function(n){return fn.is(n,t)})},descendants:function(n,t){return fn.all(t,n)}},It=function(n,t,e,r,o){return n(e,r)?w.some(e):z.isFunction(o)&&o(e)?w.none():t(e,r,o)},Pt=function(n,t,e){for(var r=n.dom(),o=z.isFunction(e)?e:m.constant(!1);r.parentNode;){r=r.parentNode;var i=en.fromDom(r);if(t(i))return w.some(i);if(o(i))break}return w.none()},Wt=function(n,t){return B.find(n.dom().childNodes,m.compose(t,en.fromDom)).map(en.fromDom)},_t=function(n,t){var e=function(n){for(var r=0;r<n.childNodes.length;r++){if(t(en.fromDom(n.childNodes[r])))return w.some(en.fromDom(n.childNodes[r]));var o=e(n.childNodes[r]);if(o.isSome())return o}return w.none()};return e(n.dom())},Mt={first:function(n){return _t(Nt.body(),n)},ancestor:Pt,closest:function(n,t,e){return It(function(n){return t(n)},Pt,n,t,e)},sibling:function(n,t){var e=n.dom();return e.parentNode?Wt(en.fromDom(e.parentNode),function(e){return!ot.eq(n,e)&&t(e)}):w.none()},child:Wt,descendant:_t},Lt=function(n,t,e){return Mt.ancestor(n,function(n){return fn.is(n,t)},e)},qt={first:function(n){return fn.one(n)},ancestor:Lt,sibling:function(n,t){return Mt.sibling(n,function(n){return fn.is(n,t)})},child:function(n,t){return Mt.child(n,function(n){return fn.is(n,t)})},descendant:function(n,t){return fn.one(t,n)},closest:function(n,t,e){return It(fn.is,Lt,n,t,e)}},zt=function(n,t,e){var r=e!==undefined?e:m.constant(!1);return r(t)?w.none():B.contains(n,xt.name(t))?w.some(t):qt.ancestor(t,n.join(","),function(n){return fn.is(n,"table")||r(n)})},Ft=function(n,t){return dt.parent(t).map(function(t){return Bt.children(t,n)})},jt=function(n,t){return zt(["td","th"],n,t)},Ht=function(n){return gt.firstLayer(n,"th,td")},Vt=(m.curry(Ft,"th,td"),function(n,t){return qt.closest(n,"table",t)}),Ut=function(n){return gt.firstLayer(n,"tr")},Gt=(m.curry(Ft,"tr"),function(n){var t=Ut(n);return B.map(t,function(n){var t=n,e=dt.parent(t).bind(function(n){var t=xt.name(n);return"tfoot"===t||"thead"===t||"tbody"===t?t:"tbody"}),r=B.map(Ht(n),function(n){var t=Dt.has(n,"rowspan")?parseInt(Dt.get(n,"rowspan"),10):1,e=Dt.has(n,"colspan")?parseInt(Dt.get(n,"colspan"),10):1;return nn.detail(n,t,e)});return nn.rowdata(t,r,e)})}),Xt=function(n,t){return B.map(n,function(n){var e=B.map(Ht(n),function(n){var t=Dt.has(n,"rowspan")?parseInt(Dt.get(n,"rowspan"),10):1,e=Dt.has(n,"colspan")?parseInt(Dt.get(n,"colspan"),10):1;return nn.detail(n,t,e)});return nn.rowdata(n,e,t.section())})},Yt=function(n,t){return n+","+t},$t=function(n,t){var e=B.bind(n.all(),function(n){return n.cells()});return B.filter(e,t)},Kt={generate:function(n){var t={},e=[],r=n.length,o=0;B.each(n,function(n,r){var i=[];B.each(n.cells(),function(n,e){for(var u=0;t[Yt(r,u)]!==undefined;)u++;for(var a=nn.extended(n.element(),n.rowspan(),n.colspan(),r,u),c=0;c<n.colspan();c++)for(var l=0;l<n.rowspan();l++){var s=u+c,f=Yt(r+l,s);t[f]=a,o=Math.max(o,s+1)}i.push(a)}),e.push(nn.rowdata(n.element(),i,n.section()))});var i=nn.grid(r,o);return{grid:m.constant(i),access:m.constant(t),all:m.constant(e)}},getAt:function(n,t,e){var r=n.access()[Yt(t,e)];return r!==undefined?w.some(r):w.none()},findItem:function(n,t,e){var r=$t(n,function(n){return e(t,n.element())});return r.length>0?w.some(r[0]):w.none()},filterItems:$t,justCells:function(n){var t=B.map(n.all(),function(n){return n.cells()});return B.flatten(t)}},Jt=function(n){return n.style!==undefined},Qt=function(n,t,e){if(!z.isString(e))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",e,":: Element ",n),new Error("CSS value must be a string: "+e);Jt(n)&&n.style.setProperty(t,e)},Zt=function(n,t){Jt(n)&&n.style.removeProperty(t)},ne=function(n,t,e){var r=n.dom();Qt(r,t,e)},te=function(n,t){return Jt(n)?n.style.getPropertyValue(t):""},ee=function(n,t){var e=n.dom(),r=te(e,t);return w.from(r).filter(function(n){return n.length>0})},re={copy:function(n,t){var e=n.dom(),r=t.dom();Jt(e)&&Jt(r)&&(r.style.cssText=e.style.cssText)},set:ne,preserve:function(n,t){var e=Dt.get(n,"style"),r=t(n);return(e===undefined?Dt.remove:Dt.set)(n,"style",e),r},setAll:function(n,t){var e=n.dom();L.each(t,function(n,t){Qt(e,t,n)})},setOptions:function(n,t){var e=n.dom();L.each(t,function(n,t){n.fold(function(){Zt(e,t)},function(n){Qt(e,t,n)})})},remove:function(n,t){var e=n.dom();Zt(e,t),Dt.has(n,"style")&&""===Yn.trim(Dt.get(n,"style"))&&Dt.remove(n,"style")},get:function(n,t){var e=n.dom(),r=window.getComputedStyle(e).getPropertyValue(t),o=""!==r||Nt.inBody(n)?r:te(e,t);return null===o?undefined:o},getRaw:ee,getAllRaw:function(n){var t={},e=n.dom();if(Jt(e))for(var r=0;r<e.style.length;r++){var o=e.style.item(r);t[o]=e.style[o]}return t},isValidValue:function(n,t,e){var r=en.fromTag(n);return ne(r,t,e),ee(r,t).isSome()},reflow:function(n){return n.dom().offsetWidth},transfer:function(n,t,e){xt.isElement(n)&&xt.isElement(t)&&B.each(e,function(e){var r,o;r=t,ee(n,o=e).each(function(n){ee(r,o).isNone()&&ne(r,o,n)})})}},oe=function(n,t){dt.parent(n).each(function(e){e.dom().insertBefore(t.dom(),n.dom())})},ie=function(n,t){n.dom().appendChild(t.dom())},ue={before:oe,after:function(n,t){dt.nextSibling(n).fold(function(){dt.parent(n).each(function(n){ie(n,t)})},function(n){oe(n,t)})},prepend:function(n,t){dt.firstChild(n).fold(function(){ie(n,t)},function(e){n.dom().insertBefore(t.dom(),e.dom())})},append:ie,appendAt:function(n,t,e){dt.child(n,e).fold(function(){ie(n,t)},function(n){oe(n,t)})},wrap:function(n,t){oe(n,t),ie(t,n)}},ae={before:function(n,t){B.each(t,function(t){ue.before(n,t)})},after:function(n,t){B.each(t,function(e,r){var o=0===r?n:t[r-1];ue.after(o,e)})},prepend:function(n,t){B.each(t.slice().reverse(),function(t){ue.prepend(n,t)})},append:function(n,t){B.each(t,function(t){ue.append(n,t)})}},ce=function(n){var t=n.dom();null!==t.parentNode&&t.parentNode.removeChild(t)},le={empty:function(n){n.dom().textContent="",B.each(dt.children(n),function(n){ce(n)})},remove:ce,unwrap:function(n){var t=dt.children(n);t.length>0&&ae.before(n,t),ce(n)}},se=X.immutable("minRow","minCol","maxRow","maxCol"),fe=function(n,t){var e,r,o,i,u,a,c,l,s,f,d=function(n){return fn.is(n.element(),t)},m=Gt(n),g=Kt.generate(m),p=(r=d,o=(e=g).grid().columns(),i=e.grid().rows(),u=o,a=0,c=0,L.each(e.access(),function(n){if(r(n)){var t=n.row(),e=t+n.rowspan()-1,o=n.column(),l=o+n.colspan()-1;t<i?i=t:e>a&&(a=e),o<u?u=o:l>c&&(c=l)}}),se(i,u,a,c)),h="th:not("+t+"),td:not("+t+")",v=gt.filterFirstLayer(n,"th,td",function(n){return fn.is(n,h)});return B.each(v,le.remove),function(n,t,e,r){for(var o,i,u,a=t.grid().columns(),c=t.grid().rows(),l=0;l<c;l++)for(var s=!1,f=0;f<a;f++)l<e.minRow()||l>e.maxRow()||f<e.minCol()||f>e.maxCol()||(Kt.getAt(t,l,f).filter(r).isNone()?(o=s,i=n[l].element(),u=en.fromTag("td"),ue.append(u,en.fromTag("br")),(o?ue.append:ue.prepend)(i,u)):s=!0)}(m,g,p,d),l=n,s=p,f=B.filter(gt.firstLayer(l,"tr"),function(n){return 0===n.dom().childElementCount}),B.each(f,le.remove),s.minCol()!==s.maxCol()&&s.minRow()!==s.maxRow()||B.each(gt.firstLayer(l,"th,td"),function(n){Dt.remove(n,"rowspan"),Dt.remove(n,"colspan")}),Dt.remove(l,"width"),Dt.remove(l,"height"),re.remove(l,"width"),re.remove(l,"height"),n},de=function(n,t){return en.fromDom(n.dom().cloneNode(t))},me=function(n){return de(n,!0)},ge=function(n,t){var e=en.fromTag(t),r=Dt.clone(n);return Dt.setAll(e,r),e},pe=function(n){return de(n,!1)},he=me,ve=function(n,t){var e=ge(n,t),r=dt.children(me(n));return ae.append(e,r),e},be=(u=xt.isText,a="text",c=function(n){return u(n)?w.from(n.dom().nodeValue):w.none()},l=tt.detect().browser,{get:function(n){if(!u(n))throw new Error("Can only get "+a+" value of a "+a+" node");return s(n).getOr("")},getOption:s=l.isIE()&&10===l.version.major?function(n){try{return c(n)}catch(t){return w.none()}}:c,set:function(n,t){if(!u(n))throw new Error("Can only set raw "+a+" value of a "+a+" node");n.dom().nodeValue=t}}),we={get:function(n){return be.get(n)},getOption:function(n){return be.getOption(n)},set:function(n,t){be.set(n,t)}},ye=function(n){return"img"===xt.name(n)?1:we.getOption(n).fold(function(){return dt.children(n).length},function(n){return n.length})},xe=["img","br"],Ce=ye,Se=function(n){return we.getOption(n).filter(function(n){return 0!==n.trim().length||n.indexOf("\xa0")>-1}).isSome()||B.contains(xe,xt.name(n))},Re=function(n,t){var e=function(n){for(var r=dt.children(n),o=r.length-1;o>=0;o--){var i=r[o];if(t(i))return w.some(i);var u=e(i);if(u.isSome())return u}return w.none()};return e(n)},Te={first:function(n){return Mt.descendant(n,Se)},last:function(n){return Re(n,Se)}},De=function(){var n=en.fromTag("td");return ue.append(n,en.fromTag("br")),n},Ae=function(n,t,e){var r=ve(n,t);return L.each(e,function(n,t){null===n?Dt.remove(r,t):Dt.set(r,t,n)}),r},ke=function(n){return n},Ne=function(n){return function(){return en.fromTag("tr",n.dom())}},Oe=function(n,t,e){return{row:Ne(t),cell:function(t){var r,o,i,u=dt.owner(t.element()),a=en.fromTag(xt.name(t.element()),u.dom()),c=e.getOr(["strong","em","b","i","span","font","h1","h2","h3","h4","h5","h6","p","div"]),l=c.length>0?(r=t.element(),o=a,i=c,Te.first(r).map(function(n){var t=i.join(","),e=Bt.ancestors(n,t,function(n){return ot.eq(n,r)});return B.foldr(e,function(n,t){var e=pe(t);return ue.append(n,e),e},o)}).getOr(o)):a;return ue.append(l,en.fromTag("br")),re.copy(t.element(),a),re.remove(a,"height"),1!==t.colspan()&&re.remove(t.element(),"width"),n(t.element(),a),a},replace:Ae,gap:De}},Ee=function(n){return{row:Ne(n),cell:De,replace:ke,gap:De}},Be=function(n,t){var e=(t||document).createElement("div");return e.innerHTML=n,dt.children(en.fromDom(e))},Ie=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","li","table","thead","tbody","tfoot","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"],Pe=function(){return{up:m.constant({selector:qt.ancestor,closest:qt.closest,predicate:Mt.ancestor,all:dt.parents}),down:m.constant({selector:Bt.descendants,predicate:Et.descendants}),styles:m.constant({get:re.get,getRaw:re.getRaw,set:re.set,remove:re.remove}),attrs:m.constant({get:Dt.get,set:Dt.set,remove:Dt.remove,copyTo:function(n,t){var e=Dt.clone(n);Dt.setAll(t,e)}}),insert:m.constant({before:ue.before,after:ue.after,afterAll:ae.after,append:ue.append,appendAll:ae.append,prepend:ue.prepend,wrap:ue.wrap}),remove:m.constant({unwrap:le.unwrap,remove:le.remove}),create:m.constant({nu:en.fromTag,clone:function(n){return en.fromDom(n.dom().cloneNode(!1))},text:en.fromText}),query:m.constant({comparePosition:function(n,t){return n.dom().compareDocumentPosition(t.dom())},prevSibling:dt.prevSibling,nextSibling:dt.nextSibling}),property:m.constant({children:dt.children,name:xt.name,parent:dt.parent,isText:xt.isText,isComment:xt.isComment,isElement:xt.isElement,getText:we.get,setText:we.set,isBoundary:function(n){return!!xt.isElement(n)&&("body"===xt.name(n)||B.contains(Ie,xt.name(n)))},isEmptyTag:function(n){return!!xt.isElement(n)&&B.contains(["br","img","hr","input"],xt.name(n))}}),eq:ot.eq,is:ot.is}},We=(X.immutable("left","right"),function(n,t,e,r){var o=t(n,e);return B.foldr(r,function(e,r){var o=t(n,r);return _e(n,e,o)},o)}),_e=function(n,t,e){return t.bind(function(t){return e.filter(m.curry(n.eq,t))})},Me=function(n,t,e){return e.length>0?We(n,t,(r=e)[0],r.slice(1)):w.none();var r},Le=function(n,t){return m.curry(n.eq,t)},qe=function(n,t,e,r){var o=r!==undefined?r:m.constant(!1),i=[t].concat(n.up().all(t)),u=[e].concat(n.up().all(e)),a=function(n){return B.findIndex(n,o).fold(function(){return n},function(t){return n.slice(0,t+1)})},c=a(i),l=a(u),s=B.find(c,function(t){return B.exists(l,Le(n,t))});return{firstpath:m.constant(c),secondpath:m.constant(l),shared:m.constant(s)}},ze=qe,Fe=function(n,t,e){return Me(n,t,e)},je=function(n,t,e,r){return ze(n,t,e,r)},He=Pe(),Ve=function(n,t){return Fe(He,function(t,e){return n(e)},t)},Ue=function(n,t,e){return je(He,n,t,e)},Ge=function(n,t){return t.column()>=n.startCol()&&t.column()+t.colspan()-1<=n.finishCol()&&t.row()>=n.startRow()&&t.row()+t.rowspan()-1<=n.finishRow()},Xe=function(n,t){var e=t.column(),r=t.column()+t.colspan()-1,o=t.row(),i=t.row()+t.rowspan()-1;return e<=n.finishCol()&&r>=n.startCol()&&o<=n.finishRow()&&i>=n.startRow()},Ye=function(n,t){for(var e=!0,r=m.curry(Ge,t),o=t.startRow();o<=t.finishRow();o++)for(var i=t.startCol();i<=t.finishCol();i++)e=e&&Kt.getAt(n,o,i).exists(r);return e?w.some(t):w.none()},$e=function(n,t,e){var r=Kt.findItem(n,t,ot.eq),o=Kt.findItem(n,e,ot.eq);return r.bind(function(n){return o.map(function(t){return e=n,r=t,nn.bounds(Math.min(e.row(),r.row()),Math.min(e.column(),r.column()),Math.max(e.row()+e.rowspan()-1,r.row()+r.rowspan()-1),Math.max(e.column()+e.colspan()-1,r.column()+r.colspan()-1));var e,r})})},Ke=$e,Je=function(n,t,e){return $e(n,t,e).bind(function(t){return Ye(n,t)})},Qe=function(n,t,e,r){return Kt.findItem(n,t,ot.eq).bind(function(t){var o=e>0?t.row()+t.rowspan()-1:t.row(),i=r>0?t.column()+t.colspan()-1:t.column();return Kt.getAt(n,o+e,i+r).map(function(n){return n.element()})})},Ze=function(n,t,e){return Ke(n,t,e).map(function(t){var e=Kt.filterItems(n,m.curry(Xe,t));return B.map(e,function(n){return n.element()})})},nr=function(n,t){return Kt.findItem(n,t,function(n,t){return ot.contains(t,n)}).bind(function(n){return n.element()})},tr=function(n){var t=Gt(n);return Kt.generate(t)},er=function(n,t,e){return Vt(n).bind(function(r){var o=tr(r);return Qe(o,n,t,e)})},rr=function(n,t,e){var r=tr(n);return Ze(r,t,e)},or=function(n,t,e,r,o){var i=tr(n),u=ot.eq(n,e)?t:nr(i,t),a=ot.eq(n,o)?r:nr(i,r);return Ze(i,u,a)},ir=function(n,t,e){var r=tr(n);return Je(r,t,e)},ur=function(n,t){return qt.ancestor(n,"table")},ar=X.immutableBag(["boxes","start","finish"],[]),cr=function(n,t,e){var r=function(n){return function(t){return e(t)||ot.eq(t,n)}};return ot.eq(n,t)?w.some(ar({boxes:w.some([n]),start:n,finish:t})):ur(n).bind(function(o){return ur(t).bind(function(i){if(ot.eq(o,i))return w.some(ar({boxes:rr(o,n,t),start:n,finish:t}));if(ot.contains(o,i)){var u=(a=Bt.ancestors(t,"td,th",r(o))).length>0?a[a.length-1]:t;return w.some(ar({boxes:or(o,n,o,t,i),start:n,finish:u}))}if(ot.contains(i,o)){var a,c=(a=Bt.ancestors(n,"td,th",r(i))).length>0?a[a.length-1]:n;return w.some(ar({boxes:or(i,n,o,t,i),start:n,finish:c}))}return Ue(n,t).shared().bind(function(u){return qt.closest(u,"table",e).bind(function(e){var u=Bt.ancestors(t,"td,th",r(e)),a=u.length>0?u[u.length-1]:t,c=Bt.ancestors(n,"td,th",r(e)),l=c.length>0?c[c.length-1]:n;return w.some(ar({boxes:or(e,n,o,t,i),start:l,finish:a}))})})})})},lr=cr,sr=function(n,t){var e=Bt.descendants(n,t);return e.length>0?w.some(e):w.none()},fr=function(n,t,e,r,o){return(i=n,u=o,B.find(i,function(n){return fn.is(n,u)})).bind(function(n){return er(n,t,e).bind(function(n){return e=r,qt.ancestor(t=n,"table").bind(function(n){return qt.descendant(n,e).bind(function(n){return cr(n,t).bind(function(n){return n.boxes().map(function(t){return{boxes:m.constant(t),start:m.constant(n.start()),finish:m.constant(n.finish())}})})})});var t,e})});var i,u},dr=function(n,t,e){return qt.descendant(n,t).bind(function(t){return qt.descendant(n,e).bind(function(n){return Ve(ur,[t,n]).map(function(e){return{first:m.constant(t),last:m.constant(n),table:m.constant(e)}})})})},mr=function(n,t){return sr(n,t)},gr=function(n,t,e){return dr(n,t,e).bind(function(t){var e=function(t){return ot.eq(n,t)},r=qt.ancestor(t.first(),"thead,tfoot,tbody,table",e),o=qt.ancestor(t.last(),"thead,tfoot,tbody,table",e);return r.bind(function(n){return o.bind(function(e){return ot.eq(n,e)?ir(t.table(),t.first(),t.last()):w.none()})})})},pr="data-mce-selected",hr="data-mce-first-selected",vr="data-mce-last-selected",br={selected:m.constant(pr),selectedSelector:m.constant("td[data-mce-selected],th[data-mce-selected]"),attributeSelector:m.constant("[data-mce-selected]"),firstSelected:m.constant(hr),firstSelectedSelector:m.constant("td[data-mce-first-selected],th[data-mce-first-selected]"),lastSelected:m.constant(vr),lastSelectedSelector:m.constant("td[data-mce-last-selected],th[data-mce-last-selected]")},wr=function(n){if(!z.isArray(n))throw new Error("cases must be an array");if(0===n.length)throw new Error("there must be at least one case");var t=[],e={};return B.each(n,function(r,o){var i=L.keys(r);if(1!==i.length)throw new Error("one and only one name per case");var u=i[0],a=r[u];if(e[u]!==undefined)throw new Error("duplicate key detected:"+u);if("cata"===u)throw new Error("cannot have a case named cata (sorry)");if(!z.isArray(a))throw new Error("case arguments must be an array");t.push(u),e[u]=function(){var e=arguments.length;if(e!==a.length)throw new Error("Wrong number of arguments to case "+u+". Expected "+a.length+" ("+a+"), got "+e);for(var r=new Array(e),i=0;i<r.length;i++)r[i]=arguments[i];return{fold:function(){if(arguments.length!==n.length)throw new Error("Wrong number of arguments to fold. Expected "+n.length+", got "+arguments.length);return arguments[o].apply(null,r)},match:function(n){var e=L.keys(n);if(t.length!==e.length)throw new Error("Wrong number of arguments to match. Expected: "+t.join(",")+"\nActual: "+e.join(","));if(!B.forall(t,function(n){return B.contains(e,n)}))throw new Error("Not all branches were specified when using match. Specified: "+e.join(", ")+"\nRequired: "+t.join(", "));return n[u].apply(null,r)},log:function(n){console.log(n,{constructors:t,constructor:u,params:r})}}}}),e},yr=wr([{none:[]},{multiple:["elements"]},{single:["selection"]}]),xr={cata:function(n,t,e,r){return n.fold(t,e,r)},none:yr.none,multiple:yr.multiple,single:yr.single},Cr=function(n,t){return xr.cata(t.get(),m.constant([]),m.identity,m.constant([n]))},Sr=function(n,t){return xr.cata(t.get(),w.none,function(t,e){return 0===t.length?w.none():gr(n,br.firstSelectedSelector(),br.lastSelectedSelector()).bind(function(n){return t.length>1?w.some({bounds:m.constant(n),cells:m.constant(t)}):w.none()})},w.none)},Rr=function(n,t){var e=Cr(n,t);return e.length>0&&B.forall(e,function(n){return Dt.has(n,"rowspan")&&parseInt(Dt.get(n,"rowspan"),10)>1||Dt.has(n,"colspan")&&parseInt(Dt.get(n,"colspan"),10)>1})?w.some(e):w.none()},Tr=Cr,Dr=function(n){return{element:m.constant(n),mergable:w.none,unmergable:w.none,selection:m.constant([n])}},Ar=X.immutable("element","clipboard","generators"),kr={noMenu:Dr,forMenu:function(n,t,e){return{element:m.constant(e),mergable:m.constant(Sr(t,n)),unmergable:m.constant(Rr(e,n)),selection:m.constant(Tr(e,n))}},notCell:function(n){return Dr(n)},paste:Ar,pasteRows:function(n,t,e,r,o){return{element:m.constant(e),mergable:w.none,unmergable:w.none,selection:m.constant(Tr(e,n)),clipboard:m.constant(r),generators:m.constant(o)}}},Nr={registerEvents:function(n,t,e,r){n.on("BeforeGetContent",function(e){!0===e.selection&&xr.cata(t.get(),m.noop,function(t){var r;e.preventDefault(),(r=t,Vt(r[0]).map(he).map(function(n){return[fe(n,br.attributeSelector())]})).each(function(t){e.content=B.map(t,function(t){return e=t,n.selection.serializer.serialize(e.dom(),{});var e}).join("")})},m.noop)}),n.on("BeforeSetContent",function(t){!0===t.selection&&!0===t.paste&&w.from(n.dom.getParent(n.selection.getStart(),"th,td")).each(function(o){var i=en.fromDom(o);Vt(i).bind(function(o){var u=B.filter(Be(t.content),function(n){return"meta"!==xt.name(n)});if(1===u.length&&"table"===xt.name(u[0])){t.preventDefault();var a=en.fromDom(n.getDoc()),c=Ee(a),l=kr.paste(i,u[0],c);e.pasteCells(o,l).each(function(t){n.selection.setRng(t),n.focus(),r.clear(o)})}})})})}},Or={render:function(n,t,e,r){var o=en.fromTag("table");re.setAll(o,{"border-collapse":"collapse",width:"100%"}),Dt.set(o,"border","1");var i=en.fromTag("tbody");ue.append(o,i);for(var u=[],a=0;a<n;a++){for(var c=en.fromTag("tr"),l=0;l<t;l++){var s=a<e||l<r?en.fromTag("th"):en.fromTag("td");l<r&&Dt.set(s,"scope","row"),a<e&&Dt.set(s,"scope","col"),ue.append(s,en.fromTag("br")),re.set(s,"width",100/t+"%"),ue.append(c,s)}u.push(c)}return ae.append(i,u),o}},Er=function(n){return n.dom().innerHTML},Br=function(n){var t=en.fromTag("div"),e=en.fromDom(n.dom().cloneNode(!0));return ue.append(t,e),Er(t)},Ir=function(n,t){n.selection.select(t.dom(),!0),n.selection.collapse(!0)},Pr={insert:function(n,t,e){var r,o=Or.render(e,t,0,0);Dt.set(o,"id","__mce");var i,u,a=Br(o);return n.insertContent(a),r=n.dom.get("__mce"),n.dom.setAttrib(r,"id",null),n.$("tr",r).each(function(t,e){n.fire("newrow",{node:e}),n.$("th,td",e).each(function(t,e){n.fire("newcell",{node:e})})}),n.dom.setAttribs(r,n.settings.table_default_attributes||{}),n.dom.setStyles(r,n.settings.table_default_styles||{}),i=n,u=en.fromDom(r),qt.descendant(u,"td,th").each(m.curry(Ir,i)),r}},Wr=function(n,t){var e=function(e){var r=t(e);if(r<=0||null===r){var o=re.get(e,n);return parseFloat(o)||0}return r},r=function(n,t){return B.foldl(t,function(t,e){var r=re.get(n,e),o=r===undefined?0:parseInt(r,10);return isNaN(o)?t:t+o},0)};return{set:function(t,e){if(!z.isNumber(e)&&!e.match(/^[0-9]+$/))throw n+".set accepts only positive integer values. Value was "+e;var r=t.dom();Jt(r)&&(r.style[n]=e+"px")},get:e,getOuter:e,aggregate:r,max:function(n,t,e){var o=r(n,e);return t>o?t-o:0}}},_r=Wr("height",function(n){return Nt.inBody(n)?n.dom().getBoundingClientRect().height:n.dom().offsetHeight}),Mr=function(n){return _r.get(n)},Lr=function(n){return _r.getOuter(n)},qr=Wr("width",function(n){return n.dom().offsetWidth}),zr=function(n){return qr.get(n)},Fr=function(n){return qr.getOuter(n)},jr=tt.detect(),Hr=function(n,t,e){return r=re.get(n,t),o=e,i=parseFloat(r),isNaN(i)?o:i;var r,o,i},Vr=function(n){return jr.browser.isIE()||jr.browser.isEdge()?(e=Hr(t=n,"padding-top",0),r=Hr(t,"padding-bottom",0),o=Hr(t,"border-top-width",0),i=Hr(t,"border-bottom-width",0),u=t.dom().getBoundingClientRect().height,"border-box"===re.get(t,"box-sizing")?u:u-e-r-(o+i)):Hr(n,"height",Mr(n));var t,e,r,o,i,u},Ur=/(\d+(\.\d+)?)(\w|%)*/,Gr=/(\d+(\.\d+)?)%/,Xr=/(\d+(\.\d+)?)px|em/,Yr=function(n,t){re.set(n,"height",t+"px")},$r=function(n,t,e,r){var o,i,u,a,c,l=parseInt(n,10);return Yn.endsWith(n,"%")&&"table"!==xt.name(t)?(i=l,u=e,a=r,c=Vt(o=t).map(function(n){var t=u(n);return Math.floor(i/100*t)}).getOr(i),a(o,c),c):l},Kr=function(n){var t,e=re.getRaw(t=n,"height").getOrThunk(function(){return Vr(t)+"px"});return e?$r(e,n,Mr,Yr):Mr(n)},Jr=function(n,t){return Dt.has(n,t)?parseInt(Dt.get(n,t),10):1},Qr=function(n){return re.getRaw(n,"width").fold(function(){return w.from(Dt.get(n,"width"))},function(n){return w.some(n)})},Zr=function(n,t){return n/t.pixelWidth()*100},no={percentageBasedSizeRegex:m.constant(Gr),pixelBasedSizeRegex:m.constant(Xr),setPixelWidth:function(n,t){re.set(n,"width",t+"px")},setPercentageWidth:function(n,t){re.set(n,"width",t+"%")},setHeight:Yr,getPixelWidth:function(n,t){return Qr(n).fold(function(){var t=zr(n);return parseInt(t,10)},function(e){return function(n,t,e){if(Xr.test(t)){var r=Xr.exec(t);return parseInt(r[1],10)}if(Gr.test(t)){var o=Gr.exec(t),i=parseFloat(o[1]);return i/100*e.pixelWidth()}var u=zr(n);return parseInt(u,10)}(n,e,t)})},getPercentageWidth:function(n,t){return Qr(n).fold(function(){var e=zr(n),r=parseInt(e,10);return Zr(r,t)},function(e){return function(n,t,e){if(Gr.test(t)){var r=Gr.exec(t);return parseFloat(r[1])}var o=zr(n),i=parseInt(o,10);return Zr(i,e)}(n,e,t)})},getGenericWidth:function(n){return Qr(n).bind(function(n){if(Ur.test(n)){var t=Ur.exec(n);return w.some({width:m.constant(t[1]),unit:m.constant(t[3])})}return w.none()})},setGenericWidth:function(n,t,e){re.set(n,"width",t+e)},getHeight:function(n){return e="rowspan",Kr(t=n)/Jr(t,e);var t,e},getRawWidth:Qr},to=function(n,t){no.getGenericWidth(n).each(function(e){var r=e.width()/2;no.setGenericWidth(n,r,e.unit()),no.setGenericWidth(t,r,e.unit())})},eo=function(n,t){var e=t||en.fromDom(document.documentElement);return Mt.ancestor(n,m.curry(ot.eq,e)).isSome()},ro=function(n){var t=n.dom();return t===t.window?n:xt.isDocument(n)?t.defaultView||t.parentWindow:null},oo=function(n,t){return{left:m.constant(n),top:m.constant(t),translate:function(e,r){return oo(n+e,t+r)}}},io=function(n,t){return n!==undefined?n:t!==undefined?t:0},uo=function(n){var t,e=n.dom(),r=e.ownerDocument,o=r.body,i=en.fromDom(r.documentElement);return o===e?oo(o.offsetLeft,o.offsetTop):eo(n,i)?(t=e.getBoundingClientRect(),oo(t.left,t.top)):oo(0,0)},ao=function(n){var t=n.dom().ownerDocument,e=t.body,r=ro(en.fromDom(t)),o=t.documentElement,i=io(r.pageYOffset,o.scrollTop),u=io(r.pageXOffset,o.scrollLeft),a=io(o.clientTop,e.clientTop),c=io(o.clientLeft,e.clientLeft);return uo(n).translate(u-c,i-a)},co=X.immutable("row","y"),lo=X.immutable("col","x"),so=function(n){return ao(n).left()+Fr(n)},fo=function(n){return ao(n).left()},mo=function(n,t){return lo(n,fo(t))},go=function(n,t){return lo(n,so(t))},po=function(n){return ao(n).top()},ho=function(n,t,e){if(0===e.length)return[];var r=B.map(e.slice(1),function(t,e){return t.map(function(t){return n(e,t)})}),o=e[e.length-1].map(function(n){return t(e.length-1,n)});return r.concat([o])},vo={delta:m.identity,positions:m.curry(ho,function(n,t){return co(n,po(t))},function(n,t){return co(n,po(t)+Lr(t))}),edge:po},bo={delta:m.identity,edge:fo,positions:m.curry(ho,mo,go)},wo={height:vo,rtl:{delta:function(n,t){return-n},edge:so,positions:m.curry(ho,go,mo)},ltr:bo},yo={ltr:wo.ltr,rtl:wo.rtl},xo=function(n){var t=function(t){return n(t).isRtl()?yo.rtl:yo.ltr};return{delta:function(n,e){return t(e).delta(n,e)},edge:function(n){return t(n).edge(n)},positions:function(n,e){return t(e).positions(n,e)}}},Co=function(n){var t=Gt(n);return Kt.generate(t).grid()},So=function(n){var t=n,e=function(){return t};return{get:e,set:function(n){t=n},clone:function(){return So(e())}}},Ro=function(n,t){return To(n,t,{validate:z.isFunction,label:"function"})},To=function(n,t,e){if(0===t.length)throw new Error("You must specify at least one required field.");return V("required",t),G(t),function(r){var o=L.keys(r);B.forall(t,function(n){return B.contains(o,n)})||j(t,o),n(t,o);var i=B.filter(t,function(n){return!e.validate(r[n],n)});return i.length>0&&U(i,e.label),r}},Do=m.noop,Ao={exactly:m.curry(Ro,function(n,t){var e=B.filter(t,function(t){return!B.contains(n,t)});e.length>0&&H(e)}),ensure:m.curry(Ro,Do),ensureWith:m.curry(To,Do)},ko=function(n){var t=Dt.has(n,"colspan")?parseInt(Dt.get(n,"colspan"),10):1,e=Dt.has(n,"rowspan")?parseInt(Dt.get(n,"rowspan"),10):1;return{element:m.constant(n),colspan:m.constant(t),rowspan:m.constant(e)}},No=Ao.exactly(["cell","row","replace","gap"]),Oo=function(n,t){No(n);var e=So(w.none()),r=t!==undefined?t:ko,o=function(t){var e,o=r(t);return e=o,n.cell(e)},i=function(n){var t=o(n);return e.get().isNone()&&e.set(w.some(t)),u=w.some({item:n,replacement:t}),t},u=w.none();return{getOrInit:function(n,t){return u.fold(function(){return i(n)},function(e){return t(n,e.item)?e.replacement:i(n)})},cursor:e.get}},Eo=function(n,t){return function(e){var r=So(w.none());No(e);var o=[],i=function(i){var u=e.replace(i,t,{scope:n});return o.push({item:i,sub:u}),r.get().isNone()&&r.set(w.some(u)),u};return{replaceOrInit:function(n,t){return(e=n,r=t,B.find(o,function(n){return r(n.item,e)})).fold(function(){return i(n)},function(e){return t(n,e.item)?e.sub:i(n)});var e,r},cursor:r.get}}},Bo=function(n){No(n);var t=So(w.none());return{combine:function(e){return t.get().isNone()&&t.set(w.some(e)),function(){var t=n.cell({element:m.constant(e),colspan:m.constant(1),rowspan:m.constant(1)});return re.remove(t,"width"),re.remove(e,"width"),t}},cursor:t.get}},Io=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","table","thead","tfoot","tbody","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"],Po=function(n,t){var e=n.property().name(t);return B.contains(Io,e)},Wo=function(n,t){return B.contains(["br","img","hr","input"],n.property().name(t))},_o=Po,Mo=function(n,t){var e=n.property().name(t);return B.contains(["ol","ul"],e)},Lo=Wo,qo=Pe(),zo=function(n){return _o(qo,n)},Fo=function(n){return Mo(qo,n)},jo=function(n){return Lo(qo,n)},Ho=function(n){var t,e=function(n){return"br"===xt.name(n)},r=function(n){return Te.last(n).bind(function(t){var r,o=(r=t,dt.nextSibling(r).map(function(n){return!!zo(n)||(jo(n)?"img"!==xt.name(n):void 0)}).getOr(!1));return dt.parent(t).map(function(r){return!0===o||(i=r,"li"===xt.name(i)||Mt.ancestor(i,Fo).isSome())||e(t)||zo(r)&&!ot.eq(n,r)?[]:[en.fromTag("br")];var i})}).getOr([])},o=0===(t=B.bind(n,function(n){var t,o=dt.children(n);return t=o,B.forall(t,function(n){return e(n)||xt.isText(n)&&0===we.get(n).trim().length})?[]:o.concat(r(n))})).length?[en.fromTag("br")]:t;le.empty(n[0]),ae.append(n[0],o)},Vo=function(n){return function(){for(var t=new Array(arguments.length),e=0;e<t.length;e++)t[e]=arguments[e];if(0===t.length)throw new Error("Can't merge zero objects");for(var r={},o=0;o<t.length;o++){var i=t[o];for(var u in i)i.hasOwnProperty(u)&&(r[u]=n(r[u],i[u]))}return r}},Uo=Vo(function(n,t){return z.isObject(n)&&z.isObject(t)?Uo(n,t):t}),Go=Vo(function(n,t){return t}),Xo={deepMerge:Uo,merge:Go},Yo=function(n){for(var t=[],e=function(n){t.push(n)},r=0;r<n.length;r++)n[r].each(e);return t},$o=function(n,t){for(var e=0;e<n.length;e++){var r=t(n[e],e);if(r.isSome())return r}return w.none()},Ko=function(n,t){return nn.rowcells(t,n.section())},Jo=function(n,t){return n.cells()[t]},Qo={addCell:function(n,t,e){var r=n.cells(),o=r.slice(0,t),i=r.slice(t),u=o.concat([e]).concat(i);return Ko(n,u)},setCells:Ko,mutateCell:function(n,t,e){n.cells()[t]=e},getCell:Jo,getCellElement:function(n,t){return Jo(n,t).element()},mapCells:function(n,t){var e=n.cells(),r=B.map(e,t);return nn.rowcells(r,n.section())},cellLength:function(n){return n.cells().length}},Zo=function(n,t){if(0===n.length)return 0;var e=n[0];return B.findIndex(n,function(n){return!t(e.element(),n.element())}).fold(function(){return n.length},function(n){return n})},ni=function(n,t,e,r){var o,i,u,a,c=(o=n,i=t,o[i]).cells().slice(e),l=Zo(c,r),s=(u=n,a=e,B.map(u,function(n){return Qo.getCell(n,a)})).slice(t),f=Zo(s,r);return{colspan:m.constant(l),rowspan:m.constant(f)}},ti=function(n,t){var e=B.map(n,function(n,t){return B.map(n.cells(),function(n,t){return!1})});return B.map(n,function(r,o){var i=B.bind(r.cells(),function(r,i){if(!1===e[o][i]){var u=ni(n,o,i,t);return function(n,t,r,o){for(var i=n;i<n+r;i++)for(var u=t;u<t+o;u++)e[i][u]=!0}(o,i,u.rowspan(),u.colspan()),[nn.detailnew(r.element(),u.rowspan(),u.colspan(),r.isNew())]}return[]});return nn.rowdetails(i,r.section())})},ei=function(n,t,e){for(var r=[],o=0;o<n.grid().rows();o++){for(var i=[],u=0;u<n.grid().columns();u++){var a=Kt.getAt(n,o,u).map(function(n){return nn.elementnew(n.element(),e)}).getOrThunk(function(){return nn.elementnew(t.gap(),!0)});i.push(a)}var c=nn.rowcells(i,n.all()[o].section());r.push(c)}return r},ri=function(n,t,e,r){e===r?Dt.remove(n,t):Dt.set(n,t,e)},oi=function(n,t){var e=[],r=[],o=function(t,o){t.length>0?function(t,o){var i=qt.child(n,o).getOrThunk(function(){var t=en.fromTag(o,dt.owner(n).dom());return ue.append(n,t),t});le.empty(i);var u=B.map(t,function(n){n.isNew()&&e.push(n.element());var t=n.element();return le.empty(t),B.each(n.cells(),function(n){n.isNew()&&r.push(n.element()),ri(n.element(),"colspan",n.colspan(),1),ri(n.element(),"rowspan",n.rowspan(),1),ue.append(t,n.element())}),t});ae.append(i,u)}(t,o):qt.child(n,o).bind(le.remove)},i=[],u=[],a=[];return B.each(t,function(n){switch(n.section()){case"thead":i.push(n);break;case"tbody":u.push(n);break;case"tfoot":a.push(n)}}),o(i,"thead"),o(u,"tbody"),o(a,"tfoot"),{newRows:m.constant(e),newCells:m.constant(r)}},ii=function(n){return B.map(n,function(n){var t=pe(n.element());return B.each(n.cells(),function(n){var e=he(n.element());ri(e,"colspan",n.colspan(),1),ri(e,"rowspan",n.rowspan(),1),ue.append(t,e)}),t})},ui=function(n,t){for(var e=[],r=0;r<n;r++)e.push(t(r));return e},ai=function(n,t){for(var e=[],r=n;r<t;r++)e.push(r);return e},ci=function(n,t){if(t<0||t>=n.length-1)return w.none();var e=n[t].fold(function(){var e=B.reverse(n.slice(0,t));return $o(e,function(n,t){return n.map(function(n){return{value:n,delta:t+1}})})},function(n){return w.some({value:n,delta:0})}),r=n[t+1].fold(function(){var e=n.slice(t+1);return $o(e,function(n,t){return n.map(function(n){return{value:n,delta:t+1}})})},function(n){return w.some({value:n,delta:1})});return e.bind(function(n){return r.map(function(t){var e=t.delta+n.delta;return Math.abs(t.value-n.value)/e})})},li=function(n,t,e){var r=n();return B.find(r,t).orThunk(function(){return w.from(r[0]).orThunk(e)}).map(function(n){return n.element()})},si=function(n){var t=n.grid(),e=ai(0,t.columns()),r=ai(0,t.rows());return B.map(e,function(t){return li(function(){return B.bind(r,function(e){return Kt.getAt(n,e,t).filter(function(n){return n.column()===t}).fold(m.constant([]),function(n){return[n]})})},function(n){return 1===n.colspan()},function(){return Kt.getAt(n,0,t)})})},fi=function(n){var t=n.grid(),e=ai(0,t.rows()),r=ai(0,t.columns());return B.map(e,function(t){return li(function(){return B.bind(r,function(e){return Kt.getAt(n,t,e).filter(function(n){return n.row()===t}).fold(m.constant([]),function(n){return[n]})})},function(n){return 1===n.rowspan()},function(){return Kt.getAt(n,t,0)})})},di=function(n,t,e,r,o){var i=en.fromTag("div");return re.setAll(i,{position:"absolute",left:t-r/2+"px",top:e+"px",height:o+"px",width:r+"px"}),Dt.setAll(i,{"data-column":n,role:"presentation"}),i},mi=function(n,t,e,r,o){var i=en.fromTag("div");return re.setAll(i,{position:"absolute",left:t+"px",top:e-o/2+"px",height:o+"px",width:r+"px"}),Dt.setAll(i,{"data-row":n,role:"presentation"}),i},gi=function(n){var t=n.replace(/\./g,"-");return{resolve:function(n){return t+"-"+n}}},pi={resolve:gi("ephox-snooker").resolve},hi=function(n,t){var e=Dt.get(n,t);return e===undefined||""===e?[]:e.split(" ")},vi=hi,bi=function(n,t,e){var r=hi(n,t).concat([e]);Dt.set(n,t,r.join(" "))},wi=function(n,t,e){var r=B.filter(hi(n,t),function(n){return n!==e});r.length>0?Dt.set(n,t,r.join(" ")):Dt.remove(n,t)},yi=function(n){return vi(n,"class")},xi=function(n,t){return bi(n,"class",t)},Ci=function(n,t){return wi(n,"class",t)},Si=yi,Ri=xi,Ti=Ci,Di=function(n,t){B.contains(yi(n),t)?Ci(n,t):xi(n,t)},Ai=function(n){return n.dom().classList!==undefined},ki=function(n,t){return Ai(n)&&n.dom().classList.contains(t)},Ni={add:function(n,t){Ai(n)?n.dom().classList.add(t):Ri(n,t)},remove:function(n,t){var e;Ai(n)?n.dom().classList.remove(t):Ti(n,t),0===(Ai(e=n)?e.dom().classList:Si(e)).length&&Dt.remove(e,"class")},toggle:function(n,t){return Ai(n)?n.dom().classList.toggle(t):Di(n,t)},toggler:function(n,t){var e,r,o,i,u,a,c=Ai(n),l=n.dom().classList;return e=function(){c?l.remove(t):Ti(n,t)},r=function(){c?l.add(t):Ri(n,t)},o=ki(n,t),i=o||!1,{on:u=function(){r(),i=!0},off:a=function(){e(),i=!1},toggle:function(){(i?a:u)()},isOn:function(){return i}}},has:ki},Oi=pi.resolve("resizer-bar"),Ei=pi.resolve("resizer-rows"),Bi=pi.resolve("resizer-cols"),Ii=function(n){var t=Bt.descendants(n.parent(),"."+Oi);B.each(t,le.remove)},Pi=function(n,t,e){var r=n.origin();B.each(t,function(t,o){t.each(function(t){var o=e(r,t);Ni.add(o,Oi),ue.append(n.parent(),o)})})},Wi=function(n,t,e,r,o,i){var u,a,c,l,s=ao(t),f=e.length>0?o.positions(e,t):[];u=n,a=f,c=s,l=Fr(t),Pi(u,a,function(n,t){var e=mi(t.row(),c.left()-n.left(),t.y()-n.top(),l,7);return Ni.add(e,Ei),e});var d,m,g,p,h=r.length>0?i.positions(r,t):[];d=n,m=h,g=s,p=Lr(t),Pi(d,m,function(n,t){var e=di(t.col(),t.x()-n.left(),g.top()-n.top(),7,p);return Ni.add(e,Bi),e})},_i=function(n,t){var e=Bt.descendants(n.parent(),"."+Oi);B.each(e,t)},Mi=function(n,t,e,r){Ii(n);var o=Gt(t),i=Kt.generate(o),u=fi(i),a=si(i);Wi(n,t,u,a,e,r)},Li=function(n){_i(n,function(n){re.set(n,"display","none")})},qi=function(n){_i(n,function(n){re.set(n,"display","block")})},zi=Ii,Fi=function(n){return Ni.has(n,Ei)},ji=function(n){return Ni.has(n,Bi)},Hi=function(n,t){return B.map(n,function(n){var e,r=(e=n.details(),$o(e,function(n){return dt.parent(n.element()).map(function(n){var t=dt.parent(n).isNone();return nn.elementnew(n,t)})}).getOrThunk(function(){return nn.elementnew(t.row(),!0)}));return nn.rowdatanew(r.element(),n.details(),n.section(),r.isNew())})},Vi=function(n,t){var e=ti(n,ot.eq);return Hi(e,t)},Ui=function(n,t){var e=B.flatten(B.map(n.all(),function(n){return n.cells()}));return B.find(e,function(n){return ot.eq(t,n.element())})},Gi=function(n,t,e,r,o){return function(i,u,a,c,l){var s=Gt(u),f=Kt.generate(s);return t(f,a).map(function(t){var e=ei(f,c,!1),r=n(e,t,ot.eq,o(c)),i=Vi(r.grid(),c);return{grid:m.constant(i),cursor:r.cursor}}).fold(function(){return w.none()},function(n){var t=oi(u,n.grid());return e(u,n.grid(),l),r(u),Mi(i,u,wo.height,l),w.some({cursor:n.cursor,newRows:t.newRows,newCells:t.newCells})})}},Xi=Vi,Yi=function(n,t){return jt(t.element()).bind(function(t){return Ui(n,t)})},$i=function(n,t){var e=B.map(t.selection(),function(t){return jt(t).bind(function(t){return Ui(n,t)})}),r=Yo(e);return r.length>0?w.some(r):w.none()},Ki=function(n,t){return jt(t.element()).bind(function(e){return Ui(n,e).map(function(n){return Xo.merge(n,{generators:t.generators,clipboard:t.clipboard})})})},Ji=function(n,t){var e=B.map(t.selection(),function(t){return jt(t).bind(function(t){return Ui(n,t)})}),r=Yo(e);return r.length>0?w.some(Xo.merge({cells:r},{generators:t.generators,clipboard:t.clipboard})):w.none()},Qi=function(n,t){return t.mergable()},Zi=function(n,t){return t.unmergable()},nu=function(n){return{is:function(t){return n===t},isValue:m.constant(!0),isError:m.constant(!1),getOr:m.constant(n),getOrThunk:m.constant(n),getOrDie:m.constant(n),or:function(t){return nu(n)},orThunk:function(t){return nu(n)},fold:function(t,e){return e(n)},map:function(t){return nu(t(n))},each:function(t){t(n)},bind:function(t){return t(n)},exists:function(t){return t(n)},forall:function(t){return t(n)},toOption:function(){return w.some(n)}}},tu=function(n){return{is:m.constant(!1),isValue:m.constant(!1),isError:m.constant(!0),getOr:m.identity,getOrThunk:function(n){return n()},getOrDie:function(){return m.die(n)()},or:function(n){return n},orThunk:function(n){return n()},fold:function(t,e){return t(n)},map:function(t){return tu(n)},each:m.noop,bind:function(t){return tu(n)},exists:m.constant(!1),forall:m.constant(!0),toOption:w.none}},eu={value:nu,error:tu},ru=function(n,t){return B.map(n,function(){return nn.elementnew(t.cell(),!0)})},ou=function(n,t,e){return n.concat(ui(t,function(t){return Qo.setCells(n[n.length-1],ru(n[n.length-1].cells(),e))}))},iu=function(n,t,e){return B.map(n,function(n){return Qo.setCells(n,n.cells().concat(ru(ai(0,t),e)))})},uu=function(n,t,e){if(n.row()>=t.length||n.column()>Qo.cellLength(t[0]))return eu.error("invalid start address out of table bounds, row: "+n.row()+", column: "+n.column());var r=t.slice(n.row()),o=r[0].cells().slice(n.column()),i=Qo.cellLength(e[0]),u=e.length;return eu.value({rowDelta:m.constant(r.length-u),colDelta:m.constant(o.length-i)})},au=function(n,t){var e=Qo.cellLength(n[0]),r=Qo.cellLength(t[0]);return{rowDelta:m.constant(0),colDelta:m.constant(e-r)}},cu=function(n,t,e){var r=t.colDelta()<0?iu:m.identity;return(t.rowDelta()<0?ou:m.identity)(r(n,Math.abs(t.colDelta()),e),Math.abs(t.rowDelta()),e)},lu=function(n,t,e,r){if(0===n.length)return n;for(var o=t.startRow();o<=t.finishRow();o++)for(var i=t.startCol();i<=t.finishCol();i++)Qo.mutateCell(n[o],i,nn.elementnew(r(),!1));return n},su=function(n,t,e,r){for(var o=!0,i=0;i<n.length;i++)for(var u=0;u<Qo.cellLength(n[0]);u++){var a=e(Qo.getCellElement(n[i],u),t);!0===a&&!1===o?Qo.mutateCell(n[i],u,nn.elementnew(r(),!0)):!0===a&&(o=!1)}return n},fu=function(n,t,e,r){if(t>0&&t<n.length){var o=n[t-1].cells(),i=(u=o,a=e,B.foldl(u,function(n,t){return B.exists(n,function(n){return a(n.element(),t.element())})?n:n.concat([t])},[]));B.each(i,function(o){for(var i=w.none(),u=t;u<n.length;u++)for(var a=0;a<Qo.cellLength(n[0]);a++){var c=n[u].cells()[a];e(c.element(),o.element())&&(i.isNone()&&(i=w.some(r())),i.each(function(t){Qo.mutateCell(n[u],a,nn.elementnew(t,!0))}))}})}var u,a;return n},du=function(n,t,e,r,o){return uu(n,t,e).map(function(i){var u=cu(t,i,r);return function(n,t,e,r,o){for(var i,u,a,c,l,s,f,d=n.row(),g=n.column(),p=d+e.length,h=g+Qo.cellLength(e[0]),v=d;v<p;v++)for(var b=g;b<h;b++){i=t,u=v,a=b,c=o,l=void 0,s=void 0,l=Qo.getCell(i[u],a),s=m.curry(c,l.element()),f=i[u],i.length>1&&Qo.cellLength(f)>1&&(a>0&&s(Qo.getCellElement(f,a-1))||a<f.length-1&&s(Qo.getCellElement(f,a+1))||u>0&&s(Qo.getCellElement(i[u-1],a))||u<i.length-1&&s(Qo.getCellElement(i[u+1],a)))&&su(t,Qo.getCellElement(t[v],b),o,r.cell);var w=Qo.getCellElement(e[v-d],b-g),y=r.replace(w);Qo.mutateCell(t[v],b,nn.elementnew(y,!0))}return t}(n,u,e,r,o)})},mu=function(n,t,e,r,o){fu(t,n,o,r.cell);var i=au(e,t),u=cu(e,i,r),a=au(t,u),c=cu(t,a,r);return c.slice(0,n).concat(u).concat(c.slice(n,c.length))},gu=function(n,t,e,r,o){var i=n.slice(0,t),u=n.slice(t),a=Qo.mapCells(n[e],function(e,i){return t>0&&t<n.length&&r(Qo.getCellElement(n[t-1],i),Qo.getCellElement(n[t],i))?Qo.getCell(n[t],i):nn.elementnew(o(e.element(),r),!0)});return i.concat([a]).concat(u)},pu=function(n,t,e,r,o){return B.map(n,function(n){var i=t>0&&t<Qo.cellLength(n)&&r(Qo.getCellElement(n,t-1),Qo.getCellElement(n,t))?Qo.getCell(n,t):nn.elementnew(o(Qo.getCellElement(n,e),r),!0);return Qo.addCell(n,t,i)})},hu=function(n,t,e,r,o){var i=e+1;return B.map(n,function(n,u){var a=u===t?nn.elementnew(o(Qo.getCellElement(n,e),r),!0):Qo.getCell(n,e);return Qo.addCell(n,i,a)})},vu=function(n,t,e,r,o){var i=t+1,u=n.slice(0,i),a=n.slice(i),c=Qo.mapCells(n[t],function(n,t){return t===e?nn.elementnew(o(n.element(),r),!0):n});return u.concat([c]).concat(a)},bu=function(n,t,e){return n.slice(0,t).concat(n.slice(e+1))},wu=function(n,t,e){var r=B.map(n,function(n){var r=n.cells().slice(0,t).concat(n.cells().slice(e+1));return nn.rowcells(r,n.section())});return B.filter(r,function(n){return n.cells().length>0})},yu=function(n,t,e,r){return B.map(n,function(n){return Qo.mapCells(n,function(n){return o=n,B.exists(t,function(n){return e(o.element(),n.element())})?nn.elementnew(r(n.element(),e),!0):n;var o})})},xu=function(n,t,e,r){return Qo.getCellElement(n[t],e)!==undefined&&t>0&&r(Qo.getCellElement(n[t-1],e),Qo.getCellElement(n[t],e))},Cu=function(n,t,e){return t>0&&e(Qo.getCellElement(n,t-1),Qo.getCellElement(n,t))},Su=function(n,t,e,r){var o=B.bind(n,function(r,o){return xu(n,o,t,e)||Cu(r,t,e)?[]:[Qo.getCell(r,t)]});return yu(n,o,e,r)},Ru=function(n,t,e,r){var o=n[t],i=B.bind(o.cells(),function(r,i){return xu(n,t,i,e)||Cu(o,i,e)?[]:[r]});return yu(n,i,e,r)},Tu=function(n){return{fold:n}},Du=function(){return Tu(function(n,t,e,r,o){return n()})},Au=function(n){return Tu(function(t,e,r,o,i){return e(n)})},ku=function(n,t){return Tu(function(e,r,o,i,u){return o(n,t)})},Nu=function(n,t,e){return Tu(function(r,o,i,u,a){return u(n,t,e)})},Ou=function(n,t){return Tu(function(e,r,o,i,u){return u(n,t)})},Eu=function(n,t,e,r){var o,i,u=n.slice(0),a=(i=t,0===(o=n).length?Du():1===o.length?Au(0):0===i?ku(0,1):i===o.length-1?Ou(i-1,i):i>0&&i<o.length-1?Nu(i-1,i,i+1):Du()),c=function(n){return B.map(n,m.constant(0))},l=m.constant(c(u)),s=function(n,t){if(e>=0){var o=Math.max(r.minCellWidth(),u[t]-e);return c(u.slice(0,n)).concat([e,o-u[t]]).concat(c(u.slice(t+1)))}var i=Math.max(r.minCellWidth(),u[n]+e),a=u[n]-i;return c(u.slice(0,n)).concat([i-u[n],a]).concat(c(u.slice(t+1)))},f=s;return a.fold(l,function(n){return r.singleColumnWidth(u[n],e)},f,function(n,t,e){return s(t,e)},function(n,t){if(e>=0)return c(u.slice(0,t)).concat([e]);var o=Math.max(r.minCellWidth(),u[t]+e);return c(u.slice(0,t)).concat([o-u[t]])})},Bu=function(n,t){return Dt.has(n,t)&&parseInt(Dt.get(n,t),10)>1},Iu={hasColspan:function(n){return Bu(n,"colspan")},hasRowspan:function(n){return Bu(n,"rowspan")},minWidth:m.constant(10),minHeight:m.constant(10),getInt:function(n,t){return parseInt(re.get(n,t),10)}},Pu=function(n,t,e){return re.getRaw(n,t).fold(function(){return e(n)+"px"},function(n){return n})},Wu=function(n){return Pu(n,"width",no.getPixelWidth)},_u=function(n){return Pu(n,"height",no.getHeight)},Mu=function(n,t,e,r,o){var i=si(n),u=B.map(i,function(n){return n.map(t.edge)});return B.map(i,function(n,t){return n.filter(m.not(Iu.hasColspan)).fold(function(){var n=ci(u,t);return r(n)},function(n){return e(n,o)})})},Lu=function(n){return n.map(function(n){return n+"px"}).getOr("")},qu=function(n,t,e,r){var o=fi(n),i=B.map(o,function(n){return n.map(t.edge)});return B.map(o,function(n,t){return n.filter(m.not(Iu.hasRowspan)).fold(function(){var n=ci(i,t);return r(n)},function(n){return e(n)})})},zu={getRawWidths:function(n,t){return Mu(n,t,Wu,Lu)},getPixelWidths:function(n,t,e){return Mu(n,t,no.getPixelWidth,function(n){return n.getOrThunk(e.minCellWidth)},e)},getPercentageWidths:function(n,t,e){return Mu(n,t,no.getPercentageWidth,function(n){return n.fold(function(){return e.minCellWidth()},function(n){return n/e.pixelWidth()*100})},e)},getPixelHeights:function(n,t){return qu(n,t,no.getHeight,function(n){return n.getOrThunk(Iu.minHeight)})},getRawHeights:function(n,t){return qu(n,t,_u,Lu)}},Fu=function(n,t,e){for(var r=0,o=n;o<t;o++)r+=e[o]!==undefined?e[o]:0;return r},ju=function(n,t){var e=Kt.justCells(n);return B.map(e,function(n){var e=Fu(n.column(),n.column()+n.colspan(),t);return{element:n.element,width:m.constant(e),colspan:n.colspan}})},Hu=function(n,t){var e=Kt.justCells(n);return B.map(e,function(n){var e=Fu(n.row(),n.row()+n.rowspan(),t);return{element:n.element,height:m.constant(e),rowspan:n.rowspan}})},Vu=function(n,t){return B.map(n.all(),function(n,e){return{element:n.element,height:m.constant(t[e])}})},Uu=function(n){var t=parseInt(n,10),e=m.identity;return{width:m.constant(t),pixelWidth:m.constant(t),getWidths:zu.getPixelWidths,getCellDelta:e,singleColumnWidth:function(n,t){return[Math.max(Iu.minWidth(),n+t)-n]},minCellWidth:Iu.minWidth,setElementWidth:no.setPixelWidth,setTableWidth:function(n,t,e){var r=B.foldr(t,function(n,t){return n+t},0);no.setPixelWidth(n,r)}}},Gu=function(n,t){if(no.percentageBasedSizeRegex().test(t)){var e=no.percentageBasedSizeRegex().exec(t);return o=e[1],i=n,u=parseFloat(o),a=zr(i),{width:m.constant(u),pixelWidth:m.constant(a),getWidths:zu.getPercentageWidths,getCellDelta:function(n){return n/a*100},singleColumnWidth:function(n,t){return[100-n]},minCellWidth:function(){return Iu.minWidth()/a*100},setElementWidth:no.setPercentageWidth,setTableWidth:function(n,t,e){var r=u+e;no.setPercentageWidth(n,r)}}}if(no.pixelBasedSizeRegex().test(t)){var r=no.pixelBasedSizeRegex().exec(t);return Uu(r[1])}var o,i,u,a,c=zr(n);return Uu(c)},Xu=function(n){return no.getRawWidth(n).fold(function(){var t=zr(n);return Uu(t)},function(t){return Gu(n,t)})},Yu=function(n){return Kt.generate(n)},$u=function(n){var t=Gt(n);return Yu(t)},Ku=function(n,t,e,r){var o=Xu(n),i=o.getCellDelta(t),u=$u(n),a=o.getWidths(u,r,o),c=Eu(a,e,i,o),l=B.map(c,function(n,t){return n+a[t]}),s=ju(u,l);B.each(s,function(n){o.setElementWidth(n.element(),n.width())}),e===u.grid().columns()-1&&o.setTableWidth(n,l,i)},Ju=function(n,t,e,r){var o=$u(n),i=zu.getPixelHeights(o,r),u=B.map(i,function(n,r){return e===r?Math.max(t+n,Iu.minHeight()):n}),a=Hu(o,u),c=Vu(o,u);B.each(c,function(n){no.setHeight(n.element(),n.height())}),B.each(a,function(n){no.setHeight(n.element(),n.height())});var l,s=(l=u,B.foldr(l,function(n,t){return n+t},0));no.setHeight(n,s)},Qu=function(n,t,e){var r=Xu(n),o=Yu(t),i=r.getWidths(o,e,r),u=ju(o,i);B.each(u,function(n){r.setElementWidth(n.element(),n.width())});var a=B.foldr(i,function(n,t){return t+n},0);u.length>0&&r.setElementWidth(n,a)},Zu=function(n){0===Ht(n).length&&le.remove(n)},na=X.immutable("grid","cursor"),ta=function(n,t,e){return ea(n,t,e).orThunk(function(){return ea(n,0,0)})},ea=function(n,t,e){return w.from(n[t]).bind(function(n){return w.from(n.cells()[e]).bind(function(n){return w.from(n.element())})})},ra=function(n,t,e){return na(n,ea(n,t,e))},oa=function(n){return B.foldl(n,function(n,t){return B.exists(n,function(n){return n.row()===t.row()})?n:n.concat([t])},[]).sort(function(n,t){return n.row()-t.row()})},ia=function(n){return B.foldl(n,function(n,t){return B.exists(n,function(n){return n.column()===t.column()})?n:n.concat([t])},[]).sort(function(n,t){return n.column()-t.column()})},ua=function(n,t,e){var r=Xt(n,e),o=Kt.generate(r);return ei(o,t,!0)},aa=Qu,ca={insertRowBefore:Gi(function(n,t,e,r){var o=t.row(),i=t.row(),u=gu(n,i,o,e,r.getOrInit);return ra(u,i,t.column())},Yi,m.noop,m.noop,Oo),insertRowsBefore:Gi(function(n,t,e,r){var o=t[0].row(),i=t[0].row(),u=oa(t),a=B.foldl(u,function(n,t){return gu(n,i,o,e,r.getOrInit)},n);return ra(a,i,t[0].column())},$i,m.noop,m.noop,Oo),insertRowAfter:Gi(function(n,t,e,r){var o=t.row(),i=t.row()+t.rowspan(),u=gu(n,i,o,e,r.getOrInit);return ra(u,i,t.column())},Yi,m.noop,m.noop,Oo),insertRowsAfter:Gi(function(n,t,e,r){var o=oa(t),i=o[o.length-1].row(),u=o[o.length-1].row()+o[o.length-1].rowspan(),a=B.foldl(o,function(n,t){return gu(n,u,i,e,r.getOrInit)},n);return ra(a,u,t[0].column())},$i,m.noop,m.noop,Oo),insertColumnBefore:Gi(function(n,t,e,r){var o=t.column(),i=t.column(),u=pu(n,i,o,e,r.getOrInit);return ra(u,t.row(),i)},Yi,aa,m.noop,Oo),insertColumnsBefore:Gi(function(n,t,e,r){var o=ia(t),i=o[0].column(),u=o[0].column(),a=B.foldl(o,function(n,t){return pu(n,u,i,e,r.getOrInit)},n);return ra(a,t[0].row(),u)},$i,aa,m.noop,Oo),insertColumnAfter:Gi(function(n,t,e,r){var o=t.column(),i=t.column()+t.colspan(),u=pu(n,i,o,e,r.getOrInit);return ra(u,t.row(),i)},Yi,aa,m.noop,Oo),insertColumnsAfter:Gi(function(n,t,e,r){var o=t[t.length-1].column(),i=t[t.length-1].column()+t[t.length-1].colspan(),u=ia(t),a=B.foldl(u,function(n,t){return pu(n,i,o,e,r.getOrInit)},n);return ra(a,t[0].row(),i)},$i,aa,m.noop,Oo),splitCellIntoColumns:Gi(function(n,t,e,r){var o=hu(n,t.row(),t.column(),e,r.getOrInit);return ra(o,t.row(),t.column())},Yi,aa,m.noop,Oo),splitCellIntoRows:Gi(function(n,t,e,r){var o=vu(n,t.row(),t.column(),e,r.getOrInit);return ra(o,t.row(),t.column())},Yi,m.noop,m.noop,Oo),eraseColumns:Gi(function(n,t,e,r){var o=ia(t),i=wu(n,o[0].column(),o[o.length-1].column()),u=ta(i,t[0].row(),t[0].column());return na(i,u)},$i,aa,Zu,Oo),eraseRows:Gi(function(n,t,e,r){var o=oa(t),i=bu(n,o[0].row(),o[o.length-1].row()),u=ta(i,t[0].row(),t[0].column());return na(i,u)},$i,m.noop,Zu,Oo),makeColumnHeader:Gi(function(n,t,e,r){var o=Su(n,t.column(),e,r.replaceOrInit);return ra(o,t.row(),t.column())},Yi,m.noop,m.noop,Eo("row","th")),unmakeColumnHeader:Gi(function(n,t,e,r){var o=Su(n,t.column(),e,r.replaceOrInit);return ra(o,t.row(),t.column())},Yi,m.noop,m.noop,Eo(null,"td")),makeRowHeader:Gi(function(n,t,e,r){var o=Ru(n,t.row(),e,r.replaceOrInit);return ra(o,t.row(),t.column())},Yi,m.noop,m.noop,Eo("col","th")),unmakeRowHeader:Gi(function(n,t,e,r){var o=Ru(n,t.row(),e,r.replaceOrInit);return ra(o,t.row(),t.column())},Yi,m.noop,m.noop,Eo(null,"td")),mergeCells:Gi(function(n,t,e,r){var o=t.cells();Ho(o);var i=lu(n,t.bounds(),e,m.constant(o[0]));return na(i,w.from(o[0]))},Qi,m.noop,m.noop,Bo),unmergeCells:Gi(function(n,t,e,r){var o=B.foldr(t,function(n,t){return su(n,t,e,r.combine(t))},n);return na(o,w.from(t[0]))},Zi,aa,m.noop,Bo),pasteCells:Gi(function(n,t,e,r){var o,i,u,a,c=(o=t.clipboard(),i=t.generators(),u=Gt(o),a=Kt.generate(u),ei(a,i,!0)),l=nn.address(t.row(),t.column());return du(l,n,c,t.generators(),e).fold(function(){return na(n,w.some(t.element()))},function(n){var e=ta(n,t.row(),t.column());return na(n,e)})},Ki,aa,m.noop,Oo),pasteRowsBefore:Gi(function(n,t,e,r){var o=n[t.cells[0].row()],i=t.cells[0].row(),u=ua(t.clipboard(),t.generators(),o),a=mu(i,n,u,t.generators(),e),c=ta(a,t.cells[0].row(),t.cells[0].column());return na(a,c)},Ji,m.noop,m.noop,Oo),pasteRowsAfter:Gi(function(n,t,e,r){var o=n[t.cells[0].row()],i=t.cells[t.cells.length-1].row()+t.cells[t.cells.length-1].rowspan(),u=ua(t.clipboard(),t.generators(),o),a=mu(i,n,u,t.generators(),e),c=ta(a,t.cells[0].row(),t.cells[0].column());return na(a,c)},Ji,m.noop,m.noop,Oo)},la=function(n){return en.fromDom(n.getBody())},sa={getBody:la,getIsRoot:function(n){return function(t){return ot.eq(t,la(n))}},addSizeSuffix:function(n){return/^[0-9]+$/.test(n)&&(n+="px"),n},removePxSuffix:function(n){return n?n.replace(/px$/,""):""}},fa=function(n){return"rtl"===re.get(n,"direction")?"rtl":"ltr"},da={onDirection:function(n,t){return function(e){return"rtl"===fa(e)?t:n}},getDirection:fa},ma={isRtl:m.constant(!1)},ga={isRtl:m.constant(!0)},pa=function(n){return"rtl"===da.getDirection(n)?ga:ma},ha=function(n,t){var e,r=function(n){return"table"===xt.name(sa.getBody(n))};!1!==n.settings.table_clone_elements&&("string"==typeof n.settings.table_clone_elements?e=n.settings.table_clone_elements.split(/[ ,]/):Array.isArray(n.settings.table_clone_elements)&&(e=n.settings.table_clone_elements));var o=w.from(e),i=function(t,e,r,i){return function(u,a){var c=Bt.descendants(u,"td[data-mce-style],th[data-mce-style]");B.each(c,function(n){Dt.remove(n,"data-mce-style")});var l=i(),s=en.fromDom(n.getDoc()),f=xo(pa),d=Oe(r,s,o);return e(u)?t(l,u,a,d,f).bind(function(t){return B.each(t.newRows(),function(t){var e;e=t,n.fire("newrow",{node:e.dom()}),e.dom()}),B.each(t.newCells(),function(t){var e;e=t,n.fire("newcell",{node:e.dom()}),e.dom()}),t.cursor().map(function(t){var e=n.dom.createRng();return e.setStart(t.dom(),0),e.setEnd(t.dom(),0),e})}):w.none()}};return{deleteRow:i(ca.eraseRows,function(t){var e=Co(t);return!1===r(n)||e.rows()>1},m.noop,t),deleteColumn:i(ca.eraseColumns,function(t){var e=Co(t);return!1===r(n)||e.columns()>1},m.noop,t),insertRowsBefore:i(ca.insertRowsBefore,m.always,m.noop,t),insertRowsAfter:i(ca.insertRowsAfter,m.always,m.noop,t),insertColumnsBefore:i(ca.insertColumnsBefore,m.always,to,t),insertColumnsAfter:i(ca.insertColumnsAfter,m.always,to,t),mergeCells:i(ca.mergeCells,m.always,m.noop,t),unmergeCells:i(ca.unmergeCells,m.always,m.noop,t),pasteRowsBefore:i(ca.pasteRowsBefore,m.always,m.noop,t),pasteRowsAfter:i(ca.pasteRowsAfter,m.always,m.noop,t),pasteCells:i(ca.pasteCells,m.always,m.noop,t)}},va=function(n,t,e){var r=Gt(n),o=Kt.generate(r);return $i(o,t).map(function(n){var t=ei(o,e,!1).slice(n[0].row(),n[n.length-1].row()+n[n.length-1].rowspan()),r=Xi(t,e);return ii(r)})},ba=tinymce.util.Tools.resolve("tinymce.util.Tools"),wa=tinymce.util.Tools.resolve("tinymce.Env"),ya={applyAlign:function(n,t,e){e&&n.formatter.apply("align"+e,{},t)},applyVAlign:function(n,t,e){e&&n.formatter.apply("valign"+e,{},t)},unApplyAlign:function(n,t){ba.each("left center right".split(" "),function(e){n.formatter.remove("align"+e,{},t)})},unApplyVAlign:function(n,t){ba.each("top middle bottom".split(" "),function(e){n.formatter.remove("valign"+e,{},t)})},getTDTHOverallStyle:function(n,t,e){var r;return r=function(t,r){for(var o=0;o<r.length;o++){var i=n.getStyle(r[o],e);if(void 0===t&&(t=i),t!==i)return""}return t}(r,n.select("td,th",t))}},xa=function(n,t){var e=n.dom,r=t.control.rootControl,o=r.toJSON(),i=e.parseStyle(o.style);"style"===t.control.name()?(r.find("#borderStyle").value(i["border-style"]||"")[0].fire("select"),r.find("#borderColor").value(i["border-color"]||"")[0].fire("change"),r.find("#backgroundColor").value(i["background-color"]||"")[0].fire("change"),r.find("#width").value(i.width||"").fire("change"),r.find("#height").value(i.height||"").fire("change")):(i["border-style"]=o.borderStyle,i["border-color"]=o.borderColor,i["background-color"]=o.backgroundColor,i.width=o.width?sa.addSizeSuffix(o.width):"",i.height=o.height?sa.addSizeSuffix(o.height):""),r.find("#style").value(e.serializeStyle(e.parseStyle(e.serializeStyle(i))))},Ca={createStyleForm:function(n){var t=function(){var t=n.settings.color_picker_callback;if(t)return function(e){return t.call(n,function(n){e.control.value(n).fire("change")},e.control.value())}};return{title:"Advanced",type:"form",defaults:{onchange:m.curry(xa,n)},items:[{label:"Style",name:"style",type:"textbox"},{type:"form",padding:0,formItemDefaults:{layout:"grid",alignH:["start","right"]},defaults:{size:7},items:[{label:"Border style",type:"listbox",name:"borderStyle",width:90,onselect:m.curry(xa,n),values:[{text:"Select...",value:""},{text:"Solid",value:"solid"},{text:"Dotted",value:"dotted"},{text:"Dashed",value:"dashed"},{text:"Double",value:"double"},{text:"Groove",value:"groove"},{text:"Ridge",value:"ridge"},{text:"Inset",value:"inset"},{text:"Outset",value:"outset"},{text:"None",value:"none"},{text:"Hidden",value:"hidden"}]},{label:"Border color",type:"colorbox",name:"borderColor",onaction:t()},{label:"Background color",type:"colorbox",name:"backgroundColor",onaction:t()}]}]}},buildListItems:function(n,t,e){var r=function(n,e){return e=e||[],ba.each(n,function(n){var o={text:n.text||n.title};n.menu?o.menu=r(n.menu):(o.value=n.value,t&&t(o)),e.push(o)}),e};return r(n,e||[])},updateStyleField:xa,extractAdvancedStyles:function(n,t){var e=n.parseStyle(n.getAttrib(t,"style")),r={};return e["border-style"]&&(r.borderStyle=e["border-style"]),e["border-color"]&&(r.borderColor=e["border-color"]),e["background-color"]&&(r.backgroundColor=e["background-color"]),r.style=n.serializeStyle(e),r}};function Sa(n,t,e,r){if("TD"===t.tagName||"TH"===t.tagName)n.setStyle(t,e,r);else if(t.children)for(var o=0;o<t.children.length;o++)Sa(n,t.children[o],e,r)}var Ra=function(n,t,e){var r,o,i=n.dom;Ca.updateStyleField(n,e),!1===(o=e.control.rootControl.toJSON())["class"]&&delete o["class"],n.undoManager.transact(function(){t||(t=Pr.insert(n,o.cols||1,o.rows||1)),function(n,t,e){var r=n.dom,o={},i={};if(o["class"]=e["class"],i.height=sa.addSizeSuffix(e.height),r.getAttrib(t,"width")&&!n.settings.table_style_by_css?o.width=sa.removePxSuffix(e.width):i.width=sa.addSizeSuffix(e.width),n.settings.table_style_by_css?(i["border-width"]=sa.addSizeSuffix(e.border),i["border-spacing"]=sa.addSizeSuffix(e.cellspacing),ba.extend(o,{"data-mce-border-color":e.borderColor,"data-mce-cell-padding":e.cellpadding,"data-mce-border":e.border})):ba.extend(o,{border:e.border,cellpadding:e.cellpadding,cellspacing:e.cellspacing}),n.settings.table_style_by_css&&t.children)for(var u=0;u<t.children.length;u++)Sa(r,t.children[u],{"border-width":sa.addSizeSuffix(e.border),"border-color":e.borderColor,padding:sa.addSizeSuffix(e.cellpadding)});e.style?ba.extend(i,r.parseStyle(e.style)):i=ba.extend({},r.parseStyle(r.getAttrib(t,"style")),i),o.style=r.serializeStyle(i),r.setAttribs(t,o)}(n,t,o),(r=i.select("caption",t)[0])&&!o.caption&&i.remove(r),!r&&o.caption&&((r=i.create("caption")).innerHTML=wa.ie?"\xa0":'<br data-mce-bogus="1"/>',t.insertBefore(r,t.firstChild)),ya.unApplyAlign(n,t),o.align&&ya.applyAlign(n,t,o.align),n.focus(),n.addVisual()})},Ta=function(n,t){var e,r,o,i,u,a,c,l,s,f=n.dom,d={};!0===t?(e=f.getParent(n.selection.getStart(),"table"))&&(c=e,l=(a=n).dom,s={width:l.getStyle(c,"width")||l.getAttrib(c,"width"),height:l.getStyle(c,"height")||l.getAttrib(c,"height"),cellspacing:l.getStyle(c,"border-spacing")||l.getAttrib(c,"cellspacing"),cellpadding:l.getAttrib(c,"data-mce-cell-padding")||l.getAttrib(c,"cellpadding")||ya.getTDTHOverallStyle(a.dom,c,"padding"),border:l.getAttrib(c,"data-mce-border")||l.getAttrib(c,"border")||ya.getTDTHOverallStyle(a.dom,c,"border"),borderColor:l.getAttrib(c,"data-mce-border-color"),caption:!!l.select("caption",c)[0],"class":l.getAttrib(c,"class")},ba.each("left center right".split(" "),function(n){a.formatter.matchNode(c,"align"+n)&&(s.align=n)}),!1!==a.settings.table_advtab&&ba.extend(s,Ca.extractAdvancedStyles(l,c)),d=s):(r={label:"Cols",name:"cols"},o={label:"Rows",name:"rows"}),n.settings.table_class_list&&(d["class"]&&(d["class"]=d["class"].replace(/\s*mce\-item\-table\s*/g,"")),i={name:"class",type:"listbox",label:"Class",values:Ca.buildListItems(n.settings.table_class_list,function(t){t.value&&(t.textStyle=function(){return n.formatter.getCssText({block:"table",classes:[t.value]})})})}),u={type:"form",layout:"flex",direction:"column",labelGapCalc:"children",padding:0,items:[{type:"form",labelGapCalc:!1,padding:0,layout:"grid",columns:2,defaults:{type:"textbox",maxWidth:50},items:!1!==n.settings.table_appearance_options?[r,o,{label:"Width",name:"width",onchange:m.curry(Ca.updateStyleField,n)},{label:"Height",name:"height",onchange:m.curry(Ca.updateStyleField,n)},{label:"Cell spacing",name:"cellspacing"},{label:"Cell padding",name:"cellpadding"},{label:"Border",name:"border"},{label:"Caption",name:"caption",type:"checkbox"}]:[r,o,{label:"Width",name:"width",onchange:m.curry(Ca.updateStyleField,n)},{label:"Height",name:"height",onchange:m.curry(Ca.updateStyleField,n)}]},{label:"Alignment",name:"align",type:"listbox",text:"None",values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},i]},!1!==n.settings.table_advtab?n.windowManager.open({title:"Table properties",data:d,bodyType:"tabpanel",body:[{title:"General",type:"form",items:u},Ca.createStyleForm(n)],onsubmit:m.curry(Ra,n,e)}):n.windowManager.open({title:"Table properties",data:d,body:u,onsubmit:m.curry(Ra,n,e)})},Da=function(n,t,e){var r=n.getParent(t,"table"),o=t.parentNode,i=n.select(e,r)[0];i||(i=n.create(e),r.firstChild?"CAPTION"===r.firstChild.nodeName?n.insertAfter(i,r.firstChild):r.insertBefore(i,r.firstChild):r.appendChild(i)),i.appendChild(t),o.hasChildNodes()||n.remove(o)};function Aa(n,t,e){var r,o=n.dom;function i(n,t,e){e&&o.setAttrib(n,t,e)}Ca.updateStyleField(n,e),r=e.control.rootControl.toJSON(),n.undoManager.transact(function(){ba.each(t,function(e){var u,a,c;i(e,"scope",r.scope),i(e,"style",r.style),i(e,"class",r["class"]),u=e,a="height",(c=sa.addSizeSuffix(r.height))&&o.setStyle(u,a,c),r.type!==e.parentNode.nodeName.toLowerCase()&&Da(n.dom,e,r.type),1===t.length&&ya.unApplyAlign(n,e),r.align&&ya.applyAlign(n,e,r.align)}),n.focus()})}var ka=function(n){var t,e,r,o,i,u,a,c,l,s,f=n.dom,d=[];t=f.getParent(n.selection.getStart(),"table"),e=f.getParent(n.selection.getStart(),"td,th"),ba.each(t.rows,function(n){ba.each(n.cells,function(t){if(f.getAttrib(t,"data-mce-selected")||t===e)return d.push(n),!1})}),(r=d[0])&&(d.length>1?i={height:"",scope:"","class":"",align:"",type:r.parentNode.nodeName.toLowerCase()}:(c=r,l=(a=n).dom,(s={height:l.getStyle(c,"height")||l.getAttrib(c,"height"),scope:l.getAttrib(c,"scope"),"class":l.getAttrib(c,"class")}).type=c.parentNode.nodeName.toLowerCase(),ba.each("left center right".split(" "),function(n){a.formatter.matchNode(c,"align"+n)&&(s.align=n)}),!1!==a.settings.table_row_advtab&&ba.extend(s,Ca.extractAdvancedStyles(l,c)),i=s),n.settings.table_row_class_list&&(o={name:"class",type:"listbox",label:"Class",values:Ca.buildListItems(n.settings.table_row_class_list,function(t){t.value&&(t.textStyle=function(){return n.formatter.getCssText({block:"tr",classes:[t.value]})})})}),u={type:"form",columns:2,padding:0,defaults:{type:"textbox"},items:[{type:"listbox",name:"type",label:"Row type",text:"Header",maxWidth:null,values:[{text:"Header",value:"thead"},{text:"Body",value:"tbody"},{text:"Footer",value:"tfoot"}]},{type:"listbox",name:"align",label:"Alignment",text:"None",maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{label:"Height",name:"height"},o]},!1!==n.settings.table_row_advtab?n.windowManager.open({title:"Row properties",data:i,bodyType:"tabpanel",body:[{title:"General",type:"form",items:u},Ca.createStyleForm(n)],onsubmit:m.curry(Aa,n,d)}):n.windowManager.open({title:"Row properties",data:i,body:u,onsubmit:m.curry(Aa,n,d)}))},Na=function(n,t,e){var r,o=n.dom;function i(n,t,e){e&&o.setAttrib(n,t,e)}function u(n,t,e){e&&o.setStyle(n,t,e)}Ca.updateStyleField(n,e),r=e.control.rootControl.toJSON(),n.undoManager.transact(function(){ba.each(t,function(e){var a,c;i(e,"scope",r.scope),1===t.length?i(e,"style",r.style):(a=e,c=r.style,a.style.cssText+=";"+c),i(e,"class",r["class"]),u(e,"width",sa.addSizeSuffix(r.width)),u(e,"height",sa.addSizeSuffix(r.height)),r.type&&e.nodeName.toLowerCase()!==r.type&&(e=o.rename(e,r.type)),1===t.length&&(ya.unApplyAlign(n,e),ya.unApplyVAlign(n,e)),r.align&&ya.applyAlign(n,e,r.align),r.valign&&ya.applyVAlign(n,e,r.valign)}),n.focus()})},Oa=function(n){var t,e,r,o=[];if(o=n.dom.select("td[data-mce-selected],th[data-mce-selected]"),t=n.dom.getParent(n.selection.getStart(),"td,th"),!o.length&&t&&o.push(t),t=t||o[0]){var i,u,a,c;o.length>1?e={width:"",height:"",scope:"","class":"",align:"",style:"",type:t.nodeName.toLowerCase()}:(u=t,a=(i=n).dom,(c={width:a.getStyle(u,"width")||a.getAttrib(u,"width"),height:a.getStyle(u,"height")||a.getAttrib(u,"height"),scope:a.getAttrib(u,"scope"),"class":a.getAttrib(u,"class")}).type=u.nodeName.toLowerCase(),ba.each("left center right".split(" "),function(n){i.formatter.matchNode(u,"align"+n)&&(c.align=n)}),ba.each("top middle bottom".split(" "),function(n){i.formatter.matchNode(u,"valign"+n)&&(c.valign=n)}),!1!==i.settings.table_cell_advtab&&ba.extend(c,Ca.extractAdvancedStyles(a,u)),e=c),n.settings.table_cell_class_list&&(r={name:"class",type:"listbox",label:"Class",values:Ca.buildListItems(n.settings.table_cell_class_list,function(t){t.value&&(t.textStyle=function(){return n.formatter.getCssText({block:"td",classes:[t.value]})})})});var l={type:"form",layout:"flex",direction:"column",labelGapCalc:"children",padding:0,items:[{type:"form",layout:"grid",columns:2,labelGapCalc:!1,padding:0,defaults:{type:"textbox",maxWidth:50},items:[{label:"Width",name:"width",onchange:m.curry(Ca.updateStyleField,n)},{label:"Height",name:"height",onchange:m.curry(Ca.updateStyleField,n)},{label:"Cell type",name:"type",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"Cell",value:"td"},{text:"Header cell",value:"th"}]},{label:"Scope",name:"scope",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Row",value:"row"},{text:"Column",value:"col"},{text:"Row group",value:"rowgroup"},{text:"Column group",value:"colgroup"}]},{label:"H Align",name:"align",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{label:"V Align",name:"valign",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Top",value:"top"},{text:"Middle",value:"middle"},{text:"Bottom",value:"bottom"}]}]},r]};!1!==n.settings.table_cell_advtab?n.windowManager.open({title:"Cell properties",bodyType:"tabpanel",data:e,body:[{title:"General",type:"form",items:l},Ca.createStyleForm(n)],onsubmit:m.curry(Na,n,o)}):n.windowManager.open({title:"Cell properties",data:e,body:l,onsubmit:m.curry(Na,n,o)})}},Ea=ba.each,Ba=w.none(),Ia={registerCommands:function(n,t,e,r){var o=sa.getIsRoot(n),i=function(){return en.fromDom(n.dom.getParent(n.selection.getStart(),"th,td"))},u=function(n){return Vt(n,o)},a=function(t){var o=i();u(o).each(function(i){var u=kr.forMenu(r,i,o);t(i,u).each(function(t){n.selection.setRng(t),n.focus(),e.clear(i)})})},c=function(t){var e=i();return u(e).bind(function(t){var o=en.fromDom(n.getDoc()),i=kr.forMenu(r,t,e),u=Oe(m.noop,o,w.none());return va(t,i,u)})},l=function(t){Ba.each(function(o){var a=B.map(o,function(n){return he(n)}),c=i();u(c).bind(function(o){var i=en.fromDom(n.getDoc()),u=Ee(i),l=kr.pasteRows(r,o,c,a,u);t(o,l).each(function(t){n.selection.setRng(t),n.focus(),e.clear(o)})})})};Ea({mceTableSplitCells:function(){a(t.unmergeCells)},mceTableMergeCells:function(){a(t.mergeCells)},mceTableInsertRowBefore:function(){a(t.insertRowsBefore)},mceTableInsertRowAfter:function(){a(t.insertRowsAfter)},mceTableInsertColBefore:function(){a(t.insertColumnsBefore)},mceTableInsertColAfter:function(){a(t.insertColumnsAfter)},mceTableDeleteCol:function(){a(t.deleteColumn)},mceTableDeleteRow:function(){a(t.deleteRow)},mceTableCutRow:function(n){Ba=c(),a(t.deleteRow)},mceTableCopyRow:function(n){Ba=c()},mceTablePasteRowBefore:function(n){l(t.pasteRowsBefore)},mceTablePasteRowAfter:function(n){l(t.pasteRowsAfter)},mceTableDelete:function(){var t=en.fromDom(n.dom.getParent(n.selection.getStart(),"th,td"));Vt(t,o).filter(m.not(o)).each(function(t){var e=en.fromText("");ue.after(t,e),le.remove(t);var r=n.dom.createRng();r.setStart(e.dom(),0),r.setEnd(e.dom(),0),n.selection.setRng(r)})}},function(t,e){n.addCommand(e,t)}),Ea({mceInsertTable:m.curry(Ta,n),mceTableProps:m.curry(Ta,n,!0),mceTableRowProps:m.curry(ka,n),mceTableCellProps:m.curry(Oa,n)},function(t,e){n.addCommand(e,function(n,e){t(e)})})},getClipboardRows:function(){return Ba.fold(function(){},function(n){return B.map(n,function(n){return n.dom()})})},setClipboardRows:function(n){var t=B.map(n,en.fromDom);Ba=w.from(t)}},Pa=function(n){var t=w.from(n.dom().documentElement).map(en.fromDom).getOr(n);return{parent:m.constant(t),view:m.constant(n),origin:m.constant(oo(0,0))}},Wa=function(n,t){return{parent:m.constant(t),view:m.constant(n),origin:m.constant(oo(0,0))}},_a=function(n){var t=X.immutable.apply(null,n),e=[];return{bind:function(n){if(n===undefined)throw"Event bind error: undefined handler";e.push(n)},unbind:function(n){e=B.filter(e,function(t){return t!==n})},trigger:function(){var n=t.apply(null,arguments);B.each(e,function(t){t(n)})}}},Ma=function(n){return{registry:L.map(n,function(n){return{bind:n.bind,unbind:n.unbind}}),trigger:L.map(n,function(n){return n.trigger})}},La={mode:Ao.exactly(["compare","extract","mutate","sink"]),sink:Ao.exactly(["element","start","stop","destroy"]),api:Ao.exactly(["forceDrop","drop","move","delayDrop"])},qa={resolve:gi("ephox-dragster").resolve},za=function(n,t){return function(e){if(n(e)){var r,o,i,u,a,c,l,s=en.fromDom(e.target),f=function(){e.stopPropagation()},d=function(){e.preventDefault()},g=m.compose(d,f),p=(r=s,o=e.clientX,i=e.clientY,u=f,a=d,c=g,l=e,{target:m.constant(r),x:m.constant(o),y:m.constant(i),stop:u,prevent:a,kill:c,raw:m.constant(l)});t(p)}}},Fa=function(n,t,e,r,o){var i=za(e,r);return n.dom().addEventListener(t,i,o),{unbind:m.curry(ja,n,t,i,o)}},ja=function(n,t,e,r){n.dom().removeEventListener(t,e,r)},Ha=function(n,t,e,r){return Fa(n,t,e,r,!1)},Va=m.constant(!0),Ua=function(n,t,e){return Ha(n,t,Va,e)},Ga=La.mode({compare:function(n,t){return oo(t.left()-n.left(),t.top()-n.top())},extract:function(n){return w.some(oo(n.x(),n.y()))},sink:function(n,t){var e,r,o,i=(e=t,r=Xo.merge({layerClass:qa.resolve("blocker")},e),o=en.fromTag("div"),Dt.set(o,"role","presentation"),re.setAll(o,{position:"fixed",left:"0px",top:"0px",width:"100%",height:"100%"}),Ni.add(o,qa.resolve("blocker")),Ni.add(o,r.layerClass),{element:function(){return o},destroy:function(){le.remove(o)}}),u=Ua(i.element(),"mousedown",n.forceDrop),a=Ua(i.element(),"mouseup",n.drop),c=Ua(i.element(),"mousemove",n.move),l=Ua(i.element(),"mouseout",n.delayDrop);return La.sink({element:i.element,start:function(n){ue.append(n,i.element())},stop:function(){le.remove(i.element())},destroy:function(){i.destroy(),a.unbind(),c.unbind(),l.unbind(),u.unbind()}})},mutate:function(n,t){n.mutate(t.left(),t.top())}}),Xa=function(){var n=w.none(),t=Ma({move:_a(["info"])});return{onEvent:function(e,r){r.extract(e).each(function(e){var o,i,u;(o=r,i=e,u=n.map(function(n){return o.compare(n,i)}),n=w.some(i),u).each(function(n){t.trigger.move(n)})})},reset:function(){n=w.none()},events:t.registry}},Ya=function(){var n={onEvent:function(n,t){},reset:m.noop},t=Xa(),e=n;return{on:function(){e.reset(),e=t},off:function(){e.reset(),e=n},isOn:function(){return e===t},onEvent:function(n,t){e.onEvent(n,t)},events:t.events}},$a=function(n,t){var e=null;return{cancel:function(){null!==e&&(clearTimeout(e),e=null)},throttle:function(){var r=arguments;null!==e&&clearTimeout(e),e=setTimeout(function(){n.apply(null,r),e=null,r=null},t)}}},Ka=function(n,t,e){var r=!1,o=Ma({start:_a([]),stop:_a([])}),i=Ya(),u=function(){l.stop(),i.isOn()&&(i.off(),o.trigger.stop())},a=$a(u,200);i.events.move.bind(function(e){t.mutate(n,e.info())});var c=function(n){return function(){var t=Array.prototype.slice.call(arguments,0);if(r)return n.apply(null,t)}},l=t.sink(La.api({forceDrop:u,drop:c(u),move:c(function(n,e){a.cancel(),i.onEvent(n,t)}),delayDrop:c(a.throttle)}),e);return{element:l.element,go:function(n){l.start(n),i.on(),o.trigger.start()},on:function(){r=!0},off:function(){r=!1},destroy:function(){l.destroy()},events:o.registry}},Ja=function(n,t){var e=t!==undefined?t:{},r=e.mode!==undefined?e.mode:Ga;return Ka(n,r,t)},Qa=function(){var n,t=Ma({drag:_a(["xDelta","yDelta","target"])}),e=w.none(),r={mutate:function(t,e){n.trigger.drag(t,e)},events:(n=Ma({drag:_a(["xDelta","yDelta"])})).registry};return r.events.drag.bind(function(n){e.each(function(e){t.trigger.drag(n.xDelta(),n.yDelta(),e)})}),{assign:function(n){e=w.some(n)},get:function(){return e},mutate:r.mutate,events:t.registry}},Za=function(n,t,e){return qt.ancestor(n,t,e).isSome()},nc=pi.resolve("resizer-bar-dragging"),tc=function(n,t){var e=wo.height,r=function(n,t,e){var r=Qa(),o=Ja(r,{}),i=w.none(),u=function(n,t){return w.from(Dt.get(n,t))};r.events.drag.bind(function(n){u(n.target(),"data-row").each(function(t){var e=Iu.getInt(n.target(),"top");re.set(n.target(),"top",e+n.yDelta()+"px")}),u(n.target(),"data-column").each(function(t){var e=Iu.getInt(n.target(),"left");re.set(n.target(),"left",e+n.xDelta()+"px")})});var a=function(n,t){return Iu.getInt(n,t)-parseInt(Dt.get(n,"data-initial-"+t),10)};o.events.stop.bind(function(){r.get().each(function(r){i.each(function(o){u(r,"data-row").each(function(n){var t=a(r,"top");Dt.remove(r,"data-initial-top"),d.trigger.adjustHeight(o,t,parseInt(n,10))}),u(r,"data-column").each(function(n){var t=a(r,"left");Dt.remove(r,"data-initial-left"),d.trigger.adjustWidth(o,t,parseInt(n,10))}),Mi(n,o,e,t)})})});var c=function(t,e){d.trigger.startAdjust(),r.assign(t),Dt.set(t,"data-initial-"+e,parseInt(re.get(t,e),10)),Ni.add(t,nc),re.set(t,"opacity","0.2"),o.go(n.parent())},l=Ua(n.parent(),"mousedown",function(n){Fi(n.target())&&c(n.target(),"top"),ji(n.target())&&c(n.target(),"left")}),s=function(t){return ot.eq(t,n.view())},f=Ua(n.view(),"mouseover",function(r){"table"===xt.name(r.target())||Za(r.target(),"table",s)?(i="table"===xt.name(r.target())?w.some(r.target()):qt.ancestor(r.target(),"table",s)).each(function(r){Mi(n,r,e,t)}):Nt.inBody(r.target())&&zi(n)}),d=Ma({adjustHeight:_a(["table","delta","row"]),adjustWidth:_a(["table","delta","column"]),startAdjust:_a([])});return{destroy:function(){l.unbind(),f.unbind(),o.destroy(),zi(n)},refresh:function(r){Mi(n,r,e,t)},on:o.on,off:o.off,hideBars:m.curry(Li,n),showBars:m.curry(qi,n),events:d.registry}}(n,t,e),o=Ma({beforeResize:_a(["table"]),afterResize:_a(["table"]),startDrag:_a([])});return r.events.adjustHeight.bind(function(n){o.trigger.beforeResize(n.table());var t=e.delta(n.delta(),n.table());Ju(n.table(),t,n.row(),e),o.trigger.afterResize(n.table())}),r.events.startAdjust.bind(function(n){o.trigger.startDrag()}),r.events.adjustWidth.bind(function(n){o.trigger.beforeResize(n.table());var e=t.delta(n.delta(),n.table());Ku(n.table(),e,n.column(),t),o.trigger.afterResize(n.table())}),{on:r.on,off:r.off,hideBars:r.hideBars,showBars:r.showBars,destroy:r.destroy,events:o.registry}},ec=function(n,t){return n.inline?Wa(sa.getBody(n),(e=en.fromTag("div"),re.setAll(e,{position:"static",height:"0",width:"0",padding:"0",margin:"0",border:"0"}),ue.append(Nt.body(),e),e)):Pa(en.fromDom(n.getDoc()));var e},rc=function(n,t){n.inline&&le.remove(t.parent())},oc=function(n){var t,e,r=w.none(),o=w.none(),i=w.none(),u=/(\d+(\.\d+)?)%/,a=function(n){return"TABLE"===n.nodeName};return n.on("init",function(){var t=xo(pa),e=ec(n);if(i=w.some(e),n.settings.object_resizing&&!1!==n.settings.table_resize_bars&&(!0===n.settings.object_resizing||"table"===n.settings.object_resizing)){var u=tc(e,t);u.on(),u.events.startDrag.bind(function(t){r=w.some(n.selection.getRng())}),u.events.afterResize.bind(function(t){var e=t.table(),o=Bt.descendants(e,"td[data-mce-style],th[data-mce-style]");B.each(o,function(n){Dt.remove(n,"data-mce-style")}),r.each(function(t){n.selection.setRng(t),n.focus()}),n.undoManager.add()}),o=w.some(u)}}),n.on("ObjectResizeStart",function(r){var o;a(r.target)&&(t=r.width,o=r.target,e=n.dom.getStyle(o,"width")||n.dom.getAttrib(o,"width"))}),n.on("ObjectResized",function(r){if(a(r.target)){var o=r.target;if(u.test(e)){var i=parseFloat(u.exec(e)[1]),c=r.width*i/t;n.dom.setStyle(o,"width",c+"%")}else{var l=[];ba.each(o.rows,function(t){ba.each(t.cells,function(t){var e=n.dom.getStyle(t,"width",!0);l.push({cell:t,width:e})})}),ba.each(l,function(t){n.dom.setStyle(t.cell,"width",t.width),n.dom.setAttrib(t.cell,"width",null)})}}}),{lazyResize:function(){return o},lazyWire:function(){return i.getOr(Pa(en.fromDom(n.getBody())))},destroy:function(){o.each(function(n){n.destroy()}),i.each(function(t){rc(n,t)})}}},ic=function(n){return{fold:n}},uc=function(n){return ic(function(t,e,r,o){return t(n)})},ac=function(n){return ic(function(t,e,r,o){return e(n)})},cc=function(n,t){return ic(function(e,r,o,i){return o(n,t)})},lc=function(n){return ic(function(t,e,r,o){return o(n)})},sc=function(n,t){return Vt(n,t).bind(function(t){var e=Ht(t);return B.findIndex(e,function(t){return ot.eq(n,t)}).map(function(n){return{index:m.constant(n),all:m.constant(e)}})})},fc=function(n,t){return sc(n,t).fold(function(){return uc(n)},function(t){return t.index()+1<t.all().length?cc(n,t.all()[t.index()+1]):lc(n)})},dc=function(n,t){return sc(n,t).fold(function(){return uc()},function(t){return t.index()-1>=0?cc(n,t.all()[t.index()-1]):ac(n)})},mc=wr([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),gc={before:mc.before,on:mc.on,after:mc.after,cata:function(n,t,e,r){return n.fold(t,e,r)},getStart:function(n){return n.fold(m.identity,m.identity,m.identity)}},pc=wr([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),hc=X.immutable("start","soffset","finish","foffset"),vc={domRange:pc.domRange,relative:pc.relative,exact:pc.exact,exactFromRange:function(n){return pc.exact(n.start(),n.soffset(),n.finish(),n.foffset())},range:hc,getWin:function(n){var t=n.match({domRange:function(n){return en.fromDom(n.startContainer)},relative:function(n,t){return gc.getStart(n)},exact:function(n,t,e,r){return n}});return dt.defaultView(t)}},bc=function(n,t,e,r){var o=dt.owner(n).dom().createRange();return o.setStart(n.dom(),t),o.setEnd(e.dom(),r),o},wc=function(n,t,e,r){var o=bc(n,t,e,r),i=ot.eq(n,e)&&t===r;return o.collapsed&&!i},yc=function(n,t){n.selectNodeContents(t.dom())},xc=function(n){n.deleteContents()},Cc=function(n){return{left:m.constant(n.left),top:m.constant(n.top),right:m.constant(n.right),bottom:m.constant(n.bottom),width:m.constant(n.width),height:m.constant(n.height)}},Sc={create:function(n){return n.document.createRange()},replaceWith:function(n,t){xc(n),n.insertNode(t.dom())},selectNodeContents:function(n,t){var e=n.document.createRange();return yc(e,t),e},selectNodeContentsUsing:yc,relativeToNative:function(n,t,e){var r,o,i=n.document.createRange();return r=i,t.fold(function(n){r.setStartBefore(n.dom())},function(n,t){r.setStart(n.dom(),t)},function(n){r.setStartAfter(n.dom())}),o=i,e.fold(function(n){o.setEndBefore(n.dom())},function(n,t){o.setEnd(n.dom(),t)},function(n){o.setEndAfter(n.dom())}),i},exactToNative:function(n,t,e,r,o){var i=n.document.createRange();return i.setStart(t.dom(),e),i.setEnd(r.dom(),o),i},deleteContents:xc,cloneFragment:function(n){var t=n.cloneContents();return en.fromDom(t)},getFirstRect:function(n){var t=n.getClientRects(),e=t.length>0?t[0]:n.getBoundingClientRect();return e.width>0||e.height>0?w.some(e).map(Cc):w.none()},getBounds:function(n){var t=n.getBoundingClientRect();return t.width>0||t.height>0?w.some(t).map(Cc):w.none()},isWithin:function(n,t){return t.compareBoundaryPoints(n.END_TO_START,n)<1&&t.compareBoundaryPoints(n.START_TO_END,n)>-1},toString:function(n){return n.toString()}},Rc=wr([{ltr:["start","soffset","finish","foffset"]},{rtl:["start","soffset","finish","foffset"]}]),Tc=function(n,t,e){return t(en.fromDom(e.startContainer),e.startOffset,en.fromDom(e.endContainer),e.endOffset)},Dc=function(n,t){var e,r,o,i=(e=n,t.match({domRange:function(n){return{ltr:m.constant(n),rtl:w.none}},relative:function(n,t){return{ltr:yn(function(){return Sc.relativeToNative(e,n,t)}),rtl:yn(function(){return w.some(Sc.relativeToNative(e,t,n))})}},exact:function(n,t,r,o){return{ltr:yn(function(){return Sc.exactToNative(e,n,t,r,o)}),rtl:yn(function(){return w.some(Sc.exactToNative(e,r,o,n,t))})}}}));return(o=(r=i).ltr()).collapsed?r.rtl().filter(function(n){return!1===n.collapsed}).map(function(n){return Rc.rtl(en.fromDom(n.endContainer),n.endOffset,en.fromDom(n.startContainer),n.startOffset)}).getOrThunk(function(){return Tc(0,Rc.ltr,o)}):Tc(0,Rc.ltr,o)},Ac=(Rc.ltr,Rc.rtl,Dc),kc=function(n,t){return Dc(n,t).match({ltr:function(t,e,r,o){var i=n.document.createRange();return i.setStart(t.dom(),e),i.setEnd(r.dom(),o),i},rtl:function(t,e,r,o){var i=n.document.createRange();return i.setStart(r.dom(),o),i.setEnd(t.dom(),e),i}})},Nc=function(n,t,e){return t>=n.left&&t<=n.right&&e>=n.top&&e<=n.bottom},Oc=function(n,t,e,r,o){if(0===o)return 0;if(t===r)return o-1;for(var i=r,u=1;u<o;u++){var a=n(u),c=Math.abs(t-a.left);if(e>a.bottom);else{if(e<a.top||c>i)return u-1;i=c}}return 0},Ec={locate:function(n,t,e,r){var o=n.dom().createRange();o.selectNode(t.dom());var i=o.getClientRects();return $o(i,function(n){return Nc(n,e,r)?w.some(n):w.none()}).map(function(o){return i=n,a=e,c=r,l=o,s=function(n){var t=i.dom().createRange();return t.setStart(u.dom(),n),t.collapse(!0),t},f=we.get(u=t).length,d=Oc(function(n){return s(n).getBoundingClientRect()},a,c,l.right,f),s(d);var i,u,a,c,l,s,f,d})}},Bc=function(n,t,e,r){var o=n.dom().createRange(),i=dt.children(t);return $o(i,function(t){return o.selectNode(t.dom()),Nc(o.getBoundingClientRect(),e,r)?Ic(n,t,e,r):w.none()})},Ic=function(n,t,e,r){return(xt.isText(t)?Ec.locate:Bc)(n,t,e,r)},Pc=function(n,t,e,r){var o=n.dom().createRange();o.selectNode(t.dom());var i=o.getBoundingClientRect(),u=Math.max(i.left,Math.min(i.right,e)),a=Math.max(i.top,Math.min(i.bottom,r));return Ic(n,t,u,a)},Wc=function(n,t){return t-n.left<n.right-t},_c=function(n,t,e){var r=n.dom().createRange();return r.selectNode(t.dom()),r.collapse(e),r},Mc=function(n,t,e){var r=n.dom().createRange();r.selectNode(t.dom());var o=r.getBoundingClientRect(),i=Wc(o,e);return(!0===i?Te.first:Te.last)(t).map(function(t){return _c(n,t,i)})},Lc=function(n,t,e){var r=t.dom().getBoundingClientRect(),o=Wc(r,e);return w.some(_c(n,t,o))},qc=function(n,t,e){return(0===dt.children(t).length?Lc:Mc)(n,t,e)},zc=document.caretPositionFromPoint?function(n,t,e){return w.from(n.dom().caretPositionFromPoint(t,e)).bind(function(t){if(null===t.offsetNode)return w.none();var e=n.dom().createRange();return e.setStart(t.offsetNode,t.offset),e.collapse(),w.some(e)})}:document.caretRangeFromPoint?function(n,t,e){return w.from(n.dom().caretRangeFromPoint(t,e))}:function(n,t,e){return en.fromPoint(n,t,e).bind(function(r){var o=function(){return qc(n,r,t)};return 0===dt.children(r).length?o():function(n,t,e,r){var o=n.dom().createRange();o.selectNode(t.dom());var i=o.getBoundingClientRect(),u=Math.max(i.left,Math.min(i.right,e)),a=Math.max(i.top,Math.min(i.bottom,r));return Pc(n,t,u,a)}(n,r,t,e).orThunk(o)})},Fc=function(n,t,e){var r=en.fromDom(n.document);return zc(r,t,e).map(function(n){return vc.range(en.fromDom(n.startContainer),n.startOffset,en.fromDom(n.endContainer),n.endOffset)})},jc=function(n,t){var e=xt.name(n);return"input"===e?gc.after(n):B.contains(["br","img"],e)?0===t?gc.before(n):gc.after(n):gc.on(n,t)},Hc=function(n,t){var e=n.fold(gc.before,jc,gc.after),r=t.fold(gc.before,jc,gc.after);return vc.relative(e,r)},Vc=function(n,t,e,r){var o=jc(n,t),i=jc(e,r);return vc.relative(o,i)},Uc=function(n){return n.match({domRange:function(n){var t=en.fromDom(n.startContainer),e=en.fromDom(n.endContainer);return Vc(t,n.startOffset,e,n.endOffset)},relative:Hc,exact:Vc})},Gc=Hc,Xc=Vc,Yc=function(n,t){w.from(n.getSelection()).each(function(n){n.removeAllRanges(),n.addRange(t)})},$c=function(n,t,e,r,o){var i=Sc.exactToNative(n,t,e,r,o);Yc(n,i)},Kc=function(n,t){return Ac(n,t).match({ltr:function(t,e,r,o){$c(n,t,e,r,o)},rtl:function(t,e,r,o){var i=n.getSelection();i.extend?(i.collapse(t.dom(),e),i.extend(r.dom(),o)):$c(n,r,o,t,e)}})},Jc=function(n){var t=en.fromDom(n.anchorNode),e=en.fromDom(n.focusNode);return wc(t,n.anchorOffset,e,n.focusOffset)?w.some(vc.range(en.fromDom(n.anchorNode),n.anchorOffset,en.fromDom(n.focusNode),n.focusOffset)):function(n){if(n.rangeCount>0){var t=n.getRangeAt(0),e=n.getRangeAt(n.rangeCount-1);return w.some(vc.range(en.fromDom(t.startContainer),t.startOffset,en.fromDom(e.endContainer),e.endOffset))}return w.none()}(n)},Qc=function(n){var t=n.getSelection();return t.rangeCount>0?Jc(t):w.none()},Zc=function(n,t,e,r,o){var i=Xc(t,e,r,o);Kc(n,i)},nl=function(n){return Qc(n).map(function(n){return vc.exact(n.start(),n.soffset(),n.finish(),n.foffset())})},tl=function(n,t,e){var r=Gc(t,e);Kc(n,r)},el=function(n){var t=vc.getWin(n).dom(),e=function(n,e,r,o){return Sc.exactToNative(t,n,e,r,o)},r=Uc(n);return Ac(t,r).match({ltr:e,rtl:e})},rl=function(n,t){var e=Sc.selectNodeContents(n,t);Yc(n,e)},ol=function(n){n.getSelection().removeAllRanges()},il=function(n,t){var e=kc(n,t);return Sc.getFirstRect(e)},ul=function(n,t,e){return Fc(n,t,e)},al=tinymce.util.Tools.resolve("tinymce.util.VK"),cl=function(n,t,e,r){return fl(n,t,fc(e),r)},ll=function(n,t,e,r){return fl(n,t,dc(e),r)},sl=function(n,t){var e=vc.exact(t,0,t,0);return el(e)},fl=function(n,t,e,r,o){return e.fold(w.none,w.none,function(n,t){return Te.first(t).map(function(n){return sl(0,n)})},function(e){return Vt(e,t).bind(function(t){var o,i=kr.noMenu(e);return n.undoManager.transact(function(){r.insertRowsAfter(t,i)}),o=Bt.descendants(t,"tr"),B.last(o).bind(function(n){return qt.descendant(n,"td,th").map(function(n){return sl(0,n)})})})})},dl=["table","li","dl"],ml={handle:function(n,t,e,r){if(n.keyCode===al.TAB){var o=sa.getBody(t),i=function(n){var t=xt.name(n);return ot.eq(n,o)||B.contains(dl,t)},u=t.selection.getRng();if(u.collapsed){var a=en.fromDom(u.startContainer);jt(a,i).each(function(o){n.preventDefault(),(n.shiftKey?ll:cl)(t,i,o,e,r).each(function(n){t.selection.setRng(n)})})}}}},gl={response:X.immutable("selection","kill")},pl=function(n){return function(t){return t===n}},hl=pl(38),vl=pl(40),bl={ltr:{isBackward:pl(37),isForward:pl(39)},rtl:{isBackward:pl(39),isForward:pl(37)},isUp:hl,isDown:vl,isNavigation:function(n){return n>=37&&n<=40}},wl=function(n,t){var e=kc(n,t);return{start:m.constant(en.fromDom(e.startContainer)),soffset:m.constant(e.startOffset),finish:m.constant(en.fromDom(e.endContainer)),foffset:m.constant(e.endOffset)}},yl=function(n,t,e,r){return{start:m.constant(gc.on(n,t)),finish:m.constant(gc.on(e,r))}},xl=(tt.detect().browser.isSafari(),function(n){var t=n!==undefined?n.dom():document,e=t.body.scrollLeft||t.documentElement.scrollLeft,r=t.body.scrollTop||t.documentElement.scrollTop;return oo(e,r)}),Cl=xl,Sl=function(n,t,e){(e!==undefined?e.dom():document).defaultView.scrollBy(n,t)},Rl=function(n){return{elementFromPoint:function(t,e){return w.from(n.document.elementFromPoint(t,e)).map(en.fromDom)},getRect:function(n){return n.dom().getBoundingClientRect()},getRangedRect:function(t,e,r,o){var i=vc.exact(t,e,r,o);return il(n,i).map(function(n){return L.map(n,m.apply)})},getSelection:function(){return nl(n).map(function(t){return wl(n,t)})},fromSitus:function(t){var e=vc.relative(t.start(),t.finish());return wl(n,e)},situsFromPoint:function(t,e){return ul(n,t,e).map(function(n){return{start:m.constant(gc.on(n.start(),n.soffset())),finish:m.constant(gc.on(n.finish(),n.foffset()))}})},clearSelection:function(){ol(n)},setSelection:function(t){Zc(n,t.start(),t.soffset(),t.finish(),t.foffset())},setRelativeSelection:function(t,e){tl(n,t,e)},selectContents:function(t){rl(n,t)},getInnerHeight:function(){return n.innerHeight},getScrollY:function(){return Cl(en.fromDom(n.document)).top()},scrollBy:function(t,e){Sl(t,e,en.fromDom(n.document))}}},Tl=function(n,t,e,r,o){if(!ot.eq(e,r))return lr(e,r,t).bind(function(t){var r=t.boxes().getOr([]);return r.length>0?(o(n,r,t.start(),t.finish()),w.some(gl.response(w.some(yl(e,0,e,Ce(e))),!0))):w.none()})},Dl={sync:function(n,t,e,r,o,i,u){return ot.eq(e,o)&&r===i?w.none():qt.closest(e,"td,th",t).bind(function(e){return qt.closest(o,"td,th",t).bind(function(r){return Tl(n,t,e,r,u)})})},detect:Tl,update:function(n,t,e,r,o){return fr(r,n,t,o.firstSelectedSelector(),o.lastSelectedSelector()).map(function(n){return o.clear(e),o.selectRange(e,n.boxes(),n.start(),n.finish()),n.boxes()})}},Al=X.immutableBag(["left","top","right","bottom"],[]),kl={nu:Al,moveUp:function(n,t){return Al({left:n.left(),top:n.top()-t,right:n.right(),bottom:n.bottom()-t})},moveDown:function(n,t){return Al({left:n.left(),top:n.top()+t,right:n.right(),bottom:n.bottom()+t})},moveBottomTo:function(n,t){var e=n.bottom()-n.top();return Al({left:n.left(),top:t-e,right:n.right(),bottom:t})},moveTopTo:function(n,t){var e=n.bottom()-n.top();return Al({left:n.left(),top:t,right:n.right(),bottom:t+e})},getTop:function(n){return n.top()},getBottom:function(n){return n.bottom()},translate:function(n,t,e){return Al({left:n.left()+t,top:n.top()+e,right:n.right()+t,bottom:n.bottom()+e})},toString:function(n){return"("+n.left()+", "+n.top()+") -> ("+n.right()+", "+n.bottom()+")"}},Nl=function(n){return kl.nu({left:n.left,top:n.top,right:n.right,bottom:n.bottom})},Ol=function(n,t){return w.some(n.getRect(t))},El=function(n,t,e){return xt.isElement(t)?Ol(n,t).map(Nl):xt.isText(t)?(r=n,o=t,i=e,i>=0&&i<Ce(o)?r.getRangedRect(o,i,o,i+1):i>0?r.getRangedRect(o,i-1,o,i):w.none()).map(Nl):w.none();var r,o,i},Bl=function(n,t){return xt.isElement(t)?Ol(n,t).map(Nl):xt.isText(t)?n.getRangedRect(t,0,t,Ce(t)).map(Nl):w.none()},Il=X.immutable("item","mode"),Pl=function(n,t,e,r){var o=r!==undefined?r:Wl;return n.property().parent(t).map(function(n){return Il(n,o)})},Wl=function(n,t,e,r){var o=r!==undefined?r:_l;return e.sibling(n,t).map(function(n){return Il(n,o)})},_l=function(n,t,e,r){var o=r!==undefined?r:_l,i=n.property().children(t);return e.first(i).map(function(n){return Il(n,o)})},Ml=[{current:Pl,next:Wl,fallback:w.none()},{current:Wl,next:_l,fallback:w.some(Pl)},{current:_l,next:_l,fallback:w.some(Wl)}],Ll=function(n,t,e,r,o){return o=o!==undefined?o:Ml,B.find(o,function(n){return n.current===e}).bind(function(e){return e.current(n,t,r,e.next).orThunk(function(){return e.fallback.bind(function(e){return Ll(n,t,e,r)})})})},ql={backtrack:Pl,sidestep:Wl,advance:_l,go:Ll},zl={left:function(){return{sibling:function(n,t){return n.query().prevSibling(t)},first:function(n){return n.length>0?w.some(n[n.length-1]):w.none()}}},right:function(){return{sibling:function(n,t){return n.query().nextSibling(t)},first:function(n){return n.length>0?w.some(n[0]):w.none()}}}},Fl=function(n,t,e,r,o,i){return ql.go(n,t,r,o).bind(function(t){return i(t.item())?w.none():e(t.item())?w.some(t.item()):Fl(n,t.item(),e,t.mode(),o,i)})},jl=function(n,t,e,r){return Fl(n,t,e,ql.sidestep,zl.left(),r)},Hl=function(n,t,e,r){return Fl(n,t,e,ql.sidestep,zl.right(),r)},Vl=function(n,t){return 0===n.property().children(t).length},Ul=function(n,t,e,r){return jl(n,t,e,r)},Gl=function(n,t,e,r){return Hl(n,t,e,r)},Xl={before:function(n,t,e){return Ul(n,t,m.curry(Vl,n),e)},after:function(n,t,e){return Gl(n,t,m.curry(Vl,n),e)},seekLeft:Ul,seekRight:Gl,walkers:function(){return{left:zl.left,right:zl.right}},walk:function(n,t,e,r,o){return ql.go(n,t,e,r,o)},backtrack:ql.backtrack,sidestep:ql.sidestep,advance:ql.advance},Yl=Pe(),$l={gather:function(n,t,e){return Xl.gather(Yl,n,t,e)},before:function(n,t){return Xl.before(Yl,n,t)},after:function(n,t){return Xl.after(Yl,n,t)},seekLeft:function(n,t,e){return Xl.seekLeft(Yl,n,t,e)},seekRight:function(n,t,e){return Xl.seekRight(Yl,n,t,e)},walkers:function(){return Xl.walkers()},walk:function(n,t,e,r){return Xl.walk(Yl,n,t,e,r)}},Kl=wr([{none:[]},{retry:["caret"]}]),Jl=function(n,t,e){return Mt.closest(t,zo).fold(m.constant(!1),function(t){return Bl(n,t).exists(function(n){return r=n,(t=e).left()<r.left()||Math.abs(r.right()-t.left())<1||t.left()>r.right();var t,r})})},Ql={point:kl.getTop,adjuster:function(n,t,e,r,o){var i=kl.moveUp(o,5);return Math.abs(e.top()-r.top())<1?Kl.retry(i):e.bottom()<o.top()?Kl.retry(i):e.bottom()===o.top()?Kl.retry(kl.moveUp(o,1)):Jl(n,t,o)?Kl.retry(kl.translate(i,5,0)):Kl.none()},move:kl.moveUp,gather:$l.before},Zl={point:kl.getBottom,adjuster:function(n,t,e,r,o){var i=kl.moveDown(o,5);return Math.abs(e.bottom()-r.bottom())<1?Kl.retry(i):e.top()>o.bottom()?Kl.retry(i):e.top()===o.bottom()?Kl.retry(kl.moveDown(o,1)):Jl(n,t,o)?Kl.retry(kl.translate(i,5,0)):Kl.none()},move:kl.moveDown,gather:$l.after},ns=function(n,t,e,r,o){return 0===o?w.some(r):(c=n,l=r.left(),s=t.point(r),c.elementFromPoint(l,s).filter(function(n){return"table"===xt.name(n)}).isSome()?(u=r,a=o-1,ns(n,i=t,e,i.move(u,5),a)):n.situsFromPoint(r.left(),t.point(r)).bind(function(i){return i.start().fold(w.none,function(i,u){return Bl(n,i,u).bind(function(u){return t.adjuster(n,i,u,e,r).fold(w.none,function(r){return ns(n,t,e,r,o-1)})}).orThunk(function(){return w.some(r)})},w.none)}));var i,u,a,c,l,s},ts=function(n,t,e){var r,o,i,u=n.move(e,5),a=ns(t,n,e,u,100).getOr(u);return(r=n,o=a,i=t,r.point(o)>i.getInnerHeight()?w.some(r.point(o)-i.getInnerHeight()):r.point(o)<0?w.some(-r.point(o)):w.none()).fold(function(){return t.situsFromPoint(a.left(),n.point(a))},function(e){return t.scrollBy(0,e),t.situsFromPoint(a.left(),n.point(a)-e)})},es={tryUp:m.curry(ts,Ql),tryDown:m.curry(ts,Zl),ieTryUp:function(n,t){return n.situsFromPoint(t.left(),t.top()-5)},ieTryDown:function(n,t){return n.situsFromPoint(t.left(),t.bottom()+5)},getJumpSize:m.constant(5)},rs=wr([{none:["message"]},{success:[]},{failedUp:["cell"]},{failedDown:["cell"]}]),os=function(n){return qt.closest(n,"tr")},is={verify:function(n,t,e,r,o,i,u){return qt.closest(r,"td,th",u).bind(function(e){return qt.closest(t,"td,th",u).map(function(t){return ot.eq(e,t)?ot.eq(r,e)&&Ce(e)===o?i(t):rs.none("in same cell"):Ve(os,[e,t]).fold(function(){return o=t,u=e,a=(r=n).getRect(o),(c=r.getRect(u)).right>a.left&&c.left<a.right?rs.success():i(t);var r,o,u,a,c},function(n){return i(t)})})}).getOr(rs.none("default"))},cata:function(n,t,e,r,o){return n.fold(t,e,r,o)},adt:rs},us={point:X.immutable("element","offset"),delta:X.immutable("element","deltaOffset"),range:X.immutable("element","start","finish"),points:X.immutable("begin","end"),text:X.immutable("element","text")},as=(X.immutable("ancestor","descendants","element","index"),X.immutable("parent","children","element","index")),cs=function(n,t){return B.findIndex(n,m.curry(ot.eq,t))},ls=function(n){return dt.parent(n).bind(function(t){var e=dt.children(t);return cs(e,n).map(function(r){return as(t,e,n,r)})})},ss=function(n){return"br"===xt.name(n)},fs=function(n,t,e){return t(n,e).bind(function(n){return xt.isText(n)&&0===we.get(n).trim().length?fs(n,t,e):w.some(n)})},ds=function(n,t,e,r){return(o=t,i=e,dt.child(o,i).filter(ss).orThunk(function(){return dt.child(o,i-1).filter(ss)})).bind(function(t){return r.traverse(t).fold(function(){return fs(t,r.gather,n).map(r.relative)},function(n){return ls(n).map(function(n){return gc.on(n.parent(),n.index())})})});var o,i},ms=function(n,t,e,r){var o,i,u;return(ss(t)?(o=n,i=t,(u=r).traverse(i).orThunk(function(){return fs(i,u.gather,o)}).map(u.relative)):ds(n,t,e,r)).map(function(n){return{start:m.constant(n),finish:m.constant(n)}})},gs=function(n){return is.cata(n,function(n){return w.none("BR ADT: none")},function(){return w.none()},function(n){return w.some(us.point(n,0))},function(n){return w.some(us.point(n,Ce(n)))})},ps=tt.detect(),hs=function(n,t,e,r,o,i){return 0===i?w.none():ws(n,t,e,r,o).bind(function(u){var a=n.fromSitus(u),c=is.verify(n,e,r,a.finish(),a.foffset(),o.failure,t);return is.cata(c,function(){return w.none()},function(){return w.some(u)},function(u){return ot.eq(e,u)&&0===r?vs(n,e,r,kl.moveUp,o):hs(n,t,u,0,o,i-1)},function(u){return ot.eq(e,u)&&r===Ce(u)?vs(n,e,r,kl.moveDown,o):hs(n,t,u,Ce(u),o,i-1)})})},vs=function(n,t,e,r,o){return El(n,t,e).bind(function(t){return bs(n,o,r(t,es.getJumpSize()))})},bs=function(n,t,e){return ps.browser.isChrome()||ps.browser.isSafari()||ps.browser.isFirefox()||ps.browser.isEdge()?t.otherRetry(n,e):ps.browser.isIE()?t.ieRetry(n,e):w.none()},ws=function(n,t,e,r,o){return El(n,e,r).bind(function(t){return bs(n,o,t)})},ys=function(n,t,e){return(r=n,o=t,i=e,r.getSelection().bind(function(n){return ms(o,n.finish(),n.foffset(),i).fold(function(){return w.some(us.point(n.finish(),n.foffset()))},function(t){var e=r.fromSitus(t),u=is.verify(r,n.finish(),n.foffset(),e.finish(),e.foffset(),i.failure,o);return gs(u)})})).bind(function(r){return hs(n,t,r.element(),r.offset(),e,20).map(n.fromSitus)});var r,o,i},xs=function(n,t,e){return Mt.ancestor(n,t,e).isSome()},Cs=tt.detect(),Ss=function(n,t,e,r,o){return qt.closest(r,"td,th",t).bind(function(r){return qt.closest(r,"table",t).bind(function(i){return u=i,xs(o,function(n){return dt.parent(n).exists(function(n){return ot.eq(n,u)})})?ys(n,t,e).bind(function(n){return qt.closest(n.finish(),"td,th",t).map(function(t){return{start:m.constant(r),finish:m.constant(t),range:m.constant(n)}})}):w.none();var u})})},Rs=function(n,t,e,r,o,i){return Cs.browser.isIE()?w.none():i(r,t).orThunk(function(){return Ss(n,t,e,r,o).map(function(n){var t=n.range();return gl.response(w.some(yl(t.start(),t.soffset(),t.finish(),t.foffset())),!0)})})},Ts=function(n,t,e,r,o,i,u){return Ss(n,e,r,o,i).bind(function(n){return Dl.detect(t,e,n.start(),n.finish(),u)})},Ds=function(n,t){return qt.closest(n,"tr",t).bind(function(n){return qt.closest(n,"table",t).bind(function(e){var r=Bt.descendants(e,"tr");return ot.eq(n,r[0])?$l.seekLeft(e,function(n){return Te.last(n).isSome()},t).map(function(n){var t=Ce(n);return gl.response(w.some(yl(n,t,n,t)),!0)}):w.none()})})},As=function(n,t){return qt.closest(n,"tr",t).bind(function(n){return qt.closest(n,"table",t).bind(function(e){var r=Bt.descendants(e,"tr");return ot.eq(n,r[r.length-1])?$l.seekRight(e,function(n){return Te.first(n).isSome()},t).map(function(n){return gl.response(w.some(yl(n,0,n,0)),!0)}):w.none()})})},ks=function(n,t){return qt.closest(n,"td,th",t)},Ns={down:{traverse:dt.nextSibling,gather:$l.after,relative:gc.before,otherRetry:es.tryDown,ieRetry:es.ieTryDown,failure:is.adt.failedDown},up:{traverse:dt.prevSibling,gather:$l.before,relative:gc.before,otherRetry:es.tryUp,ieRetry:es.ieTryUp,failure:is.adt.failedUp}},Os=X.immutable("rows","cols"),Es=function(n,t,e,r){var o,i,u,a,c,l,s=Rl(n),f=(o=s,i=t,u=e,a=r,c=w.none(),l=function(){c=w.none()},{mousedown:function(n){a.clear(i),c=ks(n.target(),u)},mouseover:function(n){c.each(function(t){a.clear(i),ks(n.target(),u).each(function(n){lr(t,n,u).each(function(e){var r=e.boxes().getOr([]);(r.length>1||1===r.length&&!ot.eq(t,n))&&(a.selectRange(i,r,e.start(),e.finish()),o.selectContents(n))})})})},mouseup:function(){c.each(l)}});return{mousedown:f.mousedown,mouseover:f.mouseover,mouseup:f.mouseup}},Bs=function(n,t,e,r){var o=Rl(n),i=function(){return r.clear(t),w.none()};return{keydown:function(n,u,a,c,l,s){var f=n.raw().which,d=!0===n.raw().shiftKey;return sr(t,r.selectedSelector()).fold(function(){return bl.isDown(f)&&d?m.curry(Ts,o,t,e,Ns.down,c,u,r.selectRange):bl.isUp(f)&&d?m.curry(Ts,o,t,e,Ns.up,c,u,r.selectRange):bl.isDown(f)?m.curry(Rs,o,e,Ns.down,c,u,As):bl.isUp(f)?m.curry(Rs,o,e,Ns.up,c,u,Ds):w.none},function(n){var e=function(e){return function(){return $o(e,function(e){return Dl.update(e.rows(),e.cols(),t,n,r)}).fold(function(){return dr(t,r.firstSelectedSelector(),r.lastSelectedSelector()).map(function(n){var e=bl.isDown(f)||s.isForward(f)?gc.after:gc.before;return o.setRelativeSelection(gc.on(n.first(),0),e(n.table())),r.clear(t),gl.response(w.none(),!0)})},function(n){return w.some(gl.response(w.none(),!0))})}};return bl.isDown(f)&&d?e([Os(1,0)]):bl.isUp(f)&&d?e([Os(-1,0)]):s.isBackward(f)&&d?e([Os(0,-1),Os(-1,0)]):s.isForward(f)&&d?e([Os(0,1),Os(1,0)]):bl.isNavigation(f)&&!1===d?i:w.none})()},keyup:function(n,o,i,u,a){return sr(t,r.selectedSelector()).fold(function(){var c=n.raw().which;return 0==(!0===n.raw().shiftKey)?w.none():bl.isNavigation(c)?Dl.sync(t,e,o,i,u,a,r.selectRange):w.none()},w.none)}}},Is=function(n){var t=function(t){Dt.remove(t,n.selected()),Dt.remove(t,n.firstSelected()),Dt.remove(t,n.lastSelected())},e=function(t){Dt.set(t,n.selected(),"1")},r=function(e){var r=Bt.descendants(e,n.selectedSelector());B.each(r,t)};return{clear:r,selectRange:function(t,o,i,u){r(t),B.each(o,e),Dt.set(i,n.firstSelected(),"1"),Dt.set(u,n.lastSelected(),"1")},selectedSelector:n.selectedSelector,firstSelectedSelector:n.firstSelectedSelector,lastSelectedSelector:n.lastSelectedSelector}},Ps=function(n,t){var e=X.immutableBag(["mousedown","mouseover","mouseup","keyup","keydown"],[]),r=w.none(),o=Is(br);return n.on("init",function(i){var u=n.getWin(),a=sa.getBody(n),c=sa.getIsRoot(n),l=Es(u,a,c,o),s=Bs(u,a,c,o),f=function(t,e){e.kill()&&t.kill(),e.selection().each(function(t){var e=vc.relative(t.start(),t.finish()),r=kc(u,e);n.selection.setRng(r)})},d=function(t){var e=h(t);if(e.raw().shiftKey&&bl.isNavigation(e.raw().which)){var r=n.selection.getRng(),o=en.fromDom(r.startContainer),i=en.fromDom(r.endContainer);s.keyup(e,o,r.startOffset,i,r.endOffset).each(function(n){f(e,n)})}},g=function(n){return!(Dt.has(n,"data-mce-bogus")||"br"===xt.name(n)||xt.isText(n)&&0===we.get(n).length)},p=function(e){var r,o,i=h(e);t().each(function(n){n.hideBars()}),40===e.which&&(r=en.fromDom(n.getBody()),o=function(n){return dt.prevSibling(n).bind(function(n){return g(n)?w.some(n):o(n)})},dt.lastChild(r).bind(function(n){return g(n)?w.some(n):o(n)})).each(function(t){"table"===xt.name(t)&&(n.settings.forced_root_block?n.dom.add(n.getBody(),n.settings.forced_root_block,n.settings.forced_root_block_attrs,"<br/>"):n.dom.add(n.getBody(),"br"))});var u=n.selection.getRng(),a=en.fromDom(n.selection.getStart()),c=en.fromDom(u.startContainer),l=en.fromDom(u.endContainer),d=pa(a).isRtl()?bl.rtl:bl.ltr;s.keydown(i,c,u.startOffset,l,u.endOffset,d).each(function(n){f(i,n)}),t().each(function(n){n.showBars()})},h=function(n){var t=en.fromDom(n.target),e=function(){n.stopPropagation()},r=function(){n.preventDefault()},o=m.compose(r,e);return{target:m.constant(t),x:m.constant(n.x),y:m.constant(n.y),stop:e,prevent:r,kill:o,raw:m.constant(n)}},v=function(n){return 0===n.button},b=function(n){v(n)&&l.mousedown(h(n))},y=function(n){var t;((t=n).buttons===undefined||0!=(1&t.buttons))&&l.mouseover(h(n))},x=function(n){v&&l.mouseup(h(n))};n.on("mousedown",b),n.on("mouseover",y),n.on("mouseup",x),n.on("keyup",d),n.on("keydown",p),n.on("nodechange",function(){var t=n.selection,e=en.fromDom(t.getStart()),r=en.fromDom(t.getEnd()),i=Vt(e),u=Vt(r);i.bind(function(n){return u.bind(function(t){return ot.eq(n,t)?w.some(!0):w.none()})}).fold(function(){o.clear(a)},m.noop)}),r=w.some(e({mousedown:b,mouseover:y,mouseup:x,keyup:d,keydown:p}))}),{clear:o.clear,destroy:function(){r.each(function(n){})}}},Ws=function(n){return{get:function(){var t=sa.getBody(n);return mr(t,br.selectedSelector()).fold(function(){return n.selection.getStart()===undefined?xr.none():xr.single(n.selection)},function(n){return xr.multiple(n)})}}},_s=ba.each,Ms={addButtons:function(n){var t=[];function e(t){return function(){n.execCommand(t)}}_s("inserttable tableprops deletetable | cell row column".split(" "),function(e){"|"===e?t.push({text:"-"}):t.push(n.menuItems[e])}),n.addButton("table",{type:"menubutton",title:"Table",menu:t}),n.addButton("tableprops",{title:"Table properties",onclick:m.curry(Ta,n,!0),icon:"table"}),n.addButton("tabledelete",{title:"Delete table",onclick:e("mceTableDelete")}),n.addButton("tablecellprops",{title:"Cell properties",onclick:e("mceTableCellProps")}),n.addButton("tablemergecells",{title:"Merge cells",onclick:e("mceTableMergeCells")}),n.addButton("tablesplitcells",{title:"Split cell",onclick:e("mceTableSplitCells")}),n.addButton("tableinsertrowbefore",{title:"Insert row before",onclick:e("mceTableInsertRowBefore")}),n.addButton("tableinsertrowafter",{title:"Insert row after",onclick:e("mceTableInsertRowAfter")}),n.addButton("tabledeleterow",{title:"Delete row",onclick:e("mceTableDeleteRow")}),n.addButton("tablerowprops",{title:"Row properties",onclick:e("mceTableRowProps")}),n.addButton("tablecutrow",{title:"Cut row",onclick:e("mceTableCutRow")}),n.addButton("tablecopyrow",{title:"Copy row",onclick:e("mceTableCopyRow")}),n.addButton("tablepasterowbefore",{title:"Paste row before",onclick:e("mceTablePasteRowBefore")}),n.addButton("tablepasterowafter",{title:"Paste row after",onclick:e("mceTablePasteRowAfter")}),n.addButton("tableinsertcolbefore",{title:"Insert column before",onclick:e("mceTableInsertColBefore")}),n.addButton("tableinsertcolafter",{title:"Insert column after",onclick:e("mceTableInsertColAfter")}),n.addButton("tabledeletecol",{title:"Delete column",onclick:e("mceTableDeleteCol")})},addToolbars:function(n){var t=n.settings.table_toolbar;""!==t&&!1!==t&&(t||(t="tableprops tabledelete | tableinsertrowbefore tableinsertrowafter tabledeleterow | tableinsertcolbefore tableinsertcolafter tabledeletecol"),n.addContextToolbar(function(t){return n.dom.is(t,"table")&&n.getBody().contains(t)},t))}},Ls={addMenuItems:function(n,t){var e=w.none(),r=[],o=[],i=[],u=[],a=function(n){n.disabled(!0)},c=function(n){n.disabled(!1)},l=function(){var n=this;r.push(n),e.fold(function(){a(n)},function(t){c(n)})},s=function(){var n=this;o.push(n),e.fold(function(){a(n)},function(t){c(n)})};n.on("init",function(){n.on("nodechange",function(l){var s=w.from(n.dom.getParent(n.selection.getStart(),"th,td"));(e=s.bind(function(n){var e=en.fromDom(n);return Vt(e).map(function(n){return kr.forMenu(t,n,e)})})).fold(function(){B.each(r,a),B.each(o,a),B.each(i,a),B.each(u,a)},function(n){B.each(r,c),B.each(o,c),B.each(i,function(t){t.disabled(n.mergable().isNone())}),B.each(u,function(t){t.disabled(n.unmergable().isNone())})})})});var f=function(n,t,e,r){var o,i,u,a,c,l=r.getEl().getElementsByTagName("table")[0],s=r.isRtl()||"tl-tr"===r.parent().rel;for(l.nextSibling.innerHTML=t+1+" x "+(e+1),s&&(t=9-t),i=0;i<10;i++)for(o=0;o<10;o++)a=l.rows[i].childNodes[o].firstChild,c=(s?o>=t:o<=t)&&i<=e,n.dom.toggleClass(a,"mce-active",c),c&&(u=a);return u.parentNode},d=!1===n.settings.table_grid?{text:"Table",icon:"table",context:"table",onclick:m.curry(Ta,n)}:{text:"Table",icon:"table",context:"table",ariaHideMenu:!0,onclick:function(t){t.aria&&(this.parent().hideAll(),t.stopImmediatePropagation(),Ta(n))},onshow:function(){f(n,0,0,this.menu.items()[0])},onhide:function(){var t=this.menu.items()[0].getEl().getElementsByTagName("a");n.dom.removeClass(t,"mce-active"),n.dom.addClass(t[0],"mce-active")},menu:[{type:"container",html:function(){var n="";n='<table role="grid" class="mce-grid mce-grid-border" aria-readonly="true">';for(var t=0;t<10;t++){n+="<tr>";for(var e=0;e<10;e++)n+='<td role="gridcell" tabindex="-1"><a id="mcegrid'+(10*t+e)+'" href="#" data-mce-x="'+e+'" data-mce-y="'+t+'"></a></td>';n+="</tr>"}return n+="</table>",n+='<div class="mce-text-center" role="presentation">1 x 1</div>'}(),onPostRender:function(){this.lastX=this.lastY=0},onmousemove:function(t){var e,r,o=t.target;"A"===o.tagName.toUpperCase()&&(e=parseInt(o.getAttribute("data-mce-x"),10),r=parseInt(o.getAttribute("data-mce-y"),10),(this.isRtl()||"tl-tr"===this.parent().rel)&&(e=9-e),e===this.lastX&&r===this.lastY||(f(n,e,r,t.control),this.lastX=e,this.lastY=r))},onclick:function(t){var e=this;"A"===t.target.tagName.toUpperCase()&&(t.preventDefault(),t.stopPropagation(),e.parent().cancel(),n.undoManager.transact(function(){Pr.insert(n,e.lastX+1,e.lastY+1)}),n.addVisual())}}]};function g(t){return function(){n.execCommand(t)}}var p={text:"Table properties",context:"table",onPostRender:l,onclick:m.curry(Ta,n,!0)},h={text:"Delete table",context:"table",onPostRender:l,cmd:"mceTableDelete"},v={text:"Row",context:"table",menu:[{text:"Insert row before",onclick:g("mceTableInsertRowBefore"),onPostRender:s},{text:"Insert row after",onclick:g("mceTableInsertRowAfter"),onPostRender:s},{text:"Delete row",onclick:g("mceTableDeleteRow"),onPostRender:s},{text:"Row properties",onclick:g("mceTableRowProps"),onPostRender:s},{text:"-"},{text:"Cut row",onclick:g("mceTableCutRow"),onPostRender:s},{text:"Copy row",onclick:g("mceTableCopyRow"),onPostRender:s},{text:"Paste row before",onclick:g("mceTablePasteRowBefore"),onPostRender:s},{text:"Paste row after",onclick:g("mceTablePasteRowAfter"),onPostRender:s}]},b={text:"Column",context:"table",menu:[{text:"Insert column before",onclick:g("mceTableInsertColBefore"),onPostRender:s},{text:"Insert column after",onclick:g("mceTableInsertColAfter"),onPostRender:s},{text:"Delete column",onclick:g("mceTableDeleteCol"),onPostRender:s}]},y={separator:"before",text:"Cell",context:"table",menu:[{text:"Cell properties",onclick:g("mceTableCellProps"),onPostRender:s},{text:"Merge cells",onclick:g("mceTableMergeCells"),onPostRender:function(){var n=this;i.push(n),e.fold(function(){a(n)},function(t){n.disabled(t.mergable().isNone())})}},{text:"Split cell",onclick:g("mceTableSplitCells"),onPostRender:function(){var n=this;u.push(n),e.fold(function(){a(n)},function(t){n.disabled(t.unmergable().isNone())})}}]};n.addMenuItem("inserttable",d),n.addMenuItem("tableprops",p),n.addMenuItem("deletetable",h),n.addMenuItem("row",v),n.addMenuItem("column",b),n.addMenuItem("cell",y)}};f.add("table",function(n){var t=oc(n),e=Ps(n,t.lazyResize),r=ha(n,t.lazyWire),o=Ws(n);Ia.registerCommands(n,r,e,o),Nr.registerEvents(n,o,r,e),Ls.addMenuItems(n,o),Ms.addButtons(n),Ms.addToolbars(n),n.on("PreInit",function(){n.serializer.addTempAttr(br.firstSelected()),n.serializer.addTempAttr(br.lastSelected())}),!1!==n.settings.table_tab_navigation&&n.on("keydown",function(e){ml.handle(e,n,r,t.lazyWire)}),n.on("remove",function(){t.destroy(),e.destroy()}),this.insertTable=function(t,e){return Pr.insert(n,t,e)},this.setClipboardRows=Ia.setClipboardRows,this.getClipboardRows=Ia.getClipboardRows})}();!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),n=tinymce.util.Tools.resolve("tinymce.EditorManager"),i=tinymce.util.Tools.resolve("tinymce.Env"),o=tinymce.util.Tools.resolve("tinymce.util.Delay"),l=tinymce.util.Tools.resolve("tinymce.util.Tools"),u=tinymce.util.Tools.resolve("tinymce.util.VK"),r={getTabFocus:function(e){return e.getParam("tab_focus",e.getParam("tabfocus_elements",":prev,:next"))}},c=t.DOM,s=function(e){e.keyCode!==u.TAB||e.ctrlKey||e.altKey||e.metaKey||e.preventDefault()},a=function(e){function t(t){var s,a,y,f;if(!(t.keyCode!==u.TAB||t.ctrlKey||t.altKey||t.metaKey||t.isDefaultPrevented())&&(1===(y=l.explode(r.getTabFocus(e))).length&&(y[1]=y[0],y[0]=":prev"),a=t.shiftKey?":prev"===y[0]?m(-1):c.get(y[0]):":next"===y[1]?m(1):c.get(y[1]))){var d=n.get(a.id||a.name);a.id&&d?d.focus():o.setTimeout(function(){i.webkit||window.focus(),a.focus()},10),t.preventDefault()}function m(i){function o(e){return/INPUT|TEXTAREA|BUTTON/.test(e.tagName)&&n.get(t.id)&&-1!==e.tabIndex&&function i(e){return"BODY"===e.nodeName||"hidden"!==e.type&&"none"!==e.style.display&&"hidden"!==e.style.visibility&&i(e.parentNode)}(e)}if(a=c.select(":input:enabled,*[tabindex]:not(iframe)"),l.each(a,function(t,n){if(t.id===e.id)return s=n,!1}),i>0){for(f=s+1;f<a.length;f++)if(o(a[f]))return a[f]}else for(f=s-1;f>=0;f--)if(o(a[f]))return a[f];return null}}e.on("init",function(){e.inline&&c.setAttrib(e.getBody(),"tabIndex",null),e.on("keyup",s),i.gecko?e.on("keypress keydown",t):e.on("keydown",t)})};e.add("tabfocus",function(e){a(e)})}();!function(){"use strict";var e=function(t){var n=t,r=function(){return n};return{get:r,set:function(e){n=e},clone:function(){return e(r())}}},t=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=function(e){return!(!/(^|[ ,])tinymcespellchecker([, ]|$)/.test(e.settings.plugins)||!t.get("tinymcespellchecker")||("undefined"!=typeof window.console&&window.console.log&&window.console.log("Spell Checker Pro is incompatible with Spell Checker plugin! Remove 'spellchecker' from the 'plugins' option."),0))},r=function(e){return e.getParam("spellchecker_languages","English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr_FR,German=de,Italian=it,Polish=pl,Portuguese=pt_BR,Spanish=es,Swedish=sv")},o=function(e){var t=e.getParam("language","en");return e.getParam("spellchecker_language",t)},i=function(e){return e.getParam("spellchecker_rpc_url")},c=function(e){return e.getParam("spellchecker_callback")},a=function(e){var t=new RegExp('[^\\s!"#$%&()*+,-./:;<=>?@[\\]^_{|}`\xa7\xa9\xab\xae\xb1\xb6\xb7\xb8\xbb\xbc\xbd\xbe\xbf\xd7\xf7\xa4\u201d\u201c\u201e\xa0\u2002\u2003\u2009]+',"g");return e.getParam("spellchecker_wordchar_pattern",t)},l=tinymce.util.Tools.resolve("tinymce.util.Tools"),s=tinymce.util.Tools.resolve("tinymce.util.URI"),u=tinymce.util.Tools.resolve("tinymce.util.XHR"),d=function(e){return e.fire("SpellcheckStart")},f=function(e){return e.fire("SpellcheckEnd")};function h(e){return e&&1===e.nodeType&&"false"===e.contentEditable}var g,m=function(e,t){var n,r,o,i,c,a=[],l=t.dom;function s(e,t){if(!e[0])throw new Error("findAndReplaceDOMText cannot handle zero-length matches");return{start:e.index,end:e.index+e[0].length,text:e[0],data:t}}function u(t){var n=e.getElementsByTagName("*"),r=[];t="number"==typeof t?""+t:null;for(var o=0;o<n.length;o++){var i=n[o],c=i.getAttribute("data-mce-index");null!==c&&c.length&&-1!==i.className.indexOf("mce-spellchecker-word")&&(c!==t&&null!==t||r.push(i))}return r}function d(e){for(var t=a.length;t--;)if(a[t]===e)return t;return-1}function f(e){for(var t=0,n=a.length;t<n&&!1!==e(a[t],t);t++);return this}function g(e){var t,n,r=u(e?d(e):null);for(t=r.length;t--;)(n=r[t]).parentNode.insertBefore(n.firstChild,n),n.parentNode.removeChild(n);return this}function m(e){var n=u(d(e)),r=t.dom.createRng();return r.setStartBefore(n[0]),r.setEndAfter(n[n.length-1]),r}return o=t.schema.getBlockElements(),i=t.schema.getWhiteSpaceElements(),c=t.schema.getShortEndedElements(),{text:r=function p(e){var t;if(3===e.nodeType)return e.data;if(i[e.nodeName]&&!o[e.nodeName])return"";if(h(e))return"\n";if(t="",(o[e.nodeName]||c[e.nodeName])&&(t+="\n"),e=e.firstChild)do{t+=p(e)}while(e=e.nextSibling);return t}(e),matches:a,each:f,filter:function(e){var t=[];return f(function(n,r){e(n,r)&&t.push(n)}),a=t,this},reset:function(){return a.splice(0,a.length),g(),this},matchFromElement:function(e){return a[e.getAttribute("data-mce-index")]},elementFromMatch:function(e){return u(d(e))[0]},find:function(e,t){if(r&&e.global)for(;n=e.exec(r);)a.push(s(n,t));return this},add:function(e,t,n){return a.push({start:e,end:e+t,text:r.substr(e,t),data:n}),this},wrap:function(t){return a.length&&function(e,t,n){var r,a,l,s,u,d=[],f=0,g=e,m=0;(t=t.slice(0)).sort(function(e,t){return e.start-t.start}),u=t.shift();e:for(;;){if((o[g.nodeName]||c[g.nodeName]||h(g))&&f++,3===g.nodeType&&(!a&&g.length+f>=u.end?(a=g,s=u.end-f):r&&d.push(g),!r&&g.length+f>u.start&&(r=g,l=u.start-f),f+=g.length),r&&a){if(g=n({startNode:r,startNodeIndex:l,endNode:a,endNodeIndex:s,innerNodes:d,match:u.text,matchIndex:m}),f-=a.length-s,r=null,a=null,d=[],m++,!(u=t.shift()))break}else if(i[g.nodeName]&&!o[g.nodeName]||!g.firstChild){if(g.nextSibling){g=g.nextSibling;continue}}else if(!h(g)){g=g.firstChild;continue}for(;;){if(g.nextSibling){g=g.nextSibling;break}if(g.parentNode===e)break e;g=g.parentNode}}}(e,a,function(e){function t(t,n){var r=a[n];r.stencil||(r.stencil=e(r));var o=r.stencil.cloneNode(!1);return o.setAttribute("data-mce-index",n),t&&o.appendChild(l.doc.createTextNode(t)),o}return function(e){var n,r,o,i=e.startNode,c=e.endNode,a=e.matchIndex,s=l.doc;if(i===c){var u=i;o=u.parentNode,e.startNodeIndex>0&&(n=s.createTextNode(u.data.substring(0,e.startNodeIndex)),o.insertBefore(n,u));var d=t(e.match,a);return o.insertBefore(d,u),e.endNodeIndex<u.length&&(r=s.createTextNode(u.data.substring(e.endNodeIndex)),o.insertBefore(r,u)),u.parentNode.removeChild(u),d}n=s.createTextNode(i.data.substring(0,e.startNodeIndex)),r=s.createTextNode(c.data.substring(e.endNodeIndex));for(var f=t(i.data.substring(e.startNodeIndex),a),h=[],g=0,m=e.innerNodes.length;g<m;++g){var p=e.innerNodes[g],v=t(p.data,a);p.parentNode.replaceChild(v,p),h.push(v)}var x=t(c.data.substring(0,e.endNodeIndex),a);return(o=i.parentNode).insertBefore(n,i),o.insertBefore(f,i),o.removeChild(i),(o=c.parentNode).insertBefore(x,c),o.insertBefore(r,c),o.removeChild(c),x}}(t)),this},unwrap:g,replace:function(e,n){var r=m(e);return r.deleteContents(),n.length>0&&r.insertNode(t.dom.doc.createTextNode(n)),r},rangeFromMatch:m,indexOf:d}},p=function(e,t){if(!t.get()){var n=m(e.getBody(),e);t.set(n)}return t.get()},v=function(e,t,n,r,o,a,d){var f,h,g,m=c(e);(m||(f=e,h=t,g=n,function(e,t,n,r){var o={method:e,lang:g.get()},c="";o["addToDictionary"===e?"word":"text"]=t,l.each(o,function(e,t){c&&(c+="&"),c+=t+"="+encodeURIComponent(e)}),u.send({url:new s(h).toAbsolute(i(f)),type:"post",content_type:"application/x-www-form-urlencoded",data:c,success:function(e){if(e=JSON.parse(e))e.error?r(e.error):n(e);else{var t=f.translate("Server response wasn't proper JSON.");r(t)}},error:function(){var e=f.translate("The spelling service was not found: (")+i(f)+f.translate(")");r(e)}})})).call(e.plugins.spellchecker,r,o,a,d)},x=function(e,t,n){e.dom.select("span.mce-spellchecker-word").length||N(e,t,n)},N=function(e,t,n){if(p(e,n).reset(),n.set(null),t.get())return t.set(!1),f(e),!0},k=function(e){var t=e.getAttribute("data-mce-index");return"number"==typeof t?""+t:t},y=function(e,t,n,r,o){var i,c;if(o.words?(c=!!o.dictionary,i=o.words):i=o,e.setProgressState(!1),function(e){for(var t in e)return!1;return!0}(i)){var l=e.translate("No misspellings found.");return e.notificationManager.open({text:l,type:"info"}),void t.set(!1)}r.set({suggestions:i,hasDictionarySupport:c}),p(e,n).find(a(e)).filter(function(e){return!!i[e.text]}).wrap(function(t){return e.dom.create("span",{"class":"mce-spellchecker-word","data-mce-bogus":1,"data-mce-word":t.text})}),t.set(!0),d(e)},S={spellcheck:function(e,t,n,r,o,i){N(e,n,r)||(e.setProgressState(!0),v(e,t,i,"spellcheck",p(e,r).text,function(t){y(e,n,r,o,t)},function(t){e.notificationManager.open({text:t,type:"error"}),e.setProgressState(!1),N(e,n,r)}),e.focus())},checkIfFinished:x,addToDictionary:function(e,t,n,r,o,i){e.setProgressState(!0),v(e,t,"addToDictionary",o,function(){e.setProgressState(!1),e.dom.remove(i,!0),x(e,n,r)},function(t){e.notificationManager.open({text:t,type:"error"}),e.setProgressState(!1)})},ignoreWord:function(e,t,n,r,o,i){e.selection.collapse(),i?l.each(e.dom.select("span.mce-spellchecker-word"),function(t){t.getAttribute("data-mce-word")===r&&e.dom.remove(t,!0)}):e.dom.remove(o,!0),x(e,t,n)},findSpansByIndex:function(e,t){var n,r=[];if((n=l.toArray(e.getBody().getElementsByTagName("span"))).length)for(var o=0;o<n.length;o++){var i=k(n[o]);null!==i&&i.length&&i===t.toString()&&r.push(n[o])}return r},getElmIndex:k,markErrors:y},w=function(e,t,n,r,i){return{getTextMatcher:function(){return r.get()},getWordCharPattern:function(){return a(e)},markErrors:function(o){S.markErrors(e,t,r,n,o)},getLanguage:function(){return o(e)}}},b=function(e,t,n,r,o,i){e.addCommand("mceSpellCheck",function(){S.spellcheck(e,t,n,r,o,i)})},T=function(e,t,n,i,c,a){var s,u,d,f,h=(d=e,s=l.map(r(d).split(","),function(e){return{name:(e=e.split("="))[0],value:e[1]}}),u=[],l.each(s,function(e){u.push({selectable:!0,text:e.name,data:e.value})}),u),g=function(){S.spellcheck(e,t,n,i,a,c)},m={tooltip:"Spellcheck",onclick:g,onPostRender:function(t){var r=t.control;e.on("SpellcheckStart SpellcheckEnd",function(){r.active(n.get())})}};h.length>1&&(m.type="splitbutton",m.menu=h,m.onshow=(f=e,function(e){var t=o(f);e.control.items().each(function(e){e.active(e.settings.data===t)})}),m.onselect=function(e){c.set(e.control.settings.data)}),e.addButton("spellchecker",m),e.addMenuItem("spellchecker",{text:"Spellcheck",context:"tools",onclick:g,selectable:!0,onPostRender:function(){var t=this;t.active(n.get()),e.on("SpellcheckStart SpellcheckEnd",function(){t.active(n.get())})}})},I=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),E=tinymce.util.Tools.resolve("tinymce.ui.Factory"),P=function(e,t,n,r,o){e.on("click",function(i){var c=i.target;if("mce-spellchecker-word"===c.className){i.preventDefault();var a=S.findSpansByIndex(e,S.getElmIndex(c));if(a.length>0){var s=e.dom.createRng();s.setStartBefore(a[0]),s.setEndAfter(a[a.length-1]),e.selection.setRng(s),function(e,t,n,r,o,i,c){var a=[],s=n.get().suggestions[i];l.each(s,function(t){a.push({text:t,onclick:function(){e.insertContent(e.dom.encode(t)),e.dom.remove(c),S.checkIfFinished(e,r,o)}})}),a.push({text:"-"}),n.get().hasDictionarySupport&&a.push({text:"Add to Dictionary",onclick:function(){S.addToDictionary(e,t,r,o,i,c)}}),a.push.apply(a,[{text:"Ignore",onclick:function(){S.ignoreWord(e,r,o,i,c)}},{text:"Ignore all",onclick:function(){S.ignoreWord(e,r,o,i,c,!0)}}]),(g=E.create("menu",{items:a,context:"contextmenu",onautohide:function(e){-1!==e.target.className.indexOf("spellchecker")&&e.preventDefault()},onhide:function(){g.remove(),g=null}})).renderTo(document.body);var u=I.DOM.getPos(e.getContentAreaContainer()),d=e.dom.getPos(c[0]),f=e.dom.getRoot();"BODY"===f.nodeName?(d.x-=f.ownerDocument.documentElement.scrollLeft||f.scrollLeft,d.y-=f.ownerDocument.documentElement.scrollTop||f.scrollTop):(d.x-=f.scrollLeft,d.y-=f.scrollTop),u.x+=d.x,u.y+=d.y,g.moveTo(u.x,u.y+c[0].offsetHeight)}(e,t,n,r,o,c.getAttribute("data-mce-word"),a)}}})};t.add("spellchecker",function(t,r){if(!1===n(t)){var i=e(!1),c=e(o(t)),a=e(null),l=e({});return T(t,r,i,a,c,l),P(t,r,l,i,a),b(t,r,i,a,l,c),w(t,i,l,a,r)}})}();!function(){"use strict";var e=function(t){var n=t,r=function(){return n};return{get:r,set:function(e){n=e},clone:function(){return e(r())}}},t=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=tinymce.util.Tools.resolve("tinymce.util.Tools");function r(e){return e&&1===e.nodeType&&"false"===e.contentEditable}var a={findAndReplaceDOMText:function(e,t,n,a,i){var o,d,c,l,s,u,f=[],p=0;function g(e,t){if(t=t||0,!e[0])throw new Error("findAndReplaceDOMText cannot handle zero-length matches");var n=e.index;if(t>0){var r=e[t];if(!r)throw new Error("Invalid capture group");n+=e[0].indexOf(r),e[0]=r}return[n,n+e[0].length,[e[0]]]}if(c=t.ownerDocument,l=i.getBlockElements(),s=i.getWhiteSpaceElements(),u=i.getShortEndedElements(),d=function h(e){var t;if(3===e.nodeType)return e.data;if(s[e.nodeName]&&!l[e.nodeName])return"";if(t="",r(e))return"\n";if((l[e.nodeName]||u[e.nodeName])&&(t+="\n"),e=e.firstChild)do{t+=h(e)}while(e=e.nextSibling);return t}(t)){if(e.global)for(;o=e.exec(d);)f.push(g(o,a));else o=d.match(e),f.push(g(o,a));return f.length&&(p=f.length,function(e,t,n){var a,i,o,d,c=[],f=0,p=e,g=t.shift(),h=0;e:for(;;){if((l[p.nodeName]||u[p.nodeName]||r(p))&&f++,3===p.nodeType&&(!i&&p.length+f>=g[1]?(i=p,d=g[1]-f):a&&c.push(p),!a&&p.length+f>g[0]&&(a=p,o=g[0]-f),f+=p.length),a&&i){if(p=n({startNode:a,startNodeIndex:o,endNode:i,endNodeIndex:d,innerNodes:c,match:g[2],matchIndex:h}),f-=i.length-d,a=null,i=null,c=[],h++,!(g=t.shift()))break}else if(s[p.nodeName]&&!l[p.nodeName]||!p.firstChild){if(p.nextSibling){p=p.nextSibling;continue}}else if(!r(p)){p=p.firstChild;continue}for(;;){if(p.nextSibling){p=p.nextSibling;break}if(p.parentNode===e)break e;p=p.parentNode}}}(t,f,function(e){var t;if("function"!=typeof e){var n=e.nodeType?e:c.createElement(e);t=function(e,t){var r=n.cloneNode(!1);return r.setAttribute("data-mce-index",t),e&&r.appendChild(c.createTextNode(e)),r}}else t=e;return function(e){var n,r,a,i=e.startNode,o=e.endNode,d=e.matchIndex;if(i===o){var l=i;a=l.parentNode,e.startNodeIndex>0&&(n=c.createTextNode(l.data.substring(0,e.startNodeIndex)),a.insertBefore(n,l));var s=t(e.match[0],d);return a.insertBefore(s,l),e.endNodeIndex<l.length&&(r=c.createTextNode(l.data.substring(e.endNodeIndex)),a.insertBefore(r,l)),l.parentNode.removeChild(l),s}n=c.createTextNode(i.data.substring(0,e.startNodeIndex)),r=c.createTextNode(o.data.substring(e.endNodeIndex));for(var u=t(i.data.substring(e.startNodeIndex),d),f=[],p=0,g=e.innerNodes.length;p<g;++p){var h=e.innerNodes[p],m=t(h.data,d);h.parentNode.replaceChild(m,h),f.push(m)}var v=t(o.data.substring(0,e.endNodeIndex),d);return(a=i.parentNode).insertBefore(n,i),a.insertBefore(u,i),a.removeChild(i),(a=o.parentNode).insertBefore(v,o),a.insertBefore(r,o),a.removeChild(o),v}}(n))),p}}},i=function(e){var t=e.getAttribute("data-mce-index");return"number"==typeof t?""+t:t},o=function(e){var t=e.parentNode;e.firstChild&&t.insertBefore(e.firstChild,e),e.parentNode.removeChild(e)},d=function(e,t){var r,a=[];if((r=n.toArray(e.getBody().getElementsByTagName("span"))).length)for(var o=0;o<r.length;o++){var d=i(r[o]);null!==d&&d.length&&d===t.toString()&&a.push(r[o])}return a},c=function(e,t,n){var r=t.get(),a=e.dom;(n=!1!==n)?r++:r--,a.removeClass(d(e,t.get()),"mce-match-marker-selected");var i=d(e,r);return i.length?(a.addClass(d(e,r),"mce-match-marker-selected"),e.selection.scrollIntoView(i[0]),r):-1},l=function(e,t){var n=t.parentNode;e.remove(t),e.isEmpty(n)&&e.remove(n)},s=function(e,t){var n=c(e,t,!0);-1!==n&&t.set(n)},u=function(e,t){var n=c(e,t,!1);-1!==n&&t.set(n)},f=function(e){var t=i(e);return null!==t&&t.length>0},p=function(e,t,r){var a,d,c,l;for(d=n.toArray(e.getBody().getElementsByTagName("span")),a=0;a<d.length;a++){var s=i(d[a]);null!==s&&s.length&&(s===t.get().toString()&&(c||(c=d[a].firstChild),l=d[a].firstChild),o(d[a]))}if(c&&l){var u=e.dom.createRng();return u.setStart(c,0),u.setEnd(l,l.data.length),!1!==r&&e.selection.setRng(u),u}},g=function(e,t){return d(e,t.get()+1).length>0},h=function(e,t){return d(e,t.get()-1).length>0},m={done:p,find:function(e,t,n,r,i){n=(n=n.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")).replace(/\s/g,"\\s"),n=i?"\\b"+n+"\\b":n;var o,d,l,s,u,f=(o=e,d=t,l=new RegExp(n,r?"g":"gi"),(u=o.dom.create("span",{"data-mce-bogus":1})).className="mce-match-marker",s=o.getBody(),p(o,d,!1),a.findAndReplaceDOMText(l,s,u,!1,o.schema));return f&&(t.set(-1),t.set(c(e,t,!0))),f},next:s,prev:u,replace:function(e,t,r,a,d){var c,p,m,v,x,b,N=t.get();for(a=!1!==a,m=e.getBody(),p=n.grep(n.toArray(m.getElementsByTagName("span")),f),c=0;c<p.length;c++){var y=i(p[c]);if(v=x=parseInt(y,10),d||v===t.get()){for(r.length?(p[c].firstChild.nodeValue=r,o(p[c])):l(e.dom,p[c]);p[++c];){if((v=parseInt(i(p[c]),10))!==x){c--;break}l(e.dom,p[c])}a&&N--}else x>t.get()&&p[c].setAttribute("data-mce-index",x-1)}return t.set(N),a?(b=g(e,t),s(e,t)):(b=h(e,t),u(e,t)),!d&&b},hasNext:g,hasPrev:h},v=function(e,t){return{done:function(n){return m.done(e,t,n)},find:function(n,r,a){return m.find(e,t,n,r,a)},next:function(){return m.next(e,t)},prev:function(){return m.prev(e,t)},replace:function(n,r,a){return m.replace(e,t,n,r,a)}}},x=function(e,t){var r,a={};function i(){d.statusbar.find("#next").disabled(!1===m.hasNext(e,t)),d.statusbar.find("#prev").disabled(!1===m.hasPrev(e,t))}function o(){e.windowManager.alert("Could not find the specified string.",function(){d.find("#find")[0].focus()})}e.undoManager.add(),r=n.trim(e.selection.getContent({format:"text"}));var d=e.windowManager.open({layout:"flex",pack:"center",align:"center",onClose:function(){e.focus(),m.done(e,t),e.undoManager.add()},onSubmit:function(n){var r,c,l,s;return n.preventDefault(),c=d.find("#case").checked(),s=d.find("#words").checked(),(l=d.find("#find").value()).length?a.text===l&&a.caseState===c&&a.wholeWord===s?m.hasNext(e,t)?(m.next(e,t),void i()):void o():((r=m.find(e,t,l,c,s))||o(),d.statusbar.items().slice(1).disabled(0===r),i(),void(a={text:l,caseState:c,wholeWord:s})):(m.done(e,t,!1),void d.statusbar.items().slice(1).disabled(!0))},buttons:[{text:"Find",subtype:"primary",onclick:function(){d.submit()}},{text:"Replace",disabled:!0,onclick:function(){m.replace(e,t,d.find("#replace").value())||(d.statusbar.items().slice(1).disabled(!0),t.set(-1),a={})}},{text:"Replace all",disabled:!0,onclick:function(){m.replace(e,t,d.find("#replace").value(),!0,!0),d.statusbar.items().slice(1).disabled(!0),a={}}},{type:"spacer",flex:1},{text:"Prev",name:"prev",disabled:!0,onclick:function(){m.prev(e,t),i()}},{text:"Next",name:"next",disabled:!0,onclick:function(){m.next(e,t),i()}}],title:"Find and replace",items:{type:"form",padding:20,labelGap:30,spacing:10,items:[{type:"textbox",name:"find",size:40,label:"Find",value:r},{type:"textbox",name:"replace",size:40,label:"Replace with"},{type:"checkbox",name:"case",text:"Match case",label:" "},{type:"checkbox",name:"words",text:"Whole words",label:" "}]}})},b=function(e,t){e.addCommand("SearchReplace",function(){x(e,t)})},N=function(e,t){return function(){x(e,t)}},y=function(e,t){e.addMenuItem("searchreplace",{text:"Find and replace",shortcut:"Meta+F",onclick:N(e,t),separator:"before",context:"edit"}),e.addButton("searchreplace",{tooltip:"Find and replace",onclick:N(e,t)}),e.shortcuts.add("Meta+F","",N(e,t))};t.add("searchreplace",function(t){var n=e(-1);return b(t,n),y(t,n),v(t,n)})}();!function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),e=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),t=tinymce.util.Tools.resolve("tinymce.util.Tools"),a=function(n){return n.getParam("save_enablewhendirty",!0)},o=function(n){return!!n.getParam("save_onsavecallback")},c=function(n){return!!n.getParam("save_oncancelcallback")},i=function(n,e){n.notificationManager.open({text:n.translate(e),type:"error"})},r=function(n){var t;if(t=e.DOM.getParent(n.id,"form"),!a(n)||n.isDirty()){if(n.save(),o(n))return n.execCallback("save_onsavecallback",n),void n.nodeChanged();t?(n.setDirty(!1),t.onsubmit&&!t.onsubmit()||("function"==typeof t.submit?t.submit():i(n,"Error: Form submit field collision.")),n.nodeChanged()):i(n,"Error: No form element found.")}},l=function(n){var e=t.trim(n.startContent);c(n)?n.execCallback("save_oncancelcallback",n):(n.setContent(e),n.undoManager.clear(),n.nodeChanged())},d=function(n){n.addCommand("mceSave",function(){r(n)}),n.addCommand("mceCancel",function(){l(n)})},s=function(n){return function(e){var t=e.control;n.on("nodeChange dirty",function(){t.disabled(a(n)&&!n.isDirty())})}},u=function(n){n.addButton("save",{icon:"save",text:"Save",cmd:"mceSave",disabled:!0,onPostRender:s(n)}),n.addButton("cancel",{text:"Cancel",icon:!1,cmd:"mceCancel",disabled:!0,onPostRender:s(n)}),n.addShortcut("Meta+S","","mceSave")};n.add("save",function(n){u(n),d(n)})}();!function(){"use strict";var t=function(t){t.addCommand("mcePrint",function(){t.getWin().print()})},n=function(t){t.addButton("print",{title:"Print",cmd:"mcePrint"}),t.addMenuItem("print",{text:"Print",cmd:"mcePrint",icon:"print"})};tinymce.util.Tools.resolve("tinymce.PluginManager").add("print",function(i){t(i),n(i),i.addShortcut("Meta+P","","mcePrint")})}();!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.Env"),n=function(e){return parseInt(e.getParam("plugin_preview_width","650"),10)},i=function(e){return parseInt(e.getParam("plugin_preview_height","500"),10)},o=function(e){return e.getParam("content_style","")},r=tinymce.util.Tools.resolve("tinymce.util.Tools"),c=function(e){var t="",n=e.dom.encode,i=o(e);t+='<base href="'+n(e.documentBaseURI.getURI())+'">',i&&(t+='<style type="text/css">'+i+"</style>"),r.each(e.contentCSS,function(i){t+='<link type="text/css" rel="stylesheet" href="'+n(e.documentBaseURI.toAbsolute(i))+'">'});var c=e.settings.body_id||"tinymce";-1!==c.indexOf("=")&&(c=(c=e.getParam("body_id","","hash"))[e.id]||c);var a=e.settings.body_class||"";-1!==a.indexOf("=")&&(a=(a=e.getParam("body_class","","hash"))[e.id]||"");var s=e.settings.directionality?' dir="'+e.settings.directionality+'"':"";return"<!DOCTYPE html><html><head>"+t+'</head><body id="'+n(c)+'" class="mce-content-body '+n(a)+'"'+n(s)+">"+e.getContent()+'<script>document.addEventListener && document.addEventListener("click", function(e) {for (var elm = e.target; elm; elm = elm.parentNode) {if (elm.nodeName === "A") {e.preventDefault();}}}, false);<\/script> </body></html>'},a=function(e,t,n){var i=c(e);if(n)t.src="data:text/html;charset=utf-8,"+encodeURIComponent(i);else{var o=t.contentWindow.document;o.open(),o.write(i),o.close()}},s=function(e){var o=!t.ie,r='<iframe src="javascript:\'\'" frameborder="0"'+(o?' sandbox="allow-scripts"':"")+"></iframe>",c=n(e),s=i(e);e.windowManager.open({title:"Preview",width:c,height:s,html:r,buttons:{text:"Close",onclick:function(e){e.control.parent().parent().close()}},onPostRender:function(t){var n=t.control.getEl("body").firstChild;a(e,n,o)}})},d=function(e){e.addCommand("mcePreview",function(){s(e)})},l=function(e){e.addButton("preview",{title:"Preview",cmd:"mcePreview"}),e.addMenuItem("preview",{text:"Preview",cmd:"mcePreview",context:"view"})};e.add("preview",function(e){d(e),l(e)})}();!function(){"use strict";var e=function(t){var n=t,r=function(){return n};return{get:r,set:function(e){n=e},clone:function(){return e(r())}}},t=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=function(e){return!(!/(^|[ ,])powerpaste([, ]|$)/.test(e.settings.plugins)||!t.get("powerpaste")||("undefined"!=typeof window.console&&window.console.log&&window.console.log("PowerPaste is incompatible with Paste plugin! Remove 'paste' from the 'plugins' option."),0))},r=function(e,t){return{clipboard:e,quirks:t}},a={firePastePreProcess:function(e,t,n,r){return e.fire("PastePreProcess",{content:t,internal:n,wordContent:r})},firePastePostProcess:function(e,t,n,r){return e.fire("PastePostProcess",{node:t,internal:n,wordContent:r})},firePastePlainTextToggle:function(e,t){return e.fire("PastePlainTextToggle",{state:t})},firePaste:function(e,t){return e.fire("paste",{ieFake:t})}},i={shouldPlainTextInform:function(e){return e.getParam("paste_plaintext_inform",!0)},shouldBlockDrop:function(e){return e.getParam("paste_block_drop",!1)},shouldPasteDataImages:function(e){return e.getParam("paste_data_images",!1)},shouldFilterDrop:function(e){return e.getParam("paste_filter_drop",!0)},getPreProcess:function(e){return e.getParam("paste_preprocess")},getPostProcess:function(e){return e.getParam("paste_postprocess")},getWebkitStyles:function(e){return e.getParam("paste_webkit_styles")},shouldRemoveWebKitStyles:function(e){return e.getParam("paste_remove_styles_if_webkit",!0)},shouldMergeFormats:function(e){return e.getParam("paste_merge_formats",!0)},isSmartPasteEnabled:function(e){return e.getParam("smart_paste",!0)},isPasteAsTextEnabled:function(e){return e.getParam("paste_as_text",!1)},getRetainStyleProps:function(e){return e.getParam("paste_retain_style_properties")},getWordValidElements:function(e){return e.getParam("paste_word_valid_elements","-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody")},shouldConvertWordFakeLists:function(e){return e.getParam("paste_convert_word_fake_lists",!0)},shouldUseDefaultFilters:function(e){return e.getParam("paste_enable_default_filters",!0)}},o=function(e,t,n){var r,o,s;"text"===t.pasteFormat?(t.pasteFormat="html",a.firePastePlainTextToggle(e,!1)):(t.pasteFormat="text",a.firePastePlainTextToggle(e,!0),s=e,!1===n.get()&&i.shouldPlainTextInform(s)&&(o="Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.",(r=e).notificationManager.open({text:r.translate(o),type:"info"}),n.set(!0))),e.focus()},s=function(e,t,n){e.addCommand("mceTogglePlainTextPaste",function(){o(e,t,n)}),e.addCommand("mceInsertClipboardContent",function(e,n){n.content&&t.pasteHtml(n.content,n.internal),n.text&&t.pasteText(n.text)})},l=tinymce.util.Tools.resolve("tinymce.Env"),u=tinymce.util.Tools.resolve("tinymce.util.Delay"),c=tinymce.util.Tools.resolve("tinymce.util.Tools"),f=tinymce.util.Tools.resolve("tinymce.util.VK"),d="x-tinymce/html",m="\x3c!-- "+d+" --\x3e",p={mark:function(e){return m+e},unmark:function(e){return e.replace(m,"")},isMarked:function(e){return-1!==e.indexOf(m)},internalHtmlMime:function(){return d}},g=tinymce.util.Tools.resolve("tinymce.html.Entities"),v=function(e){return e.replace(/\r?\n/g,"<br>")},h=function(e,t,n){var r=e.split(/\n\n/),a=function(e,t){var n,r=[],a="<"+e;if("object"==typeof t){for(n in t)t.hasOwnProperty(n)&&r.push(n+'="'+g.encodeAllRaw(t[n])+'"');r.length&&(a+=" "+r.join(" "))}return a+">"}(t,n),i="</"+t+">",o=c.map(r,function(e){return e.split(/\n/).join("<br />")});return 1===o.length?o[0]:c.map(o,function(e){return a+e+i}).join("")},P={isPlainText:function(e){return!/<(?:\/?(?!(?:div|p|br|span)>)\w+|(?:(?!(?:span style="white-space:\s?pre;?">)|br\s?\/>))\w+\s[^>]+)>/i.test(e)},convert:function(e,t,n){return t?h(e,t,n):v(e)},toBRs:v,toBlockElements:h},y=tinymce.util.Tools.resolve("tinymce.html.DomParser"),b=tinymce.util.Tools.resolve("tinymce.html.Node"),x=tinymce.util.Tools.resolve("tinymce.html.Schema"),w=tinymce.util.Tools.resolve("tinymce.html.Serializer");function T(e,t){return c.each(t,function(t){e=t.constructor===RegExp?e.replace(t,""):e.replace(t[0],t[1])}),e}var C={filter:T,innerText:function(e){var t=x(),n=y({},t),r="",a=t.getShortEndedElements(),i=c.makeMap("script noscript style textarea video audio iframe object"," "),o=t.getBlockElements();return e=T(e,[/<!\[[^\]]+\]>/g]),function s(e){var t=e.name,n=e;if("br"!==t)if(a[t]&&(r+=" "),i[t])r+=" ";else{if(3===e.type&&(r+=e.value),!e.shortEnded&&(e=e.firstChild))do{s(e)}while(e=e.next);o[t]&&n.next&&(r+="\n","p"===t&&(r+="\n"))}else r+="\n"}(n.parse(e)),r},trimHtml:function(e){return e=T(e,[/^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/gi,/<!--StartFragment-->|<!--EndFragment-->/g,[/( ?)<span class="Apple-converted-space">\u00a0<\/span>( ?)/g,function(e,t,n){return t||n?"\xa0":" "}],/<br class="Apple-interchange-newline">/g,/<br>$/i])},createIdGenerator:function(e){var t=0;return function(){return e+t++}},isMsEdge:function(){return-1!==navigator.userAgent.indexOf(" Edge/")}};function _(e){var t,n;return n=[/^[IVXLMCD]{1,2}\.[ \u00a0]/,/^[ivxlmcd]{1,2}\.[ \u00a0]/,/^[a-z]{1,2}[\.\)][ \u00a0]/,/^[A-Z]{1,2}[\.\)][ \u00a0]/,/^[0-9]+\.[ \u00a0]/,/^[\u3007\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d]+\.[ \u00a0]/,/^[\u58f1\u5f10\u53c2\u56db\u4f0d\u516d\u4e03\u516b\u4e5d\u62fe]+\.[ \u00a0]/],e=e.replace(/^[\u00a0 ]+/,""),c.each(n,function(n){if(n.test(e))return t=!0,!1}),t}function D(e){var t,n,r=1;function a(e){var t="";if(3===e.type)return e.value;if(e=e.firstChild)do{t+=a(e)}while(e=e.next);return t}function i(e,t){if(3===e.type&&t.test(e.value))return e.value=e.value.replace(t,""),!1;if(e=e.firstChild)do{if(!i(e,t))return!1}while(e=e.next);return!0}function o(e,a,o){var s=e._listLevel||r;s!==r&&(s<r?t&&(t=t.parent.parent):(n=t,t=null)),t&&t.name===a?t.append(e):(n=n||t,t=new b(a,1),o>1&&t.attr("start",""+o),e.wrap(t)),e.name="li",s>r&&n&&n.lastChild.append(t),r=s,function l(e){if(e._listIgnore)e.remove();else if(e=e.firstChild)do{l(e)}while(e=e.next)}(e),i(e,/^\u00a0+/),i(e,/^\s*([\u2022\u00b7\u00a7\u25CF]|\w+\.)/),i(e,/^\u00a0+/)}for(var s=[],l=e.firstChild;void 0!==l&&null!==l;)if(s.push(l),null!==(l=l.walk()))for(;void 0!==l&&l.parent!==e;)l=l.walk();for(var u=0;u<s.length;u++)if("p"===(e=s[u]).name&&e.firstChild){var c=a(e);if(/^[\s\u00a0]*[\u2022\u00b7\u00a7\u25CF]\s*/.test(c)){o(e,"ul");continue}if(_(c)){var f=/([0-9]+)\./.exec(c),d=1;f&&(d=parseInt(f[1],10)),o(e,"ol",d);continue}if(e._listLevel){o(e,"ul",1);continue}t=null}else n=t,t=null}function k(e,t,n,r){var a,o={},s=e.dom.parseStyle(r);return c.each(s,function(s,l){switch(l){case"mso-list":(a=/\w+ \w+([0-9]+)/i.exec(r))&&(n._listLevel=parseInt(a[1],10)),/Ignore/i.test(s)&&n.firstChild&&(n._listIgnore=!0,n.firstChild._listIgnore=!0);break;case"horiz-align":l="text-align";break;case"vert-align":l="vertical-align";break;case"font-color":case"mso-foreground":l="color";break;case"mso-background":case"mso-highlight":l="background";break;case"font-weight":case"font-style":return void("normal"!==s&&(o[l]=s));case"mso-element":if(/^(comment|comment-list)$/i.test(s))return void n.remove()}0!==l.indexOf("mso-comment")?0!==l.indexOf("mso-")&&("all"===i.getRetainStyleProps(e)||t&&t[l])&&(o[l]=s):n.remove()}),/(bold)/i.test(o["font-weight"])&&(delete o["font-weight"],n.wrap(new b("b",1))),/(italic)/i.test(o["font-style"])&&(delete o["font-style"],n.wrap(new b("i",1))),(o=e.dom.serializeStyle(o,n.name))||null}var R={preProcess:function(e,t){return i.shouldUseDefaultFilters(e)?function(e,t){var n,r;(n=i.getRetainStyleProps(e))&&(r=c.makeMap(n.split(/[, ]/))),t=C.filter(t,[/<br class="?Apple-interchange-newline"?>/gi,/<b[^>]+id="?docs-internal-[^>]*>/gi,/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/&nbsp;/gi,"\xa0"],[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(e,t){return t.length>0?t.replace(/./," ").slice(Math.floor(t.length/2)).split("").join("\xa0"):""}]]);var a=i.getWordValidElements(e),o=x({valid_elements:a,valid_children:"-li[p]"});c.each(o.elements,function(e){e.attributes["class"]||(e.attributes["class"]={},e.attributesOrder.push("class")),e.attributes.style||(e.attributes.style={},e.attributesOrder.push("style"))});var s=y({},o);s.addAttributeFilter("style",function(t){for(var n,a=t.length;a--;)(n=t[a]).attr("style",k(e,r,n,n.attr("style"))),"span"===n.name&&n.parent&&!n.attributes.length&&n.unwrap()}),s.addAttributeFilter("class",function(e){for(var t,n,r=e.length;r--;)n=(t=e[r]).attr("class"),/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(n)&&t.remove(),t.attr("class",null)}),s.addNodeFilter("del",function(e){for(var t=e.length;t--;)e[t].remove()}),s.addNodeFilter("a",function(e){for(var t,n,r,a=e.length;a--;)if(n=(t=e[a]).attr("href"),r=t.attr("name"),n&&-1!==n.indexOf("#_msocom_"))t.remove();else if(n&&0===n.indexOf("file://")&&(n=n.split("#")[1])&&(n="#"+n),n||r){if(r&&!/^_?(?:toc|edn|ftn)/i.test(r)){t.unwrap();continue}t.attr({href:n,name:r})}else t.unwrap()});var l=s.parse(t);return i.shouldConvertWordFakeLists(e)&&D(l),t=w({validate:e.settings.validate},o).serialize(l)}(e,t):t},isWordContent:function(e){return/<font face="Times New Roman"|class="?Mso|style="[^"]*\bmso-|style='[^'']*\bmso-|w:WordDocument/i.test(e)||/class="OutlineElement/.test(e)||/id="?docs\-internal\-guid\-/.test(e)}},E=function(e,t){return{content:e,cancelled:t}},F=function(e,t,n,r){var i,o,s,l,u,c,f=a.firePastePreProcess(e,t,n,r);return e.hasEventListeners("PastePostProcess")&&!f.isDefaultPrevented()?(i=e,o=f.content,s=n,l=r,u=i.dom.create("div",{style:"display:none"},o),c=a.firePastePostProcess(i,u,s,l),E(c.node.innerHTML,c.isDefaultPrevented())):E(f.content,f.isDefaultPrevented())},M={process:function(e,t,n){var r=R.isWordContent(t),a=r?R.preProcess(e,t):t;return F(e,a,n,r)}},S=function(e){return/^https?:\/\/[\w\?\-\/+=.&%@~#]+$/i.test(e)},I=function(e){return S(e)&&/.(gif|jpe?g|png)$/.test(e)},A=function(e,t,n){return!(!1!==e.selection.isCollapsed()||!S(t)||(a=t,i=n,(r=e).undoManager.extra(function(){i(r,a)},function(){r.execCommand("mceInsertLink",!1,a)}),0));var r,a,i},O=function(e,t,n){return!!I(t)&&(a=t,i=n,(r=e).undoManager.extra(function(){i(r,a)},function(){r.insertContent('<img src="'+a+'">')}),!0);var r,a,i},B=function(e,t){return e.insertContent(t,{merge:i.shouldMergeFormats(e),paste:!0}),!0},H={isImageUrl:I,isAbsoluteUrl:S,insertContent:function(e,t){var n,r;!1===i.isSmartPasteEnabled(e)?B(e,t):(n=e,r=t,c.each([A,O,B],function(e){return!0!==e(n,r,B)}))}},N=function(e){var t,n,r,o,s,d,m=this,g=0,v=(t=e,r="%MCEPASTEBIN%",{create:function(){var e,a,i=t.dom,o=t.getBody(),s=t.dom.getViewPort(t.getWin()).y,u=20;if(n=t.selection.getRng(),t.inline&&(a=t.selection.getScrollContainer())&&a.scrollTop>0&&(s=a.scrollTop),n.getClientRects){var c=function(e){var t,r,a,o=e.startContainer;if((t=e.getClientRects()).length)return t[0];if(e.collapsed&&1===o.nodeType){for(a=o.childNodes[n.startOffset];a&&3===a.nodeType&&!a.data.length;)a=a.nextSibling;if(a)return"BR"===a.tagName&&(r=i.doc.createTextNode("\ufeff"),a.parentNode.insertBefore(r,a),(e=i.createRng()).setStartBefore(r),e.setEndAfter(r),t=e.getClientRects(),i.remove(r)),t.length?t[0]:void 0}}(n);if(c)u=s+(c.top-i.getPos(o).y);else{u=s;var f=n.startContainer;f&&(3===f.nodeType&&f.parentNode!==o&&(f=f.parentNode),1===f.nodeType&&(u=i.getPos(f,a||o).y))}}e=t.dom.add(t.getBody(),"div",{id:"mcepastebin",contentEditable:!0,"data-mce-bogus":"all",style:"position: absolute; top: "+u+"px; width: 10px; height: 10px; overflow: hidden; opacity: 0"},r),(l.ie||l.gecko)&&i.setStyle(e,"left","rtl"===i.getStyle(o,"direction",!0)?65535:-65535),i.bind(e,"beforedeactivate focusin focusout",function(e){e.stopPropagation()}),e.focus(),t.selection.select(e,!0)},remove:function(){if(o()){for(var e=void 0;e=t.dom.get("mcepastebin");)t.dom.remove(e),t.dom.unbind(e);n&&t.selection.setRng(n)}n=null},getEl:o=function(){return t.dom.get("mcepastebin")},getHtml:function(){var e,n,r,a,i,o=function(e,n){e.appendChild(n),t.dom.remove(n,!0)};for(n=c.grep(t.getBody().childNodes,function(e){return"mcepastebin"===e.id}),e=n.shift(),c.each(n,function(t){o(e,t)}),r=(a=t.dom.select("div[id=mcepastebin]",e)).length-1;r>=0;r--)i=t.dom.create("div"),e.insertBefore(i,a[r]),o(i,a[r]);return e?e.innerHTML:""},getLastRng:function(){return n},isDefault:function(){var e,t=o();return(e=t)&&"mcepastebin"===e.id&&s(t.innerHTML)},isDefaultContent:s=function(e){return e===r}}),h="data:text/mce-internal,",y=C.createIdGenerator("mceclip");function b(t,n){var r=n||p.isMarked(t),a=M.process(e,p.unmark(t),r);!1===a.cancelled&&H.insertContent(e,a.content)}function x(t){t=e.dom.encode(t).replace(/\r\n/g,"\n"),b(t=P.convert(t,e.settings.forced_root_block,e.settings.forced_root_block_attrs),!1)}function w(e){var t={};if(e){if(e.getData){var n=e.getData("Text");n&&n.length>0&&-1===n.indexOf(h)&&(t["text/plain"]=n)}if(e.types)for(var r=0;r<e.types.length;r++){var a=e.types[r];try{t[a]=e.getData(a)}catch(i){t[a]=""}}}return t}function T(e){return k(e,"text/html")||k(e,"text/plain")}function _(t,n,r){t&&(e.selection.setRng(t),t=null);var a,i,o,s,l,u,c=n.result,f=-1!==(i=(a=c).indexOf(","))?a.substr(i+1):null,d=y(),m=e.settings.images_reuse_filename&&r.name?(o=r.name,(s=o.match(/([\s\S]+?)\.(?:jpeg|jpg|png|gif)$/i))?e.dom.encode(s[1]):null):d,p=new Image;if(p.src=c,l=e.settings,u=p,!l.images_dataimg_filter||l.images_dataimg_filter(u)){var g,v=e.editorUpload.blobCache,h=void 0;(g=v.findFirst(function(e){return e.base64()===f}))?h=g:(h=v.create(d,r,f,m),v.add(h)),b('<img src="'+h.blobUri()+'">',!1)}else b('<img src="'+c+'">',!1)}function D(t,n){var r=t.clipboardData||t.dataTransfer;function a(e){var r,a,i,o=!1;if(e)for(r=0;r<e.length;r++)if(a=e[r],/^image\/(jpeg|png|gif|bmp)$/.test(a.type)){var s=a.getAsFile?a.getAsFile():a;(i=new window.FileReader).onload=_.bind(null,n,i,s),i.readAsDataURL(s),t.preventDefault(),o=!0}return o}if(e.settings.paste_data_images&&r)return a(r.items)||a(r.files)}function k(e,t){return t in e&&e[t].length>0}function R(e){return f.metaKeyPressed(e)&&86===e.keyCode||e.shiftKey&&45===e.keyCode}function E(){function t(t,n,r,a){var i,o;k(t,"text/html")?i=t["text/html"]:(i=v.getHtml(),a=a||p.isMarked(i),v.isDefaultContent(i)&&(r=!0)),i=C.trimHtml(i),v.remove(),o=!1===a&&P.isPlainText(i),i.length&&!o||(r=!0),r&&(i=k(t,"text/plain")&&o?t["text/plain"]:C.innerText(i)),v.isDefaultContent(i)?n||e.windowManager.alert("Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents."):r?x(i):b(i,a)}e.on("keydown",function(t){function n(e){R(e)&&!e.isDefaultPrevented()&&v.remove()}if(R(t)&&!t.isDefaultPrevented()){if((d=t.shiftKey&&86===t.keyCode)&&l.webkit&&-1!==navigator.userAgent.indexOf("Version/"))return;if(t.stopImmediatePropagation(),g=(new Date).getTime(),l.ie&&d)return t.preventDefault(),void a.firePaste(e,!0);v.remove(),v.create(),e.once("keyup",n),e.once("paste",function(){e.off("keyup",n)})}}),e.on("paste",function(n){var r,a,i=(new Date).getTime(),o=(r=w(n.clipboardData||e.getDoc().dataTransfer),C.isMsEdge()?c.extend(r,{"text/html":""}):r),s=(new Date).getTime()-i,f=(new Date).getTime()-g-s<1e3,h="text"===m.pasteFormat||d,P=k(o,p.internalHtmlMime());d=!1,n.isDefaultPrevented()||(a=n.clipboardData,-1!==navigator.userAgent.indexOf("Android")&&a&&a.items&&0===a.items.length)?v.remove():T(o)||!D(n,v.getLastRng()||e.selection.getRng())?(f||n.preventDefault(),!l.ie||f&&!n.ieFake||k(o,"text/html")||(v.create(),e.dom.bind(v.getEl(),"paste",function(e){e.stopPropagation()}),e.getDoc().execCommand("Paste",!1,null),o["text/html"]=v.getHtml()),k(o,"text/html")?(n.preventDefault(),P||(P=p.isMarked(o["text/html"])),t(o,f,h,P)):u.setEditorTimeout(e,function(){t(o,f,h,P)},0)):v.remove()})}m.pasteFormat=i.isPasteAsTextEnabled(e)?"text":"html",m.pasteHtml=b,m.pasteText=x,m.pasteImageData=D,m.getDataTransferItems=w,m.hasHtmlOrText=T,m.hasContentType=k,e.on("preInit",function(){var t;E(),e.parser.addNodeFilter("img",function(n,r,a){function i(e){e.attr("data-mce-object")||t===l.transparentSrc||e.remove()}if(!e.settings.paste_data_images&&(s=a).data&&!0===s.data.paste)for(var o=n.length;o--;)(t=n[o].attributes.map.src)&&(0===t.indexOf("webkit-fake-url")?i(n[o]):e.settings.allow_html_data_urls||0!==t.indexOf("data:")||i(n[o]));var s})})},L=function(){},$=function(e,t,n){if(r=e,!1!==l.iOS||r===undefined||"function"!=typeof r.setData||!0===C.isMsEdge())return!1;try{return e.clearData(),e.setData("text/html",t),e.setData("text/plain",n),e.setData(p.internalHtmlMime(),t),!0}catch(a){return!1}var r},W=function(e,t,n,r){$(e.clipboardData,t.html,t.text)?(e.preventDefault(),r()):n(t.html,r)},j=function(e){return function(t,n){var r=p.mark(t),a=e.dom.create("div",{contenteditable:"false","data-mce-bogus":"all"}),i=e.dom.create("div",{contenteditable:"true"},r);e.dom.setStyles(a,{position:"fixed",left:"-3000px",width:"1000px",overflow:"hidden"}),a.appendChild(i),e.dom.add(e.getBody(),a);var o=e.selection.getRng();i.focus();var s=e.dom.createRng();s.selectNodeContents(i),e.selection.setRng(s),setTimeout(function(){a.parentNode.removeChild(a),e.selection.setRng(o),n()},0)}},U=function(e){return{html:e.selection.getContent({contextual:!0}),text:e.selection.getContent({format:"text"})}},V=function(e){var t,n;e.on("cut",(t=e,function(e){!1===t.selection.isCollapsed()&&W(e,U(t),j(t),function(){setTimeout(function(){t.execCommand("Delete")},0)})})),e.on("copy",(n=e,function(e){!1===n.selection.isCollapsed()&&W(e,U(n),j(n),L)}))},z=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),K=function(e,t){return z.getCaretRangeFromPoint(t.clientX,t.clientY,e.getDoc())},G=function(e,t){e.focus(),e.selection.setRng(t)},X=function(e,t,n){i.shouldBlockDrop(e)&&e.on("dragend dragover draggesture dragdrop drop drag",function(e){e.preventDefault(),e.stopPropagation()}),i.shouldPasteDataImages(e)||e.on("drop",function(e){var t=e.dataTransfer;t&&t.files&&t.files.length>0&&e.preventDefault()}),e.on("drop",function(r){var a,o;if(o=K(e,r),!r.isDefaultPrevented()&&!n.get()){a=t.getDataTransferItems(r.dataTransfer);var s,l=t.hasContentType(a,p.internalHtmlMime());if((t.hasHtmlOrText(a)&&(!(s=a["text/plain"])||0!==s.indexOf("file://"))||!t.pasteImageData(r,o))&&o&&i.shouldFilterDrop(e)){var c=a["mce-internal"]||a["text/html"]||a["text/plain"];c&&(r.preventDefault(),u.setEditorTimeout(e,function(){e.undoManager.transact(function(){a["mce-internal"]&&e.execCommand("Delete"),G(e,o),c=C.trimHtml(c),a["text/html"]?t.pasteHtml(c,l):t.pasteText(c)})}))}}}),e.on("dragstart",function(e){n.set(!0)}),e.on("dragover dragend",function(t){i.shouldPasteDataImages(e)&&!1===n.get()&&(t.preventDefault(),G(e,K(e,t))),"dragend"===t.type&&n.set(!1)})},q=function(e){var t=e.plugins.paste,n=i.getPreProcess(e);n&&e.on("PastePreProcess",function(e){n.call(t,t,e)});var r=i.getPostProcess(e);r&&e.on("PastePostProcess",function(e){r.call(t,t,e)})};function Y(e,t){e.on("PastePreProcess",function(n){n.content=t(e,n.content,n.internal,n.wordContent)})}function Z(e,t){if(!R.isWordContent(t))return t;var n=[];c.each(e.schema.getBlockElements(),function(e,t){n.push(t)});var r=new RegExp("(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*(<\\/?("+n.join("|")+")[^>]*>)(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*","g");return t=C.filter(t,[[r,"$1"]]),t=C.filter(t,[[/<br><br>/g,"<BR><BR>"],[/<br>/g," "],[/<BR><BR>/g,"<br>"]])}function J(e,t,n,r){if(r||n)return t;var a=i.getWebkitStyles(e);if(!1===i.shouldRemoveWebKitStyles(e)||"all"===a)return t;if(a&&(a=a.split(/[, ]/)),a){var o=e.dom,s=e.selection.getNode();t=t.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,function(e,t,n,r){var i=o.parseStyle(o.decode(n),"span"),l={};if("none"===a)return t+r;for(var u=0;u<a.length;u++){var c=i[a[u]],f=o.getStyle(s,a[u],!0);/color/.test(a[u])&&(c=o.toHex(c),f=o.toHex(f)),f!==c&&(l[a[u]]=c)}return(l=o.serializeStyle(l,"span"))?t+' style="'+l+'"'+r:t+r})}else t=t.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,"$1$3");return t=t.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi,function(e,t,n,r){return t+' style="'+n+'"'+r})}function Q(e,t){e.$("a",t).find("font,u").each(function(t,n){e.dom.remove(n,!0)})}var ee=function(e){var t,n;l.webkit&&Y(e,J),l.ie&&(Y(e,Z),n=Q,(t=e).on("PastePostProcess",function(e){n(t,e.node)}))},te=function(e){return function(){return e}},ne=function(e){for(var t=new Array(arguments.length-1),n=1;n<arguments.length;n++)t[n-1]=arguments[n];return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];var a=t.concat(n);return e.apply(null,a)}},re=(te(!1),te(!0),function(e,t){var n=ne((te(!1),te(!0),function(e,t,n){var r=n.control;r.active("text"===t.pasteFormat),e.on("PastePlainTextToggle",function(e){r.active(e.state)})}),e,t);e.addButton("pastetext",{active:!1,icon:"pastetext",tooltip:"Paste as text",cmd:"mceTogglePlainTextPaste",onPostRender:n}),e.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,active:t.pasteFormat,cmd:"mceTogglePlainTextPaste",onPostRender:n})}),ae=e(!1);t.add("paste",function(t){if(!1===n(t)){var a=new N(t),i=ee(t),o=e(!1);return re(t,a),s(t,a,ae),q(t),V(t),X(t,a,o),r(a,i)}})}();!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=tinymce.util.Tools.resolve("tinymce.Env"),n=function(e){return e.getParam("pagebreak_separator","\x3c!-- pagebreak --\x3e")},t=function(e){return e.getParam("pagebreak_split_block",!1)},r=function(){return"mce-pagebreak"},c=function(){return'<img src="'+a.transparentSrc+'" class="mce-pagebreak" data-mce-resize="false" data-mce-placeholder />'},o=function(e){var a=n(e),r=new RegExp(a.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(e){return"\\"+e}),"gi");e.on("BeforeSetContent",function(e){e.content=e.content.replace(r,c())}),e.on("PreInit",function(){e.serializer.addNodeFilter("img",function(n){for(var r,c,o=n.length;o--;)if((c=(r=n[o]).attr("class"))&&-1!==c.indexOf("mce-pagebreak")){var i=r.parent;if(e.schema.getBlockElements()[i.name]&&t(e)){i.type=3,i.value=a,i.raw=!0,r.remove();continue}r.type=3,r.value=a,r.raw=!0}})})},i=c,g=r,u=function(e){e.addCommand("mcePageBreak",function(){e.settings.pagebreak_split_block?e.insertContent("<p>"+i()+"</p>"):e.insertContent(i())})},m=function(e){e.on("ResolveName",function(a){"IMG"===a.target.nodeName&&e.dom.hasClass(a.target,g())&&(a.name="pagebreak")})},s=function(e){e.addButton("pagebreak",{title:"Page break",cmd:"mcePageBreak"}),e.addMenuItem("pagebreak",{text:"Page break",icon:"pagebreak",cmd:"mcePageBreak",context:"insert"})};e.add("pagebreak",function(e){u(e),s(e),o(e),m(e)})}();!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=tinymce.util.Tools.resolve("tinymce.util.Tools"),e=function(t){return t.getParam("noneditable_noneditable_class","mceNonEditable")},r=function(t){return t.getParam("noneditable_editable_class","mceEditable")},a=function(t){var n=t.getParam("noneditable_regexp",[]);return n&&n.constructor===RegExp?[n]:n},i=function(t){return function(n){return-1!==(" "+n.attr("class")+" ").indexOf(t)}},o=function(t,n,e){return function(r){var a=arguments,i=a[a.length-2],o=i>0?n.charAt(i-1):"";if('"'===o)return r;if(">"===o){var c=n.lastIndexOf("<",i);if(-1!==c&&-1!==n.substring(c,i).indexOf('contenteditable="false"'))return r}return'<span class="'+e+'" data-mce-content="'+t.dom.encode(a[0])+'">'+t.dom.encode("string"==typeof a[1]?a[1]:a[0])+"</span>"}},c=function(t){var c,l,u="contenteditable";c=" "+n.trim(r(t))+" ",l=" "+n.trim(e(t))+" ";var f=i(c),s=i(l),d=a(t);t.on("PreInit",function(){d.length>0&&t.on("BeforeSetContent",function(n){!function(t,n,r){var a=n.length,i=r.content;if("raw"!==r.format){for(;a--;)i=i.replace(n[a],o(t,i,e(t)));r.content=i}}(t,d,n)}),t.parser.addAttributeFilter("class",function(t){for(var n,e=t.length;e--;)n=t[e],f(n)?n.attr(u,"true"):s(n)&&n.attr(u,"false")}),t.serializer.addAttributeFilter(u,function(t){for(var n,e=t.length;e--;)n=t[e],(f(n)||s(n))&&(d.length>0&&n.attr("data-mce-content")?(n.name="#text",n.type=3,n.raw=!0,n.value=n.attr("data-mce-content")):n.attr(u,null))})})};t.add("noneditable",function(t){c(t)})}();!function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),e=function(n,e){var t,a=(t=n).plugins.visualchars&&t.plugins.visualchars.isEnabled()?'<span class="mce-nbsp">&nbsp;</span>':"&nbsp;";n.insertContent(function(n,e){for(var t="",a=0;a<e;a++)t+=n;return t}(a,e)),n.dom.setAttrib(n.dom.select("span.mce-nbsp"),"data-mce-bogus","1")},t=function(n){n.addCommand("mceNonBreaking",function(){e(n,1)})},a=tinymce.util.Tools.resolve("tinymce.util.VK"),i=function(n){var e=n.getParam("nonbreaking_force_tab",0);return"boolean"==typeof e?!0===e?3:0:e},o=function(n){var t=i(n);t>0&&n.on("keydown",function(i){if(i.keyCode===a.TAB&&!i.isDefaultPrevented()){if(i.shiftKey)return;i.preventDefault(),i.stopImmediatePropagation(),e(n,t)}})},r=function(n){n.addButton("nonbreaking",{title:"Nonbreaking space",cmd:"mceNonBreaking"}),n.addMenuItem("nonbreaking",{text:"Nonbreaking space",cmd:"mceNonBreaking",context:"insert"})};n.add("nonbreaking",function(n){t(n),r(n),o(n)})}();!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.Env"),r=tinymce.util.Tools.resolve("tinymce.util.Tools"),i=function(e){return e.getParam("media_scripts")},a=function(e){return e.getParam("audio_template_callback")},o=function(e){return e.getParam("video_template_callback")},n=function(e){return e.getParam("media_live_embeds",!0)},c=function(e){return e.getParam("media_filter_html",!0)},s=function(e){return e.getParam("media_url_resolver")},u=function(e){return e.getParam("media_alt_source",!0)},l=function(e){return e.getParam("media_poster",!0)},m=function(e){return e.getParam("media_dimensions",!0)},d=tinymce.util.Tools.resolve("tinymce.html.SaxParser"),h=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),p=function(e,t){if(e)for(var r=0;r<e.length;r++)if(-1!==t.indexOf(e[r].filter))return e[r]},f=function(e){return function(t){return t?t.style[e].replace(/px$/,""):""}},g=function(e){return function(t,r){var i;t&&(t.style[e]=/^[0-9.]+$/.test(i=r)?i+"px":i)}},w={getMaxWidth:f("maxWidth"),getMaxHeight:f("maxHeight"),setMaxWidth:g("maxWidth"),setMaxHeight:g("maxHeight")},v=h.DOM,b=function(e){return v.getAttrib(e,"data-ephox-embed-iri")},y=function(e,t){return s=t,u=v.createFragment(s),""!==b(u.firstChild)?(n=t,c=v.createFragment(n).firstChild,{type:"ephox-embed-iri",source1:b(c),source2:"",poster:"",width:w.getMaxWidth(c),height:w.getMaxHeight(c)}):(i=e,a=t,o={},new d({validate:!1,allow_conditional_comments:!0,special:"script,noscript",start:function(e,t){if(o.source1||"param"!==e||(o.source1=t.map.movie),"iframe"!==e&&"object"!==e&&"embed"!==e&&"video"!==e&&"audio"!==e||(o.type||(o.type=e),o=r.extend(t.map,o)),"script"===e){var a=p(i,t.map.src);if(!a)return;o={type:"script",source1:t.map.src,width:a.width,height:a.height}}"source"===e&&(o.source1?o.source2||(o.source2=t.map.src):o.source1=t.map.src),"img"!==e||o.poster||(o.poster=t.map.src)}}).parse(a),o.source1=o.source1||o.src||o.data,o.source2=o.source2||"",o.poster=o.poster||"",o);var i,a,o,n,c,s,u},x=tinymce.util.Tools.resolve("tinymce.util.Promise"),j=function(e){var t={mp3:"audio/mpeg",wav:"audio/wav",mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",swf:"application/x-shockwave-flash"}[e.toLowerCase().split(".").pop()];return t||""},M=tinymce.util.Tools.resolve("tinymce.html.Writer"),_=tinymce.util.Tools.resolve("tinymce.html.Schema"),C=h.DOM,S=function(e,t){var r,i,a,o;for(r in t)if(a=""+t[r],e.map[r])for(i=e.length;i--;)(o=e[i]).name===r&&(a?(e.map[r]=a,o.value=a):(delete e.map[r],e.splice(i,1)));else a&&(e.push({name:r,value:a}),e.map[r]=a)},k=function(e,t){var r,i,a=C.createFragment(e).firstChild;return w.setMaxWidth(a,t.width),w.setMaxHeight(a,t.height),r=a.outerHTML,i=M(),new d(i).parse(r),i.getContent()},A=function(e,t,r){return u=e,l=C.createFragment(u),""!==C.getAttrib(l.firstChild,"data-ephox-embed-iri")?k(e,t):(i=e,a=t,o=r,c=M(),s=0,new d({validate:!1,allow_conditional_comments:!0,special:"script,noscript",comment:function(e){c.comment(e)},cdata:function(e){c.cdata(e)},text:function(e,t){c.text(e,t)},start:function(e,t,r){switch(e){case"video":case"object":case"embed":case"img":case"iframe":a.height!==undefined&&a.width!==undefined&&S(t,{width:a.width,height:a.height})}if(o)switch(e){case"video":S(t,{poster:a.poster,src:""}),a.source2&&S(t,{src:""});break;case"iframe":S(t,{src:a.source1});break;case"source":if(++s<=2&&(S(t,{src:a["source"+s],type:a["source"+s+"mime"]}),!a["source"+s]))return;break;case"img":if(!a.poster)return;n=!0}c.start(e,t,r)},end:function(e){if("video"===e&&o)for(var t=1;t<=2;t++)if(a["source"+t]){var r=[];r.map={},s<t&&(S(r,{src:a["source"+t],type:a["source"+t+"mime"]}),c.start("source",r,!0))}if(a.poster&&"object"===e&&o&&!n){var i=[];i.map={},S(i,{src:a.poster,width:a.width,height:a.height}),c.start("img",i,!0)}c.end(e)}},_({})).parse(i),c.getContent());var i,a,o,n,c,s,u,l},F=[{regex:/youtu\.be\/([\w\-.]+)/,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/youtube\.com(.+)v=([^&]+)/,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$2",allowFullscreen:!0},{regex:/youtube.com\/embed\/([a-z0-9\-_]+(?:\?.+)?)/i,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc",allowfullscreen:!0},{regex:/vimeo\.com\/(.*)\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$2?title=0&amp;byline=0",allowfullscreen:!0},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'//maps.google.com/maps/ms?msid=$2&output=embed"',allowFullscreen:!1},{regex:/dailymotion\.com\/video\/([^_]+)/,type:"iframe",w:480,h:270,url:"//www.dailymotion.com/embed/video/$1",allowFullscreen:!0},{regex:/dai\.ly\/([^_]+)/,type:"iframe",w:480,h:270,url:"//www.dailymotion.com/embed/video/$1",allowFullscreen:!0}],N=function(e,t){var n=r.extend({},t);if(!n.source1&&(r.extend(n,y(i(e),n.embed)),!n.source1))return"";if(n.source2||(n.source2=""),n.poster||(n.poster=""),n.source1=e.convertURL(n.source1,"source"),n.source2=e.convertURL(n.source2,"source"),n.source1mime=j(n.source1),n.source2mime=j(n.source2),n.poster=e.convertURL(n.poster,"poster"),r.each(F,function(e){var t,r,i=e.regex.exec(n.source1);if(i){for(r=e.url,t=0;i[t];t++)r=r.replace("$"+t,function(){return i[t]});n.source1=r,n.type=e.type,n.allowFullscreen=e.allowFullscreen,n.width=n.width||e.w,n.height=n.height||e.h}}),n.embed)return A(n.embed,n,!0);var c=p(i(e),n.source1);c&&(n.type="script",n.width=c.width,n.height=c.height);var s,u,l,m,d,h,f,g,w=a(e),v=o(e);return n.width=n.width||300,n.height=n.height||150,r.each(n,function(t,r){n[r]=e.dom.encode(t)}),"iframe"===n.type?(g=(f=n).allowFullscreen?' allowFullscreen="1"':"",'<iframe src="'+f.source1+'" width="'+f.width+'" height="'+f.height+'"'+g+"></iframe>"):"application/x-shockwave-flash"===n.source1mime?(h='<object data="'+(d=n).source1+'" width="'+d.width+'" height="'+d.height+'" type="application/x-shockwave-flash">',d.poster&&(h+='<img src="'+d.poster+'" width="'+d.width+'" height="'+d.height+'" />'),h+="</object>"):-1!==n.source1mime.indexOf("audio")?(l=n,(m=w)?m(l):'<audio controls="controls" src="'+l.source1+'">'+(l.source2?'\n<source src="'+l.source2+'"'+(l.source2mime?' type="'+l.source2mime+'"':"")+" />\n":"")+"</audio>"):"script"===n.type?'<script src="'+n.source1+'"><\/script>':(s=n,(u=v)?u(s):'<video width="'+s.width+'" height="'+s.height+'"'+(s.poster?' poster="'+s.poster+'"':"")+' controls="controls">\n<source src="'+s.source1+'"'+(s.source1mime?' type="'+s.source1mime+'"':"")+" />\n"+(s.source2?'<source src="'+s.source2+'"'+(s.source2mime?' type="'+s.source2mime+'"':"")+" />\n":"")+"</video>")},O={},P=function(e){return function(t){return N(e,t)}},T=function(e,t){var r,i,a,o,n,c=s(e);return c?(a=t,o=P(e),n=c,new x(function(e,t){var r=function(t){return t.html&&(O[a.source1]=t),e({url:a.source1,html:t.html?t.html:o(a)})};O[a.source1]?r(O[a.source1]):n({url:a.source1},r,t)})):(r=t,i=P(e),new x(function(e){e({html:i(r),url:r.source1})}))},z=function(e){return O.hasOwnProperty(e)},$=function(e,t){e.state.set("oldVal",e.value()),t.state.set("oldVal",t.value())},L=function(e,t){var r=e.find("#width")[0],i=e.find("#height")[0],a=e.find("#constrain")[0];r&&i&&a&&t(r,i,a.checked())},H=function(e,t,r){var i=e.state.get("oldVal"),a=t.state.get("oldVal"),o=e.value(),n=t.value();r&&i&&a&&o&&n&&(o!==i?(n=Math.round(o/i*n),isNaN(n)||t.value(n)):(o=Math.round(n/a*o),isNaN(o)||e.value(o))),$(e,t)},W=function(e){L(e,H)},J=function(e){var t=function(){e(function(e){W(e)})};return{type:"container",label:"Dimensions",layout:"flex",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:5,onchange:t,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:5,onchange:t,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}},R=function(e){L(e,$)},D=W,E=t.ie&&t.ie<=8?"onChange":"onInput",I=function(e){return function(t){var r=t&&t.msg?"Media embed handler error: "+t.msg:"Media embed handler threw unknown error.";e.notificationManager.open({type:"error",text:r})}},U=function(e,t){return function(a){var o=a.html,n=e.find("#embed")[0],c=r.extend(y(i(t),o),{source1:a.url});e.fromJSON(c),n&&(n.value(o),D(e))}},V=function(e,t){var r=e.dom.select("img[data-mce-object]");e.insertContent(t),function(e,t){var r,i,a=e.dom.select("img[data-mce-object]");for(r=0;r<t.length;r++)for(i=a.length-1;i>=0;i--)t[r]===a[i]&&a.splice(i,1);e.selection.select(a[0])}(e,r),e.nodeChanged()},B=function(e){var t,a,o,n,c,s=[{name:"source1",type:"filepicker",filetype:"media",size:40,autofocus:!0,label:"Source",onpaste:function(){setTimeout(function(){T(e,t.toJSON()).then(U(t,e))["catch"](I(e))},1)},onchange:function(i){var a,o;T(e,t.toJSON()).then(U(t,e))["catch"](I(e)),a=t,o=i.meta,r.each(o,function(e,t){a.find("#"+t).value(e)})},onbeforecall:function(e){e.meta=t.toJSON()}}],d=[];if(u(e)&&d.push({name:"source2",type:"filepicker",filetype:"media",size:40,label:"Alternative source"}),l(e)&&d.push({name:"poster",type:"filepicker",filetype:"image",size:40,label:"Poster"}),m(e)){var h=J(function(e){e(t),a=t.toJSON(),t.find("#embed").value(A(a.embed,a))});s.push(h)}n=(o=e).selection.getNode(),c=n.getAttribute("data-ephox-embed-iri"),a=c?{source1:c,"data-ephox-embed-iri":c,width:w.getMaxWidth(n),height:w.getMaxHeight(n)}:n.getAttribute("data-mce-object")?y(i(o),o.serializer.serialize(n,{selection:!0})):{};var p={id:"mcemediasource",type:"textbox",flex:1,name:"embed",value:function(e){var t=e.selection.getNode();if(t.getAttribute("data-mce-object")||t.getAttribute("data-ephox-embed-iri"))return e.selection.getContent()}(e),multiline:!0,rows:5,label:"Source"};p[E]=function(){a=r.extend({},y(i(e),this.value())),this.parent().parent().fromJSON(a)},t=e.windowManager.open({title:"Insert/edit media",data:a,bodyType:"tabpanel",body:[{title:"General",type:"form",items:s},{title:"Embed",type:"container",layout:"flex",direction:"column",align:"stretch",padding:10,spacing:10,items:[{type:"label",text:"Paste your embed code below:",forId:"mcemediasource"},p]},{title:"Advanced",type:"form",items:d}],onSubmit:function(){var r,i;D(t),r=e,(i=t.toJSON()).embed=A(i.embed,i),i.embed&&z(i.source1)?V(r,i.embed):T(r,i).then(function(e){V(r,e.html)})["catch"](I(r))}}),R(t)},G=function(e){return{showDialog:function(){B(e)}}},q=function(e){e.addCommand("mceMedia",function(){B(e)})},K=tinymce.util.Tools.resolve("tinymce.html.Node"),Q=function(e,t){if(!1===c(e))return t;var r,i=M();return new d({validate:!1,allow_conditional_comments:!1,special:"script,noscript",comment:function(e){i.comment(e)},cdata:function(e){i.cdata(e)},text:function(e,t){i.text(e,t)},start:function(t,a,o){if(r=!0,"script"!==t&&"noscript"!==t){for(var n=0;n<a.length;n++){if(0===a[n].name.indexOf("on"))return;"style"===a[n].name&&(a[n].value=e.dom.serializeStyle(e.dom.parseStyle(a[n].value),t))}i.start(t,a,o),r=!1}},end:function(e){r||i.end(e)}},_({})).parse(t),i.getContent()},X=function(e,r){var i,a=r.name;return(i=new K("img",1)).shortEnded=!0,Z(e,r,i),i.attr({width:r.attr("width")||"300",height:r.attr("height")||("audio"===a?"30":"150"),style:r.attr("style"),src:t.transparentSrc,"data-mce-object":a,"class":"mce-object mce-object-"+a}),i},Y=function(e,t){var r,i,a,o=t.name;return(r=new K("span",1)).attr({contentEditable:"false",style:t.attr("style"),"data-mce-object":o,"class":"mce-preview-object mce-object-"+o}),Z(e,t,r),(i=new K(o,1)).attr({src:t.attr("src"),allowfullscreen:t.attr("allowfullscreen"),width:t.attr("width")||"300",height:t.attr("height")||("audio"===o?"30":"150"),frameborder:"0"}),(a=new K("span",1)).attr("class","mce-shim"),r.append(i),r.append(a),r},Z=function(e,t,r){var i,a,o,n,c;for(n=(o=t.attributes).length;n--;)i=o[n].name,a=o[n].value,"width"!==i&&"height"!==i&&"style"!==i&&("data"!==i&&"src"!==i||(a=e.convertURL(a,i)),r.attr("data-mce-p-"+i,a));(c=t.firstChild&&t.firstChild.value)&&(r.attr("data-mce-html",escape(Q(e,c))),r.firstChild=null)},ee=function(e){for(;e=e.parent;)if(e.attr("data-ephox-embed-iri"))return!0;return!1},te=function(e){return function(r){for(var a,o,c=r.length;c--;)(a=r[c]).parent&&(a.parent.attr("data-mce-object")||("script"!==a.name||(o=p(i(e),a.attr("src"))))&&(o&&(o.width&&a.attr("width",o.width.toString()),o.height&&a.attr("height",o.height.toString())),"iframe"===a.name&&n(e)&&t.ceFalse?ee(a)||a.replace(Y(e,a)):ee(a)||a.replace(X(e,a))))}},re=function(e){e.on("preInit",function(){var t=e.schema.getSpecialElements();r.each("video audio iframe object".split(" "),function(e){t[e]=new RegExp("</"+e+"[^>]*>","gi")});var i=e.schema.getBoolAttrs();r.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(e){i[e]={}}),e.parser.addNodeFilter("iframe,video,audio,object,embed,script",te(e)),e.serializer.addAttributeFilter("data-mce-object",function(t,r){for(var i,a,o,n,c,s,u,l,m=t.length;m--;)if((i=t[m]).parent){for(u=i.attr(r),a=new K(u,1),"audio"!==u&&"script"!==u&&((l=i.attr("class"))&&-1!==l.indexOf("mce-preview-object")?a.attr({width:i.firstChild.attr("width"),height:i.firstChild.attr("height")}):a.attr({width:i.attr("width"),height:i.attr("height")})),a.attr({style:i.attr("style")}),o=(n=i.attributes).length;o--;){var d=n[o].name;0===d.indexOf("data-mce-p-")&&a.attr(d.substr(11),n[o].value)}"script"===u&&a.attr("type","text/javascript"),(c=i.attr("data-mce-html"))&&((s=new K("#text",3)).raw=!0,s.value=Q(e,unescape(c)),a.append(s)),i.replace(a)}})}),e.on("setContent",function(){e.$("span.mce-preview-object").each(function(t,r){var i=e.$(r);0===i.find("span.mce-shim",r).length&&i.append('<span class="mce-shim"></span>')})})},ie=function(e){e.on("ResolveName",function(e){var t;1===e.target.nodeType&&(t=e.target.getAttribute("data-mce-object"))&&(e.name=t)})},ae=function(e){e.on("click keyup",function(){var t=e.selection.getNode();t&&e.dom.hasClass(t,"mce-preview-object")&&e.dom.getAttrib(t,"data-mce-selected")&&t.setAttribute("data-mce-selected","2")}),e.on("ObjectSelected",function(e){var t=e.target.getAttribute("data-mce-object");"audio"!==t&&"script"!==t||e.preventDefault()}),e.on("objectResized",function(e){var t,r=e.target;r.getAttribute("data-mce-object")&&(t=r.getAttribute("data-mce-html"))&&(t=unescape(t),r.setAttribute("data-mce-html",escape(A(t,{width:e.width,height:e.height}))))})},oe=function(e){e.addButton("media",{tooltip:"Insert/edit media",cmd:"mceMedia",stateSelector:["img[data-mce-object]","span[data-mce-object]","div[data-ephox-embed-iri]"]}),e.addMenuItem("media",{icon:"media",text:"Media",cmd:"mceMedia",context:"insert",prependToContext:!0})};e.add("media",function(e){return q(e),oe(e),ie(e),re(e),ae(e),G(e)})}();!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),n=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),o=tinymce.util.Tools.resolve("tinymce.util.VK"),r=tinymce.util.Tools.resolve("tinymce.dom.BookmarkManager"),i=tinymce.util.Tools.resolve("tinymce.util.Tools"),a=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),s=function(e){return e&&"BR"===e.nodeName},d=function(e){return e&&3===e.nodeType},l=function(e){return e&&/^(OL|UL|DL)$/.test(e.nodeName)},c=function(e){return e&&/^(LI|DT|DD)$/.test(e.nodeName)},f=function(e){return e&&/^(TH|TD)$/.test(e.nodeName)},u=s,m=function(e){return e.parentNode.firstChild===e},g=function(e){return e.parentNode.lastChild===e},p=function(e,t){return t&&!!e.schema.getTextBlockElements()[t.nodeName]},v=function(e,t){return e&&e.nodeName in t},h=function(e,t){return!!s(t)&&!(!e.isBlock(t.nextSibling)||s(t.previousSibling))},C=function(e,t,n){var o=e.isEmpty(t);return!(n&&e.select("span[data-mce-type=bookmark]",t).length>0)&&o},y=function(e,t){return e.isChildOf(t,e.getRoot())},N=function(e,n){var o=t.getNode(e,n);return c(e)&&d(o)?{container:o,offset:n>=e.childNodes.length?o.data.length:0}:{container:e,offset:n}},L=function(e){var t=e.cloneRange(),n=N(e.startContainer,e.startOffset);t.setStart(n.container,n.offset);var o=N(e.endContainer,e.endOffset);return t.setEnd(o.container,o.offset),t},S=a.DOM,b=function(e){var t={},n=function(n){var o,r,i;r=e[n?"startContainer":"endContainer"],i=e[n?"startOffset":"endOffset"],1===r.nodeType&&(o=S.create("span",{"data-mce-type":"bookmark"}),r.hasChildNodes()?(i=Math.min(i,r.childNodes.length-1),n?r.insertBefore(o,r.childNodes[i]):S.insertAfter(o,r.childNodes[i])):r.appendChild(o),r=o,i=0),t[n?"startContainer":"endContainer"]=r,t[n?"startOffset":"endOffset"]=i};return n(!0),e.collapsed||n(),t},D=function(e){function t(t){var n,o,r;n=r=e[t?"startContainer":"endContainer"],o=e[t?"startOffset":"endOffset"],n&&(1===n.nodeType&&(o=function(e){for(var t=e.parentNode.firstChild,n=0;t;){if(t===e)return n;1===t.nodeType&&"bookmark"===t.getAttribute("data-mce-type")||n++,t=t.nextSibling}return-1}(n),n=n.parentNode,S.remove(r),!n.hasChildNodes()&&S.isBlock(n)&&n.appendChild(S.create("br"))),e[t?"startContainer":"endContainer"]=n,e[t?"startOffset":"endOffset"]=o)}t(!0),t();var n=S.createRng();return n.setStart(e.startContainer,e.startOffset),e.endContainer&&n.setEnd(e.endContainer,e.endOffset),L(n)},k=a.DOM,T=function(e,t){var n,o=t.parentNode;"LI"===o.nodeName&&o.firstChild===t&&((n=o.previousSibling)&&"LI"===n.nodeName?(n.appendChild(t),C(e,o)&&k.remove(o)):k.setStyle(o,"listStyleType","none")),l(o)&&(n=o.previousSibling)&&"LI"===n.nodeName&&n.appendChild(t)},I=function(e,t){i.each(i.grep(e.select("ol,ul",t)),function(t){T(e,t)})},B=tinymce.util.Tools.resolve("tinymce.dom.DomQuery"),R=function(e){var t=e.selection.getStart(!0);return e.dom.getParent(t,"OL,UL,DL",O(e,t))},O=function(e,t){var n=e.dom.getParents(t,"TD,TH");return n.length>0?n[0]:e.getBody()},E={getParentList:R,getSelectedSubLists:function(e){var t,n,o,r=R(e),a=e.selection.getSelectedBlocks();return o=a,(n=r)&&1===o.length&&o[0]===n?(t=r,i.grep(t.querySelectorAll("ol,ul,dl"),function(e){return l(e)})):i.grep(a,function(e){return l(e)&&r!==e})},getSelectedListItems:function(e){var t,n,o,r=e.selection.getSelectedBlocks();return i.grep((t=e,n=r,o=i.map(n,function(e){var n=t.dom.getParent(e,"li,dd,dt",O(t,e));return n||e}),B.unique(o)),function(e){return c(e)})},getClosestListRootElm:O},A=tinymce.util.Tools.resolve("tinymce.Env"),P=a.DOM,x=function(e,t,n){var o,r,i,a=P.createFragment(),s=e.schema.getBlockElements();if(e.settings.forced_root_block&&(n=n||e.settings.forced_root_block),n&&((r=P.create(n)).tagName===e.settings.forced_root_block&&P.setAttribs(r,e.settings.forced_root_block_attrs),v(t.firstChild,s)||a.appendChild(r)),t)for(;o=t.firstChild;){var d=o.nodeName;i||"SPAN"===d&&"bookmark"===o.getAttribute("data-mce-type")||(i=!0),v(o,s)?(a.appendChild(o),r=null):n?(r||(r=P.create(n),a.appendChild(r)),r.appendChild(o)):a.appendChild(o)}return e.settings.forced_root_block?i||A.ie&&!(A.ie>10)||r.appendChild(P.create("br",{"data-mce-bogus":"1"})):a.appendChild(P.create("br")),a},_=a.DOM,M=function(e,t,n,o){var r,a,s,d,l;for(s=_.select('span[data-mce-type="bookmark"]',t),o=o||x(e,n),(r=_.createRng()).setStartAfter(n),r.setEndAfter(t),d=(a=r.extractContents()).firstChild;d;d=d.firstChild)if("LI"===d.nodeName&&e.dom.isEmpty(d)){_.remove(d);break}e.dom.isEmpty(a)||_.insertAfter(a,t),_.insertAfter(o,t),C(e.dom,n.parentNode)&&(l=n.parentNode,i.each(s,function(e){l.parentNode.insertBefore(e,n.parentNode)}),_.remove(l)),_.remove(n),C(e.dom,t)&&_.remove(t)},U=a.DOM,H=function(e,t){C(e,t)&&U.remove(t)},$=function(e,t){var n,o=t.parentNode,r=o.parentNode;return!(o!==e.getBody()&&("DD"===t.nodeName?(U.rename(t,"DT"),0):m(t)&&g(t)?("LI"===r.nodeName?(U.insertAfter(t,r),H(e.dom,r),U.remove(o)):l(r)?U.remove(o,!0):(r.insertBefore(x(e,t),o),U.remove(o)),0):m(t)?("LI"===r.nodeName?(U.insertAfter(t,r),t.appendChild(o),H(e.dom,r)):l(r)?r.insertBefore(t,o):(r.insertBefore(x(e,t),o),U.remove(t)),0):g(t)?("LI"===r.nodeName?U.insertAfter(t,r):l(r)?U.insertAfter(t,o):(U.insertAfter(x(e,t),o),U.remove(t)),0):("LI"===r.nodeName?(o=r,n=x(e,t,"LI")):n=l(r)?x(e,t,"LI"):x(e,t),M(e,o,t,n),I(e.dom,o.parentNode),0)))},w=$,K=function(e){var t=E.getSelectedListItems(e);if(t.length){var n=b(e.selection.getRng(!0)),o=void 0,r=void 0,i=E.getClosestListRootElm(e,e.selection.getStart(!0));for(o=t.length;o--;)for(var a=t[o].parentNode;a&&a!==i;){for(r=t.length;r--;)if(t[r]===a){t.splice(o,1);break}a=a.parentNode}for(o=0;o<t.length&&($(e,t[o])||0!==o);o++);return e.selection.setRng(D(n)),e.nodeChanged(),!0}},Q=function(e,t){i.each(t,function(t,n){e.setAttribute(n,t)})},W=function(e,t,n){var o,r,a,s,d,l,c;o=e,r=t,s=(a=n)["list-style-type"]?a["list-style-type"]:null,o.setStyle(r,"list-style-type",s),d=e,Q(l=t,(c=n)["list-attributes"]),i.each(d.select("li",l),function(e){Q(e,c["list-item-attributes"])})},j=function(e,t,n,o){var r,i;for(r=t[n?"startContainer":"endContainer"],i=t[n?"startOffset":"endOffset"],1===r.nodeType&&(r=r.childNodes[Math.min(i,r.childNodes.length-1)]||r),!n&&u(r.nextSibling)&&(r=r.nextSibling);r.parentNode!==o;){if(p(e,r))return r;if(/^(TD|TH)$/.test(r.parentNode.nodeName))return r;r=r.parentNode}return r},q=function(e,t,n){var o,a=e.selection.getRng(!0),s="LI",d=E.getClosestListRootElm(e,e.selection.getStart(!0)),c=e.dom;n=n||{},"false"!==c.getContentEditable(e.selection.getNode())&&("DL"===(t=t.toUpperCase())&&(s="DT"),o=b(a),i.each(function(e,t,n){for(var o,a=[],s=e.dom,d=j(e,t,!0,n),l=j(e,t,!1,n),c=[],f=d;f&&(c.push(f),f!==l);f=f.nextSibling);return i.each(c,function(t){if(p(e,t))return a.push(t),void(o=null);if(s.isBlock(t)||u(t))return u(t)&&s.remove(t),void(o=null);var i=t.nextSibling;r.isBookmarkNode(t)&&(p(e,i)||!i&&t.parentNode===n)?o=null:(o||(o=s.create("p"),t.parentNode.insertBefore(o,t),a.push(o)),o.appendChild(t))}),a}(e,a,d),function(o){var r,i,a,d,f,u;(i=o.previousSibling)&&l(i)&&i.nodeName===t&&(a=i,d=n,f=c.getStyle(a,"list-style-type"),u=d?d["list-style-type"]:"",f===(u=null===u?"":u))?(r=i,o=c.rename(o,s),i.appendChild(o)):(r=c.create(t),o.parentNode.insertBefore(r,o),r.appendChild(o),o=c.rename(o,s)),W(c,r,n),z(e.dom,r)}),e.selection.setRng(D(o)))},F=function(e){var t=b(e.selection.getRng(!0)),n=E.getClosestListRootElm(e,e.selection.getStart(!0)),o=E.getSelectedListItems(e),r=i.grep(o,function(t){return e.dom.isEmpty(t)});o=i.grep(o,function(t){return!e.dom.isEmpty(t)}),i.each(r,function(t){C(e.dom,t)&&w(e,t)}),i.each(o,function(t){var o,r;if(t.parentNode!==e.getBody()){for(o=t;o&&o!==n;o=o.parentNode)l(o)&&(r=o);M(e,r,t),I(e.dom,r.parentNode)}}),e.selection.setRng(D(t))},V=function(e,t,n){return d=n,(s=t)&&d&&l(s)&&s.nodeName===d.nodeName&&(i=t,a=n,(r=e).getStyle(i,"list-style-type",!0)===r.getStyle(a,"list-style-type",!0))&&(o=n,t.className===o.className);var o,r,i,a,s,d},z=function(e,t){var n,o;if(n=t.nextSibling,V(e,t,n)){for(;o=n.firstChild;)t.appendChild(o);e.remove(n)}if(n=t.previousSibling,V(e,t,n)){for(;o=n.lastChild;)t.insertBefore(o,t.firstChild);e.remove(n)}},G=function(e,t,n,o,r){if(t.nodeName!==o||J(r)){var a=b(e.selection.getRng(!0));i.each([t].concat(n),function(t){!function(e,t,n,o){if(t.nodeName!==n){var r=e.rename(t,n);W(e,r,o)}else W(e,t,o)}(e.dom,t,o,r)}),e.selection.setRng(D(a))}else F(e)},J=function(e){return"list-style-type"in e},X={toggleList:function(e,t,n){var o=E.getParentList(e),r=E.getSelectedSubLists(e);n=n||{},o&&r.length>0?G(e,o,r,t,n):function(e,t,n,o){if(t!==e.getBody())if(t)if(t.nodeName!==n||J(o)){var r=b(e.selection.getRng(!0));W(e.dom,t,o),z(e.dom,e.dom.rename(t,n)),e.selection.setRng(D(r))}else F(e);else q(e,n,o)}(e,o,t,n)},removeList:F,mergeWithAdjacentLists:z},Y=function(e,o,r,i){var a,s,d=o.startContainer,l=o.startOffset;if(3===d.nodeType&&(r?l<d.data.length:l>0))return d;for(a=e.schema.getNonEmptyElements(),1===d.nodeType&&(d=t.getNode(d,l)),s=new n(d,i),r&&h(e.dom,d)&&s.next();d=s[r?"next":"prev2"]();){if("LI"===d.nodeName&&!d.hasChildNodes())return d;if(a[d.nodeName])return d;if(3===d.nodeType&&d.data.length>0)return d}},Z=function(e,t){var n=t.childNodes;return 1===n.length&&!l(n[0])&&e.isBlock(n[0])},ee=function(e,t,n){var o,r,i,a;if(r=Z(e,n)?n.firstChild:n,Z(i=e,a=t)&&i.remove(a.firstChild,!0),!C(e,t,!0))for(;o=t.firstChild;)r.appendChild(o)},te=function(e,t,n){var o,r,i=t.parentNode;y(e,t)&&y(e,n)&&(l(n.lastChild)&&(r=n.lastChild),i===n.lastChild&&u(i.previousSibling)&&e.remove(i.previousSibling),(o=n.lastChild)&&u(o)&&t.hasChildNodes()&&e.remove(o),C(e,n,!0)&&e.$(n).empty(),ee(e,t,n),r&&n.appendChild(r),e.remove(t),C(e,i)&&i!==e.getRoot()&&e.remove(i))},ne=function(e,t,n,o){var r,i,a,s=e.dom;if(s.isEmpty(o))i=n,a=o,(r=e).dom.$(a).empty(),te(r.dom,i,a),r.selection.setCursorLocation(a);else{var d=b(t);te(s,n,o),e.selection.setRng(D(d))}},oe=function(e,t){var n,o,r,i=e.dom,a=e.selection,s=a.getStart(),d=E.getClosestListRootElm(e,s),l=i.getParent(a.getStart(),"LI",d);if(l){if((n=l.parentNode)===e.getBody()&&C(i,n))return!0;if(o=L(a.getRng(!0)),(r=i.getParent(Y(e,o,t,d),"LI",d))&&r!==l)return t?ne(e,o,r,l):function(e,t,n,o){var r=b(t);te(e.dom,n,o);var i=D(r);e.selection.setRng(i)}(e,o,l,r),!0;if(!r&&!t&&X.removeList(e))return!0}return!1},re=function(e,t){return oe(e,t)||function(e,t){var n=e.dom,o=e.selection.getStart(),r=E.getClosestListRootElm(e,o),i=n.getParent(o,n.isBlock,r);if(i&&n.isEmpty(i)){var a=L(e.selection.getRng(!0)),s=n.getParent(Y(e,a,t,r),"LI",r);if(s)return e.undoManager.transact(function(){var o,a,d,l;a=i,d=r,l=(o=n).getParent(a.parentNode,o.isBlock,d),o.remove(a),l&&o.isEmpty(l)&&o.remove(l),X.mergeWithAdjacentLists(n,s.parentNode),e.selection.select(s,!0),e.selection.collapse(t)}),!0}return!1}(e,t)},ie=function(e,t){return e.selection.isCollapsed()?re(e,t):(o=(n=e).selection.getStart(),r=E.getClosestListRootElm(n,o),!!(n.dom.getParent(o,"LI,DT,DD",r)||E.getSelectedListItems(n).length>0)&&(n.undoManager.transact(function(){n.execCommand("Delete"),I(n.dom,n.getBody())}),!0));var n,o,r},ae=function(e){e.on("keydown",function(t){t.keyCode===o.BACKSPACE?ie(e,!1)&&t.preventDefault():t.keyCode===o.DELETE&&ie(e,!0)&&t.preventDefault()})},se=ie,de=function(e){return{backspaceDelete:function(t){se(e,t)}}},le=a.DOM,ce=function(e,t){var n;if(l(e)){for(;n=e.firstChild;)t.appendChild(n);le.remove(e)}},fe=function(e){var t,n,o,r,i=E.getSelectedListItems(e);if(i.length){for(var a=b(e.selection.getRng(!0)),s=0;s<i.length&&(t=i[s],n=void 0,o=void 0,r=void 0,("DT"===t.nodeName?(le.rename(t,"DD"),1):(n=t.previousSibling)&&l(n)?(n.appendChild(t),1):n&&"LI"===n.nodeName&&l(n.lastChild)?(n.lastChild.appendChild(t),ce(t.lastChild,n.lastChild),1):(n=t.nextSibling)&&l(n)?(n.insertBefore(t,n.firstChild),1):(n=t.previousSibling)&&"LI"===n.nodeName&&(o=le.create(t.parentNode.nodeName),(r=le.getStyle(t.parentNode,"listStyleType"))&&le.setStyle(o,"listStyleType",r),n.appendChild(o),o.appendChild(t),ce(t.lastChild,o),1))||0!==s);s++);return e.selection.setRng(D(a)),e.nodeChanged(),!0}},ue=function(e,t){return function(){var n=e.dom.getParent(e.selection.getStart(),"UL,OL,DL");return n&&n.nodeName===t}},me=function(e){e.on("BeforeExecCommand",function(t){var n,o=t.command.toLowerCase();if("indent"===o?fe(e)&&(n=!0):"outdent"===o&&K(e)&&(n=!0),n)return e.fire("ExecCommand",{command:t.command}),t.preventDefault(),!0}),e.addCommand("InsertUnorderedList",function(t,n){X.toggleList(e,"UL",n)}),e.addCommand("InsertOrderedList",function(t,n){X.toggleList(e,"OL",n)}),e.addCommand("InsertDefinitionList",function(t,n){X.toggleList(e,"DL",n)}),e.addQueryStateHandler("InsertUnorderedList",ue(e,"UL")),e.addQueryStateHandler("InsertOrderedList",ue(e,"OL")),e.addQueryStateHandler("InsertDefinitionList",ue(e,"DL"))},ge=function(e){return e.getParam("lists_indent_on_tab",!0)},pe=function(e){var t;ge(e)&&(t=e).on("keydown",function(e){e.keyCode!==o.TAB||o.metaKeyPressed(e)||t.dom.getParent(t.selection.getStart(),"LI,DT,DD")&&(e.preventDefault(),e.shiftKey?K(t):fe(t))}),ae(e)},ve=function(e,t){return function(n){var o=n.control;e.on("NodeChange",function(e){var n=function(e,t){for(var n=0;n<e.length;n++)if(t(e[n]))return n;return-1}(e.parents,f),r=-1!==n?e.parents.slice(0,n):e.parents,a=i.grep(r,l);o.active(a.length>0&&a[0].nodeName===t)})}},he=function(e){var t,n,o,r;n="advlist",o=(t=e).settings.plugins?t.settings.plugins:"",-1===i.inArray(o.split(/[ ,]/),n)&&(e.addButton("numlist",{active:!1,title:"Numbered list",cmd:"InsertOrderedList",onPostRender:ve(e,"OL")}),e.addButton("bullist",{active:!1,title:"Bullet list",cmd:"InsertUnorderedList",onPostRender:ve(e,"UL")})),e.addButton("indent",{icon:"indent",title:"Increase indent",cmd:"Indent",onPostRender:(r=e,function(e){var t=e.control;r.on("nodechange",function(){var e=E.getSelectedListItems(r),n=e.length>0&&m(e[0]);t.disabled(n)})})})};e.add("lists",function(e){return pe(e),he(e),me(e),de(e)})}();!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),e=tinymce.util.Tools.resolve("tinymce.util.VK"),n=function(t){return t.target_list},o=function(t){return t.rel_list},i=function(t){return t.link_class_list},r=function(t){return"boolean"==typeof t.link_assume_external_targets&&t.link_assume_external_targets},a=function(t){return"boolean"==typeof t.link_context_toolbar&&t.link_context_toolbar},l=function(t){return t.link_list},u=function(t){return"string"==typeof t.default_link_target},c=function(t){return t.default_link_target},s=n,f=function(t,e){t.settings.target_list=e},d=function(t){return!1!==n(t)},m=o,v=function(t){return o(t)!==undefined},g=i,h=function(t){return i(t)!==undefined},x=function(t){return!1!==t.link_title},p=function(t){return"boolean"==typeof t.allow_unsafe_link_target&&t.allow_unsafe_link_target},y=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),k=tinymce.util.Tools.resolve("tinymce.Env"),b=function(t){if(!k.ie||k.ie>10){var e=document.createElement("a");e.target="_blank",e.href=t,e.rel="noreferrer noopener";var n=document.createEvent("MouseEvents");n.initMouseEvent("click",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),r=e,a=n,document.body.appendChild(r),r.dispatchEvent(a),document.body.removeChild(r)}else{var o=window.open("","_blank");if(o){o.opener=null;var i=o.document;i.open(),i.write('<meta http-equiv="refresh" content="0; url='+y.DOM.encode(t)+'">'),i.close()}}var r,a},_=tinymce.util.Tools.resolve("tinymce.util.Tools"),w=function(t,e){var n,o,i=["noopener"],r=t?t.split(/\s+/):[],a=function(t){return t.filter(function(t){return-1===_.inArray(i,t)})};return(r=e?(n=a(n=r)).length?n.concat(i):i:a(r)).length?(o=r,_.trim(o.sort().join(" "))):null},T=function(t,e){return e=e||t.selection.getNode(),M(e)?t.dom.select("a[href]",e)[0]:t.dom.getParent(e,"a[href]")},C=function(t){return t&&"A"===t.nodeName&&t.href},M=function(t){return t&&"FIGURE"===t.nodeName&&/\bimage\b/i.test(t.className)},O=function(t,e){var n,o;(o=t.dom.select("img",e)[0])&&(n=t.dom.getParents(o,"a[href]",e)[0])&&(n.parentNode.insertBefore(o,n),t.dom.remove(n))},N=function(t,e,n){var o,i;(i=t.dom.select("img",e)[0])&&(o=t.dom.create("a",n),i.parentNode.insertBefore(o,i),o.appendChild(i))},R=function(t,e){return function(n){t.undoManager.transact(function(){var o=t.selection.getNode(),i=T(t,o),r={href:n.href,target:n.target?n.target:null,rel:n.rel?n.rel:null,"class":n["class"]?n["class"]:null,title:n.title?n.title:null};v(t.settings)||!1!==p(t.settings)||(r.rel=w(r.rel,"_blank"===r.target)),n.href===e.href&&(e.attach(),e={}),i?(t.focus(),n.hasOwnProperty("text")&&("innerText"in i?i.innerText=n.text:i.textContent=n.text),t.dom.setAttribs(i,r),t.selection.select(i),t.undoManager.add()):M(o)?N(t,o,r):n.hasOwnProperty("text")?t.insertContent(t.dom.createHTML("a",r,t.dom.encode(n.text))):t.execCommand("mceInsertLink",!1,r)})}},A=function(t){return function(){t.undoManager.transact(function(){var e=t.selection.getNode();M(e)?O(t,e):t.execCommand("unlink")})}},L=C,P=function(t){return _.grep(t,C).length>0},E=function(t){return!(/</.test(t)&&(!/^<a [^>]+>[^<]+<\/a>$/.test(t)||-1===t.indexOf("href=")))},K=T,S=function(t,e){var n=e?e.innerText||e.textContent:t.getContent({format:"text"});return n.replace(/\uFEFF/g,"")},U=w,D=tinymce.util.Tools.resolve("tinymce.util.Delay"),I=tinymce.util.Tools.resolve("tinymce.util.XHR"),B={},F=function(t,e,n){var o=function(t,n){return n=n||[],_.each(t,function(t){var i={text:t.text||t.title};t.menu?i.menu=o(t.menu):(i.value=t.value,e&&e(i)),n.push(i)}),n};return o(t,n||[])},q=function(t,e,n){var o=t.selection.getRng();D.setEditorTimeout(t,function(){t.windowManager.confirm(e,function(e){t.selection.setRng(o),n(e)})})},V=function(t,e){var n,o,i,a,l,y,k,b,w,T,C,M={},O=t.selection,N=t.dom,L=function(t){var e=i.find("#text");(!e.value()||t.lastControl&&e.value()===t.lastControl.text())&&e.value(t.control.text()),i.find("#href").value(t.control.value())},P=function(){o||!a||M.text||this.parent().parent().find("#text")[0].value(this.value())};a=E(O.getContent()),n=K(t),M.text=o=S(t.selection,n),M.href=n?N.getAttrib(n,"href"):"",n?M.target=N.getAttrib(n,"target"):u(t.settings)&&(M.target=c(t.settings)),(C=N.getAttrib(n,"rel"))&&(M.rel=C),(C=N.getAttrib(n,"class"))&&(M["class"]=C),(C=N.getAttrib(n,"title"))&&(M.title=C),a&&(l={name:"text",type:"textbox",size:40,label:"Text to display",onchange:function(){M.text=this.value()}}),e&&(y={type:"listbox",label:"Link list",values:F(e,function(e){e.value=t.convertURL(e.value||e.url,"href")},[{text:"None",value:""}]),onselect:L,value:t.convertURL(M.href,"href"),onPostRender:function(){y=this}}),d(t.settings)&&(s(t.settings)===undefined&&f(t,[{text:"None",value:""},{text:"New window",value:"_blank"}]),b={name:"target",type:"listbox",label:"Target",values:F(s(t.settings))}),v(t.settings)&&(k={name:"rel",type:"listbox",label:"Rel",values:F(m(t.settings),function(e){!1===p(t.settings)&&(e.value=U(e.value,"_blank"===M.target))})}),h(t.settings)&&(w={name:"class",type:"listbox",label:"Class",values:F(g(t.settings),function(e){e.value&&(e.textStyle=function(){return t.formatter.getCssText({inline:"a",classes:[e.value]})})})}),x(t.settings)&&(T={name:"title",type:"textbox",label:"Title",value:M.title}),i=t.windowManager.open({title:"Insert link",data:M,body:[{name:"href",type:"filepicker",filetype:"file",size:40,autofocus:!0,label:"Url",onchange:function(e){var n=e.meta||{};y&&y.value(t.convertURL(this.value(),"href")),_.each(e.meta,function(t,e){var n=i.find("#"+e);"text"===e?0===o.length&&(n.value(t),M.text=t):n.value(t)}),n.attach&&(B={href:this.value(),attach:n.attach}),n.text||P.call(this)},onkeyup:P,onbeforecall:function(t){t.meta=i.toJSON()}},l,T,function(e){var n=[];if(_.each(t.dom.select("a:not([href])"),function(t){var o=t.name||t.id;o&&n.push({text:o,value:"#"+o,selected:-1!==e.indexOf("#"+o)})}),n.length)return n.unshift({text:"None",value:""}),{name:"anchor",type:"listbox",label:"Anchors",values:n,onselect:L}}(M.href),y,k,b,w],onSubmit:function(e){var n=r(t.settings),i=R(t,B),l=A(t),u=_.extend({},M,e.data),c=u.href;c?(a&&u.text!==o||delete u.text,c.indexOf("@")>0&&-1===c.indexOf("//")&&-1===c.indexOf("mailto:")?q(t,"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",function(t){t&&(u.href="mailto:"+c),i(u)}):!0===n&&!/^\w+:/i.test(c)||!1===n&&/^\s*www[\.|\d\.]/i.test(c)?q(t,"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",function(t){t&&(u.href="http://"+c),i(u)}):i(u)):l()}})},z=function(t){var e,n,o;n=V,"string"==typeof(o=l((e=t).settings))?I.send({url:o,success:function(t){n(e,JSON.parse(t))}}):"function"==typeof o?o(function(t){n(e,t)}):n(e,o)},H=function(t,e){return t.dom.getParent(e,"a[href]")},J=function(t){return H(t,t.selection.getStart())},$=function(t,e){if(e){var n=(i=e).getAttribute("data-mce-href")||i.getAttribute("href");if(/^#/.test(n)){var o=t.$(n);o.length&&t.selection.scrollIntoView(o[0],!0)}else b(e.href)}var i},j=function(t){return function(){z(t)}},G=function(t){return function(){$(t,J(t))}},X=function(t){return function(e){var n,o,i,r,l;return!!(a(t.settings)&&(r=t,l=r.plugins.contextmenu,!l||!l.isContextMenuVisible())&&L(e)&&3===(i=(o=(n=t.selection).getRng()).startContainer).nodeType&&n.isCollapsed()&&o.startOffset>0&&o.startOffset<i.data.length)}},Q=function(t){t.on("click",function(n){var o=H(t,n.target);o&&e.metaKeyPressed(n)&&(n.preventDefault(),$(t,o))}),t.on("keydown",function(e){var n,o=J(t);o&&13===e.keyCode&&!0===(n=e).altKey&&!1===n.shiftKey&&!1===n.ctrlKey&&!1===n.metaKey&&(e.preventDefault(),$(t,o))})},W=function(t){return function(){var e=this;t.on("nodechange",function(n){e.active(!t.readonly&&!!K(t,n.element))})}},Y=function(t){return function(){var e=this,n=function(t){P(t.parents)?e.show():e.hide()};P(t.dom.getParents(t.selection.getStart()))||e.hide(),t.on("nodechange",n),e.on("remove",function(){t.off("nodechange",n)})}},Z=function(t){t.addCommand("mceLink",j(t))},tt=function(t){t.addShortcut("Meta+K","",j(t))},et=function(t){t.addButton("link",{active:!1,icon:"link",tooltip:"Insert/edit link",onclick:j(t),onpostrender:W(t)}),t.addButton("unlink",{active:!1,icon:"unlink",tooltip:"Remove link",onclick:A(t),onpostrender:W(t)}),t.addContextToolbar&&t.addButton("openlink",{icon:"newtab",tooltip:"Open link",onclick:G(t)})},nt=function(t){t.addMenuItem("openlink",{text:"Open link",icon:"newtab",onclick:G(t),onPostRender:Y(t),prependToContext:!0}),t.addMenuItem("link",{icon:"link",text:"Link",shortcut:"Meta+K",onclick:j(t),stateSelector:"a[href]",context:"insert",prependToContext:!0})},ot=function(t){t.addContextToolbar&&t.addContextToolbar(X(t),"openlink | link unlink")};t.add("link",function(t){et(t),nt(t),ot(t),Q(t),Z(t),tt(t)})}();!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.util.Tools"),n=function(e){e.settings.inline_styles=!1,e.on("init",function(){var n,i,a,o;n=e,i="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",a=t.explode(n.settings.font_size_style_values),o=n.schema,n.formatter.register({alignleft:{selector:i,attributes:{align:"left"}},aligncenter:{selector:i,attributes:{align:"center"}},alignright:{selector:i,attributes:{align:"right"}},alignjustify:{selector:i,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all"},{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all"},{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all"},{inline:"span",styles:{textDecoration:"underline"},exact:!0}],strikethrough:[{inline:"strike",remove:"all"},{inline:"span",styles:{textDecoration:"line-through"},exact:!0}],fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(e){return t.inArray(a,e.value)+1}}},forecolor:{inline:"font",attributes:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}}),t.each("b,i,u,strike".split(","),function(e){o.addValidElements(e+"[*]")}),o.getElementRule("font")||o.addValidElements("font[face|size|color|style]"),t.each(i.split(","),function(e){var t=o.getElementRule(e);t&&(t.attributes.align||(t.attributes.align={},t.attributesOrder.push("align")))})})},i=function(e){e.addButton("fontsizeselect",function(){var t=[],n=e.settings.fontsizeFormats||"8pt=1 10pt=2 12pt=3 14pt=4 18pt=5 24pt=6 36pt=7";return e.$.each(n.split(" "),function(e,n){var i=n,a=n,o=n.split("=");o.length>1&&(i=o[0],a=o[1]),t.push({text:i,value:a})}),{type:"listbox",text:"Font Sizes",tooltip:"Font Sizes",values:t,fixedWidth:!0,onPostRender:function(){var t=this;e.on("NodeChange",function(){var n;(n=e.dom.getParent(e.selection.getNode(),"font"))?t.value(n.size):t.value("")})},onclick:function(t){t.control.settings.value&&e.execCommand("FontSize",!1,t.control.settings.value)}}}),e.addButton("fontselect",function(){var t=[],n=function(e){for(var t=(e=e.replace(/;$/,"").split(";")).length;t--;)e[t]=e[t].split("=");return e}(e.settings.font_formats||"Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats");return e.$.each(n,function(e,n){t.push({text:{raw:n[0]},value:n[1],textStyle:-1===n[1].indexOf("dings")?"font-family:"+n[1]:""})}),{type:"listbox",text:"Font Family",tooltip:"Font Family",values:t,fixedWidth:!0,onPostRender:function(){var t=this;e.on("NodeChange",function(){var n;(n=e.dom.getParent(e.selection.getNode(),"font"))?t.value(n.face):t.value("")})},onselect:function(t){t.control.settings.value&&e.execCommand("FontName",!1,t.control.settings.value)}}})};e.add("legacyoutput",function(e){n(e),i(e)})}();!function(){"use strict";var e=function(t){var n=t,r=function(){return n};return{get:r,set:function(e){n=e},clone:function(){return e(r())}}},t=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=function(e){return e.getParam("insertdatetime_timeformat",e.translate("%H:%M:%S"))},r=function(e){return e.getParam("insertdatetime_formats",["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"])},a=function(e){return e.getParam("insertdatetime_dateformat",e.translate("%Y-%m-%d"))},i=n,o=r,u=function(e){var t=r(e);return t.length>0?t[0]:n(e)},c=function(e){return e.getParam("insertdatetime_element",!1)},l="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),m="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),s="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),d="January February March April May June July August September October November December".split(" "),p=function(e,t){if((e=""+e).length<t)for(var n=0;n<t-e.length;n++)e="0"+e;return e},f=function(e,t,n){return n=n||new Date,t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace("%D","%m/%d/%Y")).replace("%r","%I:%M:%S %p")).replace("%Y",""+n.getFullYear())).replace("%y",""+n.getYear())).replace("%m",p(n.getMonth()+1,2))).replace("%d",p(n.getDate(),2))).replace("%H",""+p(n.getHours(),2))).replace("%M",""+p(n.getMinutes(),2))).replace("%S",""+p(n.getSeconds(),2))).replace("%I",""+((n.getHours()+11)%12+1))).replace("%p",n.getHours()<12?"AM":"PM")).replace("%B",""+e.translate(d[n.getMonth()]))).replace("%b",""+e.translate(s[n.getMonth()]))).replace("%A",""+e.translate(m[n.getDay()]))).replace("%a",""+e.translate(l[n.getDay()]))).replace("%%","%")},g=function(e,t){if(c(e)){var n=f(e,t),r=void 0;r=/%[HMSIp]/.test(t)?f(e,"%Y-%m-%dT%H:%M"):f(e,"%Y-%m-%d");var a=e.dom.getParent(e.selection.getStart(),"time");a?(o=a,u=r,l=n,m=(i=e).dom.create("time",{datetime:u},l),o.parentNode.insertBefore(m,o),i.dom.remove(o),i.selection.select(m,!0),i.selection.collapse(!1)):e.insertContent('<time datetime="'+r+'">'+n+"</time>")}else e.insertContent(f(e,t));var i,o,u,l,m},y=f,M=function(e){e.addCommand("mceInsertDate",function(){g(e,a(e))}),e.addCommand("mceInsertTime",function(){g(e,i(e))})},v=tinymce.util.Tools.resolve("tinymce.util.Tools"),S=function(e,t){var n,r,a,i=(r=t,a=o(n=e),v.map(a,function(e){return{text:y(n,e),onclick:function(){r.set(e),g(n,e)}}}));e.addButton("insertdatetime",{type:"splitbutton",title:"Insert date/time",menu:i,onclick:function(){var n=t.get();g(e,n||u(e))}}),e.addMenuItem("insertdatetime",{icon:"date",text:"Date/time",menu:i,context:"insert"})};t.add("insertdatetime",function(t){var n=e(null);M(t),S(t,n)})}();!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),n=tinymce.util.Tools.resolve("tinymce.EditorManager"),r=tinymce.util.Tools.resolve("tinymce.Env"),i=tinymce.util.Tools.resolve("tinymce.util.Tools"),c=function(e){return e.getParam("importcss_merge_classes")},o=function(e){return e.getParam("importcss_exclusive")},s=function(e){return e.getParam("importcss_selector_converter")},u=function(e){return e.getParam("importcss_selector_filter")},l=function(e){return e.getParam("importcss_groups")},a=function(e){return e.getParam("importcss_append")},f=function(e){return e.getParam("importcss_file_filter")},m=function(e){var t=r.cacheSuffix;return"string"==typeof e&&(e=e.replace("?"+t,"").replace("&"+t,"")),e},g=function(e,t){var r=e.settings,i=!1!==r.skin&&(r.skin||"lightgray");return!!i&&t===(r.skin_url?e.documentBaseURI.toAbsolute(r.skin_url):n.baseURL+"/skins/"+i)+"/content"+(e.inline?".inline":"")+".min.css"},p=function(e){return"string"==typeof e?function(t){return-1!==t.indexOf(e)}:e instanceof RegExp?function(t){return e.test(t)}:e},v=function(e,t,n){var r=[],c={};i.each(e.contentCSS,function(e){c[e]=!0}),n||(n=function(e,t){return t||c[e]});try{i.each(t.styleSheets,function(t){!function c(t,o){var s,u=t.href;if((u=m(u))&&n(u,o)&&!g(e,u)){i.each(t.imports,function(e){c(e,!0)});try{s=t.cssRules||t.rules}catch(l){}i.each(s,function(e){e.styleSheet?c(e.styleSheet,!0):e.selectorText&&i.each(e.selectorText.split(","),function(e){r.push(i.trim(e))})})}}(t)})}catch(o){}return r},h=function(e,t){var n,r=/^(?:([a-z0-9\-_]+))?(\.[a-z0-9_\-\.]+)$/i.exec(t);if(r){var o=r[1],s=r[2].substr(1).split(".").join(" "),u=i.makeMap("a,img");return r[1]?(n={title:t},e.schema.getTextBlockElements()[o]?n.block=o:e.schema.getBlockElements()[o]||u[o.toLowerCase()]?n.selector=o:n.inline=o):r[2]&&(n={inline:"span",title:t.substr(1),classes:s}),!1!==c(e)?n.classes=s:n.attributes={"class":s},n}},d=function(e,t){return null===t||!1!==o(e)},y=h,_=function(e){e.on("renderFormatsMenu",function(n){var r,c={},o=p(u(e)),m=n.control,g=(r=l(e),i.map(r,function(e){return i.extend({},e,{original:e,selectors:{},filter:p(e.filter),item:{text:e.title,menu:[]}})})),y=function(n,r){if(_=n,T=c,!(d(e,x=r)?_ in T:_ in x.selectors)){p=n,y=c,d(e,v=r)?y[p]=!0:v.selectors[p]=!0;var o=(l=e,a=e.plugins.importcss,f=n,((g=r)&&g.selector_converter?g.selector_converter:s(l)?s(l):function(){return h(l,f)}).call(a,f,g));if(o){var u=o.name||t.DOM.uniqueId();return e.formatter.register(u,o),i.extend({},m.settings.itemDefaults,{text:o.title,format:u})}}var l,a,f,g,p,v,y,_,x,T;return null};a(e)||m.items().remove(),i.each(v(e,n.doc||e.getDoc(),p(f(e))),function(e){if(-1===e.indexOf(".mce-")&&(!o||o(e))){var t=(r=g,c=e,i.grep(r,function(e){return!e.filter||e.filter(c)}));if(t.length>0)i.each(t,function(t){var n=y(e,t);n&&t.item.menu.push(n)});else{var n=y(e,null);n&&m.add(n)}}var r,c}),i.each(g,function(e){e.item.menu.length>0&&m.add(e.item)}),n.control.renderNew()})},x=function(e){return{convertSelectorToFormat:function(t){return y(e,t)}}};e.add("importcss",function(e){return _(e),x(e)})}();!function(){"use strict";var t=function(e){var n=e,o=function(){return n};return{get:o,set:function(t){n=t},clone:function(){return t(o())}}},e=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=tinymce.util.Tools.resolve("tinymce.util.Tools");function o(t,e){return i(document.createElement("canvas"),t,e)}function r(t){return t.getContext("2d")}function i(t,e,n){return t.width=e,t.height=n,t}var a,u,c,l,s={create:o,clone:function(t){var e;return r(e=o(t.width,t.height)).drawImage(t,0,0),e},resize:i,get2dContext:r,get3dContext:function(t){var e=null;try{e=t.getContext("webgl")||t.getContext("experimental-webgl")}catch(n){}return e||(e=null),e}},f={getWidth:function(t){return t.naturalWidth||t.width},getHeight:function(t){return t.naturalHeight||t.height}},d=window.Promise?window.Promise:function(){var t=function(t){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof t)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],c(t,n(i,this),n(a,this))},e=t.immediateFn||"function"==typeof setImmediate&&setImmediate||function(t){setTimeout(t,1)};function n(t,e){return function(){t.apply(e,arguments)}}var o=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)};function r(t){var n=this;null!==this._state?e(function(){var e=n._state?t.onFulfilled:t.onRejected;if(null!==e){var o;try{o=e(n._value)}catch(r){return void t.reject(r)}t.resolve(o)}else(n._state?t.resolve:t.reject)(n._value)}):this._deferreds.push(t)}function i(t){try{if(t===this)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"==typeof t||"function"==typeof t)){var e=t.then;if("function"==typeof e)return void c(n(e,t),n(i,this),n(a,this))}this._state=!0,this._value=t,u.call(this)}catch(o){a.call(this,o)}}function a(t){this._state=!1,this._value=t,u.call(this)}function u(){for(var t=0,e=this._deferreds.length;t<e;t++)r.call(this,this._deferreds[t]);this._deferreds=null}function c(t,e,n){var o=!1;try{t(function(t){o||(o=!0,e(t))},function(t){o||(o=!0,n(t))})}catch(r){if(o)return;o=!0,n(r)}}return t.prototype["catch"]=function(t){return this.then(null,t)},t.prototype.then=function(e,n){var o=this;return new t(function(t,i){r.call(o,new function(t,e,n,o){this.onFulfilled="function"==typeof t?t:null,this.onRejected="function"==typeof e?e:null,this.resolve=n,this.reject=o}(e,n,t,i))})},t.all=function(){var e=Array.prototype.slice.call(1===arguments.length&&o(arguments[0])?arguments[0]:arguments);return new t(function(t,n){if(0===e.length)return t([]);var o=e.length;function r(i,a){try{if(a&&("object"==typeof a||"function"==typeof a)){var u=a.then;if("function"==typeof u)return void u.call(a,function(t){r(i,t)},n)}e[i]=a,0==--o&&t(e)}catch(c){n(c)}}for(var i=0;i<e.length;i++)r(i,e[i])})},t.resolve=function(e){return e&&"object"==typeof e&&e.constructor===t?e:new t(function(t){t(e)})},t.reject=function(e){return new t(function(t,n){n(e)})},t.race=function(e){return new t(function(t,n){for(var o=0,r=e.length;o<r;o++)e[o].then(t,n)})},t}(),h=function(t){return function(){return t}},p={noop:function(){},noarg:function(t){return function(){return t()}},compose:function(t,e){return function(){return t(e.apply(null,arguments))}},constant:h,identity:function(t){return t},tripleEquals:function(t,e){return t===e},curry:function(t){for(var e=new Array(arguments.length-1),n=1;n<arguments.length;n++)e[n-1]=arguments[n];return function(){for(var n=new Array(arguments.length),o=0;o<n.length;o++)n[o]=arguments[o];var r=e.concat(n);return t.apply(null,r)}},not:function(t){return function(){return!t.apply(null,arguments)}},die:function(t){return function(){throw new Error(t)}},apply:function(t){return t()},call:function(t){t()},never:h(!1),always:h(!0)},m=p.never,g=p.always,v=function(){return y},y=(l={fold:function(t,e){return t()},is:m,isSome:m,isNone:g,getOr:c=function(t){return t},getOrThunk:u=function(t){return t()},getOrDie:function(t){throw new Error(t||"error: getOrDie called on none.")},or:c,orThunk:u,map:v,ap:v,each:function(){},bind:v,flatten:v,exists:m,forall:g,filter:v,equals:a=function(t){return t.isNone()},equals_:a,toArray:function(){return[]},toString:p.constant("none()")},Object.freeze&&Object.freeze(l),l),b=function(t){var e=function(){return t},n=function(){return r},o=function(e){return e(t)},r={fold:function(e,n){return n(t)},is:function(e){return t===e},isSome:g,isNone:m,getOr:e,getOrThunk:e,getOrDie:e,or:n,orThunk:n,map:function(e){return b(e(t))},ap:function(e){return e.fold(v,function(e){return b(e(t))})},each:function(e){e(t)},bind:o,flatten:e,exists:o,forall:o,filter:function(e){return e(t)?r:y},equals:function(e){return e.is(t)},equals_:function(e,n){return e.fold(m,function(e){return n(t,e)})},toArray:function(){return[t]},toString:function(){return"some("+t+")"}};return r},w={some:b,none:v,from:function(t){return null===t||t===undefined?y:b(t)}},x="undefined"!=typeof window?window:Function("return this;")(),R=function(t,e){for(var n=e!==undefined&&null!==e?e:x,o=0;o<t.length&&n!==undefined&&null!==n;++o)n=n[t[o]];return n},I=function(t,e){var n=t.split(".");return R(n,e)},T=function(t,e){var n=I(t,e);if(n===undefined||null===n)throw t+" not available on this browser";return n},k=function(t,e){return new(T("Blob"))(t,e)},C=function(){return new(T("FileReader"))},B=function(t){return new(T("Uint8Array"))(t)},U={atob:function(t){return T("atob")(t)},requestAnimationFrame:function(t){T("requestAnimationFrame")(t)}};function M(t){return new d(function(e,n){var o=URL.createObjectURL(t),r=new Image,i=function(){r.removeEventListener("load",a),r.removeEventListener("error",u)};function a(){i(),e(r)}function u(){i(),n("Unable to load data of type "+t.type+": "+o)}r.addEventListener("load",a),r.addEventListener("error",u),r.src=o,r.complete&&a()})}function j(t){return new d(function(e){var n=new XMLHttpRequest;n.open("GET",t,!0),n.responseType="blob",n.onload=function(){200==this.status&&e(this.response)},n.send()})}function A(t){var e=t.split(","),n=/data:([^;]+)/.exec(e[0]);if(!n)return w.none();for(var o=n[1],r=e[1],i=U.atob(r),a=i.length,u=Math.ceil(a/1024),c=new Array(u),l=0;l<u;++l){for(var s=1024*l,f=Math.min(s+1024,a),d=new Array(f-s),h=s,p=0;h<f;++p,++h)d[p]=i[h].charCodeAt(0);c[l]=B(d)}return w.some(k(c,{type:o}))}function z(t){return new d(function(e,n){A(t).fold(function(){n("uri is not base64: "+t)},e)})}function E(t){return new d(function(e){var n=new C;n.onloadend=function(){e(n.result)},n.readAsDataURL(t)})}var S={blobToImage:M,imageToBlob:function(t){return(e=t,new d(function(t){e.complete?t(e):e.addEventListener("load",function n(){e.removeEventListener("load",n),t(e)})})).then(function(t){var e=t.src;return 0===e.indexOf("blob:")?j(e):0===e.indexOf("data:")?z(e):j(e)});var e},blobToDataUri:E,blobToBase64:function(t){return E(t).then(function(t){return t.split(",")[1]})},dataUriToBlobSync:A,canvasToBlob:function(t,e,n){return e=e||"image/png",HTMLCanvasElement.prototype.toBlob?new d(function(o){t.toBlob(function(t){o(t)},e,n)}):z(t.toDataURL(e,n))},canvasToDataURL:function(t,e,n){return e=e||"image/png",t.then(function(t){return t.toDataURL(e,n)})},blobToCanvas:function(t){return M(t).then(function(t){var e,n;return e=t,URL.revokeObjectURL(e.src),n=s.create(f.getWidth(t),f.getHeight(t)),s.get2dContext(n).drawImage(t,0,0),n})},uriToBlob:function(t){return 0===t.indexOf("blob:")?j(t):0===t.indexOf("data:")?z(t):null}},L=function(t){return S.blobToImage(t)},H=function(t){return S.imageToBlob(t)};function O(t,e,n){var o=e.type;function r(e,n){return t.then(function(t){return S.canvasToDataURL(t,e,n)})}return{getType:p.constant(o),toBlob:function(){return d.resolve(e)},toDataURL:function(){return n},toBase64:function(){return n.split(",")[1]},toAdjustedBlob:function(e,n){return t.then(function(t){return S.canvasToBlob(t,e,n)})},toAdjustedDataURL:r,toAdjustedBase64:function(t,e){return r(t,e).then(function(t){return t.split(",")[1]})},toCanvas:function(){return t.then(s.clone)}}}function _(t){return S.blobToDataUri(t).then(function(e){return O(S.blobToCanvas(t),t,e)})}var D={fromBlob:_,fromCanvas:function(t,e){return S.canvasToBlob(t,e).then(function(e){return O(d.resolve(t),e,t.toDataURL())})},fromImage:function(t){return S.imageToBlob(t).then(function(t){return _(t)})},fromBlobAndUrlSync:function(t,e){return O(S.blobToCanvas(t),t,e)}};function F(t,e,n){return(t=parseFloat(t))>n?t=n:t<e&&(t=e),t}var P=[0,.01,.02,.04,.05,.06,.07,.08,.1,.11,.12,.14,.15,.16,.17,.18,.2,.21,.22,.24,.25,.27,.28,.3,.32,.34,.36,.38,.4,.42,.44,.46,.48,.5,.53,.56,.59,.62,.65,.68,.71,.74,.77,.8,.83,.86,.89,.92,.95,.98,1,1.06,1.12,1.18,1.24,1.3,1.36,1.42,1.48,1.54,1.6,1.66,1.72,1.78,1.84,1.9,1.96,2,2.12,2.25,2.37,2.5,2.62,2.75,2.87,3,3.2,3.4,3.6,3.8,4,4.3,4.7,4.9,5,5.5,6,6.5,6.8,7,7.3,7.5,7.8,8,8.4,8.7,9,9.4,9.6,9.8,10];function W(t,e){var n,o,r,i,a=[],u=new Array(10);for(n=0;n<5;n++){for(o=0;o<5;o++)a[o]=e[o+5*n];for(o=0;o<5;o++){for(i=0,r=0;r<5;r++)i+=t[o+5*r]*a[r];u[o+5*n]=i}}return u}function q(t,e){return e=F(e,0,1),t.map(function(t,n){return n%6==0?t=1-(1-t)*e:t*=e,F(t,0,1)})}var V={identity:function(){return[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1]},adjust:q,multiply:W,adjustContrast:function(t,e){var n;return e=F(e,-1,1),W(t,[(n=(e*=100)<0?127+e/100*127:127*(n=0==(n=e%1)?P[e]:P[Math.floor(e)]*(1-n)+P[Math.floor(e)+1]*n)+127)/127,0,0,0,.5*(127-n),0,n/127,0,0,.5*(127-n),0,0,n/127,0,.5*(127-n),0,0,0,1,0,0,0,0,0,1])},adjustBrightness:function(t,e){return W(t,[1,0,0,0,e=F(255*e,-255,255),0,1,0,0,e,0,0,1,0,e,0,0,0,1,0,0,0,0,0,1])},adjustSaturation:function(t,e){var n,o,r;return W(t,[(o=.3086)*(1-(n=1+((e=F(e,-1,1))>0?3*e:e)))+n,(r=.6094)*(1-n),.082*(1-n),0,0,o*(1-n),r*(1-n)+n,.082*(1-n),0,0,o*(1-n),r*(1-n),.082*(1-n)+n,0,0,0,0,0,1,0,0,0,0,0,1])},adjustHue:function(t,e){var n,o,r,i,a;return e=F(e,-180,180)/180*Math.PI,n=Math.cos(e),o=Math.sin(e),W(t,[(r=.213)+.787*n+o*-r,(i=.715)+n*-i+o*-i,(a=.072)+n*-a+.928*o,0,0,r+n*-r+.143*o,i+n*(1-i)+.14*o,a+n*-a+-.283*o,0,0,r+n*-r+-.787*o,i+n*-i+o*i,a+.928*n+o*a,0,0,0,0,0,1,0,0,0,0,0,1])},adjustColors:function(t,e,n,o){return W(t,[e=F(e,0,2),0,0,0,0,0,n=F(n,0,2),0,0,0,0,0,o=F(o,0,2),0,0,0,0,0,1,0,0,0,0,0,1])},adjustSepia:function(t,e){return W(t,q([.393,.769,.189,0,0,.349,.686,.168,0,0,.272,.534,.131,0,0,0,0,0,1,0,0,0,0,0,1],e=F(e,0,1)))},adjustGrayscale:function(t,e){return W(t,q([.33,.34,.33,0,0,.33,.34,.33,0,0,.33,.34,.33,0,0,0,0,0,1,0,0,0,0,0,1],e=F(e,0,1)))}};function N(t,e){return t.toCanvas().then(function(n){return o=n,r=t.getType(),i=e,u=s.get2dContext(o),a=function(t,e){var n,o,r,i,a,u=t.data,c=e[0],l=e[1],s=e[2],f=e[3],d=e[4],h=e[5],p=e[6],m=e[7],g=e[8],v=e[9],y=e[10],b=e[11],w=e[12],x=e[13],R=e[14],I=e[15],T=e[16],k=e[17],C=e[18],B=e[19];for(a=0;a<u.length;a+=4)n=u[a],o=u[a+1],r=u[a+2],i=u[a+3],u[a]=n*c+o*l+r*s+i*f+d,u[a+1]=n*h+o*p+r*m+i*g+v,u[a+2]=n*y+o*b+r*w+i*x+R,u[a+3]=n*I+o*T+r*k+i*C+B;return t}(u.getImageData(0,0,o.width,o.height),i),u.putImageData(a,0,0),D.fromCanvas(o,r);var o,r,i,a,u})}function X(t,e){return t.toCanvas().then(function(n){return o=n,r=t.getType(),i=e,c=s.get2dContext(o),a=c.getImageData(0,0,o.width,o.height),u=c.getImageData(0,0,o.width,o.height),u=function(t,e,n){var o,r,i,a,u,c,l,s,f,d,h,p,m,g,v,y,b;function w(t,e,n){return t>n?t=n:t<e&&(t=e),t}for(i=Math.round(Math.sqrt(n.length)),a=Math.floor(i/2),o=t.data,r=e.data,y=t.width,b=t.height,c=0;c<b;c++)for(u=0;u<y;u++){for(l=s=f=0,h=0;h<i;h++)for(d=0;d<i;d++)p=w(u+d-a,0,y-1),m=w(c+h-a,0,b-1),g=4*(m*y+p),v=n[h*i+d],l+=o[g]*v,s+=o[g+1]*v,f+=o[g+2]*v;r[g=4*(c*y+u)]=w(l,0,255),r[g+1]=w(s,0,255),r[g+2]=w(f,0,255)}return e}(a,u,i),c.putImageData(u,0,0),D.fromCanvas(o,r);var o,r,i,a,u,c})}function $(t){return function(e,n){return e.toCanvas().then(function(o){return function(e,n,o){var r,i,a=s.get2dContext(e),u=new Array(256);for(i=0;i<u.length;i++)u[i]=t(i,o);return r=function(t,e){var n,o=t.data;for(n=0;n<o.length;n+=4)o[n]=e[o[n]],o[n+1]=e[o[n+1]],o[n+2]=e[o[n+2]];return t}(a.getImageData(0,0,e.width,e.height),u),a.putImageData(r,0,0),D.fromCanvas(e,n)}(o,e.getType(),n)})}}function G(t){return function(e,n){return N(e,t(V.identity(),n))}}function Y(t){return function(e){return X(e,t)}}var J,K={invert:(J=[-1,0,0,0,255,0,-1,0,0,255,0,0,-1,0,255,0,0,0,1,0],function(t){return N(t,J)}),brightness:G(V.adjustBrightness),hue:G(V.adjustHue),saturate:G(V.adjustSaturation),contrast:G(V.adjustContrast),grayscale:G(V.adjustGrayscale),sepia:G(V.adjustSepia),colorize:function(t,e,n,o){return N(t,V.adjustColors(V.identity(),e,n,o))},sharpen:Y([0,-1,0,-1,5,-1,0,-1,0]),emboss:Y([-2,-1,0,-1,1,1,0,1,2]),gamma:$(function(t,e){return 255*Math.pow(t/255,1-e)}),exposure:$(function(t,e){return 255*(1-Math.exp(-t/255*e))}),colorFilter:N,convoluteFilter:X},Z={scale:function te(t,e,n){var o=f.getWidth(t),r=f.getHeight(t),i=e/o,a=n/r,u=!1;(i<.5||i>2)&&(i=i<.5?.5:2,u=!0),(a<.5||a>2)&&(a=a<.5?.5:2,u=!0);var c,l,h,p=(c=t,l=i,h=a,new d(function(t){var e=f.getWidth(c),n=f.getHeight(c),o=Math.floor(e*l),r=Math.floor(n*h),i=s.create(o,r),a=s.get2dContext(i);a.drawImage(c,0,0,e,n,0,0,o,r),t(i)}));return u?p.then(function(t){return te(t,e,n)}):p}},Q={rotate:function(t,e){return t.toCanvas().then(function(n){return o=n,r=t.getType(),i=e,a=s.create(o.width,o.height),u=s.get2dContext(a),c=0,l=0,90!=(i=i<0?360+i:i)&&270!=i||s.resize(a,a.height,a.width),90!=i&&180!=i||(c=a.width),270!=i&&180!=i||(l=a.height),u.translate(c,l),u.rotate(i*Math.PI/180),u.drawImage(o,0,0),D.fromCanvas(a,r);var o,r,i,a,u,c,l})},flip:function(t,e){return t.toCanvas().then(function(n){return o=n,r=t.getType(),i=e,a=s.create(o.width,o.height),u=s.get2dContext(a),"v"==i?(u.scale(1,-1),u.drawImage(o,0,-a.height)):(u.scale(-1,1),u.drawImage(o,-a.width,0)),D.fromCanvas(a,r);var o,r,i,a,u})},crop:function(t,e,n,o,r){return t.toCanvas().then(function(i){return a=i,u=t.getType(),c=e,l=n,f=o,d=r,h=s.create(f,d),s.get2dContext(h).drawImage(a,-c,-l),D.fromCanvas(h,u);var a,u,c,l,f,d,h})},resize:function(t,e,n){return t.toCanvas().then(function(o){return Z.scale(o,e,n).then(function(e){return D.fromCanvas(e,t.getType())})})}},tt={invert:function(t){return K.invert(t)},sharpen:function(t){return K.sharpen(t)},emboss:function(t){return K.emboss(t)},brightness:function(t,e){return K.brightness(t,e)},hue:function(t,e){return K.hue(t,e)},saturate:function(t,e){return K.saturate(t,e)},contrast:function(t,e){return K.contrast(t,e)},grayscale:function(t,e){return K.grayscale(t,e)},sepia:function(t,e){return K.sepia(t,e)},colorize:function(t,e,n,o){return K.colorize(t,e,n,o)},gamma:function(t,e){return K.gamma(t,e)},exposure:function(t,e){return K.exposure(t,e)},flip:function(t,e){return Q.flip(t,e)},crop:function(t,e,n,o,r){return Q.crop(t,e,n,o,r)},resize:function(t,e,n){return Q.resize(t,e,n)},rotate:function(t,e){return Q.rotate(t,e)}},et=function(t){return t.toBlob()},nt={blobToImageResult:function(t){return D.fromBlob(t)},fromBlobAndUrlSync:function(t,e){return D.fromBlobAndUrlSync(t,e)},imageToImageResult:function(t){return D.fromImage(t)},imageResultToBlob:function(t,e,n){return e===undefined&&n===undefined?et(t):t.toAdjustedBlob(e,n)},imageResultToOriginalBlob:et,imageResultToDataURL:function(t){return t.toDataURL()}},ot=function(){return T("URL")},rt={createObjectURL:function(t){return ot().createObjectURL(t)},revokeObjectURL:function(t){ot().revokeObjectURL(t)}},it=tinymce.util.Tools.resolve("tinymce.util.Delay"),at=tinymce.util.Tools.resolve("tinymce.util.Promise"),ut=tinymce.util.Tools.resolve("tinymce.util.URI"),ct=function(t){return t.getParam("imagetools_toolbar","rotateleft rotateright | flipv fliph | crop editimage imageoptions")},lt=function(t){return t.getParam("imagetools_proxy")},st={getImageSize:function(t){var e,n;function o(t){return/^[0-9\.]+px$/.test(t)}return e=t.style.width,n=t.style.height,e||n?o(e)&&o(n)?{w:parseInt(e,10),h:parseInt(n,10)}:null:(e=t.width,n=t.height,e&&n?{w:parseInt(e,10),h:parseInt(n,10)}:null)},setImageSize:function(t,e){var n,o;e&&(n=t.style.width,o=t.style.height,(n||o)&&(t.style.width=e.w+"px",t.style.height=e.h+"px",t.removeAttribute("data-mce-style")),n=t.width,o=t.height,(n||o)&&(t.setAttribute("width",e.w),t.setAttribute("height",e.h)))},getNaturalImageSize:function(t){return{w:t.naturalWidth,h:t.naturalHeight}}},ft=(Array.prototype.indexOf,undefined,Array.prototype.push,Array.prototype.slice,function(t,e){for(var n=0,o=t.length;n<o;n++){var r=t[n];if(e(r,n,t))return w.some(r)}return w.none()}),dt=function(t){return null!==t&&t!==undefined},ht={traverse:function(t,e){var n;return n=e.reduce(function(t,e){return dt(t)?t[e]:undefined},t),dt(n)?n:null},readBlob:function(t){return new at(function(e){var n=new C;n.onload=function(t){var n=t.target;e(n.result)},n.readAsText(t)})},requestUrlAsBlob:function(t,e){return new at(function(o){var r;(r=new function(){return new(T("XMLHttpRequest"))}).onreadystatechange=function(){4===r.readyState&&o({status:r.status,blob:this.response})},r.open("GET",t,!0),n.each(e,function(t,e){r.setRequestHeader(e,t)}),r.responseType="blob",r.send()})},parseJson:function(t){var e;try{e=JSON.parse(t)}catch(n){}return e}},pt=[{code:404,message:"Could not find Image Proxy"},{code:403,message:"Rejected request"},{code:0,message:"Incorrect Image Proxy URL"}],mt=[{type:"key_missing",message:"The request did not include an api key."},{type:"key_not_found",message:"The provided api key could not be found."},{type:"domain_not_trusted",message:"The api key is not valid for the request origins."}],gt=function(t){return"ImageProxy HTTP error: "+ft(pt,function(e){return t===e.code}).fold(p.constant("Unknown ImageProxy error"),function(t){return t.message})},vt=function(t){var e=gt(t);return at.reject(e)},yt=function(t){return ft(mt,function(e){return e.type===t}).fold(p.constant("Unknown service error"),function(t){return t.message})},bt=function(t,e){return ht.readBlob(e).then(function(t){var e,n,o,r=(e=t,n=ht.parseJson(e),"ImageProxy Service error: "+((o=ht.traverse(n,["error","type"]))?yt(o):"Invalid JSON in service error message"));return at.reject(r)})},wt={handleServiceErrorResponse:function(t,e){return 400===(n=t)||403===n||500===n?bt(0,e):vt(t);var n},handleHttpError:vt,getHttpErrorMsg:gt,getServiceErrorMsg:yt},xt=function(t,e){return ht.requestUrlAsBlob((n=t,o=e,r=-1===n.indexOf("?")?"?":"&",/[?&]apiKey=/.test(n)||!o?n:n+r+"apiKey="+encodeURIComponent(o)),{"Content-Type":"application/json;charset=UTF-8","tiny-api-key":e}).then(function(t){return t.status<200||t.status>=300?wt.handleServiceErrorResponse(t.status,t.blob):at.resolve(t.blob)});var n,o,r},Rt=function(t,e){return e?xt(t,e):(n=t,ht.requestUrlAsBlob(n,{}).then(function(t){return t.status<200||t.status>=300?wt.handleHttpError(t.status):at.resolve(t.blob)}));var n},It=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),Tt=tinymce.util.Tools.resolve("tinymce.ui.Factory"),kt=function(){var t=[],e=-1;function n(){return e>0}function o(){return-1!==e&&e<t.length-1}return{data:t,add:function(n){var o;return o=t.splice(++e),t.push(n),{state:n,removed:o}},undo:function(){if(n())return t[--e]},redo:function(){if(o())return t[++e]},canUndo:n,canRedo:o}},Ct=tinymce.util.Tools.resolve("tinymce.geom.Rect"),Bt=function(t){return new at(function(e){var n=function(){t.removeEventListener("load",n),e(t)};t.complete?e(t):t.addEventListener("load",n)})},Ut=tinymce.util.Tools.resolve("tinymce.dom.DomQuery"),Mt=tinymce.util.Tools.resolve("tinymce.util.Observable"),jt=tinymce.util.Tools.resolve("tinymce.util.VK"),At=0,zt=function(t,e,o,r,i){var a,u,c,l,s="mce-",f=s+"crid-"+At++;function d(t,e){return{x:e.x-t.x,y:e.y-t.y,w:e.w,h:e.h}}function h(e,n,r,i){var u,c,l,s,f;u=n.x,c=n.y,l=n.w,s=n.h,u+=r*e.deltaX,c+=i*e.deltaY,l+=r*e.deltaW,s+=i*e.deltaH,l<20&&(l=20),s<20&&(s=20),f=t=Ct.clamp({x:u,y:c,w:l,h:s},o,"move"===e.name),f=d(o,f),a.fire("updateRect",{rect:f}),g(f)}function p(t){function o(t,e){e.h<0&&(e.h=0),e.w<0&&(e.w=0),Ut("#"+f+"-"+t,r).css({left:e.x,top:e.y,width:e.w,height:e.h})}n.each(u,function(e){Ut("#"+f+"-"+e.name,r).css({left:t.w*e.xMul+t.x,top:t.h*e.yMul+t.y})}),o("top",{x:e.x,y:e.y,w:e.w,h:t.y-e.y}),o("right",{x:t.x+t.w,y:t.y,w:e.w-t.x-t.w+e.x,h:t.h}),o("bottom",{x:e.x,y:t.y+t.h,w:e.w,h:e.h-t.y-t.h+e.y}),o("left",{x:e.x,y:t.y,w:t.x-e.x,h:t.h}),o("move",t)}function m(e){p(t=e)}function g(t){var e,n;m((e=o,{x:(n=t).x+e.x,y:n.y+e.y,w:n.w,h:n.h}))}return u=[{name:"move",xMul:0,yMul:0,deltaX:1,deltaY:1,deltaW:0,deltaH:0,label:"Crop Mask"},{name:"nw",xMul:0,yMul:0,deltaX:1,deltaY:1,deltaW:-1,deltaH:-1,label:"Top Left Crop Handle"},{name:"ne",xMul:1,yMul:0,deltaX:0,deltaY:1,deltaW:1,deltaH:-1,label:"Top Right Crop Handle"},{name:"sw",xMul:0,yMul:1,deltaX:1,deltaY:0,deltaW:-1,deltaH:1,label:"Bottom Left Crop Handle"},{name:"se",xMul:1,yMul:1,deltaX:0,deltaY:0,deltaW:1,deltaH:1,label:"Bottom Right Crop Handle"}],l=["top","right","bottom","left"],Ut('<div id="'+f+'" class="'+s+'croprect-container" role="grid" aria-dropeffect="execute">').appendTo(r),n.each(l,function(t){Ut("#"+f,r).append('<div id="'+f+"-"+t+'"class="'+s+'croprect-block" style="display: none" data-mce-bogus="all">')}),n.each(u,function(t){Ut("#"+f,r).append('<div id="'+f+"-"+t.name+'" class="'+s+"croprect-handle "+s+"croprect-handle-"+t.name+'"style="display: none" data-mce-bogus="all" role="gridcell" tabindex="-1" aria-label="'+t.label+'" aria-grabbed="false">')}),c=n.map(u,function(e){var n;return new(Tt.get("DragHelper"))(f,{document:r.ownerDocument,handle:f+"-"+e.name,start:function(){n=t},drag:function(t){h(e,n,t.deltaX,t.deltaY)}})}),p(t),Ut(r).on("focusin focusout",function(t){Ut(t.target).attr("aria-grabbed","focus"===t.type)}),Ut(r).on("keydown",function(e){var o;function r(t,e,n,r,i){t.stopPropagation(),t.preventDefault(),h(o,n,r,i)}switch(n.each(u,function(t){if(e.target.id===f+"-"+t.name)return o=t,!1}),e.keyCode){case jt.LEFT:r(e,0,t,-10,0);break;case jt.RIGHT:r(e,0,t,10,0);break;case jt.UP:r(e,0,t,0,-10);break;case jt.DOWN:r(e,0,t,0,10);break;case jt.ENTER:case jt.SPACEBAR:e.preventDefault(),i()}}),a=n.extend({toggleVisibility:function(t){var e;e=n.map(u,function(t){return"#"+f+"-"+t.name}).concat(n.map(l,function(t){return"#"+f+"-"+t})).join(","),t?Ut(e,r).show():Ut(e,r).hide()},setClampRect:function(e){o=e,p(t)},setRect:m,getInnerRect:function(){return d(o,t)},setInnerRect:g,setViewPortRect:function(n){e=n,p(t)},destroy:function(){n.each(c,function(t){t.destroy()}),c=[]}},Mt)},Et={create:function(t){return new(Tt.get("Control").extend({Defaults:{classes:"imagepanel"},selection:function(t){return arguments.length?(this.state.set("rect",t),this):this.state.get("rect")},imageSize:function(){var t=this.state.get("viewRect");return{w:t.w,h:t.h}},toggleCropRect:function(t){this.state.set("cropEnabled",t)},imageSrc:function(t){var e=this,n=new Image;n.src=t,Bt(n).then(function(){var t,o,r=e.state.get("viewRect");if((o=e.$el.find("img"))[0])o.replaceWith(n);else{var i=document.createElement("div");i.className="mce-imagepanel-bg",e.getEl().appendChild(i),e.getEl().appendChild(n)}t={x:0,y:0,w:n.naturalWidth,h:n.naturalHeight},e.state.set("viewRect",t),e.state.set("rect",Ct.inflate(t,-20,-20)),r&&r.w===t.w&&r.h===t.h||e.zoomFit(),e.repaintImage(),e.fire("load")})},zoom:function(t){return arguments.length?(this.state.set("zoom",t),this):this.state.get("zoom")},postRender:function(){return this.imageSrc(this.settings.imageSrc),this._super()},zoomFit:function(){var t,e,n,o,r,i;t=this.$el.find("img"),e=this.getEl().clientWidth,n=this.getEl().clientHeight,o=t[0].naturalWidth,r=t[0].naturalHeight,(i=Math.min((e-10)/o,(n-10)/r))>=1&&(i=1),this.zoom(i)},repaintImage:function(){var t,e,n,o,r,i,a,u,c,l,s;s=this.getEl(),c=this.zoom(),l=this.state.get("rect"),a=this.$el.find("img"),u=this.$el.find(".mce-imagepanel-bg"),r=s.offsetWidth,i=s.offsetHeight,n=a[0].naturalWidth*c,o=a[0].naturalHeight*c,t=Math.max(0,r/2-n/2),e=Math.max(0,i/2-o/2),a.css({left:t,top:e,width:n,height:o}),u.css({left:t,top:e,width:n,height:o}),this.cropRect&&(this.cropRect.setRect({x:l.x*c+t,y:l.y*c+e,w:l.w*c,h:l.h*c}),this.cropRect.setClampRect({x:t,y:e,w:n,h:o}),this.cropRect.setViewPortRect({x:0,y:0,w:r,h:i}))},bindStates:function(){var t=this;t.state.on("change:cropEnabled",function(e){t.cropRect.toggleVisibility(e.value),t.repaintImage()}),t.state.on("change:zoom",function(){t.repaintImage()}),t.state.on("change:rect",function(e){var n,o=e.value;t.cropRect||(n=o,t.cropRect=zt(n,t.state.get("viewRect"),t.state.get("viewRect"),t.getEl(),function(){t.fire("crop")}),t.cropRect.on("updateRect",function(e){var n=e.rect,o=t.zoom();n={x:Math.round(n.x/o),y:Math.round(n.y/o),w:Math.round(n.w/o),h:Math.round(n.h/o)},t.state.set("rect",n)}),t.on("remove",t.cropRect.destroy)),t.cropRect.setRect(o)})}}))(t)}};function St(t){return{blob:t,url:rt.createObjectURL(t)}}function Lt(t){t&&rt.revokeObjectURL(t.url)}function Ht(t){n.each(t,Lt)}function Ot(t,e,o,r){var i,a,u,c,l,s,f,d,h,p,m,g,v,y,b,w,x,R,I,T,k,C,B,U,M,j,A,z=kt();function E(t){var e,n,o,r;e=i.find("#w")[0],n=i.find("#h")[0],o=parseInt(e.value(),10),r=parseInt(n.value(),10),i.find("#constrain")[0].checked()&&U&&M&&o&&r&&("w"===t.control.settings.name?(r=Math.round(o*j),n.value(r)):(o=Math.round(r*A),e.value(o))),U=o,M=r}function S(t){return Math.round(100*t)+"%"}function L(){i.find("#undo").disabled(!z.canUndo()),i.find("#redo").disabled(!z.canRedo()),i.statusbar.find("#save").disabled(!z.canUndo())}function H(){i.find("#undo").disabled(!0),i.find("#redo").disabled(!0)}function O(t){t&&d.imageSrc(t.url)}function _(t){return function(){var e=n.grep(B,function(e){return e.settings.name!==t});n.each(e,function(t){t.hide()}),t.show(),t.focus()}}function D(t){O(c=St(t))}function F(t){O(e=St(t)),Ht(z.add(e).removed),L()}function P(){var t=d.selection();nt.blobToImageResult(e.blob).then(function(e){tt.crop(e,t.x,t.y,t.w,t.h).then(X).then(function(t){F(t),q()})})}var W=function(t){var n=[].slice.call(arguments,1);return function(){var o=c||e;nt.blobToImageResult(o.blob).then(function(e){t.apply(this,[e].concat(n)).then(X).then(D)})}};function q(){O(e),Lt(c),_(a)(),L()}function V(){c?(F(c.blob),q()):function e(n,o){c?o():setTimeout(function(){n-- >0?e(n,o):t.windowManager.alert("Error: failed to apply image operation.")},10)}(100,V)}function N(t){return Tt.create("Form",{layout:"flex",direction:"row",labelGap:5,border:"0 0 1 0",align:"center",pack:"center",padding:"0 10 0 10",spacing:5,flex:0,minHeight:60,defaults:{classes:"imagetool",type:"button"},items:t})}var X=function(t){return t.toBlob()};function $(t,n){return N([{text:"Back",onclick:q},{type:"spacer",flex:1},{text:"Apply",subtype:"primary",onclick:V}]).hide().on("show",function(){H(),nt.blobToImageResult(e.blob).then(function(t){return n(t)}).then(X).then(function(t){var e=St(t);O(e),Lt(c),c=e})})}function G(t,n,o,r,i){return N([{text:"Back",onclick:q},{type:"spacer",flex:1},{type:"slider",flex:1,ondragend:function(t){var o;o=t.value,nt.blobToImageResult(e.blob).then(function(t){return n(t,o)}).then(X).then(function(t){var e=St(t);O(e),Lt(c),c=e})},minValue:r,maxValue:i,value:o,previewFilter:S},{type:"spacer",flex:1},{text:"Apply",subtype:"primary",onclick:V}]).hide().on("show",function(){this.find("slider").value(o),H()})}l=N([{text:"Back",onclick:q},{type:"spacer",flex:1},{text:"Apply",subtype:"primary",onclick:P}]).hide().on("show hide",function(t){d.toggleCropRect("show"===t.type)}).on("show",H),s=N([{text:"Back",onclick:q},{type:"spacer",flex:1},{type:"textbox",name:"w",label:"Width",size:4,onkeyup:E},{type:"textbox",name:"h",label:"Height",size:4,onkeyup:E},{type:"checkbox",name:"constrain",text:"Constrain proportions",checked:!0,onchange:function(t){!0===t.control.value()&&(j=M/U,A=U/M)}},{type:"spacer",flex:1},{text:"Apply",subtype:"primary",onclick:"submit"}]).hide().on("submit",function(t){var n=parseInt(i.find("#w").value(),10),o=parseInt(i.find("#h").value(),10);t.preventDefault(),function(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];var r=[].slice.call(arguments,1);return function(){nt.blobToImageResult(e.blob).then(function(e){t.apply(this,[e].concat(r)).then(X).then(F)})}}(tt.resize,n,o)(),q()}).on("show",H),f=N([{text:"Back",onclick:q},{type:"spacer",flex:1},{icon:"fliph",tooltip:"Flip horizontally",onclick:W(tt.flip,"h")},{icon:"flipv",tooltip:"Flip vertically",onclick:W(tt.flip,"v")},{icon:"rotateleft",tooltip:"Rotate counterclockwise",onclick:W(tt.rotate,-90)},{icon:"rotateright",tooltip:"Rotate clockwise",onclick:W(tt.rotate,90)},{type:"spacer",flex:1},{text:"Apply",subtype:"primary",onclick:V}]).hide().on("show",H),m=$(0,tt.invert),I=$(0,tt.sharpen),T=$(0,tt.emboss),g=G(0,tt.brightness,0,-1,1),v=G(0,tt.hue,180,0,360),y=G(0,tt.saturate,0,-1,1),b=G(0,tt.contrast,0,-1,1),w=G(0,tt.grayscale,0,0,1),x=G(0,tt.sepia,0,0,1),R=function(t,n){function o(){var t,o,r;t=i.find("#r")[0].value(),o=i.find("#g")[0].value(),r=i.find("#b")[0].value(),nt.blobToImageResult(e.blob).then(function(e){return n(e,t,o,r)}).then(X).then(function(t){var e=St(t);O(e),Lt(c),c=e})}return N([{text:"Back",onclick:q},{type:"spacer",flex:1},{type:"slider",label:"R",name:"r",minValue:0,value:1,maxValue:2,ondragend:o,previewFilter:S},{type:"slider",label:"G",name:"g",minValue:0,value:1,maxValue:2,ondragend:o,previewFilter:S},{type:"slider",label:"B",name:"b",minValue:0,value:1,maxValue:2,ondragend:o,previewFilter:S},{type:"spacer",flex:1},{text:"Apply",subtype:"primary",onclick:V}]).hide().on("show",function(){i.find("#r,#g,#b").value(1),H()})}(0,tt.colorize),k=G(0,tt.gamma,0,-1,1),C=G(0,tt.exposure,1,0,2),u=N([{text:"Back",onclick:q},{type:"spacer",flex:1},{text:"hue",icon:"hue",onclick:_(v)},{text:"saturate",icon:"saturate",onclick:_(y)},{text:"sepia",icon:"sepia",onclick:_(x)},{text:"emboss",icon:"emboss",onclick:_(T)},{text:"exposure",icon:"exposure",onclick:_(C)},{type:"spacer",flex:1}]).hide(),a=N([{tooltip:"Crop",icon:"crop",onclick:_(l)},{tooltip:"Resize",icon:"resize2",onclick:_(s)},{tooltip:"Orientation",icon:"orientation",onclick:_(f)},{tooltip:"Brightness",icon:"sun",onclick:_(g)},{tooltip:"Sharpen",icon:"sharpen",onclick:_(I)},{tooltip:"Contrast",icon:"contrast",onclick:_(b)},{tooltip:"Color levels",icon:"drop",onclick:_(R)},{tooltip:"Gamma",icon:"gamma",onclick:_(k)},{tooltip:"Invert",icon:"invert",onclick:_(m)}]),d=Et.create({flex:1,imageSrc:e.url}),h=Tt.create("Container",{layout:"flex",direction:"column",border:"0 1 0 0",padding:5,spacing:5,items:[{type:"button",icon:"undo",tooltip:"Undo",name:"undo",onclick:function(){O(e=z.undo()),L()}},{type:"button",icon:"redo",tooltip:"Redo",name:"redo",onclick:function(){O(e=z.redo()),L()}},{type:"button",icon:"zoomin",tooltip:"Zoom in",onclick:function(){var t=d.zoom();t<2&&(t+=.1),d.zoom(t)}},{type:"button",icon:"zoomout",tooltip:"Zoom out",onclick:function(){var t=d.zoom();t>.1&&(t-=.1),d.zoom(t)}}]}),p=Tt.create("Container",{type:"container",layout:"flex",direction:"row",align:"stretch",flex:1,items:[h,d]}),B=[a,l,s,f,u,m,g,v,y,b,w,x,R,I,T,k,C],(i=t.windowManager.open({layout:"flex",direction:"column",align:"stretch",minWidth:Math.min(It.DOM.getViewPort().w,800),minHeight:Math.min(It.DOM.getViewPort().h,650),title:"Edit image",items:B.concat([p]),buttons:[{text:"Save",name:"save",subtype:"primary",onclick:function(){o(e.blob),i.close()}},{text:"Cancel",onclick:"close"}]})).on("close",function(){r(),Ht(z.data),z=null,c=null}),z.add(e),L(),d.on("load",function(){U=d.imageSize().w,M=d.imageSize().h,j=M/U,A=U/M,i.find("#w").value(U),i.find("#h").value(M)}),d.on("crop",P)}var _t={edit:function(t,e){return new at(function(n,o){return e.toBlob().then(function(e){Ot(t,St(e),n,o)})})}},Dt=0,Ft=function(t,e){t.notificationManager.open({text:e,type:"error"})},Pt=function(t){return t.selection.getNode()},Wt=function(t,e){var n=e.src;return 0===n.indexOf("data:")||0===n.indexOf("blob:")||new ut(n).host===t.documentBaseURI.host},qt=function(t,e){return-1!==n.inArray(t.settings.imagetools_cors_hosts,new ut(e.src).host)},Vt=function(t){var e,n,o,r,i,a;return(e=t.editorUpload.blobCache.getByUri(Pt(t).src))?at.resolve(e.blob()):(n=t,o=Pt(t),a=o.src,qt(n,o)?Rt(o.src,null):Wt(n,o)?H(o):(a=lt(n),a+=(-1===a.indexOf("?")?"?":"&")+"url="+encodeURIComponent(o.src),r=(i=n).settings.api_key||i.settings.imagetools_api_key,Rt(a,r)))},Nt=function(t,e){var n=it.setEditorTimeout(t,function(){t.editorUpload.uploadImagesAuto()},t.settings.images_upload_timeout||3e4);e.set(n)},Xt=function(t){clearTimeout(t.get())},$t=function(t,e,n,o){return e.toBlob().then(function(r){var i,a,u,c,l,s,f;return u=t.editorUpload.blobCache,i=(l=Pt(t)).src,t.settings.images_reuse_filename&&((c=u.getByUri(i))?(i=c.uri(),a=c.name()):(s=t,a=(f=i.match(/\/([^\/\?]+)?\.(?:jpeg|jpg|png|gif)(?:\?|$)/i))?s.dom.encode(f[1]):null)),c=u.create({id:"imagetools"+Dt++,blob:r,base64:e.toBase64(),uri:i,name:a}),u.add(c),t.undoManager.transact(function(){t.$(l).on("load",function e(){t.$(l).off("load",e),t.nodeChanged(),n?t.editorUpload.uploadImagesAuto():(Xt(o),Nt(t,o))}),t.$(l).attr({src:c.blobUri()}).removeAttr("data-mce-src")}),c})},Gt=function(t,e,n){return function(){return t._scanForImages().then(p.curry(Vt,t)).then(nt.blobToImageResult).then(n).then(function(n){return $t(t,n,!1,e)},function(e){Ft(t,e)})}},Yt={rotate:function(t,e,n){return function(){return Gt(t,e,function(e){var o=st.getImageSize(Pt(t));return o&&st.setImageSize(Pt(t),{w:o.h,h:o.w}),tt.rotate(e,n)})()}},flip:function(t,e,n){return function(){return Gt(t,e,function(t){return tt.flip(t,n)})()}},editImageDialog:function(t,e){return function(){var n=Pt(t),o=st.getNaturalImageSize(n),r=function(t){return new at(function(e){L(t).then(function(r){var i=st.getNaturalImageSize(r);o.w===i.w&&o.h===i.h||st.getImageSize(n)&&st.setImageSize(n,i),rt.revokeObjectURL(r.src),e(t)})})};Vt(t).then(nt.blobToImageResult).then(p.curry(function(t,n){return _t.edit(t,n).then(r).then(nt.blobToImageResult).then(function(n){return $t(t,n,!0,e)},function(){})},t),function(e){Ft(t,e)})}},isEditableImage:function(t,e){return t.dom.is(e,"img:not([data-mce-object],[data-mce-placeholder])")&&(Wt(t,e)||qt(t,e)||t.settings.imagetools_proxy)},cancelTimedUpload:Xt},Jt=function(t,e){n.each({mceImageRotateLeft:Yt.rotate(t,e,-90),mceImageRotateRight:Yt.rotate(t,e,90),mceImageFlipVertical:Yt.flip(t,e,"v"),mceImageFlipHorizontal:Yt.flip(t,e,"h"),mceEditImage:Yt.editImageDialog(t,e)},function(e,n){t.addCommand(n,e)})},Kt=function(t,e,n){t.on("NodeChange",function(o){var r=n.get();r&&r.src!==o.element.src&&(Yt.cancelTimedUpload(e),t.editorUpload.uploadImagesAuto(),n.set(null)),Yt.isEditableImage(t,o.element)&&n.set(o.element)})},Zt=function(t){t.addButton("rotateleft",{title:"Rotate counterclockwise",cmd:"mceImageRotateLeft"}),t.addButton("rotateright",{title:"Rotate clockwise",cmd:"mceImageRotateRight"}),t.addButton("flipv",{title:"Flip vertically",cmd:"mceImageFlipVertical"}),t.addButton("fliph",{title:"Flip horizontally",cmd:"mceImageFlipHorizontal"}),t.addButton("editimage",{title:"Edit image",cmd:"mceEditImage"}),t.addButton("imageoptions",{title:"Image options",icon:"options",cmd:"mceImage"})},Qt=function(t){t.addContextToolbar(p.curry(Yt.isEditableImage,t),ct(t))};e.add("imagetools",function(e){var n=t(0),o=t(null);Jt(e,n),Zt(e),Qt(e),Kt(e,n,o)})}();!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.util.Tools"),n={hasDimensions:function(e){return!1!==e.settings.image_dimensions},hasAdvTab:function(e){return!0===e.settings.image_advtab},getPrependUrl:function(e){return e.getParam("image_prepend_url","")},getClassList:function(e){return e.getParam("image_class_list")},hasDescription:function(e){return!1!==e.settings.image_description},hasImageTitle:function(e){return!0===e.settings.image_title},hasImageCaption:function(e){return!0===e.settings.image_caption},getImageList:function(e){return e.getParam("image_list",!1)},hasUploadUrl:function(e){return e.getParam("images_upload_url",!1)},hasUploadHandler:function(e){return e.getParam("images_upload_handler",!1)},getUploadUrl:function(e){return e.getParam("images_upload_url")},getUploadHandler:function(e){return e.getParam("images_upload_handler")},getUploadBasePath:function(e){return e.getParam("images_upload_base_path")},getUploadCredentials:function(e){return e.getParam("images_upload_credentials")}},a="undefined"!=typeof window?window:Function("return this;")(),i=function(e,t){for(var n=t!==undefined&&null!==t?t:a,i=0;i<e.length&&n!==undefined&&null!==n;++i)n=n[e[i]];return n},r=function(e,t){var n=e.split(".");return i(n,t)},o=function(e,t){var n=r(e,t);if(n===undefined||null===n)throw e+" not available on this browser";return n},l=function(){return new(o("FileReader"))},s=tinymce.util.Tools.resolve("tinymce.util.Promise"),c=tinymce.util.Tools.resolve("tinymce.util.XHR"),u=function(e,t){return Math.max(parseInt(e,10),parseInt(t,10))},g={getImageSize:function(e,t){var n=document.createElement("img");function a(e,a){n.parentNode&&n.parentNode.removeChild(n),t({width:e,height:a})}n.onload=function(){a(u(n.width,n.clientWidth),u(n.height,n.clientHeight))},n.onerror=function(){a(0,0)};var i=n.style;i.visibility="hidden",i.position="fixed",i.bottom=i.left="0px",i.width=i.height="auto",document.body.appendChild(n),n.src=e},buildListItems:function(e,n,a){return function i(e,a){return a=a||[],t.each(e,function(e){var t={text:e.text||e.title};e.menu?t.menu=i(e.menu):(t.value=e.value,n(t)),a.push(t)}),a}(e,a||[])},removePixelSuffix:function(e){return e&&(e=e.replace(/px$/,"")),e},addPixelSuffix:function(e){return e.length>0&&/^[0-9]+$/.test(e)&&(e+="px"),e},mergeMargins:function(e){if(e.margin){var t=e.margin.split(" ");switch(t.length){case 1:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[0],e["margin-bottom"]=e["margin-bottom"]||t[0],e["margin-left"]=e["margin-left"]||t[0];break;case 2:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[0],e["margin-left"]=e["margin-left"]||t[1];break;case 3:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[2],e["margin-left"]=e["margin-left"]||t[1];break;case 4:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[2],e["margin-left"]=e["margin-left"]||t[3]}delete e.margin}return e},createImageList:function(e,t){var a=n.getImageList(e);"string"==typeof a?c.send({url:a,success:function(e){t(JSON.parse(e))}}):"function"==typeof a?a(t):t(a)},waitLoadImage:function(e,t,a){function i(){a.onload=a.onerror=null,e.selection&&(e.selection.select(a),e.nodeChanged())}a.onload=function(){t.width||t.height||!n.hasDimensions(e)||e.dom.setAttribs(a,{width:a.clientWidth,height:a.clientHeight}),i()},a.onerror=i},blobToDataUri:function(e){return new s(function(t,n){var a=new l;a.onload=function(){t(a.result)},a.onerror=function(){n(l.error.message)},a.readAsDataURL(e)})}},d={makeTab:function(e,t){return{title:"Advanced",type:"form",pack:"start",items:[{label:"Style",name:"style",type:"textbox",onchange:(a=e,function(e){var t=a.dom,i=e.control.rootControl;if(n.hasAdvTab(a)){var r=i.toJSON(),o=t.parseStyle(r.style);i.find("#vspace").value(""),i.find("#hspace").value(""),((o=g.mergeMargins(o))["margin-top"]&&o["margin-bottom"]||o["margin-right"]&&o["margin-left"])&&(o["margin-top"]===o["margin-bottom"]?i.find("#vspace").value(g.removePixelSuffix(o["margin-top"])):i.find("#vspace").value(""),o["margin-right"]===o["margin-left"]?i.find("#hspace").value(g.removePixelSuffix(o["margin-right"])):i.find("#hspace").value("")),o["border-width"]&&i.find("#border").value(g.removePixelSuffix(o["border-width"])),i.find("#style").value(t.serializeStyle(t.parseStyle(t.serializeStyle(o))))}})},{type:"form",layout:"grid",packV:"start",columns:2,padding:0,alignH:["left","right"],defaults:{type:"textbox",maxWidth:50,onchange:function(n){t(e,n.control.rootControl)}},items:[{label:"Vertical space",name:"vspace"},{label:"Horizontal space",name:"hspace"},{label:"Border",name:"border"}]}]};var a}},m=function(e,t){e.state.set("oldVal",e.value()),t.state.set("oldVal",t.value())},f=function(e,t){var n=e.find("#width")[0],a=e.find("#height")[0],i=e.find("#constrain")[0];n&&a&&i&&t(n,a,i.checked())},p=function(e,t,n){var a=e.state.get("oldVal"),i=t.state.get("oldVal"),r=e.value(),o=t.value();n&&a&&i&&r&&o&&(r!==a?(o=Math.round(r/a*o),isNaN(o)||t.value(o)):(r=Math.round(o/i*r),isNaN(r)||e.value(r))),m(e,t)},h=function(e){f(e,p)},b={createUi:function(){var e=function(e){h(e.control.rootControl)};return{type:"container",label:"Dimensions",layout:"flex",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:5,onchange:e,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:5,onchange:e,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}},syncSize:function(e){f(e,m)},updateSize:h},v=function(e){e.meta=e.control.rootControl.toJSON()},y=function(e,a){var i=[{name:"src",type:"filepicker",filetype:"image",label:"Source",autofocus:!0,onchange:function(a){var i,r,o,l,s,c,u,d,m;r=e,c=(i=a).meta||{},u=i.control,d=u.rootControl,(m=d.find("#image-list")[0])&&m.value(r.convertURL(u.value(),"src")),t.each(c,function(e,t){d.find("#"+t).value(e)}),c.width||c.height||(o=r.convertURL(u.value(),"src"),l=n.getPrependUrl(r),s=new RegExp("^(?:[a-z]+:)?//","i"),l&&!s.test(o)&&o.substring(0,l.length)!==l&&(o=l+o),u.value(o),g.getImageSize(r.documentBaseURI.toAbsolute(u.value()),function(e){e.width&&e.height&&n.hasDimensions(r)&&(d.find("#width").value(e.width),d.find("#height").value(e.height),b.updateSize(d))}))},onbeforecall:v},a];return n.hasDescription(e)&&i.push({name:"alt",type:"textbox",label:"Image description"}),n.hasImageTitle(e)&&i.push({name:"title",type:"textbox",label:"Image Title"}),n.hasDimensions(e)&&i.push(b.createUi()),n.getClassList(e)&&i.push({name:"class",type:"listbox",label:"Class",values:g.buildListItems(n.getClassList(e),function(t){t.value&&(t.textStyle=function(){return e.formatter.getCssText({inline:"img",classes:[t.value]})})})}),n.hasImageCaption(e)&&i.push({name:"caption",type:"checkbox",label:"Caption"}),i},x={makeTab:function(e,t){return{title:"General",type:"form",items:y(e,t)}},getGeneralItems:y},w=function(){return o("URL")},S=function(e){return w().createObjectURL(e)},U=function(e){w().revokeObjectURL(e)},T=tinymce.util.Tools.resolve("tinymce.ui.Factory"),C=function(){},I=function(e){var n=function(t,n,a,i){var r,l;(r=new function(){return new(o("XMLHttpRequest"))}).open("POST",e.url),r.withCredentials=e.credentials,r.upload.onprogress=function(e){i(e.loaded/e.total*100)},r.onerror=function(){a("Image upload failed due to a XHR Transport error. Code: "+r.status)},r.onload=function(){var t,i,o;r.status<200||r.status>=300?a("HTTP Error: "+r.status):(t=JSON.parse(r.responseText))&&"string"==typeof t.location?n((i=e.basePath,o=t.location,i?i.replace(/\/$/,"")+"/"+o.replace(/^\//,""):o)):a("Invalid JSON: "+r.responseText)},(l=new FormData).append("file",t.blob(),t.filename()),r.send(l)};return e=t.extend({credentials:!1,handler:n},e),{upload:function(t){return e.url||e.handler!==n?(a=t,i=e.handler,new s(function(e,t){try{i(a,e,t,C)}catch(n){t(n.message)}})):s.reject("Upload url missing from the settings.");var a,i}}},P=function(e){return function(t){var a=T.get("Throbber"),i=t.control.rootControl,r=new a(i.getEl()),o=t.control.value(),l=S(o),s=I({url:n.getUploadUrl(e),basePath:n.getUploadBasePath(e),credentials:n.getUploadCredentials(e),handler:n.getUploadHandler(e)}),c=function(){r.hide(),U(l)};return r.show(),g.blobToDataUri(o).then(function(t){var n=e.editorUpload.blobCache.create({blob:o,blobUri:l,name:o.name?o.name.replace(/\.[^\.]+$/,""):null,base64:t.split(",")[1]});return s.upload(n).then(function(e){var t=i.find("#src");return t.value(e),i.find("tabpanel")[0].activateTab(0),t.fire("change"),c(),e})})["catch"](function(t){e.windowManager.alert(t),c()})}},L=".jpg,.jpeg,.png,.gif",_={makeTab:function(e){return{title:"Upload",type:"form",layout:"flex",direction:"column",align:"stretch",padding:"20 20 20 20",items:[{type:"container",layout:"flex",direction:"column",align:"center",spacing:10,items:[{text:"Browse for an image",type:"browsebutton",accept:L,onchange:P(e)},{text:"OR",type:"label"}]},{text:"灏嗗浘鐗囨嫋鎷戒簬姝ゅ",type:"dropzone",accept:L,height:100,onchange:P(e)}]}}},N=function(e){var a=function(e,t){if(n.hasAdvTab(e)){var a=e.dom,i=t.toJSON(),r=a.parseStyle(i.style);r=g.mergeMargins(r),i.vspace&&(r["margin-top"]=r["margin-bottom"]=g.addPixelSuffix(i.vspace)),i.hspace&&(r["margin-left"]=r["margin-right"]=g.addPixelSuffix(i.hspace)),i.border&&(r["border-width"]=g.addPixelSuffix(i.border)),t.find("#style").value(a.serializeStyle(a.parseStyle(a.serializeStyle(r))))}};function i(i){var r,o,l,s,c={},u=e.dom;function m(){var n,i;b.updateSize(r),a(e,r),(c=t.extend(c,r.toJSON())).alt||(c.alt=""),c.title||(c.title=""),""===c.width&&(c.width=null),""===c.height&&(c.height=null),c.style||(c.style=null),c={src:c.src,alt:c.alt,title:c.title,width:c.width,height:c.height,style:c.style,caption:c.caption,"class":c["class"]},e.undoManager.transact(function(){if(c.src){if(""===c.title&&(c.title=null),o?u.setAttribs(o,c):(c.id="__mcenew",e.focus(),e.selection.setContent(u.createHTML("img",c)),o=u.get("__mcenew"),u.setAttrib(o,"id",null)),e.editorUpload.uploadImagesAuto(),!1===c.caption&&u.is(o.parentNode,"figure.image")&&(n=o.parentNode,u.insertAfter(o,n),u.remove(n)),!0!==c.caption)g.waitLoadImage(e,c,o);else if(!u.is(o.parentNode,"figure.image")){i=o,o=o.cloneNode(!0),(n=u.create("figure",{"class":"image"})).appendChild(o),n.appendChild(u.create("figcaption",{contentEditable:!0},"Caption")),n.contentEditable=!1;var t=u.getParent(i,function(t){return e.schema.getTextBlockElements()[t.nodeName]});t?u.split(t,i,n):u.replace(n,i),e.selection.select(n)}}else if(o){var a=u.is(o.parentNode,"figure.image")?o.parentNode:o;u.remove(a),e.focus(),e.nodeChanged(),u.isEmpty(e.getBody())&&(e.setContent(""),e.selection.setCursorLocation())}})}if(o=e.selection.getNode(),(l=u.getParent(o,"figure.image"))&&(o=u.select("img",l)[0]),o&&("IMG"!==o.nodeName||o.getAttribute("data-mce-object")||o.getAttribute("data-mce-placeholder"))&&(o=null),o&&(c={src:u.getAttrib(o,"src"),alt:u.getAttrib(o,"alt"),title:u.getAttrib(o,"title"),"class":u.getAttrib(o,"class"),width:u.getAttrib(o,"width"),height:u.getAttrib(o,"height"),caption:!!l}),i&&(s={type:"listbox",label:"Image list",name:"image-list",values:g.buildListItems(i,function(t){t.value=e.convertURL(t.value||t.url,"src")},[{text:"None",value:""}]),value:c.src&&e.convertURL(c.src,"src"),onselect:function(e){var t=r.find("#alt");(!t.value()||e.lastControl&&t.value()===e.lastControl.text())&&t.value(e.control.text()),r.find("#src").value(e.control.value()).fire("change")},onPostRender:function(){s=this}}),n.hasAdvTab(e)||n.hasUploadUrl(e)||n.hasUploadHandler(e)){var f=[x.makeTab(e,s)];n.hasAdvTab(e)&&(o&&(o.style.marginLeft&&o.style.marginRight&&o.style.marginLeft===o.style.marginRight&&(c.hspace=g.removePixelSuffix(o.style.marginLeft)),o.style.marginTop&&o.style.marginBottom&&o.style.marginTop===o.style.marginBottom&&(c.vspace=g.removePixelSuffix(o.style.marginTop)),o.style.borderWidth&&(c.border=g.removePixelSuffix(o.style.borderWidth)),c.style=e.dom.serializeStyle(e.dom.parseStyle(e.dom.getAttrib(o,"style")))),f.push(d.makeTab(e,a))),(n.hasUploadUrl(e)||n.hasUploadHandler(e))&&f.push(_.makeTab(e)),r=e.windowManager.open({title:"Insert/edit image",data:c,bodyType:"tabpanel",body:f,onSubmit:m})}else r=e.windowManager.open({title:"Insert/edit image",data:c,body:x.getGeneralItems(e,s),onSubmit:m});b.syncSize(r)}return{open:function(){g.createImageList(e,i)}}},A=function(e){e.addCommand("mceImage",N(e).open)},k=function(e){return function(n){for(var a,i,r=n.length,o=function(t){t.attr("contenteditable",e?"true":null)};r--;)a=n[r],(i=a.attr("class"))&&/\bimage\b/.test(i)&&(a.attr("contenteditable",e?"false":null),t.each(a.getAll("figcaption"),o))}},z=function(e){e.on("preInit",function(){e.parser.addNodeFilter("figure",k(!0)),e.serializer.addNodeFilter("figure",k(!1))})},R=function(e){e.addButton("image",{icon:"image",tooltip:"Insert/edit image",onclick:N(e).open,stateSelector:"img:not([data-mce-object],[data-mce-placeholder]),figure.image"}),e.addMenuItem("image",{icon:"image",text:"Image",onclick:N(e).open,context:"insert",prependToContext:!0})};e.add("image",function(e){z(e),R(e),A(e)})}();!function(){"use strict";var n=function(n){n.addCommand("InsertHorizontalRule",function(){n.execCommand("mceInsertContent",!1,"<hr />")})},t=function(n){n.addButton("hr",{icon:"hr",tooltip:"Horizontal line",cmd:"InsertHorizontalRule"}),n.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})};tinymce.util.Tools.resolve("tinymce.PluginManager").add("hr",function(o){n(o),t(o)})}();!function(){"use strict";var e=function(t){var n=t,i=function(){return n};return{get:i,set:function(e){n=e},clone:function(){return e(i())}}},t=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=function(e){return{isFullscreen:function(){return null!==e.get()}}},i=function(e,t){e.fire("FullscreenStateChanged",{state:t})},r=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils").DOM,l=function(e,t){var n,l,o,c,s,u,d=document.body,a=document.documentElement,h=t.get(),f=function(){var e,t,n,i;r.setStyle(o,"height",(n=window,i=document.body,i.offsetWidth&&(e=i.offsetWidth,t=i.offsetHeight),n.innerWidth&&n.innerHeight&&(e=n.innerWidth,t=n.innerHeight),{w:e,h:t}).h-(l.clientHeight-o.clientHeight))},m=function(){r.unbind(window,"resize",f)};if(n=(l=e.getContainer()).style,c=(o=e.getContentAreaContainer().firstChild).style,h)c.width=h.iframeWidth,c.height=h.iframeHeight,h.containerWidth&&(n.width=h.containerWidth),h.containerHeight&&(n.height=h.containerHeight),r.removeClass(d,"mce-fullscreen"),r.removeClass(a,"mce-fullscreen"),r.removeClass(l,"mce-fullscreen"),s=h.scrollPos,window.scrollTo(s.x,s.y),r.unbind(window,"resize",h.resizeHandler),e.off("remove",h.removeHandler),t.set(null),i(e,!1);else{var g={scrollPos:(u=r.getViewPort(),{x:u.x,y:u.y}),containerWidth:n.width,containerHeight:n.height,iframeWidth:c.width,iframeHeight:c.height,resizeHandler:f,removeHandler:m};c.width=c.height="100%",n.width=n.height="",r.addClass(d,"mce-fullscreen"),r.addClass(a,"mce-fullscreen"),r.addClass(l,"mce-fullscreen"),r.bind(window,"resize",f),e.on("remove",m),f(),t.set(g),i(e,!0)}},o=function(e,t){e.addCommand("mceFullScreen",function(){l(e,t)})},c=function(e){return function(t){var n=t.control;e.on("FullscreenStateChanged",function(e){n.active(e.state)})}},s=function(e){e.addMenuItem("fullscreen",{text:"Fullscreen",shortcut:"Ctrl+Shift+F",selectable:!0,cmd:"mceFullScreen",onPostRender:c(e),context:"view"}),e.addButton("fullscreen",{active:!1,tooltip:"Fullscreen",cmd:"mceFullScreen",onPostRender:c(e)})};t.add("fullscreen",function(t){var i=e(null);return o(t,i),s(t),t.addShortcut("Ctrl+Shift+F","","mceFullScreen"),n(i)})}();!function(){"use strict";var e=function(t){var n=t,l=function(){return n};return{get:l,set:function(e){n=e},clone:function(){return e(l())}}},t=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=tinymce.util.Tools.resolve("tinymce.util.Tools"),l=tinymce.util.Tools.resolve("tinymce.html.DomParser"),i=tinymce.util.Tools.resolve("tinymce.html.Node"),r=tinymce.util.Tools.resolve("tinymce.html.Serializer"),o=function(e){return e.getParam("fullpage_hide_in_source_view")},a=function(e){return e.getParam("fullpage_default_xml_pi")},c=function(e){return e.getParam("fullpage_default_encoding")},s=function(e){return e.getParam("fullpage_default_font_family")},u=function(e){return e.getParam("fullpage_default_font_size")},d=function(e){return e.getParam("fullpage_default_text_color")},f=function(e){return e.getParam("fullpage_default_title")},g=function(e){return e.getParam("fullpage_default_doctype","<!DOCTYPE html>")},m=function(e){return l({validate:!1,root_name:"#document"}).parse(e)},h=m,p=function(e,t){var l,i,r=m(t),o={};function a(e,t){return e.attr(t)||""}return o.fontface=s(e),o.fontsize=u(e),7===(l=r.firstChild).type&&(o.xml_pi=!0,(i=/encoding="([^"]+)"/.exec(l.value))&&(o.docencoding=i[1])),(l=r.getAll("#doctype")[0])&&(o.doctype="<!DOCTYPE"+l.value+">"),(l=r.getAll("title")[0])&&l.firstChild&&(o.title=l.firstChild.value),n.each(r.getAll("meta"),function(e){var t,n=e.attr("name"),l=e.attr("http-equiv");n?o[n.toLowerCase()]=e.attr("content"):"Content-Type"===l&&(t=/charset\s*=\s*(.*)\s*/gi.exec(e.attr("content")))&&(o.docencoding=t[1])}),(l=r.getAll("html")[0])&&(o.langcode=a(l,"lang")||a(l,"xml:lang")),o.stylesheets=[],n.each(r.getAll("link"),function(e){"stylesheet"===e.attr("rel")&&o.stylesheets.push(e.attr("href"))}),(l=r.getAll("body")[0])&&(o.langdir=a(l,"dir"),o.style=a(l,"style"),o.visited_color=a(l,"vlink"),o.link_color=a(l,"link"),o.active_color=a(l,"alink")),o},y=function(e,t,l){var o,a,c,s,u,d=e.dom;function f(e,t,n){e.attr(t,n||undefined)}function g(e){a.firstChild?a.insert(e,a.firstChild):a.append(e)}o=m(l),(a=o.getAll("head")[0])||(s=o.getAll("html")[0],a=new i("head",1),s.firstChild?s.insert(a,s.firstChild,!0):s.append(a)),s=o.firstChild,t.xml_pi?(u='version="1.0"',t.docencoding&&(u+=' encoding="'+t.docencoding+'"'),7!==s.type&&(s=new i("xml",7),o.insert(s,o.firstChild,!0)),s.value=u):s&&7===s.type&&s.remove(),s=o.getAll("#doctype")[0],t.doctype?(s||(s=new i("#doctype",10),t.xml_pi?o.insert(s,o.firstChild):g(s)),s.value=t.doctype.substring(9,t.doctype.length-1)):s&&s.remove(),s=null,n.each(o.getAll("meta"),function(e){"Content-Type"===e.attr("http-equiv")&&(s=e)}),t.docencoding?(s||((s=new i("meta",1)).attr("http-equiv","Content-Type"),s.shortEnded=!0,g(s)),s.attr("content","text/html; charset="+t.docencoding)):s&&s.remove(),s=o.getAll("title")[0],t.title?(s?s.empty():g(s=new i("title",1)),s.append(new i("#text",3)).value=t.title):s&&s.remove(),n.each("keywords,description,author,copyright,robots".split(","),function(e){var n,l,r=o.getAll("meta"),a=t[e];for(n=0;n<r.length;n++)if((l=r[n]).attr("name")===e)return void(a?l.attr("content",a):l.remove());a&&((s=new i("meta",1)).attr("name",e),s.attr("content",a),s.shortEnded=!0,g(s))});var h={};return n.each(o.getAll("link"),function(e){"stylesheet"===e.attr("rel")&&(h[e.attr("href")]=e)}),n.each(t.stylesheets,function(e){h[e]||((s=new i("link",1)).attr({rel:"stylesheet",text:"text/css",href:e}),s.shortEnded=!0,g(s)),delete h[e]}),n.each(h,function(e){e.remove()}),(s=o.getAll("body")[0])&&(f(s,"dir",t.langdir),f(s,"style",t.style),f(s,"vlink",t.visited_color),f(s,"link",t.link_color),f(s,"alink",t.active_color),d.setAttribs(e.getBody(),{style:t.style,dir:t.dir,vLink:t.visited_color,link:t.link_color,aLink:t.active_color})),(s=o.getAll("html")[0])&&(f(s,"lang",t.langcode),f(s,"xml:lang",t.langcode)),a.firstChild||a.remove(),(c=r({validate:!1,indent:!0,apply_source_formatting:!0,indent_before:"head,html,body,meta,title,script,link,style",indent_after:"head,html,body,meta,title,script,link,style"}).serialize(o)).substring(0,c.indexOf("</body>"))},v=function(e,t){var l=p(e,t.get());e.windowManager.open({title:"Document properties",data:l,defaults:{type:"textbox",size:40},body:[{name:"title",label:"Title"},{name:"keywords",label:"Keywords"},{name:"description",label:"Description"},{name:"robots",label:"Robots"},{name:"author",label:"Author"},{name:"docencoding",label:"Encoding"}],onSubmit:function(i){var r=y(e,n.extend(l,i.data),t.get());t.set(r)}})},_=function(e,t){e.addCommand("mceFullPageProperties",function(){v(e,t)})},b=function(e,t){return n.each(e,function(e){t=t.replace(e,function(e){return"\x3c!--mce:protected "+escape(e)+"--\x3e"})}),t},x=function(e){return e.replace(/<!--mce:protected ([\s\S]*?)-->/g,function(e,t){return unescape(t)})},k=n.each,C=function(e){return e.replace(/<\/?[A-Z]+/g,function(e){return e.toLowerCase()})},A=function(e){var t,n="",l="";if(a(e)){var i=c(e);n+='<?xml version="1.0" encoding="'+(i||"ISO-8859-1")+'" ?>\n'}return n+=g(e),n+="\n<html>\n<head>\n",(t=f(e))&&(n+="<title>"+t+"</title>\n"),(t=c(e))&&(n+='<meta http-equiv="Content-Type" content="text/html; charset='+t+'" />\n'),(t=s(e))&&(l+="font-family: "+t+";"),(t=u(e))&&(l+="font-size: "+t+";"),(t=d(e))&&(l+="color: "+t+";"),n+="</head>\n<body"+(l?' style="'+l+'"':"")+">\n"},w=function(e,t,l){e.on("BeforeSetContent",function(i){!function(e,t,l,i){var r,a,c,s,u,d="",f=e.dom;if(!(i.selection||(c=b(e.settings.protect,i.content),"raw"===i.format&&t.get()||i.source_view&&o(e)))){0!==c.length||i.source_view||(c=n.trim(t.get())+"\n"+n.trim(c)+"\n"+n.trim(l.get())),-1!==(r=(c=c.replace(/<(\/?)BODY/gi,"<$1body")).indexOf("<body"))?(r=c.indexOf(">",r),t.set(C(c.substring(0,r+1))),-1===(a=c.indexOf("</body",r))&&(a=c.length),i.content=n.trim(c.substring(r+1,a)),l.set(C(c.substring(a)))):(t.set(A(e)),l.set("\n</body>\n</html>")),s=h(t.get()),k(s.getAll("style"),function(e){e.firstChild&&(d+=e.firstChild.value)}),(u=s.getAll("body")[0])&&f.setAttribs(e.getBody(),{style:u.attr("style")||"",dir:u.attr("dir")||"",vLink:u.attr("vlink")||"",link:u.attr("link")||"",aLink:u.attr("alink")||""}),f.remove("fullpage_styles");var g=e.getDoc().getElementsByTagName("head")[0];d&&(f.add(g,"style",{id:"fullpage_styles"},d),(u=f.get("fullpage_styles")).styleSheet&&(u.styleSheet.cssText=d));var m={};n.each(g.getElementsByTagName("link"),function(e){"stylesheet"===e.rel&&e.getAttribute("data-mce-fullpage")&&(m[e.href]=e)}),n.each(s.getAll("link"),function(e){var t=e.attr("href");if(!t)return!0;m[t]||"stylesheet"!==e.attr("rel")||f.add(g,"link",{rel:"stylesheet",text:"text/css",href:t,"data-mce-fullpage":"1"}),delete m[t]}),n.each(m,function(e){e.parentNode.removeChild(e)})}}(e,t,l,i)}),e.on("GetContent",function(i){var r,a,c,s;r=e,a=t.get(),c=l.get(),(s=i).selection||s.source_view&&o(r)||(s.content=x(n.trim(a)+"\n"+n.trim(s.content)+"\n"+n.trim(c)))})},P=function(e){e.addButton("fullpage",{title:"Document properties",cmd:"mceFullPageProperties"}),e.addMenuItem("fullpage",{text:"Document properties",cmd:"mceFullPageProperties",context:"file"})};t.add("fullpage",function(t){var n=e(""),l=e("");_(t,n),P(t),w(t,n,l)})}();!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),e=tinymce.util.Tools.resolve("tinymce.util.Tools"),i=[["cool","cry","embarassed","foot-in-mouth"],["frown","innocent","kiss","laughing"],["money-mouth","sealed","smile","surprised"],["tongue-out","undecided","wink","yell"]],o=function(t){var o;return o='<table role="list" class="mce-grid">',e.each(i,function(i){o+="<tr>",e.each(i,function(e){var i=t+"/img/smiley-"+e+".gif";o+='<td><a href="#" data-mce-url="'+i+'" data-mce-alt="'+e+'" tabindex="-1" role="option" aria-label="'+e+'"><img src="'+i+'" style="width: 18px; height: 18px" role="presentation" /></a></td>'}),o+="</tr>"}),o+="</table>"},n=function(t,e){var i=o(e);t.addButton("emoticons",{type:"panelbutton",panel:{role:"application",autohide:!0,html:i,onclick:function(e){var i,o,n,a=t.dom.getParent(e.target,"a");a&&(i=t,o=a.getAttribute("data-mce-url"),n=a.getAttribute("data-mce-alt"),i.insertContent(i.dom.createHTML("img",{src:o,alt:n})),this.hide())}},tooltip:"Emoticons"})};t.add("emoticons",function(t,e){n(t,e)})}();!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),e=tinymce.util.Tools.resolve("tinymce.util.Tools"),i=function(t,i){var n,o=t.dom,c=t.selection.getSelectedBlocks();c.length&&(n=o.getAttrib(c[0],"dir"),e.each(c,function(t){o.getParent(t.parentNode,'*[dir="'+i+'"]',o.getRoot())||o.setAttrib(t,"dir",n!==i?i:null)}),t.nodeChanged())},n=function(t){t.addCommand("mceDirectionLTR",function(){i(t,"ltr")}),t.addCommand("mceDirectionRTL",function(){i(t,"rtl")})},o=function(t){var i=[];return e.each("h1 h2 h3 h4 h5 h6 div p".split(" "),function(e){i.push(e+"[dir="+t+"]")}),i.join(",")},c=function(t){t.addButton("ltr",{title:"Left to right",cmd:"mceDirectionLTR",stateSelector:o("ltr")}),t.addButton("rtl",{title:"Right to left",cmd:"mceDirectionRTL",stateSelector:o("rtl")})};t.add("directionality",function(t){n(t),c(t)})}();!function(){"use strict";var t=function(n){var e=n,o=function(){return e};return{get:o,set:function(t){e=t},clone:function(){return t(o())}}},n=tinymce.util.Tools.resolve("tinymce.PluginManager"),e=function(t){return{isContextMenuVisible:function(){return t.get()}}},o=function(t){return t.settings.contextmenu_never_use_native},r=function(t){return t.getParam("contextmenu","link openlink image inserttable | cell row column deletetable")},i=tinymce.util.Tools.resolve("tinymce.Env"),u=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),c=function(t,n){return{x:t,y:n}},l=function(t,n,e){return c(t.x+n,t.y+e)},s=function(t,n){if(t&&"static"!==u.DOM.getStyle(t,"position",!0)){var e=u.DOM.getPos(t),o=e.x-t.scrollLeft,r=e.y-t.scrollTop;return l(n,-o,-r)}return l(n,0,0)},a=function(t){return i.container},f=function(t,n){if(t.inline)return s(a(),c((f=n).pageX,f.pageY));var e,o,r,i,f,m=(e=t.getContentAreaContainer(),o=c((i=n).clientX,i.clientY),r=u.DOM.getPos(e),l(o,r.x,r.y));return s(a(),m)},m=tinymce.util.Tools.resolve("tinymce.ui.Factory"),v=tinymce.util.Tools.resolve("tinymce.util.Tools"),g=function(t,n,e,o){null===o.get()?o.set(function(t,n){var e,o,i=[];o=r(t),v.each(o.split(/[ ,]/),function(n){var e=t.menuItems[n];"|"===n&&(e={text:n}),e&&(e.shortcut="",i.push(e))});for(var u=0;u<i.length;u++)"|"===i[u].text&&(0!==u&&u!==i.length-1||i.splice(u,1));return(e=m.create("menu",{items:i,context:"contextmenu",classes:"contextmenu"}).renderTo()).on("hide",function(t){t.control===this&&n.set(!1)}),t.on("remove",function(){e.remove(),e=null}),e}(t,e)):o.get().show(),o.get().moveTo(n.x,n.y),e.set(!0)},y=function(t,n,e){t.on("contextmenu",function(r){var i;i=t,(!r.ctrlKey||o(i))&&(r.preventDefault(),g(t,f(t,r),n,e))})};n.add("contextmenu",function(n){var o=t(null),r=t(!1);return y(n,r,o),e(r)})}();!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=tinymce.util.Tools.resolve("tinymce.util.Color"),i=function(e,n){e.find("#preview")[0].getEl().style.background=n},t=function(e,t){var l=n(t),a=l.toRgb();e.fromJSON({r:a.r,g:a.g,b:a.b,hex:l.toHex().substr(1)}),i(e,l.toHex())},l=function(e,n,l){var a=e.windowManager.open({title:"Color",items:{type:"container",layout:"flex",direction:"row",align:"stretch",padding:5,spacing:10,items:[{type:"colorpicker",value:l,onchange:function(){var e=this.rgb();a&&(a.find("#r").value(e.r),a.find("#g").value(e.g),a.find("#b").value(e.b),a.find("#hex").value(this.value().substr(1)),i(a,this.value()))}},{type:"form",padding:0,labelGap:5,defaults:{type:"textbox",size:7,value:"0",flex:1,spellcheck:!1,onchange:function(){var e,n,i=a.find("colorpicker")[0];if(e=this.name(),n=this.value(),"hex"===e)return t(a,n="#"+n),void i.value(n);n={r:a.find("#r").value(),g:a.find("#g").value(),b:a.find("#b").value()},i.value(n),t(a,n)}},items:[{name:"r",label:"R",autofocus:1},{name:"g",label:"G"},{name:"b",label:"B"},{name:"hex",label:"#",value:"000000"},{name:"preview",type:"container",border:1}]}]},onSubmit:function(){n("#"+a.toJSON().hex)}});t(a,l)};e.add("colorpicker",function(e){e.settings.color_picker_callback||(e.settings.color_picker_callback=function(n,i){l(e,n,i)})})}();!function(){"use strict";var e=function(t){var a=t,n=function(){return a};return{get:n,set:function(e){a=e},clone:function(){return e(n())}}},t=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),n=function(e){return e.settings.codesample_content_css},i=function(e){return e.settings.codesample_languages},r=function(e){return Math.min(a.DOM.getViewPort().w,e.getParam("codesample_dialog_width",800))},s=function(e){return Math.min(a.DOM.getViewPort().w,e.getParam("codesample_dialog_height",650))},o={},l=void 0!==o?o:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},c=function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=l.Prism={util:{encode:function(e){return e instanceof a?new a(e.type,t.util.encode(e.content),e.alias):"Array"===t.util.type(e)?e.map(t.util.encode):e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},clone:function(e){switch(t.util.type(e)){case"Object":var a={};for(var n in e)e.hasOwnProperty(n)&&(a[n]=t.util.clone(e[n]));return a;case"Array":return e.map&&e.map(function(e){return t.util.clone(e)})}return e}},languages:{extend:function(e,a){var n=t.util.clone(t.languages[e]);for(var i in a)n[i]=a[i];return n},insertBefore:function(e,a,n,i){var r=(i=i||t.languages)[e];if(2===arguments.length){for(var s in n=arguments[1])n.hasOwnProperty(s)&&(r[s]=n[s]);return r}var o={};for(var l in r)if(r.hasOwnProperty(l)){if(l===a)for(var s in n)n.hasOwnProperty(s)&&(o[s]=n[s]);o[l]=r[l]}return t.languages.DFS(t.languages,function(t,a){a===i[e]&&t!==e&&(this[t]=o)}),i[e]=o},DFS:function(e,a,n){for(var i in e)e.hasOwnProperty(i)&&(a.call(e,i,e[i],n||i),"Object"===t.util.type(e[i])?t.languages.DFS(e[i],a):"Array"===t.util.type(e[i])&&t.languages.DFS(e[i],a,i))}},plugins:{},highlightAll:function(e,a){for(var n=document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'),i=0,r=void 0;r=n[i++];)t.highlightElement(r,!0===e,a)},highlightElement:function(a,n,i){for(var r,s,o=a;o&&!e.test(o.className);)o=o.parentNode;o&&(r=(o.className.match(e)||[,""])[1],s=t.languages[r]),a.className=a.className.replace(e,"").replace(/\s+/g," ")+" language-"+r,o=a.parentNode,/pre/i.test(o.nodeName)&&(o.className=o.className.replace(e,"").replace(/\s+/g," ")+" language-"+r);var c=a.textContent,u={element:a,language:r,grammar:s,code:c};if(c&&s)if(t.hooks.run("before-highlight",u),n&&l.Worker){var g=new Worker(t.filename);g.onmessage=function(e){u.highlightedCode=e.data,t.hooks.run("before-insert",u),u.element.innerHTML=u.highlightedCode,i&&i.call(u.element),t.hooks.run("after-highlight",u),t.hooks.run("complete",u)},g.postMessage(JSON.stringify({language:u.language,code:u.code,immediateClose:!0}))}else u.highlightedCode=t.highlight(u.code,u.grammar,u.language),t.hooks.run("before-insert",u),u.element.innerHTML=u.highlightedCode,i&&i.call(a),t.hooks.run("after-highlight",u),t.hooks.run("complete",u);else t.hooks.run("complete",u)},highlight:function(e,n,i){var r=t.tokenize(e,n);return a.stringify(t.util.encode(r),i)},tokenize:function(e,a,n){var i=t.Token,r=[e],s=a.rest;if(s){for(var o in s)a[o]=s[o];delete a.rest}e:for(var o in a)if(a.hasOwnProperty(o)&&a[o]){var l=a[o];l="Array"===t.util.type(l)?l:[l];for(var c=0;c<l.length;++c){var u=l[c],g=u.inside,d=!!u.lookbehind,p=0,f=u.alias;u=u.pattern||u;for(var h=0;h<r.length;h++){var m=r[h];if(r.length>e.length)break e;if(!(m instanceof i)){u.lastIndex=0;var b=u.exec(m);if(b){d&&(p=b[1].length);var y=b.index-1+p,v=y+(b=b[0].slice(p)).length,k=m.slice(0,y+1),w=m.slice(v+1),x=[h,1];k&&x.push(k);var S=new i(o,g?t.tokenize(b,g):b,f);x.push(S),w&&x.push(w),Array.prototype.splice.apply(r,x)}}}}}return r},hooks:{all:{},add:function(e,a){var n=t.hooks.all;n[e]=n[e]||[],n[e].push(a)},run:function(e,a){var n=t.hooks.all[e];if(n&&n.length)for(var i=0,r=void 0;r=n[i++];)r(a)}}},a=t.Token=function(e,t,a){this.type=e,this.content=t,this.alias=a};if(a.stringify=function(e,n,i){if("string"==typeof e)return e;if("Array"===t.util.type(e))return e.map(function(t){return a.stringify(t,n,e)}).join("");var r={type:e.type,content:a.stringify(e.content,n,i),tag:"span",classes:["token",e.type],attributes:{},language:n,parent:i};if("comment"===r.type&&(r.attributes.spellcheck="true"),e.alias){var s="Array"===t.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(r.classes,s)}t.hooks.run("wrap",r);var o="";for(var l in r.attributes)o+=(o?" ":"")+l+'="'+(r.attributes[l]||"")+'"';return"<"+r.tag+' class="'+r.classes.join(" ")+'" '+o+">"+r.content+"</"+r.tag+">"},!l.document)return l.addEventListener?(l.addEventListener("message",function(e){var a=JSON.parse(e.data),n=a.language,i=a.code,r=a.immediateClose;l.postMessage(t.highlight(i,t.languages[n],n)),r&&l.close()},!1),l.Prism):l.Prism}();"undefined"!=typeof module&&module.exports&&(module.exports=c),"undefined"!=typeof global&&(global.Prism=c),c.languages.markup={comment:/<!--[\w\W]*?-->/,prolog:/<\?[\w\W]+?\?>/,doctype:/<!DOCTYPE[\w\W]+?>/,cdata:/<!\[CDATA\[[\w\W]*?]]>/i,tag:{pattern:/<\/?[^\s>\/=.]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i,inside:{punctuation:/[=>"']/}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},c.hooks.add("wrap",function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&amp;/,"&"))}),c.languages.xml=c.languages.markup,c.languages.html=c.languages.markup,c.languages.mathml=c.languages.markup,c.languages.svg=c.languages.markup,c.languages.css={comment:/\/\*[\w\W]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^\{\}\s][^\{\};]*?(?=\s*\{)/,string:/("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,property:/(\b|\B)[\w-]+(?=\s*:)/i,important:/\B!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},c.languages.css.atrule.inside.rest=c.util.clone(c.languages.css),c.languages.markup&&(c.languages.insertBefore("markup","tag",{style:{pattern:/<style[\w\W]*?>[\w\W]*?<\/style>/i,inside:{tag:{pattern:/<style[\w\W]*?>|<\/style>/i,inside:c.languages.markup.tag.inside},rest:c.languages.css},alias:"language-css"}}),c.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|').*?\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:c.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:c.languages.css}},alias:"language-css"}},c.languages.markup.tag)),c.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:/(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,"boolean":/\b(true|false)\b/,"function":/[a-z0-9_]+(?=\()/i,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/},c.languages.javascript=c.languages.extend("clike",{keyword:/\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,"function":/[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i}),c.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0}}),c.languages.insertBefore("javascript","class-name",{"template-string":{pattern:/`(?:\\`|\\?[^`])*`/,inside:{interpolation:{pattern:/\$\{[^}]+\}/,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:c.languages.javascript}},string:/[\s\S]+/}}}),c.languages.markup&&c.languages.insertBefore("markup","tag",{script:{pattern:/<script[\w\W]*?>[\w\W]*?<\/script>/i,inside:{tag:{pattern:/<script[\w\W]*?>|<\/script>/i,inside:c.languages.markup.tag.inside},rest:c.languages.javascript},alias:"language-javascript"}}),c.languages.js=c.languages.javascript,c.languages.c=c.languages.extend("clike",{keyword:/\b(asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,operator:/\-[>-]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|?\||[~^%?*\/]/,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)[ful]*\b/i}),c.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z]+([^\r\n\\]|\\.|\\(?:\r\n?|\n))*/im,lookbehind:!0,alias:"property",inside:{string:{pattern:/(#\s*include\s*)(<.+?>|("|')(\\?.)+?\3)/,lookbehind:!0}}}}),delete c.languages.c["class-name"],delete c.languages.c["boolean"],c.languages.csharp=c.languages.extend("clike",{keyword:/\b(abstract|as|async|await|base|bool|break|byte|case|catch|char|checked|class|const|continue|decimal|default|delegate|do|double|else|enum|event|explicit|extern|false|finally|fixed|float|for|foreach|goto|if|implicit|in|int|interface|internal|is|lock|long|namespace|new|null|object|operator|out|override|params|private|protected|public|readonly|ref|return|sbyte|sealed|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|virtual|void|volatile|while|add|alias|ascending|async|await|descending|dynamic|from|get|global|group|into|join|let|orderby|partial|remove|select|set|value|var|where|yield)\b/,string:[/@("|')(\1\1|\\\1|\\?(?!\1)[\s\S])*\1/,/("|')(\\?.)*?\1/],number:/\b-?(0x[\da-f]+|\d*\.?\d+)\b/i}),c.languages.insertBefore("csharp","keyword",{preprocessor:{pattern:/(^\s*)#.*/m,lookbehind:!0}}),c.languages.cpp=c.languages.extend("c",{keyword:/\b(alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,"boolean":/\b(true|false)\b/,operator:/[-+]{1,2}|!=?|<{1,2}=?|>{1,2}=?|\->|:{1,2}|={1,2}|\^|~|%|&{1,2}|\|?\||\?|\*|\/|\b(and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/}),c.languages.insertBefore("cpp","keyword",{"class-name":{pattern:/(class\s+)[a-z0-9_]+/i,lookbehind:!0}}),c.languages.java=c.languages.extend("clike",{keyword:/\b(abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while)\b/,number:/\b0b[01]+\b|\b0x[\da-f]*\.?[\da-fp\-]+\b|\b\d*\.?\d+(?:e[+-]?\d+)?[df]?\b/i,operator:{pattern:/(^|[^.])(?:\+[+=]?|-[-=]?|!=?|<<?=?|>>?>?=?|==?|&[&=]?|\|[|=]?|\*=?|\/=?|%=?|\^=?|[?:~])/m,lookbehind:!0}}),c.languages.php=c.languages.extend("clike",{keyword:/\b(and|or|xor|array|as|break|case|cfunction|class|const|continue|declare|default|die|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|for|foreach|function|include|include_once|global|if|new|return|static|switch|use|require|require_once|var|while|abstract|interface|public|implements|private|protected|parent|throw|null|echo|print|trait|namespace|final|yield|goto|instanceof|finally|try|catch)\b/i,constant:/\b[A-Z0-9_]{2,}\b/,comment:{pattern:/(^|[^\\])(?:\/\*[\w\W]*?\*\/|\/\/.*)/,lookbehind:!0}}),c.languages.insertBefore("php","class-name",{"shell-comment":{pattern:/(^|[^\\])#.*/,lookbehind:!0,alias:"comment"}}),c.languages.insertBefore("php","keyword",{delimiter:/\?>|<\?(?:php)?/i,variable:/\$\w+\b/i,"package":{pattern:/(\\|namespace\s+|use\s+)[\w\\]+/,lookbehind:!0,inside:{punctuation:/\\/}}}),c.languages.insertBefore("php","operator",{property:{pattern:/(->)[\w]+/,lookbehind:!0}}),c.languages.markup&&(c.hooks.add("before-highlight",function(e){"php"===e.language&&(e.tokenStack=[],e.backupCode=e.code,e.code=e.code.replace(/(?:<\?php|<\?)[\w\W]*?(?:\?>)/gi,function(t){return e.tokenStack.push(t),"{{{PHP"+e.tokenStack.length+"}}}"}))}),c.hooks.add("before-insert",function(e){"php"===e.language&&(e.code=e.backupCode,delete e.backupCode)}),c.hooks.add("after-highlight",function(e){if("php"===e.language){for(var t=0,a=void 0;a=e.tokenStack[t];t++)e.highlightedCode=e.highlightedCode.replace("{{{PHP"+(t+1)+"}}}",c.highlight(a,e.grammar,"php").replace(/\$/g,"$$$$"));e.element.innerHTML=e.highlightedCode}}),c.hooks.add("wrap",function(e){"php"===e.language&&"markup"===e.type&&(e.content=e.content.replace(/(\{\{\{PHP[0-9]+\}\}\})/g,'<span class="token php">$1</span>'))}),c.languages.insertBefore("php","comment",{markup:{pattern:/<[^?]\/?(.*?)>/,inside:c.languages.markup},php:/\{\{\{PHP[0-9]+\}\}\}/})),c.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},string:/"""[\s\S]+?"""|'''[\s\S]+?'''|("|')(?:\\?.)*?\1/,"function":{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_][a-zA-Z0-9_]*(?=\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)[a-z0-9_]+/i,lookbehind:!0},keyword:/\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|pass|print|raise|return|try|while|with|yield)\b/,"boolean":/\b(?:True|False)\b/,number:/\b-?(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:or|and|not)\b/,punctuation:/[{}[\];(),.:]/},function(e){e.languages.ruby=e.languages.extend("clike",{comment:/#(?!\{[^\r\n]*?\}).*/,keyword:/\b(alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|false|for|if|in|module|new|next|nil|not|or|raise|redo|require|rescue|retry|return|self|super|then|throw|true|undef|unless|until|when|while|yield)\b/});var t={pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"tag"},rest:e.util.clone(e.languages.ruby)}};e.languages.insertBefore("ruby","keyword",{regex:[{pattern:/%r([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1[gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r\((?:[^()\\]|\\[\s\S])*\)[gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}[gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r\[(?:[^\[\]\\]|\\[\s\S])*\][gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r<(?:[^<>\\]|\\[\s\S])*>[gim]{0,3}/,inside:{interpolation:t}},{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0}],variable:/[@$]+[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/,symbol:/:[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/}),e.languages.insertBefore("ruby","number",{builtin:/\b(Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|File|Fixnum|Fload|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/,constant:/\b[A-Z][a-zA-Z_0-9]*(?:[?!]|\b)/}),e.languages.ruby.string=[{pattern:/%[qQiIwWxs]?([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?\((?:[^()\\]|\\[\s\S])*\)/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?\[(?:[^\[\]\\]|\\[\s\S])*\]/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?<(?:[^<>\\]|\\[\s\S])*>/,inside:{interpolation:t}},{pattern:/("|')(#\{[^}]+\}|\\(?:\r?\n|\r)|\\?.)*?\1/,inside:{interpolation:t}}]}(c);var u={isCodeSample:function(e){return e&&"PRE"===e.nodeName&&-1!==e.className.indexOf("language-")},trimArg:function(e){return function(t,a){return e(a)}}},g=function(e){var t=e.selection.getNode();return u.isCodeSample(t)?t:null},d=g,p=function(e,t,n){e.undoManager.transact(function(){var i=g(e);n=a.DOM.encode(n),i?(e.dom.setAttrib(i,"class","language-"+t),i.innerHTML=n,c.highlightElement(i),e.selection.select(i)):(e.insertContent('<pre id="__new" class="language-'+t+'">'+n+"</pre>"),e.selection.select(e.$("#__new").removeAttr("id")[0]))})},f=function(e){var t=g(e);return t?t.textContent:""},h=function(e){var t=i(e);return t||[{text:"HTML/XML",value:"markup"},{text:"JavaScript",value:"javascript"},{text:"CSS",value:"css"},{text:"PHP",value:"php"},{text:"Ruby",value:"ruby"},{text:"Python",value:"python"},{text:"Java",value:"java"},{text:"C",value:"c"},{text:"C#",value:"csharp"},{text:"C++",value:"cpp"}]},m=function(e){var t,a=d(e);return a&&(t=a.className.match(/language-(\w+)/))?t[1]:""},b=function(e){var t=r(e),a=s(e),n=m(e),i=h(e),o=f(e);e.windowManager.open({title:"Insert/Edit code sample",minWidth:t,minHeight:a,layout:"flex",direction:"column",align:"stretch",body:[{type:"listbox",name:"language",label:"Language",maxWidth:200,value:n,values:i},{type:"textbox",name:"code",multiline:!0,spellcheck:!1,ariaLabel:"Code view",flex:1,style:"direction: ltr; text-align: left",classes:"monospace",value:o,autofocus:!0}],onSubmit:function(t){p(e,t.data.language,t.data.code)}})},y=function(e){e.addCommand("codesample",function(){var t=e.selection.getNode();e.selection.isCollapsed()||u.isCodeSample(t)?b(e):e.formatter.toggle("code")})},v=function(e){var t=e.$;e.on("PreProcess",function(e){t("pre[contenteditable=false]",e.node).filter(u.trimArg(u.isCodeSample)).each(function(e,a){var n=t(a),i=a.textContent;n.attr("class",t.trim(n.attr("class"))),n.removeAttr("contentEditable"),n.empty().append(t("<code></code>").each(function(){this.textContent=i}))})}),e.on("SetContent",function(){var a=t("pre").filter(u.trimArg(u.isCodeSample)).filter(function(e,t){return"false"!==t.contentEditable});a.length&&e.undoManager.transact(function(){a.each(function(a,n){t(n).find("br").each(function(t,a){a.parentNode.replaceChild(e.getDoc().createTextNode("\n"),a)}),n.contentEditable=!1,n.innerHTML=e.dom.encode(n.textContent),c.highlightElement(n),n.className=t.trim(n.className)})})})},k=function(e,t,a,i){var r,s=n(e);e.inline&&a.get()||!e.inline&&i.get()||(e.inline?a.set(!0):i.set(!0),!1!==s&&(r=e.dom.create("link",{rel:"stylesheet",href:s||t+"/css/prism.css"}),e.getDoc().getElementsByTagName("head")[0].appendChild(r)))},w=function(e){e.addButton("codesample",{cmd:"codesample",title:"Insert/Edit code sample"}),e.addMenuItem("codesample",{cmd:"codesample",text:"Code sample",icon:"codesample"})},x=e(!1);t.add("codesample",function(t,a){var n=e(!1);v(t),w(t),y(t),t.on("init",function(){k(t,a,x,n)}),t.on("dblclick",function(e){u.isCodeSample(e.target)&&b(t)})})}();!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),e=function(t){return t.getParam("code_dialog_width",600)},o=function(t){return t.getParam("code_dialog_height",Math.min(n.DOM.getViewPort().h-200,500))},i=function(t,n){t.focus(),t.undoManager.transact(function(){t.setContent(n)}),t.selection.setCursorLocation(),t.nodeChanged()},c=function(t){return t.getContent({source_view:!0})},d=function(t){var n=e(t),d=o(t);t.windowManager.open({title:"Source code",body:{type:"textbox",name:"code",multiline:!0,minWidth:n,minHeight:d,spellcheck:!1,style:"direction: ltr; text-align: left"},onSubmit:function(n){i(t,n.data.code)}}).find("#code").value(c(t))},u=function(t){t.addCommand("mceCodeEditor",function(){d(t)})},a=function(t){t.addButton("code",{icon:"code",tooltip:"Source code",onclick:function(){d(t)}}),t.addMenuItem("code",{icon:"code",text:"Source code",onclick:function(){d(t)}})};t.add("code",function(t){return u(t),a(t),{}})}();!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=function(e,t){return e.fire("insertCustomChar",{chr:t})},a=function(e,a){var i=t(e,a).chr;e.execCommand("mceInsertContent",!1,i)},i=tinymce.util.Tools.resolve("tinymce.util.Tools"),r=function(e){return e.settings.charmap},n=function(e){return e.settings.charmap_append},o=i.isArray,l=function(e){return o(e)?[].concat((t=e,i.grep(t,function(e){return o(e)&&2===e.length}))):"function"==typeof e?e():[];var t},c=function(e){return function(e,t){var a=r(e);a&&(t=l(a));var i=n(e);return i?[].concat(t).concat(l(i)):t}(e,[["160","no-break space"],["173","soft hyphen"],["34","quotation mark"],["162","cent sign"],["8364","euro sign"],["163","pound sign"],["165","yen sign"],["169","copyright sign"],["174","registered sign"],["8482","trade mark sign"],["8240","per mille sign"],["181","micro sign"],["183","middle dot"],["8226","bullet"],["8230","three dot leader"],["8242","minutes / feet"],["8243","seconds / inches"],["167","section sign"],["182","paragraph sign"],["223","sharp s / ess-zed"],["8249","single left-pointing angle quotation mark"],["8250","single right-pointing angle quotation mark"],["171","left pointing guillemet"],["187","right pointing guillemet"],["8216","left single quotation mark"],["8217","right single quotation mark"],["8220","left double quotation mark"],["8221","right double quotation mark"],["8218","single low-9 quotation mark"],["8222","double low-9 quotation mark"],["60","less-than sign"],["62","greater-than sign"],["8804","less-than or equal to"],["8805","greater-than or equal to"],["8211","en dash"],["8212","em dash"],["175","macron"],["8254","overline"],["164","currency sign"],["166","broken bar"],["168","diaeresis"],["161","inverted exclamation mark"],["191","turned question mark"],["710","circumflex accent"],["732","small tilde"],["176","degree sign"],["8722","minus sign"],["177","plus-minus sign"],["247","division sign"],["8260","fraction slash"],["215","multiplication sign"],["185","superscript one"],["178","superscript two"],["179","superscript three"],["188","fraction one quarter"],["189","fraction one half"],["190","fraction three quarters"],["402","function / florin"],["8747","integral"],["8721","n-ary sumation"],["8734","infinity"],["8730","square root"],["8764","similar to"],["8773","approximately equal to"],["8776","almost equal to"],["8800","not equal to"],["8801","identical to"],["8712","element of"],["8713","not an element of"],["8715","contains as member"],["8719","n-ary product"],["8743","logical and"],["8744","logical or"],["172","not sign"],["8745","intersection"],["8746","union"],["8706","partial differential"],["8704","for all"],["8707","there exists"],["8709","diameter"],["8711","backward difference"],["8727","asterisk operator"],["8733","proportional to"],["8736","angle"],["180","acute accent"],["184","cedilla"],["170","feminine ordinal indicator"],["186","masculine ordinal indicator"],["8224","dagger"],["8225","double dagger"],["192","A - grave"],["193","A - acute"],["194","A - circumflex"],["195","A - tilde"],["196","A - diaeresis"],["197","A - ring above"],["256","A - macron"],["198","ligature AE"],["199","C - cedilla"],["200","E - grave"],["201","E - acute"],["202","E - circumflex"],["203","E - diaeresis"],["274","E - macron"],["204","I - grave"],["205","I - acute"],["206","I - circumflex"],["207","I - diaeresis"],["298","I - macron"],["208","ETH"],["209","N - tilde"],["210","O - grave"],["211","O - acute"],["212","O - circumflex"],["213","O - tilde"],["214","O - diaeresis"],["216","O - slash"],["332","O - macron"],["338","ligature OE"],["352","S - caron"],["217","U - grave"],["218","U - acute"],["219","U - circumflex"],["220","U - diaeresis"],["362","U - macron"],["221","Y - acute"],["376","Y - diaeresis"],["562","Y - macron"],["222","THORN"],["224","a - grave"],["225","a - acute"],["226","a - circumflex"],["227","a - tilde"],["228","a - diaeresis"],["229","a - ring above"],["257","a - macron"],["230","ligature ae"],["231","c - cedilla"],["232","e - grave"],["233","e - acute"],["234","e - circumflex"],["235","e - diaeresis"],["275","e - macron"],["236","i - grave"],["237","i - acute"],["238","i - circumflex"],["239","i - diaeresis"],["299","i - macron"],["240","eth"],["241","n - tilde"],["242","o - grave"],["243","o - acute"],["244","o - circumflex"],["245","o - tilde"],["246","o - diaeresis"],["248","o slash"],["333","o macron"],["339","ligature oe"],["353","s - caron"],["249","u - grave"],["250","u - acute"],["251","u - circumflex"],["252","u - diaeresis"],["363","u - macron"],["253","y - acute"],["254","thorn"],["255","y - diaeresis"],["563","y - macron"],["913","Alpha"],["914","Beta"],["915","Gamma"],["916","Delta"],["917","Epsilon"],["918","Zeta"],["919","Eta"],["920","Theta"],["921","Iota"],["922","Kappa"],["923","Lambda"],["924","Mu"],["925","Nu"],["926","Xi"],["927","Omicron"],["928","Pi"],["929","Rho"],["931","Sigma"],["932","Tau"],["933","Upsilon"],["934","Phi"],["935","Chi"],["936","Psi"],["937","Omega"],["945","alpha"],["946","beta"],["947","gamma"],["948","delta"],["949","epsilon"],["950","zeta"],["951","eta"],["952","theta"],["953","iota"],["954","kappa"],["955","lambda"],["956","mu"],["957","nu"],["958","xi"],["959","omicron"],["960","pi"],["961","rho"],["962","final sigma"],["963","sigma"],["964","tau"],["965","upsilon"],["966","phi"],["967","chi"],["968","psi"],["969","omega"],["8501","alef symbol"],["982","pi symbol"],["8476","real part symbol"],["978","upsilon - hook symbol"],["8472","Weierstrass p"],["8465","imaginary part"],["8592","leftwards arrow"],["8593","upwards arrow"],["8594","rightwards arrow"],["8595","downwards arrow"],["8596","left right arrow"],["8629","carriage return"],["8656","leftwards double arrow"],["8657","upwards double arrow"],["8658","rightwards double arrow"],["8659","downwards double arrow"],["8660","left right double arrow"],["8756","therefore"],["8834","subset of"],["8835","superset of"],["8836","not a subset of"],["8838","subset of or equal to"],["8839","superset of or equal to"],["8853","circled plus"],["8855","circled times"],["8869","perpendicular"],["8901","dot operator"],["8968","left ceiling"],["8969","right ceiling"],["8970","left floor"],["8971","right floor"],["9001","left-pointing angle bracket"],["9002","right-pointing angle bracket"],["9674","lozenge"],["9824","black spade suit"],["9827","black club suit"],["9829","black heart suit"],["9830","black diamond suit"],["8194","en space"],["8195","em space"],["8201","thin space"],["8204","zero width non-joiner"],["8205","zero width joiner"],["8206","left-to-right mark"],["8207","right-to-left mark"]])},s=function(e){return{getCharMap:function(){return c(e)},insertChar:function(t){a(e,t)}}},u=function(e){var t,a,i,r=Math.min(e.length,25),n=Math.ceil(e.length/r);for(t='<table role="presentation" cellspacing="0" class="mce-charmap"><tbody>',i=0;i<n;i++){for(t+="<tr>",a=0;a<r;a++){var o=i*r+a;if(o<e.length){var l=e[o],c=parseInt(l[0],10),s=l?String.fromCharCode(c):"&nbsp;";t+='<td title="'+l[1]+'"><div tabindex="-1" title="'+l[1]+'" role="button" data-chr="'+c+'">'+s+"</div></td>"}else t+="<td />"}t+="</tr>"}return t+="</tbody></table>"},d=function(e){for(;e;){if("TD"===e.nodeName)return e;e=e.parentNode}},m=function(e){var t,i={type:"container",html:u(c(e)),onclick:function(i){var r=i.target;if(/^(TD|DIV)$/.test(r.nodeName)){var n=d(r).firstChild;if(n&&n.hasAttribute("data-chr")){var o=n.getAttribute("data-chr"),l=parseInt(o,10);isNaN(l)||a(e,String.fromCharCode(l)),i.ctrlKey||t.close()}}},onmouseover:function(e){var a=d(e.target);a&&a.firstChild?(t.find("#preview").text(a.firstChild.firstChild.data),t.find("#previewTitle").text(a.title)):(t.find("#preview").text(" "),t.find("#previewTitle").text(" "))}};t=e.windowManager.open({title:"Special character",spacing:10,padding:10,items:[i,{type:"container",layout:"flex",direction:"column",align:"center",spacing:5,minWidth:160,minHeight:160,items:[{type:"label",name:"preview",text:" ",style:"font-size: 40px; text-align: center",border:1,minWidth:140,minHeight:80},{type:"spacer",minHeight:20},{type:"label",name:"previewTitle",text:" ",style:"white-space: pre-wrap;",border:1,minWidth:140}]}],buttons:[{text:"Close",onclick:function(){t.close()}}]})},g=function(e){e.addCommand("mceShowCharmap",function(){m(e)})},p=function(e){e.addButton("charmap",{icon:"charmap",tooltip:"Special character",cmd:"mceShowCharmap"}),e.addMenuItem("charmap",{icon:"charmap",text:"Special character",cmd:"mceShowCharmap",context:"insert"})};e.add("charmap",function(e){return g(e),p(e),s(e)})}();!function(){"use strict";var o=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.util.Tools"),e=function(o){o=t.trim(o);var e=function(t,e){o=o.replace(t,e)};return e(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]"),e(/<font.*?color=\"(.*?)\".*?class=\"codeStyle\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),e(/<font.*?color=\"(.*?)\".*?class=\"quoteStyle\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),e(/<font.*?class=\"codeStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),e(/<font.*?class=\"quoteStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),e(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]"),e(/<font.*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[color=$1]$2[/color]"),e(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]"),e(/<font>(.*?)<\/font>/gi,"$1"),e(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]"),e(/<span class=\"codeStyle\">(.*?)<\/span>/gi,"[code]$1[/code]"),e(/<span class=\"quoteStyle\">(.*?)<\/span>/gi,"[quote]$1[/quote]"),e(/<strong class=\"codeStyle\">(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"),e(/<strong class=\"quoteStyle\">(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"),e(/<em class=\"codeStyle\">(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"),e(/<em class=\"quoteStyle\">(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"),e(/<u class=\"codeStyle\">(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"),e(/<u class=\"quoteStyle\">(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]"),e(/<\/(strong|b)>/gi,"[/b]"),e(/<(strong|b)>/gi,"[b]"),e(/<\/(em|i)>/gi,"[/i]"),e(/<(em|i)>/gi,"[i]"),e(/<\/u>/gi,"[/u]"),e(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]"),e(/<u>/gi,"[u]"),e(/<blockquote[^>]*>/gi,"[quote]"),e(/<\/blockquote>/gi,"[/quote]"),e(/<br \/>/gi,"\n"),e(/<br\/>/gi,"\n"),e(/<br>/gi,"\n"),e(/<p>/gi,""),e(/<\/p>/gi,"\n"),e(/&nbsp;|\u00a0/gi," "),e(/&quot;/gi,'"'),e(/&lt;/gi,"<"),e(/&gt;/gi,">"),e(/&amp;/gi,"&"),o},i=function(o){o=t.trim(o);var e=function(t,e){o=o.replace(t,e)};return e(/\n/gi,"<br />"),e(/\[b\]/gi,"<strong>"),e(/\[\/b\]/gi,"</strong>"),e(/\[i\]/gi,"<em>"),e(/\[\/i\]/gi,"</em>"),e(/\[u\]/gi,"<u>"),e(/\[\/u\]/gi,"</u>"),e(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'<a href="$1">$2</a>'),e(/\[url\](.*?)\[\/url\]/gi,'<a href="$1">$1</a>'),e(/\[img\](.*?)\[\/img\]/gi,'<img src="$1" />'),e(/\[color=(.*?)\](.*?)\[\/color\]/gi,'<font color="$1">$2</font>'),e(/\[code\](.*?)\[\/code\]/gi,'<span class="codeStyle">$1</span>&nbsp;'),e(/\[quote.*?\](.*?)\[\/quote\]/gi,'<span class="quoteStyle">$1</span>&nbsp;'),o};o.add("bbcode",function(){return{init:function(o){o.on("beforeSetContent",function(o){o.content=i(o.content)}),o.on("postProcess",function(o){o.set&&(o.content=i(o.content)),o.get&&(o.content=e(o.content))})}}})}();!function(){"use strict";var t=function(e){var r=e,n=function(){return r};return{get:n,set:function(t){r=t},clone:function(){return t(n())}}},e=tinymce.util.Tools.resolve("tinymce.PluginManager"),r=tinymce.util.Tools.resolve("tinymce.util.LocalStorage"),n=tinymce.util.Tools.resolve("tinymce.util.Tools"),a=function(t){return t.fire("RestoreDraft")},o=function(t){return t.fire("StoreDraft")},i=function(t){return t.fire("RemoveDraft")},s=function(t,e){return((t=/^(\d+)([ms]?)$/.exec(""+(t||e)))[2]?{s:1e3,m:6e4}[t[2]]:1)*parseInt(t,10)},u=function(t){return t.getParam("autosave_ask_before_unload",!0)},f=function(t){var e=t.getParam("autosave_prefix","tinymce-autosave-{path}{query}{hash}-{id}-");return e=(e=(e=(e=e.replace(/\{path\}/g,document.location.pathname)).replace(/\{query\}/g,document.location.search)).replace(/\{hash\}/g,document.location.hash)).replace(/\{id\}/g,t.id)},c=function(t){return s(t.settings.autosave_interval,"30s")},l=function(t){return s(t.settings.autosave_retention,"20m")},m=function(t,e){var r=t.settings.forced_root_block;return""===(e=n.trim(void 0===e?t.getBody().innerHTML:e))||new RegExp("^<"+r+"[^>]*>((\xa0|&nbsp;|[ \t]|<br[^>]*>)+?|)</"+r+">|<br>$","i").test(e)},v=function(t){var e=parseInt(r.getItem(f(t)+"time"),10)||0;return!((new Date).getTime()-e>l(t)&&(d(t,!1),1))},d=function(t,e){var n=f(t);r.removeItem(n+"draft"),r.removeItem(n+"time"),!1!==e&&i(t)},D=function(t){var e=f(t);!m(t)&&t.isDirty()&&(r.setItem(e+"draft",t.getContent({format:"raw",no_events:!0})),r.setItem(e+"time",(new Date).getTime().toString()),o(t))},g=function(t){var e=f(t);v(t)&&(t.setContent(r.getItem(e+"draft"),{format:"raw"}),a(t))},y={isEmpty:m,hasDraft:v,removeDraft:d,storeDraft:D,restoreDraft:g,startStoreDraft:function(t,e){var r=c(t);e.get()||(setInterval(function(){t.removed||D(t)},r),e.set(!0))},restoreLastDraft:function(t){t.undoManager.transact(function(){g(t),d(t)}),t.focus()}},p=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return t.apply(null,[e].concat(r))}},h=function(t){return{hasDraft:p(y.hasDraft,t),storeDraft:p(y.storeDraft,t),restoreDraft:p(y.restoreDraft,t),removeDraft:p(y.removeDraft,t),isEmpty:p(y.isEmpty,t)}},_=tinymce.util.Tools.resolve("tinymce.EditorManager");_._beforeUnloadHandler=function(){var t;return n.each(_.get(),function(e){e.plugins.autosave&&e.plugins.autosave.storeDraft(),!t&&e.isDirty()&&u(e)&&(t=e.translate("You have unsaved changes are you sure you want to navigate away?"))}),t};var b=function(t){window.onbeforeunload=_._beforeUnloadHandler},I=function(t,e){return function(r){var n=r.control;n.disabled(!y.hasDraft(t)),t.on("StoreDraft RestoreDraft RemoveDraft",function(){n.disabled(!y.hasDraft(t))}),y.startStoreDraft(t,e)}},w=function(t,e){t.addButton("restoredraft",{title:"Restore last draft",onclick:function(){y.restoreLastDraft(t)},onPostRender:I(t,e)}),t.addMenuItem("restoredraft",{text:"Restore last draft",onclick:function(){y.restoreLastDraft(t)},onPostRender:I(t,e),context:"file"})};e.add("autosave",function(e){var r=t(!1);return b(e),w(e,r),h(e)})}();!function(){"use strict";var t=function(e){var n=e,i=function(){return n};return{get:i,set:function(t){n=t},clone:function(){return t(i())}}},e=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=tinymce.util.Tools.resolve("tinymce.Env"),i=tinymce.util.Tools.resolve("tinymce.util.Delay"),o=function(t){return parseInt(t.getParam("autoresize_min_height",t.getElement().offsetHeight),10)},r=function(t){return parseInt(t.getParam("autoresize_max_height",0),10)},a=function(t){return t.getParam("autoresize_overflow_padding",1)},u=function(t){return t.getParam("autoresize_bottom_margin",50)},s=function(t){return t.getParam("autoresize_on_init",!0)},l=function(t,e,n,o,r){i.setEditorTimeout(t,function(){c(t,e),n--?l(t,e,n,o,r):r&&r()},o)},g=function(t,e){var n=t.getBody();n&&(n.style.overflowY=e?"":"hidden",e||(n.scrollTop=0))},c=function(t,e){var i,a,u,s,l,f,d,m,p,y,h,v=t.dom;if(a=t.getDoc())if((S=t).plugins.fullscreen&&S.plugins.fullscreen.isFullscreen())g(t,!0);else{var S;u=a.body,s=o(t),f=v.getStyle(u,"margin-top",!0),d=v.getStyle(u,"margin-bottom",!0),m=v.getStyle(u,"padding-top",!0),p=v.getStyle(u,"padding-bottom",!0),y=v.getStyle(u,"border-top-width",!0),h=v.getStyle(u,"border-bottom-width",!0),l=u.offsetHeight+parseInt(f,10)+parseInt(d,10)+parseInt(m,10)+parseInt(p,10)+parseInt(y,10)+parseInt(h,10),(isNaN(l)||l<=0)&&(l=n.ie?u.scrollHeight:n.webkit&&0===u.clientHeight?0:u.offsetHeight),l>o(t)&&(s=l);var _=r(t);_&&l>_?(s=_,g(t,!0)):g(t,!1),s!==e.get()&&(i=s-e.get(),v.setStyle(t.iframeElement,"height",s+"px"),e.set(s),n.webkit&&i<0&&c(t,e))}},f={setup:function(t,e){t.on("init",function(){var e,n,i=t.dom;e=a(t),n=u(t),!1!==e&&i.setStyles(t.getBody(),{paddingLeft:e,paddingRight:e}),!1!==n&&i.setStyles(t.getBody(),{paddingBottom:n})}),t.on("nodechange setcontent keyup FullscreenStateChanged",function(n){c(t,e)}),s(t)&&t.on("init",function(){l(t,e,20,100,function(){l(t,e,5,1e3)})})},resize:c},d=function(t,e){t.addCommand("mceAutoResize",function(){f.resize(t,e)})};e.add("autoresize",function(e){if(!e.inline){var n=t(0);d(e,n),f.setup(e,n)}})}();!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.Env"),n=function(e){return e.getParam("autolink_pattern",/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+\-]+@)(.+)$/i)},i=function(e){return e.getParam("default_link_target","")},o=function(e,t){if(t<0&&(t=0),3===e.nodeType){var n=e.data.length;t>n&&(t=n)}return t},r=function(e,t,n){1!==t.nodeType||t.hasChildNodes()?e.setStart(t,o(t,n)):e.setStartBefore(t)},a=function(e,t,n){1!==t.nodeType||t.hasChildNodes()?e.setEnd(t,o(t,n)):e.setEndAfter(t)},d=function(e,t,o){var d,f,s,l,c,u,g,h,C,m,y=n(e),k=i(e);if("A"!==e.selection.getNode().tagName){if((d=e.selection.getRng(!0).cloneRange()).startOffset<5){if(!(h=d.endContainer.previousSibling)){if(!d.endContainer.firstChild||!d.endContainer.firstChild.nextSibling)return;h=d.endContainer.firstChild.nextSibling}if(C=h.length,r(d,h,C),a(d,h,C),d.endOffset<5)return;f=d.endOffset,l=h}else{if(3!==(l=d.endContainer).nodeType&&l.firstChild){for(;3!==l.nodeType&&l.firstChild;)l=l.firstChild;3===l.nodeType&&(r(d,l,0),a(d,l,l.nodeValue.length))}f=1===d.endOffset?2:d.endOffset-1-t}s=f;do{r(d,l,f>=2?f-2:0),a(d,l,f>=1?f-1:0),f-=1,m=d.toString()}while(" "!==m&&""!==m&&160!==m.charCodeAt(0)&&f-2>=0&&m!==o);var p;(p=d.toString())===o||" "===p||160===p.charCodeAt(0)?(r(d,l,f),a(d,l,s),f+=1):0===d.startOffset?(r(d,l,0),a(d,l,s)):(r(d,l,f),a(d,l,s)),"."===(u=d.toString()).charAt(u.length-1)&&a(d,l,s-1),(g=(u=d.toString().trim()).match(y))&&("www."===g[1]?g[1]="http://www.":/@$/.test(g[1])&&!/^mailto:/.test(g[1])&&(g[1]="mailto:"+g[1]),c=e.selection.getBookmark(),e.selection.setRng(d),e.execCommand("createlink",!1,g[1]+g[2]),k&&e.dom.setAttrib(e.selection.getNode(),"target",k),e.selection.moveToBookmark(c),e.nodeChanged())}},f=function(e){var n;e.on("keydown",function(t){13!==t.keyCode||d(e,-1,"")}),t.ie?e.on("focus",function(){if(!n){n=!0;try{e.execCommand("AutoUrlDetect",!1,!0)}catch(t){}}}):(e.on("keypress",function(t){41!==t.keyCode||d(e,-1,"(")}),e.on("keyup",function(t){32!==t.keyCode||d(e,0,"")}))};e.add("autolink",function(e){f(e)})}();!function(){"use strict";var t=function(t){return/^[A-Za-z][A-Za-z0-9\-:._]*$/.test(t)},e=function(t){var e=t.selection.getNode();return"A"===e.tagName&&""===t.dom.getAttrib(e,"href")?e.id||e.name:""},n=function(t,e){var n=t.selection.getNode();"A"===n.tagName&&""===t.dom.getAttrib(n,"href")?(n.removeAttribute("name"),n.id=e):(t.focus(),t.selection.collapse(!0),t.execCommand("mceInsertContent",!1,t.dom.createHTML("a",{id:e})))},o=function(o){var r=e(o);o.windowManager.open({title:"Anchor",body:{type:"textbox",name:"id",size:40,label:"Id",value:r},onsubmit:function(e){var r,a,i=e.data.id;r=o,(t(a=i)?(n(r,a),0):(r.windowManager.alert("Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores."),1))&&e.preventDefault()}})},r=function(t){t.addCommand("mceAnchor",function(){o(t)})},a=function(t){return function(e){for(var n=0;n<e.length;n++)(o=e[n]).attr("href")||!o.attr("id")&&!o.attr("name")||o.firstChild||e[n].attr("contenteditable",t);var o}},i=function(t){t.on("PreInit",function(){t.parser.addNodeFilter("a",a("false")),t.serializer.addNodeFilter("a",a(null))})},c=function(t){t.addButton("anchor",{icon:"anchor",tooltip:"Anchor",cmd:"mceAnchor",stateSelector:"a:not([href])"}),t.addMenuItem("anchor",{icon:"anchor",text:"Anchor",context:"insert",cmd:"mceAnchor"})};tinymce.util.Tools.resolve("tinymce.PluginManager").add("anchor",function(t){i(t),r(t),c(t)})}();!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),e=tinymce.util.Tools.resolve("tinymce.util.Tools"),n=function(t,e,n){var r="UL"===e?"InsertUnorderedList":"InsertOrderedList";t.execCommand(r,!1,!1===n?null:{"list-style-type":n})},r=function(t){t.addCommand("ApplyUnorderedListStyle",function(e,r){n(t,"UL",r["list-style-type"])}),t.addCommand("ApplyOrderedListStyle",function(e,r){n(t,"OL",r["list-style-type"])})},o=function(t){var e=t.getParam("advlist_number_styles","default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");return e?e.split(/[ ,]/):[]},i=function(t){var e=t.getParam("advlist_bullet_styles","default,circle,disc,square");return e?e.split(/[ ,]/):[]},l=function(t){return t&&/^(TH|TD)$/.test(t.nodeName)},a=function(t){return function(e){return e&&/^(OL|UL|DL)$/.test(e.nodeName)&&(r=e,(n=t).$.contains(n.getBody(),r));var n,r}},s=function(t){var e=t.dom.getParent(t.selection.getNode(),"ol,ul");return t.dom.getStyle(e,"listStyleType")||""},u=function(t){return e.map(t,function(t){return{text:t.replace(/\-/g," ").replace(/\b\w/g,function(t){return t.toUpperCase()}),data:"default"===t?"":t}})},c=function(t,n){return function(r){var o=r.control;t.on("NodeChange",function(r){var i=function(t,e){for(var n=0;n<t.length;n++)if(e(t[n]))return n;return-1}(r.parents,l),s=-1!==i?r.parents.slice(0,i):r.parents,u=e.grep(s,a(t));o.active(u.length>0&&u[0].nodeName===n)})}},d=function(t,e,r,o,i,l){var a;t.addButton(e,{active:!1,type:"splitbutton",tooltip:r,menu:u(l),onPostRender:c(t,i),onshow:(a=t,function(t){var e=s(a);t.control.items().each(function(t){t.active(t.settings.data===e)})}),onselect:function(e){n(t,i,e.control.settings.data)},onclick:function(){t.execCommand(o)}})},p=function(t,e,n,r,o,i){var l,a,s,u,p;i.length>0?d(t,e,n,r,o,i):(a=e,s=n,u=r,p=o,(l=t).addButton(a,{active:!1,type:"button",tooltip:s,onPostRender:c(l,p),onclick:function(){l.execCommand(u)}}))},f=function(t){p(t,"numlist","Numbered list","InsertOrderedList","OL",o(t)),p(t,"bullist","Bullet list","InsertUnorderedList","UL",i(t))};t.add("advlist",function(t){var n,o,i;o="lists",i=(n=t).settings.plugins?n.settings.plugins:"",-1!==e.inArray(i.split(/[ ,]/),o)&&(f(t),r(t))})}();!function(){"use strict";var e,t,n,i,r,o=tinymce.util.Tools.resolve("tinymce.ThemeManager"),s=tinymce.util.Tools.resolve("tinymce.EditorManager"),a=tinymce.util.Tools.resolve("tinymce.util.Tools"),l=function(e){return!1!==u(e)},u=function(e){return e.getParam("menubar")},c=function(e){return e.getParam("toolbar_items_size")},d=function(e){return e.getParam("menu")},f=function(e){return!1===e.settings.skin},h=function(e){var t=e.getParam("resize","vertical");return!1===t?"none":"both"===t?"both":"vertical"},m=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),g=tinymce.util.Tools.resolve("tinymce.ui.Factory"),p=tinymce.util.Tools.resolve("tinymce.util.I18n"),v=function(e){return e.fire("SkinLoaded")},b=function(e){return e.fire("ResizeEditor")},y=function(e){return e.fire("BeforeRenderUI")},x=function(e,t){return function(){var n=e.find(t)[0];n&&n.focus(!0)}},w=function(e,t){e.shortcuts.add("Alt+F9","",x(t,"menubar")),e.shortcuts.add("Alt+F10,F10","",x(t,"toolbar")),e.shortcuts.add("Alt+F11","",x(t,"elementpath")),t.on("cancel",function(){e.focus()})},_=tinymce.util.Tools.resolve("tinymce.Env"),R=tinymce.util.Tools.resolve("tinymce.geom.Rect"),C=tinymce.util.Tools.resolve("tinymce.util.Delay"),k=function(e){return function(){return e}},E={noop:function(){},noarg:function(e){return function(){return e()}},compose:function(e,t){return function(){return e(t.apply(null,arguments))}},constant:k,identity:function(e){return e},tripleEquals:function(e,t){return e===t},curry:function(e){for(var t=new Array(arguments.length-1),n=1;n<arguments.length;n++)t[n-1]=arguments[n];return function(){for(var n=new Array(arguments.length),i=0;i<n.length;i++)n[i]=arguments[i];var r=t.concat(n);return e.apply(null,r)}},not:function(e){return function(){return!e.apply(null,arguments)}},die:function(e){return function(){throw new Error(e)}},apply:function(e){return e()},call:function(e){e()},never:k(!1),always:k(!0)},H=E.never,S=E.always,M=function(){return T},T=(i={fold:function(e,t){return e()},is:H,isSome:H,isNone:S,getOr:n=function(e){return e},getOrThunk:t=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},or:n,orThunk:t,map:M,ap:M,each:function(){},bind:M,flatten:M,exists:H,forall:S,filter:M,equals:e=function(e){return e.isNone()},equals_:e,toArray:function(){return[]},toString:E.constant("none()")},Object.freeze&&Object.freeze(i),i),P=function(e){var t=function(){return e},n=function(){return r},i=function(t){return t(e)},r={fold:function(t,n){return n(e)},is:function(t){return e===t},isSome:S,isNone:H,getOr:t,getOrThunk:t,getOrDie:t,or:n,orThunk:n,map:function(t){return P(t(e))},ap:function(t){return t.fold(M,function(t){return P(t(e))})},each:function(t){t(e)},bind:i,flatten:t,exists:i,forall:i,filter:function(t){return t(e)?r:T},equals:function(t){return t.is(e)},equals_:function(t,n){return t.fold(H,function(t){return n(e,t)})},toArray:function(){return[e]},toString:function(){return"some("+e+")"}};return r},W={some:P,none:M,from:function(e){return null===e||e===undefined?T:P(e)}},D=function(){var e=_.container;if(e&&"static"!==m.DOM.getStyle(e,"position",!0)){var t=m.DOM.getPos(e),n=e.scrollLeft-t.x,i=e.scrollTop-t.y;return W.some({x:n,y:i})}return W.none()},N=function(e,t,n){var i,r=[];if(t)return a.each(t.split(/[ ,]/),function(t){var o,s=function(){var n=e.selection;t.settings.stateSelector&&n.selectorChanged(t.settings.stateSelector,function(e){t.active(e)},!0),t.settings.disabledStateSelector&&n.selectorChanged(t.settings.disabledStateSelector,function(e){t.disabled(e)})};"|"===t?i=null:(i||(i={type:"buttongroup",items:[]},r.push(i)),e.buttons[t]&&(o=t,"function"==typeof(t=e.buttons[o])&&(t=t()),t.type=t.type||"button",t.size=n,t=g.create(t),i.items.push(t),e.initialized?s():e.on("init",s)))}),{type:"toolbar",layout:"flow",items:r}},A=N,B=function(e,t){var n,i,r=[];if(a.each(!1===(i=(n=e).getParam("toolbar"))?[]:a.isArray(i)?a.grep(i,function(e){return e.length>0}):function(e,t){for(var n=[],i=1;i<10;i++){var r=e["toolbar"+i];if(!r)break;n.push(r)}var o=e.toolbar?[e.toolbar]:[t];return n.length>0?n:o}(n.settings,"undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"),function(n){var i;(i=n)&&r.push(N(e,i,t))}),r.length)return{type:"panel",layout:"stack",classes:"toolbar-grp",ariaRoot:!0,ariaRemember:!0,items:r}},O=m.DOM,z=function(e){return{left:e.x,top:e.y,width:e.w,height:e.h,right:e.x+e.w,bottom:e.y+e.h}},L=function(e,t){e.moveTo(t.left,t.top)},I=function(e,t,n,i,r,o){return o=z({x:t,y:n,w:o.w,h:o.h}),e&&(o=e({elementRect:z(i),contentAreaRect:z(r),panelRect:o})),o},F=function(e){var t,n=function(){return e.contextToolbars||[]},i=function(t,n){var i,r,o,s,l,u,c,d=e.getParam("inline_toolbar_position_handler");if(!e.removed){if(!t||!t.toolbar.panel)return f=e,void a.each(f.contextToolbars,function(e){e.panel&&e.panel.hide()});var f,h,m,g,p;c=["bc-tc","tc-bc","tl-bl","bl-tl","tr-br","br-tr"],l=t.toolbar.panel,n&&l.show(),h=t.element,m=O.getPos(e.getContentAreaContainer()),g=e.dom.getRect(h),"BODY"===(p=e.dom.getRoot()).nodeName&&(g.x-=p.ownerDocument.documentElement.scrollLeft||p.scrollLeft,g.y-=p.ownerDocument.documentElement.scrollTop||p.scrollTop),g.x+=m.x,g.y+=m.y,o=g,r=O.getRect(l.getEl()),s=O.getRect(e.getContentAreaContainer()||e.getBody());var v,b,y,x=D().getOr({x:0,y:0});if(o.x+=x.x,o.y+=x.y,r.x+=x.x,r.y+=x.y,s.x+=x.x,s.y+=x.y,"inline"!==O.getStyle(t.element,"display",!0)){var w=t.element.getBoundingClientRect();o.w=w.width,o.h=w.height}e.inline||(s.w=e.getDoc().documentElement.offsetWidth),e.selection.controlSelection.isResizable(t.element)&&o.w<25&&(o=R.inflate(o,0,8)),i=R.findBestRelativePosition(r,o,s,c),o=R.clamp(o,s),i?(u=R.relativePosition(r,o,i),L(l,I(d,u.x,u.y,o,s,r))):(s.h+=r.h,(o=R.intersect(s,o))?(i=R.findBestRelativePosition(r,o,s,["bc-tc","bl-tl","br-tr"]))?(u=R.relativePosition(r,o,i),L(l,I(d,u.x,u.y,o,s,r))):L(l,I(d,o.x,o.y,o,s,r)):l.hide()),v=l,y=function(e,t){return e===t},b=(b=i)?b.substr(0,2):"",a.each({t:"down",b:"up"},function(e,t){v.classes.toggle("arrow-"+e,y(t,b.substr(0,1)))}),a.each({l:"left",r:"right"},function(e,t){v.classes.toggle("arrow-"+e,y(t,b.substr(1,1)))})}},r=function(t){return function(){C.requestAnimationFrame(function(){e.selection&&i(l(e.selection.getNode()),t)})}},o=function(n){var o;if(n.toolbar.panel)return n.toolbar.panel.show(),void i(n);!function(){if(!t){var n=r(!0);t=e.selection.getScrollContainer()||e.getWin(),O.bind(t,"scroll",n),O.bind(_.container,"scroll",n),e.on("remove",function(){O.unbind(t,"scroll",n),O.unbind(_.container,"scroll",n)})}}(),o=g.create({type:"floatpanel",role:"dialog",classes:"tinymce tinymce-inline arrow",ariaLabel:"Inline toolbar",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!0,border:1,items:A(e,n.toolbar.items),oncancel:function(){e.focus()}}),n.toolbar.panel=o,o.renderTo().reflow(),i(n)},s=function(){a.each(n(),function(e){e.panel&&e.panel.hide()})},l=function(t){var i,r,o,s=n();for(i=(o=e.$(t).parents().add(t)).length-1;i>=0;i--)for(r=s.length-1;r>=0;r--)if(s[r].predicate(o[i]))return{toolbar:s[r],element:o[i]};return null};e.on("click keyup setContent ObjectResized",function(t){("setcontent"!==t.type||t.selection)&&C.setEditorTimeout(e,function(){var t;(t=l(e.selection.getNode()))?(s(),o(t)):s()})}),e.on("blur hide contextmenu",s),e.on("ObjectResizeStart",function(){var t=l(e.selection.getNode());t&&t.toolbar.panel&&t.toolbar.panel.hide()}),e.on("ResizeEditor ResizeWindow",r(!0)),e.on("nodeChange",r(!1)),e.on("remove",function(){a.each(n(),function(e){e.panel&&e.panel.remove()}),e.contextToolbars={}}),e.shortcuts.add("ctrl+shift+e > ctrl+shift+p","",function(){var t=l(e.selection.getNode());t&&t.toolbar.panel&&t.toolbar.panel.items()[0].focus()})},V=(r=Array.prototype.indexOf)===undefined?function(e,t){return J(e,t)}:function(e,t){return r.call(e,t)},U=function(e,t){return V(e,t)>-1},Y=function(e,t){for(var n=e.length,i=new Array(n),r=0;r<n;r++){var o=e[r];i[r]=t(o,r,e)}return i},$=function(e,t){for(var n=0,i=e.length;n<i;n++)t(e[n],n,e)},j=function(e,t){for(var n=e.length-1;n>=0;n--)t(e[n],n,e)},q=function(e,t){for(var n=[],i=0,r=e.length;i<r;i++){var o=e[i];t(o,i,e)&&n.push(o)}return n},X=function(e,t){for(var n=0,i=e.length;n<i;n++)if(t(e[n],n,e))return W.some(n);return W.none()},J=function(e,t){for(var n=0,i=e.length;n<i;++n)if(e[n]===t)return n;return-1},G=Array.prototype.push,K=function(e){for(var t=[],n=0,i=e.length;n<i;++n){if(!Array.prototype.isPrototypeOf(e[n]))throw new Error("Arr.flatten item "+n+" was not an array, input: "+e);G.apply(t,e[n])}return t},Z=function(e,t){for(var n=0,i=e.length;n<i;++n)if(!0!==t(e[n],n,e))return!1;return!0},Q=Array.prototype.slice,ee={map:Y,each:$,eachr:j,partition:function(e,t){for(var n=[],i=[],r=0,o=e.length;r<o;r++){var s=e[r];(t(s,r,e)?n:i).push(s)}return{pass:n,fail:i}},filter:q,groupBy:function(e,t){if(0===e.length)return[];for(var n=t(e[0]),i=[],r=[],o=0,s=e.length;o<s;o++){var a=e[o],l=t(a);l!==n&&(i.push(r),r=[]),n=l,r.push(a)}return 0!==r.length&&i.push(r),i},indexOf:function(e,t){var n=V(e,t);return-1===n?W.none():W.some(n)},foldr:function(e,t,n){return j(e,function(e){n=t(n,e)}),n},foldl:function(e,t,n){return $(e,function(e){n=t(n,e)}),n},find:function(e,t){for(var n=0,i=e.length;n<i;n++){var r=e[n];if(t(r,n,e))return W.some(r)}return W.none()},findIndex:X,flatten:K,bind:function(e,t){var n=Y(e,t);return K(n)},forall:Z,exists:function(e,t){return X(e,t).isSome()},contains:U,equal:function(e,t){return e.length===t.length&&Z(e,function(e,n){return e===t[n]})},reverse:function(e){var t=Q.call(e,0);return t.reverse(),t},chunk:function(e,t){for(var n=[],i=0;i<e.length;i+=t){var r=e.slice(i,i+t);n.push(r)}return n},difference:function(e,t){return q(e,function(e){return!U(t,e)})},mapToObject:function(e,t){for(var n={},i=0,r=e.length;i<r;i++){var o=e[i];n[String(o)]=t(o,i)}return n},pure:function(e){return[e]},sort:function(e,t){var n=Q.call(e,0);return n.sort(t),n},range:function(e,t){for(var n=[],i=0;i<e;i++)n.push(t(i));return n},head:function(e){return 0===e.length?W.none():W.some(e[0])},last:function(e){return 0===e.length?W.none():W.some(e[e.length-1])}},te={file:{title:"File",items:"newdocument restoredraft | preview | print"},edit:{title:"Edit",items:"undo redo | cut copy paste pastetext | selectall"},view:{title:"View",items:"code | visualaid visualchars visualblocks | spellchecker | preview fullscreen"},insert:{title:"Insert",items:"image link media template codesample inserttable | charmap hr | pagebreak nonbreaking anchor toc | insertdatetime"},format:{title:"Format",items:"bold italic underline strikethrough superscript subscript codeformat | blockformats align | removeformat"},tools:{title:"Tools",items:"spellchecker spellcheckerlanguage | a11ycheck"},table:{title:"Table"},help:{title:"Help"}},ne=function(e,t){return"|"===e?{name:"|",item:{text:"|"}}:t?{name:e,item:t}:null},ie=function(e){return e&&"|"===e.item.text},re=function(e,t,n,i){var r,o,s,l,u,c,d,f;return t?(o=t[i],l=!0):o=te[i],o&&(r={text:o.title},s=[],a.each((o.items||"").split(/[ ,]/),function(t){var n=ne(t,e[t]);n&&s.push(n)}),l||a.each(e,function(e,t){var n,r;e.context!==i||(n=s,r=t,ee.findIndex(n,function(e){return e.name===r}).isSome())||("before"===e.separator&&s.push({name:"|",item:{text:"|"}}),e.prependToContext?s.unshift(ne(t,e)):s.push(ne(t,e)),"after"===e.separator&&s.push({name:"|",item:{text:"|"}}))}),r.menu=ee.map((u=s,c=n,d=ee.filter(u,function(e){return!1===c.hasOwnProperty(e.name)}),f=ee.filter(d,function(e,t,n){return!ie(e)||!ie(n[t-1])}),ee.filter(f,function(e,t,n){return!ie(e)||t>0&&t<n.length-1})),function(e){return e.item}),!r.menu.length)?null:r},oe=function(e){for(var t,n=[],i=function(e){var t,n=[],i=d(e);if(i)for(t in i)n.push(t);else for(t in te)n.push(t);return n}(e),r=a.makeMap((t=e,t.getParam("removed_menuitems","")).split(/[ ,]/)),o=u(e),s="string"==typeof o?o.split(/[ ,]/):i,l=0;l<s.length;l++){var c=s[l],f=re(e.menuItems,d(e),r,c);f&&n.push(f)}return n},se=m.DOM,ae=function(e){return{width:e.clientWidth,height:e.clientHeight}},le=function(e,t,n){var i,r,o,s;i=e.getContainer(),r=e.getContentAreaContainer().firstChild,o=ae(i),s=ae(r),null!==t&&(t=Math.max(e.getParam("min_width",100,"number"),t),t=Math.min(e.getParam("max_width",65535,"number"),t),se.setStyle(i,"width",t+(o.width-s.width)),se.setStyle(r,"width",t)),n=Math.max(e.getParam("min_height",100,"number"),n),n=Math.min(e.getParam("max_height",65535,"number"),n),se.setStyle(r,"height",n),b(e)},ue=le,ce=function(e,t,n){var i=e.getContentAreaContainer();le(e,i.clientWidth+t,i.clientHeight+n)},de=function(e,t,n){var i,r=e.settings[n];r&&r((i=t.getEl("body"),{element:function(){return i}}))},fe=function(e,t,n){return function(i){var r,o,s,l,u,c=i.control,d=c.parents().filter("panel")[0],f=d.find("#"+t)[0],h=(r=n,o=t,a.grep(r,function(e){return e.name===o})[0]);s=t,l=d,u=n,a.each(u,function(e){var t=l.items().filter("#"+e.name)[0];t&&t.visible()&&e.name!==s&&(de(e,t,"onhide"),t.visible(!1))}),c.parent().items().each(function(e){e.active(!1)}),f&&f.visible()?(de(h,f,"onhide"),f.hide(),c.active(!1)):(f?(f.show(),de(h,f,"onshow")):(f=g.create({type:"container",name:t,layout:"stack",classes:"sidebar-panel",html:""}),d.prepend(f),de(h,f,"onrender"),de(h,f,"onshow")),c.active(!0)),b(e)}},he=function(e){return!(_.ie&&!(_.ie>=11)||!e.sidebars)&&e.sidebars.length>0},me=function(e){return{type:"panel",name:"sidebar",layout:"stack",classes:"sidebar",items:[{type:"toolbar",layout:"stack",classes:"sidebar-toolbar",items:a.map(e.sidebars,function(t){var n=t.settings;return{type:"button",icon:n.icon,image:n.image,tooltip:n.tooltip,onclick:fe(e,t.name,e.sidebars)}})}]}},ge=function(e){var t=function(){e._skinLoaded=!0,v(e)};return function(){e.initialized?t():e.on("init",t)}},pe=m.DOM,ve=function(e){return{type:"panel",name:"iframe",layout:"stack",classes:"edit-area",border:e,html:""}},be=function(e,t,n){var i,r,o,s,a;if(!1===f(e)&&n.skinUiCss?pe.styleSheetLoader.load(n.skinUiCss,ge(e)):ge(e)(),i=t.panel=g.create({type:"panel",role:"application",classes:"tinymce",style:"visibility: hidden",layout:"stack",border:1,items:[{type:"container",classes:"top-part",items:[!1===l(e)?null:{type:"menubar",border:"0 0 1 0",items:oe(e)},B(e,c(e))]},he(e)?(s=e,{type:"panel",layout:"stack",classes:"edit-aria-container",border:"1 0 0 0",items:[ve("0"),me(s)]}):ve("1 0 0 0")]}),"none"!==h(e)&&(r={type:"resizehandle",direction:h(e),onResizeStart:function(){var t=e.getContentAreaContainer().firstChild;o={width:t.clientWidth,height:t.clientHeight}},onResize:function(t){"both"===h(e)?ue(e,o.width+t.deltaX,o.height+t.deltaY):ue(e,null,o.height+t.deltaY)}}),e.getParam("statusbar",!0,"boolean")){var u=p.translate(["Powered by {0}",'<a href="https://www.tinymce.com/?utm_campaign=editor_referral&utm_medium=poweredby&utm_source=tinymce" rel="noopener" target="_blank" role="presentation" tabindex="-1">tinymce</a>']),d=e.getParam("branding",!0,"boolean")?{type:"label",classes:"branding",html:" "+u}:null;i.add({type:"panel",name:"statusbar",classes:"statusbar",layout:"flow",border:"1 0 0 0",ariaRoot:!0,items:[{type:"elementpath",editor:e},r,d]})}return y(e),e.on("SwitchMode",(a=i,function(e){a.find("*").disabled("readonly"===e.mode)})),i.renderBefore(n.targetNode).reflow(),e.getParam("readonly",!1,"boolean")&&e.setMode("readonly"),n.width&&pe.setStyle(i.getEl(),"width",n.width),e.on("remove",function(){i.remove(),i=null}),w(e,i),F(e),{iframeContainer:i.find("#iframe")[0].getEl(),editorContainer:i.getEl()}},ye=tinymce.util.Tools.resolve("tinymce.dom.DomQuery"),xe=0,we={id:function(){return"mceu_"+xe++},create:function(e,t,n){var i=document.createElement(e);return m.DOM.setAttribs(i,t),"string"==typeof n?i.innerHTML=n:a.each(n,function(e){e.nodeType&&i.appendChild(e)}),i},createFragment:function(e){return m.DOM.createFragment(e)},getWindowSize:function(){return m.DOM.getViewPort()},getSize:function(e){var t,n;if(e.getBoundingClientRect){var i=e.getBoundingClientRect();t=Math.max(i.width||i.right-i.left,e.offsetWidth),n=Math.max(i.height||i.bottom-i.bottom,e.offsetHeight)}else t=e.offsetWidth,n=e.offsetHeight;return{width:t,height:n}},getPos:function(e,t){return m.DOM.getPos(e,t||we.getContainer())},getContainer:function(){return _.container?_.container:document.body},getViewPort:function(e){return m.DOM.getViewPort(e)},get:function(e){return document.getElementById(e)},addClass:function(e,t){return m.DOM.addClass(e,t)},removeClass:function(e,t){return m.DOM.removeClass(e,t)},hasClass:function(e,t){return m.DOM.hasClass(e,t)},toggleClass:function(e,t,n){return m.DOM.toggleClass(e,t,n)},css:function(e,t,n){return m.DOM.setStyle(e,t,n)},getRuntimeStyle:function(e,t){return m.DOM.getStyle(e,t,!0)},on:function(e,t,n,i){return m.DOM.bind(e,t,n,i)},off:function(e,t,n){return m.DOM.unbind(e,t,n)},fire:function(e,t,n){return m.DOM.fire(e,t,n)},innerHtml:function(e,t){m.DOM.setHTML(e,t)}};function _e(e,t,n){var i,r,o,s,a,l,u,c,d,f;return d=we.getViewPort(),o=(r=we.getPos(t)).x,s=r.y,e.state.get("fixed")&&"static"===we.getRuntimeStyle(document.body,"position")&&(o-=d.x,s-=d.y),i=e.getEl(),a=(f=we.getSize(i)).width,l=f.height,u=(f=we.getSize(t)).width,c=f.height,"b"===(n=(n||"").split(""))[0]&&(s+=c),"r"===n[1]&&(o+=u),"c"===n[0]&&(s+=Math.round(c/2)),"c"===n[1]&&(o+=Math.round(u/2)),"b"===n[3]&&(s-=l),"r"===n[4]&&(o-=a),"c"===n[3]&&(s-=Math.round(l/2)),"c"===n[4]&&(o-=Math.round(a/2)),{x:o,y:s,w:a,h:l}}var Re={testMoveRel:function(e,t){for(var n=we.getViewPort(),i=0;i<t.length;i++){var r=_e(this,e,t[i]);if(this.state.get("fixed")){if(r.x>0&&r.x+r.w<n.w&&r.y>0&&r.y+r.h<n.h)return t[i]}else if(r.x>n.x&&r.x+r.w<n.w+n.x&&r.y>n.y&&r.y+r.h<n.h+n.y)return t[i]}return t[0]},moveRel:function(e,t){"string"!=typeof t&&(t=this.testMoveRel(e,t));var n=_e(this,e,t);return this.moveTo(n.x,n.y)},moveBy:function(e,t){var n=this.layoutRect();return this.moveTo(n.x+e,n.y+t),this},moveTo:function(e,t){var n=this;function i(e,t,n){return e<0?0:e+n>t&&(e=t-n)<0?0:e}if(n.settings.constrainToViewport){var r=we.getViewPort(window),o=n.layoutRect();e=i(e,r.w+r.x,o.w),t=i(t,r.h+r.y,o.h)}return n.state.get("rendered")?n.layoutRect({x:e,y:t}).repaint():(n.settings.x=e,n.settings.y=t),n.fire("move",{x:e,y:t}),n}},Ce=tinymce.util.Tools.resolve("tinymce.util.Class"),ke=tinymce.util.Tools.resolve("tinymce.util.EventDispatcher"),Ee=function(e){var t;if(e)return"number"==typeof e?{top:e=e||0,left:e,bottom:e,right:e}:(1===(t=(e=e.split(" ")).length)?e[1]=e[2]=e[3]=e[0]:2===t?(e[2]=e[0],e[3]=e[1]):3===t&&(e[3]=e[1]),{top:parseInt(e[0],10)||0,right:parseInt(e[1],10)||0,bottom:parseInt(e[2],10)||0,left:parseInt(e[3],10)||0})},He=function(e,t){function n(t){var n=parseFloat(function(t){var n=e.ownerDocument.defaultView;if(n){var i=n.getComputedStyle(e,null);return i?(t=t.replace(/[A-Z]/g,function(e){return"-"+e}),i.getPropertyValue(t)):null}return e.currentStyle[t]}(t));return isNaN(n)?0:n}return{top:n(t+"TopWidth"),right:n(t+"RightWidth"),bottom:n(t+"BottomWidth"),left:n(t+"LeftWidth")}};function Se(){}function Me(e){this.cls=[],this.cls._map={},this.onchange=e||Se,this.prefix=""}a.extend(Me.prototype,{add:function(e){return e&&!this.contains(e)&&(this.cls._map[e]=!0,this.cls.push(e),this._change()),this},remove:function(e){if(this.contains(e)){var t=void 0;for(t=0;t<this.cls.length&&this.cls[t]!==e;t++);this.cls.splice(t,1),delete this.cls._map[e],this._change()}return this},toggle:function(e,t){var n=this.contains(e);return n!==t&&(n?this.remove(e):this.add(e),this._change()),this},contains:function(e){return!!this.cls._map[e]},_change:function(){delete this.clsValue,this.onchange.call(this)}}),Me.prototype.toString=function(){var e;if(this.clsValue)return this.clsValue;e="";for(var t=0;t<this.cls.length;t++)t>0&&(e+=" "),e+=this.prefix+this.cls[t];return e};var Te,Pe,We,De=/^([\w\\*]+)?(?:#([\w\-\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i,Ne=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,Ae=/^\s*|\s*$/g,Be=Ce.extend({init:function(e){var t=this.match;function n(e,n,r){var o;function s(e){e&&n.push(e)}return s(function(e){if(e)return e=e.toLowerCase(),function(t){return"*"===e||t.type===e}}((o=De.exec(e.replace(Ae,"")))[1])),s(function(e){if(e)return function(t){return t._name===e}}(o[2])),s(function(e){if(e)return e=e.split("."),function(t){for(var n=e.length;n--;)if(!t.classes.contains(e[n]))return!1;return!0}}(o[3])),s(function(e,t,n){if(e)return function(i){var r=i[e]?i[e]():"";return t?"="===t?r===n:"*="===t?r.indexOf(n)>=0:"~="===t?(" "+r+" ").indexOf(" "+n+" ")>=0:"!="===t?r!==n:"^="===t?0===r.indexOf(n):"$="===t&&r.substr(r.length-n.length)===n:!!n}}(o[4],o[5],o[6])),s(function(e){var n;if(e)return(e=/(?:not\((.+)\))|(.+)/i.exec(e))[1]?(n=i(e[1],[]),function(e){return!t(e,n)}):(e=e[2],function(t,n,i){return"first"===e?0===n:"last"===e?n===i-1:"even"===e?n%2==0:"odd"===e?n%2==1:!!t[e]&&t[e]()})}(o[7])),n.pseudo=!!o[7],n.direct=r,n}function i(e,t){var r,o,s,a=[];do{if(Ne.exec(""),(o=Ne.exec(e))&&(e=o[3],a.push(o[1]),o[2])){r=o[3];break}}while(o);for(r&&i(r,t),e=[],s=0;s<a.length;s++)">"!==a[s]&&e.push(n(a[s],[],">"===a[s-1]));return t.push(e),t}this._selectors=i(e,[])},match:function(e,t){var n,i,r,o,s,a,l,u,c,d,f,h,m;for(n=0,i=(t=t||this._selectors).length;n<i;n++){for(m=e,h=0,r=(o=(s=t[n]).length)-1;r>=0;r--)for(u=s[r];m;){if(u.pseudo)for(c=d=(f=m.parent().items()).length;c--&&f[c]!==m;);for(a=0,l=u.length;a<l;a++)if(!u[a](m,c,d)){a=l+1;break}if(a===l){h++;break}if(r===o-1)break;m=m.parent()}if(h===o)return!0}return!1},find:function(e){var t,n,i=[],r=this._selectors;function o(e,t,n){var r,s,a,l,u,c=t[n];for(r=0,s=e.length;r<s;r++){for(u=e[r],a=0,l=c.length;a<l;a++)if(!c[a](u,r,s)){a=l+1;break}if(a===l)n===t.length-1?i.push(u):u.items&&o(u.items(),t,n+1);else if(c.direct)return;u.items&&o(u.items(),t,n)}}if(e.items){for(t=0,n=r.length;t<n;t++)o(e.items(),r[t],0);n>1&&(i=function(e){for(var t,n=[],i=e.length;i--;)(t=e[i]).__checked||(n.push(t),t.__checked=1);for(i=n.length;i--;)delete n[i].__checked;return n}(i))}return Te||(Te=Be.Collection),new Te(i)}}),Oe=Array.prototype.push,ze=Array.prototype.slice;We={length:0,init:function(e){e&&this.add(e)},add:function(e){return a.isArray(e)?Oe.apply(this,e):e instanceof Pe?this.add(e.toArray()):Oe.call(this,e),this},set:function(e){var t,n=this,i=n.length;for(n.length=0,n.add(e),t=n.length;t<i;t++)delete n[t];return n},filter:function(e){var t,n,i,r,o=[];for("string"==typeof e?(e=new Be(e),r=function(t){return e.match(t)}):r=e,t=0,n=this.length;t<n;t++)r(i=this[t])&&o.push(i);return new Pe(o)},slice:function(){return new Pe(ze.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},each:function(e){return a.each(this,e),this},toArray:function(){return a.toArray(this)},indexOf:function(e){for(var t=this.length;t--&&this[t]!==e;);return t},reverse:function(){return new Pe(a.toArray(this).reverse())},hasClass:function(e){return!!this[0]&&this[0].classes.contains(e)},prop:function(e,t){var n;return t!==undefined?(this.each(function(n){n[e]&&n[e](t)}),this):(n=this[0])&&n[e]?n[e]():void 0},exec:function(e){var t=a.toArray(arguments).slice(1);return this.each(function(n){n[e]&&n[e].apply(n,t)}),this},remove:function(){for(var e=this.length;e--;)this[e].remove();return this},addClass:function(e){return this.each(function(t){t.classes.add(e)})},removeClass:function(e){return this.each(function(t){t.classes.remove(e)})}},a.each("fire on off show hide append prepend before after reflow".split(" "),function(e){We[e]=function(){var t=a.toArray(arguments);return this.each(function(n){e in n&&n[e].apply(n,t)}),this}}),a.each("text name disabled active selected checked visible parent value data".split(" "),function(e){We[e]=function(t){return this.prop(e,t)}}),Pe=Ce.extend(We),Be.Collection=Pe;var Le=Pe,Ie=function(e){this.create=e.create};Ie.create=function(e,t){return new Ie({create:function(n,i){var r,o=function(e){n.set(i,e.value)};return n.on("change:"+i,function(n){e.set(t,n.value)}),e.on("change:"+t,o),(r=n._bindings)||(r=n._bindings=[],n.on("destroy",function(){for(var e=r.length;e--;)r[e]()})),r.push(function(){e.off("change:"+t,o)}),e.get(t)}})};var Fe=tinymce.util.Tools.resolve("tinymce.util.Observable");function Ve(e){return e.nodeType>0}var Ue,Ye,$e=Ce.extend({Mixins:[Fe],init:function(e){var t,n;for(t in e=e||{})(n=e[t])instanceof Ie&&(e[t]=n.create(this,t));this.data=e},set:function(e,t){var n,i,r=this.data[e];if(t instanceof Ie&&(t=t.create(this,e)),"object"==typeof e){for(n in e)this.set(n,e[n]);return this}return function o(e,t){var n,i;if(e===t)return!0;if(null===e||null===t)return e===t;if("object"!=typeof e||"object"!=typeof t)return e===t;if(a.isArray(t)){if(e.length!==t.length)return!1;for(n=e.length;n--;)if(!o(e[n],t[n]))return!1}if(Ve(e)||Ve(t))return e===t;for(n in i={},t){if(!o(e[n],t[n]))return!1;i[n]=!0}for(n in e)if(!i[n]&&!o(e[n],t[n]))return!1;return!0}(r,t)||(this.data[e]=t,i={target:this,name:e,value:t,oldValue:r},this.fire("change:"+e,i),this.fire("change",i)),this},get:function(e){return this.data[e]},has:function(e){return e in this.data},bind:function(e){return Ie.create(this,e)},destroy:function(){this.fire("destroy")}}),je={},qe={add:function(e){var t=e.parent();if(t){if(!t._layout||t._layout.isNative())return;je[t._id]||(je[t._id]=t),Ue||(Ue=!0,C.requestAnimationFrame(function(){var e,t;for(e in Ue=!1,je)(t=je[e]).state.get("rendered")&&t.reflow();je={}},document.body))}},remove:function(e){je[e._id]&&delete je[e._id]}},Xe="onmousewheel"in document,Je=!1,Ge=0,Ke={Statics:{classPrefix:"mce-"},isRtl:function(){return Ye.rtl},classPrefix:"mce-",init:function(e){var t,n,i=this;function r(e){var t;for(e=e.split(" "),t=0;t<e.length;t++)i.classes.add(e[t])}i.settings=e=a.extend({},i.Defaults,e),i._id=e.id||"mceu_"+Ge++,i._aria={role:e.role},i._elmCache={},i.$=ye,i.state=new $e({visible:!0,active:!1,disabled:!1,value:""}),i.data=new $e(e.data),i.classes=new Me(function(){i.state.get("rendered")&&(i.getEl().className=this.toString())}),i.classes.prefix=i.classPrefix,(t=e.classes)&&(i.Defaults&&(n=i.Defaults.classes)&&t!==n&&r(n),r(t)),a.each("title text name visible disabled active value".split(" "),function(t){t in e&&i[t](e[t])}),i.on("click",function(){if(i.disabled())return!1}),i.settings=e,i.borderBox=Ee(e.border),i.paddingBox=Ee(e.padding),i.marginBox=Ee(e.margin),e.hidden&&i.hide()},Properties:"parent,name",getContainerElm:function(){return we.getContainer()},getParentCtrl:function(e){for(var t,n=this.getRoot().controlIdLookup;e&&n&&!(t=n[e.id]);)e=e.parentNode;return t},initLayoutRect:function(){var e,t,n,i,r,o,s,a,l,u,c=this,d=c.settings,f=c.getEl();e=c.borderBox=c.borderBox||He(f,"border"),c.paddingBox=c.paddingBox||He(f,"padding"),c.marginBox=c.marginBox||He(f,"margin"),u=we.getSize(f),a=d.minWidth,l=d.minHeight,r=a||u.width,o=l||u.height,n=d.width,i=d.height,s=void 0!==(s=d.autoResize)?s:!n&&!i,n=n||r,i=i||o;var h=e.left+e.right,m=e.top+e.bottom,g=d.maxWidth||65535,p=d.maxHeight||65535;return c._layoutRect=t={x:d.x||0,y:d.y||0,w:n,h:i,deltaW:h,deltaH:m,contentW:n-h,contentH:i-m,innerW:n-h,innerH:i-m,startMinWidth:a||0,startMinHeight:l||0,minW:Math.min(r,g),minH:Math.min(o,p),maxW:g,maxH:p,autoResize:s,scrollW:0},c._lastLayoutRect={},t},layoutRect:function(e){var t,n,i,r,o,s=this,a=s._layoutRect;return a||(a=s.initLayoutRect()),e?(i=a.deltaW,r=a.deltaH,e.x!==undefined&&(a.x=e.x),e.y!==undefined&&(a.y=e.y),e.minW!==undefined&&(a.minW=e.minW),e.minH!==undefined&&(a.minH=e.minH),(n=e.w)!==undefined&&(n=(n=n<a.minW?a.minW:n)>a.maxW?a.maxW:n,a.w=n,a.innerW=n-i),(n=e.h)!==undefined&&(n=(n=n<a.minH?a.minH:n)>a.maxH?a.maxH:n,a.h=n,a.innerH=n-r),(n=e.innerW)!==undefined&&(n=(n=n<a.minW-i?a.minW-i:n)>a.maxW-i?a.maxW-i:n,a.innerW=n,a.w=n+i),(n=e.innerH)!==undefined&&(n=(n=n<a.minH-r?a.minH-r:n)>a.maxH-r?a.maxH-r:n,a.innerH=n,a.h=n+r),e.contentW!==undefined&&(a.contentW=e.contentW),e.contentH!==undefined&&(a.contentH=e.contentH),(t=s._lastLayoutRect).x===a.x&&t.y===a.y&&t.w===a.w&&t.h===a.h||((o=Ye.repaintControls)&&o.map&&!o.map[s._id]&&(o.push(s),o.map[s._id]=!0),t.x=a.x,t.y=a.y,t.w=a.w,t.h=a.h),s):a},repaint:function(){var e,t,n,i,r,o,s,a,l,u,c=this;l=document.createRange?function(e){return e}:Math.round,e=c.getEl().style,i=c._layoutRect,a=c._lastRepaintRect||{},o=(r=c.borderBox).left+r.right,s=r.top+r.bottom,i.x!==a.x&&(e.left=l(i.x)+"px",a.x=i.x),i.y!==a.y&&(e.top=l(i.y)+"px",a.y=i.y),i.w!==a.w&&(u=l(i.w-o),e.width=(u>=0?u:0)+"px",a.w=i.w),i.h!==a.h&&(u=l(i.h-s),e.height=(u>=0?u:0)+"px",a.h=i.h),c._hasBody&&i.innerW!==a.innerW&&(u=l(i.innerW),(n=c.getEl("body"))&&((t=n.style).width=(u>=0?u:0)+"px"),a.innerW=i.innerW),c._hasBody&&i.innerH!==a.innerH&&(u=l(i.innerH),(n=n||c.getEl("body"))&&((t=t||n.style).height=(u>=0?u:0)+"px"),a.innerH=i.innerH),c._lastRepaintRect=a,c.fire("repaint",{},!1)},updateLayoutRect:function(){var e=this;e.parent()._lastRect=null,we.css(e.getEl(),{width:"",height:""}),e._layoutRect=e._lastRepaintRect=e._lastLayoutRect=null,e.initLayoutRect()},on:function(e,t){var n,i,r,o=this;return Ze(o).on(e,"string"!=typeof(n=t)?n:function(e){return i||o.parentsAndSelf().each(function(e){var t=e.settings.callbacks;if(t&&(i=t[n]))return r=e,!1}),i?i.call(r,e):(e.action=n,void this.fire("execute",e))}),o},off:function(e,t){return Ze(this).off(e,t),this},fire:function(e,t,n){if((t=t||{}).control||(t.control=this),t=Ze(this).fire(e,t),!1!==n&&this.parent)for(var i=this.parent();i&&!t.isPropagationStopped();)i.fire(e,t,!1),i=i.parent();return t},hasEventListeners:function(e){return Ze(this).has(e)},parents:function(e){var t,n=new Le;for(t=this.parent();t;t=t.parent())n.add(t);return e&&(n=n.filter(e)),n},parentsAndSelf:function(e){return new Le(this).add(this.parents(e))},next:function(){var e=this.parent().items();return e[e.indexOf(this)+1]},prev:function(){var e=this.parent().items();return e[e.indexOf(this)-1]},innerHtml:function(e){return this.$el.html(e),this},getEl:function(e){var t=e?this._id+"-"+e:this._id;return this._elmCache[t]||(this._elmCache[t]=ye("#"+t)[0]),this._elmCache[t]},show:function(){return this.visible(!0)},hide:function(){return this.visible(!1)},focus:function(){try{this.getEl().focus()}catch(e){}return this},blur:function(){return this.getEl().blur(),this},aria:function(e,t){var n=this,i=n.getEl(n.ariaTarget);return void 0===t?n._aria[e]:(n._aria[e]=t,n.state.get("rendered")&&i.setAttribute("role"===e?e:"aria-"+e,t),n)},encode:function(e,t){return!1!==t&&(e=this.translate(e)),(e||"").replace(/[&<>"]/g,function(e){return"&#"+e.charCodeAt(0)+";"})},translate:function(e){return Ye.translate?Ye.translate(e):e},before:function(e){var t=this.parent();return t&&t.insert(e,t.items().indexOf(this),!0),this},after:function(e){var t=this.parent();return t&&t.insert(e,t.items().indexOf(this)),this},remove:function(){var e,t,n=this,i=n.getEl(),r=n.parent();if(n.items){var o=n.items().toArray();for(t=o.length;t--;)o[t].remove()}r&&r.items&&(e=[],r.items().each(function(t){t!==n&&e.push(t)}),r.items().set(e),r._lastRect=null),n._eventsRoot&&n._eventsRoot===n&&ye(i).off();var s=n.getRoot().controlIdLookup;return s&&delete s[n._id],i&&i.parentNode&&i.parentNode.removeChild(i),n.state.set("rendered",!1),n.state.destroy(),n.fire("remove"),n},renderBefore:function(e){return ye(e).before(this.renderHtml()),this.postRender(),this},renderTo:function(e){return ye(e||this.getContainerElm()).append(this.renderHtml()),this.postRender(),this},preRender:function(){},render:function(){},renderHtml:function(){return'<div id="'+this._id+'" class="'+this.classes+'"></div>'},postRender:function(){var e,t,n,i,r,o=this,s=o.settings;for(i in o.$el=ye(o.getEl()),o.state.set("rendered",!0),s)0===i.indexOf("on")&&o.on(i.substr(2),s[i]);if(o._eventsRoot){for(n=o.parent();!r&&n;n=n.parent())r=n._eventsRoot;if(r)for(i in r._nativeEvents)o._nativeEvents[i]=!0}Qe(o),s.style&&(e=o.getEl())&&(e.setAttribute("style",s.style),e.style.cssText=s.style),o.settings.border&&(t=o.borderBox,o.$el.css({"border-top-width":t.top,"border-right-width":t.right,"border-bottom-width":t.bottom,"border-left-width":t.left}));var a=o.getRoot();for(var l in a.controlIdLookup||(a.controlIdLookup={}),a.controlIdLookup[o._id]=o,o._aria)o.aria(l,o._aria[l]);!1===o.state.get("visible")&&(o.getEl().style.display="none"),o.bindStates(),o.state.on("change:visible",function(e){var t,n=e.value;o.state.get("rendered")&&(o.getEl().style.display=!1===n?"none":"",o.getEl().getBoundingClientRect()),(t=o.parent())&&(t._lastRect=null),o.fire(n?"show":"hide"),qe.add(o)}),o.fire("postrender",{},!1)},bindStates:function(){},scrollIntoView:function(e){var t,n,i,r,o,s,a=this.getEl(),l=a.parentNode,u=function(e,t){var n,i,r=e;for(n=i=0;r&&r!==t&&r.nodeType;)n+=r.offsetLeft||0,i+=r.offsetTop||0,r=r.offsetParent;return{x:n,y:i}}(a,l);return t=u.x,n=u.y,i=a.offsetWidth,r=a.offsetHeight,o=l.clientWidth,s=l.clientHeight,"end"===e?(t-=o-i,n-=s-r):"center"===e&&(t-=o/2-i/2,n-=s/2-r/2),l.scrollLeft=t,l.scrollTop=n,this},getRoot:function(){for(var e,t=this,n=[];t;){if(t.rootControl){e=t.rootControl;break}n.push(t),e=t,t=t.parent()}e||(e=this);for(var i=n.length;i--;)n[i].rootControl=e;return e},reflow:function(){qe.remove(this);var e=this.parent();return e&&e._layout&&!e._layout.isNative()&&e.reflow(),this}};function Ze(e){return e._eventDispatcher||(e._eventDispatcher=new ke({scope:e,toggleEvent:function(t,n){n&&ke.isNative(t)&&(e._nativeEvents||(e._nativeEvents={}),e._nativeEvents[t]=!0,e.state.get("rendered")&&Qe(e))}})),e._eventDispatcher}function Qe(e){var t,n,i,r,o,s;function a(t){var n=e.getParentCtrl(t.target);n&&n.fire(t.type,t)}function l(){var e=r._lastHoverCtrl;e&&(e.fire("mouseleave",{target:e.getEl()}),e.parents().each(function(e){e.fire("mouseleave",{target:e.getEl()})}),r._lastHoverCtrl=null)}function u(t){var n,i,o,s=e.getParentCtrl(t.target),a=r._lastHoverCtrl,l=0;if(s!==a){if(r._lastHoverCtrl=s,(i=s.parents().toArray().reverse()).push(s),a){for((o=a.parents().toArray().reverse()).push(a),l=0;l<o.length&&i[l]===o[l];l++);for(n=o.length-1;n>=l;n--)(a=o[n]).fire("mouseleave",{target:a.getEl()})}for(n=l;n<i.length;n++)(s=i[n]).fire("mouseenter",{target:s.getEl()})}}function c(t){t.preventDefault(),"mousewheel"===t.type?(t.deltaY=-.025*t.wheelDelta,t.wheelDeltaX&&(t.deltaX=-.025*t.wheelDeltaX)):(t.deltaX=0,t.deltaY=t.detail),t=e.fire("wheel",t)}if(o=e._nativeEvents){for((i=e.parents().toArray()).unshift(e),t=0,n=i.length;!r&&t<n;t++)r=i[t]._eventsRoot;for(r||(r=i[i.length-1]||e),e._eventsRoot=r,n=t,t=0;t<n;t++)i[t]._eventsRoot=r;var d=r._delegates;for(s in d||(d=r._delegates={}),o){if(!o)return!1;"wheel"!==s||Je?("mouseenter"===s||"mouseleave"===s?r._hasMouseEnter||(ye(r.getEl()).on("mouseleave",l).on("mouseover",u),r._hasMouseEnter=1):d[s]||(ye(r.getEl()).on(s,a),d[s]=!0),o[s]=!1):Xe?ye(e.getEl()).on("mousewheel",c):ye(e.getEl()).on("DOMMouseScroll",c)}}}a.each("text title visible disabled active value".split(" "),function(e){Ke[e]=function(t){return 0===arguments.length?this.state.get(e):(void 0!==t&&this.state.set(e,t),this)}});var et=Ye=Ce.extend(Ke),tt=function(e){return!!e.getAttribute("data-mce-tabstop")},nt=function(e){var t,n,i=e.root;function r(e){return e&&1===e.nodeType}try{t=document.activeElement}catch(y){t=document.body}function o(e){return r(e=e||t)?e.getAttribute("role"):null}function s(e){for(var n,i=e||t;i=i.parentNode;)if(n=o(i))return n}function a(e){var n=t;if(r(n))return n.getAttribute("aria-"+e)}function l(e){var t=e.tagName.toUpperCase();return"INPUT"===t||"TEXTAREA"===t||"SELECT"===t}function u(e){var t=[];return function n(e){if(1===e.nodeType&&"none"!==e.style.display&&!e.disabled){var i;(l(i=e)&&!i.hidden||tt(i)||/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell|slider)$/.test(o(i)))&&t.push(e);for(var r=0;r<e.childNodes.length;r++)n(e.childNodes[r])}}(e||i.getEl()),t}function c(e){var t,i;(i=(e=e||n).parents().toArray()).unshift(e);for(var r=0;r<i.length&&!(t=i[r]).settings.ariaRoot;r++);return t}function d(e,t){return e<0?e=t.length-1:e>=t.length&&(e=0),t[e]&&t[e].focus(),e}function f(e,n){var i=-1,r=c();n=n||u(r.getEl());for(var o=0;o<n.length;o++)n[o]===t&&(i=o);i+=e,r.lastAriaIndex=d(i,n)}function h(){"tablist"===s()?f(-1,u(t.parentNode)):n.parent().submenu?v():f(-1)}function m(){var e=o(),n=s();"tablist"===n?f(1,u(t.parentNode)):"menuitem"===e&&"menu"===n&&a("haspopup")?b():f(1)}function g(){f(-1)}function p(){var e=o(),t=s();"menuitem"===e&&"menubar"===t?b():"button"===e&&a("haspopup")?b({key:"down"}):f(1)}function v(){n.fire("cancel")}function b(e){e=e||{},n.fire("click",{target:t,aria:e})}return n=i.getParentCtrl(t),i.on("keydown",function(e){function i(e,n){l(t)||tt(t)||"slider"!==o(t)&&!1!==n(e)&&e.preventDefault()}if(!e.isDefaultPrevented())switch(e.keyCode){case 37:i(e,h);break;case 39:i(e,m);break;case 38:i(e,g);break;case 40:i(e,p);break;case 27:v();break;case 14:case 13:case 32:i(e,b);break;case 9:!function(e){if("tablist"===s()){var t=u(n.getEl("body"))[0];t&&t.focus()}else f(e.shiftKey?-1:1)}(e),e.preventDefault()}}),i.on("focusin",function(e){t=e.target,n=e.control}),{focusFirst:function(e){var t=c(e),n=u(t.getEl());t.settings.ariaRemember&&"lastAriaIndex"in t?d(t.lastAriaIndex,n):d(0,n)}}},it={},rt=et.extend({init:function(e){var t=this;t._super(e),(e=t.settings).fixed&&t.state.set("fixed",!0),t._items=new Le,t.isRtl()&&t.classes.add("rtl"),t.bodyClasses=new Me(function(){t.state.get("rendered")&&(t.getEl("body").className=this.toString())}),t.bodyClasses.prefix=t.classPrefix,t.classes.add("container"),t.bodyClasses.add("container-body"),e.containerCls&&t.classes.add(e.containerCls),t._layout=g.create((e.layout||"")+"layout"),t.settings.items?t.add(t.settings.items):t.add(t.render()),t._hasBody=!0},items:function(){return this._items},find:function(e){return(e=it[e]=it[e]||new Be(e)).find(this)},add:function(e){return this.items().add(this.create(e)).parent(this),this},focus:function(e){var t,n,i,r=this;if(!e||!(n=r.keyboardNav||r.parents().eq(-1)[0].keyboardNav))return i=r.find("*"),r.statusbar&&i.add(r.statusbar.items()),i.each(function(e){if(e.settings.autofocus)return t=null,!1;e.canFocus&&(t=t||e)}),t&&t.focus(),r;n.focusFirst(r)},replace:function(e,t){for(var n,i=this.items(),r=i.length;r--;)if(i[r]===e){i[r]=t;break}r>=0&&((n=t.getEl())&&n.parentNode.removeChild(n),(n=e.getEl())&&n.parentNode.removeChild(n)),t.parent(this)},create:function(e){var t,n=this,i=[];return a.isArray(e)||(e=[e]),a.each(e,function(e){e&&(e instanceof et||("string"==typeof e&&(e={type:e}),t=a.extend({},n.settings.defaults,e),e.type=t.type=t.type||e.type||n.settings.defaultType||(t.defaults?t.defaults.type:null),e=g.create(t)),i.push(e))}),i},renderNew:function(){var e=this;return e.items().each(function(t,n){var i;t.parent(e),t.state.get("rendered")||((i=e.getEl("body")).hasChildNodes()&&n<=i.childNodes.length-1?ye(i.childNodes[n]).before(t.renderHtml()):ye(i).append(t.renderHtml()),t.postRender(),qe.add(t))}),e._layout.applyClasses(e.items().filter(":visible")),e._lastRect=null,e},append:function(e){return this.add(e).renderNew()},prepend:function(e){return this.items().set(this.create(e).concat(this.items().toArray())),this.renderNew()},insert:function(e,t,n){var i,r,o;return e=this.create(e),i=this.items(),!n&&t<i.length-1&&(t+=1),t>=0&&t<i.length&&(r=i.slice(0,t).toArray(),o=i.slice(t).toArray(),i.set(r.concat(e,o))),this.renderNew()},fromJSON:function(e){for(var t in e)this.find("#"+t).value(e[t]);return this},toJSON:function(){var e={};return this.find("*").each(function(t){var n=t.name(),i=t.value();n&&void 0!==i&&(e[n]=i)}),e},renderHtml:function(){var e=this,t=e._layout,n=this.settings.role;return e.preRender(),t.preRender(e),'<div id="'+e._id+'" class="'+e.classes+'"'+(n?' role="'+this.settings.role+'"':"")+'><div id="'+e._id+'-body" class="'+e.bodyClasses+'">'+(e.settings.html||"")+t.renderHtml(e)+"</div></div>"},postRender:function(){var e,t=this;return t.items().exec("postRender"),t._super(),t._layout.postRender(t),t.state.set("rendered",!0),t.settings.style&&t.$el.css(t.settings.style),t.settings.border&&(e=t.borderBox,t.$el.css({"border-top-width":e.top,"border-right-width":e.right,"border-bottom-width":e.bottom,"border-left-width":e.left})),t.parent()||(t.keyboardNav=nt({root:t})),t},initLayoutRect:function(){var e=this._super();return this._layout.recalc(this),e},recalc:function(){var e=this,t=e._layoutRect,n=e._lastRect;if(!n||n.w!==t.w||n.h!==t.h)return e._layout.recalc(e),t=e.layoutRect(),e._lastRect={x:t.x,y:t.y,w:t.w,h:t.h},!0},reflow:function(){var e;if(qe.remove(this),this.visible()){for(et.repaintControls=[],et.repaintControls.map={},this.recalc(),e=et.repaintControls.length;e--;)et.repaintControls[e].repaint();"flow"!==this.settings.layout&&"stack"!==this.settings.layout&&this.repaint(),et.repaintControls=[]}return this}});function ot(e){var t,n;if(e.changedTouches)for(t="screenX screenY pageX pageY clientX clientY".split(" "),n=0;n<t.length;n++)e[t[n]]=e.changedTouches[0][t[n]]}var st,at,lt,ut,ct=function(e,t){var n,i,r,o,s,a,l,u=t.document||document;function c(){return u.getElementById(t.handle||e)}t=t||{},r=function(e){var r,d,f,h,m,g,p,v,b,y,x,w,_=(r=u,y=Math.max,d=r.documentElement,f=r.body,h=y(d.scrollWidth,f.scrollWidth),m=y(d.clientWidth,f.clientWidth),g=y(d.offsetWidth,f.offsetWidth),p=y(d.scrollHeight,f.scrollHeight),v=y(d.clientHeight,f.clientHeight),b=y(d.offsetHeight,f.offsetHeight),{width:h<g?m:h,height:p<b?v:p});ot(e),e.preventDefault(),i=e.button,x=c(),a=e.screenX,l=e.screenY,w=window.getComputedStyle?window.getComputedStyle(x,null).getPropertyValue("cursor"):x.runtimeStyle.cursor,n=ye("<div></div>").css({position:"absolute",top:0,left:0,width:_.width,height:_.height,zIndex:2147483647,opacity:1e-4,cursor:w}).appendTo(u.body),ye(u).on("mousemove touchmove",s).on("mouseup touchend",o),t.start(e)},s=function(e){if(ot(e),e.button!==i)return o(e);e.deltaX=e.screenX-a,e.deltaY=e.screenY-l,e.preventDefault(),t.drag(e)},o=function(e){ot(e),ye(u).off("mousemove touchmove",s).off("mouseup touchend",o),n.remove(),t.stop&&t.stop(e)},this.destroy=function(){ye(c()).off()},ye(c()).on("mousedown touchstart",r)},dt={init:function(){this.on("repaint",this.renderScroll)},renderScroll:function(){var e=this,t=2;function n(){var n,i,r;function o(r,o,s,a,l,u){var c,d,f,h,m,g,p,v;if(d=e.getEl("scroll"+r)){if(p=o.toLowerCase(),v=s.toLowerCase(),ye(e.getEl("absend")).css(p,e.layoutRect()[a]-1),!l)return void ye(d).css("display","none");ye(d).css("display","block"),c=e.getEl("body"),f=e.getEl("scroll"+r+"t"),h=c["client"+s]-2*t,m=(h-=n&&i?d["client"+u]:0)/c["scroll"+s],(g={})[p]=c["offset"+o]+t,g[v]=h,ye(d).css(g),(g={})[p]=c["scroll"+o]*m,g[v]=h*m,ye(f).css(g)}}r=e.getEl("body"),n=r.scrollWidth>r.clientWidth,i=r.scrollHeight>r.clientHeight,o("h","Left","Width","contentW",n,"Height"),o("v","Top","Height","contentH",i,"Width")}e.settings.autoScroll&&(e._hasScroll||(e._hasScroll=!0,function(){function n(n,i,r,o,s){var a,l=e._id+"-scroll"+n,u=e.classPrefix;ye(e.getEl()).append('<div id="'+l+'" class="'+u+"scrollbar "+u+"scrollbar-"+n+'"><div id="'+l+'t" class="'+u+'scrollbar-thumb"></div></div>'),e.draghelper=new ct(l+"t",{start:function(){a=e.getEl("body")["scroll"+i],ye("#"+l).addClass(u+"active")},drag:function(l){var u,c,d,f,h=e.layoutRect();c=h.contentW>h.innerW,d=h.contentH>h.innerH,f=e.getEl("body")["client"+r]-2*t,u=(f-=c&&d?e.getEl("scroll"+n)["client"+s]:0)/e.getEl("body")["scroll"+r],e.getEl("body")["scroll"+i]=a+l["delta"+o]/u},stop:function(){ye("#"+l).removeClass(u+"active")}})}e.classes.add("scroll"),n("v","Top","Height","Y","Width"),n("h","Left","Width","X","Height")}(),e.on("wheel",function(t){var i=e.getEl("body");i.scrollLeft+=10*(t.deltaX||0),i.scrollTop+=10*t.deltaY,n()}),ye(e.getEl("body")).on("scroll",n)),n())}},ft=rt.extend({Defaults:{layout:"fit",containerCls:"panel"},Mixins:[dt],renderHtml:function(){var e=this,t=e._layout,n=e.settings.html;return e.preRender(),t.preRender(e),void 0===n?n='<div id="'+e._id+'-body" class="'+e.bodyClasses+'">'+t.renderHtml(e)+"</div>":("function"==typeof n&&(n=n.call(e)),e._hasBody=!1),'<div id="'+e._id+'" class="'+e.classes+'" hidefocus="1" tabindex="-1" role="group">'+(e._preBodyHtml||"")+n+"</div>"}}),ht={resizeToContent:function(){this._layoutRect.autoResize=!0,this._lastRect=null,this.reflow()},resizeTo:function(e,t){if(e<=1||t<=1){var n=we.getWindowSize();e=e<=1?e*n.w:e,t=t<=1?t*n.h:t}return this._layoutRect.autoResize=!1,this.layoutRect({minW:e,minH:t,w:e,h:t}).reflow()},resizeBy:function(e,t){var n=this.layoutRect();return this.resizeTo(n.w+e,n.h+t)}},mt=[],gt=[];function pt(e,t){for(;e;){if(e===t)return!0;e=e.parent()}}function vt(){st||(st=function(e){2!==e.button&&function(e){for(var t=mt.length;t--;){var n=mt[t],i=n.getParentCtrl(e.target);if(n.settings.autohide){if(i&&(pt(i,n)||n.parent()===i))continue;(e=n.fire("autohide",{target:e.target})).isDefaultPrevented()||n.hide()}}}(e)},ye(document).on("click touchstart",st))}function bt(e){var t=we.getViewPort().y;function n(t,n){for(var i,r=0;r<mt.length;r++)if(mt[r]!==e)for(i=mt[r].parent();i&&(i=i.parent());)i===e&&mt[r].fixed(t).moveBy(0,n).repaint()}e.settings.autofix&&(e.state.get("fixed")?e._autoFixY>t&&(e.fixed(!1).layoutRect({y:e._autoFixY}).repaint(),n(!1,e._autoFixY-t)):(e._autoFixY=e.layoutRect().y,e._autoFixY<t&&(e.fixed(!0).layoutRect({y:0}).repaint(),n(!0,t-e._autoFixY))))}function yt(e,t){var n,i,r=xt.zIndex||65535;if(e)gt.push(t);else for(n=gt.length;n--;)gt[n]===t&&gt.splice(n,1);if(gt.length)for(n=0;n<gt.length;n++)gt[n].modal&&(r++,i=gt[n]),gt[n].getEl().style.zIndex=r,gt[n].zIndex=r,r++;var o=ye("#"+t.classPrefix+"modal-block",t.getContainerElm())[0];i?ye(o).css("z-index",i.zIndex-1):o&&(o.parentNode.removeChild(o),ut=!1),xt.currentZIndex=r}var xt=ft.extend({Mixins:[Re,ht],init:function(e){var t=this;t._super(e),t._eventsRoot=t,t.classes.add("floatpanel"),e.autohide&&(vt(),function(){if(!lt){var e=document.documentElement,t=e.clientWidth,n=e.clientHeight;lt=function(){document.all&&t===e.clientWidth&&n===e.clientHeight||(t=e.clientWidth,n=e.clientHeight,xt.hideAll())},ye(window).on("resize",lt)}}(),mt.push(t)),e.autofix&&(at||(at=function(){var e;for(e=mt.length;e--;)bt(mt[e])},ye(window).on("scroll",at)),t.on("move",function(){bt(this)})),t.on("postrender show",function(e){if(e.control===t){var n,i=t.classPrefix;t.modal&&!ut&&((n=ye("#"+i+"modal-block",t.getContainerElm()))[0]||(n=ye('<div id="'+i+'modal-block" class="'+i+"reset "+i+'fade"></div>').appendTo(t.getContainerElm())),C.setTimeout(function(){n.addClass(i+"in"),ye(t.getEl()).addClass(i+"in")}),ut=!0),yt(!0,t)}}),t.on("show",function(){t.parents().each(function(e){if(e.state.get("fixed"))return t.fixed(!0),!1})}),e.popover&&(t._preBodyHtml='<div class="'+t.classPrefix+'arrow"></div>',t.classes.add("popover").add("bottom").add(t.isRtl()?"end":"start")),t.aria("label",e.ariaLabel),t.aria("labelledby",t._id),t.aria("describedby",t.describedBy||t._id+"-none")},fixed:function(e){var t=this;if(t.state.get("fixed")!==e){if(t.state.get("rendered")){var n=we.getViewPort();e?t.layoutRect().y-=n.y:t.layoutRect().y+=n.y}t.classes.toggle("fixed",e),t.state.set("fixed",e)}return t},show:function(){var e,t=this._super();for(e=mt.length;e--&&mt[e]!==this;);return-1===e&&mt.push(this),t},hide:function(){return wt(this),yt(!1,this),this._super()},hideAll:function(){xt.hideAll()},close:function(){return this.fire("close").isDefaultPrevented()||(this.remove(),yt(!1,this)),this},remove:function(){wt(this),this._super()},postRender:function(){return this.settings.bodyRole&&this.getEl("body").setAttribute("role",this.settings.bodyRole),this._super()}});function wt(e){var t;for(t=mt.length;t--;)mt[t]===e&&mt.splice(t,1);for(t=gt.length;t--;)gt[t]===e&&gt.splice(t,1)}xt.hideAll=function(){for(var e=mt.length;e--;){var t=mt[e];t&&t.settings.autohide&&(t.hide(),mt.splice(e,1))}};var _t,Rt=function(e){return!(!e||_.container)},Ct=function(e,t,n){var i,r,o=m.DOM,s=e.getParam("fixed_toolbar_container");s&&(r=o.select(s)[0]);var a=function(){if(i&&i.moveRel&&i.visible()&&!i._fixed){var t=e.selection.getScrollContainer(),n=e.getBody(),r=0,s=0;if(t){var a=o.getPos(n),l=o.getPos(t);r=Math.max(0,l.x-a.x),s=Math.max(0,l.y-a.y)}i.fixed(!1).moveRel(n,e.rtl?["tr-br","br-tr"]:["tl-bl","bl-tl","tr-br"]).moveBy(r,s)}},u=function(){i&&(i.show(),a(),o.addClass(e.getBody(),"mce-edit-focus"))},d=function(){i&&(i.hide(),xt.hideAll(),o.removeClass(e.getBody(),"mce-edit-focus"))},h=function(){i?i.visible()||u():(i=t.panel=g.create({type:r?"panel":"floatpanel",role:"application",classes:"tinymce tinymce-inline",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:Rt(r),fixed:Rt(r),border:1,items:[!1===l(e)?null:{type:"menubar",border:"0 0 1 0",items:oe(e)},B(e,c(e))]}),y(e),r?i.renderTo(r).reflow():i.renderTo().reflow(),w(e,i),u(),F(e),e.on("nodeChange",a),e.on("ResizeWindow",a),e.on("activate",u),e.on("deactivate",d),e.nodeChanged())};return e.settings.content_editable=!0,e.on("focus",function(){!1===f(e)&&n.skinUiCss?o.styleSheetLoader.load(n.skinUiCss,h,h):h()}),e.on("blur hide",d),e.on("remove",function(){i&&(i.remove(),i=null)}),!1===f(e)&&n.skinUiCss?o.styleSheetLoader.load(n.skinUiCss,ge(e)):ge(e)(),{}},kt=function(e,t){var n,i,r=this,o=et.classPrefix;r.show=function(s,a){function l(){n&&(ye(e).append('<div class="'+o+"throbber"+(t?" "+o+"throbber-inline":"")+'"></div>'),a&&a())}return r.hide(),n=!0,s?i=C.setTimeout(l,s):l(),r},r.hide=function(){var t=e.lastChild;return C.clearTimeout(i),t&&-1!==t.className.indexOf("throbber")&&t.parentNode.removeChild(t),n=!1,r}},Et=function(e,t){var n;e.on("ProgressState",function(e){n=n||new kt(t.panel.getEl("body")),e.state?n.show(e.time):n.hide()})},Ht=function(e,t,n){var i=function(e){var t=e.settings,n=t.skin,i=t.skin_url;if(!1!==n){var r=n||"lightgray";i=i?e.documentBaseURI.toAbsolute(i):s.baseURL+"/skins/"+r}return i}(e);return i&&(n.skinUiCss=i+"/skin.min.css",e.contentCSS.push(i+"/content"+(e.inline?".inline":"")+".min.css")),Et(e,t),e.getParam("inline",!1,"boolean")?Ct(e,t,n):be(e,t,n)},St=et.extend({Mixins:[Re],Defaults:{classes:"widget tooltip tooltip-n"},renderHtml:function(){var e=this,t=e.classPrefix;return'<div id="'+e._id+'" class="'+e.classes+'" role="presentation"><div class="'+t+'tooltip-arrow"></div><div class="'+t+'tooltip-inner">'+e.encode(e.state.get("text"))+"</div></div>"},bindStates:function(){var e=this;return e.state.on("change:text",function(t){e.getEl().lastChild.innerHTML=e.encode(t.value)}),e._super()},repaint:function(){var e,t;e=this.getEl().style,t=this._layoutRect,e.left=t.x+"px",e.top=t.y+"px",e.zIndex=131070}}),Mt=et.extend({init:function(e){var t=this;t._super(e),e=t.settings,t.canFocus=!0,e.tooltip&&!1!==Mt.tooltips&&(t.on("mouseenter",function(n){var i=t.tooltip().moveTo(-65535);if(n.control===t){var r=i.text(e.tooltip).show().testMoveRel(t.getEl(),["bc-tc","bc-tl","bc-tr"]);i.classes.toggle("tooltip-n","bc-tc"===r),i.classes.toggle("tooltip-nw","bc-tl"===r),i.classes.toggle("tooltip-ne","bc-tr"===r),i.moveRel(t.getEl(),r)}else i.hide()}),t.on("mouseleave mousedown click",function(){t.tooltip().hide()})),t.aria("label",e.ariaLabel||e.tooltip)},tooltip:function(){return _t||(_t=new St({type:"tooltip"})).renderTo(),_t},postRender:function(){var e=this,t=e.settings;e._super(),e.parent()||!t.width&&!t.height||(e.initLayoutRect(),e.repaint()),t.autofocus&&e.focus()},bindStates:function(){var e=this;function t(t){e.aria("disabled",t),e.classes.toggle("disabled",t)}function n(t){e.aria("pressed",t),e.classes.toggle("active",t)}return e.state.on("change:disabled",function(e){t(e.value)}),e.state.on("change:active",function(e){n(e.value)}),e.state.get("disabled")&&t(!0),e.state.get("active")&&n(!0),e._super()},remove:function(){this._super(),_t&&(_t.remove(),_t=null)}}),Tt=Mt.extend({Defaults:{value:0},init:function(e){this._super(e),this.classes.add("progress"),this.settings.filter||(this.settings.filter=function(e){return Math.round(e)})},renderHtml:function(){var e=this._id,t=this.classPrefix;return'<div id="'+e+'" class="'+this.classes+'"><div class="'+t+'bar-container"><div class="'+t+'bar"></div></div><div class="'+t+'text">0%</div></div>'},postRender:function(){return this._super(),this.value(this.settings.value),this},bindStates:function(){var e=this;function t(t){t=e.settings.filter(t),e.getEl().lastChild.innerHTML=t+"%",e.getEl().firstChild.firstChild.style.width=t+"%"}return e.state.on("change:value",function(e){t(e.value)}),t(e.state.get("value")),e._super()}}),Pt=function(e,t){e.getEl().lastChild.textContent=t+(e.progressBar?" "+e.progressBar.value()+"%":"")},Wt=et.extend({Mixins:[Re],Defaults:{classes:"widget notification"},init:function(e){var t=this;t._super(e),t.maxWidth=e.maxWidth,e.text&&t.text(e.text),e.icon&&(t.icon=e.icon),e.color&&(t.color=e.color),e.type&&t.classes.add("notification-"+e.type),e.timeout&&(e.timeout<0||e.timeout>0)&&!e.closeButton?t.closeButton=!1:(t.classes.add("has-close"),t.closeButton=!0),e.progressBar&&(t.progressBar=new Tt),t.on("click",function(e){-1!==e.target.className.indexOf(t.classPrefix+"close")&&t.close()})},renderHtml:function(){var e,t=this,n=t.classPrefix,i="",r="",o="";return t.icon&&(i='<i class="'+n+"ico "+n+"i-"+t.icon+'"></i>'),e=' style="max-width: '+t.maxWidth+"px;"+(t.color?"background-color: "+t.color+';"':'"'),t.closeButton&&(r='<button type="button" class="'+n+'close" aria-hidden="true">\xd7</button>'),t.progressBar&&(o=t.progressBar.renderHtml()),'<div id="'+t._id+'" class="'+t.classes+'"'+e+' role="presentation">'+i+'<div class="'+n+'notification-inner">'+t.state.get("text")+"</div>"+o+r+'<div style="clip: rect(1px, 1px, 1px, 1px);height: 1px;overflow: hidden;position: absolute;width: 1px;" aria-live="assertive" aria-relevant="additions" aria-atomic="true"></div></div>'},postRender:function(){var e=this;return C.setTimeout(function(){e.$el.addClass(e.classPrefix+"in"),Pt(e,e.state.get("text"))},100),e._super()},bindStates:function(){var e=this;return e.state.on("change:text",function(t){e.getEl().firstChild.innerHTML=t.value,Pt(e,t.value)}),e.progressBar&&(e.progressBar.bindStates(),e.progressBar.state.on("change:value",function(t){Pt(e,e.state.get("text"))})),e._super()},close:function(){return this.fire("close").isDefaultPrevented()||this.remove(),this},repaint:function(){var e,t;e=this.getEl().style,t=this._layoutRect,e.left=t.x+"px",e.top=t.y+"px",e.zIndex=65534}}),Dt=function(e){var t=function(e){return e.inline?e.getElement():e.getContentAreaContainer()};return{open:function(n,i){var r,o=a.extend(n,{maxWidth:(r=t(e),we.getSize(r).width)}),s=new Wt(o);return s.args=o,o.timeout>0&&(s.timer=setTimeout(function(){s.close(),i()},o.timeout)),s.on("close",function(){i()}),s.renderTo(),s},close:function(e){e.close()},reposition:function(n){var i;i=n,ee.each(i,function(e){e.moveTo(0,0)}),function(n){if(n.length>0){var i=n.slice(0,1)[0],r=t(e);i.moveRel(r,"tc-tc"),ee.each(n,function(e,t){t>0&&e.moveRel(n[t-1].getEl(),"bc-tc")})}}(n)},getArgs:function(e){return e.args}}},Nt=[],At="";function Bt(e){var t,n=ye("meta[name=viewport]")[0];!1!==_.overrideViewPort&&(n||((n=document.createElement("meta")).setAttribute("name","viewport"),document.getElementsByTagName("head")[0].appendChild(n)),(t=n.getAttribute("content"))&&void 0!==At&&(At=t),n.setAttribute("content",e?"width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0":At))}function Ot(e,t){(function(){for(var e=0;e<Nt.length;e++)if(Nt[e]._fullscreen)return!0;return!1})()&&!1===t&&ye([document.documentElement,document.body]).removeClass(e+"fullscreen")}var zt=xt.extend({modal:!0,Defaults:{border:1,layout:"flex",containerCls:"panel",role:"dialog",callbacks:{submit:function(){this.fire("submit",{data:this.toJSON()})},close:function(){this.close()}}},init:function(e){var t=this;t._super(e),t.isRtl()&&t.classes.add("rtl"),t.classes.add("window"),t.bodyClasses.add("window-body"),t.state.set("fixed",!0),e.buttons&&(t.statusbar=new ft({layout:"flex",border:"1 0 0 0",spacing:3,padding:10,align:"center",pack:t.isRtl()?"start":"end",defaults:{type:"button"},items:e.buttons}),t.statusbar.classes.add("foot"),t.statusbar.parent(t)),t.on("click",function(e){var n=t.classPrefix+"close";(we.hasClass(e.target,n)||we.hasClass(e.target.parentNode,n))&&t.close()}),t.on("cancel",function(){t.close()}),t.aria("describedby",t.describedBy||t._id+"-none"),t.aria("label",e.title),t._fullscreen=!1},recalc:function(){var e,t,n,i,r=this,o=r.statusbar;r._fullscreen&&(r.layoutRect(we.getWindowSize()),r.layoutRect().contentH=r.layoutRect().innerH),r._super(),e=r.layoutRect(),r.settings.title&&!r._fullscreen&&(t=e.headerW)>e.w&&(n=e.x-Math.max(0,t/2),r.layoutRect({w:t,x:n}),i=!0),o&&(o.layoutRect({w:r.layoutRect().innerW}).recalc(),(t=o.layoutRect().minW+e.deltaW)>e.w&&(n=e.x-Math.max(0,t-e.w),r.layoutRect({w:t,x:n}),i=!0)),i&&r.recalc()},initLayoutRect:function(){var e,t=this,n=t._super(),i=0;if(t.settings.title&&!t._fullscreen){e=t.getEl("head");var r=we.getSize(e);n.headerW=r.width,n.headerH=r.height,i+=n.headerH}t.statusbar&&(i+=t.statusbar.layoutRect().h),n.deltaH+=i,n.minH+=i,n.h+=i;var o=we.getWindowSize();return n.x=t.settings.x||Math.max(0,o.w/2-n.w/2),n.y=t.settings.y||Math.max(0,o.h/2-n.h/2),n},renderHtml:function(){var e=this,t=e._layout,n=e._id,i=e.classPrefix,r=e.settings,o="",s="",a=r.html;return e.preRender(),t.preRender(e),r.title&&(o='<div id="'+n+'-head" class="'+i+'window-head"><div id="'+n+'-title" class="'+i+'title">'+e.encode(r.title)+'</div><div id="'+n+'-dragh" class="'+i+'dragh"></div><button type="button" class="'+i+'close" aria-hidden="true"><i class="mce-ico mce-i-remove"></i></button></div>'),r.url&&(a='<iframe src="'+r.url+'" tabindex="-1"></iframe>'),void 0===a&&(a=t.renderHtml(e)),e.statusbar&&(s=e.statusbar.renderHtml()),'<div id="'+n+'" class="'+e.classes+'" hidefocus="1"><div class="'+e.classPrefix+'reset" role="application">'+o+'<div id="'+n+'-body" class="'+e.bodyClasses+'">'+a+"</div>"+s+"</div></div>"},fullscreen:function(e){var t,n,i=this,r=document.documentElement,o=i.classPrefix;if(e!==i._fullscreen)if(ye(window).on("resize",function(){var e;if(i._fullscreen)if(t)i._timer||(i._timer=C.setTimeout(function(){var e=we.getWindowSize();i.moveTo(0,0).resizeTo(e.w,e.h),i._timer=0},50));else{e=(new Date).getTime();var n=we.getWindowSize();i.moveTo(0,0).resizeTo(n.w,n.h),(new Date).getTime()-e>50&&(t=!0)}}),n=i.layoutRect(),i._fullscreen=e,e){i._initial={x:n.x,y:n.y,w:n.w,h:n.h},i.borderBox=Ee("0"),i.getEl("head").style.display="none",n.deltaH-=n.headerH+2,ye([r,document.body]).addClass(o+"fullscreen"),i.classes.add("fullscreen");var s=we.getWindowSize();i.moveTo(0,0).resizeTo(s.w,s.h)}else i.borderBox=Ee(i.settings.border),i.getEl("head").style.display="",n.deltaH+=n.headerH,ye([r,document.body]).removeClass(o+"fullscreen"),i.classes.remove("fullscreen"),i.moveTo(i._initial.x,i._initial.y).resizeTo(i._initial.w,i._initial.h);return i.reflow()},postRender:function(){var e,t=this;setTimeout(function(){t.classes.add("in"),t.fire("open")},0),t._super(),t.statusbar&&t.statusbar.postRender(),t.focus(),this.dragHelper=new ct(t._id+"-dragh",{start:function(){e={x:t.layoutRect().x,y:t.layoutRect().y}},drag:function(n){t.moveTo(e.x+n.deltaX,e.y+n.deltaY)}}),t.on("submit",function(e){e.isDefaultPrevented()||t.close()}),Nt.push(t),Bt(!0)},submit:function(){return this.fire("submit",{data:this.toJSON()})},remove:function(){var e,t=this;for(t.dragHelper.destroy(),t._super(),t.statusbar&&this.statusbar.remove(),Ot(t.classPrefix,!1),e=Nt.length;e--;)Nt[e]===t&&Nt.splice(e,1);Bt(Nt.length>0)},getContentWindow:function(){var e=this.getEl().getElementsByTagName("iframe")[0];return e?e.contentWindow:null}});!function(){if(!_.desktop){var e={w:window.innerWidth,h:window.innerHeight};C.setInterval(function(){var t=window.innerWidth,n=window.innerHeight;e.w===t&&e.h===n||(e={w:t,h:n},ye(window).trigger("resize"))},100)}ye(window).on("resize",function(){var e,t,n=we.getWindowSize();for(e=0;e<Nt.length;e++)t=Nt[e].layoutRect(),Nt[e].moveTo(Nt[e].settings.x||Math.max(0,n.w/2-t.w/2),Nt[e].settings.y||Math.max(0,n.h/2-t.h/2))})}();var Lt=zt.extend({init:function(e){e={border:1,padding:20,layout:"flex",pack:"center",align:"center",containerCls:"panel",autoScroll:!0,buttons:{type:"button",text:"Ok",action:"ok"},items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200}},this._super(e)},Statics:{OK:1,OK_CANCEL:2,YES_NO:3,YES_NO_CANCEL:4,msgBox:function(e){var t,n=e.callback||function(){};function i(e,t,i){return{type:"button",text:e,subtype:i?"primary":"",onClick:function(e){e.control.parents()[1].close(),n(t)}}}switch(e.buttons){case Lt.OK_CANCEL:t=[i("Ok",!0,!0),i("Cancel",!1)];break;case Lt.YES_NO:case Lt.YES_NO_CANCEL:t=[i("Yes",1,!0),i("No",0)],e.buttons===Lt.YES_NO_CANCEL&&t.push(i("Cancel",-1));break;default:t=[i("Ok",!0,!0)]}return new zt({padding:20,x:e.x,y:e.y,minWidth:300,minHeight:100,layout:"flex",pack:"center",align:"center",buttons:t,title:e.title,role:"alertdialog",items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200,text:e.text},onPostRender:function(){this.aria("describedby",this.items()[0]._id)},onClose:e.onClose,onCancel:function(){n(!1)}}).renderTo(document.body).reflow()},alert:function(e,t){return"string"==typeof e&&(e={text:e}),e.callback=t,Lt.msgBox(e)},confirm:function(e,t){return"string"==typeof e&&(e={text:e}),e.callback=t,e.buttons=Lt.OK_CANCEL,Lt.msgBox(e)}}}),It=function(e){return{renderUI:function(t){return Ht(e,this,t)},resizeTo:function(t,n){return ue(e,t,n)},resizeBy:function(t,n){return ce(e,t,n)},getNotificationManagerImpl:function(){return Dt(e)},getWindowManagerImpl:function(){return{open:function(e,t,n){var i;return e.title=e.title||" ",e.url=e.url||e.file,e.url&&(e.width=parseInt(e.width||320,10),e.height=parseInt(e.height||240,10)),e.body&&(e.items={defaults:e.defaults,type:e.bodyType||"form",items:e.body,data:e.data,callbacks:e.commands}),e.url||e.buttons||(e.buttons=[{text:"Ok",subtype:"primary",onclick:function(){i.find("form")[0].submit()}},{text:"Cancel",onclick:function(){i.close()}}]),(i=new zt(e)).on("close",function(){n(i)}),e.data&&i.on("postRender",function(){this.find("*").each(function(t){var n=t.name();n in e.data&&t.value(e.data[n])})}),i.features=e||{},i.params=t||{},i=i.renderTo().reflow()},alert:function(e,t,n){var i;return(i=Lt.alert(e,function(){t()})).on("close",function(){n(i)}),i},confirm:function(e,t,n){var i;return(i=Lt.confirm(e,function(e){t(e)})).on("close",function(){n(i)}),i},close:function(e){e.close()},getParams:function(e){return e.params},setParams:function(e,t){e.params=t}}}}},Ft=Ce.extend({Defaults:{firstControlClass:"first",lastControlClass:"last"},init:function(e){this.settings=a.extend({},this.Defaults,e)},preRender:function(e){e.bodyClasses.add(this.settings.containerClass)},applyClasses:function(e){var t,n,i,r,o=this.settings;t=o.firstControlClass,n=o.lastControlClass,e.each(function(e){e.classes.remove(t).remove(n).add(o.controlClass),e.visible()&&(i||(i=e),r=e)}),i&&i.classes.add(t),r&&r.classes.add(n)},renderHtml:function(e){var t="";return this.applyClasses(e.items()),e.items().each(function(e){t+=e.renderHtml()}),t},recalc:function(){},postRender:function(){},isNative:function(){return!1}}),Vt=Ft.extend({Defaults:{containerClass:"abs-layout",controlClass:"abs-layout-item"},recalc:function(e){e.items().filter(":visible").each(function(e){var t=e.settings;e.layoutRect({x:t.x,y:t.y,w:t.w,h:t.h}),e.recalc&&e.recalc()})},renderHtml:function(e){return'<div id="'+e._id+'-absend" class="'+e.classPrefix+'abs-end"></div>'+this._super(e)}}),Ut=Mt.extend({Defaults:{classes:"widget btn",role:"button"},init:function(e){var t,n=this;n._super(e),e=n.settings,t=n.settings.size,n.on("click mousedown",function(e){e.preventDefault()}),n.on("touchstart",function(e){n.fire("click",e),e.preventDefault()}),e.subtype&&n.classes.add(e.subtype),t&&n.classes.add("btn-"+t),e.icon&&n.icon(e.icon)},icon:function(e){return arguments.length?(this.state.set("icon",e),this):this.state.get("icon")},repaint:function(){var e,t=this.getEl().firstChild;t&&((e=t.style).width=e.height="100%"),this._super()},renderHtml:function(){var e,t,n=this,i=n._id,r=n.classPrefix,o=n.state.get("icon"),s=n.state.get("text"),a="",l=n.settings;return(e=l.image)?(o="none","string"!=typeof e&&(e=window.getSelection?e[0]:e[1]),e=" style=\"background-image: url('"+e+"')\""):e="",s&&(n.classes.add("btn-has-text"),a='<span class="'+r+'txt">'+n.encode(s)+"</span>"),o=o?r+"ico "+r+"i-"+o:"",t="boolean"==typeof l.active?' aria-pressed="'+l.active+'"':"",'<div id="'+i+'" class="'+n.classes+'" tabindex="-1"'+t+'><button id="'+i+'-button" role="presentation" type="button" tabindex="-1">'+(o?'<i class="'+o+'"'+e+"></i>":"")+a+"</button></div>"},bindStates:function(){var e=this,t=e.$,n=e.classPrefix+"txt";function i(i){var r=t("span."+n,e.getEl());i?(r[0]||(t("button:first",e.getEl()).append('<span class="'+n+'"></span>'),r=t("span."+n,e.getEl())),r.html(e.encode(i))):r.remove(),e.classes.toggle("btn-has-text",!!i)}return e.state.on("change:text",function(e){i(e.value)}),e.state.on("change:icon",function(t){var n=t.value,r=e.classPrefix;e.settings.icon=n,n=n?r+"ico "+r+"i-"+e.settings.icon:"";var o=e.getEl().firstChild,s=o.getElementsByTagName("i")[0];n?(s&&s===o.firstChild||(s=document.createElement("i"),o.insertBefore(s,o.firstChild)),s.className=n):s&&o.removeChild(s),i(e.state.get("text"))}),e._super()}}),Yt=Ut.extend({init:function(e){e=a.extend({text:"Browse...",multiple:!1,accept:null},e),this._super(e),this.classes.add("browsebutton"),e.multiple&&this.classes.add("multiple")},postRender:function(){var e=this,t=we.create("input",{type:"file",id:e._id+"-browse",accept:e.settings.accept});e._super(),ye(t).on("change",function(t){var n=t.target.files;e.value=function(){return n.length?e.settings.multiple?n:n[0]:null},t.preventDefault(),n.length&&e.fire("change",t)}),ye(t).on("click",function(e){e.stopPropagation()}),ye(e.getEl("button")).on("click",function(e){e.stopPropagation(),t.click()}),e.getEl().appendChild(t)},remove:function(){ye(this.getEl("button")).off(),ye(this.getEl("input")).off(),this._super()}}),$t=rt.extend({Defaults:{defaultType:"button",role:"group"},renderHtml:function(){var e=this,t=e._layout;return e.classes.add("btn-group"),e.preRender(),t.preRender(e),'<div id="'+e._id+'" class="'+e.classes+'"><div id="'+e._id+'-body">'+(e.settings.html||"")+t.renderHtml(e)+"</div></div>"}}),jt=Mt.extend({Defaults:{classes:"checkbox",role:"checkbox",checked:!1},init:function(e){var t=this;t._super(e),t.on("click mousedown",function(e){e.preventDefault()}),t.on("click",function(e){e.preventDefault(),t.disabled()||t.checked(!t.checked())}),t.checked(t.settings.checked)},checked:function(e){return arguments.length?(this.state.set("checked",e),this):this.state.get("checked")},value:function(e){return arguments.length?this.checked(e):this.checked()},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix;return'<div id="'+t+'" class="'+e.classes+'" unselectable="on" aria-labelledby="'+t+'-al" tabindex="-1"><i class="'+n+"ico "+n+'i-checkbox"></i><span id="'+t+'-al" class="'+n+'label">'+e.encode(e.state.get("text"))+"</span></div>"},bindStates:function(){var e=this;function t(t){e.classes.toggle("checked",t),e.aria("checked",t)}return e.state.on("change:text",function(t){e.getEl("al").firstChild.data=e.translate(t.value)}),e.state.on("change:checked change:value",function(n){e.fire("change"),t(n.value)}),e.state.on("change:icon",function(t){var n=t.value,i=e.classPrefix;if(void 0===n)return e.settings.icon;e.settings.icon=n,n=n?i+"ico "+i+"i-"+e.settings.icon:"";var r=e.getEl().firstChild,o=r.getElementsByTagName("i")[0];n?(o&&o===r.firstChild||(o=document.createElement("i"),r.insertBefore(o,r.firstChild)),o.className=n):o&&r.removeChild(o)}),e.state.get("checked")&&t(!0),e._super()}}),qt=tinymce.util.Tools.resolve("tinymce.util.VK"),Xt=Mt.extend({init:function(e){var t=this;t._super(e),e=t.settings,t.classes.add("combobox"),t.subinput=!0,t.ariaTarget="inp",e.menu=e.menu||e.values,e.menu&&(e.icon="caret"),t.on("click",function(n){var i=n.target,r=t.getEl();if(ye.contains(r,i)||i===r)for(;i&&i!==r;)i.id&&-1!==i.id.indexOf("-open")&&(t.fire("action"),e.menu&&(t.showMenu(),n.aria&&t.menu.items()[0].focus())),i=i.parentNode}),t.on("keydown",function(e){var n;13===e.keyCode&&"INPUT"===e.target.nodeName&&(e.preventDefault(),t.parents().reverse().each(function(e){if(e.toJSON)return n=e,!1}),t.fire("submit",{data:n.toJSON()}))}),t.on("keyup",function(e){if("INPUT"===e.target.nodeName){var n=t.state.get("value"),i=e.target.value;i!==n&&(t.state.set("value",i),t.fire("autocomplete",e))}}),t.on("mouseover",function(e){var n=t.tooltip().moveTo(-65535);if(t.statusLevel()&&-1!==e.target.className.indexOf(t.classPrefix+"status")){var i=t.statusMessage()||"Ok",r=n.text(i).show().testMoveRel(e.target,["bc-tc","bc-tl","bc-tr"]);n.classes.toggle("tooltip-n","bc-tc"===r),n.classes.toggle("tooltip-nw","bc-tl"===r),n.classes.toggle("tooltip-ne","bc-tr"===r),n.moveRel(e.target,r)}})},statusLevel:function(e){return arguments.length>0&&this.state.set("statusLevel",e),this.state.get("statusLevel")},statusMessage:function(e){return arguments.length>0&&this.state.set("statusMessage",e),this.state.get("statusMessage")},showMenu:function(){var e,t=this,n=t.settings;t.menu||((e=n.menu||[]).length?e={type:"menu",items:e}:e.type=e.type||"menu",t.menu=g.create(e).parent(t).renderTo(t.getContainerElm()),t.fire("createmenu"),t.menu.reflow(),t.menu.on("cancel",function(e){e.control===t.menu&&t.focus()}),t.menu.on("show hide",function(e){e.control.items().each(function(e){e.active(e.value()===t.value())})}).fire("show"),t.menu.on("select",function(e){t.value(e.control.value())}),t.on("focusin",function(e){"INPUT"===e.target.tagName.toUpperCase()&&t.menu.hide()}),t.aria("expanded",!0)),t.menu.show(),t.menu.layoutRect({w:t.layoutRect().w}),t.menu.moveRel(t.getEl(),t.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"])},focus:function(){this.getEl("inp").focus()},repaint:function(){var e,t,n=this,i=n.getEl(),r=n.getEl("open"),o=n.layoutRect(),s=0,a=i.firstChild;n.statusLevel()&&"none"!==n.statusLevel()&&(s=parseInt(we.getRuntimeStyle(a,"padding-right"),10)-parseInt(we.getRuntimeStyle(a,"padding-left"),10)),e=r?o.w-we.getSize(r).width-10:o.w-10;var l=document;return l.all&&(!l.documentMode||l.documentMode<=8)&&(t=n.layoutRect().h-2+"px"),ye(a).css({width:e-s,lineHeight:t}),n._super(),n},postRender:function(){var e=this;return ye(this.getEl("inp")).on("change",function(t){e.state.set("value",t.target.value),e.fire("change",t)}),e._super()},renderHtml:function(){var e,t,n,i=this,r=i._id,o=i.settings,s=i.classPrefix,a=i.state.get("value")||"",l="",u="";return"spellcheck"in o&&(u+=' spellcheck="'+o.spellcheck+'"'),o.maxLength&&(u+=' maxlength="'+o.maxLength+'"'),o.size&&(u+=' size="'+o.size+'"'),o.subtype&&(u+=' type="'+o.subtype+'"'),n='<i id="'+r+'-status" class="mce-status mce-ico" style="display: none"></i>',i.disabled()&&(u+=' disabled="disabled"'),(e=o.icon)&&"caret"!==e&&(e=s+"ico "+s+"i-"+o.icon),t=i.state.get("text"),(e||t)&&(l='<div id="'+r+'-open" class="'+s+"btn "+s+'open" tabIndex="-1" role="button"><button id="'+r+'-action" type="button" hidefocus="1" tabindex="-1">'+("caret"!==e?'<i class="'+e+'"></i>':'<i class="'+s+'caret"></i>')+(t?(e?" ":"")+t:"")+"</button></div>",i.classes.add("has-open")),'<div id="'+r+'" class="'+i.classes+'"><input id="'+r+'-inp" class="'+s+'textbox" value="'+i.encode(a,!1)+'" hidefocus="1"'+u+' placeholder="'+i.encode(o.placeholder)+'" />'+n+l+"</div>"},value:function(e){return arguments.length?(this.state.set("value",e),this):(this.state.get("rendered")&&this.state.set("value",this.getEl("inp").value),this.state.get("value"))},showAutoComplete:function(e,t){var n=this;if(0!==e.length){n.menu?n.menu.items().remove():n.menu=g.create({type:"menu",classes:"combobox-menu",layout:"flow"}).parent(n).renderTo(),a.each(e,function(e){var i,r;n.menu.add({text:e.title,url:e.previewUrl,match:t,classes:"menu-item-ellipsis",onclick:(i=e.value,r=e.title,function(){n.fire("selectitem",{title:r,value:i})})})}),n.menu.renderNew(),n.hideMenu(),n.menu.on("cancel",function(e){e.control.parent()===n.menu&&(e.stopPropagation(),n.focus(),n.hideMenu())}),n.menu.on("select",function(){n.focus()});var i=n.layoutRect().w;n.menu.layoutRect({w:i,minW:0,maxW:i}),n.menu.repaint(),n.menu.reflow(),n.menu.show(),n.menu.moveRel(n.getEl(),n.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"])}else n.hideMenu()},hideMenu:function(){this.menu&&this.menu.hide()},bindStates:function(){var e=this;e.state.on("change:value",function(t){e.getEl("inp").value!==t.value&&(e.getEl("inp").value=t.value)}),e.state.on("change:disabled",function(t){e.getEl("inp").disabled=t.value}),e.state.on("change:statusLevel",function(t){var n=e.getEl("status"),i=e.classPrefix,r=t.value;we.css(n,"display","none"===r?"none":""),we.toggleClass(n,i+"i-checkmark","ok"===r),we.toggleClass(n,i+"i-warning","warn"===r),we.toggleClass(n,i+"i-error","error"===r),e.classes.toggle("has-status","none"!==r),e.repaint()}),we.on(e.getEl("status"),"mouseleave",function(){e.tooltip().hide()}),e.on("cancel",function(t){e.menu&&e.menu.visible()&&(t.stopPropagation(),e.hideMenu())});var t=function(e,t){t&&t.items().length>0&&t.items().eq(e)[0].focus()};return e.on("keydown",function(n){var i=n.keyCode;"INPUT"===n.target.nodeName&&(i===qt.DOWN?(n.preventDefault(),e.fire("autocomplete"),t(0,e.menu)):i===qt.UP&&(n.preventDefault(),t(-1,e.menu)))}),e._super()},remove:function(){ye(this.getEl("inp")).off(),this.menu&&this.menu.remove(),this._super()}}),Jt=Xt.extend({init:function(e){var t=this;e.spellcheck=!1,e.onaction&&(e.icon="none"),t._super(e),t.classes.add("colorbox"),t.on("change keyup postrender",function(){t.repaintColor(t.value())})},repaintColor:function(e){var t=this.getEl("open"),n=t?t.getElementsByTagName("i")[0]:null;if(n)try{n.style.background=e}catch(i){}},bindStates:function(){var e=this;return e.state.on("change:value",function(t){e.state.get("rendered")&&e.repaintColor(t.value)}),e._super()}}),Gt=Ut.extend({showPanel:function(){var e=this,t=e.settings;if(e.classes.add("opened"),e.panel)e.panel.show();else{var n=t.panel;n.type&&(n={layout:"grid",items:n}),n.role=n.role||"dialog",n.popover=!0,n.autohide=!0,n.ariaRoot=!0,e.panel=new xt(n).on("hide",function(){e.classes.remove("opened")}).on("cancel",function(t){t.stopPropagation(),e.focus(),e.hidePanel()}).parent(e).renderTo(e.getContainerElm()),e.panel.fire("show"),e.panel.reflow()}var i=e.panel.testMoveRel(e.getEl(),t.popoverAlign||(e.isRtl()?["bc-tc","bc-tl","bc-tr"]:["bc-tc","bc-tr","bc-tl"]));e.panel.classes.toggle("start","bc-tl"===i),e.panel.classes.toggle("end","bc-tr"===i),e.panel.moveRel(e.getEl(),i)},hidePanel:function(){this.panel&&this.panel.hide()},postRender:function(){var e=this;return e.aria("haspopup",!0),e.on("click",function(t){t.control===e&&(e.panel&&e.panel.visible()?e.hidePanel():(e.showPanel(),e.panel.focus(!!t.aria)))}),e._super()},remove:function(){return this.panel&&(this.panel.remove(),this.panel=null),this._super()}}),Kt=m.DOM,Zt=Gt.extend({init:function(e){this._super(e),this.classes.add("splitbtn"),this.classes.add("colorbutton")},color:function(e){return e?(this._color=e,this.getEl("preview").style.backgroundColor=e,this):this._color},resetColor:function(){return this._color=null,this.getEl("preview").style.backgroundColor=null,this},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,i=e.state.get("text"),r=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"",o=e.settings.image?" style=\"background-image: url('"+e.settings.image+"')\"":"",s="";return i&&(e.classes.add("btn-has-text"),s='<span class="'+n+'txt">'+e.encode(i)+"</span>"),'<div id="'+t+'" class="'+e.classes+'" role="button" tabindex="-1" aria-haspopup="true"><button role="presentation" hidefocus="1" type="button" tabindex="-1">'+(r?'<i class="'+r+'"'+o+"></i>":"")+'<span id="'+t+'-preview" class="'+n+'preview"></span>'+s+'</button><button type="button" class="'+n+'open" hidefocus="1" tabindex="-1"> <i class="'+n+'caret"></i></button></div>'},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(n){n.aria&&"down"===n.aria.key||n.control!==e||Kt.getParent(n.target,"."+e.classPrefix+"open")||(n.stopImmediatePropagation(),t.call(e,n))}),delete e.settings.onclick,e._super()}}),Qt=tinymce.util.Tools.resolve("tinymce.util.Color"),en=Mt.extend({Defaults:{classes:"widget colorpicker"},init:function(e){this._super(e)},postRender:function(){var e,t,n,i,r,o=this,s=o.color();function a(e,t){var n,i,r=we.getPos(e);return n=t.pageX-r.x,i=t.pageY-r.y,{x:n=Math.max(0,Math.min(n/e.clientWidth,1)),y:i=Math.max(0,Math.min(i/e.clientHeight,1))}}function l(e,t){var s=(360-e.h)/360;we.css(n,{top:100*s+"%"}),t||we.css(r,{left:e.s+"%",top:100-e.v+"%"}),i.style.background=Qt({s:100,v:100,h:e.h}).toHex(),o.color().parse({s:e.s,v:e.v,h:e.h})}function u(t){var n;n=a(i,t),e.s=100*n.x,e.v=100*(1-n.y),l(e),o.fire("change")}function c(n){var i;i=a(t,n),(e=s.toHsv()).h=360*(1-i.y),l(e,!0),o.fire("change")}t=o.getEl("h"),n=o.getEl("hp"),i=o.getEl("sv"),r=o.getEl("svp"),o._repaint=function(){l(e=s.toHsv())},o._super(),o._svdraghelper=new ct(o._id+"-sv",{start:u,drag:u}),o._hdraghelper=new ct(o._id+"-h",{start:c,drag:c}),o._repaint()},rgb:function(){return this.color().toRgb()},value:function(e){if(!arguments.length)return this.color().toHex();this.color().parse(e),this._rendered&&this._repaint()},color:function(){return this._color||(this._color=Qt()),this._color},renderHtml:function(){var e,t=this._id,n=this.classPrefix,i="#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000";return e='<div id="'+t+'-h" class="'+n+'colorpicker-h" style="background: -ms-linear-gradient(top,'+i+");background: linear-gradient(to bottom,"+i+');">'+function(){var e,t,r,o,s="";for(r="filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=",e=0,t=(o=i.split(",")).length-1;e<t;e++)s+='<div class="'+n+'colorpicker-h-chunk" style="height:'+100/t+"%;"+r+o[e]+",endColorstr="+o[e+1]+");-ms-"+r+o[e]+",endColorstr="+o[e+1]+')"></div>';return s}()+'<div id="'+t+'-hp" class="'+n+'colorpicker-h-marker"></div></div>','<div id="'+t+'" class="'+this.classes+'"><div id="'+t+'-sv" class="'+n+'colorpicker-sv"><div class="'+n+'colorpicker-overlay1"><div class="'+n+'colorpicker-overlay2"><div id="'+t+'-svp" class="'+n+'colorpicker-selector1"><div class="'+n+'colorpicker-selector2"></div></div></div></div></div>'+e+"</div>"}}),tn=Mt.extend({init:function(e){e=a.extend({height:100,text:"Drop an image here",multiple:!1,accept:null},e),this._super(e),this.classes.add("dropzone"),e.multiple&&this.classes.add("multiple")},renderHtml:function(){var e,t,n=this.settings;return e={id:this._id,hidefocus:"1"},t=we.create("div",e,"<span>"+this.translate(n.text)+"</span>"),n.height&&we.css(t,"height",n.height+"px"),n.width&&we.css(t,"width",n.width+"px"),t.className=this.classes,t.outerHTML},postRender:function(){var e=this,t=function(t){t.preventDefault(),e.classes.toggle("dragenter"),e.getEl().className=e.classes};e._super(),e.$el.on("dragover",function(e){e.preventDefault()}),e.$el.on("dragenter",t),e.$el.on("dragleave",t),e.$el.on("drop",function(t){if(t.preventDefault(),!e.state.get("disabled")){var n=function(t){var n=e.settings.accept;if("string"!=typeof n)return t;var i=new RegExp("("+n.split(/\s*,\s*/).join("|")+")$","i");return a.grep(t,function(e){return i.test(e.name)})}(t.dataTransfer.files);e.value=function(){return n.length?e.settings.multiple?n:n[0]:null},n.length&&e.fire("change",t)}})},remove:function(){this.$el.off(),this._super()}}),nn=Mt.extend({init:function(e){var t=this;e.delimiter||(e.delimiter="\xbb"),t._super(e),t.classes.add("path"),t.canFocus=!0,t.on("click",function(e){var n;(n=e.target.getAttribute("data-index"))&&t.fire("select",{value:t.row()[n],index:n})}),t.row(t.settings.row)},focus:function(){return this.getEl().firstChild.focus(),this},row:function(e){return arguments.length?(this.state.set("row",e),this):this.state.get("row")},renderHtml:function(){return'<div id="'+this._id+'" class="'+this.classes+'">'+this._getDataPathHtml(this.state.get("row"))+"</div>"},bindStates:function(){var e=this;return e.state.on("change:row",function(t){e.innerHtml(e._getDataPathHtml(t.value))}),e._super()},_getDataPathHtml:function(e){var t,n,i=e||[],r="",o=this.classPrefix;for(t=0,n=i.length;t<n;t++)r+=(t>0?'<div class="'+o+'divider" aria-hidden="true"> '+this.settings.delimiter+" </div>":"")+'<div role="button" class="'+o+"path-item"+(t===n-1?" "+o+"last":"")+'" data-index="'+t+'" tabindex="-1" id="'+this._id+"-"+t+'" aria-level="'+(t+1)+'">'+i[t].name+"</div>";return r||(r='<div class="'+o+'path-item">\xa0</div>'),r}}),rn=nn.extend({postRender:function(){var e=this,t=e.settings.editor;function n(e){if(1===e.nodeType){if("BR"===e.nodeName||e.getAttribute("data-mce-bogus"))return!0;if("bookmark"===e.getAttribute("data-mce-type"))return!0}return!1}return!1!==t.settings.elementpath&&(e.on("select",function(e){t.focus(),t.selection.select(this.row()[e.index].element),t.nodeChanged()}),t.on("nodeChange",function(i){for(var r=[],o=i.parents,s=o.length;s--;)if(1===o[s].nodeType&&!n(o[s])){var a=t.fire("ResolveName",{name:o[s].nodeName.toLowerCase(),target:o[s]});if(a.isDefaultPrevented()||r.push({name:a.name,element:o[s]}),a.isPropagationStopped())break}e.row(r)})),e._super()}}),on=rt.extend({Defaults:{layout:"flex",align:"center",defaults:{flex:1}},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.classes.add("formitem"),t.preRender(e),'<div id="'+e._id+'" class="'+e.classes+'" hidefocus="1" tabindex="-1">'+(e.settings.title?'<div id="'+e._id+'-title" class="'+n+'title">'+e.settings.title+"</div>":"")+'<div id="'+e._id+'-body" class="'+e.bodyClasses+'">'+(e.settings.html||"")+t.renderHtml(e)+"</div></div>"}}),sn=rt.extend({Defaults:{containerCls:"form",layout:"flex",direction:"column",align:"stretch",flex:1,padding:15,labelGap:30,spacing:10,callbacks:{submit:function(){this.submit()}}},preRender:function(){var e=this,t=e.items();e.settings.formItemDefaults||(e.settings.formItemDefaults={layout:"flex",autoResize:"overflow",defaults:{flex:1}}),t.each(function(t){var n,i=t.settings.label;i&&((n=new on(a.extend({items:{type:"label",id:t._id+"-l",text:i,flex:0,forId:t._id,disabled:t.disabled()}},e.settings.formItemDefaults))).type="formitem",t.aria("labelledby",t._id+"-l"),"undefined"==typeof t.settings.flex&&(t.settings.flex=1),e.replace(t,n),n.add(t))})},submit:function(){return this.fire("submit",{data:this.toJSON()})},postRender:function(){this._super(),this.fromJSON(this.settings.data)},bindStates:function(){var e=this;function t(){var t,n,i=0,r=[];if(!1!==e.settings.labelGapCalc)for(("children"===e.settings.labelGapCalc?e.find("formitem"):e.items()).filter("formitem").each(function(e){var t=e.items()[0],n=t.getEl().clientWidth;i=n>i?n:i,r.push(t)}),n=e.settings.labelGap||0,t=r.length;t--;)r[t].settings.minWidth=i+n}e._super(),e.on("show",t),t()}}),an=sn.extend({Defaults:{containerCls:"fieldset",layout:"flex",direction:"column",align:"stretch",flex:1,padding:"25 15 5 15",labelGap:30,spacing:10,border:1},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.preRender(),t.preRender(e),'<fieldset id="'+e._id+'" class="'+e.classes+'" hidefocus="1" tabindex="-1">'+(e.settings.title?'<legend id="'+e._id+'-title" class="'+n+'fieldset-title">'+e.settings.title+"</legend>":"")+'<div id="'+e._id+'-body" class="'+e.bodyClasses+'">'+(e.settings.html||"")+t.renderHtml(e)+"</div></fieldset>"}}),ln=0,un=function(e){var t=(new Date).getTime();return e+"_"+Math.floor(1e9*Math.random())+ ++ln+String(t)},cn=function(e){if(null===e||e===undefined)throw new Error("Node cannot be null or undefined");return{dom:E.constant(e)}},dn={fromHtml:function(e,t){var n=(t||document).createElement("div");if(n.innerHTML=e,!n.hasChildNodes()||n.childNodes.length>1)throw console.error("HTML does not have a single root node",e),"HTML must have a single root node";return cn(n.childNodes[0])},fromTag:function(e,t){var n=(t||document).createElement(e);return cn(n)},fromText:function(e,t){var n=(t||document).createTextNode(e);return cn(n)},fromDom:cn,fromPoint:function(e,t,n){return W.from(e.dom().elementFromPoint(t,n)).map(cn)}},fn=function(e){var t,n=!1;return function(){return n||(n=!0,t=e.apply(null,arguments)),t}},hn=8,mn=9,gn=1,pn=3,vn=function(e){return e.dom().nodeName.toLowerCase()},bn=function(e){return e.dom().nodeType},yn=function(e){return function(t){return bn(t)===e}},xn=yn(gn),wn=yn(pn),_n=yn(mn),Rn={name:vn,type:bn,value:function(e){return e.dom().nodeValue},isElement:xn,isText:wn,isDocument:_n,isComment:function(e){return bn(e)===hn||"#comment"===vn(e)}},Cn=(fn(function(){return Cn(dn.fromDom(document))}),function(e){var t=e.dom().body;if(null===t||t===undefined)throw"Body is not available yet";return dn.fromDom(t)}),kn=function(e){return function(t){return function(e){if(null===e)return"null";var t=typeof e;return"object"===t&&Array.prototype.isPrototypeOf(e)?"array":"object"===t&&String.prototype.isPrototypeOf(e)?"string":t}(t)===e}},En=(kn("string"),kn("object"),kn("array"),kn("null"),kn("boolean"),kn("undefined"),kn("function"),kn("number"),Object.keys,undefined,function(){var e=arguments;return function(){for(var t=new Array(arguments.length),n=0;n<t.length;n++)t[n]=arguments[n];if(e.length!==t.length)throw new Error('Wrong number of arguments to struct. Expected "['+e.length+']", got '+t.length+" arguments");var i={};return ee.each(e,function(e,n){i[e]=E.constant(t[n])}),i}}),Hn=("undefined"!=typeof window?window:Function("return this;")(),function(e,t){var n=function(e,t){for(var n=0;n<e.length;n++){var i=e[n];if(i.test(t))return i}return undefined}(e,t);if(!n)return{major:0,minor:0};var i=function(e){return Number(t.replace(n,"$"+e))};return Mn(i(1),i(2))}),Sn=function(){return Mn(0,0)},Mn=function(e,t){return{major:e,minor:t}},Tn={nu:Mn,detect:function(e,t){var n=String(t).toLowerCase();return 0===e.length?Sn():Hn(e,n)},unknown:Sn},Pn="Firefox",Wn=function(e,t){return function(){return t===e}},Dn=function(e){var t=e.current;return{current:t,version:e.version,isEdge:Wn("Edge",t),isChrome:Wn("Chrome",t),isIE:Wn("IE",t),isOpera:Wn("Opera",t),isFirefox:Wn(Pn,t),isSafari:Wn("Safari",t)}},Nn={unknown:function(){return Dn({current:undefined,version:Tn.unknown()})},nu:Dn,edge:E.constant("Edge"),chrome:E.constant("Chrome"),ie:E.constant("IE"),opera:E.constant("Opera"),firefox:E.constant(Pn),safari:E.constant("Safari")},An="Windows",Bn="Android",On="Solaris",zn="FreeBSD",Ln=function(e,t){return function(){return t===e}},In=function(e){var t=e.current;return{current:t,version:e.version,isWindows:Ln(An,t),isiOS:Ln("iOS",t),isAndroid:Ln(Bn,t),isOSX:Ln("OSX",t),isLinux:Ln("Linux",t),isSolaris:Ln(On,t),isFreeBSD:Ln(zn,t)}},Fn={unknown:function(){return In({current:undefined,version:Tn.unknown()})},nu:In,windows:E.constant(An),ios:E.constant("iOS"),android:E.constant(Bn),linux:E.constant("Linux"),osx:E.constant("OSX"),solaris:E.constant(On),freebsd:E.constant(zn)},Vn=function(e,t){var n=String(t).toLowerCase();return ee.find(e,function(e){return e.search(n)})},Un=function(e,t){return Vn(e,t).map(function(e){var n=Tn.detect(e.versionRegexes,t);return{current:e.name,version:n}})},Yn=function(e,t){return Vn(e,t).map(function(e){var n=Tn.detect(e.versionRegexes,t);return{current:e.name,version:n}})},$n=function(e,t){return-1!==e.indexOf(t)},jn=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,qn=function(e){return function(t){return $n(t,e)}},Xn=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(e){return $n(e,"edge/")&&$n(e,"chrome")&&$n(e,"safari")&&$n(e,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,jn],search:function(e){return $n(e,"chrome")&&!$n(e,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(e){return $n(e,"msie")||$n(e,"trident")}},{name:"Opera",versionRegexes:[jn,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:qn("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:qn("firefox")},{name:"Safari",versionRegexes:[jn,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(e){return($n(e,"safari")||$n(e,"mobile/"))&&$n(e,"applewebkit")}}],Jn=[{name:"Windows",search:qn("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(e){return $n(e,"iphone")||$n(e,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:qn("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:qn("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:qn("linux"),versionRegexes:[]},{name:"Solaris",search:qn("sunos"),versionRegexes:[]},{name:"FreeBSD",search:qn("freebsd"),versionRegexes:[]}],Gn={browsers:E.constant(Xn),oses:E.constant(Jn)},Kn=function(e){var t,n,i,r,o,s,a,l,u,c,d,f=Gn.browsers(),h=Gn.oses(),m=Un(f,e).fold(Nn.unknown,Nn.nu),g=Yn(h,e).fold(Fn.unknown,Fn.nu);return{browser:m,os:g,deviceType:(n=m,i=e,r=(t=g).isiOS()&&!0===/ipad/i.test(i),o=t.isiOS()&&!r,s=t.isAndroid()&&3===t.version.major,a=t.isAndroid()&&4===t.version.major,l=r||s||a&&!0===/mobile/i.test(i),u=t.isiOS()||t.isAndroid(),c=u&&!l,d=n.isSafari()&&t.isiOS()&&!1===/safari/i.test(i),{isiPad:E.constant(r),isiPhone:E.constant(o),isTablet:E.constant(l),isPhone:E.constant(c),isTouch:E.constant(u),isAndroid:t.isAndroid,isiOS:t.isiOS,isWebView:E.constant(d)})}},Zn=gn,Qn=mn,ei=function(e){return e.nodeType!==Zn&&e.nodeType!==Qn||0===e.childElementCount},ti={all:function(e,t){var n=t===undefined?document:t.dom();return ei(n)?[]:ee.map(n.querySelectorAll(e),dn.fromDom)},is:function(e,t){var n=e.dom();if(n.nodeType!==Zn)return!1;if(n.matches!==undefined)return n.matches(t);if(n.msMatchesSelector!==undefined)return n.msMatchesSelector(t);if(n.webkitMatchesSelector!==undefined)return n.webkitMatchesSelector(t);if(n.mozMatchesSelector!==undefined)return n.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")},one:function(e,t){var n=t===undefined?document:t.dom();return ei(n)?W.none():W.from(n.querySelector(e)).map(dn.fromDom)}},ni=(fn(function(){var e=navigator.userAgent;return Kn(e)})().browser.isIE(),En("element","offset"),function(e,t){return ti.all(t,e)}),ii=a.trim,ri=function(e){return function(t){if(t&&1===t.nodeType){if(t.contentEditable===e)return!0;if(t.getAttribute("data-mce-contenteditable")===e)return!0}return!1}},oi=ri("true"),si=ri("false"),ai=function(e,t,n,i,r){return{type:e,title:t,url:n,level:i,attach:r}},li=function(e){return e.innerText||e.textContent},ui=function(e){return(t=e)&&"A"===t.nodeName&&(t.id||t.name)&&di(e);var t},ci=function(e){return e&&/^(H[1-6])$/.test(e.nodeName)},di=function(e){return function(e){for(;e=e.parentNode;){var t=e.contentEditable;if(t&&"inherit"!==t)return oi(e)}return!1}(e)&&!si(e)},fi=function(e){return ci(e)&&di(e)},hi=function(e){var t,n,i=(t=e).id?t.id:un("h");return ai("header",li(e),"#"+i,ci(n=e)?parseInt(n.nodeName.substr(1),10):0,function(){e.id=i})},mi=function(e){var t=e.id||e.name,n=li(e);return ai("anchor",n||"#"+t,"#"+t,0,E.noop)},gi=function(e){var t,n;return t="h1,h2,h3,h4,h5,h6,a:not([href])",n=e,ee.map(ni(dn.fromDom(n),t),function(e){return e.dom()})},pi=function(e){return ii(e.title).length>0},vi=function(e){var t,n,i=gi(e);return ee.filter((n=i,ee.map(ee.filter(n,fi),hi)).concat((t=i,ee.map(ee.filter(t,ui),mi))),pi)},bi={},yi=function(e){return{title:e.title,value:{title:{raw:e.title},url:e.url,attach:e.attach}}},xi=function(e,t){return{title:e,value:{title:e,url:t,attach:E.noop}}},wi=function(e,t,n){var i=t in e?e[t]:n;return!1===i?null:i},_i=function(e,t,n,i){var r,o,s,l,u={title:"-"},c=function(e){var i=e.hasOwnProperty(n)?e[n]:[],r=ee.filter(i,function(e){return n=e,i=t,!ee.exists(i,function(e){return e.url===n});var n,i});return a.map(r,function(e){return{title:e,value:{title:e,url:e,attach:E.noop}}})},d=function(e){var n,i=ee.filter(t,function(t){return t.type===e});return n=i,a.map(n,yi)};return!1===i.typeahead_urls?[]:"file"===n?(r=[Ri(e,c(bi)),Ri(e,d("header")),Ri(e,(o=d("anchor"),s=wi(i,"anchor_top","#top"),l=wi(i,"anchor_bottom","#bottom"),null!==s&&o.unshift(xi("<top>",s)),null!==l&&o.push(xi("<bottom>",l)),o))],ee.foldl(r,function(e,t){return 0===e.length||0===t.length?e.concat(t):e.concat(u,t)},[])):Ri(e,c(bi))},Ri=function(e,t){var n=e.toLowerCase(),i=a.grep(t,function(e){return-1!==e.title.toLowerCase().indexOf(n)});return 1===i.length&&i[0].title===e?[]:i},Ci=function(e,t,n,i){var r=function(r){var o=vi(n),s=_i(r,o,i,t);e.showAutoComplete(s,r)};e.on("autocomplete",function(){r(e.value())}),e.on("selectitem",function(t){var n=t.value;e.value(n.url);var r,o=(r=n.title).raw?r.raw:r;"image"===i?e.fire("change",{meta:{alt:o,attach:n.attach}}):e.fire("change",{meta:{text:o,attach:n.attach}}),e.focus()}),e.on("click",function(t){0===e.value().length&&"INPUT"===t.target.nodeName&&r("")}),e.on("PostRender",function(){e.getRoot().on("submit",function(t){var n,r,o;t.isDefaultPrevented()||(n=e.value(),o=bi[r=i],/^https?/.test(n)&&(o?-1===ee.indexOf(o,n)&&(bi[r]=o.slice(0,5).concat(n)):bi[r]=[n]))})})},ki=function(e,t,n){var i=t.filepicker_validator_handler;i&&e.state.on("change:value",function(t){var r;0!==(r=t.value).length?i({url:r,type:n},function(t){var n,i,r,o=(i=(n=t).status,r=n.message,"valid"===i?{status:"ok",message:r}:"unknown"===i?{status:"warn",message:r}:"invalid"===i?{status:"warn",message:r}:{status:"none",message:""});e.statusMessage(o.message),e.statusLevel(o.status)}):e.statusLevel("none")})},Ei=Xt.extend({Statics:{clearHistory:function(){bi={}}},init:function(e){var t,n,i,r=this,o=window.tinymce?window.tinymce.activeEditor:s.activeEditor,l=o.settings,u=e.filetype;e.spellcheck=!1,(i=l.file_picker_types||l.file_browser_callback_types)&&(i=a.makeMap(i,/[, ]/)),i&&!i[u]||(!(n=l.file_picker_callback)||i&&!i[u]?!(n=l.file_browser_callback)||i&&!i[u]||(t=function(){n(r.getEl("inp").id,r.value(),u,window)}):t=function(){var e=r.fire("beforecall").meta;e=a.extend({filetype:u},e),n.call(o,function(e,t){r.value(e).fire("change",{meta:t})},r.value(),e)}),t&&(e.icon="browse",e.onaction=t),r._super(e),r.classes.add("filepicker"),Ci(r,l,o.getBody(),u),ki(r,l,u)}}),Hi=Vt.extend({recalc:function(e){var t=e.layoutRect(),n=e.paddingBox;e.items().filter(":visible").each(function(e){e.layoutRect({x:n.left,y:n.top,w:t.innerW-n.right-n.left,h:t.innerH-n.top-n.bottom}),e.recalc&&e.recalc()})}}),Si=Vt.extend({recalc:function(e){var t,n,i,r,o,s,a,l,u,c,d,f,h,m,g,p,v,b,y,x,w,_,R,C,k,E,H,S,M,T,P,W,D,N,A,B,O,z=[],L=Math.max,I=Math.min;for(i=e.items().filter(":visible"),r=e.layoutRect(),o=e.paddingBox,s=e.settings,f=e.isRtl()?s.direction||"row-reversed":s.direction,a=s.align,l=e.isRtl()?s.pack||"end":s.pack,u=s.spacing||0,"row-reversed"!==f&&"column-reverse"!==f||(i=i.set(i.toArray().reverse()),f=f.split("-")[0]),"column"===f?(C="y",_="h",R="minH",k="maxH",H="innerH",E="top",S="deltaH",M="contentH",N="left",W="w",T="x",P="innerW",D="minW",A="right",B="deltaW",O="contentW"):(C="x",_="w",R="minW",k="maxW",H="innerW",E="left",S="deltaW",M="contentW",N="top",W="h",T="y",P="innerH",D="minH",A="bottom",B="deltaH",O="contentH"),d=r[H]-o[E]-o[E],w=c=0,t=0,n=i.length;t<n;t++)m=(h=i[t]).layoutRect(),g=h.settings.flex,d-=t<n-1?u:0,g>0&&(c+=g,m[k]&&z.push(h),m.flex=g),d-=m[R],(p=o[N]+m[D]+o[A])>w&&(w=p);if((y={})[R]=d<0?r[R]-d+r[S]:r[H]-d+r[S],y[D]=w+r[B],y[M]=r[H]-d,y[O]=w,y.minW=I(y.minW,r.maxW),y.minH=I(y.minH,r.maxH),y.minW=L(y.minW,r.startMinWidth),y.minH=L(y.minH,r.startMinHeight),!r.autoResize||y.minW===r.minW&&y.minH===r.minH){for(b=d/c,t=0,n=z.length;t<n;t++)v=(m=(h=z[t]).layoutRect())[k],(p=m[R]+m.flex*b)>v?(d-=m[k]-m[R],c-=m.flex,m.flex=0,m.maxFlexSize=v):m.maxFlexSize=0;for(b=d/c,x=o[E],y={},0===c&&("end"===l?x=d+o[E]:"center"===l?(x=Math.round(r[H]/2-(r[H]-d)/2)+o[E])<0&&(x=o[E]):"justify"===l&&(x=o[E],u=Math.floor(d/(i.length-1)))),y[T]=o[N],t=0,n=i.length;t<n;t++)p=(m=(h=i[t]).layoutRect()).maxFlexSize||m[R],"center"===a?y[T]=Math.round(r[P]/2-m[W]/2):"stretch"===a?(y[W]=L(m[D]||0,r[P]-o[N]-o[A]),y[T]=o[N]):"end"===a&&(y[T]=r[P]-m[W]-o.top),m.flex>0&&(p+=m.flex*b),y[_]=p,y[C]=x,h.layoutRect(y),h.recalc&&h.recalc(),x+=p+u}else if(y.w=y.minW,y.h=y.minH,e.layoutRect(y),this.recalc(e),null===e._lastRect){var F=e.parent();F&&(F._lastRect=null,F.recalc())}}}),Mi=Ft.extend({Defaults:{containerClass:"flow-layout",controlClass:"flow-layout-item",endClass:"break"},recalc:function(e){e.items().filter(":visible").each(function(e){e.recalc&&e.recalc()})},isNative:function(){return!0}}),Ti=function(e,t){return ti.one(t,e)},Pi=function(e,t){return function(){e.execCommand("mceToggleFormat",!1,t)}},Wi=function(e,t){return function(){var n=this;e.formatter?e.formatter.formatChanged(t,function(e){n.active(e)}):e.on("init",function(){e.formatter.formatChanged(t,function(e){n.active(e)})})}},Di=function(e){e.addMenuItem("align",{text:"Align",menu:[{text:"Left",icon:"alignleft",onclick:Pi(e,"alignleft")},{text:"Center",icon:"aligncenter",onclick:Pi(e,"aligncenter")},{text:"Right",icon:"alignright",onclick:Pi(e,"alignright")},{text:"Justify",icon:"alignjustify",onclick:Pi(e,"alignjustify")}]}),a.each({alignleft:["Align left","JustifyLeft"],aligncenter:["Align center","JustifyCenter"],alignright:["Align right","JustifyRight"],alignjustify:["Justify","JustifyFull"],alignnone:["No alignment","JustifyNone"]},function(t,n){e.addButton(n,{active:!1,tooltip:t[0],cmd:t[1],onPostRender:Wi(e,n)})})},Ni=function(e){return function(t,n){return W.from(n).map(dn.fromDom).filter(Rn.isElement).bind(function(n){return function(e,t,n){for(;n!==t;){if(n.style[e]){var i=n.style[e];return""!==i?W.some(i):W.none()}n=n.parentNode}return W.none()}(e,t,n.dom()).or((i=e,r=n.dom(),W.from(m.DOM.getStyle(r,i,!0))));var i,r}).getOr("")}},Ai={getFontSize:Ni("fontSize"),getFontFamily:E.compose(function(e){return e.replace(/[\'\"]/g,"").replace(/,\s+/g,",")},Ni("fontFamily")),toPt:function(e,t){return/[0-9.]+px$/.test(e)?(n=72*parseInt(e,10)/96,i=t||0,r=Math.pow(10,i),Math.round(n*r)/r+"pt"):e;var n,i,r}},Bi=function(e){return e?e.split(",")[0]:""},Oi=function(e,t){return function(){var n=this;e.on("init nodeChange",function(i){var r,o,s,l=Ai.getFontFamily(e.getBody(),i.element),u=(r=t,o=l,a.each(r,function(e){e.value.toLowerCase()===o.toLowerCase()&&(s=e.value)}),a.each(r,function(e){s||Bi(e.value).toLowerCase()!==Bi(o).toLowerCase()||(s=e.value)}),s);n.value(u||null),!u&&l&&n.text(Bi(l))})}},zi=function(e){e.addButton("fontselect",function(){var t,n=(t=function(e){for(var t=(e=e.replace(/;$/,"").split(";")).length;t--;)e[t]=e[t].split("=");return e}(e.settings.font_formats||"Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats"),a.map(t,function(e){return{text:{raw:e[0]},value:e[1],textStyle:-1===e[1].indexOf("dings")?"font-family:"+e[1]:""}}));return{type:"listbox",text:"Font Family",tooltip:"Font Family",values:n,fixedWidth:!0,onPostRender:Oi(e,n),onselect:function(t){t.control.settings.value&&e.execCommand("FontName",!1,t.control.settings.value)}}})},Li=function(e){zi(e)},Ii=function(e,t,n){var i;return a.each(e,function(e){e.value===n?i=n:e.value===t&&(i=t)}),i},Fi=function(e){e.addButton("fontsizeselect",function(){var t,n,i,r=(t=e.settings.fontsize_formats||"8pt 10pt 12pt 14pt 18pt 24pt 36pt",a.map(t.split(" "),function(e){var t=e,n=e,i=e.split("=");return i.length>1&&(t=i[0],n=i[1]),{text:t,value:n}}));return{type:"listbox",text:"Font Sizes",tooltip:"Font Sizes",values:r,fixedWidth:!0,onPostRender:(n=e,i=r,function(){var e=this;n.on("init nodeChange",function(t){var r,o,s,a;if(r=Ai.getFontSize(n.getBody(),t.element))for(s=3;!a&&s>=0;s--)o=Ai.toPt(r,s),a=Ii(i,o,r);e.value(a||null),a||e.text(o)})}),onclick:function(t){t.control.settings.value&&e.execCommand("FontSize",!1,t.control.settings.value)}}})},Vi=function(e){Fi(e)},Ui=function(e,t){return function(){var n,i,r,o=[];return a.each(t,function(t){o.push({text:t[0],value:t[1],textStyle:function(){return e.formatter.getCssText(t[1])}})}),{type:"listbox",text:t[0][0],values:o,fixedWidth:!0,onselect:function(t){if(t.control){var n=t.control.value();Pi(e,n)()}},onPostRender:(n=e,i=o,function(){var e=this;n.on("nodeChange",function(t){var o=n.formatter,s=null;a.each(t.parents,function(e){if(a.each(i,function(t){if(r?o.matchNode(e,r,{value:t.value})&&(s=t.value):o.matchNode(e,t.value)&&(s=t.value),s)return!1}),s)return!1}),e.value(s)})})}}},Yi=function(e){var t,n,i=function(e){for(var t=(e=e.replace(/;$/,"").split(";")).length;t--;)e[t]=e[t].split("=");return e}(e.settings.block_formats||"Paragraph=p;Heading 1=h1;Heading 2=h2;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6;Preformatted=pre");e.addMenuItem("blockformats",{text:"Blocks",menu:(t=e,n=i,a.map(n,function(e){return{text:e[0],onclick:Pi(t,e[1]),textStyle:function(){return t.formatter.getCssText(e[1])}}}))}),e.addButton("formatselect",Ui(e,i))},$i=function(e,t){var n=t.length;return a.each(t,function(t){t.menu&&(t.hidden=0===$i(e,t.menu));var i=t.format;i&&(t.hidden=!e.formatter.canApply(i)),t.hidden&&n--}),n},ji=function(e,t){var n=t.items().length;return t.items().each(function(t){t.menu&&t.visible(ji(e,t.menu)>0),!t.menu&&t.settings.menu&&t.visible($i(e,t.settings.menu)>0);var i=t.settings.format;i&&t.visible(e.formatter.canApply(i)),t.visible()||n--}),n},qi=function(e){var t,n,i,r,o,s,l,u,c=(n=0,i=[],r=[{title:"Headings",items:[{title:"Heading 1",format:"h1"},{title:"Heading 2",format:"h2"},{title:"Heading 3",format:"h3"},{title:"Heading 4",format:"h4"},{title:"Heading 5",format:"h5"},{title:"Heading 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}],o=function(e){var t=[];if(e)return a.each(e,function(e){var r={text:e.title,icon:e.icon};if(e.items)r.menu=o(e.items);else{var s=e.format||"custom"+n++;e.format||(e.name=s,i.push(e)),r.format=s,r.cmd=e.cmd}t.push(r)}),t},(t=e).on("init",function(){a.each(i,function(e){t.formatter.register(e.name,e)})}),{type:"menu",items:t.settings.style_formats_merge?t.settings.style_formats?o(r.concat(t.settings.style_formats)):o(r):o(t.settings.style_formats||r),onPostRender:function(e){t.fire("renderFormatsMenu",{control:e.control})},itemDefaults:{preview:!0,textStyle:function(){if(this.settings.format)return t.formatter.getCssText(this.settings.format)},onPostRender:function(){var e=this;e.parent().on("show",function(){var n,i;(n=e.settings.format)&&(e.disabled(!t.formatter.canApply(n)),e.active(t.formatter.match(n))),(i=e.settings.cmd)&&e.active(t.queryCommandState(i))})},onclick:function(){this.settings.format&&Pi(t,this.settings.format)(),this.settings.cmd&&t.execCommand(this.settings.cmd)}}});s=c,e.addMenuItem("formats",{text:"Formats",menu:s}),u=c,(l=e).addButton("styleselect",{type:"menubutton",text:"Formats",menu:u,onShowMenu:function(){l.settings.style_formats_autohide&&ji(l,this.menu)}})},Xi=function(e,t){var n,i;if("string"==typeof t)i=t.split(" ");else if(a.isArray(t))return ee.flatten(a.map(t,function(t){return Xi(e,t)}));return n=a.grep(i,function(t){return"|"===t||t in e.menuItems}),a.map(n,function(t){return"|"===t?{text:"-"}:e.menuItems[t]})},Ji=function(e){return e&&"-"===e.text},Gi=function(e){var t=ee.filter(e,function(e,t,n){return!Ji(e)||!Ji(n[t-1])});return ee.filter(t,function(e,t,n){return!Ji(e)||t>0&&t<n.length-1})},Ki=function(e){var t,n,i,r,o=e.settings.insert_button_items;return Gi(o?Xi(e,o):(t=e,n="insert",i=[{text:"-"}],r=a.grep(t.menuItems,function(e){return e.context===n}),a.each(r,function(e){"before"===e.separator&&i.push({text:"|"}),e.prependToContext?i.unshift(e):i.push(e),"after"===e.separator&&i.push({text:"|"})}),i))},Zi=function(e){var t;(t=e).addButton("insert",{type:"menubutton",icon:"insert",menu:[],oncreatemenu:function(){this.menu.add(Ki(t)),this.menu.renderNew()}})},Qi=function(e){var t,n,i;t=e,a.each({bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",subscript:"Subscript",superscript:"Superscript"},function(e,n){t.addButton(n,{active:!1,tooltip:e,onPostRender:Wi(t,n),onclick:Pi(t,n)})}),n=e,a.each({outdent:["Decrease indent","Outdent"],indent:["Increase indent","Indent"],cut:["Cut","Cut"],copy:["Copy","Copy"],paste:["Paste","Paste"],help:["Help","mceHelp"],selectall:["Select all","SelectAll"],visualaid:["Visual aids","mceToggleVisualAid"],newdocument:["New document","mceNewDocument"],removeformat:["Clear formatting","RemoveFormat"],remove:["Remove","Delete"]},function(e,t){n.addButton(t,{tooltip:e[0],cmd:e[1]})}),i=e,a.each({blockquote:["Blockquote","mceBlockQuote"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"]},function(e,t){i.addButton(t,{active:!1,tooltip:e[0],cmd:e[1],onPostRender:Wi(i,t)})})},er=function(e){var t;Qi(e),t=e,a.each({bold:["Bold","Bold","Meta+B"],italic:["Italic","Italic","Meta+I"],underline:["Underline","Underline","Meta+U"],strikethrough:["Strikethrough","Strikethrough"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],removeformat:["Clear formatting","RemoveFormat"],newdocument:["New document","mceNewDocument"],cut:["Cut","Cut","Meta+X"],copy:["Copy","Copy","Meta+C"],paste:["Paste","Paste","Meta+V"],selectall:["Select all","SelectAll","Meta+A"]},function(e,n){t.addMenuItem(n,{text:e[0],icon:n,shortcut:e[2],cmd:e[1]})}),t.addMenuItem("codeformat",{text:"Code",icon:"code",onclick:Pi(t,"code")})},tr=function(e,t){return function(){var n=this,i=function(){var n="redo"===t?"hasRedo":"hasUndo";return!!e.undoManager&&e.undoManager[n]()};n.disabled(!i()),e.on("Undo Redo AddUndo TypingUndo ClearUndos SwitchMode",function(){n.disabled(e.readonly||!i())})}},nr=function(e){var t,n;(t=e).addMenuItem("undo",{text:"Undo",icon:"undo",shortcut:"Meta+Z",onPostRender:tr(t,"undo"),cmd:"undo"}),t.addMenuItem("redo",{text:"Redo",icon:"redo",shortcut:"Meta+Y",onPostRender:tr(t,"redo"),cmd:"redo"}),(n=e).addButton("undo",{tooltip:"Undo",onPostRender:tr(n,"undo"),cmd:"undo"}),n.addButton("redo",{tooltip:"Redo",onPostRender:tr(n,"redo"),cmd:"redo"})},ir=function(e){var t,n;(t=e).addMenuItem("visualaid",{text:"Visual aids",selectable:!0,onPostRender:(n=t,function(){var e=this;n.on("VisualAid",function(t){e.active(t.hasVisual)}),e.active(n.hasVisual)}),cmd:"mceToggleVisualAid"})},rr={setup:function(e){var t;e.rtl&&(et.rtl=!0),e.on("mousedown",function(){xt.hideAll()}),(t=e).settings.ui_container&&(_.container=Ti(dn.fromDom(document.body),t.settings.ui_container).fold(E.constant(null),function(e){return e.dom()})),Mt.tooltips=!_.iOS,et.translate=function(e){return s.translate(e)},Yi(e),Di(e),er(e),nr(e),Vi(e),Li(e),qi(e),ir(e),Zi(e)}},or=Vt.extend({recalc:function(e){var t,n,i,r,o,s,a,l,u,c,d,f,h,m,g,p,v,b,y,x,w,_,R,C,k,E,H,S,M=[],T=[];t=e.settings,r=e.items().filter(":visible"),o=e.layoutRect(),i=t.columns||Math.ceil(Math.sqrt(r.length)),n=Math.ceil(r.length/i),b=t.spacingH||t.spacing||0,y=t.spacingV||t.spacing||0,x=t.alignH||t.align,w=t.alignV||t.align,p=e.paddingBox,S="reverseRows"in t?t.reverseRows:e.isRtl(),x&&"string"==typeof x&&(x=[x]),w&&"string"==typeof w&&(w=[w]);for(d=0;d<i;d++)M.push(0);for(f=0;f<n;f++)T.push(0);for(f=0;f<n;f++)for(d=0;d<i&&(c=r[f*i+d]);d++)C=(u=c.layoutRect()).minW,k=u.minH,M[d]=C>M[d]?C:M[d],T[f]=k>T[f]?k:T[f];for(E=o.innerW-p.left-p.right,_=0,d=0;d<i;d++)_+=M[d]+(d>0?b:0),E-=(d>0?b:0)+M[d];for(H=o.innerH-p.top-p.bottom,R=0,f=0;f<n;f++)R+=T[f]+(f>0?y:0),H-=(f>0?y:0)+T[f];if(_+=p.left+p.right,R+=p.top+p.bottom,(l={}).minW=_+(o.w-o.innerW),l.minH=R+(o.h-o.innerH),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH,l.minW=Math.min(l.minW,o.maxW),l.minH=Math.min(l.minH,o.maxH),l.minW=Math.max(l.minW,o.startMinWidth),l.minH=Math.max(l.minH,o.startMinHeight),!o.autoResize||l.minW===o.minW&&l.minH===o.minH){var P;o.autoResize&&((l=e.layoutRect(l)).contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH),P="start"===t.packV?0:H>0?Math.floor(H/n):0;var W=0,D=t.flexWidths;if(D)for(d=0;d<D.length;d++)W+=D[d];else W=i;var N=E/W;for(d=0;d<i;d++)M[d]+=D?D[d]*N:N;for(m=p.top,f=0;f<n;f++){for(h=p.left,a=T[f]+P,d=0;d<i&&(c=r[S?f*i+i-1-d:f*i+d]);d++)g=c.settings,u=c.layoutRect(),s=Math.max(M[d],u.startMinWidth),u.x=h,u.y=m,"center"===(v=g.alignH||(x?x[d]||x[0]:null))?u.x=h+s/2-u.w/2:"right"===v?u.x=h+s-u.w:"stretch"===v&&(u.w=s),"center"===(v=g.alignV||(w?w[d]||w[0]:null))?u.y=m+a/2-u.h/2:"bottom"===v?u.y=m+a-u.h:"stretch"===v&&(u.h=a),c.layoutRect(u),h+=s+b,c.recalc&&c.recalc();m+=a+y}}else if(l.w=l.minW,l.h=l.minH,e.layoutRect(l),this.recalc(e),null===e._lastRect){var A=e.parent();A&&(A._lastRect=null,A.recalc())}}}),sr=Mt.extend({renderHtml:function(){var e=this;return e.classes.add("iframe"),e.canFocus=!1,'<iframe id="'+e._id+'" class="'+e.classes+'" tabindex="-1" src="'+(e.settings.url||"javascript:''")+'" frameborder="0"></iframe>'},src:function(e){this.getEl().src=e},html:function(e,t){var n=this,i=this.getEl().contentWindow.document.body;return i?(i.innerHTML=e,t&&t()):C.setTimeout(function(){n.html(e)}),this}}),ar=Mt.extend({init:function(e){this._super(e),this.classes.add("widget").add("infobox"),this.canFocus=!1},severity:function(e){this.classes.remove("error"),this.classes.remove("warning"),this.classes.remove("success"),this.classes.add(e)},help:function(e){this.state.set("help",e)},renderHtml:function(){var e=this,t=e.classPrefix;return'<div id="'+e._id+'" class="'+e.classes+'"><div id="'+e._id+'-body">'+e.encode(e.state.get("text"))+'<button role="button" tabindex="-1"><i class="'+t+"ico "+t+'i-help"></i></button></div></div>'},bindStates:function(){var e=this;return e.state.on("change:text",function(t){e.getEl("body").firstChild.data=e.encode(t.value),e.state.get("rendered")&&e.updateLayoutRect()}),e.state.on("change:help",function(t){e.classes.toggle("has-help",t.value),e.state.get("rendered")&&e.updateLayoutRect()}),e._super()}}),lr=Mt.extend({init:function(e){var t=this;t._super(e),t.classes.add("widget").add("label"),t.canFocus=!1,e.multiline&&t.classes.add("autoscroll"),e.strong&&t.classes.add("strong")},initLayoutRect:function(){var e=this,t=e._super();return e.settings.multiline&&(we.getSize(e.getEl()).width>t.maxW&&(t.minW=t.maxW,e.classes.add("multiline")),e.getEl().style.width=t.minW+"px",t.startMinH=t.h=t.minH=Math.min(t.maxH,we.getSize(e.getEl()).height)),t},repaint:function(){return this.settings.multiline||(this.getEl().style.lineHeight=this.layoutRect().h+"px"),this._super()},severity:function(e){this.classes.remove("error"),this.classes.remove("warning"),this.classes.remove("success"),this.classes.add(e)},renderHtml:function(){var e,t,n=this,i=n.settings.forId,r=n.settings.html?n.settings.html:n.encode(n.state.get("text"));return!i&&(t=n.settings.forName)&&(e=n.getRoot().find("#"+t)[0])&&(i=e._id),i?'<label id="'+n._id+'" class="'+n.classes+'"'+(i?' for="'+i+'"':"")+">"+r+"</label>":'<span id="'+n._id+'" class="'+n.classes+'">'+r+"</span>"},bindStates:function(){var e=this;return e.state.on("change:text",function(t){e.innerHtml(e.encode(t.value)),e.state.get("rendered")&&e.updateLayoutRect()}),e._super()}}),ur=rt.extend({Defaults:{role:"toolbar",layout:"flow"},init:function(e){this._super(e),this.classes.add("toolbar")},postRender:function(){return this.items().each(function(e){e.classes.add("toolbar-item")}),this._super()}}),cr=ur.extend({Defaults:{role:"menubar",containerCls:"menubar",ariaRoot:!0,defaults:{type:"menubutton"}}}),dr=Ut.extend({init:function(e){var t=this;t._renderOpen=!0,t._super(e),e=t.settings,t.classes.add("menubtn"),e.fixedWidth&&t.classes.add("fixed-width"),t.aria("haspopup",!0),t.state.set("menu",e.menu||t.render())},showMenu:function(e){var t,n=this;if(n.menu&&n.menu.visible()&&!1!==e)return n.hideMenu();n.menu||(t=n.state.get("menu")||[],n.classes.add("opened"),t.length?t={type:"menu",animate:!0,items:t}:(t.type=t.type||"menu",t.animate=!0),t.renderTo?n.menu=t.parent(n).show().renderTo():n.menu=g.create(t).parent(n).renderTo(),n.fire("createmenu"),n.menu.reflow(),n.menu.on("cancel",function(e){e.control.parent()===n.menu&&(e.stopPropagation(),n.focus(),n.hideMenu())}),n.menu.on("select",function(){n.focus()}),n.menu.on("show hide",function(e){e.control===n.menu&&(n.activeMenu("show"===e.type),n.classes.toggle("opened","show"===e.type)),n.aria("expanded","show"===e.type)}).fire("show")),n.menu.show(),n.menu.layoutRect({w:n.layoutRect().w}),n.menu.repaint(),n.menu.moveRel(n.getEl(),n.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"]),n.fire("showmenu")},hideMenu:function(){this.menu&&(this.menu.items().each(function(e){e.hideMenu&&e.hideMenu()}),this.menu.hide())},activeMenu:function(e){this.classes.toggle("active",e)},renderHtml:function(){var e,t=this,n=t._id,i=t.classPrefix,r=t.settings.icon,o=t.state.get("text"),s="";return(e=t.settings.image)?(r="none","string"!=typeof e&&(e=window.getSelection?e[0]:e[1]),e=" style=\"background-image: url('"+e+"')\""):e="",o&&(t.classes.add("btn-has-text"),s='<span class="'+i+'txt">'+t.encode(o)+"</span>"),r=t.settings.icon?i+"ico "+i+"i-"+r:"",t.aria("role",t.parent()instanceof cr?"menuitem":"button"),'<div id="'+n+'" class="'+t.classes+'" tabindex="-1" aria-labelledby="'+n+'"><button id="'+n+'-open" role="presentation" type="button" tabindex="-1">'+(r?'<i class="'+r+'"'+e+"></i>":"")+s+' <i class="'+i+'caret"></i></button></div>'},postRender:function(){var e=this;return e.on("click",function(t){t.control===e&&function(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1}(t.target,e.getEl())&&(e.focus(),e.showMenu(!t.aria),t.aria&&e.menu.items().filter(":visible")[0].focus())}),e.on("mouseenter",function(t){var n,i=t.control,r=e.parent();i&&r&&i instanceof dr&&i.parent()===r&&(r.items().filter("MenuButton").each(function(e){e.hideMenu&&e!==i&&(e.menu&&e.menu.visible()&&(n=!0),e.hideMenu())}),n&&(i.focus(),i.showMenu()))}),e._super()},bindStates:function(){var e=this;return e.state.on("change:menu",function(){e.menu&&e.menu.remove(),e.menu=null}),e._super()},remove:function(){this._super(),this.menu&&this.menu.remove()}}),fr=xt.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"application",bodyRole:"menu",ariaRoot:!0},init:function(e){if(e.autohide=!0,e.constrainToViewport=!0,"function"==typeof e.items&&(e.itemsFactory=e.items,e.items=[]),e.itemDefaults)for(var t=e.items,n=t.length;n--;)t[n]=a.extend({},e.itemDefaults,t[n]);this._super(e),this.classes.add("menu"),e.animate&&11!==_.ie&&this.classes.add("animate")},repaint:function(){return this.classes.toggle("menu-align",!0),this._super(),this.getEl().style.height="",this.getEl("body").style.height="",this},cancel:function(){this.hideAll(),this.fire("select")},load:function(){var e,t=this;function n(){t.throbber&&(t.throbber.hide(),t.throbber=null)}t.settings.itemsFactory&&(t.throbber||(t.throbber=new kt(t.getEl("body"),!0),0===t.items().length?(t.throbber.show(),t.fire("loading")):t.throbber.show(100,function(){t.items().remove(),t.fire("loading")}),t.on("hide close",n)),t.requestTime=e=(new Date).getTime(),t.settings.itemsFactory(function(i){0!==i.length?t.requestTime===e&&(t.getEl().style.width="",t.getEl("body").style.width="",n(),t.items().remove(),t.getEl("body").innerHTML="",t.add(i),t.renderNew(),t.fire("loaded")):t.hide()}))},hideAll:function(){return this.find("menuitem").exec("hideMenu"),this._super()},preRender:function(){var e=this;return e.items().each(function(t){var n=t.settings;if(n.icon||n.image||n.selectable)return e._hasIcons=!0,!1}),e.settings.itemsFactory&&e.on("postrender",function(){e.settings.itemsFactory&&e.load()}),e.on("show hide",function(t){t.control===e&&("show"===t.type?C.setTimeout(function(){e.classes.add("in")},0):e.classes.remove("in"))}),e._super()}}),hr=dr.extend({init:function(e){var t,n,i,r,o=this;o._super(e),e=o.settings,o._values=t=e.values,t&&("undefined"!=typeof e.value&&function s(t){for(var r=0;r<t.length;r++){if(n=t[r].selected||e.value===t[r].value)return i=i||t[r].text,o.state.set("value",t[r].value),!0;if(t[r].menu&&s(t[r].menu))return!0}}(t),!n&&t.length>0&&(i=t[0].text,o.state.set("value",t[0].value)),o.state.set("menu",t)),o.state.set("text",e.text||i),o.classes.add("listbox"),o.on("select",function(t){var n=t.control;r&&(t.lastControl=r),e.multiple?n.active(!n.active()):o.value(t.control.value()),r=n})},bindStates:function(){var e=this;return e.on("show",function(t){var n,i;n=t.control,i=e.value(),n instanceof fr&&n.items().each(function(e){e.hasMenus()||e.active(e.value()===i)})}),e.state.on("change:value",function(t){var n=function i(e,t){var n;if(e)for(var r=0;r<e.length;r++){if(e[r].value===t)return e[r];if(e[r].menu&&(n=i(e[r].menu,t)))return n}}(e.state.get("menu"),t.value);n?e.text(n.text):e.text(e.settings.text)}),e._super()}}),mr=Mt.extend({Defaults:{border:0,role:"menuitem"},init:function(e){var t,n=this;n._super(e),e=n.settings,n.classes.add("menu-item"),e.menu&&n.classes.add("menu-item-expand"),e.preview&&n.classes.add("menu-item-preview"),"-"!==(t=n.state.get("text"))&&"|"!==t||(n.classes.add("menu-item-sep"),n.aria("role","separator"),n.state.set("text","-")),e.selectable&&(n.aria("role","menuitemcheckbox"),n.classes.add("menu-item-checkbox"),e.icon="selected"),e.preview||e.selectable||n.classes.add("menu-item-normal"),n.on("mousedown",function(e){e.preventDefault()}),e.menu&&!e.ariaHideMenu&&n.aria("haspopup",!0)},hasMenus:function(){return!!this.settings.menu},showMenu:function(){var e,t=this,n=t.settings,i=t.parent();if(i.items().each(function(e){e!==t&&e.hideMenu()}),n.menu){(e=t.menu)?e.show():((e=n.menu).length?e={type:"menu",animate:!0,items:e}:(e.type=e.type||"menu",e.animate=!0),i.settings.itemDefaults&&(e.itemDefaults=i.settings.itemDefaults),(e=t.menu=g.create(e).parent(t).renderTo()).reflow(),e.on("cancel",function(n){n.stopPropagation(),t.focus(),e.hide()}),e.on("show hide",function(e){e.control.items&&e.control.items().each(function(e){e.active(e.settings.selected)})}).fire("show"),e.on("hide",function(n){n.control===e&&t.classes.remove("selected")}),e.submenu=!0),e._parentMenu=i,e.classes.add("menu-sub");var r=e.testMoveRel(t.getEl(),t.isRtl()?["tl-tr","bl-br","tr-tl","br-bl"]:["tr-tl","br-bl","tl-tr","bl-br"]);e.moveRel(t.getEl(),r),e.rel=r,r="menu-sub-"+r,e.classes.remove(e._lastRel).add(r),e._lastRel=r,t.classes.add("selected"),t.aria("expanded",!0)}},hideMenu:function(){var e=this;return e.menu&&(e.menu.items().each(function(e){e.hideMenu&&e.hideMenu()}),e.menu.hide(),e.aria("expanded",!1)),e},renderHtml:function(){var e,t=this,n=t._id,i=t.settings,r=t.classPrefix,o=t.state.get("text"),s=t.settings.icon,a="",l=i.shortcut,u=t.encode(i.url);function c(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function d(e){var t=i.match||"";return t?e.replace(new RegExp(c(t),"gi"),function(e){return"!mce~match["+e+"]mce~match!"}):e}function f(e){return e.replace(new RegExp(c("!mce~match["),"g"),"<b>").replace(new RegExp(c("]mce~match!"),"g"),"</b>")}return s&&t.parent().classes.add("menu-has-icons"),i.image&&(a=" style=\"background-image: url('"+i.image+"')\""),l&&(l=function(e){var t,n,i={};for(i=_.mac?{alt:"&#x2325;",ctrl:"&#x2318;",shift:"&#x21E7;",meta:"&#x2318;"}:{meta:"Ctrl"},e=e.split("+"),t=0;t<e.length;t++)(n=i[e[t].toLowerCase()])&&(e[t]=n);return e.join("+")}(l)),s=r+"ico "+r+"i-"+(t.settings.icon||"none"),e="-"!==o?'<i class="'+s+'"'+a+"></i>\xa0":"",o=f(t.encode(d(o))),u=f(t.encode(d(u))),'<div id="'+n+'" class="'+t.classes+'" tabindex="-1">'+e+("-"!==o?'<span id="'+n+'-text" class="'+r+'text">'+o+"</span>":"")+(l?'<div id="'+n+'-shortcut" class="'+r+'menu-shortcut">'+l+"</div>":"")+(i.menu?'<div class="'+r+'caret"></div>':"")+(u?'<div class="'+r+'menu-item-link">'+u+"</div>":"")+"</div>"},postRender:function(){var e=this,t=e.settings,n=t.textStyle;if("function"==typeof n&&(n=n.call(this)),n){var i=e.getEl("text");i&&(i.setAttribute("style",n),e._textStyle=n)}return e.on("mouseenter click",function(n){n.control===e&&(t.menu||"click"!==n.type?(e.showMenu(),n.aria&&e.menu.focus(!0)):(e.fire("select"),C.requestAnimationFrame(function(){e.parent().hideAll()})))}),e._super(),e},hover:function(){return this.parent().items().each(function(e){e.classes.remove("selected")}),this.classes.toggle("selected",!0),this},active:function(e){return function(e,t){var n=e._textStyle;if(n){var i=e.getEl("text");i.setAttribute("style",n),t&&(i.style.color="",i.style.backgroundColor="")}}(this,e),void 0!==e&&this.aria("checked",e),this._super(e)},remove:function(){this._super(),this.menu&&this.menu.remove()}}),gr=jt.extend({Defaults:{classes:"radio",role:"radio"}}),pr=Mt.extend({renderHtml:function(){var e=this,t=e.classPrefix;return e.classes.add("resizehandle"),"both"===e.settings.direction&&e.classes.add("resizehandle-both"),e.canFocus=!1,'<div id="'+e._id+'" class="'+e.classes+'"><i class="'+t+"ico "+t+'i-resize"></i></div>'},postRender:function(){var e=this;e._super(),e.resizeDragHelper=new ct(this._id,{start:function(){e.fire("ResizeStart")},drag:function(t){"both"!==e.settings.direction&&(t.deltaX=0),e.fire("Resize",t)},stop:function(){e.fire("ResizeEnd")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}});function vr(e){var t="";if(e)for(var n=0;n<e.length;n++)t+='<option value="'+e[n]+'">'+e[n]+"</option>";return t}var br=Mt.extend({Defaults:{classes:"selectbox",role:"selectbox",options:[]},init:function(e){var t=this;t._super(e),t.settings.size&&(t.size=t.settings.size),t.settings.options&&(t._options=t.settings.options),t.on("keydown",function(e){var n;13===e.keyCode&&(e.preventDefault(),t.parents().reverse().each(function(e){if(e.toJSON)return n=e,!1}),t.fire("submit",{data:n.toJSON()}))})},options:function(e){return arguments.length?(this.state.set("options",e),this):this.state.get("options")},renderHtml:function(){var e,t=this,n="";return e=vr(t._options),t.size&&(n=' size = "'+t.size+'"'),'<select id="'+t._id+'" class="'+t.classes+'"'+n+">"+e+"</select>"},bindStates:function(){var e=this;return e.state.on("change:options",function(t){e.getEl().innerHTML=vr(t.value)}),e._super()}});function yr(e,t,n){return e<t&&(e=t),e>n&&(e=n),e}function xr(e,t,n){e.setAttribute("aria-"+t,n)}function wr(e,t){var n,i,r,o,s;"v"===e.settings.orientation?(r="top",i="height",n="h"):(r="left",i="width",n="w"),s=e.getEl("handle"),o=((e.layoutRect()[n]||100)-we.getSize(s)[i])*((t-e._minValue)/(e._maxValue-e._minValue))+"px",s.style[r]=o,s.style.height=e.layoutRect().h+"px",xr(s,"valuenow",t),xr(s,"valuetext",""+e.settings.previewFilter(t)),xr(s,"valuemin",e._minValue),xr(s,"valuemax",e._maxValue)}var _r=Mt.extend({init:function(e){var t=this;e.previewFilter||(e.previewFilter=function(e){return Math.round(100*e)/100}),t._super(e),t.classes.add("slider"),"v"===e.orientation&&t.classes.add("vertical"),t._minValue=e.minValue||0,t._maxValue=e.maxValue||100,t._initValue=t.state.get("value")},renderHtml:function(){var e=this._id,t=this.classPrefix;return'<div id="'+e+'" class="'+this.classes+'"><div id="'+e+'-handle" class="'+t+'slider-handle" role="slider" tabindex="-1"></div></div>'},reset:function(){this.value(this._initValue).repaint()},postRender:function(){var e,t,n,i,r,o,s,a,l,u,c,d,f,h,m=this;e=m._minValue,t=m._maxValue,"v"===m.settings.orientation?(n="screenY",i="top",r="height",o="h"):(n="screenX",i="left",r="width",o="w"),m._super(),function(e,t){function n(n){var i,r,o;i=yr(i=(((i=m.value())+(o=e))/(t-o)+.05*n)*(t-(r=e))-r,e,t),m.value(i),m.fire("dragstart",{value:i}),m.fire("drag",{value:i}),m.fire("dragend",{value:i})}m.on("keydown",function(e){switch(e.keyCode){case 37:case 38:n(-1);break;case 39:case 40:n(1)}})}(e,t),s=e,a=t,l=m.getEl("handle"),m._dragHelper=new ct(m._id,{handle:m._id+"-handle",start:function(e){u=e[n],c=parseInt(m.getEl("handle").style[i],10),d=(m.layoutRect()[o]||100)-we.getSize(l)[r],m.fire("dragstart",{value:h})},drag:function(e){var t=e[n]-u;f=yr(c+t,0,d),l.style[i]=f+"px",h=s+f/d*(a-s),m.value(h),m.tooltip().text(""+m.settings.previewFilter(h)).show().moveRel(l,"bc tc"),m.fire("drag",{value:h})},stop:function(){m.tooltip().hide(),m.fire("dragend",{value:h})}})},repaint:function(){this._super(),wr(this,this.value())},bindStates:function(){var e=this;return e.state.on("change:value",function(t){wr(e,t.value)}),e._super()}}),Rr=Mt.extend({renderHtml:function(){return this.classes.add("spacer"),this.canFocus=!1,'<div id="'+this._id+'" class="'+this.classes+'"></div>'}}),Cr=dr.extend({Defaults:{classes:"widget btn splitbtn",role:"button"},repaint:function(){var e,t,n=this.getEl(),i=this.layoutRect();return this._super(),e=n.firstChild,t=n.lastChild,ye(e).css({width:i.w-we.getSize(t).width,height:i.h-2}),ye(t).css({height:i.h-2}),this},activeMenu:function(e){ye(this.getEl().lastChild).toggleClass(this.classPrefix+"active",e)},renderHtml:function(){var e,t,n=this,i=n._id,r=n.classPrefix,o=n.state.get("icon"),s=n.state.get("text"),a=n.settings,l="";return(e=a.image)?(o="none","string"!=typeof e&&(e=window.getSelection?e[0]:e[1]),e=" style=\"background-image: url('"+e+"')\""):e="",o=a.icon?r+"ico "+r+"i-"+o:"",s&&(n.classes.add("btn-has-text"),l='<span class="'+r+'txt">'+n.encode(s)+"</span>"),t="boolean"==typeof a.active?' aria-pressed="'+a.active+'"':"",'<div id="'+i+'" class="'+n.classes+'" role="button"'+t+' tabindex="-1"><button type="button" hidefocus="1" tabindex="-1">'+(o?'<i class="'+o+'"'+e+"></i>":"")+l+'</button><button type="button" class="'+r+'open" hidefocus="1" tabindex="-1">'+(n._menuBtnText?(o?"\xa0":"")+n._menuBtnText:"")+' <i class="'+r+'caret"></i></button></div>'},postRender:function(){var e=this.settings.onclick;return this.on("click",function(t){var n=t.target;if(t.control===this)for(;n;){if(t.aria&&"down"!==t.aria.key||"BUTTON"===n.nodeName&&-1===n.className.indexOf("open"))return t.stopImmediatePropagation(),void(e&&e.call(this,t));n=n.parentNode}}),delete this.settings.onclick,this._super()}}),kr=Mi.extend({Defaults:{containerClass:"stack-layout",controlClass:"stack-layout-item",endClass:"break"},isNative:function(){return!0}}),Er=ft.extend({Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(e){var t;this.activeTabId&&(t=this.getEl(this.activeTabId),ye(t).removeClass(this.classPrefix+"active"),t.setAttribute("aria-selected","false")),this.activeTabId="t"+e,(t=this.getEl("t"+e)).setAttribute("aria-selected","true"),ye(t).addClass(this.classPrefix+"active"),this.items()[e].show().fire("showtab"),this.reflow(),this.items().each(function(t,n){e!==n&&t.hide()})},renderHtml:function(){var e=this,t=e._layout,n="",i=e.classPrefix;return e.preRender(),t.preRender(e),e.items().each(function(t,r){var o=e._id+"-t"+r;t.aria("role","tabpanel"),t.aria("labelledby",o),n+='<div id="'+o+'" class="'+i+'tab" unselectable="on" role="tab" aria-controls="'+t._id+'" aria-selected="false" tabIndex="-1">'+e.encode(t.settings.title)+"</div>"}),'<div id="'+e._id+'" class="'+e.classes+'" hidefocus="1" tabindex="-1"><div id="'+e._id+'-head" class="'+i+'tabs" role="tablist">'+n+'</div><div id="'+e._id+'-body" class="'+e.bodyClasses+'">'+t.renderHtml(e)+"</div></div>"},postRender:function(){var e=this;e._super(),e.settings.activeTab=e.settings.activeTab||0,e.activateTab(e.settings.activeTab),this.on("click",function(t){var n=t.target.parentNode;if(n&&n.id===e._id+"-head")for(var i=n.childNodes.length;i--;)n.childNodes[i]===t.target&&e.activateTab(i)})},initLayoutRect:function(){var e,t,n,i=this;t=(t=we.getSize(i.getEl("head")).width)<0?0:t,n=0,i.items().each(function(e){t=Math.max(t,e.layoutRect().minW),n=Math.max(n,e.layoutRect().minH)}),i.items().each(function(e){e.settings.x=0,e.settings.y=0,e.settings.w=t,e.settings.h=n,e.layoutRect({x:0,y:0,w:t,h:n})});var r=we.getSize(i.getEl("head")).height;return i.settings.minWidth=t,i.settings.minHeight=n+r,(e=i._super()).deltaH+=r,e.innerH=e.h-e.deltaH,e}}),Hr=Mt.extend({init:function(e){var t=this;t._super(e),t.classes.add("textbox"),e.multiline?t.classes.add("multiline"):(t.on("keydown",function(e){var n;13===e.keyCode&&(e.preventDefault(),t.parents().reverse().each(function(e){if(e.toJSON)return n=e,!1}),t.fire("submit",{data:n.toJSON()}))}),t.on("keyup",function(e){t.state.set("value",e.target.value)}))},repaint:function(){var e,t,n,i,r,o=this,s=0;e=o.getEl().style,t=o._layoutRect,r=o._lastRepaintRect||{};var a=document;return!o.settings.multiline&&a.all&&(!a.documentMode||a.documentMode<=8)&&(e.lineHeight=t.h-s+"px"),i=(n=o.borderBox).left+n.right+8,s=n.top+n.bottom+(o.settings.multiline?8:0),t.x!==r.x&&(e.left=t.x+"px",r.x=t.x),t.y!==r.y&&(e.top=t.y+"px",r.y=t.y),t.w!==r.w&&(e.width=t.w-i+"px",r.w=t.w),t.h!==r.h&&(e.height=t.h-s+"px",r.h=t.h),o._lastRepaintRect=r,o.fire("repaint",{},!1),o},renderHtml:function(){var e,t,n=this,i=n.settings;return e={id:n._id,hidefocus:"1"},a.each(["rows","spellcheck","maxLength","size","readonly","min","max","step","list","pattern","placeholder","required","multiple"],function(t){e[t]=i[t]}),n.disabled()&&(e.disabled="disabled"),i.subtype&&(e.type=i.subtype),(t=we.create(i.multiline?"textarea":"input",e)).value=n.state.get("value"),t.className=n.classes,t.outerHTML},value:function(e){return arguments.length?(this.state.set("value",e),this):(this.state.get("rendered")&&this.state.set("value",this.getEl().value),this.state.get("value"))},postRender:function(){var e=this;e.getEl().value=e.state.get("value"),e._super(),e.$el.on("change",function(t){e.state.set("value",t.target.value),e.fire("change",t)})},bindStates:function(){var e=this;return e.state.on("change:value",function(t){e.getEl().value!==t.value&&(e.getEl().value=t.value)}),e.state.on("change:disabled",function(t){e.getEl().disabled=t.value}),e._super()},remove:function(){this.$el.off(),this._super()}}),Sr=function(){return{Selector:Be,Collection:Le,ReflowQueue:qe,Control:et,Factory:g,KeyboardNavigation:nt,Container:rt,DragHelper:ct,Scrollable:dt,Panel:ft,Movable:Re,Resizable:ht,FloatPanel:xt,Window:zt,MessageBox:Lt,Tooltip:St,Widget:Mt,Progress:Tt,Notification:Wt,Layout:Ft,AbsoluteLayout:Vt,Button:Ut,ButtonGroup:$t,Checkbox:jt,ComboBox:Xt,ColorBox:Jt,PanelButton:Gt,ColorButton:Zt,ColorPicker:en,Path:nn,ElementPath:rn,FormItem:on,Form:sn,FieldSet:an,FilePicker:Ei,FitLayout:Hi,FlexLayout:Si,FlowLayout:Mi,FormatControls:rr,GridLayout:or,Iframe:sr,InfoBox:ar,Label:lr,Toolbar:ur,MenuBar:cr,MenuButton:dr,MenuItem:mr,Throbber:kt,Menu:fr,ListBox:hr,Radio:gr,ResizeHandle:pr,SelectBox:br,Slider:_r,Spacer:Rr,SplitButton:Cr,StackLayout:kr,TabPanel:Er,TextBox:Hr,DropZone:tn,BrowseButton:Yt}},Mr=function(e){e.ui?a.each(Sr(),function(t,n){e.ui[n]=t}):e.ui=Sr()};a.each(Sr(),function(e,t){g.add(t,e)}),Mr(window.tinymce?window.tinymce:{}),o.add("modern",function(e){return rr.setup(e),It(e)})}();
diff --git a/project-web/src/App.vue b/project-web/src/App.vue
new file mode 100644
index 0000000..0816b2f
--- /dev/null
+++ b/project-web/src/App.vue
@@ -0,0 +1,11 @@
+<template>
+  <div id="app">
+    <router-view />
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'App',
+};
+</script>
diff --git a/project-web/src/api/baseSetting/finsystenant.js b/project-web/src/api/baseSetting/finsystenant.js
new file mode 100644
index 0000000..1b85d94
--- /dev/null
+++ b/project-web/src/api/baseSetting/finsystenant.js
@@ -0,0 +1,60 @@
+import request from '@/utils/request'
+import SettingIplatform from '@/utils/settingIplatform';
+
+/**
+ * @Description 鏌ヨ鍖哄垝鏍�
+ * @Author wh
+ * @Date 2023/7/13 20:11
+ */
+export function getTree(parameter) {
+  return request.get(SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/select/tree_fin_tenant', {params: parameter})
+}
+
+/**
+ * @Description 鏍规嵁棣栧瓧姣嶆煡璇㈠尯鍒掑垪琛�
+ * @Author sgp
+ * @Date 2023/9/7 20:11
+ */
+export function allList(parameter) {
+  return request.get(SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/select/allList', {params: parameter})
+}
+// 鏂板
+export function add(data) {
+  return request({
+    url: '/pc/fin/sys/tenant/add',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼
+export function edit(data) {
+  return request({
+    url: '/pc/fin/sys/tenant/edit',
+    method: 'post',
+    data: data
+  })
+}
+
+// 鏌ヨ閮ㄩ棬
+export function getOegs(parameter) {
+  return request.get(SettingIplatform.apiBaseURL + '/pc/fin/sys/org/select/down/list', {params: parameter})
+}
+
+// 鍒犻櫎鏈烘瀯淇℃伅
+export function del(data) {
+  return request({
+    url: '/pc/fin/sys/tenant/del',
+    method: 'post',
+    data: data
+  })
+}
+
+/**
+ * @Description 鏍规嵁鏈烘瀯id鑾峰彇鐢ㄦ埛
+ * @Author wh
+ * @Date 2023/10/4 16:10
+ */
+export function getUserByOrgId(parameter) {
+  return request.get(SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getUserByOrgId', {params: parameter})
+}
diff --git a/project-web/src/api/dashboard/dash.js b/project-web/src/api/dashboard/dash.js
new file mode 100644
index 0000000..59877b6
--- /dev/null
+++ b/project-web/src/api/dashboard/dash.js
@@ -0,0 +1,59 @@
+import request from '@/utils/request'
+
+// 鑾峰彇浜嬩欢缁熻
+export function getEventInfo() {
+  return request({
+    url: '/pc/fin/dashboard/getEventInfo',
+    method: 'get'
+  });
+}
+
+// 鏍规嵁椤圭洰鏌ュ伐鍗�
+export function getNumByProject(params) {
+  return request({
+    url: '/pc/fin/dashboard/getNumByProject',
+    method: 'get',
+    params
+  });
+}
+
+// 鑾峰彇绛夌骇鏁伴噺
+
+export function getEventType() {
+  return request({
+    url: '/pc/fin/dashboard/getEventType',
+    method: 'get'
+  });
+}
+
+export function getLVNum() {
+  return request({
+    url: '/pc/fin/dashboard/getEventLV',
+    method: 'get'
+  });
+}
+
+
+// 鑾峰彇娴佺▼鏁版嵁
+export function getProcess() {
+  return request({
+    url: '/pc/fin/dashboard/getProcess',
+    method: 'get'
+  });
+}
+// 鑾峰彇閫氱煡鍒楄〃
+export function getNotify(params) {
+  return request({
+    url: '/pc/fin/manage/select/list',
+    method: 'get',
+    params
+  });
+}
+// 闃呰閫氱煡娑堟伅
+export function readMsg(params) {
+  return request({
+    url: '/pc/fin/manage/readMsg',
+    method: 'get',
+    params
+  });
+}
diff --git a/project-web/src/api/dataV.js b/project-web/src/api/dataV.js
new file mode 100644
index 0000000..1e88bc4
--- /dev/null
+++ b/project-web/src/api/dataV.js
@@ -0,0 +1,54 @@
+import request from '@/utils/request';
+
+export default {
+  // 鏌ヨ缁煎悎缁熻鍒嗘瀽
+  queryBoardTotalData(params = {}) {
+    return request({
+      url: '/pc/p/dash/board/totalData',
+      method: 'get',
+      params,
+    });
+  },
+  // 鏌ヨ璁″垝鎶曡祫鏁版嵁鍒嗘瀽
+  queryPlanMoney() {
+    return request({
+      url: '/pc/p/dash/board/planMoney',
+      method: 'get',
+    });
+  },
+  // 鏌ヨ璁″垝鎶曡祫鏁版嵁鍒嗘瀽
+  queryProjectYear() {
+    return request({
+      url: '/pc/p/dash/board/yearProjectNum',
+      method: 'get',
+    });
+  },
+  // 鏌ヨ椤圭洰绫诲瀷鍗犳瘮鍒嗘瀽
+  queryProjectNumByType() {
+    return request({
+      url: '/pc/p/dash/board/projectNumByType',
+      method: 'get',
+    });
+  },
+  // 鏌ヨ鎵规璁″垝鏁版嵁鍒嗘瀽
+  queryProjectNumByBatch() {
+    return request({
+      url: '/pc/p/dash/board/projectNumByBatch',
+      method: 'get',
+    });
+  },
+  // 鏌ヨ椤圭洰淇℃伅鍒楄〃
+  queryProjectList() {
+    return request({
+      url: '/pc/p/dash/board/projectNodeTime',
+      method: 'get',
+    });
+  },
+  // 鏌ヨ椤圭洰鍦板浘鏁版嵁
+  queryProjectMap() {
+    return request({
+      url: '/pc/p/dash/board/totalDataByOrg',
+      method: 'get',
+    });
+  },
+};
diff --git a/project-web/src/api/projectConfig/buildPlan.js b/project-web/src/api/projectConfig/buildPlan.js
new file mode 100644
index 0000000..3b100c6
--- /dev/null
+++ b/project-web/src/api/projectConfig/buildPlan.js
@@ -0,0 +1,64 @@
+import request from '@/utils/request';
+
+
+//澧炲姞
+export function add(data) {
+  return request({
+    url: '/pc/p/temp/project/add',
+    method: 'post',
+    data
+  });
+}
+//鍒犻櫎
+export function del(data) {
+  return request({
+    url: '/pc/p/temp/project/del',
+    method: 'delete',
+    data
+  });
+}
+
+//缂栬緫
+export function upd(data) {
+  return request({
+    url: '/pc/p/temp/project/upd',
+    method: 'post',
+    data
+  });
+}
+
+//璇︽儏
+export function getDetail(params) {
+  return request({
+    url: '/pc/p/temp/project/detail',
+    method: 'get',
+    params
+  });
+}
+//淇敼鐘舵��
+export function updStatus(data) {
+  return request({
+    url: '/pc/p/temp/project/updStatus',
+    method: 'post',
+    data
+  });
+}
+
+//鏌ヨ鍒楄〃
+export function getList(params) {
+  return request({
+    url: '/pc/p/temp/project/list',
+    method: 'get',
+    params
+  });
+}
+
+// 鑾峰彇鍒嗙被
+export function getPlanType(params) {
+  return request({
+    url: '/permit/dict/data/type/PLAN_TYPE',
+    method: 'get',
+    params
+  });
+}
+
diff --git a/project-web/src/api/projectConfig/buildPlanNode.js b/project-web/src/api/projectConfig/buildPlanNode.js
new file mode 100644
index 0000000..46d0136
--- /dev/null
+++ b/project-web/src/api/projectConfig/buildPlanNode.js
@@ -0,0 +1,36 @@
+import request from '@/utils/request';
+
+
+//璁剧疆椤圭洰妯$増涓嬮樁娈佃妭鐐�
+export function updPStageNode(data) {
+  return request({
+    url: '/pc/p/temp/project/stage/node/save',
+    method: 'post',
+    data
+  });
+}
+//鏌ヨ椤圭洰妯$増涓嬮樁娈佃妭鐐�
+export function getStageNode(params) {
+  return request({
+    url: '/pc/p/temp/project/stage/node',
+    method: 'get',
+    params
+  });
+}
+//鏌ヨ椤圭洰妯$増涓嬮樁娈佃妭鐐�
+export function getPStageNode(params) {
+  return request({
+    url: '/pc/p/temp/project/stage/node/tree',
+    method: 'get',
+    params
+  });
+}
+//鏌ヨ棰勮鏁版嵁
+export function getPreview(data) {
+  return request({
+    url: '/pc/p/temp/project/stage/node/preview',
+    method: 'post',
+    data
+  });
+}
+
diff --git a/project-web/src/api/projectConfig/kanbanConfig.js b/project-web/src/api/projectConfig/kanbanConfig.js
new file mode 100644
index 0000000..bc71c65
--- /dev/null
+++ b/project-web/src/api/projectConfig/kanbanConfig.js
@@ -0,0 +1,55 @@
+import request from '@/utils/request';
+
+
+//澧炲姞
+export function add(data) {
+  return request({
+    url: '/pc/p/temp/project/board/add',
+    method: 'post',
+    data
+  });
+}
+//鍒犻櫎
+export function del(data) {
+  return request({
+    url: '/pc/p/temp/project/board/del',
+    method: 'delete',
+    data
+  });
+}
+
+//缂栬緫
+export function upd(data) {
+  return request({
+    url: '/pc/p/temp/project/board/upd',
+    method: 'post',
+    data
+  });
+}
+
+//闃舵璇︽儏
+export function getDetail(params) {
+  return request({
+    url: '/pc/p/temp/project/board/detail',
+    method: 'get',
+    params
+  });
+}
+//淇敼鐘舵��
+export function updStatus(data) {
+  return request({
+    url: '/pc/p/temp/project/board/updStatus',
+    method: 'post',
+    data
+  });
+}
+
+//鏌ヨ鍒楄〃
+export function getList(params) {
+  return request({
+    url: '/pc/p/temp/project/board/list',
+    method: 'get',
+    params
+  });
+}
+
diff --git a/project-web/src/api/projectConfig/kanbanNode.js b/project-web/src/api/projectConfig/kanbanNode.js
new file mode 100644
index 0000000..edb190e
--- /dev/null
+++ b/project-web/src/api/projectConfig/kanbanNode.js
@@ -0,0 +1,28 @@
+import request from '@/utils/request';
+
+/*鐪嬫澘鑺傜偣*/
+
+//缂栬緫
+export function upd(data) {
+  return request({
+    url: '/pc/p/temp/project/board/node/upd',
+    method: 'post',
+    data
+  });
+}
+//鍒楄〃
+export function getTree(params) {
+  return request({
+    url: '/pc/p/temp/project/board/node/tree',
+    method: 'get',
+    params
+  });
+}
+//鍒楄〃
+export function getList(params) {
+  return request({
+    url: '/pc/p/temp/project/board/node/list',
+    method: 'get',
+    params
+  });
+}
diff --git a/project-web/src/api/projectConfig/stageConfig.js b/project-web/src/api/projectConfig/stageConfig.js
new file mode 100644
index 0000000..18578dd
--- /dev/null
+++ b/project-web/src/api/projectConfig/stageConfig.js
@@ -0,0 +1,55 @@
+import request from '@/utils/request';
+
+
+//澧炲姞
+export function add(data) {
+  return request({
+    url: '/pc/p/temp/stage/add',
+    method: 'post',
+    data
+  });
+}
+//鍒犻櫎
+export function del(data) {
+  return request({
+    url: '/pc/p/temp/stage/del',
+    method: 'delete',
+    data
+  });
+}
+
+//缂栬緫
+export function upd(data) {
+  return request({
+    url: '/pc/p/temp/stage/upd',
+    method: 'post',
+    data
+  });
+}
+
+//璇︽儏
+export function getDetail(params) {
+  return request({
+    url: '/pc/p/temp/stage/detail',
+    method: 'get',
+    params
+  });
+}
+//淇敼鐘舵��
+export function updStatus(data) {
+  return request({
+    url: '/pc/p/temp/stage/updStatus',
+    method: 'post',
+    data
+  });
+}
+
+//鏌ヨ鍒楄〃
+export function getList(params) {
+  return request({
+    url: '/pc/p/temp/stage/list',
+    method: 'get',
+    params
+  });
+}
+
diff --git a/project-web/src/api/projectConfig/stageNode.js b/project-web/src/api/projectConfig/stageNode.js
new file mode 100644
index 0000000..8fffc03
--- /dev/null
+++ b/project-web/src/api/projectConfig/stageNode.js
@@ -0,0 +1,68 @@
+import request from '@/utils/request';
+
+/*闃舵鑺傜偣*/
+
+//澧炲姞
+export function add(data) {
+  return request({
+    url: '/pc/p/temp/stage/node/add',
+    method: 'post',
+    data
+  });
+}
+
+//鍒犻櫎
+export function del(data) {
+  return request({
+    url: '/pc/p/temp/stage/node/del',
+    method: 'delete',
+    data
+  });
+}
+
+//缂栬緫
+export function upd(data) {
+  return request({
+    url: '/pc/p/temp/stage/node/upd',
+    method: 'post',
+    data
+  });
+}
+
+//璇︽儏
+export function getDetail(params) {
+  return request({
+    url: '/pc/p/temp/stage/node/detail',
+    method: 'get',
+    params
+  });
+}
+
+//淇敼鐘舵��
+export function updStatus(data) {
+  return request({
+    url: '/pc/p/temp/stage/node/updStatus',
+    method: 'post',
+    data
+  });
+}
+
+//鏌ヨ鍒楄〃
+export function getList(params) {
+  return request({
+    url: '/pc/p/temp/stage/node/list',
+    method: 'get',
+    params
+  });
+}
+
+
+//鏌ヨ闃舵鑺傜偣鏍�
+export function getStageNodeTree(params) {
+  return request({
+    url: '/pc/p/temp/stage/node/tree',
+    method: 'get',
+    params
+  });
+}
+
diff --git a/project-web/src/api/projectConfig/warningConfig.js b/project-web/src/api/projectConfig/warningConfig.js
new file mode 100644
index 0000000..fe43509
--- /dev/null
+++ b/project-web/src/api/projectConfig/warningConfig.js
@@ -0,0 +1,55 @@
+import request from '@/utils/request';
+
+
+//澧炲姞
+export function add(data) {
+  return request({
+    url: '/pc/p/temp/expiration/notify/add',
+    method: 'post',
+    data
+  });
+}
+//鍒犻櫎
+export function del(data) {
+  return request({
+    url: '/pc/p/temp/expiration/notify/del',
+    method: 'delete',
+    data
+  });
+}
+
+//缂栬緫
+export function upd(data) {
+  return request({
+    url: '/pc/p/temp/expiration/notify/upd',
+    method: 'post',
+    data
+  });
+}
+
+//璇︽儏
+export function getDetail(params) {
+  return request({
+    url: '/pc/p/temp/expiration/notify/detail',
+    method: 'get',
+    params
+  });
+}
+//淇敼鐘舵��
+export function updStatus(data) {
+  return request({
+    url: '/pc/p/temp/expiration/notify/updStatus',
+    method: 'post',
+    data
+  });
+}
+
+//鏌ヨ鍒楄〃
+export function getList(params) {
+  return request({
+    url: '/pc/p/temp/expiration/notify/list',
+    method: 'get',
+    params
+  });
+}
+
diff --git a/project-web/src/api/projectManage/audit.js b/project-web/src/api/projectManage/audit.js
new file mode 100644
index 0000000..ea0133f
--- /dev/null
+++ b/project-web/src/api/projectManage/audit.js
@@ -0,0 +1,10 @@
+import request from '@/utils/request';
+// 椤圭洰瀹℃牳
+export function auditUpd(data) {
+  return request({
+    url: '/pc/p/project/info/audit',
+    method: 'post',
+    data: data
+  })
+}
+
diff --git a/project-web/src/api/projectManage/cancel.js b/project-web/src/api/projectManage/cancel.js
new file mode 100644
index 0000000..658e808
--- /dev/null
+++ b/project-web/src/api/projectManage/cancel.js
@@ -0,0 +1,10 @@
+import request from '@/utils/request';
+// 椤圭洰鍙栨秷
+export function cancelSave(data) {
+  return request({
+    url: '/pc/p/project/info/cancel/save',
+    method: 'post',
+    data: data
+  })
+}
+
diff --git a/project-web/src/api/projectManage/classify.js b/project-web/src/api/projectManage/classify.js
new file mode 100644
index 0000000..baa30f0
--- /dev/null
+++ b/project-web/src/api/projectManage/classify.js
@@ -0,0 +1,51 @@
+import request from '@/utils/request';
+// 椤圭洰鍒嗙被
+// 宸︿晶鏍�
+export function classifyTree(params) {
+  return request({
+    url: '/pc/p/project/category/tree',
+    method: 'get',
+    params
+  })
+}
+// 淇敼鐘舵��
+export function updateStatus(data) {
+  return request({
+    url: '/pc/p/project/category/updateStatus',
+    method: 'post',
+    data: data
+  })
+}
+// 鏂板鍒嗙被
+export function add(data) {
+  return request({
+    url: '/pc/p/project/category/add',
+    method: 'post',
+    data: data
+  })
+}
+// 鏍规嵁鍒嗙被鑾峰彇璇︽儏
+export function getdetail(params) {
+  return request({
+    url: '/pc/p/project/category/detail',
+    method: 'get',
+    params
+  })
+}
+// 淇敼鍒嗙被
+export function edit(data) {
+  return request({
+    url: '/pc/p/project/category/upd',
+    method: 'post',
+    data
+  })
+}
+// 鍒犻櫎
+export function del(data) {
+  return request({
+    url: '/pc/p/project/category/del',
+    method: 'delete',
+    data: data
+  })
+}
+
diff --git a/project-web/src/api/projectManage/info.js b/project-web/src/api/projectManage/info.js
new file mode 100644
index 0000000..76c465f
--- /dev/null
+++ b/project-web/src/api/projectManage/info.js
@@ -0,0 +1,20 @@
+import request from '@/utils/request';
+
+// 椤圭洰鏂板
+export function add(data) {
+  return request({
+    url: '/pc/p/project/info/add',
+    method: 'post',
+    data: data
+  })
+}
+
+// 璇︽儏
+export function getInfo(params) {
+  return request({
+    url: '/pc/p/project/info/getInfo',
+    method: 'get',
+    params
+  })
+}
+
diff --git a/project-web/src/api/projectManage/information.js b/project-web/src/api/projectManage/information.js
new file mode 100644
index 0000000..50e3a0a
--- /dev/null
+++ b/project-web/src/api/projectManage/information.js
@@ -0,0 +1,58 @@
+import request from '@/utils/request';
+// 椤堕儴椤圭洰淇℃伅缁熻
+export function getTotal(params) {
+  return request({
+    url: '/pc/p/project/info/total',
+    method: 'get',
+    params
+  })
+}
+// 椤圭洰淇℃伅鍒楄〃
+export function getInfolist(params) {
+  return request({
+    url: '/pc/p/project/info/list',
+    method: 'get',
+    params
+  })
+}
+// 棰勮璁剧疆 淇敼鍒楄〃涓婇」鐩璀︾姸鎬�
+export function updateInfoStatus(data) {
+  return request({
+    url: '/pc/p/project/info/status/update',
+    method: 'post',
+    data: data
+  })
+}
+// 棰勮璁剧疆 鑾峰彇棰勮鍒楄〃
+export function getWarnTempletelist(params) {
+  return request({
+    url: '/pc/p/temp/expiration/notify/list',
+    method: 'get',
+    params
+  })
+}
+// 棰勮璁剧疆 淇濆瓨
+export function warnTempleteSave(data) {
+  return request({
+    url: '/pc/p/project/info/tempNotify/save',
+    method: 'post',
+    data: data
+  })
+}
+// 涓嬭揪鎶曡祫 鑾峰彇宸茬粡涓嬭揪鎶曡祫鐨勯搴�
+export function getInvestInfoList(params) {
+  return request({
+    url: '/pc/p/release/invest/info/list',
+    method: 'get',
+    params
+  })
+}
+// 涓嬭揪鎶曡祫 淇濆瓨
+export function investInfoSave(data) {
+  return request({
+    url: '/pc/p/project/info/investInfo/save',
+    method: 'post',
+    data: data
+  })
+}
+
diff --git a/project-web/src/api/projectManage/record.js b/project-web/src/api/projectManage/record.js
new file mode 100644
index 0000000..db8ae9f
--- /dev/null
+++ b/project-web/src/api/projectManage/record.js
@@ -0,0 +1,18 @@
+import request from '@/utils/request';
+// 椤圭洰褰掓。
+export function recordSave(data) {
+  return request({
+    url: '/pc/p/project/info/record/save',
+    method: 'post',
+    data: data
+  })
+}
+// 椤圭洰杩樺師
+export function recordUpd(data) {
+  return request({
+    url: '/pc/p/project/info/record/upd',
+    method: 'post',
+    data: data
+  })
+}
+
diff --git a/project-web/src/api/system/dept.js b/project-web/src/api/system/dept.js
new file mode 100644
index 0000000..b77dc12
--- /dev/null
+++ b/project-web/src/api/system/dept.js
@@ -0,0 +1,83 @@
+import request from '@/utils/request'
+
+// 鏌ヨ閮ㄩ棬鍒楄〃
+export function listDept(query) {
+  return request({
+    url: '/system/dept/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨ閮ㄩ棬鍒楄〃锛堟帓闄よ妭鐐癸級
+export function listDeptExcludeChild(deptId) {
+  return request({
+    url: '/system/dept/list/exclude/' + deptId,
+    method: 'get'
+  })
+}
+
+// 鏌ヨ閮ㄩ棬璇︾粏
+export function getDept(deptId) {
+  return request({
+    url: '/system/dept/view/' + deptId,
+    method: 'get'
+  })
+}
+
+// 鏌ヨ閮ㄩ棬涓嬫媺鏍戠粨鏋�
+export function treeselect(deptId) {
+  return request({
+    // url: '/system/dept/treeselect',
+    url: '/system/dept/select/tree_dept/' + deptId,
+    method: 'get'
+  })
+}
+// 灞曠ず椤剁骇鏈烘瀯鏍戠粨鏋勶紝鍙兘浼氬瓨鍦ㄥ涓《绾ф満鏋勩��2022-12-08
+export function listOrgRootTree() {
+  return request({
+    url: '/system/dept/select/tree_org',
+    method: 'get'
+  })
+}
+// 鍒楄〃閫夋嫨灞曠ず椤剁骇鏈烘瀯锛屾櫘閫氱敤鎴峰彧鑳界湅鍒版湰鍗曚綅椤剁骇鏈烘瀯銆�2022-12-15
+export function listOrgRoot(){
+  return request({
+    url: '/system/dept/select/list_root_org',
+    method: 'get'
+  });
+}
+
+// 鏍规嵁瑙掕壊ID鏌ヨ閮ㄩ棬鏍戠粨鏋�
+export function roleDeptTreeselect(roleId) {
+  return request({
+    url: '/system/dept/roleDeptTreeselect/' + roleId,
+    method: 'get'
+  })
+}
+
+// 鏂板閮ㄩ棬
+export function addDept(data) {
+  return request({
+    url: '/system/dept/add',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼閮ㄩ棬
+export function updateDept(data) {
+  return request({
+    url: '/system/dept/edit',
+    method: 'post',
+    data: data
+  })
+}
+
+// 鍒犻櫎閮ㄩ棬
+export function delDept(deptId) {
+  return request({
+    url: '/system/dept/remove/' + deptId,
+    method: 'get'
+  })
+}
diff --git a/project-web/src/api/system/dict/data.js b/project-web/src/api/system/dict/data.js
new file mode 100644
index 0000000..8c98e07
--- /dev/null
+++ b/project-web/src/api/system/dict/data.js
@@ -0,0 +1,56 @@
+import request from '@/utils/request'
+
+// 鏌ヨ瀛楀吀鏁版嵁鍒楄〃
+export function listData(query) {
+  return request({
+    url: '/system/dict/data/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨ瀛楀吀鏁版嵁璇︾粏
+export function getData(dictCode) {
+  return request({
+    url: '/system/dict/data/' + dictCode,
+    method: 'get'
+  })
+}
+
+// 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁淇℃伅
+export function getDicts(dictType) {
+  return request({
+    // url: '/system/dict/data/type/' + dictType,
+    url: '/permit/dict/data/type/' + dictType,
+    method: 'get'
+  })
+}
+
+// 鏂板瀛楀吀鏁版嵁
+export function addData(data) {
+  return request({
+    // url: '/system/dict/data',
+    url: '/system/dict/add',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼瀛楀吀鏁版嵁
+export function updateData(data) {
+  return request({
+    // url: '/system/dict/data',
+    url: '/system/dict/edit',
+    method: 'post',
+    data: data
+  })
+}
+
+// 鍒犻櫎瀛楀吀鏁版嵁
+export function delData(dictCode) {
+  return request({
+    // url: '/system/dict/data/' + dictCode,
+    url: '/system/dict/data/remove/' + dictCode,
+    method: 'get'
+  })
+}
diff --git a/project-web/src/api/system/dict/type.js b/project-web/src/api/system/dict/type.js
new file mode 100644
index 0000000..42bd2d8
--- /dev/null
+++ b/project-web/src/api/system/dict/type.js
@@ -0,0 +1,60 @@
+import request from '@/utils/request'
+
+// 鏌ヨ瀛楀吀绫诲瀷鍒楄〃
+export function listType(query) {
+  return request({
+    url: '/system/dict/type/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨ瀛楀吀绫诲瀷璇︾粏
+export function getType(dictId) {
+  return request({
+    url: '/system/dict/type/' + dictId,
+    method: 'get'
+  })
+}
+
+// 鏂板瀛楀吀绫诲瀷
+export function addType(data) {
+  return request({
+    url: '/system/dict/type',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼瀛楀吀绫诲瀷
+export function updateType(data) {
+  return request({
+    url: '/system/dict/type',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎瀛楀吀绫诲瀷
+export function delType(dictId) {
+  return request({
+    url: '/system/dict/type/' + dictId,
+    method: 'delete'
+  })
+}
+
+// 鍒锋柊瀛楀吀缂撳瓨
+export function refreshCache() {
+  return request({
+    url: '/system/dict/type/refreshCache',
+    method: 'delete'
+  })
+}
+
+// 鑾峰彇瀛楀吀閫夋嫨妗嗗垪琛�
+export function optionselect() {
+  return request({
+    url: '/system/dict/data/optionselect',
+    method: 'get'
+  })
+}
diff --git a/project-web/src/api/system/menu.js b/project-web/src/api/system/menu.js
new file mode 100644
index 0000000..605123c
--- /dev/null
+++ b/project-web/src/api/system/menu.js
@@ -0,0 +1,60 @@
+import request from '@/utils/request'
+
+// 鏌ヨ鑿滃崟鍒楄〃
+export function listMenu(query) {
+  return request({
+    url: '/system/menu/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨ鑿滃崟璇︾粏
+export function getMenu(menuId) {
+  return request({
+    url: '/system/menu/view/' + menuId,
+    method: 'get'
+  })
+}
+
+// 鏌ヨ鑿滃崟涓嬫媺鏍戠粨鏋�
+export function treeselect() {
+  return request({
+    url: '/system/menu/select/tree',
+    method: 'get'
+  })
+}
+
+// 鏍规嵁瑙掕壊ID鏌ヨ鑿滃崟涓嬫媺鏍戠粨鏋�
+export function roleMenuTreeselect(roleId) {
+  return request({
+    url: '/system/menu/select/roleMenuTree/' + roleId,
+    method: 'get'
+  })
+}
+
+// 鏂板鑿滃崟
+export function addMenu(data) {
+  return request({
+    url: '/system/menu/add',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼鑿滃崟
+export function updateMenu(data) {
+  return request({
+    url: '/system/menu/edit',
+    method: 'post',
+    data: data
+  })
+}
+
+// 鍒犻櫎鑿滃崟
+export function delMenu(menuId) {
+  return request({
+    url: '/system/menu/remove/' + menuId,
+    method: 'get'
+  })
+}
diff --git a/project-web/src/api/system/role.js b/project-web/src/api/system/role.js
new file mode 100644
index 0000000..689b9cc
--- /dev/null
+++ b/project-web/src/api/system/role.js
@@ -0,0 +1,121 @@
+import request from '@/utils/request'
+
+// 鏌ヨ瑙掕壊鍒楄〃
+export function listRole(query) {
+  return request({
+    url: '/system/role/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏍规嵁鑼冨洿鏌ヨ瑙掕壊淇℃伅
+export function listRoleByDataScope(query) {
+  return request({
+    url: '/pc/fin/sys/server/selectByDataScope',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨ瑙掕壊璇︾粏
+export function getRole(roleId) {
+  return request({
+    url: '/system/role/view/' + roleId,
+    method: 'get'
+  })
+}
+
+// 鏂板瑙掕壊
+export function addRole(data) {
+  return request({
+    url: '/system/role/add',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼瑙掕壊
+export function updateRole(data) {
+  return request({
+    url: '/system/role/edit',
+    method: 'post',
+    data: data
+  })
+}
+
+// 瑙掕壊鏁版嵁鏉冮檺
+export function dataScope(data) {
+  return request({
+    url: '/system/role/dataScope',
+    method: 'put',
+    data: data
+  })
+}
+
+// 瑙掕壊鐘舵�佷慨鏀�
+export function changeRoleStatus(role_id, status) {
+  const data = {
+    role_id,
+    status
+  }
+  return request({
+    url: '/pc/fin/sys/role/select/changeStatus',
+    method: 'post',
+    data: data
+  })
+}
+
+
+// 鍒犻櫎瑙掕壊
+export function delRole(roleId) {
+  return request({
+    url: '/system/role/remove/' + roleId,
+    method: 'get'
+  })
+}
+
+// 鏌ヨ瑙掕壊宸叉巿鏉冪敤鎴峰垪琛�
+export function allocatedUserList(query) {
+  return request({
+    url: '/system/role/select/authUser/allocatedList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨ瑙掕壊鏈巿鏉冪敤鎴峰垪琛�
+export function unallocatedUserList(query) {
+  return request({
+    url: '/system/role/select/authUser/unallocatedList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鍙栨秷鐢ㄦ埛鎺堟潈瑙掕壊
+export function authUserCancel(data) {
+  return request({
+    url: '/system/role/select/authUser/cancel',
+    method: 'post',
+    data: data
+  })
+}
+
+// 鎵归噺鍙栨秷鐢ㄦ埛鎺堟潈瑙掕壊
+export function authUserCancelAll(data) {
+  return request({
+    url: '/system/role/authUser/cancelAll',
+    method: 'post',
+    params: data
+  })
+}
+
+// 鎺堟潈鐢ㄦ埛閫夋嫨
+export function authUserSelectAll(data) {
+  return request({
+    url: '/system/role/select/authUser/all',
+    method: 'post',
+    params: data
+  })
+}
diff --git a/project-web/src/api/system/roleApi.js b/project-web/src/api/system/roleApi.js
new file mode 100644
index 0000000..2132445
--- /dev/null
+++ b/project-web/src/api/system/roleApi.js
@@ -0,0 +1,12 @@
+import request from '@/utils/request';
+
+/**
+ * 鑿滃崟
+ * @param pram
+ */
+export function menuListApi() {
+  return request({
+    url: '/getMenus',
+    method: 'GET',
+  });
+}
diff --git a/project-web/src/api/system/sms.js b/project-web/src/api/system/sms.js
new file mode 100644
index 0000000..e32ae38
--- /dev/null
+++ b/project-web/src/api/system/sms.js
@@ -0,0 +1,215 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/utils/request';
+/**
+ * @description 鐭俊鍙戦�佽褰� -- 鍒楄〃
+ */
+export function smsLstApi(params) {
+  return request({
+    url: '/admin/platform/one/pass/user/record',
+    method: 'get',
+    params,
+  });
+}
+/**
+ * @description 鐭俊璐︽埛 -- 鐧诲綍
+ */
+export function configApi(data) {
+  return request({
+    url: '/admin/platform/one/pass/login',
+    method: 'post',
+    data,
+  });
+}
+/**
+ * @description 鐭俊璐︽埛 -- 鑾峰彇楠岃瘉鐮�
+ */
+export function captchaApi(data) {
+  return request({
+    url: `/admin/platform/one/pass/sendUserCode`,
+    method: 'post',
+    data,
+  });
+}
+/**
+ * @description 鐭俊璐︽埛 -- 娉ㄥ唽
+ */
+export function registerApi(data) {
+  return request({
+    url: '/admin/platform/one/pass/register',
+    method: 'post',
+    data,
+  });
+}
+/**
+ * @description 鐭俊璐︽埛 -- 鏄惁鐧诲綍
+ */
+export function isLoginApi() {
+  return request({
+    url: '/admin/platform/one/pass/isLogin',
+    method: 'get',
+  });
+}
+/**
+ * @description 鐭俊璐︽埛 -- 閫�鍑虹櫥褰�
+ */
+export function logoutApi() {
+  return request({
+    url: '/admin/platform/one/pass/logout',
+    method: 'post',
+  });
+}
+/**
+ * @description 鐭俊璐︽埛 -- 鍓╀綑鏉℃暟
+ */
+export function smsNumberApi() {
+  return request({
+    url: '/admin/sms/logout',
+    method: 'get',
+  });
+}
+/**
+ * @description 鐭俊妯℃澘 -- 鍒楄〃
+ */
+export function smsTempLstApi(params) {
+  return request({
+    url: '/admin/platform/one/pass/sms/temps',
+    method: 'get',
+    params,
+  });
+}
+/**
+ * @description 鐭俊璐拱 -- 鏀粯濂楅
+ */
+export function smsPriceApi(params) {
+  return request({
+    url: '/admin/platform/one/pass/meal/list',
+    method: 'get',
+    params,
+  });
+}
+/**
+ * @description 鐭俊璐拱 -- 鏀粯鐮�
+ */
+export function payCodeApi(data) {
+  return request({
+    url: '/admin/platform/one/pass/meal/code',
+    method: 'post',
+    data,
+  });
+}
+/**
+ * @description 鐭俊妯℃澘 -- 娣诲姞琛ㄥ崟
+ */
+export function tempCreateApi(data) {
+  return request({
+    url: '/admin/platform/one/pass/sms/temp/apply',
+    method: 'post',
+    data,
+  });
+}
+/**
+ * @description 鐭俊 -- 鐢ㄦ埛淇℃伅
+ */
+export function smsInfoApi() {
+  return request({
+    url: '/admin/platform/one/pass/info',
+    method: 'get',
+  });
+}
+
+/**
+ * @description 鐭俊 -- 鐭俊鎻愰啋寮�鍏充繚瀛�
+ */
+export function smsSaveApi(params) {
+  return request({
+    url: '/admin/sms/config/save',
+    method: 'post',
+    params,
+  });
+}
+
+/**
+ * @description 鐭俊 -- 淇敼瀵嗙爜
+ */
+export function updatePasswordApi(data) {
+  return request({
+    url: '/admin/platform/one/pass/update/password',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * @description 鐭俊 -- 淇敼鎵嬫満鍙�
+ */
+export function updateHoneApi(data) {
+  return request({
+    url: '/admin/platform/one/pass/update/phone',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * @description 涓�鍙烽�� -- 鏈嶅姟寮�閫�
+ */
+export function serviceOpenApi(data) {
+  return request({
+    url: '/admin/platform/one/pass/service/open',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * @description 涓�鍙烽�� -- 鐢靛瓙闈㈠崟妯℃澘
+ */
+export function exportTempApi(params) {
+  return request({
+    url: '/admin/express/template',
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * @description 鍏ㄩ儴鐗╂祦鍏徃
+ */
+export function expressAllApi(params) {
+  return request({
+    url: 'admin/express/all',
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * @description 淇敼绛惧悕
+ */
+export function smsSignApi(data) {
+  return request({
+    url: '/admin/platform/one/pass/sms/modify/sign',
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * @description 淇敼鎵嬫満鍙烽獙璇佽处鍙峰瘑鐮�
+ */
+export function phoneValidatorApi(data) {
+  return request({
+    url: 'admin/platform/one/pass/update/phone/validator',
+    method: 'post',
+    data,
+  });
+}
diff --git a/project-web/src/api/system/user.js b/project-web/src/api/system/user.js
new file mode 100644
index 0000000..738219e
--- /dev/null
+++ b/project-web/src/api/system/user.js
@@ -0,0 +1,136 @@
+import request from '@/utils/request'
+import { isEmptyValue } from "@/utils/StringUtils";
+
+// 鏌ヨ鐢ㄦ埛鍒楄〃
+export function listUser(query) {
+  return request({
+    url: '/system/user/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨ鐢ㄦ埛璇︾粏
+export function getUser(userId) {
+  return request({
+    url: '/system/user/view/' + userId,
+    method: 'get'
+  })
+}
+
+// 2022-12-12, 娣诲姞鏂扮敤鎴凤紝閫夋嫨瑙掕壊鍒楄〃
+export function getNewUserRoles(deptId){
+  return request({
+    url: '/system/user/select/role/' + deptId,
+    method: 'get'
+  });
+}
+
+// 鏂板鐢ㄦ埛
+export function addUser(data) {
+  return request({
+    url: '/system/user/add',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼鐢ㄦ埛
+export function updateUser(data) {
+  return request({
+    url: '/system/user/edit',
+    method: 'post',
+    data: data
+  })
+}
+
+// 鍒犻櫎鐢ㄦ埛
+export function delUser(userId) {
+  return request({
+    url: '/system/user/remove/' + userId,
+    method: 'get'
+  })
+}
+
+// 鐢ㄦ埛瀵嗙爜閲嶇疆锛�
+// 淇敼浜嗙晫闈紝涓嶈鐢ㄦ埛杈撳叆鏂板瘑鐮侊紝鐩存帴鍚庡彴閲嶇疆榛樿銆�2022-12-13
+export function resetUserPwd(id, password) {
+  const data = {
+    id,
+    password
+  }
+  return request({
+    url: '/system/user/resetPwd',
+    method: 'post',
+    data: data
+  })
+}
+
+// 鐢ㄦ埛鐘舵�佷慨鏀�
+export function changeUserStatus(id, status) {
+  const data = {
+    id,
+    status
+  }
+  return request({
+    url: '/system/user/select/changeStatus',
+    method: 'post',
+    data: data
+  })
+}
+
+// 鏌ヨ鐢ㄦ埛涓汉淇℃伅
+export function getUserProfile() {
+  return request({
+    url: '/system/user/profile',
+    method: 'get'
+  })
+}
+
+// 淇敼鐢ㄦ埛涓汉淇℃伅
+export function updateUserProfile(data) {
+  return request({
+    url: '/system/user/profile',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鐢ㄦ埛瀵嗙爜閲嶇疆
+export function updateUserPwd(oldPassword, newPassword) {
+  const data = {
+    oldPassword,
+    newPassword
+  }
+  return request({
+    url: '/system/user/profile/updatePwd',
+    method: 'put',
+    params: data
+  })
+}
+
+// 鐢ㄦ埛澶村儚涓婁紶
+export function uploadAvatar(data) {
+  return request({
+    url: '/system/user/profile/avatar',
+    method: 'post',
+    data: data
+  })
+}
+
+// 鏌ヨ鎺堟潈瑙掕壊
+export function getAuthRole(userId) {
+  return request({
+    url: '/system/user/select/authRole/' + userId,
+    method: 'get'
+  })
+}
+
+// 淇濆瓨鎺堟潈瑙掕壊
+export function updateAuthRole(data) {
+  return request({
+    url: '/system/user/select/saveAuthRole',
+    method: 'post',
+    params: data
+  })
+}
diff --git a/project-web/src/api/system/wxApi.js b/project-web/src/api/system/wxApi.js
new file mode 100644
index 0000000..f8e943b
--- /dev/null
+++ b/project-web/src/api/system/wxApi.js
@@ -0,0 +1,386 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import request from '@/utils/request';
+
+// TODO 寰俊娌熼�氶毦搴﹀ぇ鏆傛斁 鍛靛懙
+
+export function menuCreate(data) {
+  return request({
+    url: '/admin/platform/wechat/menu/public/create',
+    method: 'post',
+    params: data,
+  });
+}
+
+export function menuDelete(data) {
+  return request({
+    url: '/admin/platform/wechat/menu/public/delete',
+    method: 'post',
+    params: data,
+  });
+}
+
+/**
+ * 寰俊妯℃澘娑堟伅 鍒楄〃
+ * @param pram
+ */
+export function wechatTemplateListApi(params) {
+  return request({
+    url: `/admin/wechat/template/list`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 寰俊妯℃澘娑堟伅 鏂板
+ * @param pram
+ */
+export function wechatTemplateSaveApi(data) {
+  return request({
+    url: `/admin/wechat/template/save`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 寰俊妯℃澘娑堟伅 缂栬緫
+ * @param pram
+ */
+export function wechatTemplateUpdateApi(id, data) {
+  return request({
+    url: `/admin/wechat/template/update/${id}`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 寰俊妯℃澘娑堟伅 璇︽儏
+ * @param pram
+ */
+export function wechatTemplateInfoApi(id) {
+  return request({
+    url: `/admin/wechat/template/info/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 寰俊妯℃澘娑堟伅 淇敼鐘舵��
+ * @param pram
+ */
+export function wechatTemplateStatusApi(id, params) {
+  return request({
+    url: `/admin/wechat/template/update/status/${id}`,
+    method: 'post',
+    params,
+  });
+}
+
+/**
+ * 寰俊妯℃澘娑堟伅 鍒犻櫎
+ * @param pram
+ */
+export function wechatTemplateDeleteApi(id) {
+  return request({
+    url: `/admin/wechat/template/delete/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 鍏抽敭瀛楀洖澶� 鍒楄〃
+ * @param pram
+ */
+export function wechatReplyListApi(params) {
+  return request({
+    url: `/admin/platform/wechat/public/keywords/reply/list`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 鍏抽敭瀛楀洖澶� 鏂板
+ * @param pram
+ */
+export function wechatReplySaveApi(data) {
+  return request({
+    url: `/admin/platform/wechat/public/keywords/reply/save`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 鍏抽敭瀛楀洖澶� 淇敼鐘舵��
+ * @param pram
+ */
+export function wechatReplyStatusApi(id) {
+  return request({
+    url: `/admin/platform/wechat/public/keywords/reply/status/${id}`,
+    method: 'post',
+  });
+}
+/**
+ * 鍏抽敭瀛楀洖澶� 缂栬緫
+ * @param pram
+ */
+export function wechatReplyUpdateApi(data) {
+  return request({
+    url: `/admin/platform/wechat/public/keywords/reply/update`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 鍏抽敭瀛楀洖澶� 璇︽儏
+ * @param pram
+ */
+export function wechatReplyInfoApi(id) {
+  return request({
+    url: `/admin/platform/wechat/public/keywords/reply/info/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 鍏抽敭瀛楀洖澶� 鍒犻櫎
+ * @param pram
+ */
+export function wechatReplyDeleteApi(id) {
+  return request({
+    url: `/admin/platform/wechat/public/keywords/reply/delete/${id}`,
+    method: 'get',
+  });
+}
+
+/**
+ * 鏍规嵁鍏抽敭瀛楁煡璇㈠井淇″叧閿瓧鍥炲
+ * @param pram
+ */
+export function keywordsInfoApi(params) {
+  return request({
+    url: `/admin/platform/wechat/public/keywords/reply/info/keywords`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 寰俊鑿滃崟 鑾峰彇鏁版嵁
+ * @param pram
+ */
+export function wechatMenuApi() {
+  return request({
+    url: `/admin/platform/wechat/public/customize/menu`,
+    method: 'get',
+  });
+}
+
+/**
+ * 寰俊鑿滃崟 鏂板
+ * @param pram
+ */
+export function wechatMenuAddApi(data) {
+  return request({
+    url: `/admin/platform/wechat/public/customize/menu/create`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 灏忕▼搴� 鍏叡妯℃澘鍒楄〃
+ */
+export function publicTempListApi(params) {
+  return request({
+    url: `/admin/wechat/program/public/temp/list`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 灏忕▼搴� 妯$増鎵�灞炵被鐩�
+ */
+export function categoryApi() {
+  return request({
+    url: `/admin/wechat/program/category`,
+    method: 'get',
+  });
+}
+
+/**
+ * 灏忕▼搴� 閫氳繃寰俊妯℃澘tid鑾峰彇鍏抽敭瀛楀垪琛�
+ */
+export function getWeChatKeywordsByTidApi(params) {
+  return request({
+    url: `/admin/wechat/program/getWeChatKeywordsByTid`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 灏忕▼搴� 妯℃澘璇︽儏锛屼富瑕佹槸鑾峰彇宸︿晶鏍囬
+ */
+export function publicTempInfoApi(params) {
+  return request({
+    url: `/admin/wechat/program/public/temp/info`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 灏忕▼搴� 鎴戠殑妯℃澘鍒楄〃
+ */
+export function myTempListApi(params) {
+  return request({
+    url: `/admin/wechat/program/my/temp/list`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 灏忕▼搴� 鎴戠殑妯℃澘璇︽儏
+ */
+export function myTempInfoApi(params) {
+  return request({
+    url: `/admin/wechat/program/my/temp/info`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 灏忕▼搴� 妯℃澘鏂板
+ */
+export function myTempSaveApi(data) {
+  return request({
+    url: `/admin/wechat/program/my/temp/save`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * 灏忕▼搴� 妯℃澘淇敼
+ */
+export function myTempUpdateApi(params, data) {
+  return request({
+    url: `/admin/wechat/program/my/temp/update`,
+    method: 'post',
+    params,
+    data,
+  });
+}
+
+/**
+ * 灏忕▼搴� 鎴戠殑妯℃澘淇敼鐘舵��
+ */
+export function myTempStatusApi(params) {
+  return request({
+    url: `/admin/wechat/program/my/temp/update/status`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 灏忕▼搴� 鎴戠殑妯℃澘淇敼搴旂敤鍦烘櫙
+ */
+export function myTempTypeApi(params) {
+  return request({
+    url: `/admin/wechat/program/my/temp/update/type`,
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * 鑾峰彇寰俊sdk閰嶇疆
+ * @returns {*}
+ */
+export function getWechatConfig() {
+  return request({
+    url: `/admin/platform/wechat/get/public/js/config`,
+    method: 'get',
+    params: { url: encodeURIComponent(location.href.split('#')[0]) }, // for Test
+  });
+}
+
+/**
+ * 寰俊鎺堟潈鐧诲綍
+ * @returns {*}
+ */
+export function wechatAuth(code) {
+  return request({
+    url: `/admin/authorize/login`,
+    method: 'get',
+    params: { code },
+  });
+}
+
+/**
+ * 涓庡井淇¤В缁戣处鍙�
+ */
+export function unbindApi() {
+  return request({
+    url: `/admin/unbind`,
+    method: 'get',
+  });
+}
+
+/**
+ * 涓�閿悓姝ユ垜鐨勬ā鏉垮埌灏忕▼搴�
+ */
+export function tempAsyncApi() {
+  return request({
+    url: `/admin/platform/wechat/program/my/temp/async`,
+    method: 'get',
+  });
+}
+
+/**
+ * 鍏紬鍙锋ā鏉挎秷鎭悓姝�
+ */
+export function wechatAsyncApi() {
+  return request({
+    url: `/admin/platform/wechat/template/whcbqhn/sync`,
+    method: 'post',
+  });
+}
+
+/**
+ * 灏忕▼搴忔ā鏉挎秷鎭悓姝�
+ */
+export function routineAsyncApi() {
+  return request({
+    url: `/admin/platform/wechat/template/routine/sync`,
+    method: 'post',
+  });
+}
+
+/**
+ * 灏忕▼搴忔簮鐮佷笅杞�
+ */
+export function wechatCodeDownload() {
+  return request({
+    url: `/admin/platform/wechat/code/download`,
+    method: 'get',
+  });
+}
diff --git a/project-web/src/api/user.js b/project-web/src/api/user.js
new file mode 100644
index 0000000..31a05f7
--- /dev/null
+++ b/project-web/src/api/user.js
@@ -0,0 +1,160 @@
+import request from '@/utils/request';
+
+
+// 鐧诲綍鏂规硶锛岄�氱敤鏂规硶銆� Mike锛�2023-05-12
+export function login(username, password, code, uuid, loginType, verifyType) {
+  const data = {
+    username,
+    password,
+    code,
+    uuid,
+    loginType,
+    verifyType
+  };
+  return request({
+    url: '/login',
+    method: 'post',
+    data: data
+  })
+}
+
+export function getInfo(token) {
+  return request({
+    url: '/getInfo',
+    method: 'get',
+    params: { token },
+  });
+}
+// 淇敼瀵嗙爜
+export function getChangePass(data) {
+  return request({
+    url: '/system/user/profile/force_change_pass',
+    method: 'post',
+    params:{...data}
+  });
+}
+
+// 閫�鍑烘柟娉�
+export function logout() {
+  return request({
+    url: '/logout',
+    method: 'post'
+  })
+}
+
+// 鑾峰彇楠岃瘉鐮�
+export function getCodeImg() {
+  return request({
+    // url: '/captchaImage',
+    url: '/captcha/image',
+    headers: {
+      isToken: false
+    },
+    method: 'get',
+    timeout: 20000
+  })
+}
+// 鑾峰彇娌℃湁楠岃瘉鐮佹儏鍐碉紝鏃跺厠鑻憋紝2023-03-14
+export function getCodeNone() {
+  return request({
+    // url: '/captchaNone',
+    url: '/captcha/none',
+    headers: {
+      isToken: false
+    },
+    method: 'get',
+    timeout: 20000
+  })
+}
+
+
+/**
+ * @description 鍒濆鍖栧瘑鐮�
+ */
+export function updPassWord(data) {
+  return request({
+    url: `/pc/fin/sys/tenant/user/defaultPassword`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * @description 鏇存柊
+ */
+export function upd(data) {
+  return request({
+    url: `/pc/fin/sys/tenant/user/update`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * @description 鏇存柊鐘舵��/閫昏緫鍒犻櫎
+ */
+export function updateStatus(data) {
+  return request({
+    url: `/pc/fin/sys/tenant/user/updateStatus`,
+    method: 'post',
+    data,
+  });
+}
+
+/**
+ * @description 鑾峰彇鐢ㄦ埛
+ */
+export function getUser(params) {
+  return request({
+    url: `/pc/fin/sys/tenant/user/detail`,
+    method: 'get',
+    params,
+  });
+}
+
+// 鏂板
+export function add(data) {
+  return request({
+    url: '/pc/fin/sys/tenant/user/add',
+    method: 'post',
+    data: data
+  })
+}
+
+
+/**
+ * @description 鏇存柊瑙掕壊鏉冮檺
+ */
+export function updRole(data) {
+  return request({
+    url: `/pc/fin/sys/tenant/user/updRole`,
+    method: 'post',
+    data,
+  });
+}
+
+// 鏌ヨ鐢ㄦ埛淇℃伅
+export function getCurInfo(data) {
+  return request({
+    url: '/pc/fin/sys/tenant/user/getCurInfo',
+    method: 'get',
+    data: data
+  })
+}
+// 淇敼鐢ㄦ埛淇℃伅
+export function updatePerson(data) {
+  return request({
+    url: '/pc/fin/sys/tenant/user/updatePerson',
+    method: 'post',
+    data: data
+  })
+}
+// 淇敼鐢ㄦ埛鐧诲綍瀵嗙爜
+export function updatePassword(data) {
+  return request({
+    url: '/pc/fin/sys/tenant/user/updatePassword',
+    method: 'post',
+    data: data
+  })
+}
+
diff --git a/project-web/src/assets/401_images/401.gif b/project-web/src/assets/401_images/401.gif
new file mode 100644
index 0000000..cd6e0d9
--- /dev/null
+++ b/project-web/src/assets/401_images/401.gif
Binary files differ
diff --git a/project-web/src/assets/404_images/404.png b/project-web/src/assets/404_images/404.png
new file mode 100644
index 0000000..3d8e230
--- /dev/null
+++ b/project-web/src/assets/404_images/404.png
Binary files differ
diff --git a/project-web/src/assets/404_images/404_cloud.png b/project-web/src/assets/404_images/404_cloud.png
new file mode 100644
index 0000000..c6281d0
--- /dev/null
+++ b/project-web/src/assets/404_images/404_cloud.png
Binary files differ
diff --git a/project-web/src/assets/custom-theme/fonts/element-icons.ttf b/project-web/src/assets/custom-theme/fonts/element-icons.ttf
new file mode 100644
index 0000000..570a3e1
--- /dev/null
+++ b/project-web/src/assets/custom-theme/fonts/element-icons.ttf
Binary files differ
diff --git a/project-web/src/assets/custom-theme/fonts/element-icons.woff b/project-web/src/assets/custom-theme/fonts/element-icons.woff
new file mode 100644
index 0000000..c2bcc00
--- /dev/null
+++ b/project-web/src/assets/custom-theme/fonts/element-icons.woff
Binary files differ
diff --git a/project-web/src/assets/custom-theme/index.css b/project-web/src/assets/custom-theme/index.css
new file mode 100644
index 0000000..28e377e
--- /dev/null
+++ b/project-web/src/assets/custom-theme/index.css
@@ -0,0 +1,23148 @@
+@charset "UTF-8";
+.custom-theme .fade-in-linear-enter-active,
+.custom-theme .fade-in-linear-leave-active {
+  -webkit-transition: opacity 0.2s linear;
+  transition: opacity 0.2s linear;
+}
+
+.custom-theme .fade-in-linear-enter,
+.custom-theme .fade-in-linear-leave,
+.custom-theme .fade-in-linear-leave-active {
+  opacity: 0;
+}
+
+.custom-theme .el-fade-in-linear-enter-active,
+.custom-theme .el-fade-in-linear-leave-active {
+  -webkit-transition: opacity 0.2s linear;
+  transition: opacity 0.2s linear;
+}
+
+.custom-theme .el-fade-in-linear-enter,
+.custom-theme .el-fade-in-linear-leave,
+.custom-theme .el-fade-in-linear-leave-active {
+  opacity: 0;
+}
+
+.custom-theme .el-fade-in-enter-active,
+.custom-theme .el-fade-in-leave-active {
+  -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+  transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+}
+
+.custom-theme .el-fade-in-enter,
+.custom-theme .el-fade-in-leave-active {
+  opacity: 0;
+}
+
+.custom-theme .el-zoom-in-center-enter-active,
+.custom-theme .el-zoom-in-center-leave-active {
+  -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+  transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+}
+
+.custom-theme .el-zoom-in-center-enter,
+.custom-theme .el-zoom-in-center-leave-active {
+  opacity: 0;
+  -webkit-transform: scaleX(0);
+  transform: scaleX(0);
+}
+
+.custom-theme .el-zoom-in-top-enter-active,
+.custom-theme .el-zoom-in-top-leave-active {
+  opacity: 1;
+  -webkit-transform: scaleY(1);
+  transform: scaleY(1);
+  -webkit-transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  -webkit-transform-origin: center top;
+  transform-origin: center top;
+}
+
+.custom-theme .el-zoom-in-top-enter,
+.custom-theme .el-zoom-in-top-leave-active {
+  opacity: 0;
+  -webkit-transform: scaleY(0);
+  transform: scaleY(0);
+}
+
+.custom-theme .el-zoom-in-bottom-enter-active,
+.custom-theme .el-zoom-in-bottom-leave-active {
+  opacity: 1;
+  -webkit-transform: scaleY(1);
+  transform: scaleY(1);
+  -webkit-transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  -webkit-transform-origin: center bottom;
+  transform-origin: center bottom;
+}
+
+.custom-theme .el-zoom-in-bottom-enter,
+.custom-theme .el-zoom-in-bottom-leave-active {
+  opacity: 0;
+  -webkit-transform: scaleY(0);
+  transform: scaleY(0);
+}
+
+.custom-theme .el-zoom-in-left-enter-active,
+.custom-theme .el-zoom-in-left-leave-active {
+  opacity: 1;
+  -webkit-transform: scale(1, 1);
+  transform: scale(1, 1);
+  -webkit-transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  -webkit-transform-origin: top left;
+  transform-origin: top left;
+}
+
+.custom-theme .el-zoom-in-left-enter,
+.custom-theme .el-zoom-in-left-leave-active {
+  opacity: 0;
+  -webkit-transform: scale(0.45, 0.45);
+  transform: scale(0.45, 0.45);
+}
+
+.custom-theme .collapse-transition {
+  -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out;
+  transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out;
+}
+
+.custom-theme .horizontal-collapse-transition {
+  -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out;
+  transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out;
+}
+
+.custom-theme .el-list-enter-active,
+.custom-theme .el-list-leave-active {
+  -webkit-transition: all 1s;
+  transition: all 1s;
+}
+
+.custom-theme .el-list-enter,
+.custom-theme .el-list-leave-active {
+  opacity: 0;
+  -webkit-transform: translateY(-30px);
+  transform: translateY(-30px);
+}
+
+.custom-theme .el-opacity-transition {
+  -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+  transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+}
+
+@font-face {
+  font-family: element-icons;
+  src: url(fonts/element-icons.woff?t=1508751886602) format('woff'),
+  url(fonts/element-icons.ttf?t=1508751886602) format('truetype');
+  font-weight: 400;
+  font-style: normal;
+}
+
+.custom-theme [class*=' el-icon-'],
+.custom-theme [class^='el-icon-'] {
+  font-family: element-icons !important;
+  speak: none;
+  font-style: normal;
+  font-weight: 400;
+  font-variant: normal;
+  text-transform: none;
+  line-height: 1;
+  vertical-align: baseline;
+  display: inline-block;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.custom-theme .el-icon-upload:before {
+  content: '\e60d';
+}
+
+.custom-theme .el-icon-error:before {
+  content: '\e62c';
+}
+
+.custom-theme .el-icon-success:before {
+  content: '\e62d';
+}
+
+.custom-theme .el-icon-warning:before {
+  content: '\e62e';
+}
+
+.custom-theme .el-icon-sort-down:before {
+  content: '\e630';
+}
+
+.custom-theme .el-icon-sort-up:before {
+  content: '\e631';
+}
+
+.custom-theme .el-icon-arrow-left:before {
+  content: '\e600';
+}
+
+.custom-theme .el-icon-circle-plus:before {
+  content: '\e601';
+}
+
+.custom-theme .el-icon-circle-plus-outline:before {
+  content: '\e602';
+}
+
+.custom-theme .el-icon-arrow-down:before {
+  content: '\e603';
+}
+
+.custom-theme .el-icon-arrow-right:before {
+  content: '\e604';
+}
+
+.custom-theme .el-icon-arrow-up:before {
+  content: '\e605';
+}
+
+.custom-theme .el-icon-back:before {
+  content: '\e606';
+}
+
+.custom-theme .el-icon-circle-close:before {
+  content: '\e607';
+}
+
+.custom-theme .el-icon-date:before {
+  content: '\e608';
+}
+
+.custom-theme .el-icon-circle-close-outline:before {
+  content: '\e609';
+}
+
+.custom-theme .el-icon-caret-left:before {
+  content: '\e60a';
+}
+
+.custom-theme .el-icon-caret-bottom:before {
+  content: '\e60b';
+}
+
+.custom-theme .el-icon-caret-top:before {
+  content: '\e60c';
+}
+
+.custom-theme .el-icon-caret-right:before {
+  content: '\e60e';
+}
+
+.custom-theme .el-icon-close:before {
+  content: '\e60f';
+}
+
+.custom-theme .el-icon-d-arrow-left:before {
+  content: '\e610';
+}
+
+.custom-theme .el-icon-check:before {
+  content: '\e611';
+}
+
+.custom-theme .el-icon-delete:before {
+  content: '\e612';
+}
+
+.custom-theme .el-icon-d-arrow-right:before {
+  content: '\e613';
+}
+
+.custom-theme .el-icon-document:before {
+  content: '\e614';
+}
+
+.custom-theme .el-icon-d-caret:before {
+  content: '\e615';
+}
+
+.custom-theme .el-icon-edit-outline:before {
+  content: '\e616';
+}
+
+.custom-theme .el-icon-download:before {
+  content: '\e617';
+}
+
+.custom-theme .el-icon-goods:before {
+  content: '\e618';
+}
+
+.custom-theme .el-icon-search:before {
+  content: '\e619';
+}
+
+.custom-theme .el-icon-info:before {
+  content: '\e61a';
+}
+
+.custom-theme .el-icon-message:before {
+  content: '\e61b';
+}
+
+.custom-theme .el-icon-edit:before {
+  content: '\e61c';
+}
+
+.custom-theme .el-icon-location:before {
+  content: '\e61d';
+}
+
+.custom-theme .el-icon-loading:before {
+  content: '\e61e';
+}
+
+.custom-theme .el-icon-location-outline:before {
+  content: '\e61f';
+}
+
+.custom-theme .el-icon-menu:before {
+  content: '\e620';
+}
+
+.custom-theme .el-icon-minus:before {
+  content: '\e621';
+}
+
+.custom-theme .el-icon-bell:before {
+  content: '\e622';
+}
+
+.custom-theme .el-icon-mobile-phone:before {
+  content: '\e624';
+}
+
+.custom-theme .el-icon-news:before {
+  content: '\e625';
+}
+
+.custom-theme .el-icon-more:before {
+  content: '\e646';
+}
+
+.custom-theme .el-icon-more-outline:before {
+  content: '\e626';
+}
+
+.custom-theme .el-icon-phone:before {
+  content: '\e627';
+}
+
+.custom-theme .el-icon-phone-outline:before {
+  content: '\e628';
+}
+
+.custom-theme .el-icon-picture:before {
+  content: '\e629';
+}
+
+.custom-theme .el-icon-picture-outline:before {
+  content: '\e62a';
+}
+
+.custom-theme .el-icon-plus:before {
+  content: '\e62b';
+}
+
+.custom-theme .el-icon-printer:before {
+  content: '\e62f';
+}
+
+.custom-theme .el-icon-rank:before {
+  content: '\e632';
+}
+
+.custom-theme .el-icon-refresh:before {
+  content: '\e633';
+}
+
+.custom-theme .el-icon-question:before {
+  content: '\e634';
+}
+
+.custom-theme .el-icon-remove:before {
+  content: '\e635';
+}
+
+.custom-theme .el-icon-share:before {
+  content: '\e636';
+}
+
+.custom-theme .el-icon-star-on:before {
+  content: '\e637';
+}
+
+.custom-theme .el-icon-setting:before {
+  content: '\e638';
+}
+
+.custom-theme .el-icon-circle-check:before {
+  content: '\e639';
+}
+
+.custom-theme .el-icon-service:before {
+  content: '\e63a';
+}
+
+.custom-theme .el-icon-sold-out:before {
+  content: '\e63b';
+}
+
+.custom-theme .el-icon-remove-outline:before {
+  content: '\e63c';
+}
+
+.custom-theme .el-icon-star-off:before {
+  content: '\e63d';
+}
+
+.custom-theme .el-icon-circle-check-outline:before {
+  content: '\e63e';
+}
+
+.custom-theme .el-icon-tickets:before {
+  content: '\e63f';
+}
+
+.custom-theme .el-icon-sort:before {
+  content: '\e640';
+}
+
+.custom-theme .el-icon-zoom-in:before {
+  content: '\e641';
+}
+
+.custom-theme .el-icon-time:before {
+  content: '\e642';
+}
+
+.custom-theme .el-icon-view:before {
+  content: '\e643';
+}
+
+.custom-theme .el-icon-upload2:before {
+  content: '\e644';
+}
+
+.custom-theme .el-icon-zoom-out:before {
+  content: '\e645';
+}
+
+.custom-theme .el-icon-loading {
+  -webkit-animation: rotating 2s linear infinite;
+  animation: rotating 2s linear infinite;
+}
+
+.custom-theme .el-icon--right {
+  margin-left: 5px;
+}
+
+.custom-theme .el-icon--left {
+  margin-right: 5px;
+}
+
+@-webkit-keyframes rotating {
+  0% {
+    -webkit-transform: rotateZ(0);
+    transform: rotateZ(0);
+  }
+  100% {
+    -webkit-transform: rotateZ(360deg);
+    transform: rotateZ(360deg);
+  }
+}
+
+@keyframes rotating {
+  0% {
+    -webkit-transform: rotateZ(0);
+    transform: rotateZ(0);
+  }
+  100% {
+    -webkit-transform: rotateZ(360deg);
+    transform: rotateZ(360deg);
+  }
+}
+
+.custom-theme .el-popper .popper__arrow,
+.custom-theme .el-popper .popper__arrow::after {
+  position: absolute;
+  display: block;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+
+.custom-theme .el-popper .popper__arrow {
+  border-width: 6px;
+  -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
+  filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
+}
+
+.custom-theme .el-popper .popper__arrow::after {
+  content: ' ';
+  border-width: 6px;
+}
+
+.custom-theme .el-popper[x-placement^='top'] {
+  margin-bottom: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='top'] .popper__arrow {
+  bottom: -6px;
+  left: 50%;
+  margin-right: 3px;
+  border-top-color: #e6ebf5;
+  border-bottom-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='top'] .popper__arrow::after {
+  bottom: 1px;
+  margin-left: -6px;
+  border-top-color: #fff;
+  border-bottom-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] {
+  margin-top: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] .popper__arrow {
+  top: -6px;
+  left: 50%;
+  margin-right: 3px;
+  border-top-width: 0;
+  border-bottom-color: #e6ebf5;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] .popper__arrow::after {
+  top: 1px;
+  margin-left: -6px;
+  border-top-width: 0;
+  border-bottom-color: #fff;
+}
+
+.custom-theme .el-popper[x-placement^='right'] {
+  margin-left: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='right'] .popper__arrow {
+  top: 50%;
+  left: -6px;
+  margin-bottom: 3px;
+  border-right-color: #e6ebf5;
+  border-left-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='right'] .popper__arrow::after {
+  bottom: -6px;
+  left: 1px;
+  border-right-color: #fff;
+  border-left-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='left'] {
+  margin-right: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='left'] .popper__arrow {
+  top: 50%;
+  right: -6px;
+  margin-bottom: 3px;
+  border-right-width: 0;
+  border-left-color: #e6ebf5;
+}
+
+.custom-theme .el-popper[x-placement^='left'] .popper__arrow::after {
+  right: 1px;
+  bottom: -6px;
+  margin-left: -6px;
+  border-right-width: 0;
+  border-left-color: #fff;
+}
+
+.custom-theme .el-select-dropdown {
+  position: absolute;
+  z-index: 1001;
+  border: solid 1px #dfe4ed;
+  border-radius: 4px;
+  background-color: #fff;
+  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  margin: 5px 0;
+}
+
+.custom-theme .el-select-dropdown.is-multiple .el-select-dropdown__item.selected {
+  color: #262729;
+  background-color: #fff;
+}
+
+.custom-theme .el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover {
+  background-color: #f5f7fa;
+}
+
+.custom-theme .el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after {
+  position: absolute;
+  right: 20px;
+  font-family: element-icons;
+  content: '\E611';
+  font-size: 12px;
+  font-weight: 700;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.custom-theme .el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list {
+  padding: 0;
+}
+
+.custom-theme .el-select-dropdown .popper__arrow {
+  -webkit-transform: translateX(-400%);
+  transform: translateX(-400%);
+}
+
+.custom-theme .el-select-dropdown.is-arrow-fixed .popper__arrow {
+  -webkit-transform: translateX(-200%);
+  transform: translateX(-200%);
+}
+
+.custom-theme .el-select-dropdown__empty {
+  padding: 10px 0;
+  margin: 0;
+  text-align: center;
+  color: #999;
+  font-size: 14px;
+}
+
+.custom-theme .el-select-dropdown__wrap {
+  max-height: 274px;
+}
+
+.custom-theme .el-select-dropdown__list {
+  list-style: none;
+  padding: 6px 0;
+  margin: 0;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-input {
+  position: relative;
+  font-size: 14px;
+  display: inline-block;
+  width: 100%;
+}
+
+.custom-theme .el-input::-webkit-scrollbar {
+  z-index: 11;
+  width: 6px;
+}
+
+.custom-theme .el-input::-webkit-scrollbar:horizontal {
+  height: 6px;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-thumb {
+  border-radius: 5px;
+  width: 6px;
+  background: #b4bccc;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-corner {
+  background: #fff;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-track {
+  background: #fff;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-track-piece {
+  background: #fff;
+  width: 6px;
+}
+
+.custom-theme .el-input__inner {
+  -webkit-appearance: none;
+  background-color: #fff;
+  background-image: none;
+  border-radius: 4px;
+  border: 1px solid #d8dce5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  color: #5a5e66;
+  display: inline-block;
+  font-size: inherit;
+  height: 40px;
+  line-height: 1;
+  outline: 0;
+  padding: 0 15px;
+  -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  width: 100%;
+}
+
+.custom-theme .el-input__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:hover {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:focus {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-input__suffix {
+  position: absolute;
+  height: 100%;
+  right: 5px;
+  top: 0;
+  text-align: center;
+  color: #b4bccc;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+  pointer-events: none;
+}
+
+.custom-theme .el-input__suffix-inner {
+  pointer-events: all;
+}
+
+.custom-theme .el-input__prefix {
+  position: absolute;
+  height: 100%;
+  left: 5px;
+  top: 0;
+  text-align: center;
+  color: #b4bccc;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+}
+
+.custom-theme .el-input__icon {
+  height: 100%;
+  width: 25px;
+  text-align: center;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+  line-height: 40px;
+}
+
+.custom-theme .el-input__icon:after {
+  content: '';
+  height: 100%;
+  width: 0;
+  display: inline-block;
+  vertical-align: middle;
+}
+
+.custom-theme .el-input__validateIcon {
+  pointer-events: none;
+}
+
+.custom-theme .el-input.is-active .el-input__inner {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__icon {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input--suffix .el-input__inner {
+  padding-right: 30px;
+}
+
+.custom-theme .el-input--prefix .el-input__inner {
+  padding-left: 30px;
+}
+
+.custom-theme .el-input--medium {
+  font-size: 14px;
+}
+
+.custom-theme .el-input--medium .el-input__inner {
+  height: 36px;
+}
+
+.custom-theme .el-input--medium .el-input__icon {
+  line-height: 36px;
+}
+
+.custom-theme .el-input--small {
+  font-size: 13px;
+}
+
+.custom-theme .el-input--small .el-input__inner {
+  height: 32px;
+}
+
+.custom-theme .el-input--small .el-input__icon {
+  line-height: 32px;
+}
+
+.custom-theme .el-input--mini {
+  font-size: 12px;
+}
+
+.custom-theme .el-input--mini .el-input__inner {
+  height: 28px;
+}
+
+.custom-theme .el-input--mini .el-input__icon {
+  line-height: 28px;
+}
+
+.custom-theme .el-input-group {
+  line-height: normal;
+  display: inline-table;
+  width: 100%;
+  border-collapse: separate;
+}
+
+.custom-theme .el-input-group > .el-input__inner {
+  vertical-align: middle;
+  display: table-cell;
+}
+
+.custom-theme .el-input-group__append,
+.custom-theme .el-input-group__prepend {
+  background-color: #f5f7fa;
+  color: #0a76a4;
+  vertical-align: middle;
+  display: table-cell;
+  position: relative;
+  border: 1px solid #d8dce5;
+  border-radius: 4px;
+  padding: 0 20px;
+  width: 1px;
+  white-space: nowrap;
+}
+
+.custom-theme .el-input-group__append:focus,
+.custom-theme .el-input-group__prepend:focus {
+  outline: 0;
+}
+
+.custom-theme .el-input-group__append .el-button,
+.custom-theme .el-input-group__append .el-select,
+.custom-theme .el-input-group__prepend .el-button,
+.custom-theme .el-input-group__prepend .el-select {
+  display: inline-block;
+  margin: -20px;
+}
+
+.custom-theme .el-input-group__append button.el-button,
+.custom-theme .el-input-group__append div.el-select .el-input__inner,
+.custom-theme .el-input-group__append div.el-select:hover .el-input__inner,
+.custom-theme .el-input-group__prepend button.el-button,
+.custom-theme .el-input-group__prepend div.el-select .el-input__inner,
+.custom-theme .el-input-group__prepend div.el-select:hover .el-input__inner {
+  border-color: transparent;
+  background-color: transparent;
+  color: inherit;
+  border-top: 0;
+  border-bottom: 0;
+}
+
+.custom-theme .el-input-group__append .el-button,
+.custom-theme .el-input-group__append .el-input,
+.custom-theme .el-input-group__prepend .el-button,
+.custom-theme .el-input-group__prepend .el-input {
+  font-size: inherit;
+}
+
+.custom-theme .el-input-group__prepend {
+  border-right: 0;
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-input-group__append {
+  border-left: 0;
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-input-group--prepend .el-input__inner {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-input-group--append .el-input__inner {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-textarea {
+  display: inline-block;
+  width: 100%;
+  vertical-align: bottom;
+}
+
+.custom-theme .el-textarea__inner {
+  display: block;
+  resize: vertical;
+  padding: 5px 15px;
+  line-height: 1.5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 100%;
+  font-size: 14px;
+  color: #5a5e66;
+  background-color: #fff;
+  background-image: none;
+  border: 1px solid #d8dce5;
+  border-radius: 4px;
+  -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+}
+
+.custom-theme .el-textarea__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:hover {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:focus {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-tag {
+  background-color: rgba(38, 39, 41, 0.1);
+  display: inline-block;
+  padding: 0 10px;
+  height: 32px;
+  line-height: 30px;
+  font-size: 12px;
+  color: #262729;
+  border-radius: 4px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  border: 1px solid rgba(38, 39, 41, 0.2);
+  white-space: nowrap;
+}
+
+.custom-theme .el-tag .el-icon-close {
+  border-radius: 50%;
+  text-align: center;
+  position: relative;
+  cursor: pointer;
+  font-size: 12px;
+  height: 18px;
+  width: 18px;
+  line-height: 18px;
+  vertical-align: middle;
+  top: -1px;
+  right: -5px;
+  color: #262729;
+}
+
+.custom-theme .el-tag .el-icon-close::before {
+  display: block;
+}
+
+.custom-theme .el-tag .el-icon-close:hover {
+  background-color: #262729;
+  color: #fff;
+}
+
+.custom-theme .el-tag--info {
+  background-color: rgba(10, 118, 164, 0.1);
+  border-color: rgba(10, 118, 164, 0.2);
+  color: #0a76a4;
+}
+
+.custom-theme .el-tag--info.is-hit {
+  border-color: #0a76a4;
+}
+
+.custom-theme .el-tag--info .el-tag__close {
+  color: #0a76a4;
+}
+
+.custom-theme .el-tag--info .el-tag__close:hover {
+  background-color: #0a76a4;
+  color: #fff;
+}
+
+.custom-theme .el-tag--success {
+  background-color: rgba(64, 145, 103, 0.1);
+  border-color: rgba(64, 145, 103, 0.2);
+  color: #409167;
+}
+
+.custom-theme .el-tag--success.is-hit {
+  border-color: #409167;
+}
+
+.custom-theme .el-tag--success .el-tag__close {
+  color: #409167;
+}
+
+.custom-theme .el-tag--success .el-tag__close:hover {
+  background-color: #409167;
+  color: #fff;
+}
+
+.custom-theme .el-tag--warning {
+  background-color: rgba(157, 164, 8, 0.1);
+  border-color: rgba(157, 164, 8, 0.2);
+  color: #9da408;
+}
+
+.custom-theme .el-tag--warning.is-hit {
+  border-color: #9da408;
+}
+
+.custom-theme .el-tag--warning .el-tag__close {
+  color: #9da408;
+}
+
+.custom-theme .el-tag--warning .el-tag__close:hover {
+  background-color: #9da408;
+  color: #fff;
+}
+
+.custom-theme .el-tag--danger {
+  background-color: rgba(179, 69, 14, 0.1);
+  border-color: rgba(179, 69, 14, 0.2);
+  color: #b3450e;
+}
+
+.custom-theme .el-tag--danger.is-hit {
+  border-color: #b3450e;
+}
+
+.custom-theme .el-tag--danger .el-tag__close {
+  color: #b3450e;
+}
+
+.custom-theme .el-tag--danger .el-tag__close:hover {
+  background-color: #b3450e;
+  color: #fff;
+}
+
+.custom-theme .el-tag--medium {
+  height: 28px;
+  line-height: 26px;
+}
+
+.custom-theme .el-tag--medium .el-icon-close {
+  -webkit-transform: scale(0.8);
+  transform: scale(0.8);
+}
+
+.custom-theme .el-tag--small {
+  height: 24px;
+  padding: 0 8px;
+  line-height: 22px;
+}
+
+.custom-theme .el-tag--small .el-icon-close {
+  -webkit-transform: scale(0.8);
+  transform: scale(0.8);
+}
+
+.custom-theme .el-tag--mini {
+  height: 20px;
+  padding: 0 5px;
+  line-height: 19px;
+}
+
+.custom-theme .el-tag--mini .el-icon-close {
+  margin-left: -3px;
+  -webkit-transform: scale(0.7);
+  transform: scale(0.7);
+}
+
+.custom-theme .el-select-dropdown__item {
+  font-size: 14px;
+  padding: 0 20px;
+  position: relative;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  color: #5a5e66;
+  height: 34px;
+  line-height: 34px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  cursor: pointer;
+}
+
+.custom-theme .el-select-dropdown__item.is-disabled {
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-select-dropdown__item.is-disabled:hover {
+  background-color: #fff;
+}
+
+.custom-theme .el-select-dropdown__item.hover,
+.custom-theme .el-select-dropdown__item:hover {
+  background-color: #f5f7fa;
+}
+
+.custom-theme .el-select-dropdown__item.selected {
+  color: #262729;
+  font-weight: 700;
+}
+
+.custom-theme .el-select-dropdown__item span {
+  line-height: 34px !important;
+}
+
+.custom-theme .el-select-group {
+  margin: 0;
+  padding: 0;
+}
+
+.custom-theme .el-select-group__wrap {
+  position: relative;
+  list-style: none;
+  margin: 0;
+  padding: 0;
+}
+
+.custom-theme .el-select-group__wrap:not(:last-of-type) {
+  padding-bottom: 24px;
+}
+
+.custom-theme .el-select-group__wrap:not(:last-of-type)::after {
+  content: '';
+  position: absolute;
+  display: block;
+  left: 20px;
+  right: 20px;
+  bottom: 12px;
+  height: 1px;
+  background: #dfe4ed;
+}
+
+.custom-theme .el-select-group__title {
+  padding-left: 20px;
+  font-size: 12px;
+  color: #0a76a4;
+  line-height: 30px;
+}
+
+.custom-theme .el-select-group .el-select-dropdown__item {
+  padding-left: 20px;
+}
+
+.custom-theme .el-scrollbar {
+  overflow: hidden;
+  position: relative;
+}
+
+.custom-theme .el-scrollbar:active > .el-scrollbar__bar,
+.custom-theme .el-scrollbar:focus > .el-scrollbar__bar,
+.custom-theme .el-scrollbar:hover > .el-scrollbar__bar {
+  opacity: 1;
+  -webkit-transition: opacity 340ms ease-out;
+  transition: opacity 340ms ease-out;
+}
+
+.custom-theme .el-scrollbar__wrap {
+  overflow: scroll;
+  height: 100%;
+}
+
+.custom-theme .el-scrollbar__wrap--hidden-default::-webkit-scrollbar {
+  width: 0;
+  height: 0;
+}
+
+.custom-theme .el-scrollbar__thumb {
+  position: relative;
+  display: block;
+  width: 0;
+  height: 0;
+  cursor: pointer;
+  border-radius: inherit;
+  background-color: rgba(135, 141, 153, 0.3);
+  -webkit-transition: 0.3s background-color;
+  transition: 0.3s background-color;
+}
+
+.custom-theme .el-scrollbar__thumb:hover {
+  background-color: rgba(135, 141, 153, 0.5);
+}
+
+.custom-theme .el-scrollbar__bar {
+  position: absolute;
+  right: 2px;
+  bottom: 2px;
+  z-index: 1;
+  border-radius: 4px;
+  opacity: 0;
+  -webkit-transition: opacity 120ms ease-out;
+  transition: opacity 120ms ease-out;
+}
+
+.custom-theme .el-scrollbar__bar.is-vertical {
+  width: 6px;
+  top: 2px;
+}
+
+.custom-theme .el-scrollbar__bar.is-vertical > div {
+  width: 100%;
+}
+
+.custom-theme .el-scrollbar__bar.is-horizontal {
+  height: 6px;
+  left: 2px;
+}
+
+.custom-theme .el-scrollbar__bar.is-horizontal > div {
+  height: 100%;
+}
+
+.custom-theme .el-select {
+  display: inline-block;
+  position: relative;
+}
+
+.custom-theme .el-select:hover .el-input__inner {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-select .el-input__inner {
+  cursor: pointer;
+  padding-right: 35px;
+}
+
+.custom-theme .el-select .el-input__inner:focus {
+  border-color: #262729;
+}
+
+.custom-theme .el-select .el-input .el-select__caret {
+  color: #b4bccc;
+  font-size: 14px;
+  -webkit-transition: -webkit-transform 0.3s;
+  transition: -webkit-transform 0.3s;
+  transition: transform 0.3s;
+  transition: transform 0.3s, -webkit-transform 0.3s;
+  -webkit-transform: rotateZ(180deg);
+  transform: rotateZ(180deg);
+  line-height: 16px;
+  cursor: pointer;
+}
+
+.custom-theme .el-select .el-input .el-select__caret.is-reverse {
+  -webkit-transform: rotateZ(0);
+  transform: rotateZ(0);
+}
+
+.custom-theme .el-select .el-input .el-select__caret.is-show-close {
+  font-size: 14px;
+  text-align: center;
+  -webkit-transform: rotateZ(180deg);
+  transform: rotateZ(180deg);
+  border-radius: 100%;
+  color: #b4bccc;
+  -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+}
+
+.custom-theme .el-select .el-input .el-select__caret.is-show-close:hover {
+  color: #878d99;
+}
+
+.custom-theme .el-select .el-input.is-disabled .el-input__inner {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-select .el-input.is-disabled .el-input__inner:hover {
+  border-color: #dfe4ed;
+}
+
+.custom-theme .el-select > .el-input {
+  display: block;
+}
+
+.custom-theme .el-select__input {
+  border: none;
+  outline: 0;
+  padding: 0;
+  margin-left: 15px;
+  color: #666;
+  font-size: 14px;
+  vertical-align: baseline;
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  appearance: none;
+  height: 28px;
+  background-color: transparent;
+}
+
+.custom-theme .el-select__input.is-mini {
+  height: 14px;
+}
+
+.custom-theme .el-select__close {
+  cursor: pointer;
+  position: absolute;
+  top: 8px;
+  z-index: 1000;
+  right: 25px;
+  color: #b4bccc;
+  line-height: 18px;
+  font-size: 14px;
+}
+
+.custom-theme .el-select__close:hover {
+  color: #878d99;
+}
+
+.custom-theme .el-select__tags {
+  position: absolute;
+  line-height: normal;
+  white-space: normal;
+  z-index: 1;
+  top: 50%;
+  -webkit-transform: translateY(-50%);
+  transform: translateY(-50%);
+}
+
+.custom-theme .el-select .el-tag__close {
+  margin-top: -2px;
+}
+
+.custom-theme .el-select .el-tag {
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  border-color: transparent;
+  margin: 3px 0 3px 6px;
+  background-color: #f0f2f5;
+}
+
+.custom-theme .el-select .el-tag__close.el-icon-close {
+  background-color: #b4bccc;
+  right: -7px;
+  color: #fff;
+}
+
+.custom-theme .el-select .el-tag__close.el-icon-close:hover {
+  background-color: #878d99;
+}
+
+.custom-theme .el-select .el-tag__close.el-icon-close::before {
+  display: block;
+  -webkit-transform: translate(0, 0.5px);
+  transform: translate(0, 0.5px);
+}
+
+.custom-theme .el-select__tag {
+  display: inline-block;
+  height: 24px;
+  line-height: 24px;
+  font-size: 14px;
+  border-radius: 4px;
+  color: #fff;
+  background-color: #262729;
+}
+
+.custom-theme .el-select__tag .el-icon-close {
+  font-size: 14px;
+}
+
+.custom-theme .el-pagination {
+  white-space: nowrap;
+  padding: 2px 5px;
+  color: #2d2f33;
+  font-weight: 700;
+}
+
+.custom-theme .el-pagination::after,
+.custom-theme .el-pagination::before {
+  display: table;
+  content: '';
+}
+
+.custom-theme .el-pagination::after {
+  clear: both;
+}
+
+.custom-theme .el-pagination button,
+.custom-theme .el-pagination span:not([class*='suffix']) {
+  display: inline-block;
+  font-size: 13px;
+  min-width: 35.5px;
+  height: 28px;
+  line-height: 28px;
+  vertical-align: top;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-pagination .el-input__inner {
+  text-align: center;
+}
+
+.custom-theme .el-pagination .el-input__suffix {
+  right: 0;
+  -webkit-transform: scale(0.8);
+  transform: scale(0.8);
+}
+
+.custom-theme .el-pagination .el-select .el-input {
+  width: 100px;
+  margin: 0 5px;
+}
+
+.custom-theme .el-pagination .el-select .el-input .el-input__inner {
+  padding-right: 25px;
+  border-radius: 3px;
+  height: 28px;
+}
+
+.custom-theme .el-pagination button {
+  border: none;
+  padding: 0 6px;
+  background: 0 0;
+}
+
+.custom-theme .el-pagination button:focus {
+  outline: 0;
+}
+
+.custom-theme .el-pagination button:hover {
+  color: #262729;
+}
+
+.custom-theme .el-pagination button.disabled {
+  color: #b4bccc;
+  background-color: #fff;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-pagination .btn-next,
+.custom-theme .el-pagination .btn-prev {
+  background: center center no-repeat;
+  background-size: 16px;
+  background-color: #fff;
+  cursor: pointer;
+  margin: 0;
+  color: #2d2f33;
+}
+
+.custom-theme .el-pagination .btn-next .el-icon,
+.custom-theme .el-pagination .btn-prev .el-icon {
+  display: block;
+  font-size: 12px;
+}
+
+.custom-theme .el-pagination .btn-prev {
+  padding-right: 12px;
+}
+
+.custom-theme .el-pagination .btn-next {
+  padding-left: 12px;
+}
+
+.custom-theme .el-pagination--small .btn-next,
+.custom-theme .el-pagination--small .btn-prev,
+.custom-theme .el-pagination--small .el-pager li,
+.custom-theme .el-pagination--small .el-pager li:last-child {
+  border-color: transparent;
+  font-size: 12px;
+  line-height: 22px;
+  height: 22px;
+  min-width: 22px;
+}
+
+.custom-theme .el-pagination--small .arrow.disabled {
+  visibility: hidden;
+}
+
+.custom-theme .el-pagination__sizes {
+  margin: 0 10px 0 0;
+  font-weight: 400;
+  color: #5a5e66;
+}
+
+.custom-theme .el-pagination__sizes .el-input .el-input__inner {
+  font-size: 13px;
+  padding-left: 8px;
+}
+
+.custom-theme .el-pagination__sizes .el-input .el-input__inner:hover {
+  border-color: #262729;
+}
+
+.custom-theme .el-pagination__total {
+  margin-right: 10px;
+  font-weight: 400;
+  color: #5a5e66;
+}
+
+.custom-theme .el-pagination__jump {
+  margin-left: 24px;
+  font-weight: 400;
+  color: #5a5e66;
+}
+
+.custom-theme .el-pagination__jump .el-input__inner {
+  padding: 0 3px;
+}
+
+.custom-theme .el-pagination__rightwrapper {
+  float: right;
+}
+
+.custom-theme .el-pagination__editor {
+  line-height: 18px;
+  padding: 0 2px;
+  height: 28px;
+  text-align: center;
+  margin: 0 2px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  border-radius: 3px;
+  -moz-appearance: textfield;
+}
+
+.custom-theme .el-pagination__editor.el-input {
+  width: 50px;
+}
+
+.custom-theme .el-pagination__editor.el-input .el-input__inner {
+  height: 28px;
+}
+
+.custom-theme .el-pagination__editor .el-input__inner::-webkit-inner-spin-button,
+.custom-theme .el-pagination__editor .el-input__inner::-webkit-outer-spin-button {
+  -webkit-appearance: none;
+  margin: 0;
+}
+
+.custom-theme .el-pager {
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  list-style: none;
+  display: inline-block;
+  vertical-align: top;
+  font-size: 0;
+  padding: 0;
+  margin: 0;
+}
+
+.custom-theme .el-pager .el-icon-more::before {
+  vertical-align: -4px;
+}
+
+.custom-theme .el-pager li {
+  padding: 0 4px;
+  background: #fff;
+  vertical-align: top;
+  display: inline-block;
+  font-size: 13px;
+  min-width: 35.5px;
+  height: 28px;
+  line-height: 28px;
+  cursor: pointer;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  text-align: center;
+  margin: 0;
+}
+
+.custom-theme .el-pager li.btn-quicknext,
+.custom-theme .el-pager li.btn-quickprev {
+  line-height: 28px;
+  color: #2d2f33;
+}
+
+.custom-theme .el-pager li.btn-quickprev:hover {
+  cursor: pointer;
+}
+
+.custom-theme .el-pager li.btn-quicknext:hover {
+  cursor: pointer;
+}
+
+.custom-theme .el-pager li.active + li {
+  border-left: 0;
+}
+
+.custom-theme .el-pager li:hover {
+  color: #262729;
+}
+
+.custom-theme .el-pager li.active {
+  color: #262729;
+  cursor: default;
+}
+
+.custom-theme .v-modal-enter {
+  -webkit-animation: v-modal-in 0.2s ease;
+  animation: v-modal-in 0.2s ease;
+}
+
+.custom-theme .v-modal-leave {
+  -webkit-animation: v-modal-out 0.2s ease forwards;
+  animation: v-modal-out 0.2s ease forwards;
+}
+
+@-webkit-keyframes v-modal-in {
+  0% {
+    opacity: 0;
+  }
+}
+
+@keyframes v-modal-in {
+  0% {
+    opacity: 0;
+  }
+}
+
+@-webkit-keyframes v-modal-out {
+  100% {
+    opacity: 0;
+  }
+}
+
+@keyframes v-modal-out {
+  100% {
+    opacity: 0;
+  }
+}
+
+.custom-theme .v-modal {
+  position: fixed;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  opacity: 0.5;
+  background: #000;
+}
+
+.custom-theme .el-dialog {
+  position: relative;
+  margin: 0 auto 50px;
+  background: #fff;
+  border-radius: 2px;
+  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 50%;
+}
+
+.custom-theme .el-dialog.is-fullscreen {
+  width: 100%;
+  margin-top: 0;
+  margin-bottom: 0;
+  height: 100%;
+  overflow: auto;
+}
+
+.custom-theme .el-dialog__wrapper {
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  overflow: auto;
+  margin: 0;
+}
+
+.custom-theme .el-dialog__header {
+  padding: 15px;
+  padding-bottom: 10px;
+}
+
+.custom-theme .el-dialog__headerbtn {
+  position: absolute;
+  top: 15px;
+  right: 15px;
+  padding: 0;
+  background: 0 0;
+  border: none;
+  outline: 0;
+  cursor: pointer;
+  font-size: 16px;
+}
+
+.custom-theme .el-dialog__headerbtn .el-dialog__close {
+  color: #0a76a4;
+}
+
+.custom-theme .el-dialog__headerbtn:focus .el-dialog__close,
+.custom-theme .el-dialog__headerbtn:hover .el-dialog__close {
+  color: #262729;
+}
+
+.custom-theme .el-dialog__title {
+  line-height: 24px;
+  font-size: 18px;
+  color: #2d2f33;
+}
+
+.custom-theme .el-dialog__body {
+  padding: 30px 20px;
+  color: #5a5e66;
+  line-height: 24px;
+  font-size: 14px;
+}
+
+.custom-theme .el-dialog__footer {
+  text-align: right;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-dialog--center {
+  text-align: center;
+}
+
+.custom-theme .el-dialog--center .el-dialog__header {
+  padding-top: 30px;
+}
+
+.custom-theme .el-dialog--center .el-dialog__body {
+  text-align: initial;
+  padding: 25px 27px 30px;
+}
+
+.custom-theme .el-dialog--center .el-dialog__footer {
+  text-align: inherit;
+  padding-bottom: 30px;
+}
+
+.custom-theme .dialog-fade-enter-active {
+  -webkit-animation: dialog-fade-in 0.3s;
+  animation: dialog-fade-in 0.3s;
+}
+
+.custom-theme .dialog-fade-leave-active {
+  -webkit-animation: dialog-fade-out 0.3s;
+  animation: dialog-fade-out 0.3s;
+}
+
+@-webkit-keyframes dialog-fade-in {
+  0% {
+    -webkit-transform: translate3d(0, -20px, 0);
+    transform: translate3d(0, -20px, 0);
+    opacity: 0;
+  }
+  100% {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+    opacity: 1;
+  }
+}
+
+@keyframes dialog-fade-in {
+  0% {
+    -webkit-transform: translate3d(0, -20px, 0);
+    transform: translate3d(0, -20px, 0);
+    opacity: 0;
+  }
+  100% {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+    opacity: 1;
+  }
+}
+
+@-webkit-keyframes dialog-fade-out {
+  0% {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+    opacity: 1;
+  }
+  100% {
+    -webkit-transform: translate3d(0, -20px, 0);
+    transform: translate3d(0, -20px, 0);
+    opacity: 0;
+  }
+}
+
+@keyframes dialog-fade-out {
+  0% {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+    opacity: 1;
+  }
+  100% {
+    -webkit-transform: translate3d(0, -20px, 0);
+    transform: translate3d(0, -20px, 0);
+    opacity: 0;
+  }
+}
+
+.custom-theme .el-input {
+  position: relative;
+  font-size: 14px;
+  display: inline-block;
+  width: 100%;
+}
+
+.custom-theme .el-input::-webkit-scrollbar {
+  z-index: 11;
+  width: 6px;
+}
+
+.custom-theme .el-input::-webkit-scrollbar:horizontal {
+  height: 6px;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-thumb {
+  border-radius: 5px;
+  width: 6px;
+  background: #b4bccc;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-corner {
+  background: #fff;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-track {
+  background: #fff;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-track-piece {
+  background: #fff;
+  width: 6px;
+}
+
+.custom-theme .el-input__inner {
+  -webkit-appearance: none;
+  background-color: #fff;
+  background-image: none;
+  border-radius: 4px;
+  border: 1px solid #d8dce5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  color: #5a5e66;
+  display: inline-block;
+  font-size: inherit;
+  height: 40px;
+  line-height: 1;
+  outline: 0;
+  padding: 0 15px;
+  -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  width: 100%;
+}
+
+.custom-theme .el-input__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:hover {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:focus {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-input__suffix {
+  position: absolute;
+  height: 100%;
+  right: 5px;
+  top: 0;
+  text-align: center;
+  color: #b4bccc;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+  pointer-events: none;
+}
+
+.custom-theme .el-input__suffix-inner {
+  pointer-events: all;
+}
+
+.custom-theme .el-input__prefix {
+  position: absolute;
+  height: 100%;
+  left: 5px;
+  top: 0;
+  text-align: center;
+  color: #b4bccc;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+}
+
+.custom-theme .el-input__icon {
+  height: 100%;
+  width: 25px;
+  text-align: center;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+  line-height: 40px;
+}
+
+.custom-theme .el-input__icon:after {
+  content: '';
+  height: 100%;
+  width: 0;
+  display: inline-block;
+  vertical-align: middle;
+}
+
+.custom-theme .el-input__validateIcon {
+  pointer-events: none;
+}
+
+.custom-theme .el-input.is-active .el-input__inner {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__icon {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input--suffix .el-input__inner {
+  padding-right: 30px;
+}
+
+.custom-theme .el-input--prefix .el-input__inner {
+  padding-left: 30px;
+}
+
+.custom-theme .el-input--medium {
+  font-size: 14px;
+}
+
+.custom-theme .el-input--medium .el-input__inner {
+  height: 36px;
+}
+
+.custom-theme .el-input--medium .el-input__icon {
+  line-height: 36px;
+}
+
+.custom-theme .el-input--small {
+  font-size: 13px;
+}
+
+.custom-theme .el-input--small .el-input__inner {
+  height: 32px;
+}
+
+.custom-theme .el-input--small .el-input__icon {
+  line-height: 32px;
+}
+
+.custom-theme .el-input--mini {
+  font-size: 12px;
+}
+
+.custom-theme .el-input--mini .el-input__inner {
+  height: 28px;
+}
+
+.custom-theme .el-input--mini .el-input__icon {
+  line-height: 28px;
+}
+
+.custom-theme .el-input-group {
+  line-height: normal;
+  display: inline-table;
+  width: 100%;
+  border-collapse: separate;
+}
+
+.custom-theme .el-input-group > .el-input__inner {
+  vertical-align: middle;
+  display: table-cell;
+}
+
+.custom-theme .el-input-group__append,
+.custom-theme .el-input-group__prepend {
+  background-color: #f5f7fa;
+  color: #0a76a4;
+  vertical-align: middle;
+  display: table-cell;
+  position: relative;
+  border: 1px solid #d8dce5;
+  border-radius: 4px;
+  padding: 0 20px;
+  width: 1px;
+  white-space: nowrap;
+}
+
+.custom-theme .el-input-group__append:focus,
+.custom-theme .el-input-group__prepend:focus {
+  outline: 0;
+}
+
+.custom-theme .el-input-group__append .el-button,
+.custom-theme .el-input-group__append .el-select,
+.custom-theme .el-input-group__prepend .el-button,
+.custom-theme .el-input-group__prepend .el-select {
+  display: inline-block;
+  margin: -20px;
+}
+
+.custom-theme .el-input-group__append button.el-button,
+.custom-theme .el-input-group__append div.el-select .el-input__inner,
+.custom-theme .el-input-group__append div.el-select:hover .el-input__inner,
+.custom-theme .el-input-group__prepend button.el-button,
+.custom-theme .el-input-group__prepend div.el-select .el-input__inner,
+.custom-theme .el-input-group__prepend div.el-select:hover .el-input__inner {
+  border-color: transparent;
+  background-color: transparent;
+  color: inherit;
+  border-top: 0;
+  border-bottom: 0;
+}
+
+.custom-theme .el-input-group__append .el-button,
+.custom-theme .el-input-group__append .el-input,
+.custom-theme .el-input-group__prepend .el-button,
+.custom-theme .el-input-group__prepend .el-input {
+  font-size: inherit;
+}
+
+.custom-theme .el-input-group__prepend {
+  border-right: 0;
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-input-group__append {
+  border-left: 0;
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-input-group--prepend .el-input__inner {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-input-group--append .el-input__inner {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-textarea {
+  display: inline-block;
+  width: 100%;
+  vertical-align: bottom;
+}
+
+.custom-theme .el-textarea__inner {
+  display: block;
+  resize: vertical;
+  padding: 5px 15px;
+  line-height: 1.5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 100%;
+  font-size: 14px;
+  color: #5a5e66;
+  background-color: #fff;
+  background-image: none;
+  border: 1px solid #d8dce5;
+  border-radius: 4px;
+  -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+}
+
+.custom-theme .el-textarea__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:hover {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:focus {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-scrollbar {
+  overflow: hidden;
+  position: relative;
+}
+
+.custom-theme .el-scrollbar:active > .el-scrollbar__bar,
+.custom-theme .el-scrollbar:focus > .el-scrollbar__bar,
+.custom-theme .el-scrollbar:hover > .el-scrollbar__bar {
+  opacity: 1;
+  -webkit-transition: opacity 340ms ease-out;
+  transition: opacity 340ms ease-out;
+}
+
+.custom-theme .el-scrollbar__wrap {
+  overflow: scroll;
+  height: 100%;
+}
+
+.custom-theme .el-scrollbar__wrap--hidden-default::-webkit-scrollbar {
+  width: 0;
+  height: 0;
+}
+
+.custom-theme .el-scrollbar__thumb {
+  position: relative;
+  display: block;
+  width: 0;
+  height: 0;
+  cursor: pointer;
+  border-radius: inherit;
+  background-color: rgba(135, 141, 153, 0.3);
+  -webkit-transition: 0.3s background-color;
+  transition: 0.3s background-color;
+}
+
+.custom-theme .el-scrollbar__thumb:hover {
+  background-color: rgba(135, 141, 153, 0.5);
+}
+
+.custom-theme .el-scrollbar__bar {
+  position: absolute;
+  right: 2px;
+  bottom: 2px;
+  z-index: 1;
+  border-radius: 4px;
+  opacity: 0;
+  -webkit-transition: opacity 120ms ease-out;
+  transition: opacity 120ms ease-out;
+}
+
+.custom-theme .el-scrollbar__bar.is-vertical {
+  width: 6px;
+  top: 2px;
+}
+
+.custom-theme .el-scrollbar__bar.is-vertical > div {
+  width: 100%;
+}
+
+.custom-theme .el-scrollbar__bar.is-horizontal {
+  height: 6px;
+  left: 2px;
+}
+
+.custom-theme .el-scrollbar__bar.is-horizontal > div {
+  height: 100%;
+}
+
+.custom-theme .el-popper .popper__arrow,
+.custom-theme .el-popper .popper__arrow::after {
+  position: absolute;
+  display: block;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+
+.custom-theme .el-popper .popper__arrow {
+  border-width: 6px;
+  -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
+  filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
+}
+
+.custom-theme .el-popper .popper__arrow::after {
+  content: ' ';
+  border-width: 6px;
+}
+
+.custom-theme .el-popper[x-placement^='top'] {
+  margin-bottom: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='top'] .popper__arrow {
+  bottom: -6px;
+  left: 50%;
+  margin-right: 3px;
+  border-top-color: #e6ebf5;
+  border-bottom-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='top'] .popper__arrow::after {
+  bottom: 1px;
+  margin-left: -6px;
+  border-top-color: #fff;
+  border-bottom-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] {
+  margin-top: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] .popper__arrow {
+  top: -6px;
+  left: 50%;
+  margin-right: 3px;
+  border-top-width: 0;
+  border-bottom-color: #e6ebf5;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] .popper__arrow::after {
+  top: 1px;
+  margin-left: -6px;
+  border-top-width: 0;
+  border-bottom-color: #fff;
+}
+
+.custom-theme .el-popper[x-placement^='right'] {
+  margin-left: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='right'] .popper__arrow {
+  top: 50%;
+  left: -6px;
+  margin-bottom: 3px;
+  border-right-color: #e6ebf5;
+  border-left-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='right'] .popper__arrow::after {
+  bottom: -6px;
+  left: 1px;
+  border-right-color: #fff;
+  border-left-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='left'] {
+  margin-right: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='left'] .popper__arrow {
+  top: 50%;
+  right: -6px;
+  margin-bottom: 3px;
+  border-right-width: 0;
+  border-left-color: #e6ebf5;
+}
+
+.custom-theme .el-popper[x-placement^='left'] .popper__arrow::after {
+  right: 1px;
+  bottom: -6px;
+  margin-left: -6px;
+  border-right-width: 0;
+  border-left-color: #fff;
+}
+
+.custom-theme .el-autocomplete {
+  position: relative;
+  display: inline-block;
+}
+
+.custom-theme .el-autocomplete-suggestion {
+  margin: 5px 0;
+  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  border-radius: 4px;
+}
+
+.custom-theme .el-autocomplete-suggestion.el-popper .popper__arrow {
+  left: 24px !important;
+}
+
+.custom-theme .el-autocomplete-suggestion__wrap {
+  max-height: 280px;
+  padding: 10px 0;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  overflow: auto;
+  background-color: #fff;
+  border: 1px solid #dfe4ed;
+  border-radius: 4px;
+}
+
+.custom-theme .el-autocomplete-suggestion__list {
+  margin: 0;
+  padding: 0;
+}
+
+.custom-theme .el-autocomplete-suggestion li {
+  padding: 0 20px;
+  margin: 0;
+  line-height: 34px;
+  cursor: pointer;
+  color: #5a5e66;
+  font-size: 14px;
+  list-style: none;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.custom-theme .el-autocomplete-suggestion li:hover {
+  background-color: #f5f7fa;
+}
+
+.custom-theme .el-autocomplete-suggestion li.highlighted {
+  background-color: #f5f7fa;
+}
+
+.custom-theme .el-autocomplete-suggestion li.divider {
+  margin-top: 6px;
+  border-top: 1px solid #000;
+}
+
+.custom-theme .el-autocomplete-suggestion li.divider:last-child {
+  margin-bottom: -6px;
+}
+
+.custom-theme .el-autocomplete-suggestion.is-loading li {
+  text-align: center;
+  height: 100px;
+  line-height: 100px;
+  font-size: 20px;
+  color: #999;
+}
+
+.custom-theme .el-autocomplete-suggestion.is-loading li::after {
+  display: inline-block;
+  content: '';
+  height: 100%;
+  vertical-align: middle;
+}
+
+.custom-theme .el-autocomplete-suggestion.is-loading li:hover {
+  background-color: #fff;
+}
+
+.custom-theme .el-autocomplete-suggestion.is-loading .el-icon-loading {
+  vertical-align: middle;
+}
+
+.custom-theme .el-button {
+  display: inline-block;
+  line-height: 1;
+  white-space: nowrap;
+  cursor: pointer;
+  background: #fff;
+  border: 1px solid #d8dce5;
+  border-color: #d8dce5;
+  color: #5a5e66;
+  -webkit-appearance: none;
+  text-align: center;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  outline: 0;
+  margin: 0;
+  -webkit-transition: 0.1s;
+  transition: 0.1s;
+  font-weight: 500;
+  -moz-user-select: none;
+  -webkit-user-select: none;
+  -ms-user-select: none;
+  padding: 12px 20px;
+  font-size: 14px;
+  border-radius: 4px;
+}
+
+.custom-theme .el-button + .el-button {
+  margin-left: 10px;
+}
+
+.custom-theme .el-button.is-round {
+  padding: 12px 20px;
+}
+
+.custom-theme .el-button:focus,
+.custom-theme .el-button:hover {
+  color: #262729;
+  border-color: #bebebf;
+  background-color: #e9e9ea;
+}
+
+.custom-theme .el-button:active {
+  color: #222325;
+  border-color: #222325;
+  outline: 0;
+}
+
+.custom-theme .el-button::-moz-focus-inner {
+  border: 0;
+}
+
+.custom-theme .el-button [class*='el-icon-'] + span {
+  margin-left: 5px;
+}
+
+.custom-theme .el-button.is-plain:focus,
+.custom-theme .el-button.is-plain:hover {
+  background: #fff;
+  border-color: #262729;
+  color: #262729;
+}
+
+.custom-theme .el-button.is-plain:active {
+  background: #fff;
+  border-color: #222325;
+  color: #222325;
+  outline: 0;
+}
+
+.custom-theme .el-button.is-active {
+  color: #222325;
+  border-color: #222325;
+}
+
+.custom-theme .el-button.is-disabled,
+.custom-theme .el-button.is-disabled:focus,
+.custom-theme .el-button.is-disabled:hover {
+  color: #b4bccc;
+  cursor: not-allowed;
+  background-image: none;
+  background-color: #fff;
+  border-color: #e6ebf5;
+}
+
+.custom-theme .el-button.is-disabled.el-button--text {
+  background-color: transparent;
+}
+
+.custom-theme .el-button.is-disabled.is-plain,
+.custom-theme .el-button.is-disabled.is-plain:focus,
+.custom-theme .el-button.is-disabled.is-plain:hover {
+  background-color: #fff;
+  border-color: #e6ebf5;
+  color: #b4bccc;
+}
+
+.custom-theme .el-button.is-loading {
+  position: relative;
+  pointer-events: none;
+}
+
+.custom-theme .el-button.is-loading:before {
+  pointer-events: none;
+  content: '';
+  position: absolute;
+  left: -1px;
+  top: -1px;
+  right: -1px;
+  bottom: -1px;
+  border-radius: inherit;
+  background-color: rgba(255, 255, 255, 0.35);
+}
+
+.custom-theme .el-button.is-round {
+  border-radius: 20px;
+  padding: 12px 23px;
+}
+
+.custom-theme .el-button--primary {
+  color: #fff;
+  background-color: #262729;
+  border-color: #262729;
+}
+
+.custom-theme .el-button--primary:focus,
+.custom-theme .el-button--primary:hover {
+  background: #515254;
+  border-color: #515254;
+  color: #fff;
+}
+
+.custom-theme .el-button--primary:active {
+  background: #222325;
+  border-color: #222325;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--primary.is-active {
+  background: #222325;
+  border-color: #222325;
+  color: #fff;
+}
+
+.custom-theme .el-button--primary.is-disabled,
+.custom-theme .el-button--primary.is-disabled:active,
+.custom-theme .el-button--primary.is-disabled:focus,
+.custom-theme .el-button--primary.is-disabled:hover {
+  color: #fff;
+  background-color: #939394;
+  border-color: #939394;
+}
+
+.custom-theme .el-button--primary.is-plain {
+  color: #262729;
+  background: #e9e9ea;
+  border-color: #a8a9a9;
+}
+
+.custom-theme .el-button--primary.is-plain:focus,
+.custom-theme .el-button--primary.is-plain:hover {
+  background: #262729;
+  border-color: #262729;
+  color: #fff;
+}
+
+.custom-theme .el-button--primary.is-plain:active {
+  background: #222325;
+  border-color: #222325;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--primary.is-plain.is-disabled,
+.custom-theme .el-button--primary.is-plain.is-disabled:active,
+.custom-theme .el-button--primary.is-plain.is-disabled:focus,
+.custom-theme .el-button--primary.is-plain.is-disabled:hover {
+  color: #7d7d7f;
+  background-color: #e9e9ea;
+  border-color: #d4d4d4;
+}
+
+.custom-theme .el-button--success {
+  color: #fff;
+  background-color: #409167;
+  border-color: #409167;
+}
+
+.custom-theme .el-button--success:focus,
+.custom-theme .el-button--success:hover {
+  background: #66a785;
+  border-color: #66a785;
+  color: #fff;
+}
+
+.custom-theme .el-button--success:active {
+  background: #3a835d;
+  border-color: #3a835d;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--success.is-active {
+  background: #3a835d;
+  border-color: #3a835d;
+  color: #fff;
+}
+
+.custom-theme .el-button--success.is-disabled,
+.custom-theme .el-button--success.is-disabled:active,
+.custom-theme .el-button--success.is-disabled:focus,
+.custom-theme .el-button--success.is-disabled:hover {
+  color: #fff;
+  background-color: #a0c8b3;
+  border-color: #a0c8b3;
+}
+
+.custom-theme .el-button--success.is-plain {
+  color: #409167;
+  background: #ecf4f0;
+  border-color: #b3d3c2;
+}
+
+.custom-theme .el-button--success.is-plain:focus,
+.custom-theme .el-button--success.is-plain:hover {
+  background: #409167;
+  border-color: #409167;
+  color: #fff;
+}
+
+.custom-theme .el-button--success.is-plain:active {
+  background: #3a835d;
+  border-color: #3a835d;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--success.is-plain.is-disabled,
+.custom-theme .el-button--success.is-plain.is-disabled:active,
+.custom-theme .el-button--success.is-plain.is-disabled:focus,
+.custom-theme .el-button--success.is-plain.is-disabled:hover {
+  color: #8cbda4;
+  background-color: #ecf4f0;
+  border-color: #d9e9e1;
+}
+
+.custom-theme .el-button--warning {
+  color: #fff;
+  background-color: #9da408;
+  border-color: #9da408;
+}
+
+.custom-theme .el-button--warning:focus,
+.custom-theme .el-button--warning:hover {
+  background: #b1b639;
+  border-color: #b1b639;
+  color: #fff;
+}
+
+.custom-theme .el-button--warning:active {
+  background: #8d9407;
+  border-color: #8d9407;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--warning.is-active {
+  background: #8d9407;
+  border-color: #8d9407;
+  color: #fff;
+}
+
+.custom-theme .el-button--warning.is-disabled,
+.custom-theme .el-button--warning.is-disabled:active,
+.custom-theme .el-button--warning.is-disabled:focus,
+.custom-theme .el-button--warning.is-disabled:hover {
+  color: #fff;
+  background-color: #ced284;
+  border-color: #ced284;
+}
+
+.custom-theme .el-button--warning.is-plain {
+  color: #9da408;
+  background: #f5f6e6;
+  border-color: #d8db9c;
+}
+
+.custom-theme .el-button--warning.is-plain:focus,
+.custom-theme .el-button--warning.is-plain:hover {
+  background: #9da408;
+  border-color: #9da408;
+  color: #fff;
+}
+
+.custom-theme .el-button--warning.is-plain:active {
+  background: #8d9407;
+  border-color: #8d9407;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--warning.is-plain.is-disabled,
+.custom-theme .el-button--warning.is-plain.is-disabled:active,
+.custom-theme .el-button--warning.is-plain.is-disabled:focus,
+.custom-theme .el-button--warning.is-plain.is-disabled:hover {
+  color: #c4c86b;
+  background-color: #f5f6e6;
+  border-color: #ebedce;
+}
+
+.custom-theme .el-button--danger {
+  color: #fff;
+  background-color: #b3450e;
+  border-color: #b3450e;
+}
+
+.custom-theme .el-button--danger:focus,
+.custom-theme .el-button--danger:hover {
+  background: #c26a3e;
+  border-color: #c26a3e;
+  color: #fff;
+}
+
+.custom-theme .el-button--danger:active {
+  background: #a13e0d;
+  border-color: #a13e0d;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--danger.is-active {
+  background: #a13e0d;
+  border-color: #a13e0d;
+  color: #fff;
+}
+
+.custom-theme .el-button--danger.is-disabled,
+.custom-theme .el-button--danger.is-disabled:active,
+.custom-theme .el-button--danger.is-disabled:focus,
+.custom-theme .el-button--danger.is-disabled:hover {
+  color: #fff;
+  background-color: #d9a287;
+  border-color: #d9a287;
+}
+
+.custom-theme .el-button--danger.is-plain {
+  color: #b3450e;
+  background: #f7ece7;
+  border-color: #e1b59f;
+}
+
+.custom-theme .el-button--danger.is-plain:focus,
+.custom-theme .el-button--danger.is-plain:hover {
+  background: #b3450e;
+  border-color: #b3450e;
+  color: #fff;
+}
+
+.custom-theme .el-button--danger.is-plain:active {
+  background: #a13e0d;
+  border-color: #a13e0d;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--danger.is-plain.is-disabled,
+.custom-theme .el-button--danger.is-plain.is-disabled:active,
+.custom-theme .el-button--danger.is-plain.is-disabled:focus,
+.custom-theme .el-button--danger.is-plain.is-disabled:hover {
+  color: #d18f6e;
+  background-color: #f7ece7;
+  border-color: #f0dacf;
+}
+
+.custom-theme .el-button--info {
+  color: #fff;
+  background-color: #0a76a4;
+  border-color: #0a76a4;
+}
+
+.custom-theme .el-button--info:focus,
+.custom-theme .el-button--info:hover {
+  background: #3b91b6;
+  border-color: #3b91b6;
+  color: #fff;
+}
+
+.custom-theme .el-button--info:active {
+  background: #096a94;
+  border-color: #096a94;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--info.is-active {
+  background: #096a94;
+  border-color: #096a94;
+  color: #fff;
+}
+
+.custom-theme .el-button--info.is-disabled,
+.custom-theme .el-button--info.is-disabled:active,
+.custom-theme .el-button--info.is-disabled:focus,
+.custom-theme .el-button--info.is-disabled:hover {
+  color: #fff;
+  background-color: #85bbd2;
+  border-color: #85bbd2;
+}
+
+.custom-theme .el-button--info.is-plain {
+  color: #0a76a4;
+  background: #e7f1f6;
+  border-color: #9dc8db;
+}
+
+.custom-theme .el-button--info.is-plain:focus,
+.custom-theme .el-button--info.is-plain:hover {
+  background: #0a76a4;
+  border-color: #0a76a4;
+  color: #fff;
+}
+
+.custom-theme .el-button--info.is-plain:active {
+  background: #096a94;
+  border-color: #096a94;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--info.is-plain.is-disabled,
+.custom-theme .el-button--info.is-plain.is-disabled:active,
+.custom-theme .el-button--info.is-plain.is-disabled:focus,
+.custom-theme .el-button--info.is-plain.is-disabled:hover {
+  color: #6cadc8;
+  background-color: #e7f1f6;
+  border-color: #cee4ed;
+}
+
+.custom-theme .el-button--medium {
+  padding: 10px 20px;
+  font-size: 14px;
+  border-radius: 4px;
+}
+
+.custom-theme .el-button--medium.is-round {
+  padding: 10px 20px;
+}
+
+.custom-theme .el-button--small {
+  padding: 9px 15px;
+  font-size: 12px;
+  border-radius: 3px;
+}
+
+.custom-theme .el-button--small.is-round {
+  padding: 9px 15px;
+}
+
+.custom-theme .el-button--mini {
+  padding: 7px 15px;
+  font-size: 12px;
+  border-radius: 3px;
+}
+
+.custom-theme .el-button--mini.is-round {
+  padding: 7px 15px;
+}
+
+.custom-theme .el-button--text {
+  border: none;
+  color: #262729;
+  background: 0 0;
+  padding-left: 0;
+  padding-right: 0;
+}
+
+.custom-theme .el-button--text:focus,
+.custom-theme .el-button--text:hover {
+  color: #515254;
+  border-color: transparent;
+  background-color: transparent;
+}
+
+.custom-theme .el-button--text:active {
+  color: #222325;
+  border-color: transparent;
+  background-color: transparent;
+}
+
+.custom-theme .el-button-group {
+  display: inline-block;
+  vertical-align: middle;
+}
+
+.custom-theme .el-button-group::after,
+.custom-theme .el-button-group::before {
+  display: table;
+  content: '';
+}
+
+.custom-theme .el-button-group::after {
+  clear: both;
+}
+
+.custom-theme .el-button-group .el-button {
+  float: left;
+  position: relative;
+}
+
+.custom-theme .el-button-group .el-button + .el-button {
+  margin-left: 0;
+}
+
+.custom-theme .el-button-group .el-button:first-child {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-button-group .el-button:last-child {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-button-group .el-button:not(:first-child):not(:last-child) {
+  border-radius: 0;
+}
+
+.custom-theme .el-button-group .el-button:not(:last-child) {
+  margin-right: -1px;
+}
+
+.custom-theme .el-button-group .el-button:active,
+.custom-theme .el-button-group .el-button:focus,
+.custom-theme .el-button-group .el-button:hover {
+  z-index: 1;
+}
+
+.custom-theme .el-button-group .el-button.is-active {
+  z-index: 1;
+}
+
+.custom-theme .el-button-group .el-button--primary:first-child {
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--primary:last-child {
+  border-left-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--primary:not(:first-child):not(:last-child) {
+  border-left-color: rgba(255, 255, 255, 0.5);
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--success:first-child {
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--success:last-child {
+  border-left-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--success:not(:first-child):not(:last-child) {
+  border-left-color: rgba(255, 255, 255, 0.5);
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--warning:first-child {
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--warning:last-child {
+  border-left-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--warning:not(:first-child):not(:last-child) {
+  border-left-color: rgba(255, 255, 255, 0.5);
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--danger:first-child {
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--danger:last-child {
+  border-left-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--danger:not(:first-child):not(:last-child) {
+  border-left-color: rgba(255, 255, 255, 0.5);
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--info:first-child {
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--info:last-child {
+  border-left-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--info:not(:first-child):not(:last-child) {
+  border-left-color: rgba(255, 255, 255, 0.5);
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-popper .popper__arrow,
+.custom-theme .el-popper .popper__arrow::after {
+  position: absolute;
+  display: block;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+
+.custom-theme .el-popper .popper__arrow {
+  border-width: 6px;
+  -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
+  filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
+}
+
+.custom-theme .el-popper .popper__arrow::after {
+  content: ' ';
+  border-width: 6px;
+}
+
+.custom-theme .el-popper[x-placement^='top'] {
+  margin-bottom: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='top'] .popper__arrow {
+  bottom: -6px;
+  left: 50%;
+  margin-right: 3px;
+  border-top-color: #e6ebf5;
+  border-bottom-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='top'] .popper__arrow::after {
+  bottom: 1px;
+  margin-left: -6px;
+  border-top-color: #fff;
+  border-bottom-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] {
+  margin-top: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] .popper__arrow {
+  top: -6px;
+  left: 50%;
+  margin-right: 3px;
+  border-top-width: 0;
+  border-bottom-color: #e6ebf5;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] .popper__arrow::after {
+  top: 1px;
+  margin-left: -6px;
+  border-top-width: 0;
+  border-bottom-color: #fff;
+}
+
+.custom-theme .el-popper[x-placement^='right'] {
+  margin-left: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='right'] .popper__arrow {
+  top: 50%;
+  left: -6px;
+  margin-bottom: 3px;
+  border-right-color: #e6ebf5;
+  border-left-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='right'] .popper__arrow::after {
+  bottom: -6px;
+  left: 1px;
+  border-right-color: #fff;
+  border-left-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='left'] {
+  margin-right: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='left'] .popper__arrow {
+  top: 50%;
+  right: -6px;
+  margin-bottom: 3px;
+  border-right-width: 0;
+  border-left-color: #e6ebf5;
+}
+
+.custom-theme .el-popper[x-placement^='left'] .popper__arrow::after {
+  right: 1px;
+  bottom: -6px;
+  margin-left: -6px;
+  border-right-width: 0;
+  border-left-color: #fff;
+}
+
+.custom-theme .el-dropdown {
+  display: inline-block;
+  position: relative;
+  color: #5a5e66;
+  font-size: 14px;
+}
+
+.custom-theme .el-dropdown .el-button-group {
+  display: block;
+}
+
+.custom-theme .el-dropdown .el-button-group .el-button {
+  float: none;
+}
+
+.custom-theme .el-dropdown .el-dropdown__caret-button {
+  padding-left: 5px;
+  padding-right: 5px;
+  position: relative;
+  border-left: none;
+}
+
+.custom-theme .el-dropdown .el-dropdown__caret-button::before {
+  content: '';
+  position: absolute;
+  display: block;
+  width: 1px;
+  top: 5px;
+  bottom: 5px;
+  left: 0;
+  background: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-dropdown .el-dropdown__caret-button:hover::before {
+  top: 0;
+  bottom: 0;
+}
+
+.custom-theme .el-dropdown .el-dropdown__caret-button .el-dropdown__icon {
+  padding-left: 0;
+}
+
+.custom-theme .el-dropdown__icon {
+  font-size: 12px;
+  margin: 0 3px;
+}
+
+.custom-theme .el-dropdown-menu {
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: 10;
+  padding: 10px 0;
+  margin: 5px 0;
+  background-color: #fff;
+  border: 1px solid #e6ebf5;
+  border-radius: 4px;
+  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+}
+
+.custom-theme .el-dropdown-menu__item {
+  list-style: none;
+  line-height: 36px;
+  padding: 0 20px;
+  margin: 0;
+  font-size: 14px;
+  color: #5a5e66;
+  cursor: pointer;
+}
+
+.custom-theme .el-dropdown-menu__item:not(.is-disabled):hover {
+  background-color: #e9e9ea;
+  color: #515254;
+}
+
+.custom-theme .el-dropdown-menu__item--divided {
+  position: relative;
+  margin-top: 6px;
+  border-top: 1px solid #e6ebf5;
+}
+
+.custom-theme .el-dropdown-menu__item--divided:before {
+  content: '';
+  height: 6px;
+  display: block;
+  margin: 0 -20px;
+  background-color: #fff;
+}
+
+.custom-theme .el-dropdown-menu__item.is-disabled {
+  cursor: default;
+  color: #bbb;
+  pointer-events: none;
+}
+
+.custom-theme .el-dropdown-menu--medium {
+  padding: 6px 0;
+}
+
+.custom-theme .el-dropdown-menu--medium .el-dropdown-menu__item {
+  line-height: 30px;
+  padding: 0 17px;
+  font-size: 14px;
+}
+
+.custom-theme .el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided {
+  margin-top: 6px;
+}
+
+.custom-theme .el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before {
+  height: 6px;
+  margin: 0 -17px;
+}
+
+.custom-theme .el-dropdown-menu--small {
+  padding: 6px 0;
+}
+
+.custom-theme .el-dropdown-menu--small .el-dropdown-menu__item {
+  line-height: 27px;
+  padding: 0 15px;
+  font-size: 13px;
+}
+
+.custom-theme .el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided {
+  margin-top: 4px;
+}
+
+.custom-theme .el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before {
+  height: 4px;
+  margin: 0 -15px;
+}
+
+.custom-theme .el-dropdown-menu--mini {
+  padding: 3px 0;
+}
+
+.custom-theme .el-dropdown-menu--mini .el-dropdown-menu__item {
+  line-height: 24px;
+  padding: 0 10px;
+  font-size: 12px;
+}
+
+.custom-theme .el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided {
+  margin-top: 3px;
+}
+
+.custom-theme .el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before {
+  height: 3px;
+  margin: 0 -10px;
+}
+
+.custom-theme .el-menu {
+  border-right: solid 1px #e6e6e6;
+  list-style: none;
+  position: relative;
+  margin: 0;
+  padding-left: 0;
+  background-color: #fff;
+}
+
+.custom-theme .el-menu::after,
+.custom-theme .el-menu::before {
+  display: table;
+  content: '';
+}
+
+.custom-theme .el-menu::after {
+  clear: both;
+}
+
+.custom-theme .el-menu li {
+  list-style: none;
+}
+
+.custom-theme .el-menu--horizontal {
+  border-right: none;
+  border-bottom: solid 1px #e6e6e6;
+}
+
+.custom-theme .el-menu--horizontal .el-menu-item {
+  float: left;
+  height: 60px;
+  line-height: 60px;
+  margin: 0;
+  cursor: pointer;
+  position: relative;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  border-bottom: 2px solid transparent;
+  color: #878d99;
+}
+
+.custom-theme .el-menu--horizontal .el-menu-item a,
+.custom-theme .el-menu--horizontal .el-menu-item a:hover {
+  color: inherit;
+}
+
+.custom-theme .el-menu--horizontal .el-menu-item:focus,
+.custom-theme .el-menu--horizontal .el-menu-item:hover {
+  background-color: #fff;
+}
+
+.custom-theme .el-menu--horizontal .el-submenu {
+  float: left;
+  position: relative;
+}
+
+.custom-theme .el-menu--horizontal .el-submenu:focus {
+  outline: 0;
+}
+
+.custom-theme .el-menu--horizontal .el-submenu:focus > .el-submenu__title {
+  color: #2d2f33;
+}
+
+.custom-theme .el-menu--horizontal .el-submenu > .el-menu {
+  position: absolute;
+  top: 65px;
+  left: 0;
+  border: none;
+  padding: 5px 0;
+  background-color: #fff;
+  z-index: 100;
+  min-width: 100%;
+  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  border-radius: 2px;
+}
+
+.custom-theme .el-menu--horizontal .el-submenu .el-submenu__title {
+  height: 60px;
+  line-height: 60px;
+  border-bottom: 2px solid transparent;
+  color: #878d99;
+}
+
+.custom-theme .el-menu--horizontal .el-submenu .el-submenu__title:hover {
+  background-color: #fff;
+}
+
+.custom-theme .el-menu--horizontal .el-submenu .el-menu-item {
+  background-color: #fff;
+  float: none;
+  height: 36px;
+  line-height: 36px;
+  padding: 0 10px;
+}
+
+.custom-theme .el-menu--horizontal .el-submenu .el-submenu__icon-arrow {
+  position: static;
+  vertical-align: middle;
+  margin-left: 8px;
+  margin-top: -3px;
+}
+
+.custom-theme .el-menu--horizontal .el-menu-item:focus,
+.custom-theme .el-menu--horizontal .el-menu-item:hover,
+.custom-theme .el-menu--horizontal .el-submenu__title:hover {
+  outline: 0;
+  color: #2d2f33;
+}
+
+.custom-theme .el-menu--horizontal > .el-menu-item.is-active,
+.custom-theme .el-menu--horizontal > .el-submenu.is-active .el-submenu__title {
+  border-bottom: 2px solid #262729;
+  color: #2d2f33;
+}
+
+.custom-theme .el-menu--collapse {
+  width: 64px;
+}
+
+.custom-theme .el-menu--collapse > .el-menu-item [class^='el-icon-'],
+.custom-theme .el-menu--collapse > .el-submenu > .el-submenu__title [class^='el-icon-'] {
+  margin: 0;
+  vertical-align: middle;
+  width: 24px;
+  text-align: center;
+}
+
+.custom-theme .el-menu--collapse > .el-menu-item .el-submenu__icon-arrow,
+.custom-theme .el-menu--collapse > .el-submenu > .el-submenu__title .el-submenu__icon-arrow {
+  display: none;
+}
+
+.custom-theme .el-menu--collapse > .el-menu-item span,
+.custom-theme .el-menu--collapse > .el-submenu > .el-submenu__title span {
+  height: 0;
+  width: 0;
+  overflow: hidden;
+  visibility: hidden;
+  display: inline-block;
+}
+
+.custom-theme .el-menu--collapse > .el-menu-item.is-active i {
+  color: inherit;
+}
+
+.custom-theme .el-menu--collapse .el-menu .el-submenu {
+  min-width: 200px;
+}
+
+.custom-theme .el-menu--collapse .el-submenu {
+  position: relative;
+}
+
+.custom-theme .el-menu--collapse .el-submenu .el-menu {
+  position: absolute;
+  margin-left: 5px;
+  top: 0;
+  left: 100%;
+  z-index: 10;
+  border: 1px solid #dfe4ed;
+  border-radius: 2px;
+  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+}
+
+.custom-theme .el-menu--collapse .el-submenu.is-opened > .el-submenu__title .el-submenu__icon-arrow {
+  -webkit-transform: none;
+  transform: none;
+}
+
+.custom-theme .el-menu-item {
+  height: 56px;
+  line-height: 56px;
+  font-size: 14px;
+  color: #2d2f33;
+  padding: 0 20px;
+  cursor: pointer;
+  position: relative;
+  -webkit-transition: border-color 0.3s, background-color 0.3s, color 0.3s;
+  transition: border-color 0.3s, background-color 0.3s, color 0.3s;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  white-space: nowrap;
+}
+
+.custom-theme .el-menu-item [class^='el-icon-'] {
+  margin-right: 5px;
+  width: 24px;
+  text-align: center;
+  font-size: 18px;
+}
+
+.custom-theme .el-menu-item * {
+  vertical-align: middle;
+}
+
+.custom-theme .el-menu-item:first-child {
+  margin-left: 0;
+}
+
+.custom-theme .el-menu-item:last-child {
+  margin-right: 0;
+}
+
+.custom-theme .el-menu-item:focus,
+.custom-theme .el-menu-item:hover {
+  outline: 0;
+  background-color: #e9e9ea;
+}
+
+.custom-theme .el-menu-item i {
+  color: #878d99;
+}
+
+.custom-theme .el-menu-item.is-active {
+  color: #262729;
+}
+
+.custom-theme .el-menu-item.is-active i {
+  color: inherit;
+}
+
+.custom-theme .el-submenu__title {
+  position: relative;
+  height: 56px;
+  line-height: 56px;
+  font-size: 14px;
+  color: #2d2f33;
+  padding: 0 20px;
+  cursor: pointer;
+  position: relative;
+  -webkit-transition: border-color 0.3s, background-color 0.3s, color 0.3s;
+  transition: border-color 0.3s, background-color 0.3s, color 0.3s;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  white-space: nowrap;
+}
+
+.custom-theme .el-submenu__title * {
+  vertical-align: middle;
+}
+
+.custom-theme .el-submenu__title i {
+  color: #878d99;
+}
+
+.custom-theme .el-submenu__title:hover {
+  background-color: #e9e9ea;
+}
+
+.custom-theme .el-submenu .el-menu {
+  border: none;
+}
+
+.custom-theme .el-submenu .el-menu-item {
+  height: 50px;
+  line-height: 50px;
+  padding: 0 45px;
+  min-width: 200px;
+}
+
+.custom-theme .el-submenu__icon-arrow {
+  position: absolute;
+  top: 50%;
+  right: 20px;
+  margin-top: -7px;
+  -webkit-transition: -webkit-transform 0.3s;
+  transition: -webkit-transform 0.3s;
+  transition: transform 0.3s;
+  transition: transform 0.3s, -webkit-transform 0.3s;
+  font-size: 12px;
+}
+
+.custom-theme .el-submenu.is-active .el-submenu__title {
+  border-bottom-color: #262729;
+}
+
+.custom-theme .el-submenu.is-opened > .el-submenu__title .el-submenu__icon-arrow {
+  -webkit-transform: rotateZ(180deg);
+  transform: rotateZ(180deg);
+}
+
+.custom-theme .el-submenu [class^='el-icon-'] {
+  vertical-align: middle;
+  margin-right: 5px;
+  width: 24px;
+  text-align: center;
+  font-size: 18px;
+}
+
+.custom-theme .el-menu-item-group > ul {
+  padding: 0;
+}
+
+.custom-theme .el-menu-item-group__title {
+  padding: 7px 0 7px 20px;
+  line-height: normal;
+  font-size: 12px;
+  color: #878d99;
+}
+
+.custom-theme .horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow {
+  -webkit-transition: 0.2s;
+  transition: 0.2s;
+  opacity: 0;
+}
+
+.custom-theme .el-input {
+  position: relative;
+  font-size: 14px;
+  display: inline-block;
+  width: 100%;
+}
+
+.custom-theme .el-input::-webkit-scrollbar {
+  z-index: 11;
+  width: 6px;
+}
+
+.custom-theme .el-input::-webkit-scrollbar:horizontal {
+  height: 6px;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-thumb {
+  border-radius: 5px;
+  width: 6px;
+  background: #b4bccc;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-corner {
+  background: #fff;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-track {
+  background: #fff;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-track-piece {
+  background: #fff;
+  width: 6px;
+}
+
+.custom-theme .el-input__inner {
+  -webkit-appearance: none;
+  background-color: #fff;
+  background-image: none;
+  border-radius: 4px;
+  border: 1px solid #d8dce5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  color: #5a5e66;
+  display: inline-block;
+  font-size: inherit;
+  height: 40px;
+  line-height: 1;
+  outline: 0;
+  padding: 0 15px;
+  -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  width: 100%;
+}
+
+.custom-theme .el-input__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:hover {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:focus {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-input__suffix {
+  position: absolute;
+  height: 100%;
+  right: 5px;
+  top: 0;
+  text-align: center;
+  color: #b4bccc;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+  pointer-events: none;
+}
+
+.custom-theme .el-input__suffix-inner {
+  pointer-events: all;
+}
+
+.custom-theme .el-input__prefix {
+  position: absolute;
+  height: 100%;
+  left: 5px;
+  top: 0;
+  text-align: center;
+  color: #b4bccc;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+}
+
+.custom-theme .el-input__icon {
+  height: 100%;
+  width: 25px;
+  text-align: center;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+  line-height: 40px;
+}
+
+.custom-theme .el-input__icon:after {
+  content: '';
+  height: 100%;
+  width: 0;
+  display: inline-block;
+  vertical-align: middle;
+}
+
+.custom-theme .el-input__validateIcon {
+  pointer-events: none;
+}
+
+.custom-theme .el-input.is-active .el-input__inner {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__icon {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input--suffix .el-input__inner {
+  padding-right: 30px;
+}
+
+.custom-theme .el-input--prefix .el-input__inner {
+  padding-left: 30px;
+}
+
+.custom-theme .el-input--medium {
+  font-size: 14px;
+}
+
+.custom-theme .el-input--medium .el-input__inner {
+  height: 36px;
+}
+
+.custom-theme .el-input--medium .el-input__icon {
+  line-height: 36px;
+}
+
+.custom-theme .el-input--small {
+  font-size: 13px;
+}
+
+.custom-theme .el-input--small .el-input__inner {
+  height: 32px;
+}
+
+.custom-theme .el-input--small .el-input__icon {
+  line-height: 32px;
+}
+
+.custom-theme .el-input--mini {
+  font-size: 12px;
+}
+
+.custom-theme .el-input--mini .el-input__inner {
+  height: 28px;
+}
+
+.custom-theme .el-input--mini .el-input__icon {
+  line-height: 28px;
+}
+
+.custom-theme .el-input-group {
+  line-height: normal;
+  display: inline-table;
+  width: 100%;
+  border-collapse: separate;
+}
+
+.custom-theme .el-input-group > .el-input__inner {
+  vertical-align: middle;
+  display: table-cell;
+}
+
+.custom-theme .el-input-group__append,
+.custom-theme .el-input-group__prepend {
+  background-color: #f5f7fa;
+  color: #0a76a4;
+  vertical-align: middle;
+  display: table-cell;
+  position: relative;
+  border: 1px solid #d8dce5;
+  border-radius: 4px;
+  padding: 0 20px;
+  width: 1px;
+  white-space: nowrap;
+}
+
+.custom-theme .el-input-group__append:focus,
+.custom-theme .el-input-group__prepend:focus {
+  outline: 0;
+}
+
+.custom-theme .el-input-group__append .el-button,
+.custom-theme .el-input-group__append .el-select,
+.custom-theme .el-input-group__prepend .el-button,
+.custom-theme .el-input-group__prepend .el-select {
+  display: inline-block;
+  margin: -20px;
+}
+
+.custom-theme .el-input-group__append button.el-button,
+.custom-theme .el-input-group__append div.el-select .el-input__inner,
+.custom-theme .el-input-group__append div.el-select:hover .el-input__inner,
+.custom-theme .el-input-group__prepend button.el-button,
+.custom-theme .el-input-group__prepend div.el-select .el-input__inner,
+.custom-theme .el-input-group__prepend div.el-select:hover .el-input__inner {
+  border-color: transparent;
+  background-color: transparent;
+  color: inherit;
+  border-top: 0;
+  border-bottom: 0;
+}
+
+.custom-theme .el-input-group__append .el-button,
+.custom-theme .el-input-group__append .el-input,
+.custom-theme .el-input-group__prepend .el-button,
+.custom-theme .el-input-group__prepend .el-input {
+  font-size: inherit;
+}
+
+.custom-theme .el-input-group__prepend {
+  border-right: 0;
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-input-group__append {
+  border-left: 0;
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-input-group--prepend .el-input__inner {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-input-group--append .el-input__inner {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-textarea {
+  display: inline-block;
+  width: 100%;
+  vertical-align: bottom;
+}
+
+.custom-theme .el-textarea__inner {
+  display: block;
+  resize: vertical;
+  padding: 5px 15px;
+  line-height: 1.5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 100%;
+  font-size: 14px;
+  color: #5a5e66;
+  background-color: #fff;
+  background-image: none;
+  border: 1px solid #d8dce5;
+  border-radius: 4px;
+  -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+}
+
+.custom-theme .el-textarea__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:hover {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:focus {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input {
+  position: relative;
+  font-size: 14px;
+  display: inline-block;
+  width: 100%;
+}
+
+.custom-theme .el-input::-webkit-scrollbar {
+  z-index: 11;
+  width: 6px;
+}
+
+.custom-theme .el-input::-webkit-scrollbar:horizontal {
+  height: 6px;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-thumb {
+  border-radius: 5px;
+  width: 6px;
+  background: #b4bccc;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-corner {
+  background: #fff;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-track {
+  background: #fff;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-track-piece {
+  background: #fff;
+  width: 6px;
+}
+
+.custom-theme .el-input__inner {
+  -webkit-appearance: none;
+  background-color: #fff;
+  background-image: none;
+  border-radius: 4px;
+  border: 1px solid #d8dce5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  color: #5a5e66;
+  display: inline-block;
+  font-size: inherit;
+  height: 40px;
+  line-height: 1;
+  outline: 0;
+  padding: 0 15px;
+  -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  width: 100%;
+}
+
+.custom-theme .el-input__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:hover {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:focus {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-input__suffix {
+  position: absolute;
+  height: 100%;
+  right: 5px;
+  top: 0;
+  text-align: center;
+  color: #b4bccc;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+  pointer-events: none;
+}
+
+.custom-theme .el-input__suffix-inner {
+  pointer-events: all;
+}
+
+.custom-theme .el-input__prefix {
+  position: absolute;
+  height: 100%;
+  left: 5px;
+  top: 0;
+  text-align: center;
+  color: #b4bccc;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+}
+
+.custom-theme .el-input__icon {
+  height: 100%;
+  width: 25px;
+  text-align: center;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+  line-height: 40px;
+}
+
+.custom-theme .el-input__icon:after {
+  content: '';
+  height: 100%;
+  width: 0;
+  display: inline-block;
+  vertical-align: middle;
+}
+
+.custom-theme .el-input__validateIcon {
+  pointer-events: none;
+}
+
+.custom-theme .el-input.is-active .el-input__inner {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__icon {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input--suffix .el-input__inner {
+  padding-right: 30px;
+}
+
+.custom-theme .el-input--prefix .el-input__inner {
+  padding-left: 30px;
+}
+
+.custom-theme .el-input--medium {
+  font-size: 14px;
+}
+
+.custom-theme .el-input--medium .el-input__inner {
+  height: 36px;
+}
+
+.custom-theme .el-input--medium .el-input__icon {
+  line-height: 36px;
+}
+
+.custom-theme .el-input--small {
+  font-size: 13px;
+}
+
+.custom-theme .el-input--small .el-input__inner {
+  height: 32px;
+}
+
+.custom-theme .el-input--small .el-input__icon {
+  line-height: 32px;
+}
+
+.custom-theme .el-input--mini {
+  font-size: 12px;
+}
+
+.custom-theme .el-input--mini .el-input__inner {
+  height: 28px;
+}
+
+.custom-theme .el-input--mini .el-input__icon {
+  line-height: 28px;
+}
+
+.custom-theme .el-input-group {
+  line-height: normal;
+  display: inline-table;
+  width: 100%;
+  border-collapse: separate;
+}
+
+.custom-theme .el-input-group > .el-input__inner {
+  vertical-align: middle;
+  display: table-cell;
+}
+
+.custom-theme .el-input-group__append,
+.custom-theme .el-input-group__prepend {
+  background-color: #f5f7fa;
+  color: #0a76a4;
+  vertical-align: middle;
+  display: table-cell;
+  position: relative;
+  border: 1px solid #d8dce5;
+  border-radius: 4px;
+  padding: 0 20px;
+  width: 1px;
+  white-space: nowrap;
+}
+
+.custom-theme .el-input-group__append:focus,
+.custom-theme .el-input-group__prepend:focus {
+  outline: 0;
+}
+
+.custom-theme .el-input-group__append .el-button,
+.custom-theme .el-input-group__append .el-select,
+.custom-theme .el-input-group__prepend .el-button,
+.custom-theme .el-input-group__prepend .el-select {
+  display: inline-block;
+  margin: -20px;
+}
+
+.custom-theme .el-input-group__append button.el-button,
+.custom-theme .el-input-group__append div.el-select .el-input__inner,
+.custom-theme .el-input-group__append div.el-select:hover .el-input__inner,
+.custom-theme .el-input-group__prepend button.el-button,
+.custom-theme .el-input-group__prepend div.el-select .el-input__inner,
+.custom-theme .el-input-group__prepend div.el-select:hover .el-input__inner {
+  border-color: transparent;
+  background-color: transparent;
+  color: inherit;
+  border-top: 0;
+  border-bottom: 0;
+}
+
+.custom-theme .el-input-group__append .el-button,
+.custom-theme .el-input-group__append .el-input,
+.custom-theme .el-input-group__prepend .el-button,
+.custom-theme .el-input-group__prepend .el-input {
+  font-size: inherit;
+}
+
+.custom-theme .el-input-group__prepend {
+  border-right: 0;
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-input-group__append {
+  border-left: 0;
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-input-group--prepend .el-input__inner {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-input-group--append .el-input__inner {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-textarea {
+  display: inline-block;
+  width: 100%;
+  vertical-align: bottom;
+}
+
+.custom-theme .el-textarea__inner {
+  display: block;
+  resize: vertical;
+  padding: 5px 15px;
+  line-height: 1.5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 100%;
+  font-size: 14px;
+  color: #5a5e66;
+  background-color: #fff;
+  background-image: none;
+  border: 1px solid #d8dce5;
+  border-radius: 4px;
+  -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+}
+
+.custom-theme .el-textarea__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:hover {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:focus {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input-number {
+  position: relative;
+  display: inline-block;
+  width: 180px;
+  line-height: 38px;
+}
+
+.custom-theme .el-input-number .el-input {
+  display: block;
+}
+
+.custom-theme .el-input-number .el-input__inner {
+  -webkit-appearance: none;
+  padding-left: 50px;
+  padding-right: 50px;
+  text-align: center;
+}
+
+.custom-theme .el-input-number__decrease,
+.custom-theme .el-input-number__increase {
+  position: absolute;
+  z-index: 1;
+  top: 1px;
+  width: 40px;
+  height: auto;
+  text-align: center;
+  background: #f5f7fa;
+  color: #5a5e66;
+  cursor: pointer;
+  font-size: 13px;
+}
+
+.custom-theme .el-input-number__decrease:hover,
+.custom-theme .el-input-number__increase:hover {
+  color: #262729;
+}
+
+.custom-theme .el-input-number__decrease:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled),
+.custom-theme .el-input-number__increase:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled) {
+  border-color: #262729;
+}
+
+.custom-theme .el-input-number__decrease.is-disabled,
+.custom-theme .el-input-number__increase.is-disabled {
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input-number__increase {
+  right: 1px;
+  border-radius: 0 4px 4px 0;
+  border-left: 1px solid #d8dce5;
+}
+
+.custom-theme .el-input-number__decrease {
+  left: 1px;
+  border-radius: 4px 0 0 4px;
+  border-right: 1px solid #d8dce5;
+}
+
+.custom-theme .el-input-number.is-disabled .el-input-number__decrease,
+.custom-theme .el-input-number.is-disabled .el-input-number__increase {
+  border-color: #dfe4ed;
+  color: #dfe4ed;
+}
+
+.custom-theme .el-input-number.is-disabled .el-input-number__decrease:hover,
+.custom-theme .el-input-number.is-disabled .el-input-number__increase:hover {
+  color: #dfe4ed;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input-number--medium {
+  width: 200px;
+  line-height: 34px;
+}
+
+.custom-theme .el-input-number--medium .el-input-number__decrease,
+.custom-theme .el-input-number--medium .el-input-number__increase {
+  width: 36px;
+  font-size: 14px;
+}
+
+.custom-theme .el-input-number--medium .el-input__inner {
+  padding-left: 43px;
+  padding-right: 43px;
+}
+
+.custom-theme .el-input-number--small {
+  width: 130px;
+  line-height: 30px;
+}
+
+.custom-theme .el-input-number--small .el-input-number__decrease,
+.custom-theme .el-input-number--small .el-input-number__increase {
+  width: 32px;
+  font-size: 13px;
+}
+
+.custom-theme .el-input-number--small .el-input-number__decrease [class*='el-icon'],
+.custom-theme .el-input-number--small .el-input-number__increase [class*='el-icon'] {
+  -webkit-transform: scale(0.9);
+  transform: scale(0.9);
+}
+
+.custom-theme .el-input-number--small .el-input__inner {
+  padding-left: 39px;
+  padding-right: 39px;
+}
+
+.custom-theme .el-input-number--mini {
+  width: 130px;
+  line-height: 26px;
+}
+
+.custom-theme .el-input-number--mini .el-input-number__decrease,
+.custom-theme .el-input-number--mini .el-input-number__increase {
+  width: 28px;
+  font-size: 12px;
+}
+
+.custom-theme .el-input-number--mini .el-input-number__decrease [class*='el-icon'],
+.custom-theme .el-input-number--mini .el-input-number__increase [class*='el-icon'] {
+  -webkit-transform: scale(0.8);
+  transform: scale(0.8);
+}
+
+.custom-theme .el-input-number--mini .el-input__inner {
+  padding-left: 35px;
+  padding-right: 35px;
+}
+
+.custom-theme .el-input-number.is-without-controls .el-input__inner {
+  padding-left: 15px;
+  padding-right: 15px;
+}
+
+.custom-theme .el-input-number.is-controls-right .el-input__inner {
+  padding-left: 15px;
+  padding-right: 50px;
+}
+
+.custom-theme .el-input-number.is-controls-right .el-input-number__decrease,
+.custom-theme .el-input-number.is-controls-right .el-input-number__increase {
+  height: auto;
+  line-height: 19px;
+}
+
+.custom-theme .el-input-number.is-controls-right .el-input-number__decrease [class*='el-icon'],
+.custom-theme .el-input-number.is-controls-right .el-input-number__increase [class*='el-icon'] {
+  -webkit-transform: scale(0.8);
+  transform: scale(0.8);
+}
+
+.custom-theme .el-input-number.is-controls-right .el-input-number__increase {
+  border-radius: 0 4px 0 0;
+  border-bottom: 1px solid #d8dce5;
+}
+
+.custom-theme .el-input-number.is-controls-right .el-input-number__decrease {
+  right: 1px;
+  bottom: 1px;
+  top: auto;
+  left: auto;
+  border-right: none;
+  border-left: 1px solid #d8dce5;
+  border-radius: 0 0 4px 0;
+}
+
+.custom-theme .el-input-number.is-controls-right[class*='medium'] [class*='decrease'],
+.custom-theme .el-input-number.is-controls-right[class*='medium'] [class*='increase'] {
+  line-height: 17px;
+}
+
+.custom-theme .el-input-number.is-controls-right[class*='small'] [class*='decrease'],
+.custom-theme .el-input-number.is-controls-right[class*='small'] [class*='increase'] {
+  line-height: 15px;
+}
+
+.custom-theme .el-input-number.is-controls-right[class*='mini'] [class*='decrease'],
+.custom-theme .el-input-number.is-controls-right[class*='mini'] [class*='increase'] {
+  line-height: 13px;
+}
+
+.custom-theme .el-radio {
+  color: #5a5e66;
+  font-weight: 500;
+  line-height: 1;
+  position: relative;
+  cursor: pointer;
+  display: inline-block;
+  white-space: nowrap;
+  outline: 0;
+  font-size: 14px;
+  -moz-user-select: none;
+  -webkit-user-select: none;
+  -ms-user-select: none;
+}
+
+.custom-theme .el-radio.is-bordered {
+  padding: 10px 20px 10px 10px;
+  border-radius: 4px;
+  border: 1px solid #d8dce5;
+}
+
+.custom-theme .el-radio.is-bordered.is-checked {
+  border-color: #262729;
+}
+
+.custom-theme .el-radio.is-bordered.is-disabled {
+  cursor: not-allowed;
+  border-color: #e6ebf5;
+}
+
+.custom-theme .el-radio.is-bordered + .el-radio.is-bordered {
+  margin-left: 10px;
+}
+
+.custom-theme .el-radio--medium.is-bordered {
+  padding: 8px 20px 8px 10px;
+  border-radius: 4px;
+}
+
+.custom-theme .el-radio--medium.is-bordered .el-radio__label {
+  font-size: 14px;
+}
+
+.custom-theme .el-radio--medium.is-bordered .el-radio__inner {
+  height: 14px;
+  width: 14px;
+}
+
+.custom-theme .el-radio--small.is-bordered {
+  padding: 6px 15px 6px 10px;
+  border-radius: 3px;
+}
+
+.custom-theme .el-radio--small.is-bordered .el-radio__label {
+  font-size: 12px;
+}
+
+.custom-theme .el-radio--small.is-bordered .el-radio__inner {
+  height: 12px;
+  width: 12px;
+}
+
+.custom-theme .el-radio--mini.is-bordered {
+  padding: 4px 15px 4px 10px;
+  border-radius: 3px;
+}
+
+.custom-theme .el-radio--mini.is-bordered .el-radio__label {
+  font-size: 12px;
+}
+
+.custom-theme .el-radio--mini.is-bordered .el-radio__inner {
+  height: 12px;
+  width: 12px;
+}
+
+.custom-theme .el-radio + .el-radio {
+  margin-left: 30px;
+}
+
+.custom-theme .el-radio__input {
+  white-space: nowrap;
+  cursor: pointer;
+  outline: 0;
+  display: inline-block;
+  line-height: 1;
+  position: relative;
+  vertical-align: middle;
+}
+
+.custom-theme .el-radio__input.is-disabled .el-radio__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-radio__input.is-disabled .el-radio__inner::after {
+  cursor: not-allowed;
+  background-color: #f5f7fa;
+}
+
+.custom-theme .el-radio__input.is-disabled .el-radio__inner + .el-radio__label {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-radio__input.is-disabled.is-checked .el-radio__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+}
+
+.custom-theme .el-radio__input.is-disabled.is-checked .el-radio__inner::after {
+  background-color: #b4bccc;
+}
+
+.custom-theme .el-radio__input.is-disabled + span.el-radio__label {
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-radio__input.is-checked .el-radio__inner {
+  border-color: #262729;
+  background: #262729;
+}
+
+.custom-theme .el-radio__input.is-checked .el-radio__inner::after {
+  -webkit-transform: translate(-50%, -50%) scale(1);
+  transform: translate(-50%, -50%) scale(1);
+}
+
+.custom-theme .el-radio__input.is-checked + .el-radio__label {
+  color: #262729;
+}
+
+.custom-theme .el-radio__input.is-focus .el-radio__inner {
+  border-color: #262729;
+}
+
+.custom-theme .el-radio__inner {
+  border: 1px solid #d8dce5;
+  border-radius: 100%;
+  width: 14px;
+  height: 14px;
+  background-color: #fff;
+  position: relative;
+  cursor: pointer;
+  display: inline-block;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-radio__inner:hover {
+  border-color: #262729;
+}
+
+.custom-theme .el-radio__inner::after {
+  width: 4px;
+  height: 4px;
+  border-radius: 100%;
+  background-color: #fff;
+  content: '';
+  position: absolute;
+  left: 50%;
+  top: 50%;
+  -webkit-transform: translate(-50%, -50%) scale(0);
+  transform: translate(-50%, -50%) scale(0);
+  -webkit-transition: -webkit-transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6);
+  transition: -webkit-transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6);
+  transition: transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6);
+  transition: transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6),
+  -webkit-transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6);
+}
+
+.custom-theme .el-radio__original {
+  opacity: 0;
+  outline: 0;
+  position: absolute;
+  z-index: -1;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  margin: 0;
+}
+
+.custom-theme .el-radio:focus:not(.is-focus):not(:active) .el-radio__inner {
+  -webkit-box-shadow: 0 0 2px 2px #262729;
+  box-shadow: 0 0 2px 2px #262729;
+}
+
+.custom-theme .el-radio__label {
+  font-size: 14px;
+  padding-left: 10px;
+}
+
+.custom-theme .el-radio-group {
+  display: inline-block;
+  line-height: 1;
+  vertical-align: middle;
+  font-size: 0;
+}
+
+.custom-theme .el-radio-button {
+  position: relative;
+  display: inline-block;
+  outline: 0;
+}
+
+.custom-theme .el-radio-button__inner {
+  display: inline-block;
+  line-height: 1;
+  white-space: nowrap;
+  vertical-align: middle;
+  background: #fff;
+  border: 1px solid #d8dce5;
+  font-weight: 500;
+  border-left: 0;
+  color: #5a5e66;
+  -webkit-appearance: none;
+  text-align: center;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  outline: 0;
+  margin: 0;
+  position: relative;
+  cursor: pointer;
+  -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+  padding: 12px 20px;
+  font-size: 14px;
+  border-radius: 0;
+}
+
+.custom-theme .el-radio-button__inner.is-round {
+  padding: 12px 20px;
+}
+
+.custom-theme .el-radio-button__inner:hover {
+  color: #262729;
+}
+
+.custom-theme .el-radio-button__inner [class*='el-icon-'] {
+  line-height: 0.9;
+}
+
+.custom-theme .el-radio-button__inner [class*='el-icon-'] + span {
+  margin-left: 5px;
+}
+
+.custom-theme .el-radio-button__orig-radio {
+  opacity: 0;
+  outline: 0;
+  position: absolute;
+  z-index: -1;
+  left: -999px;
+}
+
+.custom-theme .el-radio-button__orig-radio:checked + .el-radio-button__inner {
+  color: #fff;
+  background-color: #262729;
+  border-color: #262729;
+  -webkit-box-shadow: -1px 0 0 0 #262729;
+  box-shadow: -1px 0 0 0 #262729;
+}
+
+.custom-theme .el-radio-button__orig-radio:disabled + .el-radio-button__inner {
+  color: #b4bccc;
+  cursor: not-allowed;
+  background-image: none;
+  background-color: #fff;
+  border-color: #e6ebf5;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+
+.custom-theme .el-radio-button__orig-radio:disabled:checked + .el-radio-button__inner {
+  background-color: #edf2fc;
+}
+
+.custom-theme .el-radio-button:first-child .el-radio-button__inner {
+  border-left: 1px solid #d8dce5;
+  border-radius: 4px 0 0 4px;
+  -webkit-box-shadow: none !important;
+  box-shadow: none !important;
+}
+
+.custom-theme .el-radio-button:last-child .el-radio-button__inner {
+  border-radius: 0 4px 4px 0;
+}
+
+.custom-theme .el-radio-button:first-child:last-child .el-radio-button__inner {
+  border-radius: 4px;
+}
+
+.custom-theme .el-radio-button--medium .el-radio-button__inner {
+  padding: 10px 20px;
+  font-size: 14px;
+  border-radius: 0;
+}
+
+.custom-theme .el-radio-button--medium .el-radio-button__inner.is-round {
+  padding: 10px 20px;
+}
+
+.custom-theme .el-radio-button--small .el-radio-button__inner {
+  padding: 9px 15px;
+  font-size: 12px;
+  border-radius: 0;
+}
+
+.custom-theme .el-radio-button--small .el-radio-button__inner.is-round {
+  padding: 9px 15px;
+}
+
+.custom-theme .el-radio-button--mini .el-radio-button__inner {
+  padding: 7px 15px;
+  font-size: 12px;
+  border-radius: 0;
+}
+
+.custom-theme .el-radio-button--mini .el-radio-button__inner.is-round {
+  padding: 7px 15px;
+}
+
+.custom-theme .el-radio-button:focus:not(.is-focus):not(:active) {
+  -webkit-box-shadow: 0 0 2px 2px #262729;
+  box-shadow: 0 0 2px 2px #262729;
+}
+
+.custom-theme .el-checkbox {
+  color: #5a5e66;
+  font-weight: 500;
+  font-size: 14px;
+  position: relative;
+  cursor: pointer;
+  display: inline-block;
+  white-space: nowrap;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.custom-theme .el-checkbox.is-bordered {
+  padding: 9px 20px 9px 10px;
+  border-radius: 4px;
+  border: 1px solid #d8dce5;
+}
+
+.custom-theme .el-checkbox.is-bordered.is-checked {
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox.is-bordered.is-disabled {
+  border-color: #e6ebf5;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-checkbox.is-bordered + .el-checkbox.is-bordered {
+  margin-left: 10px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--medium {
+  padding: 7px 20px 7px 10px;
+  border-radius: 4px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label {
+  line-height: 17px;
+  font-size: 14px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner {
+  height: 14px;
+  width: 14px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--small {
+  padding: 3px 15px 7px 10px;
+  border-radius: 3px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label {
+  line-height: 15px;
+  font-size: 12px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner {
+  height: 12px;
+  width: 12px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after {
+  height: 6px;
+  width: 2px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--mini {
+  padding: 1px 15px 5px 10px;
+  border-radius: 3px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label {
+  line-height: 12px;
+  font-size: 12px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner {
+  height: 12px;
+  width: 12px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after {
+  height: 6px;
+  width: 2px;
+}
+
+.custom-theme .el-checkbox__input {
+  white-space: nowrap;
+  cursor: pointer;
+  outline: 0;
+  display: inline-block;
+  line-height: 1;
+  position: relative;
+  vertical-align: middle;
+}
+
+.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner {
+  background-color: #edf2fc;
+  border-color: #d8dce5;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner::after {
+  cursor: not-allowed;
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner {
+  background-color: #edf2fc;
+  border-color: #d8dce5;
+}
+
+.custom-theme .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner {
+  background-color: #edf2fc;
+  border-color: #d8dce5;
+}
+
+.custom-theme .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before {
+  background-color: #b4bccc;
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-checkbox__input.is-disabled + span.el-checkbox__label {
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-checkbox__input.is-checked .el-checkbox__inner {
+  background-color: #262729;
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox__input.is-checked .el-checkbox__inner::after {
+  -webkit-transform: rotate(45deg) scaleY(1);
+  transform: rotate(45deg) scaleY(1);
+}
+
+.custom-theme .el-checkbox__input.is-checked + .el-checkbox__label {
+  color: #262729;
+}
+
+.custom-theme .el-checkbox__input.is-focus .el-checkbox__inner {
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox__input.is-indeterminate .el-checkbox__inner {
+  background-color: #262729;
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox__input.is-indeterminate .el-checkbox__inner::before {
+  content: '';
+  position: absolute;
+  display: block;
+  background-color: #fff;
+  height: 2px;
+  -webkit-transform: scale(0.5);
+  transform: scale(0.5);
+  left: 0;
+  right: 0;
+  top: 5px;
+}
+
+.custom-theme .el-checkbox__input.is-indeterminate .el-checkbox__inner::after {
+  display: none;
+}
+
+.custom-theme .el-checkbox__inner {
+  display: inline-block;
+  position: relative;
+  border: 1px solid #d8dce5;
+  border-radius: 2px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 14px;
+  height: 14px;
+  background-color: #fff;
+  z-index: 1;
+  -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46),
+  background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46);
+  transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46),
+  background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46);
+}
+
+.custom-theme .el-checkbox__inner:hover {
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox__inner::after {
+  -webkit-box-sizing: content-box;
+  box-sizing: content-box;
+  content: '';
+  border: 1px solid #fff;
+  border-left: 0;
+  border-top: 0;
+  height: 7px;
+  left: 4px;
+  position: absolute;
+  top: 1px;
+  -webkit-transform: rotate(45deg) scaleY(0);
+  transform: rotate(45deg) scaleY(0);
+  width: 3px;
+  -webkit-transition: -webkit-transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6) 50ms;
+  transition: -webkit-transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6) 50ms;
+  transition: transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6) 50ms;
+  transition: transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6) 50ms,
+  -webkit-transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6) 50ms;
+  -webkit-transform-origin: center;
+  transform-origin: center;
+}
+
+.custom-theme .el-checkbox__original {
+  opacity: 0;
+  outline: 0;
+  position: absolute;
+  margin: 0;
+  width: 0;
+  height: 0;
+  left: -999px;
+}
+
+.custom-theme .el-checkbox__label {
+  display: inline-block;
+  padding-left: 10px;
+  line-height: 19px;
+  font-size: 14px;
+}
+
+.custom-theme .el-checkbox + .el-checkbox {
+  margin-left: 30px;
+}
+
+.custom-theme .el-checkbox-button {
+  position: relative;
+  display: inline-block;
+}
+
+.custom-theme .el-checkbox-button__inner {
+  display: inline-block;
+  line-height: 1;
+  font-weight: 500;
+  white-space: nowrap;
+  vertical-align: middle;
+  cursor: pointer;
+  background: #fff;
+  border: 1px solid #d8dce5;
+  border-left: 0;
+  color: #5a5e66;
+  -webkit-appearance: none;
+  text-align: center;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  outline: 0;
+  margin: 0;
+  position: relative;
+  -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+  -moz-user-select: none;
+  -webkit-user-select: none;
+  -ms-user-select: none;
+  padding: 12px 20px;
+  font-size: 14px;
+  border-radius: 0;
+}
+
+.custom-theme .el-checkbox-button__inner.is-round {
+  padding: 12px 20px;
+}
+
+.custom-theme .el-checkbox-button__inner:hover {
+  color: #262729;
+}
+
+.custom-theme .el-checkbox-button__inner [class*='el-icon-'] {
+  line-height: 0.9;
+}
+
+.custom-theme .el-checkbox-button__inner [class*='el-icon-'] + span {
+  margin-left: 5px;
+}
+
+.custom-theme .el-checkbox-button__original {
+  opacity: 0;
+  outline: 0;
+  position: absolute;
+  margin: 0;
+  left: -999px;
+}
+
+.custom-theme .el-checkbox-button.is-checked .el-checkbox-button__inner {
+  color: #fff;
+  background-color: #262729;
+  border-color: #262729;
+  -webkit-box-shadow: -1px 0 0 0 #7d7d7f;
+  box-shadow: -1px 0 0 0 #7d7d7f;
+}
+
+.custom-theme .el-checkbox-button.is-disabled .el-checkbox-button__inner {
+  color: #b4bccc;
+  cursor: not-allowed;
+  background-image: none;
+  background-color: #fff;
+  border-color: #e6ebf5;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+
+.custom-theme .el-checkbox-button:first-child .el-checkbox-button__inner {
+  border-left: 1px solid #d8dce5;
+  border-radius: 4px 0 0 4px;
+  -webkit-box-shadow: none !important;
+  box-shadow: none !important;
+}
+
+.custom-theme .el-checkbox-button.is-focus .el-checkbox-button__inner {
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox-button:last-child .el-checkbox-button__inner {
+  border-radius: 0 4px 4px 0;
+}
+
+.custom-theme .el-checkbox-button--medium .el-checkbox-button__inner {
+  padding: 10px 20px;
+  font-size: 14px;
+  border-radius: 0;
+}
+
+.custom-theme .el-checkbox-button--medium .el-checkbox-button__inner.is-round {
+  padding: 10px 20px;
+}
+
+.custom-theme .el-checkbox-button--small .el-checkbox-button__inner {
+  padding: 9px 15px;
+  font-size: 12px;
+  border-radius: 0;
+}
+
+.custom-theme .el-checkbox-button--small .el-checkbox-button__inner.is-round {
+  padding: 9px 15px;
+}
+
+.custom-theme .el-checkbox-button--mini .el-checkbox-button__inner {
+  padding: 7px 15px;
+  font-size: 12px;
+  border-radius: 0;
+}
+
+.custom-theme .el-checkbox-button--mini .el-checkbox-button__inner.is-round {
+  padding: 7px 15px;
+}
+
+.custom-theme .el-checkbox-group {
+  font-size: 0;
+}
+
+.custom-theme .el-switch {
+  display: inline-block;
+  position: relative;
+  font-size: 14px;
+  line-height: 20px;
+  height: 20px;
+  vertical-align: middle;
+}
+
+.custom-theme .el-switch.is-disabled .el-switch__core,
+.custom-theme .el-switch.is-disabled .el-switch__label {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-switch__label {
+  -webkit-transition: 0.2s;
+  transition: 0.2s;
+  height: 20px;
+  display: inline-block;
+  font-size: 14px;
+  font-weight: 500;
+  cursor: pointer;
+  vertical-align: middle;
+  color: #2d2f33;
+}
+
+.custom-theme .el-switch__label.is-active {
+  color: #262729;
+}
+
+.custom-theme .el-switch__label--left {
+  margin-right: 10px;
+}
+
+.custom-theme .el-switch__label--right {
+  margin-left: 10px;
+}
+
+.custom-theme .el-switch__label * {
+  line-height: 1;
+  font-size: 14px;
+  display: inline-block;
+}
+
+.custom-theme .el-switch__input {
+  position: absolute;
+  width: 0;
+  height: 0;
+  opacity: 0;
+  margin: 0;
+}
+
+.custom-theme .el-switch__input:focus ~ .el-switch__core {
+  outline: 1px solid #262729;
+}
+
+.custom-theme .el-switch__core {
+  margin: 0;
+  display: inline-block;
+  position: relative;
+  width: 40px;
+  height: 20px;
+  border: 1px solid #d8dce5;
+  outline: 0;
+  border-radius: 10px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  background: #d8dce5;
+  cursor: pointer;
+  -webkit-transition: border-color 0.3s, background-color 0.3s;
+  transition: border-color 0.3s, background-color 0.3s;
+  vertical-align: middle;
+}
+
+.custom-theme .el-switch__core .el-switch__button {
+  position: absolute;
+  top: 1px;
+  left: 1px;
+  border-radius: 100%;
+  -webkit-transition: -webkit-transform 0.3s;
+  transition: -webkit-transform 0.3s;
+  transition: transform 0.3s;
+  transition: transform 0.3s, -webkit-transform 0.3s;
+  width: 16px;
+  height: 16px;
+  background-color: #fff;
+}
+
+.custom-theme .el-switch.is-checked .el-switch__core {
+  border-color: #262729;
+  background-color: #262729;
+}
+
+.custom-theme .el-switch.is-disabled {
+  opacity: 0.6;
+}
+
+.custom-theme .el-switch--wide .el-switch__label.el-switch__label--left span {
+  left: 10px;
+}
+
+.custom-theme .el-switch--wide .el-switch__label.el-switch__label--right span {
+  right: 10px;
+}
+
+.custom-theme .el-switch .label-fade-enter,
+.custom-theme .el-switch .label-fade-leave-active {
+  opacity: 0;
+}
+
+.custom-theme .el-popper .popper__arrow,
+.custom-theme .el-popper .popper__arrow::after {
+  position: absolute;
+  display: block;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+
+.custom-theme .el-popper .popper__arrow {
+  border-width: 6px;
+  -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
+  filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
+}
+
+.custom-theme .el-popper .popper__arrow::after {
+  content: ' ';
+  border-width: 6px;
+}
+
+.custom-theme .el-popper[x-placement^='top'] {
+  margin-bottom: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='top'] .popper__arrow {
+  bottom: -6px;
+  left: 50%;
+  margin-right: 3px;
+  border-top-color: #e6ebf5;
+  border-bottom-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='top'] .popper__arrow::after {
+  bottom: 1px;
+  margin-left: -6px;
+  border-top-color: #fff;
+  border-bottom-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] {
+  margin-top: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] .popper__arrow {
+  top: -6px;
+  left: 50%;
+  margin-right: 3px;
+  border-top-width: 0;
+  border-bottom-color: #e6ebf5;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] .popper__arrow::after {
+  top: 1px;
+  margin-left: -6px;
+  border-top-width: 0;
+  border-bottom-color: #fff;
+}
+
+.custom-theme .el-popper[x-placement^='right'] {
+  margin-left: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='right'] .popper__arrow {
+  top: 50%;
+  left: -6px;
+  margin-bottom: 3px;
+  border-right-color: #e6ebf5;
+  border-left-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='right'] .popper__arrow::after {
+  bottom: -6px;
+  left: 1px;
+  border-right-color: #fff;
+  border-left-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='left'] {
+  margin-right: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='left'] .popper__arrow {
+  top: 50%;
+  right: -6px;
+  margin-bottom: 3px;
+  border-right-width: 0;
+  border-left-color: #e6ebf5;
+}
+
+.custom-theme .el-popper[x-placement^='left'] .popper__arrow::after {
+  right: 1px;
+  bottom: -6px;
+  margin-left: -6px;
+  border-right-width: 0;
+  border-left-color: #fff;
+}
+
+.custom-theme .el-select-dropdown {
+  position: absolute;
+  z-index: 1001;
+  border: solid 1px #dfe4ed;
+  border-radius: 4px;
+  background-color: #fff;
+  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  margin: 5px 0;
+}
+
+.custom-theme .el-select-dropdown.is-multiple .el-select-dropdown__item.selected {
+  color: #262729;
+  background-color: #fff;
+}
+
+.custom-theme .el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover {
+  background-color: #f5f7fa;
+}
+
+.custom-theme .el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after {
+  position: absolute;
+  right: 20px;
+  font-family: element-icons;
+  content: '\E611';
+  font-size: 12px;
+  font-weight: 700;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.custom-theme .el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list {
+  padding: 0;
+}
+
+.custom-theme .el-select-dropdown .popper__arrow {
+  -webkit-transform: translateX(-400%);
+  transform: translateX(-400%);
+}
+
+.custom-theme .el-select-dropdown.is-arrow-fixed .popper__arrow {
+  -webkit-transform: translateX(-200%);
+  transform: translateX(-200%);
+}
+
+.custom-theme .el-select-dropdown__empty {
+  padding: 10px 0;
+  margin: 0;
+  text-align: center;
+  color: #999;
+  font-size: 14px;
+}
+
+.custom-theme .el-select-dropdown__wrap {
+  max-height: 274px;
+}
+
+.custom-theme .el-select-dropdown__list {
+  list-style: none;
+  padding: 6px 0;
+  margin: 0;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-input {
+  position: relative;
+  font-size: 14px;
+  display: inline-block;
+  width: 100%;
+}
+
+.custom-theme .el-input::-webkit-scrollbar {
+  z-index: 11;
+  width: 6px;
+}
+
+.custom-theme .el-input::-webkit-scrollbar:horizontal {
+  height: 6px;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-thumb {
+  border-radius: 5px;
+  width: 6px;
+  background: #b4bccc;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-corner {
+  background: #fff;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-track {
+  background: #fff;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-track-piece {
+  background: #fff;
+  width: 6px;
+}
+
+.custom-theme .el-input__inner {
+  -webkit-appearance: none;
+  background-color: #fff;
+  background-image: none;
+  border-radius: 4px;
+  border: 1px solid #d8dce5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  color: #5a5e66;
+  display: inline-block;
+  font-size: inherit;
+  height: 40px;
+  line-height: 1;
+  outline: 0;
+  padding: 0 15px;
+  -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  width: 100%;
+}
+
+.custom-theme .el-input__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:hover {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:focus {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-input__suffix {
+  position: absolute;
+  height: 100%;
+  right: 5px;
+  top: 0;
+  text-align: center;
+  color: #b4bccc;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+  pointer-events: none;
+}
+
+.custom-theme .el-input__suffix-inner {
+  pointer-events: all;
+}
+
+.custom-theme .el-input__prefix {
+  position: absolute;
+  height: 100%;
+  left: 5px;
+  top: 0;
+  text-align: center;
+  color: #b4bccc;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+}
+
+.custom-theme .el-input__icon {
+  height: 100%;
+  width: 25px;
+  text-align: center;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+  line-height: 40px;
+}
+
+.custom-theme .el-input__icon:after {
+  content: '';
+  height: 100%;
+  width: 0;
+  display: inline-block;
+  vertical-align: middle;
+}
+
+.custom-theme .el-input__validateIcon {
+  pointer-events: none;
+}
+
+.custom-theme .el-input.is-active .el-input__inner {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__icon {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input--suffix .el-input__inner {
+  padding-right: 30px;
+}
+
+.custom-theme .el-input--prefix .el-input__inner {
+  padding-left: 30px;
+}
+
+.custom-theme .el-input--medium {
+  font-size: 14px;
+}
+
+.custom-theme .el-input--medium .el-input__inner {
+  height: 36px;
+}
+
+.custom-theme .el-input--medium .el-input__icon {
+  line-height: 36px;
+}
+
+.custom-theme .el-input--small {
+  font-size: 13px;
+}
+
+.custom-theme .el-input--small .el-input__inner {
+  height: 32px;
+}
+
+.custom-theme .el-input--small .el-input__icon {
+  line-height: 32px;
+}
+
+.custom-theme .el-input--mini {
+  font-size: 12px;
+}
+
+.custom-theme .el-input--mini .el-input__inner {
+  height: 28px;
+}
+
+.custom-theme .el-input--mini .el-input__icon {
+  line-height: 28px;
+}
+
+.custom-theme .el-input-group {
+  line-height: normal;
+  display: inline-table;
+  width: 100%;
+  border-collapse: separate;
+}
+
+.custom-theme .el-input-group > .el-input__inner {
+  vertical-align: middle;
+  display: table-cell;
+}
+
+.custom-theme .el-input-group__append,
+.custom-theme .el-input-group__prepend {
+  background-color: #f5f7fa;
+  color: #0a76a4;
+  vertical-align: middle;
+  display: table-cell;
+  position: relative;
+  border: 1px solid #d8dce5;
+  border-radius: 4px;
+  padding: 0 20px;
+  width: 1px;
+  white-space: nowrap;
+}
+
+.custom-theme .el-input-group__append:focus,
+.custom-theme .el-input-group__prepend:focus {
+  outline: 0;
+}
+
+.custom-theme .el-input-group__append .el-button,
+.custom-theme .el-input-group__append .el-select,
+.custom-theme .el-input-group__prepend .el-button,
+.custom-theme .el-input-group__prepend .el-select {
+  display: inline-block;
+  margin: -20px;
+}
+
+.custom-theme .el-input-group__append button.el-button,
+.custom-theme .el-input-group__append div.el-select .el-input__inner,
+.custom-theme .el-input-group__append div.el-select:hover .el-input__inner,
+.custom-theme .el-input-group__prepend button.el-button,
+.custom-theme .el-input-group__prepend div.el-select .el-input__inner,
+.custom-theme .el-input-group__prepend div.el-select:hover .el-input__inner {
+  border-color: transparent;
+  background-color: transparent;
+  color: inherit;
+  border-top: 0;
+  border-bottom: 0;
+}
+
+.custom-theme .el-input-group__append .el-button,
+.custom-theme .el-input-group__append .el-input,
+.custom-theme .el-input-group__prepend .el-button,
+.custom-theme .el-input-group__prepend .el-input {
+  font-size: inherit;
+}
+
+.custom-theme .el-input-group__prepend {
+  border-right: 0;
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-input-group__append {
+  border-left: 0;
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-input-group--prepend .el-input__inner {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-input-group--append .el-input__inner {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-textarea {
+  display: inline-block;
+  width: 100%;
+  vertical-align: bottom;
+}
+
+.custom-theme .el-textarea__inner {
+  display: block;
+  resize: vertical;
+  padding: 5px 15px;
+  line-height: 1.5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 100%;
+  font-size: 14px;
+  color: #5a5e66;
+  background-color: #fff;
+  background-image: none;
+  border: 1px solid #d8dce5;
+  border-radius: 4px;
+  -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+}
+
+.custom-theme .el-textarea__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:hover {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:focus {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-tag {
+  background-color: rgba(38, 39, 41, 0.1);
+  display: inline-block;
+  padding: 0 10px;
+  height: 32px;
+  line-height: 30px;
+  font-size: 12px;
+  color: #262729;
+  border-radius: 4px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  border: 1px solid rgba(38, 39, 41, 0.2);
+  white-space: nowrap;
+}
+
+.custom-theme .el-tag .el-icon-close {
+  border-radius: 50%;
+  text-align: center;
+  position: relative;
+  cursor: pointer;
+  font-size: 12px;
+  height: 18px;
+  width: 18px;
+  line-height: 18px;
+  vertical-align: middle;
+  top: -1px;
+  right: -5px;
+  color: #262729;
+}
+
+.custom-theme .el-tag .el-icon-close::before {
+  display: block;
+}
+
+.custom-theme .el-tag .el-icon-close:hover {
+  background-color: #262729;
+  color: #fff;
+}
+
+.custom-theme .el-tag--info {
+  background-color: rgba(10, 118, 164, 0.1);
+  border-color: rgba(10, 118, 164, 0.2);
+  color: #0a76a4;
+}
+
+.custom-theme .el-tag--info.is-hit {
+  border-color: #0a76a4;
+}
+
+.custom-theme .el-tag--info .el-tag__close {
+  color: #0a76a4;
+}
+
+.custom-theme .el-tag--info .el-tag__close:hover {
+  background-color: #0a76a4;
+  color: #fff;
+}
+
+.custom-theme .el-tag--success {
+  background-color: rgba(64, 145, 103, 0.1);
+  border-color: rgba(64, 145, 103, 0.2);
+  color: #409167;
+}
+
+.custom-theme .el-tag--success.is-hit {
+  border-color: #409167;
+}
+
+.custom-theme .el-tag--success .el-tag__close {
+  color: #409167;
+}
+
+.custom-theme .el-tag--success .el-tag__close:hover {
+  background-color: #409167;
+  color: #fff;
+}
+
+.custom-theme .el-tag--warning {
+  background-color: rgba(157, 164, 8, 0.1);
+  border-color: rgba(157, 164, 8, 0.2);
+  color: #9da408;
+}
+
+.custom-theme .el-tag--warning.is-hit {
+  border-color: #9da408;
+}
+
+.custom-theme .el-tag--warning .el-tag__close {
+  color: #9da408;
+}
+
+.custom-theme .el-tag--warning .el-tag__close:hover {
+  background-color: #9da408;
+  color: #fff;
+}
+
+.custom-theme .el-tag--danger {
+  background-color: rgba(179, 69, 14, 0.1);
+  border-color: rgba(179, 69, 14, 0.2);
+  color: #b3450e;
+}
+
+.custom-theme .el-tag--danger.is-hit {
+  border-color: #b3450e;
+}
+
+.custom-theme .el-tag--danger .el-tag__close {
+  color: #b3450e;
+}
+
+.custom-theme .el-tag--danger .el-tag__close:hover {
+  background-color: #b3450e;
+  color: #fff;
+}
+
+.custom-theme .el-tag--medium {
+  height: 28px;
+  line-height: 26px;
+}
+
+.custom-theme .el-tag--medium .el-icon-close {
+  -webkit-transform: scale(0.8);
+  transform: scale(0.8);
+}
+
+.custom-theme .el-tag--small {
+  height: 24px;
+  padding: 0 8px;
+  line-height: 22px;
+}
+
+.custom-theme .el-tag--small .el-icon-close {
+  -webkit-transform: scale(0.8);
+  transform: scale(0.8);
+}
+
+.custom-theme .el-tag--mini {
+  height: 20px;
+  padding: 0 5px;
+  line-height: 19px;
+}
+
+.custom-theme .el-tag--mini .el-icon-close {
+  margin-left: -3px;
+  -webkit-transform: scale(0.7);
+  transform: scale(0.7);
+}
+
+.custom-theme .el-select-dropdown__item {
+  font-size: 14px;
+  padding: 0 20px;
+  position: relative;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  color: #5a5e66;
+  height: 34px;
+  line-height: 34px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  cursor: pointer;
+}
+
+.custom-theme .el-select-dropdown__item.is-disabled {
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-select-dropdown__item.is-disabled:hover {
+  background-color: #fff;
+}
+
+.custom-theme .el-select-dropdown__item.hover,
+.custom-theme .el-select-dropdown__item:hover {
+  background-color: #f5f7fa;
+}
+
+.custom-theme .el-select-dropdown__item.selected {
+  color: #262729;
+  font-weight: 700;
+}
+
+.custom-theme .el-select-dropdown__item span {
+  line-height: 34px !important;
+}
+
+.custom-theme .el-select-group {
+  margin: 0;
+  padding: 0;
+}
+
+.custom-theme .el-select-group__wrap {
+  position: relative;
+  list-style: none;
+  margin: 0;
+  padding: 0;
+}
+
+.custom-theme .el-select-group__wrap:not(:last-of-type) {
+  padding-bottom: 24px;
+}
+
+.custom-theme .el-select-group__wrap:not(:last-of-type)::after {
+  content: '';
+  position: absolute;
+  display: block;
+  left: 20px;
+  right: 20px;
+  bottom: 12px;
+  height: 1px;
+  background: #dfe4ed;
+}
+
+.custom-theme .el-select-group__title {
+  padding-left: 20px;
+  font-size: 12px;
+  color: #0a76a4;
+  line-height: 30px;
+}
+
+.custom-theme .el-select-group .el-select-dropdown__item {
+  padding-left: 20px;
+}
+
+.custom-theme .el-scrollbar {
+  overflow: hidden;
+  position: relative;
+}
+
+.custom-theme .el-scrollbar:active > .el-scrollbar__bar,
+.custom-theme .el-scrollbar:focus > .el-scrollbar__bar,
+.custom-theme .el-scrollbar:hover > .el-scrollbar__bar {
+  opacity: 1;
+  -webkit-transition: opacity 340ms ease-out;
+  transition: opacity 340ms ease-out;
+}
+
+.custom-theme .el-scrollbar__wrap {
+  overflow: scroll;
+  height: 100%;
+}
+
+.custom-theme .el-scrollbar__wrap--hidden-default::-webkit-scrollbar {
+  width: 0;
+  height: 0;
+}
+
+.custom-theme .el-scrollbar__thumb {
+  position: relative;
+  display: block;
+  width: 0;
+  height: 0;
+  cursor: pointer;
+  border-radius: inherit;
+  background-color: rgba(135, 141, 153, 0.3);
+  -webkit-transition: 0.3s background-color;
+  transition: 0.3s background-color;
+}
+
+.custom-theme .el-scrollbar__thumb:hover {
+  background-color: rgba(135, 141, 153, 0.5);
+}
+
+.custom-theme .el-scrollbar__bar {
+  position: absolute;
+  right: 2px;
+  bottom: 2px;
+  z-index: 1;
+  border-radius: 4px;
+  opacity: 0;
+  -webkit-transition: opacity 120ms ease-out;
+  transition: opacity 120ms ease-out;
+}
+
+.custom-theme .el-scrollbar__bar.is-vertical {
+  width: 6px;
+  top: 2px;
+}
+
+.custom-theme .el-scrollbar__bar.is-vertical > div {
+  width: 100%;
+}
+
+.custom-theme .el-scrollbar__bar.is-horizontal {
+  height: 6px;
+  left: 2px;
+}
+
+.custom-theme .el-scrollbar__bar.is-horizontal > div {
+  height: 100%;
+}
+
+.custom-theme .el-select {
+  display: inline-block;
+  position: relative;
+}
+
+.custom-theme .el-select:hover .el-input__inner {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-select .el-input__inner {
+  cursor: pointer;
+  padding-right: 35px;
+}
+
+.custom-theme .el-select .el-input__inner:focus {
+  border-color: #262729;
+}
+
+.custom-theme .el-select .el-input .el-select__caret {
+  color: #b4bccc;
+  font-size: 14px;
+  -webkit-transition: -webkit-transform 0.3s;
+  transition: -webkit-transform 0.3s;
+  transition: transform 0.3s;
+  transition: transform 0.3s, -webkit-transform 0.3s;
+  -webkit-transform: rotateZ(180deg);
+  transform: rotateZ(180deg);
+  line-height: 16px;
+  cursor: pointer;
+}
+
+.custom-theme .el-select .el-input .el-select__caret.is-reverse {
+  -webkit-transform: rotateZ(0);
+  transform: rotateZ(0);
+}
+
+.custom-theme .el-select .el-input .el-select__caret.is-show-close {
+  font-size: 14px;
+  text-align: center;
+  -webkit-transform: rotateZ(180deg);
+  transform: rotateZ(180deg);
+  border-radius: 100%;
+  color: #b4bccc;
+  -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+}
+
+.custom-theme .el-select .el-input .el-select__caret.is-show-close:hover {
+  color: #878d99;
+}
+
+.custom-theme .el-select .el-input.is-disabled .el-input__inner {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-select .el-input.is-disabled .el-input__inner:hover {
+  border-color: #dfe4ed;
+}
+
+.custom-theme .el-select > .el-input {
+  display: block;
+}
+
+.custom-theme .el-select__input {
+  border: none;
+  outline: 0;
+  padding: 0;
+  margin-left: 15px;
+  color: #666;
+  font-size: 14px;
+  vertical-align: baseline;
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  appearance: none;
+  height: 28px;
+  background-color: transparent;
+}
+
+.custom-theme .el-select__input.is-mini {
+  height: 14px;
+}
+
+.custom-theme .el-select__close {
+  cursor: pointer;
+  position: absolute;
+  top: 8px;
+  z-index: 1000;
+  right: 25px;
+  color: #b4bccc;
+  line-height: 18px;
+  font-size: 14px;
+}
+
+.custom-theme .el-select__close:hover {
+  color: #878d99;
+}
+
+.custom-theme .el-select__tags {
+  position: absolute;
+  line-height: normal;
+  white-space: normal;
+  z-index: 1;
+  top: 50%;
+  -webkit-transform: translateY(-50%);
+  transform: translateY(-50%);
+}
+
+.custom-theme .el-select .el-tag__close {
+  margin-top: -2px;
+}
+
+.custom-theme .el-select .el-tag {
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  border-color: transparent;
+  margin: 3px 0 3px 6px;
+  background-color: #f0f2f5;
+}
+
+.custom-theme .el-select .el-tag__close.el-icon-close {
+  background-color: #b4bccc;
+  right: -7px;
+  color: #fff;
+}
+
+.custom-theme .el-select .el-tag__close.el-icon-close:hover {
+  background-color: #878d99;
+}
+
+.custom-theme .el-select .el-tag__close.el-icon-close::before {
+  display: block;
+  -webkit-transform: translate(0, 0.5px);
+  transform: translate(0, 0.5px);
+}
+
+.custom-theme .el-select__tag {
+  display: inline-block;
+  height: 24px;
+  line-height: 24px;
+  font-size: 14px;
+  border-radius: 4px;
+  color: #fff;
+  background-color: #262729;
+}
+
+.custom-theme .el-select__tag .el-icon-close {
+  font-size: 14px;
+}
+
+.custom-theme .el-button {
+  display: inline-block;
+  line-height: 1;
+  white-space: nowrap;
+  cursor: pointer;
+  background: #fff;
+  border: 1px solid #d8dce5;
+  border-color: #d8dce5;
+  color: #5a5e66;
+  -webkit-appearance: none;
+  text-align: center;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  outline: 0;
+  margin: 0;
+  -webkit-transition: 0.1s;
+  transition: 0.1s;
+  font-weight: 500;
+  -moz-user-select: none;
+  -webkit-user-select: none;
+  -ms-user-select: none;
+  padding: 12px 20px;
+  font-size: 14px;
+  border-radius: 4px;
+}
+
+.custom-theme .el-button + .el-button {
+  margin-left: 10px;
+}
+
+.custom-theme .el-button.is-round {
+  padding: 12px 20px;
+}
+
+.custom-theme .el-button:focus,
+.custom-theme .el-button:hover {
+  color: #262729;
+  border-color: #bebebf;
+  background-color: #e9e9ea;
+}
+
+.custom-theme .el-button:active {
+  color: #222325;
+  border-color: #222325;
+  outline: 0;
+}
+
+.custom-theme .el-button::-moz-focus-inner {
+  border: 0;
+}
+
+.custom-theme .el-button [class*='el-icon-'] + span {
+  margin-left: 5px;
+}
+
+.custom-theme .el-button.is-plain:focus,
+.custom-theme .el-button.is-plain:hover {
+  background: #fff;
+  border-color: #262729;
+  color: #262729;
+}
+
+.custom-theme .el-button.is-plain:active {
+  background: #fff;
+  border-color: #222325;
+  color: #222325;
+  outline: 0;
+}
+
+.custom-theme .el-button.is-active {
+  color: #222325;
+  border-color: #222325;
+}
+
+.custom-theme .el-button.is-disabled,
+.custom-theme .el-button.is-disabled:focus,
+.custom-theme .el-button.is-disabled:hover {
+  color: #b4bccc;
+  cursor: not-allowed;
+  background-image: none;
+  background-color: #fff;
+  border-color: #e6ebf5;
+}
+
+.custom-theme .el-button.is-disabled.el-button--text {
+  background-color: transparent;
+}
+
+.custom-theme .el-button.is-disabled.is-plain,
+.custom-theme .el-button.is-disabled.is-plain:focus,
+.custom-theme .el-button.is-disabled.is-plain:hover {
+  background-color: #fff;
+  border-color: #e6ebf5;
+  color: #b4bccc;
+}
+
+.custom-theme .el-button.is-loading {
+  position: relative;
+  pointer-events: none;
+}
+
+.custom-theme .el-button.is-loading:before {
+  pointer-events: none;
+  content: '';
+  position: absolute;
+  left: -1px;
+  top: -1px;
+  right: -1px;
+  bottom: -1px;
+  border-radius: inherit;
+  background-color: rgba(255, 255, 255, 0.35);
+}
+
+.custom-theme .el-button.is-round {
+  border-radius: 20px;
+  padding: 12px 23px;
+}
+
+.custom-theme .el-button--primary {
+  color: #fff;
+  background-color: #262729;
+  border-color: #262729;
+}
+
+.custom-theme .el-button--primary:focus,
+.custom-theme .el-button--primary:hover {
+  background: #515254;
+  border-color: #515254;
+  color: #fff;
+}
+
+.custom-theme .el-button--primary:active {
+  background: #222325;
+  border-color: #222325;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--primary.is-active {
+  background: #222325;
+  border-color: #222325;
+  color: #fff;
+}
+
+.custom-theme .el-button--primary.is-disabled,
+.custom-theme .el-button--primary.is-disabled:active,
+.custom-theme .el-button--primary.is-disabled:focus,
+.custom-theme .el-button--primary.is-disabled:hover {
+  color: #fff;
+  background-color: #939394;
+  border-color: #939394;
+}
+
+.custom-theme .el-button--primary.is-plain {
+  color: #262729;
+  background: #e9e9ea;
+  border-color: #a8a9a9;
+}
+
+.custom-theme .el-button--primary.is-plain:focus,
+.custom-theme .el-button--primary.is-plain:hover {
+  background: #262729;
+  border-color: #262729;
+  color: #fff;
+}
+
+.custom-theme .el-button--primary.is-plain:active {
+  background: #222325;
+  border-color: #222325;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--primary.is-plain.is-disabled,
+.custom-theme .el-button--primary.is-plain.is-disabled:active,
+.custom-theme .el-button--primary.is-plain.is-disabled:focus,
+.custom-theme .el-button--primary.is-plain.is-disabled:hover {
+  color: #7d7d7f;
+  background-color: #e9e9ea;
+  border-color: #d4d4d4;
+}
+
+.custom-theme .el-button--success {
+  color: #fff;
+  background-color: #409167;
+  border-color: #409167;
+}
+
+.custom-theme .el-button--success:focus,
+.custom-theme .el-button--success:hover {
+  background: #66a785;
+  border-color: #66a785;
+  color: #fff;
+}
+
+.custom-theme .el-button--success:active {
+  background: #3a835d;
+  border-color: #3a835d;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--success.is-active {
+  background: #3a835d;
+  border-color: #3a835d;
+  color: #fff;
+}
+
+.custom-theme .el-button--success.is-disabled,
+.custom-theme .el-button--success.is-disabled:active,
+.custom-theme .el-button--success.is-disabled:focus,
+.custom-theme .el-button--success.is-disabled:hover {
+  color: #fff;
+  background-color: #a0c8b3;
+  border-color: #a0c8b3;
+}
+
+.custom-theme .el-button--success.is-plain {
+  color: #409167;
+  background: #ecf4f0;
+  border-color: #b3d3c2;
+}
+
+.custom-theme .el-button--success.is-plain:focus,
+.custom-theme .el-button--success.is-plain:hover {
+  background: #409167;
+  border-color: #409167;
+  color: #fff;
+}
+
+.custom-theme .el-button--success.is-plain:active {
+  background: #3a835d;
+  border-color: #3a835d;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--success.is-plain.is-disabled,
+.custom-theme .el-button--success.is-plain.is-disabled:active,
+.custom-theme .el-button--success.is-plain.is-disabled:focus,
+.custom-theme .el-button--success.is-plain.is-disabled:hover {
+  color: #8cbda4;
+  background-color: #ecf4f0;
+  border-color: #d9e9e1;
+}
+
+.custom-theme .el-button--warning {
+  color: #fff;
+  background-color: #9da408;
+  border-color: #9da408;
+}
+
+.custom-theme .el-button--warning:focus,
+.custom-theme .el-button--warning:hover {
+  background: #b1b639;
+  border-color: #b1b639;
+  color: #fff;
+}
+
+.custom-theme .el-button--warning:active {
+  background: #8d9407;
+  border-color: #8d9407;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--warning.is-active {
+  background: #8d9407;
+  border-color: #8d9407;
+  color: #fff;
+}
+
+.custom-theme .el-button--warning.is-disabled,
+.custom-theme .el-button--warning.is-disabled:active,
+.custom-theme .el-button--warning.is-disabled:focus,
+.custom-theme .el-button--warning.is-disabled:hover {
+  color: #fff;
+  background-color: #ced284;
+  border-color: #ced284;
+}
+
+.custom-theme .el-button--warning.is-plain {
+  color: #9da408;
+  background: #f5f6e6;
+  border-color: #d8db9c;
+}
+
+.custom-theme .el-button--warning.is-plain:focus,
+.custom-theme .el-button--warning.is-plain:hover {
+  background: #9da408;
+  border-color: #9da408;
+  color: #fff;
+}
+
+.custom-theme .el-button--warning.is-plain:active {
+  background: #8d9407;
+  border-color: #8d9407;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--warning.is-plain.is-disabled,
+.custom-theme .el-button--warning.is-plain.is-disabled:active,
+.custom-theme .el-button--warning.is-plain.is-disabled:focus,
+.custom-theme .el-button--warning.is-plain.is-disabled:hover {
+  color: #c4c86b;
+  background-color: #f5f6e6;
+  border-color: #ebedce;
+}
+
+.custom-theme .el-button--danger {
+  color: #fff;
+  background-color: #b3450e;
+  border-color: #b3450e;
+}
+
+.custom-theme .el-button--danger:focus,
+.custom-theme .el-button--danger:hover {
+  background: #c26a3e;
+  border-color: #c26a3e;
+  color: #fff;
+}
+
+.custom-theme .el-button--danger:active {
+  background: #a13e0d;
+  border-color: #a13e0d;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--danger.is-active {
+  background: #a13e0d;
+  border-color: #a13e0d;
+  color: #fff;
+}
+
+.custom-theme .el-button--danger.is-disabled,
+.custom-theme .el-button--danger.is-disabled:active,
+.custom-theme .el-button--danger.is-disabled:focus,
+.custom-theme .el-button--danger.is-disabled:hover {
+  color: #fff;
+  background-color: #d9a287;
+  border-color: #d9a287;
+}
+
+.custom-theme .el-button--danger.is-plain {
+  color: #b3450e;
+  background: #f7ece7;
+  border-color: #e1b59f;
+}
+
+.custom-theme .el-button--danger.is-plain:focus,
+.custom-theme .el-button--danger.is-plain:hover {
+  background: #b3450e;
+  border-color: #b3450e;
+  color: #fff;
+}
+
+.custom-theme .el-button--danger.is-plain:active {
+  background: #a13e0d;
+  border-color: #a13e0d;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--danger.is-plain.is-disabled,
+.custom-theme .el-button--danger.is-plain.is-disabled:active,
+.custom-theme .el-button--danger.is-plain.is-disabled:focus,
+.custom-theme .el-button--danger.is-plain.is-disabled:hover {
+  color: #d18f6e;
+  background-color: #f7ece7;
+  border-color: #f0dacf;
+}
+
+.custom-theme .el-button--info {
+  color: #fff;
+  background-color: #0a76a4;
+  border-color: #0a76a4;
+}
+
+.custom-theme .el-button--info:focus,
+.custom-theme .el-button--info:hover {
+  background: #3b91b6;
+  border-color: #3b91b6;
+  color: #fff;
+}
+
+.custom-theme .el-button--info:active {
+  background: #096a94;
+  border-color: #096a94;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--info.is-active {
+  background: #096a94;
+  border-color: #096a94;
+  color: #fff;
+}
+
+.custom-theme .el-button--info.is-disabled,
+.custom-theme .el-button--info.is-disabled:active,
+.custom-theme .el-button--info.is-disabled:focus,
+.custom-theme .el-button--info.is-disabled:hover {
+  color: #fff;
+  background-color: #85bbd2;
+  border-color: #85bbd2;
+}
+
+.custom-theme .el-button--info.is-plain {
+  color: #0a76a4;
+  background: #e7f1f6;
+  border-color: #9dc8db;
+}
+
+.custom-theme .el-button--info.is-plain:focus,
+.custom-theme .el-button--info.is-plain:hover {
+  background: #0a76a4;
+  border-color: #0a76a4;
+  color: #fff;
+}
+
+.custom-theme .el-button--info.is-plain:active {
+  background: #096a94;
+  border-color: #096a94;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--info.is-plain.is-disabled,
+.custom-theme .el-button--info.is-plain.is-disabled:active,
+.custom-theme .el-button--info.is-plain.is-disabled:focus,
+.custom-theme .el-button--info.is-plain.is-disabled:hover {
+  color: #6cadc8;
+  background-color: #e7f1f6;
+  border-color: #cee4ed;
+}
+
+.custom-theme .el-button--medium {
+  padding: 10px 20px;
+  font-size: 14px;
+  border-radius: 4px;
+}
+
+.custom-theme .el-button--medium.is-round {
+  padding: 10px 20px;
+}
+
+.custom-theme .el-button--small {
+  padding: 9px 15px;
+  font-size: 12px;
+  border-radius: 3px;
+}
+
+.custom-theme .el-button--small.is-round {
+  padding: 9px 15px;
+}
+
+.custom-theme .el-button--mini {
+  padding: 7px 15px;
+  font-size: 12px;
+  border-radius: 3px;
+}
+
+.custom-theme .el-button--mini.is-round {
+  padding: 7px 15px;
+}
+
+.custom-theme .el-button--text {
+  border: none;
+  color: #262729;
+  background: 0 0;
+  padding-left: 0;
+  padding-right: 0;
+}
+
+.custom-theme .el-button--text:focus,
+.custom-theme .el-button--text:hover {
+  color: #515254;
+  border-color: transparent;
+  background-color: transparent;
+}
+
+.custom-theme .el-button--text:active {
+  color: #222325;
+  border-color: transparent;
+  background-color: transparent;
+}
+
+.custom-theme .el-button-group {
+  display: inline-block;
+  vertical-align: middle;
+}
+
+.custom-theme .el-button-group::after,
+.custom-theme .el-button-group::before {
+  display: table;
+  content: '';
+}
+
+.custom-theme .el-button-group::after {
+  clear: both;
+}
+
+.custom-theme .el-button-group .el-button {
+  float: left;
+  position: relative;
+}
+
+.custom-theme .el-button-group .el-button + .el-button {
+  margin-left: 0;
+}
+
+.custom-theme .el-button-group .el-button:first-child {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-button-group .el-button:last-child {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-button-group .el-button:not(:first-child):not(:last-child) {
+  border-radius: 0;
+}
+
+.custom-theme .el-button-group .el-button:not(:last-child) {
+  margin-right: -1px;
+}
+
+.custom-theme .el-button-group .el-button:active,
+.custom-theme .el-button-group .el-button:focus,
+.custom-theme .el-button-group .el-button:hover {
+  z-index: 1;
+}
+
+.custom-theme .el-button-group .el-button.is-active {
+  z-index: 1;
+}
+
+.custom-theme .el-button-group .el-button--primary:first-child {
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--primary:last-child {
+  border-left-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--primary:not(:first-child):not(:last-child) {
+  border-left-color: rgba(255, 255, 255, 0.5);
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--success:first-child {
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--success:last-child {
+  border-left-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--success:not(:first-child):not(:last-child) {
+  border-left-color: rgba(255, 255, 255, 0.5);
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--warning:first-child {
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--warning:last-child {
+  border-left-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--warning:not(:first-child):not(:last-child) {
+  border-left-color: rgba(255, 255, 255, 0.5);
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--danger:first-child {
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--danger:last-child {
+  border-left-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--danger:not(:first-child):not(:last-child) {
+  border-left-color: rgba(255, 255, 255, 0.5);
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--info:first-child {
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--info:last-child {
+  border-left-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--info:not(:first-child):not(:last-child) {
+  border-left-color: rgba(255, 255, 255, 0.5);
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-checkbox {
+  color: #5a5e66;
+  font-weight: 500;
+  font-size: 14px;
+  position: relative;
+  cursor: pointer;
+  display: inline-block;
+  white-space: nowrap;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.custom-theme .el-checkbox.is-bordered {
+  padding: 9px 20px 9px 10px;
+  border-radius: 4px;
+  border: 1px solid #d8dce5;
+}
+
+.custom-theme .el-checkbox.is-bordered.is-checked {
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox.is-bordered.is-disabled {
+  border-color: #e6ebf5;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-checkbox.is-bordered + .el-checkbox.is-bordered {
+  margin-left: 10px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--medium {
+  padding: 7px 20px 7px 10px;
+  border-radius: 4px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label {
+  line-height: 17px;
+  font-size: 14px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner {
+  height: 14px;
+  width: 14px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--small {
+  padding: 3px 15px 7px 10px;
+  border-radius: 3px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label {
+  line-height: 15px;
+  font-size: 12px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner {
+  height: 12px;
+  width: 12px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after {
+  height: 6px;
+  width: 2px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--mini {
+  padding: 1px 15px 5px 10px;
+  border-radius: 3px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label {
+  line-height: 12px;
+  font-size: 12px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner {
+  height: 12px;
+  width: 12px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after {
+  height: 6px;
+  width: 2px;
+}
+
+.custom-theme .el-checkbox__input {
+  white-space: nowrap;
+  cursor: pointer;
+  outline: 0;
+  display: inline-block;
+  line-height: 1;
+  position: relative;
+  vertical-align: middle;
+}
+
+.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner {
+  background-color: #edf2fc;
+  border-color: #d8dce5;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner::after {
+  cursor: not-allowed;
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner {
+  background-color: #edf2fc;
+  border-color: #d8dce5;
+}
+
+.custom-theme .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner {
+  background-color: #edf2fc;
+  border-color: #d8dce5;
+}
+
+.custom-theme .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before {
+  background-color: #b4bccc;
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-checkbox__input.is-disabled + span.el-checkbox__label {
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-checkbox__input.is-checked .el-checkbox__inner {
+  background-color: #262729;
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox__input.is-checked .el-checkbox__inner::after {
+  -webkit-transform: rotate(45deg) scaleY(1);
+  transform: rotate(45deg) scaleY(1);
+}
+
+.custom-theme .el-checkbox__input.is-checked + .el-checkbox__label {
+  color: #262729;
+}
+
+.custom-theme .el-checkbox__input.is-focus .el-checkbox__inner {
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox__input.is-indeterminate .el-checkbox__inner {
+  background-color: #262729;
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox__input.is-indeterminate .el-checkbox__inner::before {
+  content: '';
+  position: absolute;
+  display: block;
+  background-color: #fff;
+  height: 2px;
+  -webkit-transform: scale(0.5);
+  transform: scale(0.5);
+  left: 0;
+  right: 0;
+  top: 5px;
+}
+
+.custom-theme .el-checkbox__input.is-indeterminate .el-checkbox__inner::after {
+  display: none;
+}
+
+.custom-theme .el-checkbox__inner {
+  display: inline-block;
+  position: relative;
+  border: 1px solid #d8dce5;
+  border-radius: 2px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 14px;
+  height: 14px;
+  background-color: #fff;
+  z-index: 1;
+  -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46),
+  background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46);
+  transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46),
+  background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46);
+}
+
+.custom-theme .el-checkbox__inner:hover {
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox__inner::after {
+  -webkit-box-sizing: content-box;
+  box-sizing: content-box;
+  content: '';
+  border: 1px solid #fff;
+  border-left: 0;
+  border-top: 0;
+  height: 7px;
+  left: 4px;
+  position: absolute;
+  top: 1px;
+  -webkit-transform: rotate(45deg) scaleY(0);
+  transform: rotate(45deg) scaleY(0);
+  width: 3px;
+  -webkit-transition: -webkit-transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6) 50ms;
+  transition: -webkit-transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6) 50ms;
+  transition: transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6) 50ms;
+  transition: transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6) 50ms,
+  -webkit-transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6) 50ms;
+  -webkit-transform-origin: center;
+  transform-origin: center;
+}
+
+.custom-theme .el-checkbox__original {
+  opacity: 0;
+  outline: 0;
+  position: absolute;
+  margin: 0;
+  width: 0;
+  height: 0;
+  left: -999px;
+}
+
+.custom-theme .el-checkbox__label {
+  display: inline-block;
+  padding-left: 10px;
+  line-height: 19px;
+  font-size: 14px;
+}
+
+.custom-theme .el-checkbox + .el-checkbox {
+  margin-left: 30px;
+}
+
+.custom-theme .el-checkbox-button {
+  position: relative;
+  display: inline-block;
+}
+
+.custom-theme .el-checkbox-button__inner {
+  display: inline-block;
+  line-height: 1;
+  font-weight: 500;
+  white-space: nowrap;
+  vertical-align: middle;
+  cursor: pointer;
+  background: #fff;
+  border: 1px solid #d8dce5;
+  border-left: 0;
+  color: #5a5e66;
+  -webkit-appearance: none;
+  text-align: center;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  outline: 0;
+  margin: 0;
+  position: relative;
+  -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+  -moz-user-select: none;
+  -webkit-user-select: none;
+  -ms-user-select: none;
+  padding: 12px 20px;
+  font-size: 14px;
+  border-radius: 0;
+}
+
+.custom-theme .el-checkbox-button__inner.is-round {
+  padding: 12px 20px;
+}
+
+.custom-theme .el-checkbox-button__inner:hover {
+  color: #262729;
+}
+
+.custom-theme .el-checkbox-button__inner [class*='el-icon-'] {
+  line-height: 0.9;
+}
+
+.custom-theme .el-checkbox-button__inner [class*='el-icon-'] + span {
+  margin-left: 5px;
+}
+
+.custom-theme .el-checkbox-button__original {
+  opacity: 0;
+  outline: 0;
+  position: absolute;
+  margin: 0;
+  left: -999px;
+}
+
+.custom-theme .el-checkbox-button.is-checked .el-checkbox-button__inner {
+  color: #fff;
+  background-color: #262729;
+  border-color: #262729;
+  -webkit-box-shadow: -1px 0 0 0 #7d7d7f;
+  box-shadow: -1px 0 0 0 #7d7d7f;
+}
+
+.custom-theme .el-checkbox-button.is-disabled .el-checkbox-button__inner {
+  color: #b4bccc;
+  cursor: not-allowed;
+  background-image: none;
+  background-color: #fff;
+  border-color: #e6ebf5;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+
+.custom-theme .el-checkbox-button:first-child .el-checkbox-button__inner {
+  border-left: 1px solid #d8dce5;
+  border-radius: 4px 0 0 4px;
+  -webkit-box-shadow: none !important;
+  box-shadow: none !important;
+}
+
+.custom-theme .el-checkbox-button.is-focus .el-checkbox-button__inner {
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox-button:last-child .el-checkbox-button__inner {
+  border-radius: 0 4px 4px 0;
+}
+
+.custom-theme .el-checkbox-button--medium .el-checkbox-button__inner {
+  padding: 10px 20px;
+  font-size: 14px;
+  border-radius: 0;
+}
+
+.custom-theme .el-checkbox-button--medium .el-checkbox-button__inner.is-round {
+  padding: 10px 20px;
+}
+
+.custom-theme .el-checkbox-button--small .el-checkbox-button__inner {
+  padding: 9px 15px;
+  font-size: 12px;
+  border-radius: 0;
+}
+
+.custom-theme .el-checkbox-button--small .el-checkbox-button__inner.is-round {
+  padding: 9px 15px;
+}
+
+.custom-theme .el-checkbox-button--mini .el-checkbox-button__inner {
+  padding: 7px 15px;
+  font-size: 12px;
+  border-radius: 0;
+}
+
+.custom-theme .el-checkbox-button--mini .el-checkbox-button__inner.is-round {
+  padding: 7px 15px;
+}
+
+.custom-theme .el-checkbox-group {
+  font-size: 0;
+}
+
+.custom-theme .el-tag {
+  background-color: rgba(38, 39, 41, 0.1);
+  display: inline-block;
+  padding: 0 10px;
+  height: 32px;
+  line-height: 30px;
+  font-size: 12px;
+  color: #262729;
+  border-radius: 4px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  border: 1px solid rgba(38, 39, 41, 0.2);
+  white-space: nowrap;
+}
+
+.custom-theme .el-tag .el-icon-close {
+  border-radius: 50%;
+  text-align: center;
+  position: relative;
+  cursor: pointer;
+  font-size: 12px;
+  height: 18px;
+  width: 18px;
+  line-height: 18px;
+  vertical-align: middle;
+  top: -1px;
+  right: -5px;
+  color: #262729;
+}
+
+.custom-theme .el-tag .el-icon-close::before {
+  display: block;
+}
+
+.custom-theme .el-tag .el-icon-close:hover {
+  background-color: #262729;
+  color: #fff;
+}
+
+.custom-theme .el-tag--info {
+  background-color: rgba(10, 118, 164, 0.1);
+  border-color: rgba(10, 118, 164, 0.2);
+  color: #0a76a4;
+}
+
+.custom-theme .el-tag--info.is-hit {
+  border-color: #0a76a4;
+}
+
+.custom-theme .el-tag--info .el-tag__close {
+  color: #0a76a4;
+}
+
+.custom-theme .el-tag--info .el-tag__close:hover {
+  background-color: #0a76a4;
+  color: #fff;
+}
+
+.custom-theme .el-tag--success {
+  background-color: rgba(64, 145, 103, 0.1);
+  border-color: rgba(64, 145, 103, 0.2);
+  color: #409167;
+}
+
+.custom-theme .el-tag--success.is-hit {
+  border-color: #409167;
+}
+
+.custom-theme .el-tag--success .el-tag__close {
+  color: #409167;
+}
+
+.custom-theme .el-tag--success .el-tag__close:hover {
+  background-color: #409167;
+  color: #fff;
+}
+
+.custom-theme .el-tag--warning {
+  background-color: rgba(157, 164, 8, 0.1);
+  border-color: rgba(157, 164, 8, 0.2);
+  color: #9da408;
+}
+
+.custom-theme .el-tag--warning.is-hit {
+  border-color: #9da408;
+}
+
+.custom-theme .el-tag--warning .el-tag__close {
+  color: #9da408;
+}
+
+.custom-theme .el-tag--warning .el-tag__close:hover {
+  background-color: #9da408;
+  color: #fff;
+}
+
+.custom-theme .el-tag--danger {
+  background-color: rgba(179, 69, 14, 0.1);
+  border-color: rgba(179, 69, 14, 0.2);
+  color: #b3450e;
+}
+
+.custom-theme .el-tag--danger.is-hit {
+  border-color: #b3450e;
+}
+
+.custom-theme .el-tag--danger .el-tag__close {
+  color: #b3450e;
+}
+
+.custom-theme .el-tag--danger .el-tag__close:hover {
+  background-color: #b3450e;
+  color: #fff;
+}
+
+.custom-theme .el-tag--medium {
+  height: 28px;
+  line-height: 26px;
+}
+
+.custom-theme .el-tag--medium .el-icon-close {
+  -webkit-transform: scale(0.8);
+  transform: scale(0.8);
+}
+
+.custom-theme .el-tag--small {
+  height: 24px;
+  padding: 0 8px;
+  line-height: 22px;
+}
+
+.custom-theme .el-tag--small .el-icon-close {
+  -webkit-transform: scale(0.8);
+  transform: scale(0.8);
+}
+
+.custom-theme .el-tag--mini {
+  height: 20px;
+  padding: 0 5px;
+  line-height: 19px;
+}
+
+.custom-theme .el-tag--mini .el-icon-close {
+  margin-left: -3px;
+  -webkit-transform: scale(0.7);
+  transform: scale(0.7);
+}
+
+.custom-theme .el-table {
+  position: relative;
+  overflow: hidden;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  -webkit-box-flex: 1;
+  -ms-flex: 1;
+  flex: 1;
+  width: 100%;
+  max-width: 100%;
+  background-color: #fff;
+  font-size: 14px;
+  color: #5a5e66;
+}
+
+.custom-theme .el-table__empty-block {
+  position: relative;
+  min-height: 60px;
+  text-align: center;
+  width: 100%;
+  height: 100%;
+}
+
+.custom-theme .el-table__empty-text {
+  position: absolute;
+  left: 50%;
+  top: 50%;
+  -webkit-transform: translate(-50%, -50%);
+  transform: translate(-50%, -50%);
+  color: color(#262729 s(16%) l(44%));
+}
+
+.custom-theme .el-table__expand-column .cell {
+  padding: 0;
+  text-align: center;
+}
+
+.custom-theme .el-table__expand-icon {
+  position: relative;
+  cursor: pointer;
+  color: #666;
+  font-size: 12px;
+  -webkit-transition: -webkit-transform 0.2s ease-in-out;
+  transition: -webkit-transform 0.2s ease-in-out;
+  transition: transform 0.2s ease-in-out;
+  transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;
+  height: 20px;
+}
+
+.custom-theme .el-table__expand-icon--expanded {
+  -webkit-transform: rotate(90deg);
+  transform: rotate(90deg);
+}
+
+.custom-theme .el-table__expand-icon > .el-icon {
+  position: absolute;
+  left: 50%;
+  top: 50%;
+  margin-left: -5px;
+  margin-top: -5px;
+}
+
+.custom-theme .el-table__expanded-cell {
+  background-color: #fff;
+}
+
+.custom-theme .el-table__expanded-cell[class*='cell'] {
+  padding: 20px 50px;
+}
+
+.custom-theme .el-table__expanded-cell:hover {
+  background-color: #f5f7fa !important;
+}
+
+.custom-theme .el-table--fit {
+  border-right: 0;
+  border-bottom: 0;
+}
+
+.custom-theme .el-table--fit td.gutter,
+.custom-theme .el-table--fit th.gutter {
+  border-right-width: 1px;
+}
+
+.custom-theme .el-table thead {
+  color: #878d99;
+  font-weight: 500;
+}
+
+.custom-theme .el-table thead.is-group th {
+  background: #f5f7fa;
+}
+
+.custom-theme .el-table td,
+.custom-theme .el-table th {
+  padding: 12px 0;
+  min-width: 0;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  text-overflow: ellipsis;
+  vertical-align: middle;
+  position: relative;
+}
+
+.custom-theme .el-table td.is-center,
+.custom-theme .el-table th.is-center {
+  text-align: center;
+}
+
+.custom-theme .el-table td.is-left,
+.custom-theme .el-table th.is-left {
+  text-align: left;
+}
+
+.custom-theme .el-table td.is-right,
+.custom-theme .el-table th.is-right {
+  text-align: right;
+}
+
+.custom-theme .el-table td.gutter,
+.custom-theme .el-table th.gutter {
+  width: 15px;
+  border-right-width: 0;
+  border-bottom-width: 0;
+  padding: 0;
+}
+
+.custom-theme .el-table td.is-hidden > *,
+.custom-theme .el-table th.is-hidden > * {
+  visibility: hidden;
+}
+
+.custom-theme .el-table--medium td,
+.custom-theme .el-table--medium th {
+  padding: 10px 0;
+}
+
+.custom-theme .el-table--small {
+  font-size: 12px;
+}
+
+.custom-theme .el-table--small td,
+.custom-theme .el-table--small th {
+  padding: 8px 0;
+}
+
+.custom-theme .el-table--mini {
+  font-size: 12px;
+}
+
+.custom-theme .el-table--mini td,
+.custom-theme .el-table--mini th {
+  padding: 6px 0;
+}
+
+.custom-theme .el-table tr {
+  background-color: #fff;
+}
+
+.custom-theme .el-table tr input[type='checkbox'] {
+  margin: 0;
+}
+
+.custom-theme .el-table td,
+.custom-theme .el-table th.is-leaf {
+  border-bottom: 1px solid #e6ebf5;
+}
+
+.custom-theme .el-table th.is-sortable {
+  cursor: pointer;
+}
+
+.custom-theme .el-table th {
+  white-space: nowrap;
+  overflow: hidden;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-align: left;
+}
+
+.custom-theme .el-table th div {
+  display: inline-block;
+  padding-left: 10px;
+  padding-right: 10px;
+  line-height: 40px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+}
+
+.custom-theme .el-table th > .cell {
+  position: relative;
+  word-wrap: normal;
+  text-overflow: ellipsis;
+  display: inline-block;
+  vertical-align: middle;
+  width: 100%;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-table th > .cell.highlight {
+  color: #262729;
+}
+
+.custom-theme .el-table th.required > div::before {
+  display: inline-block;
+  content: '';
+  width: 8px;
+  height: 8px;
+  border-radius: 50%;
+  background: #ff4d51;
+  margin-right: 5px;
+  vertical-align: middle;
+}
+
+.custom-theme .el-table td div {
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-table td.gutter {
+  width: 0;
+}
+
+.custom-theme .el-table .cell {
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: normal;
+  word-break: break-all;
+  line-height: 23px;
+  padding-left: 10px;
+  padding-right: 10px;
+}
+
+.custom-theme .el-table .cell.el-tooltip {
+  white-space: nowrap;
+  min-width: 50px;
+}
+
+.custom-theme .el-table td:first-child .cell,
+.custom-theme .el-table th:first-child .cell {
+  padding-left: 0;
+}
+
+.custom-theme .el-table--border,
+.custom-theme .el-table--group {
+  border: 1px solid #e6ebf5;
+}
+
+.custom-theme .el-table--border::after,
+.custom-theme .el-table--group::after,
+.custom-theme .el-table::before {
+  content: '';
+  position: absolute;
+  background-color: #e6ebf5;
+  z-index: 1;
+}
+
+.custom-theme .el-table--border::after,
+.custom-theme .el-table--group::after {
+  top: 0;
+  right: 0;
+  width: 1px;
+  height: 100%;
+}
+
+.custom-theme .el-table::before {
+  left: 0;
+  bottom: 0;
+  width: 100%;
+  height: 1px;
+}
+
+.custom-theme .el-table--border {
+  border-right: none;
+  border-bottom: none;
+}
+
+.custom-theme .el-table--border td,
+.custom-theme .el-table--border th {
+  border-right: 1px solid #e6ebf5;
+}
+
+.custom-theme .el-table--border td:first-child .cell,
+.custom-theme .el-table--border th:first-child .cell {
+  padding-left: 10px;
+}
+
+.custom-theme .el-table--border .has-gutter td:nth-last-of-type(2),
+.custom-theme .el-table--border .has-gutter th:nth-last-of-type(2) {
+  border-right: none;
+}
+
+.custom-theme .el-table--border th.gutter:last-of-type {
+  border-bottom: 1px solid #e6ebf5;
+  border-bottom-width: 1px;
+}
+
+.custom-theme .el-table--border th {
+  border-bottom: 1px solid #e6ebf5;
+}
+
+.custom-theme .el-table--hidden {
+  visibility: hidden;
+}
+
+.custom-theme .el-table__fixed,
+.custom-theme .el-table__fixed-right {
+  position: absolute;
+  top: 0;
+  left: 0;
+  overflow-x: hidden;
+  -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.12);
+  box-shadow: 0 0 10px rgba(0, 0, 0, 0.12);
+}
+
+.custom-theme .el-table__fixed-right::before,
+.custom-theme .el-table__fixed::before {
+  content: '';
+  position: absolute;
+  left: 0;
+  bottom: 0;
+  width: 100%;
+  height: 1px;
+  background-color: #e6ebf5;
+  z-index: 4;
+}
+
+.custom-theme .el-table__fixed-right-patch {
+  position: absolute;
+  top: -1px;
+  right: 0;
+  background-color: #fff;
+  border-bottom: 1px solid #e6ebf5;
+}
+
+.custom-theme .el-table__fixed-right {
+  top: 0;
+  left: auto;
+  right: 0;
+}
+
+.custom-theme .el-table__fixed-right .el-table__fixed-body-wrapper,
+.custom-theme .el-table__fixed-right .el-table__fixed-footer-wrapper,
+.custom-theme .el-table__fixed-right .el-table__fixed-header-wrapper {
+  left: auto;
+  right: 0;
+}
+
+.custom-theme .el-table__fixed-header-wrapper {
+  position: absolute;
+  left: 0;
+  top: 0;
+  z-index: 3;
+}
+
+.custom-theme .el-table__fixed-footer-wrapper {
+  position: absolute;
+  left: 0;
+  bottom: 0;
+  z-index: 3;
+}
+
+.custom-theme .el-table__fixed-footer-wrapper tbody td {
+  border-top: 1px solid #e6ebf5;
+  background-color: #f5f7fa;
+  color: #5a5e66;
+}
+
+.custom-theme .el-table__fixed-body-wrapper {
+  position: absolute;
+  left: 0;
+  top: 37px;
+  overflow: hidden;
+  z-index: 3;
+}
+
+.custom-theme .el-table__body-wrapper,
+.custom-theme .el-table__footer-wrapper,
+.custom-theme .el-table__header-wrapper {
+  width: 100%;
+}
+
+.custom-theme .el-table__footer-wrapper {
+  margin-top: -1px;
+}
+
+.custom-theme .el-table__footer-wrapper td {
+  border-top: 1px solid #e6ebf5;
+}
+
+.custom-theme .el-table__body,
+.custom-theme .el-table__footer,
+.custom-theme .el-table__header {
+  table-layout: fixed;
+}
+
+.custom-theme .el-table__footer-wrapper,
+.custom-theme .el-table__header-wrapper {
+  overflow: hidden;
+}
+
+.custom-theme .el-table__footer-wrapper tbody td,
+.custom-theme .el-table__header-wrapper tbody td {
+  background-color: #f5f7fa;
+  color: #5a5e66;
+}
+
+.custom-theme .el-table__body-wrapper {
+  overflow: auto;
+  position: relative;
+}
+
+.custom-theme .el-table__body-wrapper.is-scroll-none ~ .el-table__fixed,
+.custom-theme .el-table__body-wrapper.is-scroll-none ~ .el-table__fixed-right {
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+
+.custom-theme .el-table__body-wrapper.is-scroll-left ~ .el-table__fixed {
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+
+.custom-theme .el-table__body-wrapper.is-scroll-right ~ .el-table__fixed-right {
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+
+.custom-theme .el-table__body-wrapper .el-table--border.is-scroll-right ~ .el-table__fixed-right {
+  border-left: 1px solid #e6ebf5;
+}
+
+.custom-theme .el-table__body-wrapper .el-table--border.is-scroll-left ~ .el-table__fixed {
+  border-right: 1px solid #e6ebf5;
+}
+
+.custom-theme .el-table .caret-wrapper {
+  position: relative;
+  display: -webkit-inline-box;
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
+  height: 13px;
+  width: 24px;
+  cursor: pointer;
+  overflow: initial;
+}
+
+.custom-theme .el-table .sort-caret {
+  color: #0a76a4;
+  width: 14px;
+  overflow: hidden;
+  font-size: 13px;
+}
+
+.custom-theme .el-table .ascending .sort-caret.ascending {
+  color: #262729;
+}
+
+.custom-theme .el-table .descending .sort-caret.descending {
+  color: #262729;
+}
+
+.custom-theme .el-table .hidden-columns {
+  visibility: hidden;
+  position: absolute;
+  z-index: -1;
+}
+
+.custom-theme .el-table--striped .el-table__body tr.el-table__row--striped td {
+  background: #fafafa;
+}
+
+.custom-theme .el-table--striped .el-table__body tr.el-table__row--striped.current-row td {
+  background-color: #e9e9ea;
+}
+
+.custom-theme .el-table__body tr.hover-row.current-row > td,
+.custom-theme .el-table__body tr.hover-row.el-table__row--striped.current-row > td,
+.custom-theme .el-table__body tr.hover-row.el-table__row--striped > td,
+.custom-theme .el-table__body tr.hover-row > td {
+  background-color: #e9e9ea;
+}
+
+.custom-theme .el-table__body tr.current-row > td {
+  background-color: #e9e9ea;
+}
+
+.custom-theme .el-table__column-resize-proxy {
+  position: absolute;
+  left: 200px;
+  top: 0;
+  bottom: 0;
+  width: 0;
+  border-left: 1px solid #e6ebf5;
+  z-index: 10;
+}
+
+.custom-theme .el-table__column-filter-trigger {
+  display: inline-block;
+  line-height: 34px;
+  cursor: pointer;
+}
+
+.custom-theme .el-table__column-filter-trigger i {
+  color: #0a76a4;
+  font-size: 12px;
+  -webkit-transform: scale(0.75);
+  transform: scale(0.75);
+}
+
+.custom-theme .el-table--enable-row-transition .el-table__body td {
+  -webkit-transition: background-color 0.25s ease;
+  transition: background-color 0.25s ease;
+}
+
+.custom-theme .el-table--enable-row-hover .el-table__body tr:hover > td {
+  background-color: #f5f7fa;
+}
+
+.custom-theme .el-table--fluid-height .el-table__fixed,
+.custom-theme .el-table--fluid-height .el-table__fixed-right {
+  bottom: 0;
+  overflow: hidden;
+}
+
+.custom-theme .el-checkbox {
+  color: #5a5e66;
+  font-weight: 500;
+  font-size: 14px;
+  position: relative;
+  cursor: pointer;
+  display: inline-block;
+  white-space: nowrap;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.custom-theme .el-checkbox.is-bordered {
+  padding: 9px 20px 9px 10px;
+  border-radius: 4px;
+  border: 1px solid #d8dce5;
+}
+
+.custom-theme .el-checkbox.is-bordered.is-checked {
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox.is-bordered.is-disabled {
+  border-color: #e6ebf5;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-checkbox.is-bordered + .el-checkbox.is-bordered {
+  margin-left: 10px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--medium {
+  padding: 7px 20px 7px 10px;
+  border-radius: 4px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label {
+  line-height: 17px;
+  font-size: 14px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner {
+  height: 14px;
+  width: 14px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--small {
+  padding: 3px 15px 7px 10px;
+  border-radius: 3px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label {
+  line-height: 15px;
+  font-size: 12px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner {
+  height: 12px;
+  width: 12px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after {
+  height: 6px;
+  width: 2px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--mini {
+  padding: 1px 15px 5px 10px;
+  border-radius: 3px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label {
+  line-height: 12px;
+  font-size: 12px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner {
+  height: 12px;
+  width: 12px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after {
+  height: 6px;
+  width: 2px;
+}
+
+.custom-theme .el-checkbox__input {
+  white-space: nowrap;
+  cursor: pointer;
+  outline: 0;
+  display: inline-block;
+  line-height: 1;
+  position: relative;
+  vertical-align: middle;
+}
+
+.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner {
+  background-color: #edf2fc;
+  border-color: #d8dce5;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner::after {
+  cursor: not-allowed;
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner {
+  background-color: #edf2fc;
+  border-color: #d8dce5;
+}
+
+.custom-theme .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner {
+  background-color: #edf2fc;
+  border-color: #d8dce5;
+}
+
+.custom-theme .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before {
+  background-color: #b4bccc;
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-checkbox__input.is-disabled + span.el-checkbox__label {
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-checkbox__input.is-checked .el-checkbox__inner {
+  background-color: #262729;
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox__input.is-checked .el-checkbox__inner::after {
+  -webkit-transform: rotate(45deg) scaleY(1);
+  transform: rotate(45deg) scaleY(1);
+}
+
+.custom-theme .el-checkbox__input.is-checked + .el-checkbox__label {
+  color: #262729;
+}
+
+.custom-theme .el-checkbox__input.is-focus .el-checkbox__inner {
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox__input.is-indeterminate .el-checkbox__inner {
+  background-color: #262729;
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox__input.is-indeterminate .el-checkbox__inner::before {
+  content: '';
+  position: absolute;
+  display: block;
+  background-color: #fff;
+  height: 2px;
+  -webkit-transform: scale(0.5);
+  transform: scale(0.5);
+  left: 0;
+  right: 0;
+  top: 5px;
+}
+
+.custom-theme .el-checkbox__input.is-indeterminate .el-checkbox__inner::after {
+  display: none;
+}
+
+.custom-theme .el-checkbox__inner {
+  display: inline-block;
+  position: relative;
+  border: 1px solid #d8dce5;
+  border-radius: 2px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 14px;
+  height: 14px;
+  background-color: #fff;
+  z-index: 1;
+  -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46),
+  background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46);
+  transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46),
+  background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46);
+}
+
+.custom-theme .el-checkbox__inner:hover {
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox__inner::after {
+  -webkit-box-sizing: content-box;
+  box-sizing: content-box;
+  content: '';
+  border: 1px solid #fff;
+  border-left: 0;
+  border-top: 0;
+  height: 7px;
+  left: 4px;
+  position: absolute;
+  top: 1px;
+  -webkit-transform: rotate(45deg) scaleY(0);
+  transform: rotate(45deg) scaleY(0);
+  width: 3px;
+  -webkit-transition: -webkit-transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6) 50ms;
+  transition: -webkit-transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6) 50ms;
+  transition: transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6) 50ms;
+  transition: transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6) 50ms,
+  -webkit-transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6) 50ms;
+  -webkit-transform-origin: center;
+  transform-origin: center;
+}
+
+.custom-theme .el-checkbox__original {
+  opacity: 0;
+  outline: 0;
+  position: absolute;
+  margin: 0;
+  width: 0;
+  height: 0;
+  left: -999px;
+}
+
+.custom-theme .el-checkbox__label {
+  display: inline-block;
+  padding-left: 10px;
+  line-height: 19px;
+  font-size: 14px;
+}
+
+.custom-theme .el-checkbox + .el-checkbox {
+  margin-left: 30px;
+}
+
+.custom-theme .el-checkbox-button {
+  position: relative;
+  display: inline-block;
+}
+
+.custom-theme .el-checkbox-button__inner {
+  display: inline-block;
+  line-height: 1;
+  font-weight: 500;
+  white-space: nowrap;
+  vertical-align: middle;
+  cursor: pointer;
+  background: #fff;
+  border: 1px solid #d8dce5;
+  border-left: 0;
+  color: #5a5e66;
+  -webkit-appearance: none;
+  text-align: center;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  outline: 0;
+  margin: 0;
+  position: relative;
+  -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+  -moz-user-select: none;
+  -webkit-user-select: none;
+  -ms-user-select: none;
+  padding: 12px 20px;
+  font-size: 14px;
+  border-radius: 0;
+}
+
+.custom-theme .el-checkbox-button__inner.is-round {
+  padding: 12px 20px;
+}
+
+.custom-theme .el-checkbox-button__inner:hover {
+  color: #262729;
+}
+
+.custom-theme .el-checkbox-button__inner [class*='el-icon-'] {
+  line-height: 0.9;
+}
+
+.custom-theme .el-checkbox-button__inner [class*='el-icon-'] + span {
+  margin-left: 5px;
+}
+
+.custom-theme .el-checkbox-button__original {
+  opacity: 0;
+  outline: 0;
+  position: absolute;
+  margin: 0;
+  left: -999px;
+}
+
+.custom-theme .el-checkbox-button.is-checked .el-checkbox-button__inner {
+  color: #fff;
+  background-color: #262729;
+  border-color: #262729;
+  -webkit-box-shadow: -1px 0 0 0 #7d7d7f;
+  box-shadow: -1px 0 0 0 #7d7d7f;
+}
+
+.custom-theme .el-checkbox-button.is-disabled .el-checkbox-button__inner {
+  color: #b4bccc;
+  cursor: not-allowed;
+  background-image: none;
+  background-color: #fff;
+  border-color: #e6ebf5;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+
+.custom-theme .el-checkbox-button:first-child .el-checkbox-button__inner {
+  border-left: 1px solid #d8dce5;
+  border-radius: 4px 0 0 4px;
+  -webkit-box-shadow: none !important;
+  box-shadow: none !important;
+}
+
+.custom-theme .el-checkbox-button.is-focus .el-checkbox-button__inner {
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox-button:last-child .el-checkbox-button__inner {
+  border-radius: 0 4px 4px 0;
+}
+
+.custom-theme .el-checkbox-button--medium .el-checkbox-button__inner {
+  padding: 10px 20px;
+  font-size: 14px;
+  border-radius: 0;
+}
+
+.custom-theme .el-checkbox-button--medium .el-checkbox-button__inner.is-round {
+  padding: 10px 20px;
+}
+
+.custom-theme .el-checkbox-button--small .el-checkbox-button__inner {
+  padding: 9px 15px;
+  font-size: 12px;
+  border-radius: 0;
+}
+
+.custom-theme .el-checkbox-button--small .el-checkbox-button__inner.is-round {
+  padding: 9px 15px;
+}
+
+.custom-theme .el-checkbox-button--mini .el-checkbox-button__inner {
+  padding: 7px 15px;
+  font-size: 12px;
+  border-radius: 0;
+}
+
+.custom-theme .el-checkbox-button--mini .el-checkbox-button__inner.is-round {
+  padding: 7px 15px;
+}
+
+.custom-theme .el-checkbox-group {
+  font-size: 0;
+}
+
+.custom-theme .el-tag {
+  background-color: rgba(38, 39, 41, 0.1);
+  display: inline-block;
+  padding: 0 10px;
+  height: 32px;
+  line-height: 30px;
+  font-size: 12px;
+  color: #262729;
+  border-radius: 4px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  border: 1px solid rgba(38, 39, 41, 0.2);
+  white-space: nowrap;
+}
+
+.custom-theme .el-tag .el-icon-close {
+  border-radius: 50%;
+  text-align: center;
+  position: relative;
+  cursor: pointer;
+  font-size: 12px;
+  height: 18px;
+  width: 18px;
+  line-height: 18px;
+  vertical-align: middle;
+  top: -1px;
+  right: -5px;
+  color: #262729;
+}
+
+.custom-theme .el-tag .el-icon-close::before {
+  display: block;
+}
+
+.custom-theme .el-tag .el-icon-close:hover {
+  background-color: #262729;
+  color: #fff;
+}
+
+.custom-theme .el-tag--info {
+  background-color: rgba(10, 118, 164, 0.1);
+  border-color: rgba(10, 118, 164, 0.2);
+  color: #0a76a4;
+}
+
+.custom-theme .el-tag--info.is-hit {
+  border-color: #0a76a4;
+}
+
+.custom-theme .el-tag--info .el-tag__close {
+  color: #0a76a4;
+}
+
+.custom-theme .el-tag--info .el-tag__close:hover {
+  background-color: #0a76a4;
+  color: #fff;
+}
+
+.custom-theme .el-tag--success {
+  background-color: rgba(64, 145, 103, 0.1);
+  border-color: rgba(64, 145, 103, 0.2);
+  color: #409167;
+}
+
+.custom-theme .el-tag--success.is-hit {
+  border-color: #409167;
+}
+
+.custom-theme .el-tag--success .el-tag__close {
+  color: #409167;
+}
+
+.custom-theme .el-tag--success .el-tag__close:hover {
+  background-color: #409167;
+  color: #fff;
+}
+
+.custom-theme .el-tag--warning {
+  background-color: rgba(157, 164, 8, 0.1);
+  border-color: rgba(157, 164, 8, 0.2);
+  color: #9da408;
+}
+
+.custom-theme .el-tag--warning.is-hit {
+  border-color: #9da408;
+}
+
+.custom-theme .el-tag--warning .el-tag__close {
+  color: #9da408;
+}
+
+.custom-theme .el-tag--warning .el-tag__close:hover {
+  background-color: #9da408;
+  color: #fff;
+}
+
+.custom-theme .el-tag--danger {
+  background-color: rgba(179, 69, 14, 0.1);
+  border-color: rgba(179, 69, 14, 0.2);
+  color: #b3450e;
+}
+
+.custom-theme .el-tag--danger.is-hit {
+  border-color: #b3450e;
+}
+
+.custom-theme .el-tag--danger .el-tag__close {
+  color: #b3450e;
+}
+
+.custom-theme .el-tag--danger .el-tag__close:hover {
+  background-color: #b3450e;
+  color: #fff;
+}
+
+.custom-theme .el-tag--medium {
+  height: 28px;
+  line-height: 26px;
+}
+
+.custom-theme .el-tag--medium .el-icon-close {
+  -webkit-transform: scale(0.8);
+  transform: scale(0.8);
+}
+
+.custom-theme .el-tag--small {
+  height: 24px;
+  padding: 0 8px;
+  line-height: 22px;
+}
+
+.custom-theme .el-tag--small .el-icon-close {
+  -webkit-transform: scale(0.8);
+  transform: scale(0.8);
+}
+
+.custom-theme .el-tag--mini {
+  height: 20px;
+  padding: 0 5px;
+  line-height: 19px;
+}
+
+.custom-theme .el-tag--mini .el-icon-close {
+  margin-left: -3px;
+  -webkit-transform: scale(0.7);
+  transform: scale(0.7);
+}
+
+.custom-theme .el-table-column--selection .cell {
+  padding-left: 14px;
+  padding-right: 14px;
+}
+
+.custom-theme .el-table-filter {
+  border: solid 1px #e6ebf5;
+  border-radius: 2px;
+  background-color: #fff;
+  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  margin: 2px 0;
+}
+
+.custom-theme .el-table-filter__list {
+  padding: 5px 0;
+  margin: 0;
+  list-style: none;
+  min-width: 100px;
+}
+
+.custom-theme .el-table-filter__list-item {
+  line-height: 36px;
+  padding: 0 10px;
+  cursor: pointer;
+  font-size: 14px;
+}
+
+.custom-theme .el-table-filter__list-item:hover {
+  background-color: #e9e9ea;
+  color: #515254;
+}
+
+.custom-theme .el-table-filter__list-item.is-active {
+  background-color: #262729;
+  color: #fff;
+}
+
+.custom-theme .el-table-filter__content {
+  min-width: 100px;
+}
+
+.custom-theme .el-table-filter__bottom {
+  border-top: 1px solid #e6ebf5;
+  padding: 8px;
+}
+
+.custom-theme .el-table-filter__bottom button {
+  background: 0 0;
+  border: none;
+  color: #5a5e66;
+  cursor: pointer;
+  font-size: 13px;
+  padding: 0 3px;
+}
+
+.custom-theme .el-table-filter__bottom button:hover {
+  color: #262729;
+}
+
+.custom-theme .el-table-filter__bottom button:focus {
+  outline: 0;
+}
+
+.custom-theme .el-table-filter__bottom button.is-disabled {
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-table-filter__checkbox-group {
+  padding: 10px;
+}
+
+.custom-theme .el-table-filter__checkbox-group label.el-checkbox {
+  display: block;
+  margin-bottom: 8px;
+  margin-left: 5px;
+}
+
+.custom-theme .el-table-filter__checkbox-group .el-checkbox:last-child {
+  margin-bottom: 0;
+}
+
+.custom-theme .el-date-table {
+  font-size: 12px;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.custom-theme .el-date-table.is-week-mode .el-date-table__row:hover div {
+  background-color: #edf2fc;
+}
+
+.custom-theme .el-date-table.is-week-mode .el-date-table__row:hover td.available:hover {
+  color: #5a5e66;
+}
+
+.custom-theme .el-date-table.is-week-mode .el-date-table__row:hover td:first-child div {
+  margin-left: 5px;
+  border-top-left-radius: 15px;
+  border-bottom-left-radius: 15px;
+}
+
+.custom-theme .el-date-table.is-week-mode .el-date-table__row:hover td:last-child div {
+  margin-right: 5px;
+  border-top-right-radius: 15px;
+  border-bottom-right-radius: 15px;
+}
+
+.custom-theme .el-date-table.is-week-mode .el-date-table__row.current div {
+  background-color: #edf2fc;
+}
+
+.custom-theme .el-date-table td {
+  width: 32px;
+  height: 30px;
+  padding: 4px 0;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  text-align: center;
+  cursor: pointer;
+  position: relative;
+}
+
+.custom-theme .el-date-table td div {
+  height: 30px;
+  padding: 3px 0;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-date-table td span {
+  width: 24px;
+  height: 24px;
+  display: block;
+  margin: 0 auto;
+  line-height: 24px;
+  position: absolute;
+  left: 50%;
+  -webkit-transform: translateX(-50%);
+  transform: translateX(-50%);
+  border-radius: 50%;
+}
+
+.custom-theme .el-date-table td.next-month,
+.custom-theme .el-date-table td.prev-month {
+  color: #b4bccc;
+}
+
+.custom-theme .el-date-table td.today {
+  position: relative;
+}
+
+.custom-theme .el-date-table td.today span {
+  color: #262729;
+}
+
+.custom-theme .el-date-table td.today.end-date span,
+.custom-theme .el-date-table td.today.start-date span {
+  color: #fff;
+}
+
+.custom-theme .el-date-table td.available:hover {
+  color: #262729;
+}
+
+.custom-theme .el-date-table td.in-range div {
+  background-color: #edf2fc;
+}
+
+.custom-theme .el-date-table td.in-range div:hover {
+  background-color: #edf2fc;
+}
+
+.custom-theme .el-date-table td.current:not(.disabled) span {
+  color: #fff;
+  background-color: #262729;
+}
+
+.custom-theme .el-date-table td.end-date div,
+.custom-theme .el-date-table td.start-date div {
+  color: #fff;
+}
+
+.custom-theme .el-date-table td.end-date span,
+.custom-theme .el-date-table td.start-date span {
+  background-color: #262729;
+}
+
+.custom-theme .el-date-table td.start-date div {
+  margin-left: 5px;
+  border-top-left-radius: 15px;
+  border-bottom-left-radius: 15px;
+}
+
+.custom-theme .el-date-table td.end-date div {
+  margin-right: 5px;
+  border-top-right-radius: 15px;
+  border-bottom-right-radius: 15px;
+}
+
+.custom-theme .el-date-table td.disabled div {
+  background-color: #f5f7fa;
+  opacity: 1;
+  cursor: not-allowed;
+  color: #b4bccc;
+}
+
+.custom-theme .el-date-table td.week {
+  font-size: 80%;
+  color: #5a5e66;
+}
+
+.custom-theme .el-date-table th {
+  padding: 5px;
+  color: #5a5e66;
+  font-weight: 400;
+  border-bottom: solid 1px #e6ebf5;
+}
+
+.custom-theme .el-month-table {
+  font-size: 12px;
+  margin: -1px;
+  border-collapse: collapse;
+}
+
+.custom-theme .el-month-table td {
+  text-align: center;
+  padding: 20px 3px;
+  cursor: pointer;
+}
+
+.custom-theme .el-month-table td.disabled .cell {
+  background-color: #f5f7fa;
+  cursor: not-allowed;
+  color: #b4bccc;
+}
+
+.custom-theme .el-month-table td.disabled .cell:hover {
+  color: #b4bccc;
+}
+
+.custom-theme .el-month-table td .cell {
+  width: 48px;
+  height: 32px;
+  display: block;
+  line-height: 32px;
+  color: #5a5e66;
+  margin: 0 auto;
+}
+
+.custom-theme .el-month-table td .cell:hover {
+  color: #262729;
+}
+
+.custom-theme .el-month-table td.current:not(.disabled) .cell {
+  color: #262729;
+}
+
+.custom-theme .el-year-table {
+  font-size: 12px;
+  margin: -1px;
+  border-collapse: collapse;
+}
+
+.custom-theme .el-year-table .el-icon {
+  color: #2d2f33;
+}
+
+.custom-theme .el-year-table td {
+  text-align: center;
+  padding: 20px 3px;
+  cursor: pointer;
+}
+
+.custom-theme .el-year-table td.disabled .cell {
+  background-color: #f5f7fa;
+  cursor: not-allowed;
+  color: #b4bccc;
+}
+
+.custom-theme .el-year-table td.disabled .cell:hover {
+  color: #b4bccc;
+}
+
+.custom-theme .el-year-table td .cell {
+  width: 48px;
+  height: 32px;
+  display: block;
+  line-height: 32px;
+  color: #5a5e66;
+  margin: 0 auto;
+}
+
+.custom-theme .el-year-table td .cell:hover {
+  color: #262729;
+}
+
+.custom-theme .el-year-table td.current:not(.disabled) .cell {
+  color: #262729;
+}
+
+.custom-theme .el-time-spinner.has-seconds .el-time-spinner__wrapper {
+  width: 33.3%;
+}
+
+.custom-theme .el-time-spinner.has-seconds .el-time-spinner__wrapper:nth-child(2) {
+  margin-left: 1%;
+}
+
+.custom-theme .el-time-spinner__wrapper {
+  max-height: 190px;
+  overflow: auto;
+  display: inline-block;
+  width: 50%;
+  vertical-align: top;
+  position: relative;
+}
+
+.custom-theme .el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default) {
+  padding-bottom: 15px;
+}
+
+.custom-theme .el-time-spinner__wrapper.is-arrow {
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  text-align: center;
+  overflow: hidden;
+}
+
+.custom-theme .el-time-spinner__wrapper.is-arrow .el-time-spinner__list {
+  -webkit-transform: translateY(-32px);
+  transform: translateY(-32px);
+}
+
+.custom-theme .el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active) {
+  background: #fff;
+  cursor: default;
+}
+
+.custom-theme .el-time-spinner__arrow {
+  font-size: 12px;
+  color: #878d99;
+  position: absolute;
+  left: 0;
+  width: 100%;
+  z-index: 1;
+  text-align: center;
+  height: 30px;
+  line-height: 30px;
+  cursor: pointer;
+}
+
+.custom-theme .el-time-spinner__arrow:hover {
+  color: #262729;
+}
+
+.custom-theme .el-time-spinner__arrow.el-icon-arrow-up {
+  top: 10px;
+}
+
+.custom-theme .el-time-spinner__arrow.el-icon-arrow-down {
+  bottom: 10px;
+}
+
+.custom-theme .el-time-spinner__input.el-input {
+  width: 70%;
+}
+
+.custom-theme .el-time-spinner__input.el-input .el-input__inner {
+  padding: 0;
+  text-align: center;
+}
+
+.custom-theme .el-time-spinner__list {
+  padding: 0;
+  margin: 0;
+  list-style: none;
+  text-align: center;
+}
+
+.custom-theme .el-time-spinner__list::after,
+.custom-theme .el-time-spinner__list::before {
+  content: '';
+  display: block;
+  width: 100%;
+  height: 80px;
+}
+
+.custom-theme .el-time-spinner__item {
+  height: 32px;
+  line-height: 32px;
+  font-size: 12px;
+  color: #5a5e66;
+}
+
+.custom-theme .el-time-spinner__item:hover:not(.disabled):not(.active) {
+  background: #f5f7fa;
+  cursor: pointer;
+}
+
+.custom-theme .el-time-spinner__item.active:not(.disabled) {
+  color: #2d2f33;
+  font-weight: 700;
+}
+
+.custom-theme .el-time-spinner__item.disabled {
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .fade-in-linear-enter-active,
+.custom-theme .fade-in-linear-leave-active {
+  -webkit-transition: opacity 0.2s linear;
+  transition: opacity 0.2s linear;
+}
+
+.custom-theme .fade-in-linear-enter,
+.custom-theme .fade-in-linear-leave,
+.custom-theme .fade-in-linear-leave-active {
+  opacity: 0;
+}
+
+.custom-theme .el-fade-in-linear-enter-active,
+.custom-theme .el-fade-in-linear-leave-active {
+  -webkit-transition: opacity 0.2s linear;
+  transition: opacity 0.2s linear;
+}
+
+.custom-theme .el-fade-in-linear-enter,
+.custom-theme .el-fade-in-linear-leave,
+.custom-theme .el-fade-in-linear-leave-active {
+  opacity: 0;
+}
+
+.custom-theme .el-fade-in-enter-active,
+.custom-theme .el-fade-in-leave-active {
+  -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+  transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+}
+
+.custom-theme .el-fade-in-enter,
+.custom-theme .el-fade-in-leave-active {
+  opacity: 0;
+}
+
+.custom-theme .el-zoom-in-center-enter-active,
+.custom-theme .el-zoom-in-center-leave-active {
+  -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+  transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+}
+
+.custom-theme .el-zoom-in-center-enter,
+.custom-theme .el-zoom-in-center-leave-active {
+  opacity: 0;
+  -webkit-transform: scaleX(0);
+  transform: scaleX(0);
+}
+
+.custom-theme .el-zoom-in-top-enter-active,
+.custom-theme .el-zoom-in-top-leave-active {
+  opacity: 1;
+  -webkit-transform: scaleY(1);
+  transform: scaleY(1);
+  -webkit-transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  -webkit-transform-origin: center top;
+  transform-origin: center top;
+}
+
+.custom-theme .el-zoom-in-top-enter,
+.custom-theme .el-zoom-in-top-leave-active {
+  opacity: 0;
+  -webkit-transform: scaleY(0);
+  transform: scaleY(0);
+}
+
+.custom-theme .el-zoom-in-bottom-enter-active,
+.custom-theme .el-zoom-in-bottom-leave-active {
+  opacity: 1;
+  -webkit-transform: scaleY(1);
+  transform: scaleY(1);
+  -webkit-transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  -webkit-transform-origin: center bottom;
+  transform-origin: center bottom;
+}
+
+.custom-theme .el-zoom-in-bottom-enter,
+.custom-theme .el-zoom-in-bottom-leave-active {
+  opacity: 0;
+  -webkit-transform: scaleY(0);
+  transform: scaleY(0);
+}
+
+.custom-theme .el-zoom-in-left-enter-active,
+.custom-theme .el-zoom-in-left-leave-active {
+  opacity: 1;
+  -webkit-transform: scale(1, 1);
+  transform: scale(1, 1);
+  -webkit-transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  -webkit-transform-origin: top left;
+  transform-origin: top left;
+}
+
+.custom-theme .el-zoom-in-left-enter,
+.custom-theme .el-zoom-in-left-leave-active {
+  opacity: 0;
+  -webkit-transform: scale(0.45, 0.45);
+  transform: scale(0.45, 0.45);
+}
+
+.custom-theme .collapse-transition {
+  -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out;
+  transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out;
+}
+
+.custom-theme .horizontal-collapse-transition {
+  -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out;
+  transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out;
+}
+
+.custom-theme .el-list-enter-active,
+.custom-theme .el-list-leave-active {
+  -webkit-transition: all 1s;
+  transition: all 1s;
+}
+
+.custom-theme .el-list-enter,
+.custom-theme .el-list-leave-active {
+  opacity: 0;
+  -webkit-transform: translateY(-30px);
+  transform: translateY(-30px);
+}
+
+.custom-theme .el-opacity-transition {
+  -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+  transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+}
+
+.custom-theme .el-date-editor {
+  position: relative;
+  display: inline-block;
+  text-align: left;
+}
+
+.custom-theme .el-date-editor.el-input,
+.custom-theme .el-date-editor.el-input__inner {
+  width: 220px;
+}
+
+.custom-theme .el-date-editor--daterange.el-input,
+.custom-theme .el-date-editor--daterange.el-input__inner,
+.custom-theme .el-date-editor--timerange.el-input,
+.custom-theme .el-date-editor--timerange.el-input__inner {
+  width: 350px;
+}
+
+.custom-theme .el-date-editor--datetimerange.el-input,
+.custom-theme .el-date-editor--datetimerange.el-input__inner {
+  width: 400px;
+}
+
+.custom-theme .el-date-editor .el-range__icon {
+  font-size: 14px;
+  margin-left: -5px;
+  color: #b4bccc;
+  float: left;
+  line-height: 32px;
+}
+
+.custom-theme .el-date-editor .el-range-input {
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  appearance: none;
+  border: none;
+  outline: 0;
+  display: inline-block;
+  height: 100%;
+  margin: 0;
+  padding: 0;
+  width: 39%;
+  text-align: center;
+  font-size: 14px;
+  color: #5a5e66;
+}
+
+.custom-theme .el-date-editor .el-range-input::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-date-editor .el-range-input:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-date-editor .el-range-input::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-date-editor .el-range-input::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-date-editor .el-range-separator {
+  display: inline-block;
+  height: 100%;
+  padding: 0 5px;
+  margin: 0;
+  text-align: center;
+  line-height: 32px;
+  font-size: 14px;
+  width: 5%;
+  color: #2d2f33;
+}
+
+.custom-theme .el-date-editor .el-range__close-icon {
+  font-size: 14px;
+  color: #b4bccc;
+  width: 25px;
+  display: inline-block;
+  float: right;
+  line-height: 32px;
+}
+
+.custom-theme .el-range-editor.el-input__inner {
+  padding: 3px 10px;
+}
+
+.custom-theme .el-range-editor.is-active {
+  border-color: #262729;
+}
+
+.custom-theme .el-range-editor.is-active:hover {
+  border-color: #262729;
+}
+
+.custom-theme .el-range-editor--medium.el-input__inner {
+  height: 36px;
+}
+
+.custom-theme .el-range-editor--medium .el-range-separator {
+  line-height: 28px;
+  font-size: 14px;
+}
+
+.custom-theme .el-range-editor--medium .el-range-input {
+  font-size: 14px;
+}
+
+.custom-theme .el-range-editor--medium .el-range__close-icon,
+.custom-theme .el-range-editor--medium .el-range__icon {
+  line-height: 28px;
+}
+
+.custom-theme .el-range-editor--small.el-input__inner {
+  height: 32px;
+}
+
+.custom-theme .el-range-editor--small .el-range-separator {
+  line-height: 24px;
+  font-size: 13px;
+}
+
+.custom-theme .el-range-editor--small .el-range-input {
+  font-size: 13px;
+}
+
+.custom-theme .el-range-editor--small .el-range__close-icon,
+.custom-theme .el-range-editor--small .el-range__icon {
+  line-height: 24px;
+}
+
+.custom-theme .el-range-editor--mini.el-input__inner {
+  height: 28px;
+}
+
+.custom-theme .el-range-editor--mini .el-range-separator {
+  line-height: 20px;
+  font-size: 12px;
+}
+
+.custom-theme .el-range-editor--mini .el-range-input {
+  font-size: 12px;
+}
+
+.custom-theme .el-range-editor--mini .el-range__close-icon,
+.custom-theme .el-range-editor--mini .el-range__icon {
+  line-height: 20px;
+}
+
+.custom-theme .el-range-editor.is-disabled {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-range-editor.is-disabled:focus,
+.custom-theme .el-range-editor.is-disabled:hover {
+  border-color: #dfe4ed;
+}
+
+.custom-theme .el-range-editor.is-disabled input {
+  background-color: #f5f7fa;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-range-editor.is-disabled input::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-range-editor.is-disabled input:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-range-editor.is-disabled input::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-range-editor.is-disabled input::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-range-editor.is-disabled .el-range-separator {
+  color: #b4bccc;
+}
+
+.custom-theme .el-picker-panel {
+  color: #5a5e66;
+  border: 1px solid #dfe4ed;
+  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  background: #fff;
+  border-radius: 4px;
+  line-height: 30px;
+  margin: 5px 0;
+}
+
+.custom-theme .el-picker-panel__body-wrapper::after,
+.custom-theme .el-picker-panel__body::after {
+  content: '';
+  display: table;
+  clear: both;
+}
+
+.custom-theme .el-picker-panel__content {
+  position: relative;
+  margin: 15px;
+}
+
+.custom-theme .el-picker-panel__footer {
+  border-top: 1px solid #e4e4e4;
+  padding: 4px;
+  text-align: right;
+  background-color: #fff;
+  position: relative;
+  font-size: 0;
+}
+
+.custom-theme .el-picker-panel__shortcut {
+  display: block;
+  width: 100%;
+  border: 0;
+  background-color: transparent;
+  line-height: 28px;
+  font-size: 14px;
+  color: #5a5e66;
+  padding-left: 12px;
+  text-align: left;
+  outline: 0;
+  cursor: pointer;
+}
+
+.custom-theme .el-picker-panel__shortcut:hover {
+  color: #262729;
+}
+
+.custom-theme .el-picker-panel__shortcut.active {
+  background-color: #e6f1fe;
+  color: #262729;
+}
+
+.custom-theme .el-picker-panel__btn {
+  border: 1px solid #dcdcdc;
+  color: #333;
+  line-height: 24px;
+  border-radius: 2px;
+  padding: 0 20px;
+  cursor: pointer;
+  background-color: transparent;
+  outline: 0;
+  font-size: 12px;
+}
+
+.custom-theme .el-picker-panel__btn[disabled] {
+  color: #ccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-picker-panel__icon-btn {
+  font-size: 12px;
+  color: #2d2f33;
+  border: 0;
+  background: 0 0;
+  cursor: pointer;
+  outline: 0;
+  margin-top: 8px;
+}
+
+.custom-theme .el-picker-panel__icon-btn:hover {
+  color: #262729;
+}
+
+.custom-theme .el-picker-panel__icon-btn.is-disabled {
+  color: #bbb;
+}
+
+.custom-theme .el-picker-panel__icon-btn.is-disabled:hover {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-picker-panel__link-btn {
+  vertical-align: middle;
+}
+
+.custom-theme .el-picker-panel .popper__arrow {
+  -webkit-transform: translateX(-400%);
+  transform: translateX(-400%);
+}
+
+.custom-theme .el-picker-panel [slot='sidebar'],
+.custom-theme .el-picker-panel__sidebar {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  width: 110px;
+  border-right: 1px solid #e4e4e4;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  padding-top: 6px;
+  background-color: #fff;
+  overflow: auto;
+}
+
+.custom-theme .el-picker-panel [slot='sidebar'] + .el-picker-panel__body,
+.custom-theme .el-picker-panel__sidebar + .el-picker-panel__body {
+  margin-left: 110px;
+}
+
+.custom-theme .el-date-picker {
+  width: 322px;
+}
+
+.custom-theme .el-date-picker.has-sidebar.has-time {
+  width: 434px;
+}
+
+.custom-theme .el-date-picker.has-sidebar {
+  width: 438px;
+}
+
+.custom-theme .el-date-picker.has-time .el-picker-panel__body-wrapper {
+  position: relative;
+}
+
+.custom-theme .el-date-picker .el-picker-panel__content {
+  width: 292px;
+}
+
+.custom-theme .el-date-picker table {
+  table-layout: fixed;
+  width: 100%;
+}
+
+.custom-theme .el-date-picker__editor-wrap {
+  position: relative;
+  display: table-cell;
+  padding: 0 5px;
+}
+
+.custom-theme .el-date-picker__time-header {
+  position: relative;
+  border-bottom: 1px solid #e4e4e4;
+  font-size: 12px;
+  padding: 8px 5px 5px 5px;
+  display: table;
+  width: 100%;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-date-picker__header {
+  margin: 12px;
+  text-align: center;
+}
+
+.custom-theme .el-date-picker__header--bordered {
+  margin-bottom: 0;
+  padding-bottom: 12px;
+  border-bottom: solid 1px #e6ebf5;
+}
+
+.custom-theme .el-date-picker__header--bordered + .el-picker-panel__content {
+  margin-top: 0;
+}
+
+.custom-theme .el-date-picker__header-label {
+  font-size: 16px;
+  font-weight: 500;
+  padding: 0 5px;
+  line-height: 22px;
+  text-align: center;
+  cursor: pointer;
+  color: #5a5e66;
+}
+
+.custom-theme .el-date-picker__header-label:hover {
+  color: #262729;
+}
+
+.custom-theme .el-date-picker__header-label.active {
+  color: #262729;
+}
+
+.custom-theme .el-date-picker__prev-btn {
+  float: left;
+}
+
+.custom-theme .el-date-picker__next-btn {
+  float: right;
+}
+
+.custom-theme .el-date-picker__time-wrap {
+  padding: 10px;
+  text-align: center;
+}
+
+.custom-theme .el-date-picker__time-label {
+  float: left;
+  cursor: pointer;
+  line-height: 30px;
+  margin-left: 10px;
+}
+
+.custom-theme .el-date-range-picker {
+  width: 646px;
+}
+
+.custom-theme .el-date-range-picker.has-sidebar {
+  width: 756px;
+}
+
+.custom-theme .el-date-range-picker table {
+  table-layout: fixed;
+  width: 100%;
+}
+
+.custom-theme .el-date-range-picker .el-picker-panel__body {
+  min-width: 513px;
+}
+
+.custom-theme .el-date-range-picker .el-picker-panel__content {
+  margin: 0;
+}
+
+.custom-theme .el-date-range-picker__header {
+  position: relative;
+  text-align: center;
+  height: 28px;
+}
+
+.custom-theme .el-date-range-picker__header [class*='arrow-left'] {
+  float: left;
+}
+
+.custom-theme .el-date-range-picker__header [class*='arrow-right'] {
+  float: right;
+}
+
+.custom-theme .el-date-range-picker__header div {
+  font-size: 16px;
+  font-weight: 500;
+  margin-right: 50px;
+}
+
+.custom-theme .el-date-range-picker__content {
+  float: left;
+  width: 50%;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  margin: 0;
+  padding: 16px;
+}
+
+.custom-theme .el-date-range-picker__content.is-left {
+  border-right: 1px solid #e4e4e4;
+}
+
+.custom-theme .el-date-range-picker__content.is-right .el-date-range-picker__header div {
+  margin-left: 50px;
+  margin-right: 50px;
+}
+
+.custom-theme .el-date-range-picker__editors-wrap {
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  display: table-cell;
+}
+
+.custom-theme .el-date-range-picker__editors-wrap.is-right {
+  text-align: right;
+}
+
+.custom-theme .el-date-range-picker__time-header {
+  position: relative;
+  border-bottom: 1px solid #e4e4e4;
+  font-size: 12px;
+  padding: 8px 5px 5px 5px;
+  display: table;
+  width: 100%;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-date-range-picker__time-header > .el-icon-arrow-right {
+  font-size: 20px;
+  vertical-align: middle;
+  display: table-cell;
+  color: #2d2f33;
+}
+
+.custom-theme .el-date-range-picker__time-picker-wrap {
+  position: relative;
+  display: table-cell;
+  padding: 0 5px;
+}
+
+.custom-theme .el-date-range-picker__time-picker-wrap .el-picker-panel {
+  position: absolute;
+  top: 13px;
+  right: 0;
+  z-index: 1;
+  background: #fff;
+}
+
+.custom-theme .el-time-range-picker {
+  width: 354px;
+  overflow: visible;
+}
+
+.custom-theme .el-time-range-picker__content {
+  position: relative;
+  text-align: center;
+  padding: 10px;
+}
+
+.custom-theme .el-time-range-picker__cell {
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  margin: 0;
+  padding: 4px 7px 7px;
+  width: 50%;
+  display: inline-block;
+}
+
+.custom-theme .el-time-range-picker__header {
+  margin-bottom: 5px;
+  text-align: center;
+  font-size: 14px;
+}
+
+.custom-theme .el-time-range-picker__body {
+  border-radius: 2px;
+  border: 1px solid #dfe4ed;
+}
+
+.custom-theme .el-time-panel {
+  margin: 5px 0;
+  border: solid 1px #dfe4ed;
+  background-color: #fff;
+  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  border-radius: 2px;
+  position: absolute;
+  width: 180px;
+  left: 0;
+  z-index: 1000;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.custom-theme .el-time-panel__content {
+  font-size: 0;
+  position: relative;
+  overflow: hidden;
+}
+
+.custom-theme .el-time-panel__content::after,
+.custom-theme .el-time-panel__content::before {
+  content: '';
+  top: 50%;
+  position: absolute;
+  margin-top: -15px;
+  height: 32px;
+  z-index: -1;
+  left: 0;
+  right: 0;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  padding-top: 6px;
+  text-align: left;
+  border-top: 1px solid #dfe4ed;
+  border-bottom: 1px solid #dfe4ed;
+}
+
+.custom-theme .el-time-panel__content::after {
+  left: 50%;
+  margin-left: 12%;
+  margin-right: 12%;
+}
+
+.custom-theme .el-time-panel__content::before {
+  padding-left: 50%;
+  margin-right: 12%;
+  margin-left: 12%;
+}
+
+.custom-theme .el-time-panel__content.has-seconds::after {
+  left: calc(100% / 3 * 2);
+}
+
+.custom-theme .el-time-panel__content.has-seconds::before {
+  padding-left: calc(100% / 3);
+}
+
+.custom-theme .el-time-panel__footer {
+  border-top: 1px solid #e4e4e4;
+  padding: 4px;
+  height: 36px;
+  line-height: 25px;
+  text-align: right;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-time-panel__btn {
+  border: none;
+  line-height: 28px;
+  padding: 0 5px;
+  margin: 0 5px;
+  cursor: pointer;
+  background-color: transparent;
+  outline: 0;
+  font-size: 12px;
+  color: #2d2f33;
+}
+
+.custom-theme .el-time-panel__btn.confirm {
+  font-weight: 800;
+  color: #262729;
+}
+
+.custom-theme .el-time-panel .popper__arrow {
+  -webkit-transform: translateX(-400%);
+  transform: translateX(-400%);
+}
+
+.custom-theme .el-input {
+  position: relative;
+  font-size: 14px;
+  display: inline-block;
+  width: 100%;
+}
+
+.custom-theme .el-input::-webkit-scrollbar {
+  z-index: 11;
+  width: 6px;
+}
+
+.custom-theme .el-input::-webkit-scrollbar:horizontal {
+  height: 6px;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-thumb {
+  border-radius: 5px;
+  width: 6px;
+  background: #b4bccc;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-corner {
+  background: #fff;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-track {
+  background: #fff;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-track-piece {
+  background: #fff;
+  width: 6px;
+}
+
+.custom-theme .el-input__inner {
+  -webkit-appearance: none;
+  background-color: #fff;
+  background-image: none;
+  border-radius: 4px;
+  border: 1px solid #d8dce5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  color: #5a5e66;
+  display: inline-block;
+  font-size: inherit;
+  height: 40px;
+  line-height: 1;
+  outline: 0;
+  padding: 0 15px;
+  -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  width: 100%;
+}
+
+.custom-theme .el-input__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:hover {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:focus {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-input__suffix {
+  position: absolute;
+  height: 100%;
+  right: 5px;
+  top: 0;
+  text-align: center;
+  color: #b4bccc;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+  pointer-events: none;
+}
+
+.custom-theme .el-input__suffix-inner {
+  pointer-events: all;
+}
+
+.custom-theme .el-input__prefix {
+  position: absolute;
+  height: 100%;
+  left: 5px;
+  top: 0;
+  text-align: center;
+  color: #b4bccc;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+}
+
+.custom-theme .el-input__icon {
+  height: 100%;
+  width: 25px;
+  text-align: center;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+  line-height: 40px;
+}
+
+.custom-theme .el-input__icon:after {
+  content: '';
+  height: 100%;
+  width: 0;
+  display: inline-block;
+  vertical-align: middle;
+}
+
+.custom-theme .el-input__validateIcon {
+  pointer-events: none;
+}
+
+.custom-theme .el-input.is-active .el-input__inner {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__icon {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input--suffix .el-input__inner {
+  padding-right: 30px;
+}
+
+.custom-theme .el-input--prefix .el-input__inner {
+  padding-left: 30px;
+}
+
+.custom-theme .el-input--medium {
+  font-size: 14px;
+}
+
+.custom-theme .el-input--medium .el-input__inner {
+  height: 36px;
+}
+
+.custom-theme .el-input--medium .el-input__icon {
+  line-height: 36px;
+}
+
+.custom-theme .el-input--small {
+  font-size: 13px;
+}
+
+.custom-theme .el-input--small .el-input__inner {
+  height: 32px;
+}
+
+.custom-theme .el-input--small .el-input__icon {
+  line-height: 32px;
+}
+
+.custom-theme .el-input--mini {
+  font-size: 12px;
+}
+
+.custom-theme .el-input--mini .el-input__inner {
+  height: 28px;
+}
+
+.custom-theme .el-input--mini .el-input__icon {
+  line-height: 28px;
+}
+
+.custom-theme .el-input-group {
+  line-height: normal;
+  display: inline-table;
+  width: 100%;
+  border-collapse: separate;
+}
+
+.custom-theme .el-input-group > .el-input__inner {
+  vertical-align: middle;
+  display: table-cell;
+}
+
+.custom-theme .el-input-group__append,
+.custom-theme .el-input-group__prepend {
+  background-color: #f5f7fa;
+  color: #0a76a4;
+  vertical-align: middle;
+  display: table-cell;
+  position: relative;
+  border: 1px solid #d8dce5;
+  border-radius: 4px;
+  padding: 0 20px;
+  width: 1px;
+  white-space: nowrap;
+}
+
+.custom-theme .el-input-group__append:focus,
+.custom-theme .el-input-group__prepend:focus {
+  outline: 0;
+}
+
+.custom-theme .el-input-group__append .el-button,
+.custom-theme .el-input-group__append .el-select,
+.custom-theme .el-input-group__prepend .el-button,
+.custom-theme .el-input-group__prepend .el-select {
+  display: inline-block;
+  margin: -20px;
+}
+
+.custom-theme .el-input-group__append button.el-button,
+.custom-theme .el-input-group__append div.el-select .el-input__inner,
+.custom-theme .el-input-group__append div.el-select:hover .el-input__inner,
+.custom-theme .el-input-group__prepend button.el-button,
+.custom-theme .el-input-group__prepend div.el-select .el-input__inner,
+.custom-theme .el-input-group__prepend div.el-select:hover .el-input__inner {
+  border-color: transparent;
+  background-color: transparent;
+  color: inherit;
+  border-top: 0;
+  border-bottom: 0;
+}
+
+.custom-theme .el-input-group__append .el-button,
+.custom-theme .el-input-group__append .el-input,
+.custom-theme .el-input-group__prepend .el-button,
+.custom-theme .el-input-group__prepend .el-input {
+  font-size: inherit;
+}
+
+.custom-theme .el-input-group__prepend {
+  border-right: 0;
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-input-group__append {
+  border-left: 0;
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-input-group--prepend .el-input__inner {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-input-group--append .el-input__inner {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-textarea {
+  display: inline-block;
+  width: 100%;
+  vertical-align: bottom;
+}
+
+.custom-theme .el-textarea__inner {
+  display: block;
+  resize: vertical;
+  padding: 5px 15px;
+  line-height: 1.5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 100%;
+  font-size: 14px;
+  color: #5a5e66;
+  background-color: #fff;
+  background-image: none;
+  border: 1px solid #d8dce5;
+  border-radius: 4px;
+  -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+}
+
+.custom-theme .el-textarea__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:hover {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:focus {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-scrollbar {
+  overflow: hidden;
+  position: relative;
+}
+
+.custom-theme .el-scrollbar:active > .el-scrollbar__bar,
+.custom-theme .el-scrollbar:focus > .el-scrollbar__bar,
+.custom-theme .el-scrollbar:hover > .el-scrollbar__bar {
+  opacity: 1;
+  -webkit-transition: opacity 340ms ease-out;
+  transition: opacity 340ms ease-out;
+}
+
+.custom-theme .el-scrollbar__wrap {
+  overflow: scroll;
+  height: 100%;
+}
+
+.custom-theme .el-scrollbar__wrap--hidden-default::-webkit-scrollbar {
+  width: 0;
+  height: 0;
+}
+
+.custom-theme .el-scrollbar__thumb {
+  position: relative;
+  display: block;
+  width: 0;
+  height: 0;
+  cursor: pointer;
+  border-radius: inherit;
+  background-color: rgba(135, 141, 153, 0.3);
+  -webkit-transition: 0.3s background-color;
+  transition: 0.3s background-color;
+}
+
+.custom-theme .el-scrollbar__thumb:hover {
+  background-color: rgba(135, 141, 153, 0.5);
+}
+
+.custom-theme .el-scrollbar__bar {
+  position: absolute;
+  right: 2px;
+  bottom: 2px;
+  z-index: 1;
+  border-radius: 4px;
+  opacity: 0;
+  -webkit-transition: opacity 120ms ease-out;
+  transition: opacity 120ms ease-out;
+}
+
+.custom-theme .el-scrollbar__bar.is-vertical {
+  width: 6px;
+  top: 2px;
+}
+
+.custom-theme .el-scrollbar__bar.is-vertical > div {
+  width: 100%;
+}
+
+.custom-theme .el-scrollbar__bar.is-horizontal {
+  height: 6px;
+  left: 2px;
+}
+
+.custom-theme .el-scrollbar__bar.is-horizontal > div {
+  height: 100%;
+}
+
+.custom-theme .el-popper .popper__arrow,
+.custom-theme .el-popper .popper__arrow::after {
+  position: absolute;
+  display: block;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+
+.custom-theme .el-popper .popper__arrow {
+  border-width: 6px;
+  -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
+  filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
+}
+
+.custom-theme .el-popper .popper__arrow::after {
+  content: ' ';
+  border-width: 6px;
+}
+
+.custom-theme .el-popper[x-placement^='top'] {
+  margin-bottom: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='top'] .popper__arrow {
+  bottom: -6px;
+  left: 50%;
+  margin-right: 3px;
+  border-top-color: #e6ebf5;
+  border-bottom-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='top'] .popper__arrow::after {
+  bottom: 1px;
+  margin-left: -6px;
+  border-top-color: #fff;
+  border-bottom-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] {
+  margin-top: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] .popper__arrow {
+  top: -6px;
+  left: 50%;
+  margin-right: 3px;
+  border-top-width: 0;
+  border-bottom-color: #e6ebf5;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] .popper__arrow::after {
+  top: 1px;
+  margin-left: -6px;
+  border-top-width: 0;
+  border-bottom-color: #fff;
+}
+
+.custom-theme .el-popper[x-placement^='right'] {
+  margin-left: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='right'] .popper__arrow {
+  top: 50%;
+  left: -6px;
+  margin-bottom: 3px;
+  border-right-color: #e6ebf5;
+  border-left-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='right'] .popper__arrow::after {
+  bottom: -6px;
+  left: 1px;
+  border-right-color: #fff;
+  border-left-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='left'] {
+  margin-right: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='left'] .popper__arrow {
+  top: 50%;
+  right: -6px;
+  margin-bottom: 3px;
+  border-right-width: 0;
+  border-left-color: #e6ebf5;
+}
+
+.custom-theme .el-popper[x-placement^='left'] .popper__arrow::after {
+  right: 1px;
+  bottom: -6px;
+  margin-left: -6px;
+  border-right-width: 0;
+  border-left-color: #fff;
+}
+
+.custom-theme .fade-in-linear-enter-active,
+.custom-theme .fade-in-linear-leave-active {
+  -webkit-transition: opacity 0.2s linear;
+  transition: opacity 0.2s linear;
+}
+
+.custom-theme .fade-in-linear-enter,
+.custom-theme .fade-in-linear-leave,
+.custom-theme .fade-in-linear-leave-active {
+  opacity: 0;
+}
+
+.custom-theme .el-fade-in-linear-enter-active,
+.custom-theme .el-fade-in-linear-leave-active {
+  -webkit-transition: opacity 0.2s linear;
+  transition: opacity 0.2s linear;
+}
+
+.custom-theme .el-fade-in-linear-enter,
+.custom-theme .el-fade-in-linear-leave,
+.custom-theme .el-fade-in-linear-leave-active {
+  opacity: 0;
+}
+
+.custom-theme .el-fade-in-enter-active,
+.custom-theme .el-fade-in-leave-active {
+  -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+  transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+}
+
+.custom-theme .el-fade-in-enter,
+.custom-theme .el-fade-in-leave-active {
+  opacity: 0;
+}
+
+.custom-theme .el-zoom-in-center-enter-active,
+.custom-theme .el-zoom-in-center-leave-active {
+  -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+  transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+}
+
+.custom-theme .el-zoom-in-center-enter,
+.custom-theme .el-zoom-in-center-leave-active {
+  opacity: 0;
+  -webkit-transform: scaleX(0);
+  transform: scaleX(0);
+}
+
+.custom-theme .el-zoom-in-top-enter-active,
+.custom-theme .el-zoom-in-top-leave-active {
+  opacity: 1;
+  -webkit-transform: scaleY(1);
+  transform: scaleY(1);
+  -webkit-transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  -webkit-transform-origin: center top;
+  transform-origin: center top;
+}
+
+.custom-theme .el-zoom-in-top-enter,
+.custom-theme .el-zoom-in-top-leave-active {
+  opacity: 0;
+  -webkit-transform: scaleY(0);
+  transform: scaleY(0);
+}
+
+.custom-theme .el-zoom-in-bottom-enter-active,
+.custom-theme .el-zoom-in-bottom-leave-active {
+  opacity: 1;
+  -webkit-transform: scaleY(1);
+  transform: scaleY(1);
+  -webkit-transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  -webkit-transform-origin: center bottom;
+  transform-origin: center bottom;
+}
+
+.custom-theme .el-zoom-in-bottom-enter,
+.custom-theme .el-zoom-in-bottom-leave-active {
+  opacity: 0;
+  -webkit-transform: scaleY(0);
+  transform: scaleY(0);
+}
+
+.custom-theme .el-zoom-in-left-enter-active,
+.custom-theme .el-zoom-in-left-leave-active {
+  opacity: 1;
+  -webkit-transform: scale(1, 1);
+  transform: scale(1, 1);
+  -webkit-transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  -webkit-transform-origin: top left;
+  transform-origin: top left;
+}
+
+.custom-theme .el-zoom-in-left-enter,
+.custom-theme .el-zoom-in-left-leave-active {
+  opacity: 0;
+  -webkit-transform: scale(0.45, 0.45);
+  transform: scale(0.45, 0.45);
+}
+
+.custom-theme .collapse-transition {
+  -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out;
+  transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out;
+}
+
+.custom-theme .horizontal-collapse-transition {
+  -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out;
+  transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out;
+}
+
+.custom-theme .el-list-enter-active,
+.custom-theme .el-list-leave-active {
+  -webkit-transition: all 1s;
+  transition: all 1s;
+}
+
+.custom-theme .el-list-enter,
+.custom-theme .el-list-leave-active {
+  opacity: 0;
+  -webkit-transform: translateY(-30px);
+  transform: translateY(-30px);
+}
+
+.custom-theme .el-opacity-transition {
+  -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+  transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+}
+
+.custom-theme .el-date-editor {
+  position: relative;
+  display: inline-block;
+  text-align: left;
+}
+
+.custom-theme .el-date-editor.el-input,
+.custom-theme .el-date-editor.el-input__inner {
+  width: 220px;
+}
+
+.custom-theme .el-date-editor--daterange.el-input,
+.custom-theme .el-date-editor--daterange.el-input__inner,
+.custom-theme .el-date-editor--timerange.el-input,
+.custom-theme .el-date-editor--timerange.el-input__inner {
+  width: 350px;
+}
+
+.custom-theme .el-date-editor--datetimerange.el-input,
+.custom-theme .el-date-editor--datetimerange.el-input__inner {
+  width: 400px;
+}
+
+.custom-theme .el-date-editor .el-range__icon {
+  font-size: 14px;
+  margin-left: -5px;
+  color: #b4bccc;
+  float: left;
+  line-height: 32px;
+}
+
+.custom-theme .el-date-editor .el-range-input {
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  appearance: none;
+  border: none;
+  outline: 0;
+  display: inline-block;
+  height: 100%;
+  margin: 0;
+  padding: 0;
+  width: 39%;
+  text-align: center;
+  font-size: 14px;
+  color: #5a5e66;
+}
+
+.custom-theme .el-date-editor .el-range-input::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-date-editor .el-range-input:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-date-editor .el-range-input::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-date-editor .el-range-input::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-date-editor .el-range-separator {
+  display: inline-block;
+  height: 100%;
+  padding: 0 5px;
+  margin: 0;
+  text-align: center;
+  line-height: 32px;
+  font-size: 14px;
+  width: 5%;
+  color: #2d2f33;
+}
+
+.custom-theme .el-date-editor .el-range__close-icon {
+  font-size: 14px;
+  color: #b4bccc;
+  width: 25px;
+  display: inline-block;
+  float: right;
+  line-height: 32px;
+}
+
+.custom-theme .el-range-editor.el-input__inner {
+  padding: 3px 10px;
+}
+
+.custom-theme .el-range-editor.is-active {
+  border-color: #262729;
+}
+
+.custom-theme .el-range-editor.is-active:hover {
+  border-color: #262729;
+}
+
+.custom-theme .el-range-editor--medium.el-input__inner {
+  height: 36px;
+}
+
+.custom-theme .el-range-editor--medium .el-range-separator {
+  line-height: 28px;
+  font-size: 14px;
+}
+
+.custom-theme .el-range-editor--medium .el-range-input {
+  font-size: 14px;
+}
+
+.custom-theme .el-range-editor--medium .el-range__close-icon,
+.custom-theme .el-range-editor--medium .el-range__icon {
+  line-height: 28px;
+}
+
+.custom-theme .el-range-editor--small.el-input__inner {
+  height: 32px;
+}
+
+.custom-theme .el-range-editor--small .el-range-separator {
+  line-height: 24px;
+  font-size: 13px;
+}
+
+.custom-theme .el-range-editor--small .el-range-input {
+  font-size: 13px;
+}
+
+.custom-theme .el-range-editor--small .el-range__close-icon,
+.custom-theme .el-range-editor--small .el-range__icon {
+  line-height: 24px;
+}
+
+.custom-theme .el-range-editor--mini.el-input__inner {
+  height: 28px;
+}
+
+.custom-theme .el-range-editor--mini .el-range-separator {
+  line-height: 20px;
+  font-size: 12px;
+}
+
+.custom-theme .el-range-editor--mini .el-range-input {
+  font-size: 12px;
+}
+
+.custom-theme .el-range-editor--mini .el-range__close-icon,
+.custom-theme .el-range-editor--mini .el-range__icon {
+  line-height: 20px;
+}
+
+.custom-theme .el-range-editor.is-disabled {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-range-editor.is-disabled:focus,
+.custom-theme .el-range-editor.is-disabled:hover {
+  border-color: #dfe4ed;
+}
+
+.custom-theme .el-range-editor.is-disabled input {
+  background-color: #f5f7fa;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-range-editor.is-disabled input::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-range-editor.is-disabled input:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-range-editor.is-disabled input::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-range-editor.is-disabled input::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-range-editor.is-disabled .el-range-separator {
+  color: #b4bccc;
+}
+
+.custom-theme .el-picker-panel {
+  color: #5a5e66;
+  border: 1px solid #dfe4ed;
+  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  background: #fff;
+  border-radius: 4px;
+  line-height: 30px;
+  margin: 5px 0;
+}
+
+.custom-theme .el-picker-panel__body-wrapper::after,
+.custom-theme .el-picker-panel__body::after {
+  content: '';
+  display: table;
+  clear: both;
+}
+
+.custom-theme .el-picker-panel__content {
+  position: relative;
+  margin: 15px;
+}
+
+.custom-theme .el-picker-panel__footer {
+  border-top: 1px solid #e4e4e4;
+  padding: 4px;
+  text-align: right;
+  background-color: #fff;
+  position: relative;
+  font-size: 0;
+}
+
+.custom-theme .el-picker-panel__shortcut {
+  display: block;
+  width: 100%;
+  border: 0;
+  background-color: transparent;
+  line-height: 28px;
+  font-size: 14px;
+  color: #5a5e66;
+  padding-left: 12px;
+  text-align: left;
+  outline: 0;
+  cursor: pointer;
+}
+
+.custom-theme .el-picker-panel__shortcut:hover {
+  color: #262729;
+}
+
+.custom-theme .el-picker-panel__shortcut.active {
+  background-color: #e6f1fe;
+  color: #262729;
+}
+
+.custom-theme .el-picker-panel__btn {
+  border: 1px solid #dcdcdc;
+  color: #333;
+  line-height: 24px;
+  border-radius: 2px;
+  padding: 0 20px;
+  cursor: pointer;
+  background-color: transparent;
+  outline: 0;
+  font-size: 12px;
+}
+
+.custom-theme .el-picker-panel__btn[disabled] {
+  color: #ccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-picker-panel__icon-btn {
+  font-size: 12px;
+  color: #2d2f33;
+  border: 0;
+  background: 0 0;
+  cursor: pointer;
+  outline: 0;
+  margin-top: 8px;
+}
+
+.custom-theme .el-picker-panel__icon-btn:hover {
+  color: #262729;
+}
+
+.custom-theme .el-picker-panel__icon-btn.is-disabled {
+  color: #bbb;
+}
+
+.custom-theme .el-picker-panel__icon-btn.is-disabled:hover {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-picker-panel__link-btn {
+  vertical-align: middle;
+}
+
+.custom-theme .el-picker-panel .popper__arrow {
+  -webkit-transform: translateX(-400%);
+  transform: translateX(-400%);
+}
+
+.custom-theme .el-picker-panel [slot='sidebar'],
+.custom-theme .el-picker-panel__sidebar {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  width: 110px;
+  border-right: 1px solid #e4e4e4;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  padding-top: 6px;
+  background-color: #fff;
+  overflow: auto;
+}
+
+.custom-theme .el-picker-panel [slot='sidebar'] + .el-picker-panel__body,
+.custom-theme .el-picker-panel__sidebar + .el-picker-panel__body {
+  margin-left: 110px;
+}
+
+.custom-theme .el-date-picker {
+  width: 322px;
+}
+
+.custom-theme .el-date-picker.has-sidebar.has-time {
+  width: 434px;
+}
+
+.custom-theme .el-date-picker.has-sidebar {
+  width: 438px;
+}
+
+.custom-theme .el-date-picker.has-time .el-picker-panel__body-wrapper {
+  position: relative;
+}
+
+.custom-theme .el-date-picker .el-picker-panel__content {
+  width: 292px;
+}
+
+.custom-theme .el-date-picker table {
+  table-layout: fixed;
+  width: 100%;
+}
+
+.custom-theme .el-date-picker__editor-wrap {
+  position: relative;
+  display: table-cell;
+  padding: 0 5px;
+}
+
+.custom-theme .el-date-picker__time-header {
+  position: relative;
+  border-bottom: 1px solid #e4e4e4;
+  font-size: 12px;
+  padding: 8px 5px 5px 5px;
+  display: table;
+  width: 100%;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-date-picker__header {
+  margin: 12px;
+  text-align: center;
+}
+
+.custom-theme .el-date-picker__header--bordered {
+  margin-bottom: 0;
+  padding-bottom: 12px;
+  border-bottom: solid 1px #e6ebf5;
+}
+
+.custom-theme .el-date-picker__header--bordered + .el-picker-panel__content {
+  margin-top: 0;
+}
+
+.custom-theme .el-date-picker__header-label {
+  font-size: 16px;
+  font-weight: 500;
+  padding: 0 5px;
+  line-height: 22px;
+  text-align: center;
+  cursor: pointer;
+  color: #5a5e66;
+}
+
+.custom-theme .el-date-picker__header-label:hover {
+  color: #262729;
+}
+
+.custom-theme .el-date-picker__header-label.active {
+  color: #262729;
+}
+
+.custom-theme .el-date-picker__prev-btn {
+  float: left;
+}
+
+.custom-theme .el-date-picker__next-btn {
+  float: right;
+}
+
+.custom-theme .el-date-picker__time-wrap {
+  padding: 10px;
+  text-align: center;
+}
+
+.custom-theme .el-date-picker__time-label {
+  float: left;
+  cursor: pointer;
+  line-height: 30px;
+  margin-left: 10px;
+}
+
+.custom-theme .el-scrollbar {
+  overflow: hidden;
+  position: relative;
+}
+
+.custom-theme .el-scrollbar:active > .el-scrollbar__bar,
+.custom-theme .el-scrollbar:focus > .el-scrollbar__bar,
+.custom-theme .el-scrollbar:hover > .el-scrollbar__bar {
+  opacity: 1;
+  -webkit-transition: opacity 340ms ease-out;
+  transition: opacity 340ms ease-out;
+}
+
+.custom-theme .el-scrollbar__wrap {
+  overflow: scroll;
+  height: 100%;
+}
+
+.custom-theme .el-scrollbar__wrap--hidden-default::-webkit-scrollbar {
+  width: 0;
+  height: 0;
+}
+
+.custom-theme .el-scrollbar__thumb {
+  position: relative;
+  display: block;
+  width: 0;
+  height: 0;
+  cursor: pointer;
+  border-radius: inherit;
+  background-color: rgba(135, 141, 153, 0.3);
+  -webkit-transition: 0.3s background-color;
+  transition: 0.3s background-color;
+}
+
+.custom-theme .el-scrollbar__thumb:hover {
+  background-color: rgba(135, 141, 153, 0.5);
+}
+
+.custom-theme .el-scrollbar__bar {
+  position: absolute;
+  right: 2px;
+  bottom: 2px;
+  z-index: 1;
+  border-radius: 4px;
+  opacity: 0;
+  -webkit-transition: opacity 120ms ease-out;
+  transition: opacity 120ms ease-out;
+}
+
+.custom-theme .el-scrollbar__bar.is-vertical {
+  width: 6px;
+  top: 2px;
+}
+
+.custom-theme .el-scrollbar__bar.is-vertical > div {
+  width: 100%;
+}
+
+.custom-theme .el-scrollbar__bar.is-horizontal {
+  height: 6px;
+  left: 2px;
+}
+
+.custom-theme .el-scrollbar__bar.is-horizontal > div {
+  height: 100%;
+}
+
+.custom-theme .el-popper .popper__arrow,
+.custom-theme .el-popper .popper__arrow::after {
+  position: absolute;
+  display: block;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+
+.custom-theme .el-popper .popper__arrow {
+  border-width: 6px;
+  -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
+  filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
+}
+
+.custom-theme .el-popper .popper__arrow::after {
+  content: ' ';
+  border-width: 6px;
+}
+
+.custom-theme .el-popper[x-placement^='top'] {
+  margin-bottom: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='top'] .popper__arrow {
+  bottom: -6px;
+  left: 50%;
+  margin-right: 3px;
+  border-top-color: #e6ebf5;
+  border-bottom-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='top'] .popper__arrow::after {
+  bottom: 1px;
+  margin-left: -6px;
+  border-top-color: #fff;
+  border-bottom-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] {
+  margin-top: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] .popper__arrow {
+  top: -6px;
+  left: 50%;
+  margin-right: 3px;
+  border-top-width: 0;
+  border-bottom-color: #e6ebf5;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] .popper__arrow::after {
+  top: 1px;
+  margin-left: -6px;
+  border-top-width: 0;
+  border-bottom-color: #fff;
+}
+
+.custom-theme .el-popper[x-placement^='right'] {
+  margin-left: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='right'] .popper__arrow {
+  top: 50%;
+  left: -6px;
+  margin-bottom: 3px;
+  border-right-color: #e6ebf5;
+  border-left-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='right'] .popper__arrow::after {
+  bottom: -6px;
+  left: 1px;
+  border-right-color: #fff;
+  border-left-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='left'] {
+  margin-right: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='left'] .popper__arrow {
+  top: 50%;
+  right: -6px;
+  margin-bottom: 3px;
+  border-right-width: 0;
+  border-left-color: #e6ebf5;
+}
+
+.custom-theme .el-popper[x-placement^='left'] .popper__arrow::after {
+  right: 1px;
+  bottom: -6px;
+  margin-left: -6px;
+  border-right-width: 0;
+  border-left-color: #fff;
+}
+
+.custom-theme .time-select {
+  margin: 5px 0;
+  min-width: 0;
+}
+
+.custom-theme .time-select .el-picker-panel__content {
+  max-height: 200px;
+  margin: 0;
+}
+
+.custom-theme .time-select-item {
+  padding: 8px 10px;
+  font-size: 14px;
+  line-height: 20px;
+}
+
+.custom-theme .time-select-item.selected:not(.disabled) {
+  color: #262729;
+  font-weight: 700;
+}
+
+.custom-theme .time-select-item.disabled {
+  color: #dfe4ed;
+  cursor: not-allowed;
+}
+
+.custom-theme .time-select-item:hover {
+  background-color: #f5f7fa;
+  font-weight: 700;
+  cursor: pointer;
+}
+
+.custom-theme .fade-in-linear-enter-active,
+.custom-theme .fade-in-linear-leave-active {
+  -webkit-transition: opacity 0.2s linear;
+  transition: opacity 0.2s linear;
+}
+
+.custom-theme .fade-in-linear-enter,
+.custom-theme .fade-in-linear-leave,
+.custom-theme .fade-in-linear-leave-active {
+  opacity: 0;
+}
+
+.custom-theme .el-fade-in-linear-enter-active,
+.custom-theme .el-fade-in-linear-leave-active {
+  -webkit-transition: opacity 0.2s linear;
+  transition: opacity 0.2s linear;
+}
+
+.custom-theme .el-fade-in-linear-enter,
+.custom-theme .el-fade-in-linear-leave,
+.custom-theme .el-fade-in-linear-leave-active {
+  opacity: 0;
+}
+
+.custom-theme .el-fade-in-enter-active,
+.custom-theme .el-fade-in-leave-active {
+  -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+  transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+}
+
+.custom-theme .el-fade-in-enter,
+.custom-theme .el-fade-in-leave-active {
+  opacity: 0;
+}
+
+.custom-theme .el-zoom-in-center-enter-active,
+.custom-theme .el-zoom-in-center-leave-active {
+  -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+  transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+}
+
+.custom-theme .el-zoom-in-center-enter,
+.custom-theme .el-zoom-in-center-leave-active {
+  opacity: 0;
+  -webkit-transform: scaleX(0);
+  transform: scaleX(0);
+}
+
+.custom-theme .el-zoom-in-top-enter-active,
+.custom-theme .el-zoom-in-top-leave-active {
+  opacity: 1;
+  -webkit-transform: scaleY(1);
+  transform: scaleY(1);
+  -webkit-transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  -webkit-transform-origin: center top;
+  transform-origin: center top;
+}
+
+.custom-theme .el-zoom-in-top-enter,
+.custom-theme .el-zoom-in-top-leave-active {
+  opacity: 0;
+  -webkit-transform: scaleY(0);
+  transform: scaleY(0);
+}
+
+.custom-theme .el-zoom-in-bottom-enter-active,
+.custom-theme .el-zoom-in-bottom-leave-active {
+  opacity: 1;
+  -webkit-transform: scaleY(1);
+  transform: scaleY(1);
+  -webkit-transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  -webkit-transform-origin: center bottom;
+  transform-origin: center bottom;
+}
+
+.custom-theme .el-zoom-in-bottom-enter,
+.custom-theme .el-zoom-in-bottom-leave-active {
+  opacity: 0;
+  -webkit-transform: scaleY(0);
+  transform: scaleY(0);
+}
+
+.custom-theme .el-zoom-in-left-enter-active,
+.custom-theme .el-zoom-in-left-leave-active {
+  opacity: 1;
+  -webkit-transform: scale(1, 1);
+  transform: scale(1, 1);
+  -webkit-transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  -webkit-transform-origin: top left;
+  transform-origin: top left;
+}
+
+.custom-theme .el-zoom-in-left-enter,
+.custom-theme .el-zoom-in-left-leave-active {
+  opacity: 0;
+  -webkit-transform: scale(0.45, 0.45);
+  transform: scale(0.45, 0.45);
+}
+
+.custom-theme .collapse-transition {
+  -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out;
+  transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out;
+}
+
+.custom-theme .horizontal-collapse-transition {
+  -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out;
+  transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out;
+}
+
+.custom-theme .el-list-enter-active,
+.custom-theme .el-list-leave-active {
+  -webkit-transition: all 1s;
+  transition: all 1s;
+}
+
+.custom-theme .el-list-enter,
+.custom-theme .el-list-leave-active {
+  opacity: 0;
+  -webkit-transform: translateY(-30px);
+  transform: translateY(-30px);
+}
+
+.custom-theme .el-opacity-transition {
+  -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+  transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1);
+}
+
+.custom-theme .el-date-editor {
+  position: relative;
+  display: inline-block;
+  text-align: left;
+}
+
+.custom-theme .el-date-editor.el-input,
+.custom-theme .el-date-editor.el-input__inner {
+  width: 220px;
+}
+
+.custom-theme .el-date-editor--daterange.el-input,
+.custom-theme .el-date-editor--daterange.el-input__inner,
+.custom-theme .el-date-editor--timerange.el-input,
+.custom-theme .el-date-editor--timerange.el-input__inner {
+  width: 350px;
+}
+
+.custom-theme .el-date-editor--datetimerange.el-input,
+.custom-theme .el-date-editor--datetimerange.el-input__inner {
+  width: 400px;
+}
+
+.custom-theme .el-date-editor .el-range__icon {
+  font-size: 14px;
+  margin-left: -5px;
+  color: #b4bccc;
+  float: left;
+  line-height: 32px;
+}
+
+.custom-theme .el-date-editor .el-range-input {
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  appearance: none;
+  border: none;
+  outline: 0;
+  display: inline-block;
+  height: 100%;
+  margin: 0;
+  padding: 0;
+  width: 39%;
+  text-align: center;
+  font-size: 14px;
+  color: #5a5e66;
+}
+
+.custom-theme .el-date-editor .el-range-input::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-date-editor .el-range-input:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-date-editor .el-range-input::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-date-editor .el-range-input::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-date-editor .el-range-separator {
+  display: inline-block;
+  height: 100%;
+  padding: 0 5px;
+  margin: 0;
+  text-align: center;
+  line-height: 32px;
+  font-size: 14px;
+  width: 5%;
+  color: #2d2f33;
+}
+
+.custom-theme .el-date-editor .el-range__close-icon {
+  font-size: 14px;
+  color: #b4bccc;
+  width: 25px;
+  display: inline-block;
+  float: right;
+  line-height: 32px;
+}
+
+.custom-theme .el-range-editor.el-input__inner {
+  padding: 3px 10px;
+}
+
+.custom-theme .el-range-editor.is-active {
+  border-color: #262729;
+}
+
+.custom-theme .el-range-editor.is-active:hover {
+  border-color: #262729;
+}
+
+.custom-theme .el-range-editor--medium.el-input__inner {
+  height: 36px;
+}
+
+.custom-theme .el-range-editor--medium .el-range-separator {
+  line-height: 28px;
+  font-size: 14px;
+}
+
+.custom-theme .el-range-editor--medium .el-range-input {
+  font-size: 14px;
+}
+
+.custom-theme .el-range-editor--medium .el-range__close-icon,
+.custom-theme .el-range-editor--medium .el-range__icon {
+  line-height: 28px;
+}
+
+.custom-theme .el-range-editor--small.el-input__inner {
+  height: 32px;
+}
+
+.custom-theme .el-range-editor--small .el-range-separator {
+  line-height: 24px;
+  font-size: 13px;
+}
+
+.custom-theme .el-range-editor--small .el-range-input {
+  font-size: 13px;
+}
+
+.custom-theme .el-range-editor--small .el-range__close-icon,
+.custom-theme .el-range-editor--small .el-range__icon {
+  line-height: 24px;
+}
+
+.custom-theme .el-range-editor--mini.el-input__inner {
+  height: 28px;
+}
+
+.custom-theme .el-range-editor--mini .el-range-separator {
+  line-height: 20px;
+  font-size: 12px;
+}
+
+.custom-theme .el-range-editor--mini .el-range-input {
+  font-size: 12px;
+}
+
+.custom-theme .el-range-editor--mini .el-range__close-icon,
+.custom-theme .el-range-editor--mini .el-range__icon {
+  line-height: 20px;
+}
+
+.custom-theme .el-range-editor.is-disabled {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-range-editor.is-disabled:focus,
+.custom-theme .el-range-editor.is-disabled:hover {
+  border-color: #dfe4ed;
+}
+
+.custom-theme .el-range-editor.is-disabled input {
+  background-color: #f5f7fa;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-range-editor.is-disabled input::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-range-editor.is-disabled input:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-range-editor.is-disabled input::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-range-editor.is-disabled input::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-range-editor.is-disabled .el-range-separator {
+  color: #b4bccc;
+}
+
+.custom-theme .el-time-spinner.has-seconds .el-time-spinner__wrapper {
+  width: 33.3%;
+}
+
+.custom-theme .el-time-spinner.has-seconds .el-time-spinner__wrapper:nth-child(2) {
+  margin-left: 1%;
+}
+
+.custom-theme .el-time-spinner__wrapper {
+  max-height: 190px;
+  overflow: auto;
+  display: inline-block;
+  width: 50%;
+  vertical-align: top;
+  position: relative;
+}
+
+.custom-theme .el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default) {
+  padding-bottom: 15px;
+}
+
+.custom-theme .el-time-spinner__wrapper.is-arrow {
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  text-align: center;
+  overflow: hidden;
+}
+
+.custom-theme .el-time-spinner__wrapper.is-arrow .el-time-spinner__list {
+  -webkit-transform: translateY(-32px);
+  transform: translateY(-32px);
+}
+
+.custom-theme .el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active) {
+  background: #fff;
+  cursor: default;
+}
+
+.custom-theme .el-time-spinner__arrow {
+  font-size: 12px;
+  color: #878d99;
+  position: absolute;
+  left: 0;
+  width: 100%;
+  z-index: 1;
+  text-align: center;
+  height: 30px;
+  line-height: 30px;
+  cursor: pointer;
+}
+
+.custom-theme .el-time-spinner__arrow:hover {
+  color: #262729;
+}
+
+.custom-theme .el-time-spinner__arrow.el-icon-arrow-up {
+  top: 10px;
+}
+
+.custom-theme .el-time-spinner__arrow.el-icon-arrow-down {
+  bottom: 10px;
+}
+
+.custom-theme .el-time-spinner__input.el-input {
+  width: 70%;
+}
+
+.custom-theme .el-time-spinner__input.el-input .el-input__inner {
+  padding: 0;
+  text-align: center;
+}
+
+.custom-theme .el-time-spinner__list {
+  padding: 0;
+  margin: 0;
+  list-style: none;
+  text-align: center;
+}
+
+.custom-theme .el-time-spinner__list::after,
+.custom-theme .el-time-spinner__list::before {
+  content: '';
+  display: block;
+  width: 100%;
+  height: 80px;
+}
+
+.custom-theme .el-time-spinner__item {
+  height: 32px;
+  line-height: 32px;
+  font-size: 12px;
+  color: #5a5e66;
+}
+
+.custom-theme .el-time-spinner__item:hover:not(.disabled):not(.active) {
+  background: #f5f7fa;
+  cursor: pointer;
+}
+
+.custom-theme .el-time-spinner__item.active:not(.disabled) {
+  color: #2d2f33;
+  font-weight: 700;
+}
+
+.custom-theme .el-time-spinner__item.disabled {
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-time-panel {
+  margin: 5px 0;
+  border: solid 1px #dfe4ed;
+  background-color: #fff;
+  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  border-radius: 2px;
+  position: absolute;
+  width: 180px;
+  left: 0;
+  z-index: 1000;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.custom-theme .el-time-panel__content {
+  font-size: 0;
+  position: relative;
+  overflow: hidden;
+}
+
+.custom-theme .el-time-panel__content::after,
+.custom-theme .el-time-panel__content::before {
+  content: '';
+  top: 50%;
+  position: absolute;
+  margin-top: -15px;
+  height: 32px;
+  z-index: -1;
+  left: 0;
+  right: 0;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  padding-top: 6px;
+  text-align: left;
+  border-top: 1px solid #dfe4ed;
+  border-bottom: 1px solid #dfe4ed;
+}
+
+.custom-theme .el-time-panel__content::after {
+  left: 50%;
+  margin-left: 12%;
+  margin-right: 12%;
+}
+
+.custom-theme .el-time-panel__content::before {
+  padding-left: 50%;
+  margin-right: 12%;
+  margin-left: 12%;
+}
+
+.custom-theme .el-time-panel__content.has-seconds::after {
+  left: calc(100% / 3 * 2);
+}
+
+.custom-theme .el-time-panel__content.has-seconds::before {
+  padding-left: calc(100% / 3);
+}
+
+.custom-theme .el-time-panel__footer {
+  border-top: 1px solid #e4e4e4;
+  padding: 4px;
+  height: 36px;
+  line-height: 25px;
+  text-align: right;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-time-panel__btn {
+  border: none;
+  line-height: 28px;
+  padding: 0 5px;
+  margin: 0 5px;
+  cursor: pointer;
+  background-color: transparent;
+  outline: 0;
+  font-size: 12px;
+  color: #2d2f33;
+}
+
+.custom-theme .el-time-panel__btn.confirm {
+  font-weight: 800;
+  color: #262729;
+}
+
+.custom-theme .el-time-panel .popper__arrow {
+  -webkit-transform: translateX(-400%);
+  transform: translateX(-400%);
+}
+
+.custom-theme .el-input {
+  position: relative;
+  font-size: 14px;
+  display: inline-block;
+  width: 100%;
+}
+
+.custom-theme .el-input::-webkit-scrollbar {
+  z-index: 11;
+  width: 6px;
+}
+
+.custom-theme .el-input::-webkit-scrollbar:horizontal {
+  height: 6px;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-thumb {
+  border-radius: 5px;
+  width: 6px;
+  background: #b4bccc;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-corner {
+  background: #fff;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-track {
+  background: #fff;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-track-piece {
+  background: #fff;
+  width: 6px;
+}
+
+.custom-theme .el-input__inner {
+  -webkit-appearance: none;
+  background-color: #fff;
+  background-image: none;
+  border-radius: 4px;
+  border: 1px solid #d8dce5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  color: #5a5e66;
+  display: inline-block;
+  font-size: inherit;
+  height: 40px;
+  line-height: 1;
+  outline: 0;
+  padding: 0 15px;
+  -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  width: 100%;
+}
+
+.custom-theme .el-input__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:hover {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:focus {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-input__suffix {
+  position: absolute;
+  height: 100%;
+  right: 5px;
+  top: 0;
+  text-align: center;
+  color: #b4bccc;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+  pointer-events: none;
+}
+
+.custom-theme .el-input__suffix-inner {
+  pointer-events: all;
+}
+
+.custom-theme .el-input__prefix {
+  position: absolute;
+  height: 100%;
+  left: 5px;
+  top: 0;
+  text-align: center;
+  color: #b4bccc;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+}
+
+.custom-theme .el-input__icon {
+  height: 100%;
+  width: 25px;
+  text-align: center;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+  line-height: 40px;
+}
+
+.custom-theme .el-input__icon:after {
+  content: '';
+  height: 100%;
+  width: 0;
+  display: inline-block;
+  vertical-align: middle;
+}
+
+.custom-theme .el-input__validateIcon {
+  pointer-events: none;
+}
+
+.custom-theme .el-input.is-active .el-input__inner {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__icon {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input--suffix .el-input__inner {
+  padding-right: 30px;
+}
+
+.custom-theme .el-input--prefix .el-input__inner {
+  padding-left: 30px;
+}
+
+.custom-theme .el-input--medium {
+  font-size: 14px;
+}
+
+.custom-theme .el-input--medium .el-input__inner {
+  height: 36px;
+}
+
+.custom-theme .el-input--medium .el-input__icon {
+  line-height: 36px;
+}
+
+.custom-theme .el-input--small {
+  font-size: 13px;
+}
+
+.custom-theme .el-input--small .el-input__inner {
+  height: 32px;
+}
+
+.custom-theme .el-input--small .el-input__icon {
+  line-height: 32px;
+}
+
+.custom-theme .el-input--mini {
+  font-size: 12px;
+}
+
+.custom-theme .el-input--mini .el-input__inner {
+  height: 28px;
+}
+
+.custom-theme .el-input--mini .el-input__icon {
+  line-height: 28px;
+}
+
+.custom-theme .el-input-group {
+  line-height: normal;
+  display: inline-table;
+  width: 100%;
+  border-collapse: separate;
+}
+
+.custom-theme .el-input-group > .el-input__inner {
+  vertical-align: middle;
+  display: table-cell;
+}
+
+.custom-theme .el-input-group__append,
+.custom-theme .el-input-group__prepend {
+  background-color: #f5f7fa;
+  color: #0a76a4;
+  vertical-align: middle;
+  display: table-cell;
+  position: relative;
+  border: 1px solid #d8dce5;
+  border-radius: 4px;
+  padding: 0 20px;
+  width: 1px;
+  white-space: nowrap;
+}
+
+.custom-theme .el-input-group__append:focus,
+.custom-theme .el-input-group__prepend:focus {
+  outline: 0;
+}
+
+.custom-theme .el-input-group__append .el-button,
+.custom-theme .el-input-group__append .el-select,
+.custom-theme .el-input-group__prepend .el-button,
+.custom-theme .el-input-group__prepend .el-select {
+  display: inline-block;
+  margin: -20px;
+}
+
+.custom-theme .el-input-group__append button.el-button,
+.custom-theme .el-input-group__append div.el-select .el-input__inner,
+.custom-theme .el-input-group__append div.el-select:hover .el-input__inner,
+.custom-theme .el-input-group__prepend button.el-button,
+.custom-theme .el-input-group__prepend div.el-select .el-input__inner,
+.custom-theme .el-input-group__prepend div.el-select:hover .el-input__inner {
+  border-color: transparent;
+  background-color: transparent;
+  color: inherit;
+  border-top: 0;
+  border-bottom: 0;
+}
+
+.custom-theme .el-input-group__append .el-button,
+.custom-theme .el-input-group__append .el-input,
+.custom-theme .el-input-group__prepend .el-button,
+.custom-theme .el-input-group__prepend .el-input {
+  font-size: inherit;
+}
+
+.custom-theme .el-input-group__prepend {
+  border-right: 0;
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-input-group__append {
+  border-left: 0;
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-input-group--prepend .el-input__inner {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-input-group--append .el-input__inner {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-textarea {
+  display: inline-block;
+  width: 100%;
+  vertical-align: bottom;
+}
+
+.custom-theme .el-textarea__inner {
+  display: block;
+  resize: vertical;
+  padding: 5px 15px;
+  line-height: 1.5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 100%;
+  font-size: 14px;
+  color: #5a5e66;
+  background-color: #fff;
+  background-image: none;
+  border: 1px solid #d8dce5;
+  border-radius: 4px;
+  -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+}
+
+.custom-theme .el-textarea__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:hover {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:focus {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-scrollbar {
+  overflow: hidden;
+  position: relative;
+}
+
+.custom-theme .el-scrollbar:active > .el-scrollbar__bar,
+.custom-theme .el-scrollbar:focus > .el-scrollbar__bar,
+.custom-theme .el-scrollbar:hover > .el-scrollbar__bar {
+  opacity: 1;
+  -webkit-transition: opacity 340ms ease-out;
+  transition: opacity 340ms ease-out;
+}
+
+.custom-theme .el-scrollbar__wrap {
+  overflow: scroll;
+  height: 100%;
+}
+
+.custom-theme .el-scrollbar__wrap--hidden-default::-webkit-scrollbar {
+  width: 0;
+  height: 0;
+}
+
+.custom-theme .el-scrollbar__thumb {
+  position: relative;
+  display: block;
+  width: 0;
+  height: 0;
+  cursor: pointer;
+  border-radius: inherit;
+  background-color: rgba(135, 141, 153, 0.3);
+  -webkit-transition: 0.3s background-color;
+  transition: 0.3s background-color;
+}
+
+.custom-theme .el-scrollbar__thumb:hover {
+  background-color: rgba(135, 141, 153, 0.5);
+}
+
+.custom-theme .el-scrollbar__bar {
+  position: absolute;
+  right: 2px;
+  bottom: 2px;
+  z-index: 1;
+  border-radius: 4px;
+  opacity: 0;
+  -webkit-transition: opacity 120ms ease-out;
+  transition: opacity 120ms ease-out;
+}
+
+.custom-theme .el-scrollbar__bar.is-vertical {
+  width: 6px;
+  top: 2px;
+}
+
+.custom-theme .el-scrollbar__bar.is-vertical > div {
+  width: 100%;
+}
+
+.custom-theme .el-scrollbar__bar.is-horizontal {
+  height: 6px;
+  left: 2px;
+}
+
+.custom-theme .el-scrollbar__bar.is-horizontal > div {
+  height: 100%;
+}
+
+.custom-theme .el-popper .popper__arrow,
+.custom-theme .el-popper .popper__arrow::after {
+  position: absolute;
+  display: block;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+
+.custom-theme .el-popper .popper__arrow {
+  border-width: 6px;
+  -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
+  filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
+}
+
+.custom-theme .el-popper .popper__arrow::after {
+  content: ' ';
+  border-width: 6px;
+}
+
+.custom-theme .el-popper[x-placement^='top'] {
+  margin-bottom: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='top'] .popper__arrow {
+  bottom: -6px;
+  left: 50%;
+  margin-right: 3px;
+  border-top-color: #e6ebf5;
+  border-bottom-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='top'] .popper__arrow::after {
+  bottom: 1px;
+  margin-left: -6px;
+  border-top-color: #fff;
+  border-bottom-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] {
+  margin-top: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] .popper__arrow {
+  top: -6px;
+  left: 50%;
+  margin-right: 3px;
+  border-top-width: 0;
+  border-bottom-color: #e6ebf5;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] .popper__arrow::after {
+  top: 1px;
+  margin-left: -6px;
+  border-top-width: 0;
+  border-bottom-color: #fff;
+}
+
+.custom-theme .el-popper[x-placement^='right'] {
+  margin-left: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='right'] .popper__arrow {
+  top: 50%;
+  left: -6px;
+  margin-bottom: 3px;
+  border-right-color: #e6ebf5;
+  border-left-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='right'] .popper__arrow::after {
+  bottom: -6px;
+  left: 1px;
+  border-right-color: #fff;
+  border-left-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='left'] {
+  margin-right: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='left'] .popper__arrow {
+  top: 50%;
+  right: -6px;
+  margin-bottom: 3px;
+  border-right-width: 0;
+  border-left-color: #e6ebf5;
+}
+
+.custom-theme .el-popper[x-placement^='left'] .popper__arrow::after {
+  right: 1px;
+  bottom: -6px;
+  margin-left: -6px;
+  border-right-width: 0;
+  border-left-color: #fff;
+}
+
+.custom-theme .el-popper .popper__arrow,
+.custom-theme .el-popper .popper__arrow::after {
+  position: absolute;
+  display: block;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+
+.custom-theme .el-popper .popper__arrow {
+  border-width: 6px;
+  -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
+  filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
+}
+
+.custom-theme .el-popper .popper__arrow::after {
+  content: ' ';
+  border-width: 6px;
+}
+
+.custom-theme .el-popper[x-placement^='top'] {
+  margin-bottom: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='top'] .popper__arrow {
+  bottom: -6px;
+  left: 50%;
+  margin-right: 3px;
+  border-top-color: #e6ebf5;
+  border-bottom-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='top'] .popper__arrow::after {
+  bottom: 1px;
+  margin-left: -6px;
+  border-top-color: #fff;
+  border-bottom-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] {
+  margin-top: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] .popper__arrow {
+  top: -6px;
+  left: 50%;
+  margin-right: 3px;
+  border-top-width: 0;
+  border-bottom-color: #e6ebf5;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] .popper__arrow::after {
+  top: 1px;
+  margin-left: -6px;
+  border-top-width: 0;
+  border-bottom-color: #fff;
+}
+
+.custom-theme .el-popper[x-placement^='right'] {
+  margin-left: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='right'] .popper__arrow {
+  top: 50%;
+  left: -6px;
+  margin-bottom: 3px;
+  border-right-color: #e6ebf5;
+  border-left-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='right'] .popper__arrow::after {
+  bottom: -6px;
+  left: 1px;
+  border-right-color: #fff;
+  border-left-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='left'] {
+  margin-right: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='left'] .popper__arrow {
+  top: 50%;
+  right: -6px;
+  margin-bottom: 3px;
+  border-right-width: 0;
+  border-left-color: #e6ebf5;
+}
+
+.custom-theme .el-popper[x-placement^='left'] .popper__arrow::after {
+  right: 1px;
+  bottom: -6px;
+  margin-left: -6px;
+  border-right-width: 0;
+  border-left-color: #fff;
+}
+
+.custom-theme .el-popover {
+  position: absolute;
+  background: #fff;
+  min-width: 150px;
+  border-radius: 4px;
+  border: 1px solid #e6ebf5;
+  padding: 12px;
+  z-index: 2000;
+  color: #5a5e66;
+  line-height: 1.4;
+  text-align: justify;
+  word-break: break-all;
+  font-size: 14px;
+  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+}
+
+.custom-theme .el-popover--plain {
+  padding: 18px 20px;
+}
+
+.custom-theme .el-popover__title {
+  color: #2d2f33;
+  font-size: 16px;
+  line-height: 1;
+  margin-bottom: 12px;
+}
+
+.custom-theme .el-tooltip__popper {
+  position: absolute;
+  border-radius: 4px;
+  padding: 10px;
+  z-index: 2000;
+  font-size: 12px;
+  line-height: 1.2;
+}
+
+.custom-theme .el-tooltip__popper .popper__arrow,
+.custom-theme .el-tooltip__popper .popper__arrow::after {
+  position: absolute;
+  display: block;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+
+.custom-theme .el-tooltip__popper .popper__arrow {
+  border-width: 6px;
+}
+
+.custom-theme .el-tooltip__popper .popper__arrow::after {
+  content: ' ';
+  border-width: 5px;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='top'] {
+  margin-bottom: 12px;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='top'] .popper__arrow {
+  bottom: -6px;
+  border-top-color: #2d2f33;
+  border-bottom-width: 0;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='top'] .popper__arrow::after {
+  bottom: 1px;
+  margin-left: -5px;
+  border-top-color: #2d2f33;
+  border-bottom-width: 0;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='bottom'] {
+  margin-top: 12px;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='bottom'] .popper__arrow {
+  top: -6px;
+  border-top-width: 0;
+  border-bottom-color: #2d2f33;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='bottom'] .popper__arrow::after {
+  top: 1px;
+  margin-left: -5px;
+  border-top-width: 0;
+  border-bottom-color: #2d2f33;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='right'] {
+  margin-left: 12px;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='right'] .popper__arrow {
+  left: -6px;
+  border-right-color: #2d2f33;
+  border-left-width: 0;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='right'] .popper__arrow::after {
+  bottom: -5px;
+  left: 1px;
+  border-right-color: #2d2f33;
+  border-left-width: 0;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='left'] {
+  margin-right: 12px;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='left'] .popper__arrow {
+  right: -6px;
+  border-right-width: 0;
+  border-left-color: #2d2f33;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='left'] .popper__arrow::after {
+  right: 1px;
+  bottom: -5px;
+  margin-left: -5px;
+  border-right-width: 0;
+  border-left-color: #2d2f33;
+}
+
+.custom-theme .el-tooltip__popper.is-dark {
+  background: #2d2f33;
+  color: #fff;
+}
+
+.custom-theme .el-tooltip__popper.is-light {
+  background: #fff;
+  border: 1px solid #2d2f33;
+}
+
+.custom-theme .el-tooltip__popper.is-light[x-placement^='top'] .popper__arrow {
+  border-top-color: #2d2f33;
+}
+
+.custom-theme .el-tooltip__popper.is-light[x-placement^='top'] .popper__arrow::after {
+  border-top-color: #fff;
+}
+
+.custom-theme .el-tooltip__popper.is-light[x-placement^='bottom'] .popper__arrow {
+  border-bottom-color: #2d2f33;
+}
+
+.custom-theme .el-tooltip__popper.is-light[x-placement^='bottom'] .popper__arrow::after {
+  border-bottom-color: #fff;
+}
+
+.custom-theme .el-tooltip__popper.is-light[x-placement^='left'] .popper__arrow {
+  border-left-color: #2d2f33;
+}
+
+.custom-theme .el-tooltip__popper.is-light[x-placement^='left'] .popper__arrow::after {
+  border-left-color: #fff;
+}
+
+.custom-theme .el-tooltip__popper.is-light[x-placement^='right'] .popper__arrow {
+  border-right-color: #2d2f33;
+}
+
+.custom-theme .el-tooltip__popper.is-light[x-placement^='right'] .popper__arrow::after {
+  border-right-color: #fff;
+}
+
+.custom-theme .v-modal-enter {
+  -webkit-animation: v-modal-in 0.2s ease;
+  animation: v-modal-in 0.2s ease;
+}
+
+.custom-theme .v-modal-leave {
+  -webkit-animation: v-modal-out 0.2s ease forwards;
+  animation: v-modal-out 0.2s ease forwards;
+}
+
+@keyframes v-modal-in {
+  0% {
+    opacity: 0;
+  }
+}
+
+@keyframes v-modal-out {
+  100% {
+    opacity: 0;
+  }
+}
+
+.custom-theme .v-modal {
+  position: fixed;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  opacity: 0.5;
+  background: #000;
+}
+
+.custom-theme .el-button {
+  display: inline-block;
+  line-height: 1;
+  white-space: nowrap;
+  cursor: pointer;
+  background: #fff;
+  border: 1px solid #d8dce5;
+  border-color: #d8dce5;
+  color: #5a5e66;
+  -webkit-appearance: none;
+  text-align: center;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  outline: 0;
+  margin: 0;
+  -webkit-transition: 0.1s;
+  transition: 0.1s;
+  font-weight: 500;
+  -moz-user-select: none;
+  -webkit-user-select: none;
+  -ms-user-select: none;
+  padding: 12px 20px;
+  font-size: 14px;
+  border-radius: 4px;
+}
+
+.custom-theme .el-button + .el-button {
+  margin-left: 10px;
+}
+
+.custom-theme .el-button.is-round {
+  padding: 12px 20px;
+}
+
+.custom-theme .el-button:focus,
+.custom-theme .el-button:hover {
+  color: #262729;
+  border-color: #bebebf;
+  background-color: #e9e9ea;
+}
+
+.custom-theme .el-button:active {
+  color: #222325;
+  border-color: #222325;
+  outline: 0;
+}
+
+.custom-theme .el-button::-moz-focus-inner {
+  border: 0;
+}
+
+.custom-theme .el-button [class*='el-icon-'] + span {
+  margin-left: 5px;
+}
+
+.custom-theme .el-button.is-plain:focus,
+.custom-theme .el-button.is-plain:hover {
+  background: #fff;
+  border-color: #262729;
+  color: #262729;
+}
+
+.custom-theme .el-button.is-plain:active {
+  background: #fff;
+  border-color: #222325;
+  color: #222325;
+  outline: 0;
+}
+
+.custom-theme .el-button.is-active {
+  color: #222325;
+  border-color: #222325;
+}
+
+.custom-theme .el-button.is-disabled,
+.custom-theme .el-button.is-disabled:focus,
+.custom-theme .el-button.is-disabled:hover {
+  color: #b4bccc;
+  cursor: not-allowed;
+  background-image: none;
+  background-color: #fff;
+  border-color: #e6ebf5;
+}
+
+.custom-theme .el-button.is-disabled.el-button--text {
+  background-color: transparent;
+}
+
+.custom-theme .el-button.is-disabled.is-plain,
+.custom-theme .el-button.is-disabled.is-plain:focus,
+.custom-theme .el-button.is-disabled.is-plain:hover {
+  background-color: #fff;
+  border-color: #e6ebf5;
+  color: #b4bccc;
+}
+
+.custom-theme .el-button.is-loading {
+  position: relative;
+  pointer-events: none;
+}
+
+.custom-theme .el-button.is-loading:before {
+  pointer-events: none;
+  content: '';
+  position: absolute;
+  left: -1px;
+  top: -1px;
+  right: -1px;
+  bottom: -1px;
+  border-radius: inherit;
+  background-color: rgba(255, 255, 255, 0.35);
+}
+
+.custom-theme .el-button.is-round {
+  border-radius: 20px;
+  padding: 12px 23px;
+}
+
+.custom-theme .el-button--primary {
+  color: #fff;
+  background-color: #262729;
+  border-color: #262729;
+}
+
+.custom-theme .el-button--primary:focus,
+.custom-theme .el-button--primary:hover {
+  background: #515254;
+  border-color: #515254;
+  color: #fff;
+}
+
+.custom-theme .el-button--primary:active {
+  background: #222325;
+  border-color: #222325;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--primary.is-active {
+  background: #222325;
+  border-color: #222325;
+  color: #fff;
+}
+
+.custom-theme .el-button--primary.is-disabled,
+.custom-theme .el-button--primary.is-disabled:active,
+.custom-theme .el-button--primary.is-disabled:focus,
+.custom-theme .el-button--primary.is-disabled:hover {
+  color: #fff;
+  background-color: #939394;
+  border-color: #939394;
+}
+
+.custom-theme .el-button--primary.is-plain {
+  color: #262729;
+  background: #e9e9ea;
+  border-color: #a8a9a9;
+}
+
+.custom-theme .el-button--primary.is-plain:focus,
+.custom-theme .el-button--primary.is-plain:hover {
+  background: #262729;
+  border-color: #262729;
+  color: #fff;
+}
+
+.custom-theme .el-button--primary.is-plain:active {
+  background: #222325;
+  border-color: #222325;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--primary.is-plain.is-disabled,
+.custom-theme .el-button--primary.is-plain.is-disabled:active,
+.custom-theme .el-button--primary.is-plain.is-disabled:focus,
+.custom-theme .el-button--primary.is-plain.is-disabled:hover {
+  color: #7d7d7f;
+  background-color: #e9e9ea;
+  border-color: #d4d4d4;
+}
+
+.custom-theme .el-button--success {
+  color: #fff;
+  background-color: #409167;
+  border-color: #409167;
+}
+
+.custom-theme .el-button--success:focus,
+.custom-theme .el-button--success:hover {
+  background: #66a785;
+  border-color: #66a785;
+  color: #fff;
+}
+
+.custom-theme .el-button--success:active {
+  background: #3a835d;
+  border-color: #3a835d;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--success.is-active {
+  background: #3a835d;
+  border-color: #3a835d;
+  color: #fff;
+}
+
+.custom-theme .el-button--success.is-disabled,
+.custom-theme .el-button--success.is-disabled:active,
+.custom-theme .el-button--success.is-disabled:focus,
+.custom-theme .el-button--success.is-disabled:hover {
+  color: #fff;
+  background-color: #a0c8b3;
+  border-color: #a0c8b3;
+}
+
+.custom-theme .el-button--success.is-plain {
+  color: #409167;
+  background: #ecf4f0;
+  border-color: #b3d3c2;
+}
+
+.custom-theme .el-button--success.is-plain:focus,
+.custom-theme .el-button--success.is-plain:hover {
+  background: #409167;
+  border-color: #409167;
+  color: #fff;
+}
+
+.custom-theme .el-button--success.is-plain:active {
+  background: #3a835d;
+  border-color: #3a835d;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--success.is-plain.is-disabled,
+.custom-theme .el-button--success.is-plain.is-disabled:active,
+.custom-theme .el-button--success.is-plain.is-disabled:focus,
+.custom-theme .el-button--success.is-plain.is-disabled:hover {
+  color: #8cbda4;
+  background-color: #ecf4f0;
+  border-color: #d9e9e1;
+}
+
+.custom-theme .el-button--warning {
+  color: #fff;
+  background-color: #9da408;
+  border-color: #9da408;
+}
+
+.custom-theme .el-button--warning:focus,
+.custom-theme .el-button--warning:hover {
+  background: #b1b639;
+  border-color: #b1b639;
+  color: #fff;
+}
+
+.custom-theme .el-button--warning:active {
+  background: #8d9407;
+  border-color: #8d9407;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--warning.is-active {
+  background: #8d9407;
+  border-color: #8d9407;
+  color: #fff;
+}
+
+.custom-theme .el-button--warning.is-disabled,
+.custom-theme .el-button--warning.is-disabled:active,
+.custom-theme .el-button--warning.is-disabled:focus,
+.custom-theme .el-button--warning.is-disabled:hover {
+  color: #fff;
+  background-color: #ced284;
+  border-color: #ced284;
+}
+
+.custom-theme .el-button--warning.is-plain {
+  color: #9da408;
+  background: #f5f6e6;
+  border-color: #d8db9c;
+}
+
+.custom-theme .el-button--warning.is-plain:focus,
+.custom-theme .el-button--warning.is-plain:hover {
+  background: #9da408;
+  border-color: #9da408;
+  color: #fff;
+}
+
+.custom-theme .el-button--warning.is-plain:active {
+  background: #8d9407;
+  border-color: #8d9407;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--warning.is-plain.is-disabled,
+.custom-theme .el-button--warning.is-plain.is-disabled:active,
+.custom-theme .el-button--warning.is-plain.is-disabled:focus,
+.custom-theme .el-button--warning.is-plain.is-disabled:hover {
+  color: #c4c86b;
+  background-color: #f5f6e6;
+  border-color: #ebedce;
+}
+
+.custom-theme .el-button--danger {
+  color: #fff;
+  background-color: #b3450e;
+  border-color: #b3450e;
+}
+
+.custom-theme .el-button--danger:focus,
+.custom-theme .el-button--danger:hover {
+  background: #c26a3e;
+  border-color: #c26a3e;
+  color: #fff;
+}
+
+.custom-theme .el-button--danger:active {
+  background: #a13e0d;
+  border-color: #a13e0d;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--danger.is-active {
+  background: #a13e0d;
+  border-color: #a13e0d;
+  color: #fff;
+}
+
+.custom-theme .el-button--danger.is-disabled,
+.custom-theme .el-button--danger.is-disabled:active,
+.custom-theme .el-button--danger.is-disabled:focus,
+.custom-theme .el-button--danger.is-disabled:hover {
+  color: #fff;
+  background-color: #d9a287;
+  border-color: #d9a287;
+}
+
+.custom-theme .el-button--danger.is-plain {
+  color: #b3450e;
+  background: #f7ece7;
+  border-color: #e1b59f;
+}
+
+.custom-theme .el-button--danger.is-plain:focus,
+.custom-theme .el-button--danger.is-plain:hover {
+  background: #b3450e;
+  border-color: #b3450e;
+  color: #fff;
+}
+
+.custom-theme .el-button--danger.is-plain:active {
+  background: #a13e0d;
+  border-color: #a13e0d;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--danger.is-plain.is-disabled,
+.custom-theme .el-button--danger.is-plain.is-disabled:active,
+.custom-theme .el-button--danger.is-plain.is-disabled:focus,
+.custom-theme .el-button--danger.is-plain.is-disabled:hover {
+  color: #d18f6e;
+  background-color: #f7ece7;
+  border-color: #f0dacf;
+}
+
+.custom-theme .el-button--info {
+  color: #fff;
+  background-color: #0a76a4;
+  border-color: #0a76a4;
+}
+
+.custom-theme .el-button--info:focus,
+.custom-theme .el-button--info:hover {
+  background: #3b91b6;
+  border-color: #3b91b6;
+  color: #fff;
+}
+
+.custom-theme .el-button--info:active {
+  background: #096a94;
+  border-color: #096a94;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--info.is-active {
+  background: #096a94;
+  border-color: #096a94;
+  color: #fff;
+}
+
+.custom-theme .el-button--info.is-disabled,
+.custom-theme .el-button--info.is-disabled:active,
+.custom-theme .el-button--info.is-disabled:focus,
+.custom-theme .el-button--info.is-disabled:hover {
+  color: #fff;
+  background-color: #85bbd2;
+  border-color: #85bbd2;
+}
+
+.custom-theme .el-button--info.is-plain {
+  color: #0a76a4;
+  background: #e7f1f6;
+  border-color: #9dc8db;
+}
+
+.custom-theme .el-button--info.is-plain:focus,
+.custom-theme .el-button--info.is-plain:hover {
+  background: #0a76a4;
+  border-color: #0a76a4;
+  color: #fff;
+}
+
+.custom-theme .el-button--info.is-plain:active {
+  background: #096a94;
+  border-color: #096a94;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--info.is-plain.is-disabled,
+.custom-theme .el-button--info.is-plain.is-disabled:active,
+.custom-theme .el-button--info.is-plain.is-disabled:focus,
+.custom-theme .el-button--info.is-plain.is-disabled:hover {
+  color: #6cadc8;
+  background-color: #e7f1f6;
+  border-color: #cee4ed;
+}
+
+.custom-theme .el-button--medium {
+  padding: 10px 20px;
+  font-size: 14px;
+  border-radius: 4px;
+}
+
+.custom-theme .el-button--medium.is-round {
+  padding: 10px 20px;
+}
+
+.custom-theme .el-button--small {
+  padding: 9px 15px;
+  font-size: 12px;
+  border-radius: 3px;
+}
+
+.custom-theme .el-button--small.is-round {
+  padding: 9px 15px;
+}
+
+.custom-theme .el-button--mini {
+  padding: 7px 15px;
+  font-size: 12px;
+  border-radius: 3px;
+}
+
+.custom-theme .el-button--mini.is-round {
+  padding: 7px 15px;
+}
+
+.custom-theme .el-button--text {
+  border: none;
+  color: #262729;
+  background: 0 0;
+  padding-left: 0;
+  padding-right: 0;
+}
+
+.custom-theme .el-button--text:focus,
+.custom-theme .el-button--text:hover {
+  color: #515254;
+  border-color: transparent;
+  background-color: transparent;
+}
+
+.custom-theme .el-button--text:active {
+  color: #222325;
+  border-color: transparent;
+  background-color: transparent;
+}
+
+.custom-theme .el-button-group {
+  display: inline-block;
+  vertical-align: middle;
+}
+
+.custom-theme .el-button-group::after,
+.custom-theme .el-button-group::before {
+  display: table;
+  content: '';
+}
+
+.custom-theme .el-button-group::after {
+  clear: both;
+}
+
+.custom-theme .el-button-group .el-button {
+  float: left;
+  position: relative;
+}
+
+.custom-theme .el-button-group .el-button + .el-button {
+  margin-left: 0;
+}
+
+.custom-theme .el-button-group .el-button:first-child {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-button-group .el-button:last-child {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-button-group .el-button:not(:first-child):not(:last-child) {
+  border-radius: 0;
+}
+
+.custom-theme .el-button-group .el-button:not(:last-child) {
+  margin-right: -1px;
+}
+
+.custom-theme .el-button-group .el-button:active,
+.custom-theme .el-button-group .el-button:focus,
+.custom-theme .el-button-group .el-button:hover {
+  z-index: 1;
+}
+
+.custom-theme .el-button-group .el-button.is-active {
+  z-index: 1;
+}
+
+.custom-theme .el-button-group .el-button--primary:first-child {
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--primary:last-child {
+  border-left-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--primary:not(:first-child):not(:last-child) {
+  border-left-color: rgba(255, 255, 255, 0.5);
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--success:first-child {
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--success:last-child {
+  border-left-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--success:not(:first-child):not(:last-child) {
+  border-left-color: rgba(255, 255, 255, 0.5);
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--warning:first-child {
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--warning:last-child {
+  border-left-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--warning:not(:first-child):not(:last-child) {
+  border-left-color: rgba(255, 255, 255, 0.5);
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--danger:first-child {
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--danger:last-child {
+  border-left-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--danger:not(:first-child):not(:last-child) {
+  border-left-color: rgba(255, 255, 255, 0.5);
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--info:first-child {
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--info:last-child {
+  border-left-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--info:not(:first-child):not(:last-child) {
+  border-left-color: rgba(255, 255, 255, 0.5);
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-input {
+  position: relative;
+  font-size: 14px;
+  display: inline-block;
+  width: 100%;
+}
+
+.custom-theme .el-input::-webkit-scrollbar {
+  z-index: 11;
+  width: 6px;
+}
+
+.custom-theme .el-input::-webkit-scrollbar:horizontal {
+  height: 6px;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-thumb {
+  border-radius: 5px;
+  width: 6px;
+  background: #b4bccc;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-corner {
+  background: #fff;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-track {
+  background: #fff;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-track-piece {
+  background: #fff;
+  width: 6px;
+}
+
+.custom-theme .el-input__inner {
+  -webkit-appearance: none;
+  background-color: #fff;
+  background-image: none;
+  border-radius: 4px;
+  border: 1px solid #d8dce5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  color: #5a5e66;
+  display: inline-block;
+  font-size: inherit;
+  height: 40px;
+  line-height: 1;
+  outline: 0;
+  padding: 0 15px;
+  -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  width: 100%;
+}
+
+.custom-theme .el-input__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:hover {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:focus {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-input__suffix {
+  position: absolute;
+  height: 100%;
+  right: 5px;
+  top: 0;
+  text-align: center;
+  color: #b4bccc;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+  pointer-events: none;
+}
+
+.custom-theme .el-input__suffix-inner {
+  pointer-events: all;
+}
+
+.custom-theme .el-input__prefix {
+  position: absolute;
+  height: 100%;
+  left: 5px;
+  top: 0;
+  text-align: center;
+  color: #b4bccc;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+}
+
+.custom-theme .el-input__icon {
+  height: 100%;
+  width: 25px;
+  text-align: center;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+  line-height: 40px;
+}
+
+.custom-theme .el-input__icon:after {
+  content: '';
+  height: 100%;
+  width: 0;
+  display: inline-block;
+  vertical-align: middle;
+}
+
+.custom-theme .el-input__validateIcon {
+  pointer-events: none;
+}
+
+.custom-theme .el-input.is-active .el-input__inner {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__icon {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input--suffix .el-input__inner {
+  padding-right: 30px;
+}
+
+.custom-theme .el-input--prefix .el-input__inner {
+  padding-left: 30px;
+}
+
+.custom-theme .el-input--medium {
+  font-size: 14px;
+}
+
+.custom-theme .el-input--medium .el-input__inner {
+  height: 36px;
+}
+
+.custom-theme .el-input--medium .el-input__icon {
+  line-height: 36px;
+}
+
+.custom-theme .el-input--small {
+  font-size: 13px;
+}
+
+.custom-theme .el-input--small .el-input__inner {
+  height: 32px;
+}
+
+.custom-theme .el-input--small .el-input__icon {
+  line-height: 32px;
+}
+
+.custom-theme .el-input--mini {
+  font-size: 12px;
+}
+
+.custom-theme .el-input--mini .el-input__inner {
+  height: 28px;
+}
+
+.custom-theme .el-input--mini .el-input__icon {
+  line-height: 28px;
+}
+
+.custom-theme .el-input-group {
+  line-height: normal;
+  display: inline-table;
+  width: 100%;
+  border-collapse: separate;
+}
+
+.custom-theme .el-input-group > .el-input__inner {
+  vertical-align: middle;
+  display: table-cell;
+}
+
+.custom-theme .el-input-group__append,
+.custom-theme .el-input-group__prepend {
+  background-color: #f5f7fa;
+  color: #0a76a4;
+  vertical-align: middle;
+  display: table-cell;
+  position: relative;
+  border: 1px solid #d8dce5;
+  border-radius: 4px;
+  padding: 0 20px;
+  width: 1px;
+  white-space: nowrap;
+}
+
+.custom-theme .el-input-group__append:focus,
+.custom-theme .el-input-group__prepend:focus {
+  outline: 0;
+}
+
+.custom-theme .el-input-group__append .el-button,
+.custom-theme .el-input-group__append .el-select,
+.custom-theme .el-input-group__prepend .el-button,
+.custom-theme .el-input-group__prepend .el-select {
+  display: inline-block;
+  margin: -20px;
+}
+
+.custom-theme .el-input-group__append button.el-button,
+.custom-theme .el-input-group__append div.el-select .el-input__inner,
+.custom-theme .el-input-group__append div.el-select:hover .el-input__inner,
+.custom-theme .el-input-group__prepend button.el-button,
+.custom-theme .el-input-group__prepend div.el-select .el-input__inner,
+.custom-theme .el-input-group__prepend div.el-select:hover .el-input__inner {
+  border-color: transparent;
+  background-color: transparent;
+  color: inherit;
+  border-top: 0;
+  border-bottom: 0;
+}
+
+.custom-theme .el-input-group__append .el-button,
+.custom-theme .el-input-group__append .el-input,
+.custom-theme .el-input-group__prepend .el-button,
+.custom-theme .el-input-group__prepend .el-input {
+  font-size: inherit;
+}
+
+.custom-theme .el-input-group__prepend {
+  border-right: 0;
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-input-group__append {
+  border-left: 0;
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-input-group--prepend .el-input__inner {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-input-group--append .el-input__inner {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-textarea {
+  display: inline-block;
+  width: 100%;
+  vertical-align: bottom;
+}
+
+.custom-theme .el-textarea__inner {
+  display: block;
+  resize: vertical;
+  padding: 5px 15px;
+  line-height: 1.5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 100%;
+  font-size: 14px;
+  color: #5a5e66;
+  background-color: #fff;
+  background-image: none;
+  border: 1px solid #d8dce5;
+  border-radius: 4px;
+  -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+}
+
+.custom-theme .el-textarea__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:hover {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:focus {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-message-box {
+  display: inline-block;
+  width: 420px;
+  padding-bottom: 10px;
+  vertical-align: middle;
+  background-color: #fff;
+  border-radius: 4px;
+  border: 1px solid #e6ebf5;
+  font-size: 18px;
+  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  text-align: left;
+  overflow: hidden;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden;
+}
+
+.custom-theme .el-message-box__wrapper {
+  position: fixed;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  text-align: center;
+}
+
+.custom-theme .el-message-box__wrapper::after {
+  content: '';
+  display: inline-block;
+  height: 100%;
+  width: 0;
+  vertical-align: middle;
+}
+
+.custom-theme .el-message-box__header {
+  position: relative;
+  padding: 15px;
+  padding-bottom: 10px;
+}
+
+.custom-theme .el-message-box__title {
+  padding-left: 0;
+  margin-bottom: 0;
+  font-size: 18px;
+  line-height: 1;
+  color: #2d2f33;
+}
+
+.custom-theme .el-message-box__headerbtn {
+  position: absolute;
+  top: 15px;
+  right: 15px;
+  padding: 0;
+  border: none;
+  outline: 0;
+  background: 0 0;
+  font-size: 16px;
+  cursor: pointer;
+}
+
+.custom-theme .el-message-box__headerbtn .el-message-box__close {
+  color: #0a76a4;
+}
+
+.custom-theme .el-message-box__headerbtn:focus .el-message-box__close,
+.custom-theme .el-message-box__headerbtn:hover .el-message-box__close {
+  color: #262729;
+}
+
+.custom-theme .el-message-box__content {
+  position: relative;
+  padding: 10px 15px;
+  color: #5a5e66;
+  font-size: 14px;
+}
+
+.custom-theme .el-message-box__input {
+  padding-top: 15px;
+}
+
+.custom-theme .el-message-box__input input.invalid {
+  border-color: #b3450e;
+}
+
+.custom-theme .el-message-box__input input.invalid:focus {
+  border-color: #b3450e;
+}
+
+.custom-theme .el-message-box__status {
+  position: absolute;
+  top: 50%;
+  -webkit-transform: translateY(-50%);
+  transform: translateY(-50%);
+  font-size: 24px !important;
+}
+
+.custom-theme .el-message-box__status::before {
+  padding-left: 1px;
+}
+
+.custom-theme .el-message-box__status + .el-message-box__message {
+  padding-left: 36px;
+  padding-right: 12px;
+}
+
+.custom-theme .el-message-box__status.el-icon-success {
+  color: #409167;
+}
+
+.custom-theme .el-message-box__status.el-icon-info {
+  color: #0a76a4;
+}
+
+.custom-theme .el-message-box__status.el-icon-warning {
+  color: #9da408;
+}
+
+.custom-theme .el-message-box__status.el-icon-error {
+  color: #b3450e;
+}
+
+.custom-theme .el-message-box__message {
+  margin: 0;
+}
+
+.custom-theme .el-message-box__message p {
+  margin: 0;
+  line-height: 24px;
+}
+
+.custom-theme .el-message-box__errormsg {
+  color: #b3450e;
+  font-size: 12px;
+  min-height: 18px;
+  margin-top: 2px;
+}
+
+.custom-theme .el-message-box__btns {
+  padding: 5px 15px 0;
+  text-align: right;
+}
+
+.custom-theme .el-message-box__btns button:nth-child(2) {
+  margin-left: 10px;
+}
+
+.custom-theme .el-message-box__btns-reverse {
+  -webkit-box-orient: horizontal;
+  -webkit-box-direction: reverse;
+  -ms-flex-direction: row-reverse;
+  flex-direction: row-reverse;
+}
+
+.custom-theme .el-message-box--center {
+  padding-bottom: 30px;
+}
+
+.custom-theme .el-message-box--center .el-message-box__header {
+  padding-top: 30px;
+}
+
+.custom-theme .el-message-box--center .el-message-box__title {
+  position: relative;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
+  -webkit-box-pack: center;
+  -ms-flex-pack: center;
+  justify-content: center;
+}
+
+.custom-theme .el-message-box--center .el-message-box__status {
+  position: relative;
+  top: auto;
+  padding-right: 5px;
+  text-align: center;
+  -webkit-transform: translateY(-1px);
+  transform: translateY(-1px);
+}
+
+.custom-theme .el-message-box--center .el-message-box__message {
+  margin-left: 0;
+}
+
+.custom-theme .el-message-box--center .el-message-box__btns,
+.custom-theme .el-message-box--center .el-message-box__content {
+  text-align: center;
+}
+
+.custom-theme .el-message-box--center .el-message-box__content {
+  padding-left: 27px;
+  padding-right: 27px;
+}
+
+.custom-theme .msgbox-fade-enter-active {
+  -webkit-animation: msgbox-fade-in 0.3s;
+  animation: msgbox-fade-in 0.3s;
+}
+
+.custom-theme .msgbox-fade-leave-active {
+  -webkit-animation: msgbox-fade-out 0.3s;
+  animation: msgbox-fade-out 0.3s;
+}
+
+@-webkit-keyframes msgbox-fade-in {
+  0% {
+    -webkit-transform: translate3d(0, -20px, 0);
+    transform: translate3d(0, -20px, 0);
+    opacity: 0;
+  }
+  100% {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+    opacity: 1;
+  }
+}
+
+@keyframes msgbox-fade-in {
+  0% {
+    -webkit-transform: translate3d(0, -20px, 0);
+    transform: translate3d(0, -20px, 0);
+    opacity: 0;
+  }
+  100% {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+    opacity: 1;
+  }
+}
+
+@-webkit-keyframes msgbox-fade-out {
+  0% {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+    opacity: 1;
+  }
+  100% {
+    -webkit-transform: translate3d(0, -20px, 0);
+    transform: translate3d(0, -20px, 0);
+    opacity: 0;
+  }
+}
+
+@keyframes msgbox-fade-out {
+  0% {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+    opacity: 1;
+  }
+  100% {
+    -webkit-transform: translate3d(0, -20px, 0);
+    transform: translate3d(0, -20px, 0);
+    opacity: 0;
+  }
+}
+
+.custom-theme .el-breadcrumb {
+  font-size: 14px;
+  line-height: 1;
+}
+
+.custom-theme .el-breadcrumb::after,
+.custom-theme .el-breadcrumb::before {
+  display: table;
+  content: '';
+}
+
+.custom-theme .el-breadcrumb::after {
+  clear: both;
+}
+
+.custom-theme .el-breadcrumb__separator {
+  margin: 0 9px;
+  font-weight: 700;
+  color: #b4bccc;
+}
+
+.custom-theme .el-breadcrumb__separator[class*='icon'] {
+  margin: 0 6px;
+  font-weight: 400;
+}
+
+.custom-theme .el-breadcrumb__item {
+  float: left;
+}
+
+.custom-theme .el-breadcrumb__inner,
+.custom-theme .el-breadcrumb__inner a {
+  font-weight: 700;
+  -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  color: #2d2f33;
+}
+
+.custom-theme .el-breadcrumb__inner a:hover,
+.custom-theme .el-breadcrumb__inner:hover {
+  color: #262729;
+  cursor: pointer;
+}
+
+.custom-theme .el-breadcrumb__item:last-child .el-breadcrumb__inner,
+.custom-theme .el-breadcrumb__item:last-child .el-breadcrumb__inner a,
+.custom-theme .el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,
+.custom-theme .el-breadcrumb__item:last-child .el-breadcrumb__inner:hover {
+  font-weight: 400;
+  color: #5a5e66;
+  cursor: text;
+}
+
+.custom-theme .el-breadcrumb__item:last-child .el-breadcrumb__separator {
+  display: none;
+}
+
+.custom-theme .el-form--label-left .el-form-item__label {
+  text-align: left;
+}
+
+.custom-theme .el-form--label-top .el-form-item__label {
+  float: none;
+  display: inline-block;
+  text-align: left;
+  padding: 0 0 10px 0;
+}
+
+.custom-theme .el-form--inline .el-form-item {
+  display: inline-block;
+  margin-right: 10px;
+  vertical-align: top;
+}
+
+.custom-theme .el-form--inline .el-form-item__label {
+  float: none;
+  display: inline-block;
+}
+
+.custom-theme .el-form--inline .el-form-item__content {
+  display: inline-block;
+  vertical-align: top;
+}
+
+.custom-theme .el-form--inline.el-form--label-top .el-form-item__content {
+  display: block;
+}
+
+.custom-theme .el-form-item {
+  margin-bottom: 22px;
+}
+
+.custom-theme .el-form-item::after,
+.custom-theme .el-form-item::before {
+  display: table;
+  content: '';
+}
+
+.custom-theme .el-form-item::after {
+  clear: both;
+}
+
+.custom-theme .el-form-item .el-form-item {
+  margin-bottom: 0;
+}
+
+.custom-theme .el-form-item .el-input__validateIcon {
+  display: none;
+}
+
+.custom-theme .el-form-item--medium .el-form-item__label {
+  line-height: 36px;
+}
+
+.custom-theme .el-form-item--medium .el-form-item__content {
+  line-height: 36px;
+}
+
+.custom-theme .el-form-item--small .el-form-item__label {
+  line-height: 32px;
+}
+
+.custom-theme .el-form-item--small .el-form-item__content {
+  line-height: 32px;
+}
+
+.custom-theme .el-form-item--small.el-form-item {
+  margin-bottom: 18px;
+}
+
+.custom-theme .el-form-item--small .el-form-item__error {
+  padding-top: 2px;
+}
+
+.custom-theme .el-form-item--mini .el-form-item__label {
+  line-height: 28px;
+}
+
+.custom-theme .el-form-item--mini .el-form-item__content {
+  line-height: 28px;
+}
+
+.custom-theme .el-form-item--mini.el-form-item {
+  margin-bottom: 18px;
+}
+
+.custom-theme .el-form-item--mini .el-form-item__error {
+  padding-top: 1px;
+}
+
+.custom-theme .el-form-item__label {
+  text-align: right;
+  vertical-align: middle;
+  float: left;
+  font-size: 14px;
+  color: #5a5e66;
+  line-height: 40px;
+  padding: 0 12px 0 0;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-form-item__content {
+  line-height: 40px;
+  position: relative;
+  font-size: 14px;
+}
+
+.custom-theme .el-form-item__content::after,
+.custom-theme .el-form-item__content::before {
+  display: table;
+  content: '';
+}
+
+.custom-theme .el-form-item__content::after {
+  clear: both;
+}
+
+.custom-theme .el-form-item__error {
+  color: #b3450e;
+  font-size: 12px;
+  line-height: 1;
+  padding-top: 4px;
+  position: absolute;
+  top: 100%;
+  left: 0;
+}
+
+.custom-theme .el-form-item__error--inline {
+  position: relative;
+  top: auto;
+  left: auto;
+  display: inline-block;
+  margin-left: 10px;
+}
+
+.custom-theme .el-form-item.is-required .el-form-item__label:before {
+  content: '*';
+  color: #b3450e;
+  margin-right: 4px;
+}
+
+.custom-theme .el-form-item.is-error .el-input__inner,
+.custom-theme .el-form-item.is-error .el-input__inner:focus,
+.custom-theme .el-form-item.is-error .el-textarea__inner,
+.custom-theme .el-form-item.is-error .el-textarea__inner:focus {
+  border-color: #b3450e;
+}
+
+.custom-theme .el-form-item.is-error .el-input-group__append .el-input__inner,
+.custom-theme .el-form-item.is-error .el-input-group__prepend .el-input__inner {
+  border-color: transparent;
+}
+
+.custom-theme .el-form-item.is-error .el-input__validateIcon {
+  color: #b3450e;
+}
+
+.custom-theme .el-form-item.is-success .el-input__inner,
+.custom-theme .el-form-item.is-success .el-input__inner:focus,
+.custom-theme .el-form-item.is-success .el-textarea__inner,
+.custom-theme .el-form-item.is-success .el-textarea__inner:focus {
+  border-color: #409167;
+}
+
+.custom-theme .el-form-item.is-success .el-input-group__append .el-input__inner,
+.custom-theme .el-form-item.is-success .el-input-group__prepend .el-input__inner {
+  border-color: transparent;
+}
+
+.custom-theme .el-form-item.is-success .el-input__validateIcon {
+  color: #409167;
+}
+
+.custom-theme .el-form-item--feedback .el-input__validateIcon {
+  display: inline-block;
+}
+
+.custom-theme .el-tabs__header {
+  padding: 0;
+  position: relative;
+  margin: 0 0 15px;
+}
+
+.custom-theme .el-tabs__active-bar {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  height: 2px;
+  background-color: #262729;
+  z-index: 1;
+  -webkit-transition: -webkit-transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: -webkit-transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),
+  -webkit-transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+  list-style: none;
+}
+
+.custom-theme .el-tabs__new-tab {
+  float: right;
+  border: 1px solid #d3dce6;
+  height: 18px;
+  width: 18px;
+  line-height: 18px;
+  margin: 12px 0 9px 10px;
+  border-radius: 3px;
+  text-align: center;
+  font-size: 12px;
+  color: #d3dce6;
+  cursor: pointer;
+  -webkit-transition: all 0.15s;
+  transition: all 0.15s;
+}
+
+.custom-theme .el-tabs__new-tab .el-icon-plus {
+  -webkit-transform: scale(0.8, 0.8);
+  transform: scale(0.8, 0.8);
+}
+
+.custom-theme .el-tabs__new-tab:hover {
+  color: #262729;
+}
+
+.custom-theme .el-tabs__nav-wrap {
+  overflow: hidden;
+  margin-bottom: -1px;
+  position: relative;
+}
+
+.custom-theme .el-tabs__nav-wrap::after {
+  content: '';
+  position: absolute;
+  left: 0;
+  bottom: 0;
+  width: 100%;
+  height: 2px;
+  background-color: #dfe4ed;
+  z-index: 1;
+}
+
+.custom-theme .el-tabs__nav-wrap.is-scrollable {
+  padding: 0 20px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-tabs__nav-scroll {
+  overflow: hidden;
+}
+
+.custom-theme .el-tabs__nav-next,
+.custom-theme .el-tabs__nav-prev {
+  position: absolute;
+  cursor: pointer;
+  line-height: 44px;
+  font-size: 12px;
+  color: #878d99;
+}
+
+.custom-theme .el-tabs__nav-next {
+  right: 0;
+}
+
+.custom-theme .el-tabs__nav-prev {
+  left: 0;
+}
+
+.custom-theme .el-tabs__nav {
+  white-space: nowrap;
+  position: relative;
+  -webkit-transition: -webkit-transform 0.3s;
+  transition: -webkit-transform 0.3s;
+  transition: transform 0.3s;
+  transition: transform 0.3s, -webkit-transform 0.3s;
+  float: left;
+  z-index: 2;
+}
+
+.custom-theme .el-tabs__item {
+  padding: 0 20px;
+  height: 40px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  line-height: 40px;
+  display: inline-block;
+  list-style: none;
+  font-size: 14px;
+  font-weight: 500;
+  color: #2d2f33;
+  position: relative;
+}
+
+.custom-theme .el-tabs__item:focus,
+.custom-theme .el-tabs__item:focus:active {
+  outline: 0;
+}
+
+.custom-theme .el-tabs__item .el-icon-close {
+  border-radius: 50%;
+  text-align: center;
+  -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+  margin-left: 5px;
+}
+
+.custom-theme .el-tabs__item .el-icon-close:before {
+  -webkit-transform: scale(0.9);
+  transform: scale(0.9);
+  display: inline-block;
+}
+
+.custom-theme .el-tabs__item .el-icon-close:hover {
+  background-color: #b4bccc;
+  color: #fff;
+}
+
+.custom-theme .el-tabs__item.is-active {
+  color: #262729;
+}
+
+.custom-theme .el-tabs__item:hover {
+  color: #262729;
+  cursor: pointer;
+}
+
+.custom-theme .el-tabs__item.is-disabled {
+  color: #b4bccc;
+  cursor: default;
+}
+
+.custom-theme .el-tabs__content {
+  overflow: hidden;
+  position: relative;
+}
+
+.custom-theme .el-tabs--card > .el-tabs__header {
+  border-bottom: 1px solid #dfe4ed;
+}
+
+.custom-theme .el-tabs--card > .el-tabs__header .el-tabs__nav-wrap::after {
+  content: none;
+}
+
+.custom-theme .el-tabs--card > .el-tabs__header .el-tabs__nav {
+  border: 1px solid #dfe4ed;
+  border-bottom: none;
+  border-radius: 4px 4px 0 0;
+}
+
+.custom-theme .el-tabs--card > .el-tabs__header .el-tabs__active-bar {
+  display: none;
+}
+
+.custom-theme .el-tabs--card > .el-tabs__header .el-tabs__item .el-icon-close {
+  position: relative;
+  font-size: 12px;
+  width: 0;
+  height: 14px;
+  vertical-align: middle;
+  line-height: 15px;
+  overflow: hidden;
+  top: -1px;
+  right: -2px;
+  -webkit-transform-origin: 100% 50%;
+  transform-origin: 100% 50%;
+}
+
+.custom-theme .el-tabs--card > .el-tabs__header .el-tabs__item {
+  border-bottom: 1px solid transparent;
+  border-left: 1px solid #dfe4ed;
+  -webkit-transition: color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+}
+
+.custom-theme .el-tabs--card > .el-tabs__header .el-tabs__item:first-child {
+  border-left: none;
+}
+
+.custom-theme .el-tabs--card > .el-tabs__header .el-tabs__item.is-closable:hover {
+  padding-left: 13px;
+  padding-right: 13px;
+}
+
+.custom-theme .el-tabs--card > .el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close {
+  width: 14px;
+}
+
+.custom-theme .el-tabs--card > .el-tabs__header .el-tabs__item.is-active {
+  border-bottom-color: #fff;
+}
+
+.custom-theme .el-tabs--card > .el-tabs__header .el-tabs__item.is-active.is-closable {
+  padding-left: 20px;
+  padding-right: 20px;
+}
+
+.custom-theme .el-tabs--card > .el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close {
+  width: 14px;
+}
+
+.custom-theme .el-tabs--border-card {
+  background: #fff;
+  border: 1px solid #d8dce5;
+  -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04);
+  box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04);
+}
+
+.custom-theme .el-tabs--border-card > .el-tabs__content {
+  padding: 15px;
+}
+
+.custom-theme .el-tabs--border-card > .el-tabs__header {
+  background-color: #f5f7fa;
+  border-bottom: 1px solid #dfe4ed;
+  margin: 0;
+}
+
+.custom-theme .el-tabs--border-card > .el-tabs__header .el-tabs__nav-wrap::after {
+  content: none;
+}
+
+.custom-theme .el-tabs--border-card > .el-tabs__header .el-tabs__item {
+  -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+  border: 1px solid transparent;
+  margin: -1px -1px 0;
+  color: #878d99;
+}
+
+.custom-theme .el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active {
+  color: #262729;
+  background-color: #fff;
+  border-right-color: #d8dce5;
+  border-left-color: #d8dce5;
+}
+
+.custom-theme .el-tabs--border-card > .el-tabs__header .el-tabs__item:hover {
+  color: #262729;
+}
+
+.custom-theme .el-tabs--bottom:not(.el-tabs--border-card):not(.el-tabs--card) .el-tabs__item:nth-child(2),
+.custom-theme .el-tabs--top:not(.el-tabs--border-card):not(.el-tabs--card) .el-tabs__item:nth-child(2) {
+  padding-left: 0;
+}
+
+.custom-theme .el-tabs--bottom .el-tabs__header {
+  margin-bottom: 0;
+  margin-top: 10px;
+}
+
+.custom-theme .el-tabs--bottom.el-tabs--border-card .el-tabs__header {
+  border-bottom: 0;
+  border-top: 1px solid #d8dce5;
+}
+
+.custom-theme .el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap {
+  margin-top: -1px;
+  margin-bottom: 0;
+}
+
+.custom-theme .el-tabs--bottom.el-tabs--border-card .el-tabs__item {
+  border: 1px solid transparent;
+  margin: 0 -1px -1px -1px;
+}
+
+.custom-theme .el-tabs--left,
+.custom-theme .el-tabs--right {
+  overflow: hidden;
+}
+
+.custom-theme .el-tabs--left .el-tabs__header,
+.custom-theme .el-tabs--left .el-tabs__nav-scroll,
+.custom-theme .el-tabs--left .el-tabs__nav-wrap,
+.custom-theme .el-tabs--right .el-tabs__header,
+.custom-theme .el-tabs--right .el-tabs__nav-scroll,
+.custom-theme .el-tabs--right .el-tabs__nav-wrap {
+  height: 100%;
+}
+
+.custom-theme .el-tabs--left .el-tabs__active-bar,
+.custom-theme .el-tabs--right .el-tabs__active-bar {
+  top: 0;
+  bottom: auto;
+  width: 2px;
+  height: auto;
+}
+
+.custom-theme .el-tabs--left .el-tabs__nav-wrap,
+.custom-theme .el-tabs--right .el-tabs__nav-wrap {
+  margin-bottom: 0;
+}
+
+.custom-theme .el-tabs--left .el-tabs__nav-wrap.is-scrollable,
+.custom-theme .el-tabs--right .el-tabs__nav-wrap.is-scrollable {
+  padding: 30px 0;
+}
+
+.custom-theme .el-tabs--left .el-tabs__nav-wrap::after,
+.custom-theme .el-tabs--right .el-tabs__nav-wrap::after {
+  height: 100%;
+  width: 2px;
+  bottom: auto;
+  top: 0;
+}
+
+.custom-theme .el-tabs--left .el-tabs__nav,
+.custom-theme .el-tabs--right .el-tabs__nav {
+  float: none;
+}
+
+.custom-theme .el-tabs--left .el-tabs__item,
+.custom-theme .el-tabs--right .el-tabs__item {
+  display: block;
+}
+
+.custom-theme .el-tabs--left .el-tabs__nav-next,
+.custom-theme .el-tabs--left .el-tabs__nav-prev,
+.custom-theme .el-tabs--right .el-tabs__nav-next,
+.custom-theme .el-tabs--right .el-tabs__nav-prev {
+  height: 30px;
+  line-height: 30px;
+  width: 100%;
+  text-align: center;
+  cursor: pointer;
+}
+
+.custom-theme .el-tabs--left .el-tabs__nav-next i,
+.custom-theme .el-tabs--left .el-tabs__nav-prev i,
+.custom-theme .el-tabs--right .el-tabs__nav-next i,
+.custom-theme .el-tabs--right .el-tabs__nav-prev i {
+  -webkit-transform: rotateZ(90deg);
+  transform: rotateZ(90deg);
+}
+
+.custom-theme .el-tabs--left .el-tabs__nav-prev,
+.custom-theme .el-tabs--right .el-tabs__nav-prev {
+  left: auto;
+  top: 0;
+}
+
+.custom-theme .el-tabs--left .el-tabs__nav-next,
+.custom-theme .el-tabs--right .el-tabs__nav-next {
+  right: auto;
+  bottom: 0;
+}
+
+.custom-theme .el-tabs--left .el-tabs__header {
+  float: left;
+  margin-bottom: 0;
+  margin-right: 10px;
+}
+
+.custom-theme .el-tabs--left .el-tabs__nav-wrap {
+  margin-right: -1px;
+}
+
+.custom-theme .el-tabs--left .el-tabs__nav-wrap::after {
+  left: auto;
+  right: 0;
+}
+
+.custom-theme .el-tabs--left .el-tabs__active-bar {
+  right: 0;
+  left: auto;
+}
+
+.custom-theme .el-tabs--left .el-tabs__item {
+  text-align: right;
+}
+
+.custom-theme .el-tabs--left.el-tabs--card .el-tabs__active-bar {
+  display: none;
+}
+
+.custom-theme .el-tabs--left.el-tabs--card .el-tabs__item {
+  border-left: none;
+  border-right: 1px solid #dfe4ed;
+  border-bottom: none;
+  border-top: 1px solid #dfe4ed;
+}
+
+.custom-theme .el-tabs--left.el-tabs--card .el-tabs__item:first-child {
+  border-right: 1px solid #dfe4ed;
+  border-top: none;
+}
+
+.custom-theme .el-tabs--left.el-tabs--card .el-tabs__item.is-active {
+  border: 1px solid #dfe4ed;
+  border-right-color: #fff;
+  border-left: none;
+  border-bottom: none;
+}
+
+.custom-theme .el-tabs--left.el-tabs--card .el-tabs__item.is-active:first-child {
+  border-top: none;
+}
+
+.custom-theme .el-tabs--left.el-tabs--card .el-tabs__item.is-active:last-child {
+  border-bottom: none;
+}
+
+.custom-theme .el-tabs--left.el-tabs--card .el-tabs__nav {
+  border-radius: 4px 0 0 4px;
+  border-bottom: 1px solid #dfe4ed;
+  border-right: none;
+}
+
+.custom-theme .el-tabs--left.el-tabs--card .el-tabs__new-tab {
+  float: none;
+}
+
+.custom-theme .el-tabs--left.el-tabs--border-card .el-tabs__header {
+  border-right: 1px solid #dfe4ed;
+}
+
+.custom-theme .el-tabs--left.el-tabs--border-card .el-tabs__item {
+  border: 1px solid transparent;
+  margin: -1px 0 -1px -1px;
+}
+
+.custom-theme .el-tabs--left.el-tabs--border-card .el-tabs__item.is-active {
+  border-color: transparent;
+  border-top-color: #d1dbe5;
+  border-bottom-color: #d1dbe5;
+}
+
+.custom-theme .el-tabs--right .el-tabs__header {
+  float: right;
+  margin-bottom: 0;
+  margin-left: 10px;
+}
+
+.custom-theme .el-tabs--right .el-tabs__nav-wrap {
+  margin-left: -1px;
+}
+
+.custom-theme .el-tabs--right .el-tabs__nav-wrap::after {
+  left: 0;
+  right: auto;
+}
+
+.custom-theme .el-tabs--right .el-tabs__active-bar {
+  left: 0;
+}
+
+.custom-theme .el-tabs--right.el-tabs--card .el-tabs__active-bar {
+  display: none;
+}
+
+.custom-theme .el-tabs--right.el-tabs--card .el-tabs__item {
+  border-bottom: none;
+  border-top: 1px solid #dfe4ed;
+}
+
+.custom-theme .el-tabs--right.el-tabs--card .el-tabs__item:first-child {
+  border-left: 1px solid #dfe4ed;
+  border-top: none;
+}
+
+.custom-theme .el-tabs--right.el-tabs--card .el-tabs__item.is-active {
+  border: 1px solid #dfe4ed;
+  border-left-color: #fff;
+  border-right: none;
+  border-bottom: none;
+}
+
+.custom-theme .el-tabs--right.el-tabs--card .el-tabs__item.is-active:first-child {
+  border-top: none;
+}
+
+.custom-theme .el-tabs--right.el-tabs--card .el-tabs__item.is-active:last-child {
+  border-bottom: none;
+}
+
+.custom-theme .el-tabs--right.el-tabs--card .el-tabs__nav {
+  border-radius: 0 4px 4px 0;
+  border-bottom: 1px solid #dfe4ed;
+  border-left: none;
+}
+
+.custom-theme .el-tabs--right.el-tabs--border-card .el-tabs__header {
+  border-left: 1px solid #dfe4ed;
+}
+
+.custom-theme .el-tabs--right.el-tabs--border-card .el-tabs__item {
+  border: 1px solid transparent;
+  margin: -1px -1px -1px 0;
+}
+
+.custom-theme .el-tabs--right.el-tabs--border-card .el-tabs__item.is-active {
+  border-color: transparent;
+  border-top-color: #d1dbe5;
+  border-bottom-color: #d1dbe5;
+}
+
+.custom-theme .slideInLeft-transition,
+.custom-theme .slideInRight-transition {
+  display: inline-block;
+}
+
+.custom-theme .slideInRight-enter {
+  -webkit-animation: slideInRight-enter 0.3s;
+  animation: slideInRight-enter 0.3s;
+}
+
+.custom-theme .slideInRight-leave {
+  position: absolute;
+  left: 0;
+  right: 0;
+  -webkit-animation: slideInRight-leave 0.3s;
+  animation: slideInRight-leave 0.3s;
+}
+
+.custom-theme .slideInLeft-enter {
+  -webkit-animation: slideInLeft-enter 0.3s;
+  animation: slideInLeft-enter 0.3s;
+}
+
+.custom-theme .slideInLeft-leave {
+  position: absolute;
+  left: 0;
+  right: 0;
+  -webkit-animation: slideInLeft-leave 0.3s;
+  animation: slideInLeft-leave 0.3s;
+}
+
+@-webkit-keyframes slideInRight-enter {
+  0% {
+    opacity: 0;
+    -webkit-transform-origin: 0 0;
+    transform-origin: 0 0;
+    -webkit-transform: translateX(100%);
+    transform: translateX(100%);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform-origin: 0 0;
+    transform-origin: 0 0;
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+}
+
+@keyframes slideInRight-enter {
+  0% {
+    opacity: 0;
+    -webkit-transform-origin: 0 0;
+    transform-origin: 0 0;
+    -webkit-transform: translateX(100%);
+    transform: translateX(100%);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform-origin: 0 0;
+    transform-origin: 0 0;
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+}
+
+@-webkit-keyframes slideInRight-leave {
+  0% {
+    -webkit-transform-origin: 0 0;
+    transform-origin: 0 0;
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+    opacity: 1;
+  }
+  100% {
+    -webkit-transform-origin: 0 0;
+    transform-origin: 0 0;
+    -webkit-transform: translateX(100%);
+    transform: translateX(100%);
+    opacity: 0;
+  }
+}
+
+@keyframes slideInRight-leave {
+  0% {
+    -webkit-transform-origin: 0 0;
+    transform-origin: 0 0;
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+    opacity: 1;
+  }
+  100% {
+    -webkit-transform-origin: 0 0;
+    transform-origin: 0 0;
+    -webkit-transform: translateX(100%);
+    transform: translateX(100%);
+    opacity: 0;
+  }
+}
+
+@-webkit-keyframes slideInLeft-enter {
+  0% {
+    opacity: 0;
+    -webkit-transform-origin: 0 0;
+    transform-origin: 0 0;
+    -webkit-transform: translateX(-100%);
+    transform: translateX(-100%);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform-origin: 0 0;
+    transform-origin: 0 0;
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+}
+
+@keyframes slideInLeft-enter {
+  0% {
+    opacity: 0;
+    -webkit-transform-origin: 0 0;
+    transform-origin: 0 0;
+    -webkit-transform: translateX(-100%);
+    transform: translateX(-100%);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform-origin: 0 0;
+    transform-origin: 0 0;
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+}
+
+@-webkit-keyframes slideInLeft-leave {
+  0% {
+    -webkit-transform-origin: 0 0;
+    transform-origin: 0 0;
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+    opacity: 1;
+  }
+  100% {
+    -webkit-transform-origin: 0 0;
+    transform-origin: 0 0;
+    -webkit-transform: translateX(-100%);
+    transform: translateX(-100%);
+    opacity: 0;
+  }
+}
+
+@keyframes slideInLeft-leave {
+  0% {
+    -webkit-transform-origin: 0 0;
+    transform-origin: 0 0;
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+    opacity: 1;
+  }
+  100% {
+    -webkit-transform-origin: 0 0;
+    transform-origin: 0 0;
+    -webkit-transform: translateX(-100%);
+    transform: translateX(-100%);
+    opacity: 0;
+  }
+}
+
+.custom-theme .el-tag {
+  background-color: rgba(38, 39, 41, 0.1);
+  display: inline-block;
+  padding: 0 10px;
+  height: 32px;
+  line-height: 30px;
+  font-size: 12px;
+  color: #262729;
+  border-radius: 4px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  border: 1px solid rgba(38, 39, 41, 0.2);
+  white-space: nowrap;
+}
+
+.custom-theme .el-tag .el-icon-close {
+  border-radius: 50%;
+  text-align: center;
+  position: relative;
+  cursor: pointer;
+  font-size: 12px;
+  height: 18px;
+  width: 18px;
+  line-height: 18px;
+  vertical-align: middle;
+  top: -1px;
+  right: -5px;
+  color: #262729;
+}
+
+.custom-theme .el-tag .el-icon-close::before {
+  display: block;
+}
+
+.custom-theme .el-tag .el-icon-close:hover {
+  background-color: #262729;
+  color: #fff;
+}
+
+.custom-theme .el-tag--info {
+  background-color: rgba(10, 118, 164, 0.1);
+  border-color: rgba(10, 118, 164, 0.2);
+  color: #0a76a4;
+}
+
+.custom-theme .el-tag--info.is-hit {
+  border-color: #0a76a4;
+}
+
+.custom-theme .el-tag--info .el-tag__close {
+  color: #0a76a4;
+}
+
+.custom-theme .el-tag--info .el-tag__close:hover {
+  background-color: #0a76a4;
+  color: #fff;
+}
+
+.custom-theme .el-tag--success {
+  background-color: rgba(64, 145, 103, 0.1);
+  border-color: rgba(64, 145, 103, 0.2);
+  color: #409167;
+}
+
+.custom-theme .el-tag--success.is-hit {
+  border-color: #409167;
+}
+
+.custom-theme .el-tag--success .el-tag__close {
+  color: #409167;
+}
+
+.custom-theme .el-tag--success .el-tag__close:hover {
+  background-color: #409167;
+  color: #fff;
+}
+
+.custom-theme .el-tag--warning {
+  background-color: rgba(157, 164, 8, 0.1);
+  border-color: rgba(157, 164, 8, 0.2);
+  color: #9da408;
+}
+
+.custom-theme .el-tag--warning.is-hit {
+  border-color: #9da408;
+}
+
+.custom-theme .el-tag--warning .el-tag__close {
+  color: #9da408;
+}
+
+.custom-theme .el-tag--warning .el-tag__close:hover {
+  background-color: #9da408;
+  color: #fff;
+}
+
+.custom-theme .el-tag--danger {
+  background-color: rgba(179, 69, 14, 0.1);
+  border-color: rgba(179, 69, 14, 0.2);
+  color: #b3450e;
+}
+
+.custom-theme .el-tag--danger.is-hit {
+  border-color: #b3450e;
+}
+
+.custom-theme .el-tag--danger .el-tag__close {
+  color: #b3450e;
+}
+
+.custom-theme .el-tag--danger .el-tag__close:hover {
+  background-color: #b3450e;
+  color: #fff;
+}
+
+.custom-theme .el-tag--medium {
+  height: 28px;
+  line-height: 26px;
+}
+
+.custom-theme .el-tag--medium .el-icon-close {
+  -webkit-transform: scale(0.8);
+  transform: scale(0.8);
+}
+
+.custom-theme .el-tag--small {
+  height: 24px;
+  padding: 0 8px;
+  line-height: 22px;
+}
+
+.custom-theme .el-tag--small .el-icon-close {
+  -webkit-transform: scale(0.8);
+  transform: scale(0.8);
+}
+
+.custom-theme .el-tag--mini {
+  height: 20px;
+  padding: 0 5px;
+  line-height: 19px;
+}
+
+.custom-theme .el-tag--mini .el-icon-close {
+  margin-left: -3px;
+  -webkit-transform: scale(0.7);
+  transform: scale(0.7);
+}
+
+.custom-theme .el-tree {
+  cursor: default;
+  background: #fff;
+  color: #5a5e66;
+}
+
+.custom-theme .el-tree__empty-block {
+  position: relative;
+  min-height: 60px;
+  text-align: center;
+  width: 100%;
+  height: 100%;
+}
+
+.custom-theme .el-tree__empty-text {
+  position: absolute;
+  left: 50%;
+  top: 50%;
+  -webkit-transform: translate(-50%, -50%);
+  transform: translate(-50%, -50%);
+  color: #623615;
+}
+
+.custom-theme .el-tree-node {
+  white-space: nowrap;
+}
+
+.custom-theme .el-tree-node__content {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
+  height: 26px;
+  cursor: pointer;
+}
+
+.custom-theme .el-tree-node__content > .el-tree-node__expand-icon {
+  padding: 6px;
+}
+
+.custom-theme .el-tree-node__content > .el-checkbox {
+  margin-right: 8px;
+}
+
+.custom-theme .el-tree-node__content:hover {
+  background-color: #f5f7fa;
+}
+
+.custom-theme .el-tree-node__expand-icon {
+  cursor: pointer;
+  color: #b4bccc;
+  font-size: 12px;
+  -webkit-transform: rotate(0);
+  transform: rotate(0);
+  -webkit-transition: -webkit-transform 0.3s ease-in-out;
+  transition: -webkit-transform 0.3s ease-in-out;
+  transition: transform 0.3s ease-in-out;
+  transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;
+}
+
+.custom-theme .el-tree-node__expand-icon.expanded {
+  -webkit-transform: rotate(90deg);
+  transform: rotate(90deg);
+}
+
+.custom-theme .el-tree-node__expand-icon.is-leaf {
+  color: transparent;
+  cursor: default;
+}
+
+.custom-theme .el-tree-node__label {
+  font-size: 14px;
+}
+
+.custom-theme .el-tree-node__loading-icon {
+  margin-right: 8px;
+  font-size: 14px;
+  color: #b4bccc;
+}
+
+.custom-theme .el-tree-node > .el-tree-node__children {
+  overflow: hidden;
+  background-color: transparent;
+}
+
+.custom-theme .el-tree-node.is-expanded > .el-tree-node__children {
+  display: block;
+}
+
+.custom-theme .el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {
+  background-color: #eee;
+}
+
+.custom-theme .el-alert {
+  width: 100%;
+  padding: 8px 16px;
+  margin: 0;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  border-radius: 4px;
+  position: relative;
+  background-color: #fff;
+  overflow: hidden;
+  opacity: 1;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
+  -webkit-transition: opacity 0.2s;
+  transition: opacity 0.2s;
+}
+
+.custom-theme .el-alert.is-center {
+  -webkit-box-pack: center;
+  -ms-flex-pack: center;
+  justify-content: center;
+}
+
+.custom-theme .el-alert--success {
+  background-color: #ecf4f0;
+  color: #409167;
+}
+
+.custom-theme .el-alert--success .el-alert__description {
+  color: #409167;
+}
+
+.custom-theme .el-alert--info {
+  background-color: #e7f1f6;
+  color: #0a76a4;
+}
+
+.custom-theme .el-alert--info .el-alert__description {
+  color: #0a76a4;
+}
+
+.custom-theme .el-alert--warning {
+  background-color: #f5f6e6;
+  color: #9da408;
+}
+
+.custom-theme .el-alert--warning .el-alert__description {
+  color: #9da408;
+}
+
+.custom-theme .el-alert--error {
+  background-color: #f7ece7;
+  color: #b3450e;
+}
+
+.custom-theme .el-alert--error .el-alert__description {
+  color: #b3450e;
+}
+
+.custom-theme .el-alert__content {
+  display: table-cell;
+  padding: 0 8px;
+}
+
+.custom-theme .el-alert__icon {
+  font-size: 16px;
+  width: 16px;
+}
+
+.custom-theme .el-alert__icon.is-big {
+  font-size: 28px;
+  width: 28px;
+}
+
+.custom-theme .el-alert__title {
+  font-size: 13px;
+  line-height: 18px;
+}
+
+.custom-theme .el-alert__title.is-bold {
+  font-weight: 700;
+}
+
+.custom-theme .el-alert .el-alert__description {
+  font-size: 12px;
+  margin: 5px 0 0 0;
+}
+
+.custom-theme .el-alert__closebtn {
+  font-size: 12px;
+  color: #b4bccc;
+  opacity: 1;
+  position: absolute;
+  top: 12px;
+  right: 15px;
+  cursor: pointer;
+}
+
+.custom-theme .el-alert__closebtn.is-customed {
+  font-style: normal;
+  font-size: 13px;
+  top: 9px;
+}
+
+.custom-theme .el-alert-fade-enter,
+.custom-theme .el-alert-fade-leave-active {
+  opacity: 0;
+}
+
+.custom-theme .el-notification {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  width: 330px;
+  padding: 14px 26px 14px 13px;
+  border-radius: 8px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  border: 1px solid #e6ebf5;
+  position: fixed;
+  background-color: #fff;
+  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  -webkit-transition: opacity 0.3s, left 0.3s, right 0.3s, top 0.4s, bottom 0.3s, -webkit-transform 0.3s;
+  transition: opacity 0.3s, left 0.3s, right 0.3s, top 0.4s, bottom 0.3s, -webkit-transform 0.3s;
+  transition: opacity 0.3s, transform 0.3s, left 0.3s, right 0.3s, top 0.4s, bottom 0.3s;
+  transition: opacity 0.3s, transform 0.3s, left 0.3s, right 0.3s, top 0.4s, bottom 0.3s, -webkit-transform 0.3s;
+  overflow: hidden;
+}
+
+.custom-theme .el-notification.right {
+  right: 16px;
+}
+
+.custom-theme .el-notification.left {
+  left: 16px;
+}
+
+.custom-theme .el-notification__group {
+  margin-left: 13px;
+}
+
+.custom-theme .el-notification__title {
+  font-weight: 700;
+  font-size: 16px;
+  color: #2d2f33;
+  margin: 0;
+}
+
+.custom-theme .el-notification__content {
+  font-size: 14px;
+  line-height: 21px;
+  margin: 6px 0 0 0;
+  color: #5a5e66;
+  text-align: justify;
+}
+
+.custom-theme .el-notification__content p {
+  margin: 0;
+}
+
+.custom-theme .el-notification__icon {
+  height: 24px;
+  width: 24px;
+  font-size: 24px;
+  -webkit-transform: translateY(4px);
+  transform: translateY(4px);
+}
+
+.custom-theme .el-notification__closeBtn {
+  position: absolute;
+  top: 15px;
+  right: 15px;
+  cursor: pointer;
+  color: #878d99;
+  font-size: 16px;
+}
+
+.custom-theme .el-notification__closeBtn:hover {
+  color: #5a5e66;
+}
+
+.custom-theme .el-notification .el-icon-success {
+  color: #409167;
+}
+
+.custom-theme .el-notification .el-icon-error {
+  color: #b3450e;
+}
+
+.custom-theme .el-notification .el-icon-info {
+  color: #0a76a4;
+}
+
+.custom-theme .el-notification .el-icon-warning {
+  color: #9da408;
+}
+
+.custom-theme .el-notification-fade-enter.right {
+  right: 0;
+  -webkit-transform: translateX(100%);
+  transform: translateX(100%);
+}
+
+.custom-theme .el-notification-fade-enter.left {
+  left: 0;
+  -webkit-transform: translateX(-100%);
+  transform: translateX(-100%);
+}
+
+.custom-theme .el-notification-fade-leave-active {
+  opacity: 0;
+}
+
+.custom-theme .el-input {
+  position: relative;
+  font-size: 14px;
+  display: inline-block;
+  width: 100%;
+}
+
+.custom-theme .el-input::-webkit-scrollbar {
+  z-index: 11;
+  width: 6px;
+}
+
+.custom-theme .el-input::-webkit-scrollbar:horizontal {
+  height: 6px;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-thumb {
+  border-radius: 5px;
+  width: 6px;
+  background: #b4bccc;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-corner {
+  background: #fff;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-track {
+  background: #fff;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-track-piece {
+  background: #fff;
+  width: 6px;
+}
+
+.custom-theme .el-input__inner {
+  -webkit-appearance: none;
+  background-color: #fff;
+  background-image: none;
+  border-radius: 4px;
+  border: 1px solid #d8dce5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  color: #5a5e66;
+  display: inline-block;
+  font-size: inherit;
+  height: 40px;
+  line-height: 1;
+  outline: 0;
+  padding: 0 15px;
+  -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  width: 100%;
+}
+
+.custom-theme .el-input__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:hover {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:focus {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-input__suffix {
+  position: absolute;
+  height: 100%;
+  right: 5px;
+  top: 0;
+  text-align: center;
+  color: #b4bccc;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+  pointer-events: none;
+}
+
+.custom-theme .el-input__suffix-inner {
+  pointer-events: all;
+}
+
+.custom-theme .el-input__prefix {
+  position: absolute;
+  height: 100%;
+  left: 5px;
+  top: 0;
+  text-align: center;
+  color: #b4bccc;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+}
+
+.custom-theme .el-input__icon {
+  height: 100%;
+  width: 25px;
+  text-align: center;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+  line-height: 40px;
+}
+
+.custom-theme .el-input__icon:after {
+  content: '';
+  height: 100%;
+  width: 0;
+  display: inline-block;
+  vertical-align: middle;
+}
+
+.custom-theme .el-input__validateIcon {
+  pointer-events: none;
+}
+
+.custom-theme .el-input.is-active .el-input__inner {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__icon {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input--suffix .el-input__inner {
+  padding-right: 30px;
+}
+
+.custom-theme .el-input--prefix .el-input__inner {
+  padding-left: 30px;
+}
+
+.custom-theme .el-input--medium {
+  font-size: 14px;
+}
+
+.custom-theme .el-input--medium .el-input__inner {
+  height: 36px;
+}
+
+.custom-theme .el-input--medium .el-input__icon {
+  line-height: 36px;
+}
+
+.custom-theme .el-input--small {
+  font-size: 13px;
+}
+
+.custom-theme .el-input--small .el-input__inner {
+  height: 32px;
+}
+
+.custom-theme .el-input--small .el-input__icon {
+  line-height: 32px;
+}
+
+.custom-theme .el-input--mini {
+  font-size: 12px;
+}
+
+.custom-theme .el-input--mini .el-input__inner {
+  height: 28px;
+}
+
+.custom-theme .el-input--mini .el-input__icon {
+  line-height: 28px;
+}
+
+.custom-theme .el-input-group {
+  line-height: normal;
+  display: inline-table;
+  width: 100%;
+  border-collapse: separate;
+}
+
+.custom-theme .el-input-group > .el-input__inner {
+  vertical-align: middle;
+  display: table-cell;
+}
+
+.custom-theme .el-input-group__append,
+.custom-theme .el-input-group__prepend {
+  background-color: #f5f7fa;
+  color: #0a76a4;
+  vertical-align: middle;
+  display: table-cell;
+  position: relative;
+  border: 1px solid #d8dce5;
+  border-radius: 4px;
+  padding: 0 20px;
+  width: 1px;
+  white-space: nowrap;
+}
+
+.custom-theme .el-input-group__append:focus,
+.custom-theme .el-input-group__prepend:focus {
+  outline: 0;
+}
+
+.custom-theme .el-input-group__append .el-button,
+.custom-theme .el-input-group__append .el-select,
+.custom-theme .el-input-group__prepend .el-button,
+.custom-theme .el-input-group__prepend .el-select {
+  display: inline-block;
+  margin: -20px;
+}
+
+.custom-theme .el-input-group__append button.el-button,
+.custom-theme .el-input-group__append div.el-select .el-input__inner,
+.custom-theme .el-input-group__append div.el-select:hover .el-input__inner,
+.custom-theme .el-input-group__prepend button.el-button,
+.custom-theme .el-input-group__prepend div.el-select .el-input__inner,
+.custom-theme .el-input-group__prepend div.el-select:hover .el-input__inner {
+  border-color: transparent;
+  background-color: transparent;
+  color: inherit;
+  border-top: 0;
+  border-bottom: 0;
+}
+
+.custom-theme .el-input-group__append .el-button,
+.custom-theme .el-input-group__append .el-input,
+.custom-theme .el-input-group__prepend .el-button,
+.custom-theme .el-input-group__prepend .el-input {
+  font-size: inherit;
+}
+
+.custom-theme .el-input-group__prepend {
+  border-right: 0;
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-input-group__append {
+  border-left: 0;
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-input-group--prepend .el-input__inner {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-input-group--append .el-input__inner {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-textarea {
+  display: inline-block;
+  width: 100%;
+  vertical-align: bottom;
+}
+
+.custom-theme .el-textarea__inner {
+  display: block;
+  resize: vertical;
+  padding: 5px 15px;
+  line-height: 1.5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 100%;
+  font-size: 14px;
+  color: #5a5e66;
+  background-color: #fff;
+  background-image: none;
+  border: 1px solid #d8dce5;
+  border-radius: 4px;
+  -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+}
+
+.custom-theme .el-textarea__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:hover {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:focus {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input-number {
+  position: relative;
+  display: inline-block;
+  width: 180px;
+  line-height: 38px;
+}
+
+.custom-theme .el-input-number .el-input {
+  display: block;
+}
+
+.custom-theme .el-input-number .el-input__inner {
+  -webkit-appearance: none;
+  padding-left: 50px;
+  padding-right: 50px;
+  text-align: center;
+}
+
+.custom-theme .el-input-number__decrease,
+.custom-theme .el-input-number__increase {
+  position: absolute;
+  z-index: 1;
+  top: 1px;
+  width: 40px;
+  height: auto;
+  text-align: center;
+  background: #f5f7fa;
+  color: #5a5e66;
+  cursor: pointer;
+  font-size: 13px;
+}
+
+.custom-theme .el-input-number__decrease:hover,
+.custom-theme .el-input-number__increase:hover {
+  color: #262729;
+}
+
+.custom-theme .el-input-number__decrease:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled),
+.custom-theme .el-input-number__increase:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled) {
+  border-color: #262729;
+}
+
+.custom-theme .el-input-number__decrease.is-disabled,
+.custom-theme .el-input-number__increase.is-disabled {
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input-number__increase {
+  right: 1px;
+  border-radius: 0 4px 4px 0;
+  border-left: 1px solid #d8dce5;
+}
+
+.custom-theme .el-input-number__decrease {
+  left: 1px;
+  border-radius: 4px 0 0 4px;
+  border-right: 1px solid #d8dce5;
+}
+
+.custom-theme .el-input-number.is-disabled .el-input-number__decrease,
+.custom-theme .el-input-number.is-disabled .el-input-number__increase {
+  border-color: #dfe4ed;
+  color: #dfe4ed;
+}
+
+.custom-theme .el-input-number.is-disabled .el-input-number__decrease:hover,
+.custom-theme .el-input-number.is-disabled .el-input-number__increase:hover {
+  color: #dfe4ed;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input-number--medium {
+  width: 200px;
+  line-height: 34px;
+}
+
+.custom-theme .el-input-number--medium .el-input-number__decrease,
+.custom-theme .el-input-number--medium .el-input-number__increase {
+  width: 36px;
+  font-size: 14px;
+}
+
+.custom-theme .el-input-number--medium .el-input__inner {
+  padding-left: 43px;
+  padding-right: 43px;
+}
+
+.custom-theme .el-input-number--small {
+  width: 130px;
+  line-height: 30px;
+}
+
+.custom-theme .el-input-number--small .el-input-number__decrease,
+.custom-theme .el-input-number--small .el-input-number__increase {
+  width: 32px;
+  font-size: 13px;
+}
+
+.custom-theme .el-input-number--small .el-input-number__decrease [class*='el-icon'],
+.custom-theme .el-input-number--small .el-input-number__increase [class*='el-icon'] {
+  -webkit-transform: scale(0.9);
+  transform: scale(0.9);
+}
+
+.custom-theme .el-input-number--small .el-input__inner {
+  padding-left: 39px;
+  padding-right: 39px;
+}
+
+.custom-theme .el-input-number--mini {
+  width: 130px;
+  line-height: 26px;
+}
+
+.custom-theme .el-input-number--mini .el-input-number__decrease,
+.custom-theme .el-input-number--mini .el-input-number__increase {
+  width: 28px;
+  font-size: 12px;
+}
+
+.custom-theme .el-input-number--mini .el-input-number__decrease [class*='el-icon'],
+.custom-theme .el-input-number--mini .el-input-number__increase [class*='el-icon'] {
+  -webkit-transform: scale(0.8);
+  transform: scale(0.8);
+}
+
+.custom-theme .el-input-number--mini .el-input__inner {
+  padding-left: 35px;
+  padding-right: 35px;
+}
+
+.custom-theme .el-input-number.is-without-controls .el-input__inner {
+  padding-left: 15px;
+  padding-right: 15px;
+}
+
+.custom-theme .el-input-number.is-controls-right .el-input__inner {
+  padding-left: 15px;
+  padding-right: 50px;
+}
+
+.custom-theme .el-input-number.is-controls-right .el-input-number__decrease,
+.custom-theme .el-input-number.is-controls-right .el-input-number__increase {
+  height: auto;
+  line-height: 19px;
+}
+
+.custom-theme .el-input-number.is-controls-right .el-input-number__decrease [class*='el-icon'],
+.custom-theme .el-input-number.is-controls-right .el-input-number__increase [class*='el-icon'] {
+  -webkit-transform: scale(0.8);
+  transform: scale(0.8);
+}
+
+.custom-theme .el-input-number.is-controls-right .el-input-number__increase {
+  border-radius: 0 4px 0 0;
+  border-bottom: 1px solid #d8dce5;
+}
+
+.custom-theme .el-input-number.is-controls-right .el-input-number__decrease {
+  right: 1px;
+  bottom: 1px;
+  top: auto;
+  left: auto;
+  border-right: none;
+  border-left: 1px solid #d8dce5;
+  border-radius: 0 0 4px 0;
+}
+
+.custom-theme .el-input-number.is-controls-right[class*='medium'] [class*='decrease'],
+.custom-theme .el-input-number.is-controls-right[class*='medium'] [class*='increase'] {
+  line-height: 17px;
+}
+
+.custom-theme .el-input-number.is-controls-right[class*='small'] [class*='decrease'],
+.custom-theme .el-input-number.is-controls-right[class*='small'] [class*='increase'] {
+  line-height: 15px;
+}
+
+.custom-theme .el-input-number.is-controls-right[class*='mini'] [class*='decrease'],
+.custom-theme .el-input-number.is-controls-right[class*='mini'] [class*='increase'] {
+  line-height: 13px;
+}
+
+.custom-theme .el-tooltip__popper {
+  position: absolute;
+  border-radius: 4px;
+  padding: 10px;
+  z-index: 2000;
+  font-size: 12px;
+  line-height: 1.2;
+}
+
+.custom-theme .el-tooltip__popper .popper__arrow,
+.custom-theme .el-tooltip__popper .popper__arrow::after {
+  position: absolute;
+  display: block;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+
+.custom-theme .el-tooltip__popper .popper__arrow {
+  border-width: 6px;
+}
+
+.custom-theme .el-tooltip__popper .popper__arrow::after {
+  content: ' ';
+  border-width: 5px;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='top'] {
+  margin-bottom: 12px;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='top'] .popper__arrow {
+  bottom: -6px;
+  border-top-color: #2d2f33;
+  border-bottom-width: 0;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='top'] .popper__arrow::after {
+  bottom: 1px;
+  margin-left: -5px;
+  border-top-color: #2d2f33;
+  border-bottom-width: 0;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='bottom'] {
+  margin-top: 12px;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='bottom'] .popper__arrow {
+  top: -6px;
+  border-top-width: 0;
+  border-bottom-color: #2d2f33;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='bottom'] .popper__arrow::after {
+  top: 1px;
+  margin-left: -5px;
+  border-top-width: 0;
+  border-bottom-color: #2d2f33;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='right'] {
+  margin-left: 12px;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='right'] .popper__arrow {
+  left: -6px;
+  border-right-color: #2d2f33;
+  border-left-width: 0;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='right'] .popper__arrow::after {
+  bottom: -5px;
+  left: 1px;
+  border-right-color: #2d2f33;
+  border-left-width: 0;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='left'] {
+  margin-right: 12px;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='left'] .popper__arrow {
+  right: -6px;
+  border-right-width: 0;
+  border-left-color: #2d2f33;
+}
+
+.custom-theme .el-tooltip__popper[x-placement^='left'] .popper__arrow::after {
+  right: 1px;
+  bottom: -5px;
+  margin-left: -5px;
+  border-right-width: 0;
+  border-left-color: #2d2f33;
+}
+
+.custom-theme .el-tooltip__popper.is-dark {
+  background: #2d2f33;
+  color: #fff;
+}
+
+.custom-theme .el-tooltip__popper.is-light {
+  background: #fff;
+  border: 1px solid #2d2f33;
+}
+
+.custom-theme .el-tooltip__popper.is-light[x-placement^='top'] .popper__arrow {
+  border-top-color: #2d2f33;
+}
+
+.custom-theme .el-tooltip__popper.is-light[x-placement^='top'] .popper__arrow::after {
+  border-top-color: #fff;
+}
+
+.custom-theme .el-tooltip__popper.is-light[x-placement^='bottom'] .popper__arrow {
+  border-bottom-color: #2d2f33;
+}
+
+.custom-theme .el-tooltip__popper.is-light[x-placement^='bottom'] .popper__arrow::after {
+  border-bottom-color: #fff;
+}
+
+.custom-theme .el-tooltip__popper.is-light[x-placement^='left'] .popper__arrow {
+  border-left-color: #2d2f33;
+}
+
+.custom-theme .el-tooltip__popper.is-light[x-placement^='left'] .popper__arrow::after {
+  border-left-color: #fff;
+}
+
+.custom-theme .el-tooltip__popper.is-light[x-placement^='right'] .popper__arrow {
+  border-right-color: #2d2f33;
+}
+
+.custom-theme .el-tooltip__popper.is-light[x-placement^='right'] .popper__arrow::after {
+  border-right-color: #fff;
+}
+
+.custom-theme .el-slider::after,
+.custom-theme .el-slider::before {
+  display: table;
+  content: '';
+}
+
+.custom-theme .el-slider::after {
+  clear: both;
+}
+
+.custom-theme .el-slider__runway {
+  width: 100%;
+  height: 6px;
+  margin: 16px 0;
+  background-color: #dfe4ed;
+  border-radius: 3px;
+  position: relative;
+  cursor: pointer;
+  vertical-align: middle;
+}
+
+.custom-theme .el-slider__runway.show-input {
+  margin-right: 160px;
+  width: auto;
+}
+
+.custom-theme .el-slider__runway.disabled {
+  cursor: default;
+}
+
+.custom-theme .el-slider__runway.disabled .el-slider__bar {
+  background-color: #b4bccc;
+}
+
+.custom-theme .el-slider__runway.disabled .el-slider__button {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-slider__runway.disabled .el-slider__button-wrapper.hover,
+.custom-theme .el-slider__runway.disabled .el-slider__button-wrapper:hover {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-slider__runway.disabled .el-slider__button-wrapper.dragging {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-slider__runway.disabled .el-slider__button.dragging,
+.custom-theme .el-slider__runway.disabled .el-slider__button.hover,
+.custom-theme .el-slider__runway.disabled .el-slider__button:hover {
+  -webkit-transform: scale(1);
+  transform: scale(1);
+}
+
+.custom-theme .el-slider__runway.disabled .el-slider__button.hover,
+.custom-theme .el-slider__runway.disabled .el-slider__button:hover {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-slider__runway.disabled .el-slider__button.dragging {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-slider__input {
+  float: right;
+  margin-top: 3px;
+}
+
+.custom-theme .el-slider__bar {
+  height: 6px;
+  background-color: #262729;
+  border-top-left-radius: 3px;
+  border-bottom-left-radius: 3px;
+  position: absolute;
+}
+
+.custom-theme .el-slider__button-wrapper {
+  height: 36px;
+  width: 36px;
+  position: absolute;
+  z-index: 1001;
+  top: -15px;
+  -webkit-transform: translateX(-50%);
+  transform: translateX(-50%);
+  background-color: transparent;
+  text-align: center;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.custom-theme .el-slider__button-wrapper::after {
+  display: inline-block;
+  content: '';
+  height: 100%;
+  vertical-align: middle;
+}
+
+.custom-theme .el-slider__button-wrapper .el-tooltip {
+  vertical-align: middle;
+  display: inline-block;
+}
+
+.custom-theme .el-slider__button-wrapper.hover,
+.custom-theme .el-slider__button-wrapper:hover {
+  cursor: -webkit-grab;
+  cursor: grab;
+}
+
+.custom-theme .el-slider__button-wrapper.dragging {
+  cursor: -webkit-grabbing;
+  cursor: grabbing;
+}
+
+.custom-theme .el-slider__button {
+  width: 16px;
+  height: 16px;
+  border: solid 2px #262729;
+  background-color: #fff;
+  border-radius: 50%;
+  -webkit-transition: 0.2s;
+  transition: 0.2s;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.custom-theme .el-slider__button.dragging,
+.custom-theme .el-slider__button.hover,
+.custom-theme .el-slider__button:hover {
+  -webkit-transform: scale(1.2);
+  transform: scale(1.2);
+}
+
+.custom-theme .el-slider__button.hover,
+.custom-theme .el-slider__button:hover {
+  cursor: -webkit-grab;
+  cursor: grab;
+}
+
+.custom-theme .el-slider__button.dragging {
+  cursor: -webkit-grabbing;
+  cursor: grabbing;
+}
+
+.custom-theme .el-slider__stop {
+  position: absolute;
+  height: 6px;
+  width: 6px;
+  border-radius: 100%;
+  background-color: #fff;
+  -webkit-transform: translateX(-50%);
+  transform: translateX(-50%);
+}
+
+.custom-theme .el-slider.is-vertical {
+  position: relative;
+}
+
+.custom-theme .el-slider.is-vertical .el-slider__runway {
+  width: 4px;
+  height: 100%;
+  margin: 0 16px;
+}
+
+.custom-theme .el-slider.is-vertical .el-slider__bar {
+  width: 4px;
+  height: auto;
+  border-radius: 0 0 3px 3px;
+}
+
+.custom-theme .el-slider.is-vertical .el-slider__button-wrapper {
+  top: auto;
+  left: -15px;
+  -webkit-transform: translateY(50%);
+  transform: translateY(50%);
+}
+
+.custom-theme .el-slider.is-vertical .el-slider__stop {
+  -webkit-transform: translateY(50%);
+  transform: translateY(50%);
+}
+
+.custom-theme .el-slider.is-vertical.el-slider--with-input {
+  padding-bottom: 58px;
+}
+
+.custom-theme .el-slider.is-vertical.el-slider--with-input .el-slider__input {
+  overflow: visible;
+  float: none;
+  position: absolute;
+  bottom: 22px;
+  width: 36px;
+  margin-top: 15px;
+}
+
+.custom-theme .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner {
+  text-align: center;
+  padding-left: 5px;
+  padding-right: 5px;
+}
+
+.custom-theme .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,
+.custom-theme .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase {
+  top: 32px;
+  margin-top: -1px;
+  border: 1px solid #d8dce5;
+  line-height: 20px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+}
+
+.custom-theme .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease {
+  width: 18px;
+  right: 18px;
+  border-bottom-left-radius: 4px;
+}
+
+.custom-theme .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase {
+  width: 19px;
+  border-bottom-right-radius: 4px;
+}
+
+.custom-theme
+.el-slider.is-vertical.el-slider--with-input
+.el-slider__input
+.el-input-number__increase
+~ .el-input
+.el-input__inner {
+  border-bottom-left-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,
+.custom-theme .el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,
+.custom-theme .el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase {
+  border-color: #262729;
+}
+
+.custom-theme .el-loading-parent--relative {
+  position: relative !important;
+}
+
+.custom-theme .el-loading-parent--hidden {
+  overflow: hidden !important;
+}
+
+.custom-theme .el-loading-mask {
+  position: absolute;
+  z-index: 10000;
+  background-color: rgba(255, 255, 255, 0.9);
+  margin: 0;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  -webkit-transition: opacity 0.3s;
+  transition: opacity 0.3s;
+}
+
+.custom-theme .el-loading-mask.is-fullscreen {
+  position: fixed;
+}
+
+.custom-theme .el-loading-mask.is-fullscreen .el-loading-spinner {
+  margin-top: -25px;
+}
+
+.custom-theme .el-loading-mask.is-fullscreen .el-loading-spinner .circular {
+  height: 50px;
+  width: 50px;
+}
+
+.custom-theme .el-loading-spinner {
+  top: 50%;
+  margin-top: -21px;
+  width: 100%;
+  text-align: center;
+  position: absolute;
+}
+
+.custom-theme .el-loading-spinner .el-loading-text {
+  color: #262729;
+  margin: 3px 0;
+  font-size: 14px;
+}
+
+.custom-theme .el-loading-spinner .circular {
+  height: 42px;
+  width: 42px;
+  -webkit-animation: loading-rotate 2s linear infinite;
+  animation: loading-rotate 2s linear infinite;
+}
+
+.custom-theme .el-loading-spinner .path {
+  -webkit-animation: loading-dash 1.5s ease-in-out infinite;
+  animation: loading-dash 1.5s ease-in-out infinite;
+  stroke-dasharray: 90, 150;
+  stroke-dashoffset: 0;
+  stroke-width: 2;
+  stroke: #262729;
+  stroke-linecap: round;
+}
+
+.custom-theme .el-loading-spinner i {
+  color: #262729;
+}
+
+.custom-theme .el-loading-fade-enter,
+.custom-theme .el-loading-fade-leave-active {
+  opacity: 0;
+}
+
+@-webkit-keyframes loading-rotate {
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+
+@keyframes loading-rotate {
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+
+@-webkit-keyframes loading-dash {
+  0% {
+    stroke-dasharray: 1, 200;
+    stroke-dashoffset: 0;
+  }
+  50% {
+    stroke-dasharray: 90, 150;
+    stroke-dashoffset: -40px;
+  }
+  100% {
+    stroke-dasharray: 90, 150;
+    stroke-dashoffset: -120px;
+  }
+}
+
+@keyframes loading-dash {
+  0% {
+    stroke-dasharray: 1, 200;
+    stroke-dashoffset: 0;
+  }
+  50% {
+    stroke-dasharray: 90, 150;
+    stroke-dashoffset: -40px;
+  }
+  100% {
+    stroke-dasharray: 90, 150;
+    stroke-dashoffset: -120px;
+  }
+}
+
+.custom-theme .el-row {
+  position: relative;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-row::after,
+.custom-theme .el-row::before {
+  display: table;
+  content: '';
+}
+
+.custom-theme .el-row::after {
+  clear: both;
+}
+
+.custom-theme .el-row--flex {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+}
+
+.custom-theme .el-row--flex:after,
+.custom-theme .el-row--flex:before {
+  display: none;
+}
+
+.custom-theme .el-row--flex.is-justify-center {
+  -webkit-box-pack: center;
+  -ms-flex-pack: center;
+  justify-content: center;
+}
+
+.custom-theme .el-row--flex.is-justify-end {
+  -webkit-box-pack: end;
+  -ms-flex-pack: end;
+  justify-content: flex-end;
+}
+
+.custom-theme .el-row--flex.is-justify-space-between {
+  -webkit-box-pack: justify;
+  -ms-flex-pack: justify;
+  justify-content: space-between;
+}
+
+.custom-theme .el-row--flex.is-justify-space-around {
+  -ms-flex-pack: distribute;
+  justify-content: space-around;
+}
+
+.custom-theme .el-row--flex.is-align-middle {
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
+}
+
+.custom-theme .el-row--flex.is-align-bottom {
+  -webkit-box-align: end;
+  -ms-flex-align: end;
+  align-items: flex-end;
+}
+
+.custom-theme [class*='el-col-'] {
+  float: left;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-col-0 {
+  display: none;
+}
+
+.custom-theme .el-col-1 {
+  width: 4.16667%;
+}
+
+.custom-theme .el-col-offset-1 {
+  margin-left: 4.16667%;
+}
+
+.custom-theme .el-col-pull-1 {
+  position: relative;
+  right: 4.16667%;
+}
+
+.custom-theme .el-col-push-1 {
+  position: relative;
+  left: 4.16667%;
+}
+
+.custom-theme .el-col-2 {
+  width: 8.33333%;
+}
+
+.custom-theme .el-col-offset-2 {
+  margin-left: 8.33333%;
+}
+
+.custom-theme .el-col-pull-2 {
+  position: relative;
+  right: 8.33333%;
+}
+
+.custom-theme .el-col-push-2 {
+  position: relative;
+  left: 8.33333%;
+}
+
+.custom-theme .el-col-3 {
+  width: 12.5%;
+}
+
+.custom-theme .el-col-offset-3 {
+  margin-left: 12.5%;
+}
+
+.custom-theme .el-col-pull-3 {
+  position: relative;
+  right: 12.5%;
+}
+
+.custom-theme .el-col-push-3 {
+  position: relative;
+  left: 12.5%;
+}
+
+.custom-theme .el-col-4 {
+  width: 16.66667%;
+}
+
+.custom-theme .el-col-offset-4 {
+  margin-left: 16.66667%;
+}
+
+.custom-theme .el-col-pull-4 {
+  position: relative;
+  right: 16.66667%;
+}
+
+.custom-theme .el-col-push-4 {
+  position: relative;
+  left: 16.66667%;
+}
+
+.custom-theme .el-col-5 {
+  width: 20.83333%;
+}
+
+.custom-theme .el-col-offset-5 {
+  margin-left: 20.83333%;
+}
+
+.custom-theme .el-col-pull-5 {
+  position: relative;
+  right: 20.83333%;
+}
+
+.custom-theme .el-col-push-5 {
+  position: relative;
+  left: 20.83333%;
+}
+
+.custom-theme .el-col-6 {
+  width: 25%;
+}
+
+.custom-theme .el-col-offset-6 {
+  margin-left: 25%;
+}
+
+.custom-theme .el-col-pull-6 {
+  position: relative;
+  right: 25%;
+}
+
+.custom-theme .el-col-push-6 {
+  position: relative;
+  left: 25%;
+}
+
+.custom-theme .el-col-7 {
+  width: 29.16667%;
+}
+
+.custom-theme .el-col-offset-7 {
+  margin-left: 29.16667%;
+}
+
+.custom-theme .el-col-pull-7 {
+  position: relative;
+  right: 29.16667%;
+}
+
+.custom-theme .el-col-push-7 {
+  position: relative;
+  left: 29.16667%;
+}
+
+.custom-theme .el-col-8 {
+  width: 33.33333%;
+}
+
+.custom-theme .el-col-offset-8 {
+  margin-left: 33.33333%;
+}
+
+.custom-theme .el-col-pull-8 {
+  position: relative;
+  right: 33.33333%;
+}
+
+.custom-theme .el-col-push-8 {
+  position: relative;
+  left: 33.33333%;
+}
+
+.custom-theme .el-col-9 {
+  width: 37.5%;
+}
+
+.custom-theme .el-col-offset-9 {
+  margin-left: 37.5%;
+}
+
+.custom-theme .el-col-pull-9 {
+  position: relative;
+  right: 37.5%;
+}
+
+.custom-theme .el-col-push-9 {
+  position: relative;
+  left: 37.5%;
+}
+
+.custom-theme .el-col-10 {
+  width: 41.66667%;
+}
+
+.custom-theme .el-col-offset-10 {
+  margin-left: 41.66667%;
+}
+
+.custom-theme .el-col-pull-10 {
+  position: relative;
+  right: 41.66667%;
+}
+
+.custom-theme .el-col-push-10 {
+  position: relative;
+  left: 41.66667%;
+}
+
+.custom-theme .el-col-11 {
+  width: 45.83333%;
+}
+
+.custom-theme .el-col-offset-11 {
+  margin-left: 45.83333%;
+}
+
+.custom-theme .el-col-pull-11 {
+  position: relative;
+  right: 45.83333%;
+}
+
+.custom-theme .el-col-push-11 {
+  position: relative;
+  left: 45.83333%;
+}
+
+.custom-theme .el-col-12 {
+  width: 50%;
+}
+
+.custom-theme .el-col-offset-12 {
+  margin-left: 50%;
+}
+
+.custom-theme .el-col-pull-12 {
+  position: relative;
+  right: 50%;
+}
+
+.custom-theme .el-col-push-12 {
+  position: relative;
+  left: 50%;
+}
+
+.custom-theme .el-col-13 {
+  width: 54.16667%;
+}
+
+.custom-theme .el-col-offset-13 {
+  margin-left: 54.16667%;
+}
+
+.custom-theme .el-col-pull-13 {
+  position: relative;
+  right: 54.16667%;
+}
+
+.custom-theme .el-col-push-13 {
+  position: relative;
+  left: 54.16667%;
+}
+
+.custom-theme .el-col-14 {
+  width: 58.33333%;
+}
+
+.custom-theme .el-col-offset-14 {
+  margin-left: 58.33333%;
+}
+
+.custom-theme .el-col-pull-14 {
+  position: relative;
+  right: 58.33333%;
+}
+
+.custom-theme .el-col-push-14 {
+  position: relative;
+  left: 58.33333%;
+}
+
+.custom-theme .el-col-15 {
+  width: 62.5%;
+}
+
+.custom-theme .el-col-offset-15 {
+  margin-left: 62.5%;
+}
+
+.custom-theme .el-col-pull-15 {
+  position: relative;
+  right: 62.5%;
+}
+
+.custom-theme .el-col-push-15 {
+  position: relative;
+  left: 62.5%;
+}
+
+.custom-theme .el-col-16 {
+  width: 66.66667%;
+}
+
+.custom-theme .el-col-offset-16 {
+  margin-left: 66.66667%;
+}
+
+.custom-theme .el-col-pull-16 {
+  position: relative;
+  right: 66.66667%;
+}
+
+.custom-theme .el-col-push-16 {
+  position: relative;
+  left: 66.66667%;
+}
+
+.custom-theme .el-col-17 {
+  width: 70.83333%;
+}
+
+.custom-theme .el-col-offset-17 {
+  margin-left: 70.83333%;
+}
+
+.custom-theme .el-col-pull-17 {
+  position: relative;
+  right: 70.83333%;
+}
+
+.custom-theme .el-col-push-17 {
+  position: relative;
+  left: 70.83333%;
+}
+
+.custom-theme .el-col-18 {
+  width: 75%;
+}
+
+.custom-theme .el-col-offset-18 {
+  margin-left: 75%;
+}
+
+.custom-theme .el-col-pull-18 {
+  position: relative;
+  right: 75%;
+}
+
+.custom-theme .el-col-push-18 {
+  position: relative;
+  left: 75%;
+}
+
+.custom-theme .el-col-19 {
+  width: 79.16667%;
+}
+
+.custom-theme .el-col-offset-19 {
+  margin-left: 79.16667%;
+}
+
+.custom-theme .el-col-pull-19 {
+  position: relative;
+  right: 79.16667%;
+}
+
+.custom-theme .el-col-push-19 {
+  position: relative;
+  left: 79.16667%;
+}
+
+.custom-theme .el-col-20 {
+  width: 83.33333%;
+}
+
+.custom-theme .el-col-offset-20 {
+  margin-left: 83.33333%;
+}
+
+.custom-theme .el-col-pull-20 {
+  position: relative;
+  right: 83.33333%;
+}
+
+.custom-theme .el-col-push-20 {
+  position: relative;
+  left: 83.33333%;
+}
+
+.custom-theme .el-col-21 {
+  width: 87.5%;
+}
+
+.custom-theme .el-col-offset-21 {
+  margin-left: 87.5%;
+}
+
+.custom-theme .el-col-pull-21 {
+  position: relative;
+  right: 87.5%;
+}
+
+.custom-theme .el-col-push-21 {
+  position: relative;
+  left: 87.5%;
+}
+
+.custom-theme .el-col-22 {
+  width: 91.66667%;
+}
+
+.custom-theme .el-col-offset-22 {
+  margin-left: 91.66667%;
+}
+
+.custom-theme .el-col-pull-22 {
+  position: relative;
+  right: 91.66667%;
+}
+
+.custom-theme .el-col-push-22 {
+  position: relative;
+  left: 91.66667%;
+}
+
+.custom-theme .el-col-23 {
+  width: 95.83333%;
+}
+
+.custom-theme .el-col-offset-23 {
+  margin-left: 95.83333%;
+}
+
+.custom-theme .el-col-pull-23 {
+  position: relative;
+  right: 95.83333%;
+}
+
+.custom-theme .el-col-push-23 {
+  position: relative;
+  left: 95.83333%;
+}
+
+.custom-theme .el-col-24 {
+  width: 100%;
+}
+
+.custom-theme .el-col-offset-24 {
+  margin-left: 100%;
+}
+
+.custom-theme .el-col-pull-24 {
+  position: relative;
+  right: 100%;
+}
+
+.custom-theme .el-col-push-24 {
+  position: relative;
+  left: 100%;
+}
+
+@media only screen and (max-width: 768px) {
+  .custom-theme .el-col-xs-0 {
+    display: none;
+  }
+
+  .custom-theme .el-col-xs-1 {
+    width: 4.16667%;
+  }
+
+  .custom-theme .el-col-xs-offset-1 {
+    margin-left: 4.16667%;
+  }
+
+  .custom-theme .el-col-xs-pull-1 {
+    position: relative;
+    right: 4.16667%;
+  }
+
+  .custom-theme .el-col-xs-push-1 {
+    position: relative;
+    left: 4.16667%;
+  }
+
+  .custom-theme .el-col-xs-2 {
+    width: 8.33333%;
+  }
+
+  .custom-theme .el-col-xs-offset-2 {
+    margin-left: 8.33333%;
+  }
+
+  .custom-theme .el-col-xs-pull-2 {
+    position: relative;
+    right: 8.33333%;
+  }
+
+  .custom-theme .el-col-xs-push-2 {
+    position: relative;
+    left: 8.33333%;
+  }
+
+  .custom-theme .el-col-xs-3 {
+    width: 12.5%;
+  }
+
+  .custom-theme .el-col-xs-offset-3 {
+    margin-left: 12.5%;
+  }
+
+  .custom-theme .el-col-xs-pull-3 {
+    position: relative;
+    right: 12.5%;
+  }
+
+  .custom-theme .el-col-xs-push-3 {
+    position: relative;
+    left: 12.5%;
+  }
+
+  .custom-theme .el-col-xs-4 {
+    width: 16.66667%;
+  }
+
+  .custom-theme .el-col-xs-offset-4 {
+    margin-left: 16.66667%;
+  }
+
+  .custom-theme .el-col-xs-pull-4 {
+    position: relative;
+    right: 16.66667%;
+  }
+
+  .custom-theme .el-col-xs-push-4 {
+    position: relative;
+    left: 16.66667%;
+  }
+
+  .custom-theme .el-col-xs-5 {
+    width: 20.83333%;
+  }
+
+  .custom-theme .el-col-xs-offset-5 {
+    margin-left: 20.83333%;
+  }
+
+  .custom-theme .el-col-xs-pull-5 {
+    position: relative;
+    right: 20.83333%;
+  }
+
+  .custom-theme .el-col-xs-push-5 {
+    position: relative;
+    left: 20.83333%;
+  }
+
+  .custom-theme .el-col-xs-6 {
+    width: 25%;
+  }
+
+  .custom-theme .el-col-xs-offset-6 {
+    margin-left: 25%;
+  }
+
+  .custom-theme .el-col-xs-pull-6 {
+    position: relative;
+    right: 25%;
+  }
+
+  .custom-theme .el-col-xs-push-6 {
+    position: relative;
+    left: 25%;
+  }
+
+  .custom-theme .el-col-xs-7 {
+    width: 29.16667%;
+  }
+
+  .custom-theme .el-col-xs-offset-7 {
+    margin-left: 29.16667%;
+  }
+
+  .custom-theme .el-col-xs-pull-7 {
+    position: relative;
+    right: 29.16667%;
+  }
+
+  .custom-theme .el-col-xs-push-7 {
+    position: relative;
+    left: 29.16667%;
+  }
+
+  .custom-theme .el-col-xs-8 {
+    width: 33.33333%;
+  }
+
+  .custom-theme .el-col-xs-offset-8 {
+    margin-left: 33.33333%;
+  }
+
+  .custom-theme .el-col-xs-pull-8 {
+    position: relative;
+    right: 33.33333%;
+  }
+
+  .custom-theme .el-col-xs-push-8 {
+    position: relative;
+    left: 33.33333%;
+  }
+
+  .custom-theme .el-col-xs-9 {
+    width: 37.5%;
+  }
+
+  .custom-theme .el-col-xs-offset-9 {
+    margin-left: 37.5%;
+  }
+
+  .custom-theme .el-col-xs-pull-9 {
+    position: relative;
+    right: 37.5%;
+  }
+
+  .custom-theme .el-col-xs-push-9 {
+    position: relative;
+    left: 37.5%;
+  }
+
+  .custom-theme .el-col-xs-10 {
+    width: 41.66667%;
+  }
+
+  .custom-theme .el-col-xs-offset-10 {
+    margin-left: 41.66667%;
+  }
+
+  .custom-theme .el-col-xs-pull-10 {
+    position: relative;
+    right: 41.66667%;
+  }
+
+  .custom-theme .el-col-xs-push-10 {
+    position: relative;
+    left: 41.66667%;
+  }
+
+  .custom-theme .el-col-xs-11 {
+    width: 45.83333%;
+  }
+
+  .custom-theme .el-col-xs-offset-11 {
+    margin-left: 45.83333%;
+  }
+
+  .custom-theme .el-col-xs-pull-11 {
+    position: relative;
+    right: 45.83333%;
+  }
+
+  .custom-theme .el-col-xs-push-11 {
+    position: relative;
+    left: 45.83333%;
+  }
+
+  .custom-theme .el-col-xs-12 {
+    width: 50%;
+  }
+
+  .custom-theme .el-col-xs-offset-12 {
+    margin-left: 50%;
+  }
+
+  .custom-theme .el-col-xs-pull-12 {
+    position: relative;
+    right: 50%;
+  }
+
+  .custom-theme .el-col-xs-push-12 {
+    position: relative;
+    left: 50%;
+  }
+
+  .custom-theme .el-col-xs-13 {
+    width: 54.16667%;
+  }
+
+  .custom-theme .el-col-xs-offset-13 {
+    margin-left: 54.16667%;
+  }
+
+  .custom-theme .el-col-xs-pull-13 {
+    position: relative;
+    right: 54.16667%;
+  }
+
+  .custom-theme .el-col-xs-push-13 {
+    position: relative;
+    left: 54.16667%;
+  }
+
+  .custom-theme .el-col-xs-14 {
+    width: 58.33333%;
+  }
+
+  .custom-theme .el-col-xs-offset-14 {
+    margin-left: 58.33333%;
+  }
+
+  .custom-theme .el-col-xs-pull-14 {
+    position: relative;
+    right: 58.33333%;
+  }
+
+  .custom-theme .el-col-xs-push-14 {
+    position: relative;
+    left: 58.33333%;
+  }
+
+  .custom-theme .el-col-xs-15 {
+    width: 62.5%;
+  }
+
+  .custom-theme .el-col-xs-offset-15 {
+    margin-left: 62.5%;
+  }
+
+  .custom-theme .el-col-xs-pull-15 {
+    position: relative;
+    right: 62.5%;
+  }
+
+  .custom-theme .el-col-xs-push-15 {
+    position: relative;
+    left: 62.5%;
+  }
+
+  .custom-theme .el-col-xs-16 {
+    width: 66.66667%;
+  }
+
+  .custom-theme .el-col-xs-offset-16 {
+    margin-left: 66.66667%;
+  }
+
+  .custom-theme .el-col-xs-pull-16 {
+    position: relative;
+    right: 66.66667%;
+  }
+
+  .custom-theme .el-col-xs-push-16 {
+    position: relative;
+    left: 66.66667%;
+  }
+
+  .custom-theme .el-col-xs-17 {
+    width: 70.83333%;
+  }
+
+  .custom-theme .el-col-xs-offset-17 {
+    margin-left: 70.83333%;
+  }
+
+  .custom-theme .el-col-xs-pull-17 {
+    position: relative;
+    right: 70.83333%;
+  }
+
+  .custom-theme .el-col-xs-push-17 {
+    position: relative;
+    left: 70.83333%;
+  }
+
+  .custom-theme .el-col-xs-18 {
+    width: 75%;
+  }
+
+  .custom-theme .el-col-xs-offset-18 {
+    margin-left: 75%;
+  }
+
+  .custom-theme .el-col-xs-pull-18 {
+    position: relative;
+    right: 75%;
+  }
+
+  .custom-theme .el-col-xs-push-18 {
+    position: relative;
+    left: 75%;
+  }
+
+  .custom-theme .el-col-xs-19 {
+    width: 79.16667%;
+  }
+
+  .custom-theme .el-col-xs-offset-19 {
+    margin-left: 79.16667%;
+  }
+
+  .custom-theme .el-col-xs-pull-19 {
+    position: relative;
+    right: 79.16667%;
+  }
+
+  .custom-theme .el-col-xs-push-19 {
+    position: relative;
+    left: 79.16667%;
+  }
+
+  .custom-theme .el-col-xs-20 {
+    width: 83.33333%;
+  }
+
+  .custom-theme .el-col-xs-offset-20 {
+    margin-left: 83.33333%;
+  }
+
+  .custom-theme .el-col-xs-pull-20 {
+    position: relative;
+    right: 83.33333%;
+  }
+
+  .custom-theme .el-col-xs-push-20 {
+    position: relative;
+    left: 83.33333%;
+  }
+
+  .custom-theme .el-col-xs-21 {
+    width: 87.5%;
+  }
+
+  .custom-theme .el-col-xs-offset-21 {
+    margin-left: 87.5%;
+  }
+
+  .custom-theme .el-col-xs-pull-21 {
+    position: relative;
+    right: 87.5%;
+  }
+
+  .custom-theme .el-col-xs-push-21 {
+    position: relative;
+    left: 87.5%;
+  }
+
+  .custom-theme .el-col-xs-22 {
+    width: 91.66667%;
+  }
+
+  .custom-theme .el-col-xs-offset-22 {
+    margin-left: 91.66667%;
+  }
+
+  .custom-theme .el-col-xs-pull-22 {
+    position: relative;
+    right: 91.66667%;
+  }
+
+  .custom-theme .el-col-xs-push-22 {
+    position: relative;
+    left: 91.66667%;
+  }
+
+  .custom-theme .el-col-xs-23 {
+    width: 95.83333%;
+  }
+
+  .custom-theme .el-col-xs-offset-23 {
+    margin-left: 95.83333%;
+  }
+
+  .custom-theme .el-col-xs-pull-23 {
+    position: relative;
+    right: 95.83333%;
+  }
+
+  .custom-theme .el-col-xs-push-23 {
+    position: relative;
+    left: 95.83333%;
+  }
+
+  .custom-theme .el-col-xs-24 {
+    width: 100%;
+  }
+
+  .custom-theme .el-col-xs-offset-24 {
+    margin-left: 100%;
+  }
+
+  .custom-theme .el-col-xs-pull-24 {
+    position: relative;
+    right: 100%;
+  }
+
+  .custom-theme .el-col-xs-push-24 {
+    position: relative;
+    left: 100%;
+  }
+}
+
+@media only screen and (min-width: 768px) {
+  .custom-theme .el-col-sm-0 {
+    display: none;
+  }
+
+  .custom-theme .el-col-sm-1 {
+    width: 4.16667%;
+  }
+
+  .custom-theme .el-col-sm-offset-1 {
+    margin-left: 4.16667%;
+  }
+
+  .custom-theme .el-col-sm-pull-1 {
+    position: relative;
+    right: 4.16667%;
+  }
+
+  .custom-theme .el-col-sm-push-1 {
+    position: relative;
+    left: 4.16667%;
+  }
+
+  .custom-theme .el-col-sm-2 {
+    width: 8.33333%;
+  }
+
+  .custom-theme .el-col-sm-offset-2 {
+    margin-left: 8.33333%;
+  }
+
+  .custom-theme .el-col-sm-pull-2 {
+    position: relative;
+    right: 8.33333%;
+  }
+
+  .custom-theme .el-col-sm-push-2 {
+    position: relative;
+    left: 8.33333%;
+  }
+
+  .custom-theme .el-col-sm-3 {
+    width: 12.5%;
+  }
+
+  .custom-theme .el-col-sm-offset-3 {
+    margin-left: 12.5%;
+  }
+
+  .custom-theme .el-col-sm-pull-3 {
+    position: relative;
+    right: 12.5%;
+  }
+
+  .custom-theme .el-col-sm-push-3 {
+    position: relative;
+    left: 12.5%;
+  }
+
+  .custom-theme .el-col-sm-4 {
+    width: 16.66667%;
+  }
+
+  .custom-theme .el-col-sm-offset-4 {
+    margin-left: 16.66667%;
+  }
+
+  .custom-theme .el-col-sm-pull-4 {
+    position: relative;
+    right: 16.66667%;
+  }
+
+  .custom-theme .el-col-sm-push-4 {
+    position: relative;
+    left: 16.66667%;
+  }
+
+  .custom-theme .el-col-sm-5 {
+    width: 20.83333%;
+  }
+
+  .custom-theme .el-col-sm-offset-5 {
+    margin-left: 20.83333%;
+  }
+
+  .custom-theme .el-col-sm-pull-5 {
+    position: relative;
+    right: 20.83333%;
+  }
+
+  .custom-theme .el-col-sm-push-5 {
+    position: relative;
+    left: 20.83333%;
+  }
+
+  .custom-theme .el-col-sm-6 {
+    width: 25%;
+  }
+
+  .custom-theme .el-col-sm-offset-6 {
+    margin-left: 25%;
+  }
+
+  .custom-theme .el-col-sm-pull-6 {
+    position: relative;
+    right: 25%;
+  }
+
+  .custom-theme .el-col-sm-push-6 {
+    position: relative;
+    left: 25%;
+  }
+
+  .custom-theme .el-col-sm-7 {
+    width: 29.16667%;
+  }
+
+  .custom-theme .el-col-sm-offset-7 {
+    margin-left: 29.16667%;
+  }
+
+  .custom-theme .el-col-sm-pull-7 {
+    position: relative;
+    right: 29.16667%;
+  }
+
+  .custom-theme .el-col-sm-push-7 {
+    position: relative;
+    left: 29.16667%;
+  }
+
+  .custom-theme .el-col-sm-8 {
+    width: 33.33333%;
+  }
+
+  .custom-theme .el-col-sm-offset-8 {
+    margin-left: 33.33333%;
+  }
+
+  .custom-theme .el-col-sm-pull-8 {
+    position: relative;
+    right: 33.33333%;
+  }
+
+  .custom-theme .el-col-sm-push-8 {
+    position: relative;
+    left: 33.33333%;
+  }
+
+  .custom-theme .el-col-sm-9 {
+    width: 37.5%;
+  }
+
+  .custom-theme .el-col-sm-offset-9 {
+    margin-left: 37.5%;
+  }
+
+  .custom-theme .el-col-sm-pull-9 {
+    position: relative;
+    right: 37.5%;
+  }
+
+  .custom-theme .el-col-sm-push-9 {
+    position: relative;
+    left: 37.5%;
+  }
+
+  .custom-theme .el-col-sm-10 {
+    width: 41.66667%;
+  }
+
+  .custom-theme .el-col-sm-offset-10 {
+    margin-left: 41.66667%;
+  }
+
+  .custom-theme .el-col-sm-pull-10 {
+    position: relative;
+    right: 41.66667%;
+  }
+
+  .custom-theme .el-col-sm-push-10 {
+    position: relative;
+    left: 41.66667%;
+  }
+
+  .custom-theme .el-col-sm-11 {
+    width: 45.83333%;
+  }
+
+  .custom-theme .el-col-sm-offset-11 {
+    margin-left: 45.83333%;
+  }
+
+  .custom-theme .el-col-sm-pull-11 {
+    position: relative;
+    right: 45.83333%;
+  }
+
+  .custom-theme .el-col-sm-push-11 {
+    position: relative;
+    left: 45.83333%;
+  }
+
+  .custom-theme .el-col-sm-12 {
+    width: 50%;
+  }
+
+  .custom-theme .el-col-sm-offset-12 {
+    margin-left: 50%;
+  }
+
+  .custom-theme .el-col-sm-pull-12 {
+    position: relative;
+    right: 50%;
+  }
+
+  .custom-theme .el-col-sm-push-12 {
+    position: relative;
+    left: 50%;
+  }
+
+  .custom-theme .el-col-sm-13 {
+    width: 54.16667%;
+  }
+
+  .custom-theme .el-col-sm-offset-13 {
+    margin-left: 54.16667%;
+  }
+
+  .custom-theme .el-col-sm-pull-13 {
+    position: relative;
+    right: 54.16667%;
+  }
+
+  .custom-theme .el-col-sm-push-13 {
+    position: relative;
+    left: 54.16667%;
+  }
+
+  .custom-theme .el-col-sm-14 {
+    width: 58.33333%;
+  }
+
+  .custom-theme .el-col-sm-offset-14 {
+    margin-left: 58.33333%;
+  }
+
+  .custom-theme .el-col-sm-pull-14 {
+    position: relative;
+    right: 58.33333%;
+  }
+
+  .custom-theme .el-col-sm-push-14 {
+    position: relative;
+    left: 58.33333%;
+  }
+
+  .custom-theme .el-col-sm-15 {
+    width: 62.5%;
+  }
+
+  .custom-theme .el-col-sm-offset-15 {
+    margin-left: 62.5%;
+  }
+
+  .custom-theme .el-col-sm-pull-15 {
+    position: relative;
+    right: 62.5%;
+  }
+
+  .custom-theme .el-col-sm-push-15 {
+    position: relative;
+    left: 62.5%;
+  }
+
+  .custom-theme .el-col-sm-16 {
+    width: 66.66667%;
+  }
+
+  .custom-theme .el-col-sm-offset-16 {
+    margin-left: 66.66667%;
+  }
+
+  .custom-theme .el-col-sm-pull-16 {
+    position: relative;
+    right: 66.66667%;
+  }
+
+  .custom-theme .el-col-sm-push-16 {
+    position: relative;
+    left: 66.66667%;
+  }
+
+  .custom-theme .el-col-sm-17 {
+    width: 70.83333%;
+  }
+
+  .custom-theme .el-col-sm-offset-17 {
+    margin-left: 70.83333%;
+  }
+
+  .custom-theme .el-col-sm-pull-17 {
+    position: relative;
+    right: 70.83333%;
+  }
+
+  .custom-theme .el-col-sm-push-17 {
+    position: relative;
+    left: 70.83333%;
+  }
+
+  .custom-theme .el-col-sm-18 {
+    width: 75%;
+  }
+
+  .custom-theme .el-col-sm-offset-18 {
+    margin-left: 75%;
+  }
+
+  .custom-theme .el-col-sm-pull-18 {
+    position: relative;
+    right: 75%;
+  }
+
+  .custom-theme .el-col-sm-push-18 {
+    position: relative;
+    left: 75%;
+  }
+
+  .custom-theme .el-col-sm-19 {
+    width: 79.16667%;
+  }
+
+  .custom-theme .el-col-sm-offset-19 {
+    margin-left: 79.16667%;
+  }
+
+  .custom-theme .el-col-sm-pull-19 {
+    position: relative;
+    right: 79.16667%;
+  }
+
+  .custom-theme .el-col-sm-push-19 {
+    position: relative;
+    left: 79.16667%;
+  }
+
+  .custom-theme .el-col-sm-20 {
+    width: 83.33333%;
+  }
+
+  .custom-theme .el-col-sm-offset-20 {
+    margin-left: 83.33333%;
+  }
+
+  .custom-theme .el-col-sm-pull-20 {
+    position: relative;
+    right: 83.33333%;
+  }
+
+  .custom-theme .el-col-sm-push-20 {
+    position: relative;
+    left: 83.33333%;
+  }
+
+  .custom-theme .el-col-sm-21 {
+    width: 87.5%;
+  }
+
+  .custom-theme .el-col-sm-offset-21 {
+    margin-left: 87.5%;
+  }
+
+  .custom-theme .el-col-sm-pull-21 {
+    position: relative;
+    right: 87.5%;
+  }
+
+  .custom-theme .el-col-sm-push-21 {
+    position: relative;
+    left: 87.5%;
+  }
+
+  .custom-theme .el-col-sm-22 {
+    width: 91.66667%;
+  }
+
+  .custom-theme .el-col-sm-offset-22 {
+    margin-left: 91.66667%;
+  }
+
+  .custom-theme .el-col-sm-pull-22 {
+    position: relative;
+    right: 91.66667%;
+  }
+
+  .custom-theme .el-col-sm-push-22 {
+    position: relative;
+    left: 91.66667%;
+  }
+
+  .custom-theme .el-col-sm-23 {
+    width: 95.83333%;
+  }
+
+  .custom-theme .el-col-sm-offset-23 {
+    margin-left: 95.83333%;
+  }
+
+  .custom-theme .el-col-sm-pull-23 {
+    position: relative;
+    right: 95.83333%;
+  }
+
+  .custom-theme .el-col-sm-push-23 {
+    position: relative;
+    left: 95.83333%;
+  }
+
+  .custom-theme .el-col-sm-24 {
+    width: 100%;
+  }
+
+  .custom-theme .el-col-sm-offset-24 {
+    margin-left: 100%;
+  }
+
+  .custom-theme .el-col-sm-pull-24 {
+    position: relative;
+    right: 100%;
+  }
+
+  .custom-theme .el-col-sm-push-24 {
+    position: relative;
+    left: 100%;
+  }
+}
+
+@media only screen and (min-width: 992px) {
+  .custom-theme .el-col-md-0 {
+    display: none;
+  }
+
+  .custom-theme .el-col-md-1 {
+    width: 4.16667%;
+  }
+
+  .custom-theme .el-col-md-offset-1 {
+    margin-left: 4.16667%;
+  }
+
+  .custom-theme .el-col-md-pull-1 {
+    position: relative;
+    right: 4.16667%;
+  }
+
+  .custom-theme .el-col-md-push-1 {
+    position: relative;
+    left: 4.16667%;
+  }
+
+  .custom-theme .el-col-md-2 {
+    width: 8.33333%;
+  }
+
+  .custom-theme .el-col-md-offset-2 {
+    margin-left: 8.33333%;
+  }
+
+  .custom-theme .el-col-md-pull-2 {
+    position: relative;
+    right: 8.33333%;
+  }
+
+  .custom-theme .el-col-md-push-2 {
+    position: relative;
+    left: 8.33333%;
+  }
+
+  .custom-theme .el-col-md-3 {
+    width: 12.5%;
+  }
+
+  .custom-theme .el-col-md-offset-3 {
+    margin-left: 12.5%;
+  }
+
+  .custom-theme .el-col-md-pull-3 {
+    position: relative;
+    right: 12.5%;
+  }
+
+  .custom-theme .el-col-md-push-3 {
+    position: relative;
+    left: 12.5%;
+  }
+
+  .custom-theme .el-col-md-4 {
+    width: 16.66667%;
+  }
+
+  .custom-theme .el-col-md-offset-4 {
+    margin-left: 16.66667%;
+  }
+
+  .custom-theme .el-col-md-pull-4 {
+    position: relative;
+    right: 16.66667%;
+  }
+
+  .custom-theme .el-col-md-push-4 {
+    position: relative;
+    left: 16.66667%;
+  }
+
+  .custom-theme .el-col-md-5 {
+    width: 20.83333%;
+  }
+
+  .custom-theme .el-col-md-offset-5 {
+    margin-left: 20.83333%;
+  }
+
+  .custom-theme .el-col-md-pull-5 {
+    position: relative;
+    right: 20.83333%;
+  }
+
+  .custom-theme .el-col-md-push-5 {
+    position: relative;
+    left: 20.83333%;
+  }
+
+  .custom-theme .el-col-md-6 {
+    width: 25%;
+  }
+
+  .custom-theme .el-col-md-offset-6 {
+    margin-left: 25%;
+  }
+
+  .custom-theme .el-col-md-pull-6 {
+    position: relative;
+    right: 25%;
+  }
+
+  .custom-theme .el-col-md-push-6 {
+    position: relative;
+    left: 25%;
+  }
+
+  .custom-theme .el-col-md-7 {
+    width: 29.16667%;
+  }
+
+  .custom-theme .el-col-md-offset-7 {
+    margin-left: 29.16667%;
+  }
+
+  .custom-theme .el-col-md-pull-7 {
+    position: relative;
+    right: 29.16667%;
+  }
+
+  .custom-theme .el-col-md-push-7 {
+    position: relative;
+    left: 29.16667%;
+  }
+
+  .custom-theme .el-col-md-8 {
+    width: 33.33333%;
+  }
+
+  .custom-theme .el-col-md-offset-8 {
+    margin-left: 33.33333%;
+  }
+
+  .custom-theme .el-col-md-pull-8 {
+    position: relative;
+    right: 33.33333%;
+  }
+
+  .custom-theme .el-col-md-push-8 {
+    position: relative;
+    left: 33.33333%;
+  }
+
+  .custom-theme .el-col-md-9 {
+    width: 37.5%;
+  }
+
+  .custom-theme .el-col-md-offset-9 {
+    margin-left: 37.5%;
+  }
+
+  .custom-theme .el-col-md-pull-9 {
+    position: relative;
+    right: 37.5%;
+  }
+
+  .custom-theme .el-col-md-push-9 {
+    position: relative;
+    left: 37.5%;
+  }
+
+  .custom-theme .el-col-md-10 {
+    width: 41.66667%;
+  }
+
+  .custom-theme .el-col-md-offset-10 {
+    margin-left: 41.66667%;
+  }
+
+  .custom-theme .el-col-md-pull-10 {
+    position: relative;
+    right: 41.66667%;
+  }
+
+  .custom-theme .el-col-md-push-10 {
+    position: relative;
+    left: 41.66667%;
+  }
+
+  .custom-theme .el-col-md-11 {
+    width: 45.83333%;
+  }
+
+  .custom-theme .el-col-md-offset-11 {
+    margin-left: 45.83333%;
+  }
+
+  .custom-theme .el-col-md-pull-11 {
+    position: relative;
+    right: 45.83333%;
+  }
+
+  .custom-theme .el-col-md-push-11 {
+    position: relative;
+    left: 45.83333%;
+  }
+
+  .custom-theme .el-col-md-12 {
+    width: 50%;
+  }
+
+  .custom-theme .el-col-md-offset-12 {
+    margin-left: 50%;
+  }
+
+  .custom-theme .el-col-md-pull-12 {
+    position: relative;
+    right: 50%;
+  }
+
+  .custom-theme .el-col-md-push-12 {
+    position: relative;
+    left: 50%;
+  }
+
+  .custom-theme .el-col-md-13 {
+    width: 54.16667%;
+  }
+
+  .custom-theme .el-col-md-offset-13 {
+    margin-left: 54.16667%;
+  }
+
+  .custom-theme .el-col-md-pull-13 {
+    position: relative;
+    right: 54.16667%;
+  }
+
+  .custom-theme .el-col-md-push-13 {
+    position: relative;
+    left: 54.16667%;
+  }
+
+  .custom-theme .el-col-md-14 {
+    width: 58.33333%;
+  }
+
+  .custom-theme .el-col-md-offset-14 {
+    margin-left: 58.33333%;
+  }
+
+  .custom-theme .el-col-md-pull-14 {
+    position: relative;
+    right: 58.33333%;
+  }
+
+  .custom-theme .el-col-md-push-14 {
+    position: relative;
+    left: 58.33333%;
+  }
+
+  .custom-theme .el-col-md-15 {
+    width: 62.5%;
+  }
+
+  .custom-theme .el-col-md-offset-15 {
+    margin-left: 62.5%;
+  }
+
+  .custom-theme .el-col-md-pull-15 {
+    position: relative;
+    right: 62.5%;
+  }
+
+  .custom-theme .el-col-md-push-15 {
+    position: relative;
+    left: 62.5%;
+  }
+
+  .custom-theme .el-col-md-16 {
+    width: 66.66667%;
+  }
+
+  .custom-theme .el-col-md-offset-16 {
+    margin-left: 66.66667%;
+  }
+
+  .custom-theme .el-col-md-pull-16 {
+    position: relative;
+    right: 66.66667%;
+  }
+
+  .custom-theme .el-col-md-push-16 {
+    position: relative;
+    left: 66.66667%;
+  }
+
+  .custom-theme .el-col-md-17 {
+    width: 70.83333%;
+  }
+
+  .custom-theme .el-col-md-offset-17 {
+    margin-left: 70.83333%;
+  }
+
+  .custom-theme .el-col-md-pull-17 {
+    position: relative;
+    right: 70.83333%;
+  }
+
+  .custom-theme .el-col-md-push-17 {
+    position: relative;
+    left: 70.83333%;
+  }
+
+  .custom-theme .el-col-md-18 {
+    width: 75%;
+  }
+
+  .custom-theme .el-col-md-offset-18 {
+    margin-left: 75%;
+  }
+
+  .custom-theme .el-col-md-pull-18 {
+    position: relative;
+    right: 75%;
+  }
+
+  .custom-theme .el-col-md-push-18 {
+    position: relative;
+    left: 75%;
+  }
+
+  .custom-theme .el-col-md-19 {
+    width: 79.16667%;
+  }
+
+  .custom-theme .el-col-md-offset-19 {
+    margin-left: 79.16667%;
+  }
+
+  .custom-theme .el-col-md-pull-19 {
+    position: relative;
+    right: 79.16667%;
+  }
+
+  .custom-theme .el-col-md-push-19 {
+    position: relative;
+    left: 79.16667%;
+  }
+
+  .custom-theme .el-col-md-20 {
+    width: 83.33333%;
+  }
+
+  .custom-theme .el-col-md-offset-20 {
+    margin-left: 83.33333%;
+  }
+
+  .custom-theme .el-col-md-pull-20 {
+    position: relative;
+    right: 83.33333%;
+  }
+
+  .custom-theme .el-col-md-push-20 {
+    position: relative;
+    left: 83.33333%;
+  }
+
+  .custom-theme .el-col-md-21 {
+    width: 87.5%;
+  }
+
+  .custom-theme .el-col-md-offset-21 {
+    margin-left: 87.5%;
+  }
+
+  .custom-theme .el-col-md-pull-21 {
+    position: relative;
+    right: 87.5%;
+  }
+
+  .custom-theme .el-col-md-push-21 {
+    position: relative;
+    left: 87.5%;
+  }
+
+  .custom-theme .el-col-md-22 {
+    width: 91.66667%;
+  }
+
+  .custom-theme .el-col-md-offset-22 {
+    margin-left: 91.66667%;
+  }
+
+  .custom-theme .el-col-md-pull-22 {
+    position: relative;
+    right: 91.66667%;
+  }
+
+  .custom-theme .el-col-md-push-22 {
+    position: relative;
+    left: 91.66667%;
+  }
+
+  .custom-theme .el-col-md-23 {
+    width: 95.83333%;
+  }
+
+  .custom-theme .el-col-md-offset-23 {
+    margin-left: 95.83333%;
+  }
+
+  .custom-theme .el-col-md-pull-23 {
+    position: relative;
+    right: 95.83333%;
+  }
+
+  .custom-theme .el-col-md-push-23 {
+    position: relative;
+    left: 95.83333%;
+  }
+
+  .custom-theme .el-col-md-24 {
+    width: 100%;
+  }
+
+  .custom-theme .el-col-md-offset-24 {
+    margin-left: 100%;
+  }
+
+  .custom-theme .el-col-md-pull-24 {
+    position: relative;
+    right: 100%;
+  }
+
+  .custom-theme .el-col-md-push-24 {
+    position: relative;
+    left: 100%;
+  }
+}
+
+@media only screen and (min-width: 1200px) {
+  .custom-theme .el-col-lg-0 {
+    display: none;
+  }
+
+  .custom-theme .el-col-lg-1 {
+    width: 4.16667%;
+  }
+
+  .custom-theme .el-col-lg-offset-1 {
+    margin-left: 4.16667%;
+  }
+
+  .custom-theme .el-col-lg-pull-1 {
+    position: relative;
+    right: 4.16667%;
+  }
+
+  .custom-theme .el-col-lg-push-1 {
+    position: relative;
+    left: 4.16667%;
+  }
+
+  .custom-theme .el-col-lg-2 {
+    width: 8.33333%;
+  }
+
+  .custom-theme .el-col-lg-offset-2 {
+    margin-left: 8.33333%;
+  }
+
+  .custom-theme .el-col-lg-pull-2 {
+    position: relative;
+    right: 8.33333%;
+  }
+
+  .custom-theme .el-col-lg-push-2 {
+    position: relative;
+    left: 8.33333%;
+  }
+
+  .custom-theme .el-col-lg-3 {
+    width: 12.5%;
+  }
+
+  .custom-theme .el-col-lg-offset-3 {
+    margin-left: 12.5%;
+  }
+
+  .custom-theme .el-col-lg-pull-3 {
+    position: relative;
+    right: 12.5%;
+  }
+
+  .custom-theme .el-col-lg-push-3 {
+    position: relative;
+    left: 12.5%;
+  }
+
+  .custom-theme .el-col-lg-4 {
+    width: 16.66667%;
+  }
+
+  .custom-theme .el-col-lg-offset-4 {
+    margin-left: 16.66667%;
+  }
+
+  .custom-theme .el-col-lg-pull-4 {
+    position: relative;
+    right: 16.66667%;
+  }
+
+  .custom-theme .el-col-lg-push-4 {
+    position: relative;
+    left: 16.66667%;
+  }
+
+  .custom-theme .el-col-lg-5 {
+    width: 20.83333%;
+  }
+
+  .custom-theme .el-col-lg-offset-5 {
+    margin-left: 20.83333%;
+  }
+
+  .custom-theme .el-col-lg-pull-5 {
+    position: relative;
+    right: 20.83333%;
+  }
+
+  .custom-theme .el-col-lg-push-5 {
+    position: relative;
+    left: 20.83333%;
+  }
+
+  .custom-theme .el-col-lg-6 {
+    width: 25%;
+  }
+
+  .custom-theme .el-col-lg-offset-6 {
+    margin-left: 25%;
+  }
+
+  .custom-theme .el-col-lg-pull-6 {
+    position: relative;
+    right: 25%;
+  }
+
+  .custom-theme .el-col-lg-push-6 {
+    position: relative;
+    left: 25%;
+  }
+
+  .custom-theme .el-col-lg-7 {
+    width: 29.16667%;
+  }
+
+  .custom-theme .el-col-lg-offset-7 {
+    margin-left: 29.16667%;
+  }
+
+  .custom-theme .el-col-lg-pull-7 {
+    position: relative;
+    right: 29.16667%;
+  }
+
+  .custom-theme .el-col-lg-push-7 {
+    position: relative;
+    left: 29.16667%;
+  }
+
+  .custom-theme .el-col-lg-8 {
+    width: 33.33333%;
+  }
+
+  .custom-theme .el-col-lg-offset-8 {
+    margin-left: 33.33333%;
+  }
+
+  .custom-theme .el-col-lg-pull-8 {
+    position: relative;
+    right: 33.33333%;
+  }
+
+  .custom-theme .el-col-lg-push-8 {
+    position: relative;
+    left: 33.33333%;
+  }
+
+  .custom-theme .el-col-lg-9 {
+    width: 37.5%;
+  }
+
+  .custom-theme .el-col-lg-offset-9 {
+    margin-left: 37.5%;
+  }
+
+  .custom-theme .el-col-lg-pull-9 {
+    position: relative;
+    right: 37.5%;
+  }
+
+  .custom-theme .el-col-lg-push-9 {
+    position: relative;
+    left: 37.5%;
+  }
+
+  .custom-theme .el-col-lg-10 {
+    width: 41.66667%;
+  }
+
+  .custom-theme .el-col-lg-offset-10 {
+    margin-left: 41.66667%;
+  }
+
+  .custom-theme .el-col-lg-pull-10 {
+    position: relative;
+    right: 41.66667%;
+  }
+
+  .custom-theme .el-col-lg-push-10 {
+    position: relative;
+    left: 41.66667%;
+  }
+
+  .custom-theme .el-col-lg-11 {
+    width: 45.83333%;
+  }
+
+  .custom-theme .el-col-lg-offset-11 {
+    margin-left: 45.83333%;
+  }
+
+  .custom-theme .el-col-lg-pull-11 {
+    position: relative;
+    right: 45.83333%;
+  }
+
+  .custom-theme .el-col-lg-push-11 {
+    position: relative;
+    left: 45.83333%;
+  }
+
+  .custom-theme .el-col-lg-12 {
+    width: 50%;
+  }
+
+  .custom-theme .el-col-lg-offset-12 {
+    margin-left: 50%;
+  }
+
+  .custom-theme .el-col-lg-pull-12 {
+    position: relative;
+    right: 50%;
+  }
+
+  .custom-theme .el-col-lg-push-12 {
+    position: relative;
+    left: 50%;
+  }
+
+  .custom-theme .el-col-lg-13 {
+    width: 54.16667%;
+  }
+
+  .custom-theme .el-col-lg-offset-13 {
+    margin-left: 54.16667%;
+  }
+
+  .custom-theme .el-col-lg-pull-13 {
+    position: relative;
+    right: 54.16667%;
+  }
+
+  .custom-theme .el-col-lg-push-13 {
+    position: relative;
+    left: 54.16667%;
+  }
+
+  .custom-theme .el-col-lg-14 {
+    width: 58.33333%;
+  }
+
+  .custom-theme .el-col-lg-offset-14 {
+    margin-left: 58.33333%;
+  }
+
+  .custom-theme .el-col-lg-pull-14 {
+    position: relative;
+    right: 58.33333%;
+  }
+
+  .custom-theme .el-col-lg-push-14 {
+    position: relative;
+    left: 58.33333%;
+  }
+
+  .custom-theme .el-col-lg-15 {
+    width: 62.5%;
+  }
+
+  .custom-theme .el-col-lg-offset-15 {
+    margin-left: 62.5%;
+  }
+
+  .custom-theme .el-col-lg-pull-15 {
+    position: relative;
+    right: 62.5%;
+  }
+
+  .custom-theme .el-col-lg-push-15 {
+    position: relative;
+    left: 62.5%;
+  }
+
+  .custom-theme .el-col-lg-16 {
+    width: 66.66667%;
+  }
+
+  .custom-theme .el-col-lg-offset-16 {
+    margin-left: 66.66667%;
+  }
+
+  .custom-theme .el-col-lg-pull-16 {
+    position: relative;
+    right: 66.66667%;
+  }
+
+  .custom-theme .el-col-lg-push-16 {
+    position: relative;
+    left: 66.66667%;
+  }
+
+  .custom-theme .el-col-lg-17 {
+    width: 70.83333%;
+  }
+
+  .custom-theme .el-col-lg-offset-17 {
+    margin-left: 70.83333%;
+  }
+
+  .custom-theme .el-col-lg-pull-17 {
+    position: relative;
+    right: 70.83333%;
+  }
+
+  .custom-theme .el-col-lg-push-17 {
+    position: relative;
+    left: 70.83333%;
+  }
+
+  .custom-theme .el-col-lg-18 {
+    width: 75%;
+  }
+
+  .custom-theme .el-col-lg-offset-18 {
+    margin-left: 75%;
+  }
+
+  .custom-theme .el-col-lg-pull-18 {
+    position: relative;
+    right: 75%;
+  }
+
+  .custom-theme .el-col-lg-push-18 {
+    position: relative;
+    left: 75%;
+  }
+
+  .custom-theme .el-col-lg-19 {
+    width: 79.16667%;
+  }
+
+  .custom-theme .el-col-lg-offset-19 {
+    margin-left: 79.16667%;
+  }
+
+  .custom-theme .el-col-lg-pull-19 {
+    position: relative;
+    right: 79.16667%;
+  }
+
+  .custom-theme .el-col-lg-push-19 {
+    position: relative;
+    left: 79.16667%;
+  }
+
+  .custom-theme .el-col-lg-20 {
+    width: 83.33333%;
+  }
+
+  .custom-theme .el-col-lg-offset-20 {
+    margin-left: 83.33333%;
+  }
+
+  .custom-theme .el-col-lg-pull-20 {
+    position: relative;
+    right: 83.33333%;
+  }
+
+  .custom-theme .el-col-lg-push-20 {
+    position: relative;
+    left: 83.33333%;
+  }
+
+  .custom-theme .el-col-lg-21 {
+    width: 87.5%;
+  }
+
+  .custom-theme .el-col-lg-offset-21 {
+    margin-left: 87.5%;
+  }
+
+  .custom-theme .el-col-lg-pull-21 {
+    position: relative;
+    right: 87.5%;
+  }
+
+  .custom-theme .el-col-lg-push-21 {
+    position: relative;
+    left: 87.5%;
+  }
+
+  .custom-theme .el-col-lg-22 {
+    width: 91.66667%;
+  }
+
+  .custom-theme .el-col-lg-offset-22 {
+    margin-left: 91.66667%;
+  }
+
+  .custom-theme .el-col-lg-pull-22 {
+    position: relative;
+    right: 91.66667%;
+  }
+
+  .custom-theme .el-col-lg-push-22 {
+    position: relative;
+    left: 91.66667%;
+  }
+
+  .custom-theme .el-col-lg-23 {
+    width: 95.83333%;
+  }
+
+  .custom-theme .el-col-lg-offset-23 {
+    margin-left: 95.83333%;
+  }
+
+  .custom-theme .el-col-lg-pull-23 {
+    position: relative;
+    right: 95.83333%;
+  }
+
+  .custom-theme .el-col-lg-push-23 {
+    position: relative;
+    left: 95.83333%;
+  }
+
+  .custom-theme .el-col-lg-24 {
+    width: 100%;
+  }
+
+  .custom-theme .el-col-lg-offset-24 {
+    margin-left: 100%;
+  }
+
+  .custom-theme .el-col-lg-pull-24 {
+    position: relative;
+    right: 100%;
+  }
+
+  .custom-theme .el-col-lg-push-24 {
+    position: relative;
+    left: 100%;
+  }
+}
+
+@media only screen and (min-width: 1920px) {
+  .custom-theme .el-col-xl-0 {
+    display: none;
+  }
+
+  .custom-theme .el-col-xl-1 {
+    width: 4.16667%;
+  }
+
+  .custom-theme .el-col-xl-offset-1 {
+    margin-left: 4.16667%;
+  }
+
+  .custom-theme .el-col-xl-pull-1 {
+    position: relative;
+    right: 4.16667%;
+  }
+
+  .custom-theme .el-col-xl-push-1 {
+    position: relative;
+    left: 4.16667%;
+  }
+
+  .custom-theme .el-col-xl-2 {
+    width: 8.33333%;
+  }
+
+  .custom-theme .el-col-xl-offset-2 {
+    margin-left: 8.33333%;
+  }
+
+  .custom-theme .el-col-xl-pull-2 {
+    position: relative;
+    right: 8.33333%;
+  }
+
+  .custom-theme .el-col-xl-push-2 {
+    position: relative;
+    left: 8.33333%;
+  }
+
+  .custom-theme .el-col-xl-3 {
+    width: 12.5%;
+  }
+
+  .custom-theme .el-col-xl-offset-3 {
+    margin-left: 12.5%;
+  }
+
+  .custom-theme .el-col-xl-pull-3 {
+    position: relative;
+    right: 12.5%;
+  }
+
+  .custom-theme .el-col-xl-push-3 {
+    position: relative;
+    left: 12.5%;
+  }
+
+  .custom-theme .el-col-xl-4 {
+    width: 16.66667%;
+  }
+
+  .custom-theme .el-col-xl-offset-4 {
+    margin-left: 16.66667%;
+  }
+
+  .custom-theme .el-col-xl-pull-4 {
+    position: relative;
+    right: 16.66667%;
+  }
+
+  .custom-theme .el-col-xl-push-4 {
+    position: relative;
+    left: 16.66667%;
+  }
+
+  .custom-theme .el-col-xl-5 {
+    width: 20.83333%;
+  }
+
+  .custom-theme .el-col-xl-offset-5 {
+    margin-left: 20.83333%;
+  }
+
+  .custom-theme .el-col-xl-pull-5 {
+    position: relative;
+    right: 20.83333%;
+  }
+
+  .custom-theme .el-col-xl-push-5 {
+    position: relative;
+    left: 20.83333%;
+  }
+
+  .custom-theme .el-col-xl-6 {
+    width: 25%;
+  }
+
+  .custom-theme .el-col-xl-offset-6 {
+    margin-left: 25%;
+  }
+
+  .custom-theme .el-col-xl-pull-6 {
+    position: relative;
+    right: 25%;
+  }
+
+  .custom-theme .el-col-xl-push-6 {
+    position: relative;
+    left: 25%;
+  }
+
+  .custom-theme .el-col-xl-7 {
+    width: 29.16667%;
+  }
+
+  .custom-theme .el-col-xl-offset-7 {
+    margin-left: 29.16667%;
+  }
+
+  .custom-theme .el-col-xl-pull-7 {
+    position: relative;
+    right: 29.16667%;
+  }
+
+  .custom-theme .el-col-xl-push-7 {
+    position: relative;
+    left: 29.16667%;
+  }
+
+  .custom-theme .el-col-xl-8 {
+    width: 33.33333%;
+  }
+
+  .custom-theme .el-col-xl-offset-8 {
+    margin-left: 33.33333%;
+  }
+
+  .custom-theme .el-col-xl-pull-8 {
+    position: relative;
+    right: 33.33333%;
+  }
+
+  .custom-theme .el-col-xl-push-8 {
+    position: relative;
+    left: 33.33333%;
+  }
+
+  .custom-theme .el-col-xl-9 {
+    width: 37.5%;
+  }
+
+  .custom-theme .el-col-xl-offset-9 {
+    margin-left: 37.5%;
+  }
+
+  .custom-theme .el-col-xl-pull-9 {
+    position: relative;
+    right: 37.5%;
+  }
+
+  .custom-theme .el-col-xl-push-9 {
+    position: relative;
+    left: 37.5%;
+  }
+
+  .custom-theme .el-col-xl-10 {
+    width: 41.66667%;
+  }
+
+  .custom-theme .el-col-xl-offset-10 {
+    margin-left: 41.66667%;
+  }
+
+  .custom-theme .el-col-xl-pull-10 {
+    position: relative;
+    right: 41.66667%;
+  }
+
+  .custom-theme .el-col-xl-push-10 {
+    position: relative;
+    left: 41.66667%;
+  }
+
+  .custom-theme .el-col-xl-11 {
+    width: 45.83333%;
+  }
+
+  .custom-theme .el-col-xl-offset-11 {
+    margin-left: 45.83333%;
+  }
+
+  .custom-theme .el-col-xl-pull-11 {
+    position: relative;
+    right: 45.83333%;
+  }
+
+  .custom-theme .el-col-xl-push-11 {
+    position: relative;
+    left: 45.83333%;
+  }
+
+  .custom-theme .el-col-xl-12 {
+    width: 50%;
+  }
+
+  .custom-theme .el-col-xl-offset-12 {
+    margin-left: 50%;
+  }
+
+  .custom-theme .el-col-xl-pull-12 {
+    position: relative;
+    right: 50%;
+  }
+
+  .custom-theme .el-col-xl-push-12 {
+    position: relative;
+    left: 50%;
+  }
+
+  .custom-theme .el-col-xl-13 {
+    width: 54.16667%;
+  }
+
+  .custom-theme .el-col-xl-offset-13 {
+    margin-left: 54.16667%;
+  }
+
+  .custom-theme .el-col-xl-pull-13 {
+    position: relative;
+    right: 54.16667%;
+  }
+
+  .custom-theme .el-col-xl-push-13 {
+    position: relative;
+    left: 54.16667%;
+  }
+
+  .custom-theme .el-col-xl-14 {
+    width: 58.33333%;
+  }
+
+  .custom-theme .el-col-xl-offset-14 {
+    margin-left: 58.33333%;
+  }
+
+  .custom-theme .el-col-xl-pull-14 {
+    position: relative;
+    right: 58.33333%;
+  }
+
+  .custom-theme .el-col-xl-push-14 {
+    position: relative;
+    left: 58.33333%;
+  }
+
+  .custom-theme .el-col-xl-15 {
+    width: 62.5%;
+  }
+
+  .custom-theme .el-col-xl-offset-15 {
+    margin-left: 62.5%;
+  }
+
+  .custom-theme .el-col-xl-pull-15 {
+    position: relative;
+    right: 62.5%;
+  }
+
+  .custom-theme .el-col-xl-push-15 {
+    position: relative;
+    left: 62.5%;
+  }
+
+  .custom-theme .el-col-xl-16 {
+    width: 66.66667%;
+  }
+
+  .custom-theme .el-col-xl-offset-16 {
+    margin-left: 66.66667%;
+  }
+
+  .custom-theme .el-col-xl-pull-16 {
+    position: relative;
+    right: 66.66667%;
+  }
+
+  .custom-theme .el-col-xl-push-16 {
+    position: relative;
+    left: 66.66667%;
+  }
+
+  .custom-theme .el-col-xl-17 {
+    width: 70.83333%;
+  }
+
+  .custom-theme .el-col-xl-offset-17 {
+    margin-left: 70.83333%;
+  }
+
+  .custom-theme .el-col-xl-pull-17 {
+    position: relative;
+    right: 70.83333%;
+  }
+
+  .custom-theme .el-col-xl-push-17 {
+    position: relative;
+    left: 70.83333%;
+  }
+
+  .custom-theme .el-col-xl-18 {
+    width: 75%;
+  }
+
+  .custom-theme .el-col-xl-offset-18 {
+    margin-left: 75%;
+  }
+
+  .custom-theme .el-col-xl-pull-18 {
+    position: relative;
+    right: 75%;
+  }
+
+  .custom-theme .el-col-xl-push-18 {
+    position: relative;
+    left: 75%;
+  }
+
+  .custom-theme .el-col-xl-19 {
+    width: 79.16667%;
+  }
+
+  .custom-theme .el-col-xl-offset-19 {
+    margin-left: 79.16667%;
+  }
+
+  .custom-theme .el-col-xl-pull-19 {
+    position: relative;
+    right: 79.16667%;
+  }
+
+  .custom-theme .el-col-xl-push-19 {
+    position: relative;
+    left: 79.16667%;
+  }
+
+  .custom-theme .el-col-xl-20 {
+    width: 83.33333%;
+  }
+
+  .custom-theme .el-col-xl-offset-20 {
+    margin-left: 83.33333%;
+  }
+
+  .custom-theme .el-col-xl-pull-20 {
+    position: relative;
+    right: 83.33333%;
+  }
+
+  .custom-theme .el-col-xl-push-20 {
+    position: relative;
+    left: 83.33333%;
+  }
+
+  .custom-theme .el-col-xl-21 {
+    width: 87.5%;
+  }
+
+  .custom-theme .el-col-xl-offset-21 {
+    margin-left: 87.5%;
+  }
+
+  .custom-theme .el-col-xl-pull-21 {
+    position: relative;
+    right: 87.5%;
+  }
+
+  .custom-theme .el-col-xl-push-21 {
+    position: relative;
+    left: 87.5%;
+  }
+
+  .custom-theme .el-col-xl-22 {
+    width: 91.66667%;
+  }
+
+  .custom-theme .el-col-xl-offset-22 {
+    margin-left: 91.66667%;
+  }
+
+  .custom-theme .el-col-xl-pull-22 {
+    position: relative;
+    right: 91.66667%;
+  }
+
+  .custom-theme .el-col-xl-push-22 {
+    position: relative;
+    left: 91.66667%;
+  }
+
+  .custom-theme .el-col-xl-23 {
+    width: 95.83333%;
+  }
+
+  .custom-theme .el-col-xl-offset-23 {
+    margin-left: 95.83333%;
+  }
+
+  .custom-theme .el-col-xl-pull-23 {
+    position: relative;
+    right: 95.83333%;
+  }
+
+  .custom-theme .el-col-xl-push-23 {
+    position: relative;
+    left: 95.83333%;
+  }
+
+  .custom-theme .el-col-xl-24 {
+    width: 100%;
+  }
+
+  .custom-theme .el-col-xl-offset-24 {
+    margin-left: 100%;
+  }
+
+  .custom-theme .el-col-xl-pull-24 {
+    position: relative;
+    right: 100%;
+  }
+
+  .custom-theme .el-col-xl-push-24 {
+    position: relative;
+    left: 100%;
+  }
+}
+
+.custom-theme .el-progress {
+  position: relative;
+  line-height: 1;
+}
+
+.custom-theme .el-progress__text {
+  font-size: 14px;
+  color: #5a5e66;
+  display: inline-block;
+  vertical-align: middle;
+  margin-left: 10px;
+  line-height: 1;
+}
+
+.custom-theme .el-progress__text i {
+  vertical-align: middle;
+  display: block;
+}
+
+.custom-theme .el-progress--circle {
+  display: inline-block;
+}
+
+.custom-theme .el-progress--circle .el-progress__text {
+  position: absolute;
+  top: 50%;
+  left: 0;
+  width: 100%;
+  text-align: center;
+  margin: 0;
+  -webkit-transform: translate(0, -50%);
+  transform: translate(0, -50%);
+}
+
+.custom-theme .el-progress--circle .el-progress__text i {
+  vertical-align: middle;
+  display: inline-block;
+}
+
+.custom-theme .el-progress--without-text .el-progress__text {
+  display: none;
+}
+
+.custom-theme .el-progress--without-text .el-progress-bar {
+  padding-right: 0;
+  margin-right: 0;
+  display: block;
+}
+
+.custom-theme .el-progress--text-inside .el-progress-bar {
+  padding-right: 0;
+  margin-right: 0;
+}
+
+.custom-theme .el-progress.is-success .el-progress-bar__inner {
+  background-color: #409167;
+}
+
+.custom-theme .el-progress.is-success .el-progress__text {
+  color: #409167;
+}
+
+.custom-theme .el-progress.is-exception .el-progress-bar__inner {
+  background-color: #b3450e;
+}
+
+.custom-theme .el-progress.is-exception .el-progress__text {
+  color: #b3450e;
+}
+
+.custom-theme .el-progress-bar {
+  padding-right: 50px;
+  display: inline-block;
+  vertical-align: middle;
+  width: 100%;
+  margin-right: -55px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-progress-bar__outer {
+  height: 6px;
+  border-radius: 100px;
+  background-color: #e6ebf5;
+  overflow: hidden;
+  position: relative;
+  vertical-align: middle;
+}
+
+.custom-theme .el-progress-bar__inner {
+  position: absolute;
+  left: 0;
+  top: 0;
+  height: 100%;
+  background-color: #262729;
+  text-align: right;
+  border-radius: 100px;
+  line-height: 1;
+  white-space: nowrap;
+}
+
+.custom-theme .el-progress-bar__inner::after {
+  display: inline-block;
+  content: '';
+  height: 100%;
+  vertical-align: middle;
+}
+
+.custom-theme .el-progress-bar__innerText {
+  display: inline-block;
+  vertical-align: middle;
+  color: #fff;
+  font-size: 12px;
+  margin: 0 5px;
+}
+
+@-webkit-keyframes progress {
+  0% {
+    background-position: 0 0;
+  }
+  100% {
+    background-position: 32px 0;
+  }
+}
+
+@keyframes progress {
+  0% {
+    background-position: 0 0;
+  }
+  100% {
+    background-position: 32px 0;
+  }
+}
+
+.custom-theme .el-upload {
+  display: inline-block;
+  text-align: center;
+  cursor: pointer;
+}
+
+.custom-theme .el-upload__input {
+  display: none;
+}
+
+.custom-theme .el-upload__tip {
+  font-size: 12px;
+  color: #5a5e66;
+  margin-top: 7px;
+}
+
+.custom-theme .el-upload iframe {
+  position: absolute;
+  z-index: -1;
+  top: 0;
+  left: 0;
+  opacity: 0;
+}
+
+.custom-theme .el-upload--picture-card {
+  background-color: #fbfdff;
+  border: 1px dashed #c0ccda;
+  border-radius: 6px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 148px;
+  height: 148px;
+  cursor: pointer;
+  line-height: 146px;
+  vertical-align: top;
+}
+
+.custom-theme .el-upload--picture-card i {
+  font-size: 28px;
+  color: #8c939d;
+}
+
+.custom-theme .el-upload--picture-card:hover {
+  border-color: #262729;
+  color: #262729;
+}
+
+.custom-theme .el-upload-dragger {
+  background-color: #fff;
+  border: 1px dashed #d9d9d9;
+  border-radius: 6px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 360px;
+  height: 180px;
+  text-align: center;
+  cursor: pointer;
+  position: relative;
+  overflow: hidden;
+}
+
+.custom-theme .el-upload-dragger .el-icon-upload {
+  font-size: 67px;
+  color: #b4bccc;
+  margin: 40px 0 16px;
+  line-height: 50px;
+}
+
+.custom-theme .el-upload-dragger + .el-upload__tip {
+  text-align: center;
+}
+
+.custom-theme .el-upload-dragger ~ .el-upload__files {
+  border-top: 1px solid #d8dce5;
+  margin-top: 7px;
+  padding-top: 5px;
+}
+
+.custom-theme .el-upload-dragger .el-upload__text {
+  color: #5a5e66;
+  font-size: 14px;
+  text-align: center;
+}
+
+.custom-theme .el-upload-dragger .el-upload__text em {
+  color: #262729;
+  font-style: normal;
+}
+
+.custom-theme .el-upload-dragger:hover {
+  border-color: #262729;
+}
+
+.custom-theme .el-upload-dragger.is-dragover {
+  background-color: rgba(32, 159, 255, 0.06);
+  border: 2px dashed #262729;
+}
+
+.custom-theme .el-upload-list {
+  margin: 0;
+  padding: 0;
+  list-style: none;
+}
+
+.custom-theme .el-upload-list__item {
+  -webkit-transition: all 0.5s cubic-bezier(0.55, 0, 0.1, 1);
+  transition: all 0.5s cubic-bezier(0.55, 0, 0.1, 1);
+  font-size: 14px;
+  color: #5a5e66;
+  line-height: 1.8;
+  margin-top: 5px;
+  position: relative;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  border-radius: 4px;
+  width: 100%;
+}
+
+.custom-theme .el-upload-list__item .el-progress {
+  position: absolute;
+  top: 20px;
+  width: 100%;
+}
+
+.custom-theme .el-upload-list__item .el-progress__text {
+  position: absolute;
+  right: 0;
+  top: -13px;
+}
+
+.custom-theme .el-upload-list__item .el-progress-bar {
+  margin-right: 0;
+  padding-right: 0;
+}
+
+.custom-theme .el-upload-list__item:first-child {
+  margin-top: 10px;
+}
+
+.custom-theme .el-upload-list__item .el-icon-upload-success {
+  color: #409167;
+}
+
+.custom-theme .el-upload-list__item .el-icon-close {
+  display: none;
+  position: absolute;
+  top: 5px;
+  right: 5px;
+  cursor: pointer;
+  opacity: 0.75;
+  color: #5a5e66;
+}
+
+.custom-theme .el-upload-list__item .el-icon-close:hover {
+  opacity: 1;
+}
+
+.custom-theme .el-upload-list__item .el-icon-close-tip {
+  display: none;
+  position: absolute;
+  top: 5px;
+  right: 0;
+  cursor: pointer;
+  opacity: 1;
+  color: #262729;
+  -webkit-transform: translate(15%, 0);
+  transform: translate(15%, 0);
+}
+
+.custom-theme .el-upload-list__item:hover {
+  background-color: #f5f7fa;
+}
+
+.custom-theme .el-upload-list__item:hover .el-icon-close {
+  display: inline-block;
+}
+
+.custom-theme .el-upload-list__item:hover .el-progress__text {
+  display: none;
+}
+
+.custom-theme .el-upload-list__item.is-success .el-upload-list__item-status-label {
+  display: block;
+}
+
+.custom-theme .el-upload-list__item.is-success .el-upload-list__item-name:focus,
+.custom-theme .el-upload-list__item.is-success .el-upload-list__item-name:hover {
+  color: #262729;
+  cursor: pointer;
+}
+
+.custom-theme .el-upload-list__item.is-success:focus .el-icon-close-tip {
+  display: inline-block;
+}
+
+.custom-theme .el-upload-list__item.is-success:active,
+.custom-theme .el-upload-list__item.is-success:focus:not(.focusing) {
+  outline-width: 0;
+}
+
+.custom-theme .el-upload-list__item.is-success:active .el-icon-close-tip,
+.custom-theme .el-upload-list__item.is-success:focus:not(.focusing) .el-icon-close-tip {
+  display: none;
+}
+
+.custom-theme .el-upload-list__item.is-success:focus .el-upload-list__item-status-label,
+.custom-theme .el-upload-list__item.is-success:hover .el-upload-list__item-status-label {
+  display: none;
+}
+
+.custom-theme .el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label {
+  display: block;
+}
+
+.custom-theme .el-upload-list__item-name {
+  color: #5a5e66;
+  display: block;
+  margin-right: 40px;
+  overflow: hidden;
+  padding-left: 4px;
+  text-overflow: ellipsis;
+  -webkit-transition: color 0.3s;
+  transition: color 0.3s;
+  white-space: nowrap;
+}
+
+.custom-theme .el-upload-list__item-name [class^='el-icon'] {
+  height: 100%;
+  margin-right: 7px;
+  color: #878d99;
+  line-height: inherit;
+}
+
+.custom-theme .el-upload-list__item-status-label {
+  position: absolute;
+  right: 5px;
+  top: 0;
+  line-height: inherit;
+  display: none;
+}
+
+.custom-theme .el-upload-list__item-delete {
+  position: absolute;
+  right: 10px;
+  top: 0;
+  font-size: 12px;
+  color: #5a5e66;
+  display: none;
+}
+
+.custom-theme .el-upload-list__item-delete:hover {
+  color: #262729;
+}
+
+.custom-theme .el-upload-list--picture-card {
+  margin: 0;
+  display: inline;
+  vertical-align: top;
+}
+
+.custom-theme .el-upload-list--picture-card .el-upload-list__item {
+  overflow: hidden;
+  background-color: #fff;
+  border: 1px solid #c0ccda;
+  border-radius: 6px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 148px;
+  height: 148px;
+  margin: 0 8px 8px 0;
+  display: inline-block;
+}
+
+.custom-theme .el-upload-list--picture-card .el-upload-list__item .el-icon-check,
+.custom-theme .el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check {
+  color: #fff;
+}
+
+.custom-theme .el-upload-list--picture-card .el-upload-list__item .el-icon-close {
+  display: none;
+}
+
+.custom-theme .el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label {
+  display: none;
+}
+
+.custom-theme .el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text {
+  display: block;
+}
+
+.custom-theme .el-upload-list--picture-card .el-upload-list__item-name {
+  display: none;
+}
+
+.custom-theme .el-upload-list--picture-card .el-upload-list__item-thumbnail {
+  width: 100%;
+  height: 100%;
+}
+
+.custom-theme .el-upload-list--picture-card .el-upload-list__item-status-label {
+  position: absolute;
+  right: -15px;
+  top: -6px;
+  width: 40px;
+  height: 24px;
+  background: #13ce66;
+  text-align: center;
+  -webkit-transform: rotate(45deg);
+  transform: rotate(45deg);
+  -webkit-box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2);
+  box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2);
+}
+
+.custom-theme .el-upload-list--picture-card .el-upload-list__item-status-label i {
+  font-size: 12px;
+  margin-top: 11px;
+  -webkit-transform: rotate(-45deg);
+  transform: rotate(-45deg);
+}
+
+.custom-theme .el-upload-list--picture-card .el-upload-list__item-actions {
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  left: 0;
+  top: 0;
+  cursor: default;
+  text-align: center;
+  color: #fff;
+  opacity: 0;
+  font-size: 20px;
+  background-color: rgba(0, 0, 0, 0.5);
+  -webkit-transition: opacity 0.3s;
+  transition: opacity 0.3s;
+}
+
+.custom-theme .el-upload-list--picture-card .el-upload-list__item-actions::after {
+  display: inline-block;
+  content: '';
+  height: 100%;
+  vertical-align: middle;
+}
+
+.custom-theme .el-upload-list--picture-card .el-upload-list__item-actions span {
+  display: none;
+  cursor: pointer;
+}
+
+.custom-theme .el-upload-list--picture-card .el-upload-list__item-actions span + span {
+  margin-left: 15px;
+}
+
+.custom-theme .el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete {
+  position: static;
+  font-size: inherit;
+  color: inherit;
+}
+
+.custom-theme .el-upload-list--picture-card .el-upload-list__item-actions:hover {
+  opacity: 1;
+}
+
+.custom-theme .el-upload-list--picture-card .el-upload-list__item-actions:hover span {
+  display: inline-block;
+}
+
+.custom-theme .el-upload-list--picture-card .el-progress {
+  top: 50%;
+  left: 50%;
+  -webkit-transform: translate(-50%, -50%);
+  transform: translate(-50%, -50%);
+  bottom: auto;
+  width: 126px;
+}
+
+.custom-theme .el-upload-list--picture-card .el-progress .el-progress__text {
+  top: 50%;
+}
+
+.custom-theme .el-upload-list--picture .el-upload-list__item {
+  overflow: hidden;
+  background-color: #fff;
+  border: 1px solid #c0ccda;
+  border-radius: 6px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  margin-top: 10px;
+  padding: 10px 10px 10px 90px;
+  height: 92px;
+}
+
+.custom-theme .el-upload-list--picture .el-upload-list__item .el-icon-check,
+.custom-theme .el-upload-list--picture .el-upload-list__item .el-icon-circle-check {
+  color: #fff;
+}
+
+.custom-theme .el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label {
+  background: 0 0;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+  top: -2px;
+  right: -12px;
+}
+
+.custom-theme .el-upload-list--picture .el-upload-list__item:hover .el-progress__text {
+  display: block;
+}
+
+.custom-theme .el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name {
+  line-height: 70px;
+  margin-top: 0;
+}
+
+.custom-theme .el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i {
+  display: none;
+}
+
+.custom-theme .el-upload-list--picture .el-upload-list__item-thumbnail {
+  vertical-align: middle;
+  display: inline-block;
+  width: 70px;
+  height: 70px;
+  float: left;
+  position: relative;
+  z-index: 1;
+  margin-left: -80px;
+}
+
+.custom-theme .el-upload-list--picture .el-upload-list__item-name {
+  display: block;
+  margin-top: 20px;
+}
+
+.custom-theme .el-upload-list--picture .el-upload-list__item-name i {
+  font-size: 70px;
+  line-height: 1;
+  position: absolute;
+  left: 9px;
+  top: 10px;
+}
+
+.custom-theme .el-upload-list--picture .el-upload-list__item-status-label {
+  position: absolute;
+  right: -17px;
+  top: -7px;
+  width: 46px;
+  height: 26px;
+  background: #13ce66;
+  text-align: center;
+  -webkit-transform: rotate(45deg);
+  transform: rotate(45deg);
+  -webkit-box-shadow: 0 1px 1px #ccc;
+  box-shadow: 0 1px 1px #ccc;
+}
+
+.custom-theme .el-upload-list--picture .el-upload-list__item-status-label i {
+  font-size: 12px;
+  margin-top: 12px;
+  -webkit-transform: rotate(-45deg);
+  transform: rotate(-45deg);
+}
+
+.custom-theme .el-upload-list--picture .el-progress {
+  position: relative;
+  top: -7px;
+}
+
+.custom-theme .el-upload-cover {
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  overflow: hidden;
+  z-index: 10;
+  cursor: default;
+}
+
+.custom-theme .el-upload-cover::after {
+  display: inline-block;
+  content: '';
+  height: 100%;
+  vertical-align: middle;
+}
+
+.custom-theme .el-upload-cover img {
+  display: block;
+  width: 100%;
+  height: 100%;
+}
+
+.custom-theme .el-upload-cover__label {
+  position: absolute;
+  right: -15px;
+  top: -6px;
+  width: 40px;
+  height: 24px;
+  background: #13ce66;
+  text-align: center;
+  -webkit-transform: rotate(45deg);
+  transform: rotate(45deg);
+  -webkit-box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2);
+  box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2);
+}
+
+.custom-theme .el-upload-cover__label i {
+  font-size: 12px;
+  margin-top: 11px;
+  -webkit-transform: rotate(-45deg);
+  transform: rotate(-45deg);
+  color: #fff;
+}
+
+.custom-theme .el-upload-cover__progress {
+  display: inline-block;
+  vertical-align: middle;
+  position: static;
+  width: 243px;
+}
+
+.custom-theme .el-upload-cover__progress + .el-upload__inner {
+  opacity: 0;
+}
+
+.custom-theme .el-upload-cover__content {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+}
+
+.custom-theme .el-upload-cover__interact {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  background-color: rgba(0, 0, 0, 0.72);
+  text-align: center;
+}
+
+.custom-theme .el-upload-cover__interact .btn {
+  display: inline-block;
+  color: #fff;
+  font-size: 14px;
+  cursor: pointer;
+  vertical-align: middle;
+  -webkit-transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s, opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s,
+  -webkit-transform 0.3s cubic-bezier(0.23, 1, 0.32, 1) 0.1s;
+  margin-top: 60px;
+}
+
+.custom-theme .el-upload-cover__interact .btn i {
+  margin-top: 0;
+}
+
+.custom-theme .el-upload-cover__interact .btn span {
+  opacity: 0;
+  -webkit-transition: opacity 0.15s linear;
+  transition: opacity 0.15s linear;
+}
+
+.custom-theme .el-upload-cover__interact .btn:not(:first-child) {
+  margin-left: 35px;
+}
+
+.custom-theme .el-upload-cover__interact .btn:hover {
+  -webkit-transform: translateY(-13px);
+  transform: translateY(-13px);
+}
+
+.custom-theme .el-upload-cover__interact .btn:hover span {
+  opacity: 1;
+}
+
+.custom-theme .el-upload-cover__interact .btn i {
+  color: #fff;
+  display: block;
+  font-size: 24px;
+  line-height: inherit;
+  margin: 0 auto 5px;
+}
+
+.custom-theme .el-upload-cover__title {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  background-color: #fff;
+  height: 36px;
+  width: 100%;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  font-weight: 400;
+  text-align: left;
+  padding: 0 10px;
+  margin: 0;
+  line-height: 36px;
+  font-size: 14px;
+  color: #2d2f33;
+}
+
+.custom-theme .el-upload-cover + .el-upload__inner {
+  opacity: 0;
+  position: relative;
+  z-index: 1;
+}
+
+.custom-theme .el-progress {
+  position: relative;
+  line-height: 1;
+}
+
+.custom-theme .el-progress__text {
+  font-size: 14px;
+  color: #5a5e66;
+  display: inline-block;
+  vertical-align: middle;
+  margin-left: 10px;
+  line-height: 1;
+}
+
+.custom-theme .el-progress__text i {
+  vertical-align: middle;
+  display: block;
+}
+
+.custom-theme .el-progress--circle {
+  display: inline-block;
+}
+
+.custom-theme .el-progress--circle .el-progress__text {
+  position: absolute;
+  top: 50%;
+  left: 0;
+  width: 100%;
+  text-align: center;
+  margin: 0;
+  -webkit-transform: translate(0, -50%);
+  transform: translate(0, -50%);
+}
+
+.custom-theme .el-progress--circle .el-progress__text i {
+  vertical-align: middle;
+  display: inline-block;
+}
+
+.custom-theme .el-progress--without-text .el-progress__text {
+  display: none;
+}
+
+.custom-theme .el-progress--without-text .el-progress-bar {
+  padding-right: 0;
+  margin-right: 0;
+  display: block;
+}
+
+.custom-theme .el-progress--text-inside .el-progress-bar {
+  padding-right: 0;
+  margin-right: 0;
+}
+
+.custom-theme .el-progress.is-success .el-progress-bar__inner {
+  background-color: #409167;
+}
+
+.custom-theme .el-progress.is-success .el-progress__text {
+  color: #409167;
+}
+
+.custom-theme .el-progress.is-exception .el-progress-bar__inner {
+  background-color: #b3450e;
+}
+
+.custom-theme .el-progress.is-exception .el-progress__text {
+  color: #b3450e;
+}
+
+.custom-theme .el-progress-bar {
+  padding-right: 50px;
+  display: inline-block;
+  vertical-align: middle;
+  width: 100%;
+  margin-right: -55px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-progress-bar__outer {
+  height: 6px;
+  border-radius: 100px;
+  background-color: #e6ebf5;
+  overflow: hidden;
+  position: relative;
+  vertical-align: middle;
+}
+
+.custom-theme .el-progress-bar__inner {
+  position: absolute;
+  left: 0;
+  top: 0;
+  height: 100%;
+  background-color: #262729;
+  text-align: right;
+  border-radius: 100px;
+  line-height: 1;
+  white-space: nowrap;
+}
+
+.custom-theme .el-progress-bar__inner::after {
+  display: inline-block;
+  content: '';
+  height: 100%;
+  vertical-align: middle;
+}
+
+.custom-theme .el-progress-bar__innerText {
+  display: inline-block;
+  vertical-align: middle;
+  color: #fff;
+  font-size: 12px;
+  margin: 0 5px;
+}
+
+@keyframes progress {
+  0% {
+    background-position: 0 0;
+  }
+  100% {
+    background-position: 32px 0;
+  }
+}
+
+.custom-theme .el-time-spinner {
+  width: 100%;
+  white-space: nowrap;
+}
+
+.custom-theme .el-spinner {
+  display: inline-block;
+  vertical-align: middle;
+}
+
+.custom-theme .el-spinner-inner {
+  -webkit-animation: rotate 2s linear infinite;
+  animation: rotate 2s linear infinite;
+  width: 50px;
+  height: 50px;
+}
+
+.custom-theme .el-spinner-inner .path {
+  stroke: #ececec;
+  stroke-linecap: round;
+  -webkit-animation: dash 1.5s ease-in-out infinite;
+  animation: dash 1.5s ease-in-out infinite;
+}
+
+@-webkit-keyframes rotate {
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+
+@keyframes rotate {
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+
+@-webkit-keyframes dash {
+  0% {
+    stroke-dasharray: 1, 150;
+    stroke-dashoffset: 0;
+  }
+  50% {
+    stroke-dasharray: 90, 150;
+    stroke-dashoffset: -35;
+  }
+  100% {
+    stroke-dasharray: 90, 150;
+    stroke-dashoffset: -124;
+  }
+}
+
+@keyframes dash {
+  0% {
+    stroke-dasharray: 1, 150;
+    stroke-dashoffset: 0;
+  }
+  50% {
+    stroke-dasharray: 90, 150;
+    stroke-dashoffset: -35;
+  }
+  100% {
+    stroke-dasharray: 90, 150;
+    stroke-dashoffset: -124;
+  }
+}
+
+.custom-theme .el-message {
+  min-width: 380px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  border-radius: 4px;
+  border-width: 1px;
+  border-style: solid;
+  border-color: #e6ebf5;
+  position: fixed;
+  left: 50%;
+  top: 20px;
+  -webkit-transform: translateX(-50%);
+  transform: translateX(-50%);
+  background-color: #edf2fc;
+  -webkit-transition: opacity 0.3s, -webkit-transform 0.4s;
+  transition: opacity 0.3s, -webkit-transform 0.4s;
+  transition: opacity 0.3s, transform 0.4s;
+  transition: opacity 0.3s, transform 0.4s, -webkit-transform 0.4s;
+  overflow: hidden;
+  padding: 15px 15px 15px 20px;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
+}
+
+.custom-theme .el-message.is-center {
+  -webkit-box-pack: center;
+  -ms-flex-pack: center;
+  justify-content: center;
+}
+
+.custom-theme .el-message p {
+  margin: 0;
+}
+
+.custom-theme .el-message--info .el-message__content {
+  color: #0a76a4;
+}
+
+.custom-theme .el-message--success {
+  background-color: #ecf4f0;
+  border-color: #d9e9e1;
+}
+
+.custom-theme .el-message--success .el-message__content {
+  color: #409167;
+}
+
+.custom-theme .el-message--warning {
+  background-color: #f5f6e6;
+  border-color: #ebedce;
+}
+
+.custom-theme .el-message--warning .el-message__content {
+  color: #9da408;
+}
+
+.custom-theme .el-message--error {
+  background-color: #f7ece7;
+  border-color: #f0dacf;
+}
+
+.custom-theme .el-message--error .el-message__content {
+  color: #b3450e;
+}
+
+.custom-theme .el-message__icon {
+  margin-right: 10px;
+}
+
+.custom-theme .el-message__content {
+  padding: 0;
+  font-size: 14px;
+  line-height: 1;
+}
+
+.custom-theme .el-message__content:focus {
+  outline-width: 0;
+}
+
+.custom-theme .el-message__closeBtn {
+  position: absolute;
+  top: 50%;
+  right: 15px;
+  -webkit-transform: translateY(-50%);
+  transform: translateY(-50%);
+  cursor: pointer;
+  color: #b4bccc;
+  font-size: 16px;
+}
+
+.custom-theme .el-message__closeBtn:focus {
+  outline-width: 0;
+}
+
+.custom-theme .el-message__closeBtn:hover {
+  color: #878d99;
+}
+
+.custom-theme .el-message .el-icon-success {
+  color: #409167;
+}
+
+.custom-theme .el-message .el-icon-error {
+  color: #b3450e;
+}
+
+.custom-theme .el-message .el-icon-info {
+  color: #0a76a4;
+}
+
+.custom-theme .el-message .el-icon-warning {
+  color: #9da408;
+}
+
+.custom-theme .el-message-fade-enter,
+.custom-theme .el-message-fade-leave-active {
+  opacity: 0;
+  -webkit-transform: translate(-50%, -100%);
+  transform: translate(-50%, -100%);
+}
+
+.custom-theme .el-badge {
+  position: relative;
+  vertical-align: middle;
+  display: inline-block;
+}
+
+.custom-theme .el-badge__content {
+  background-color: #b3450e;
+  border-radius: 10px;
+  color: #fff;
+  display: inline-block;
+  font-size: 12px;
+  height: 18px;
+  line-height: 18px;
+  padding: 0 6px;
+  text-align: center;
+  white-space: nowrap;
+  border: 1px solid #fff;
+}
+
+.custom-theme .el-badge__content.is-fixed {
+  position: absolute;
+  top: 0;
+  right: 10px;
+  -webkit-transform: translateY(-50%) translateX(100%);
+  transform: translateY(-50%) translateX(100%);
+}
+
+.custom-theme .el-badge__content.is-fixed.is-dot {
+  right: 5px;
+}
+
+.custom-theme .el-badge__content.is-dot {
+  height: 8px;
+  width: 8px;
+  padding: 0;
+  right: 0;
+  border-radius: 50%;
+}
+
+.custom-theme .el-card {
+  border-radius: 4px;
+  border: 1px solid #e6ebf5;
+  background-color: #fff;
+  overflow: hidden;
+  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  color: #2d2f33;
+}
+
+.custom-theme .el-card__header {
+  padding: 18px 20px;
+  border-bottom: 1px solid #e6ebf5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-card__body {
+  padding: 20px;
+}
+
+.custom-theme .el-rate {
+  height: 20px;
+  line-height: 1;
+}
+
+.custom-theme .el-rate:active,
+.custom-theme .el-rate:focus {
+  outline-width: 0;
+}
+
+.custom-theme .el-rate__item {
+  display: inline-block;
+  position: relative;
+  font-size: 0;
+  vertical-align: middle;
+}
+
+.custom-theme .el-rate__icon {
+  position: relative;
+  display: inline-block;
+  font-size: 18px;
+  margin-right: 6px;
+  color: #b4bccc;
+  -webkit-transition: 0.3s;
+  transition: 0.3s;
+}
+
+.custom-theme .el-rate__icon.hover {
+  -webkit-transform: scale(1.15);
+  transform: scale(1.15);
+}
+
+.custom-theme .el-rate__icon .path2 {
+  position: absolute;
+  left: 0;
+  top: 0;
+}
+
+.custom-theme .el-rate__decimal {
+  position: absolute;
+  top: 0;
+  left: 0;
+  display: inline-block;
+  overflow: hidden;
+}
+
+.custom-theme .el-rate__text {
+  font-size: 14px;
+  vertical-align: middle;
+}
+
+.custom-theme .el-steps {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+}
+
+.custom-theme .el-steps--simple {
+  padding: 13px 8%;
+  border-radius: 4px;
+  background: #f5f7fa;
+}
+
+.custom-theme .el-steps--horizontal {
+  white-space: nowrap;
+}
+
+.custom-theme .el-steps--vertical {
+  height: 100%;
+  -webkit-box-orient: vertical;
+  -webkit-box-direction: normal;
+  -ms-flex-flow: column;
+  flex-flow: column;
+}
+
+.custom-theme .el-step {
+  position: relative;
+  -ms-flex-negative: 1;
+  flex-shrink: 1;
+}
+
+.custom-theme .el-step:last-of-type .el-step__line {
+  display: none;
+}
+
+.custom-theme .el-step:last-of-type.is-flex {
+  -ms-flex-preferred-size: auto !important;
+  flex-basis: auto !important;
+  -ms-flex-negative: 0;
+  flex-shrink: 0;
+  -webkit-box-flex: 0;
+  -ms-flex-positive: 0;
+  flex-grow: 0;
+}
+
+.custom-theme .el-step:last-of-type .el-step__description,
+.custom-theme .el-step:last-of-type .el-step__main {
+  padding-right: 0;
+}
+
+.custom-theme .el-step__head {
+  position: relative;
+  width: 100%;
+}
+
+.custom-theme .el-step__head.is-process {
+  color: #2d2f33;
+  border-color: #2d2f33;
+}
+
+.custom-theme .el-step__head.is-wait {
+  color: #b4bccc;
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-step__head.is-success {
+  color: #409167;
+  border-color: #409167;
+}
+
+.custom-theme .el-step__head.is-error {
+  color: #b3450e;
+  border-color: #b3450e;
+}
+
+.custom-theme .el-step__head.is-finish {
+  color: #262729;
+  border-color: #262729;
+}
+
+.custom-theme .el-step__icon {
+  position: relative;
+  z-index: 1;
+  display: -webkit-inline-box;
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -webkit-box-pack: center;
+  -ms-flex-pack: center;
+  justify-content: center;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
+  width: 24px;
+  height: 24px;
+  font-size: 14px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  background: #fff;
+  -webkit-transition: 0.15s ease-out;
+  transition: 0.15s ease-out;
+}
+
+.custom-theme .el-step__icon.is-text {
+  border-radius: 50%;
+  border: 2px solid;
+  border-color: inherit;
+}
+
+.custom-theme .el-step__icon.is-icon {
+  width: 40px;
+}
+
+.custom-theme .el-step__icon-inner {
+  display: inline-block;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  text-align: center;
+  font-weight: 700;
+  line-height: 1;
+  color: inherit;
+}
+
+.custom-theme .el-step__icon-inner[class*='el-icon']:not(.is-status) {
+  font-size: 25px;
+  font-weight: 400;
+}
+
+.custom-theme .el-step__icon-inner.is-status {
+  -webkit-transform: translateY(1px);
+  transform: translateY(1px);
+}
+
+.custom-theme .el-step__line {
+  position: absolute;
+  border-color: inherit;
+  background-color: #b4bccc;
+}
+
+.custom-theme .el-step__line-inner {
+  display: block;
+  border-width: 1px;
+  border-style: solid;
+  border-color: inherit;
+  -webkit-transition: 0.15s ease-out;
+  transition: 0.15s ease-out;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 0;
+  height: 0;
+}
+
+.custom-theme .el-step__main {
+  white-space: normal;
+  text-align: left;
+}
+
+.custom-theme .el-step__title {
+  font-size: 16px;
+  line-height: 38px;
+}
+
+.custom-theme .el-step__title.is-process {
+  font-weight: 700;
+  color: #2d2f33;
+}
+
+.custom-theme .el-step__title.is-wait {
+  color: #b4bccc;
+}
+
+.custom-theme .el-step__title.is-success {
+  color: #409167;
+}
+
+.custom-theme .el-step__title.is-error {
+  color: #b3450e;
+}
+
+.custom-theme .el-step__title.is-finish {
+  color: #262729;
+}
+
+.custom-theme .el-step__description {
+  padding-right: 10%;
+  margin-top: -5px;
+  font-size: 12px;
+  line-height: 20px;
+  font-weight: 400;
+}
+
+.custom-theme .el-step__description.is-process {
+  color: #2d2f33;
+}
+
+.custom-theme .el-step__description.is-wait {
+  color: #b4bccc;
+}
+
+.custom-theme .el-step__description.is-success {
+  color: #409167;
+}
+
+.custom-theme .el-step__description.is-error {
+  color: #b3450e;
+}
+
+.custom-theme .el-step__description.is-finish {
+  color: #262729;
+}
+
+.custom-theme .el-step.is-horizontal {
+  display: inline-block;
+}
+
+.custom-theme .el-step.is-horizontal .el-step__line {
+  height: 2px;
+  top: 11px;
+  left: 0;
+  right: 0;
+}
+
+.custom-theme .el-step.is-vertical {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+}
+
+.custom-theme .el-step.is-vertical .el-step__head {
+  -webkit-box-flex: 0;
+  -ms-flex-positive: 0;
+  flex-grow: 0;
+  width: 24px;
+}
+
+.custom-theme .el-step.is-vertical .el-step__main {
+  padding-left: 10px;
+  -webkit-box-flex: 1;
+  -ms-flex-positive: 1;
+  flex-grow: 1;
+}
+
+.custom-theme .el-step.is-vertical .el-step__title {
+  line-height: 24px;
+  padding-bottom: 8px;
+}
+
+.custom-theme .el-step.is-vertical .el-step__line {
+  width: 2px;
+  top: 0;
+  bottom: 0;
+  left: 11px;
+}
+
+.custom-theme .el-step.is-vertical .el-step__icon.is-icon {
+  width: 24px;
+}
+
+.custom-theme .el-step.is-center .el-step__head {
+  text-align: center;
+}
+
+.custom-theme .el-step.is-center .el-step__main {
+  text-align: center;
+}
+
+.custom-theme .el-step.is-center .el-step__description {
+  padding-left: 20%;
+  padding-right: 20%;
+}
+
+.custom-theme .el-step.is-center .el-step__line {
+  left: 50%;
+  right: -50%;
+}
+
+.custom-theme .el-step.is-simple {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
+}
+
+.custom-theme .el-step.is-simple .el-step__head {
+  width: auto;
+  font-size: 0;
+  padding-right: 10px;
+}
+
+.custom-theme .el-step.is-simple .el-step__icon {
+  background: 0 0;
+  width: 16px;
+  height: 16px;
+  font-size: 12px;
+}
+
+.custom-theme .el-step.is-simple .el-step__icon-inner[class*='el-icon']:not(.is-status) {
+  font-size: 18px;
+}
+
+.custom-theme .el-step.is-simple .el-step__icon-inner.is-status {
+  -webkit-transform: scale(0.8) translateY(1px);
+  transform: scale(0.8) translateY(1px);
+}
+
+.custom-theme .el-step.is-simple .el-step__main {
+  position: relative;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: stretch;
+  -ms-flex-align: stretch;
+  align-items: stretch;
+  -webkit-box-flex: 1;
+  -ms-flex-positive: 1;
+  flex-grow: 1;
+}
+
+.custom-theme .el-step.is-simple .el-step__title {
+  font-size: 16px;
+  line-height: 20px;
+}
+
+.custom-theme .el-step.is-simple:not(:last-of-type) .el-step__title {
+  max-width: 50%;
+  word-break: break-all;
+}
+
+.custom-theme .el-step.is-simple .el-step__arrow {
+  -webkit-box-flex: 1;
+  -ms-flex-positive: 1;
+  flex-grow: 1;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
+  -webkit-box-pack: center;
+  -ms-flex-pack: center;
+  justify-content: center;
+}
+
+.custom-theme .el-step.is-simple .el-step__arrow::after,
+.custom-theme .el-step.is-simple .el-step__arrow::before {
+  content: '';
+  display: inline-block;
+  position: absolute;
+  height: 15px;
+  width: 1px;
+  background: #b4bccc;
+}
+
+.custom-theme .el-step.is-simple .el-step__arrow::before {
+  -webkit-transform: rotate(-45deg) translateY(-4px);
+  transform: rotate(-45deg) translateY(-4px);
+  -webkit-transform-origin: 0 0;
+  transform-origin: 0 0;
+}
+
+.custom-theme .el-step.is-simple .el-step__arrow::after {
+  -webkit-transform: rotate(45deg) translateY(4px);
+  transform: rotate(45deg) translateY(4px);
+  -webkit-transform-origin: 100% 100%;
+  transform-origin: 100% 100%;
+}
+
+.custom-theme .el-step.is-simple:last-of-type .el-step__arrow {
+  display: none;
+}
+
+.custom-theme .el-carousel {
+  overflow-x: hidden;
+  position: relative;
+}
+
+.custom-theme .el-carousel__container {
+  position: relative;
+  height: 300px;
+}
+
+.custom-theme .el-carousel__arrow {
+  border: none;
+  outline: 0;
+  padding: 0;
+  margin: 0;
+  height: 36px;
+  width: 36px;
+  cursor: pointer;
+  -webkit-transition: 0.3s;
+  transition: 0.3s;
+  border-radius: 50%;
+  background-color: rgba(31, 45, 61, 0.11);
+  color: #fff;
+  position: absolute;
+  top: 50%;
+  z-index: 10;
+  -webkit-transform: translateY(-50%);
+  transform: translateY(-50%);
+  text-align: center;
+  font-size: 12px;
+}
+
+.custom-theme .el-carousel__arrow--left {
+  left: 16px;
+}
+
+.custom-theme .el-carousel__arrow--right {
+  right: 16px;
+}
+
+.custom-theme .el-carousel__arrow:hover {
+  background-color: rgba(31, 45, 61, 0.23);
+}
+
+.custom-theme .el-carousel__arrow i {
+  cursor: pointer;
+}
+
+.custom-theme .el-carousel__indicators {
+  position: absolute;
+  list-style: none;
+  bottom: 0;
+  left: 50%;
+  -webkit-transform: translateX(-50%);
+  transform: translateX(-50%);
+  margin: 0;
+  padding: 0;
+  z-index: 2;
+}
+
+.custom-theme .el-carousel__indicators--outside {
+  bottom: 26px;
+  text-align: center;
+  position: static;
+  -webkit-transform: none;
+  transform: none;
+}
+
+.custom-theme .el-carousel__indicators--outside .el-carousel__indicator:hover button {
+  opacity: 0.64;
+}
+
+.custom-theme .el-carousel__indicators--outside button {
+  background-color: #b4bccc;
+  opacity: 0.24;
+}
+
+.custom-theme .el-carousel__indicators--labels {
+  left: 0;
+  right: 0;
+  -webkit-transform: none;
+  transform: none;
+  text-align: center;
+}
+
+.custom-theme .el-carousel__indicators--labels .el-carousel__button {
+  height: auto;
+  width: auto;
+  padding: 2px 18px;
+  font-size: 12px;
+}
+
+.custom-theme .el-carousel__indicators--labels .el-carousel__indicator {
+  padding: 6px 4px;
+}
+
+.custom-theme .el-carousel__indicator {
+  display: inline-block;
+  background-color: transparent;
+  padding: 12px 4px;
+  cursor: pointer;
+}
+
+.custom-theme .el-carousel__indicator:hover button {
+  opacity: 0.72;
+}
+
+.custom-theme .el-carousel__indicator.is-active button {
+  opacity: 1;
+}
+
+.custom-theme .el-carousel__button {
+  display: block;
+  opacity: 0.48;
+  width: 30px;
+  height: 2px;
+  background-color: #fff;
+  border: none;
+  outline: 0;
+  padding: 0;
+  margin: 0;
+  cursor: pointer;
+  -webkit-transition: 0.3s;
+  transition: 0.3s;
+}
+
+.custom-theme .carousel-arrow-left-enter,
+.custom-theme .carousel-arrow-left-leave-active {
+  -webkit-transform: translateY(-50%) translateX(-10px);
+  transform: translateY(-50%) translateX(-10px);
+  opacity: 0;
+}
+
+.custom-theme .carousel-arrow-right-enter,
+.custom-theme .carousel-arrow-right-leave-active {
+  -webkit-transform: translateY(-50%) translateX(10px);
+  transform: translateY(-50%) translateX(10px);
+  opacity: 0;
+}
+
+.custom-theme .el-scrollbar {
+  overflow: hidden;
+  position: relative;
+}
+
+.custom-theme .el-scrollbar:active > .el-scrollbar__bar,
+.custom-theme .el-scrollbar:focus > .el-scrollbar__bar,
+.custom-theme .el-scrollbar:hover > .el-scrollbar__bar {
+  opacity: 1;
+  -webkit-transition: opacity 340ms ease-out;
+  transition: opacity 340ms ease-out;
+}
+
+.custom-theme .el-scrollbar__wrap {
+  overflow: scroll;
+  height: 100%;
+}
+
+.custom-theme .el-scrollbar__wrap--hidden-default::-webkit-scrollbar {
+  width: 0;
+  height: 0;
+}
+
+.custom-theme .el-scrollbar__thumb {
+  position: relative;
+  display: block;
+  width: 0;
+  height: 0;
+  cursor: pointer;
+  border-radius: inherit;
+  background-color: rgba(135, 141, 153, 0.3);
+  -webkit-transition: 0.3s background-color;
+  transition: 0.3s background-color;
+}
+
+.custom-theme .el-scrollbar__thumb:hover {
+  background-color: rgba(135, 141, 153, 0.5);
+}
+
+.custom-theme .el-scrollbar__bar {
+  position: absolute;
+  right: 2px;
+  bottom: 2px;
+  z-index: 1;
+  border-radius: 4px;
+  opacity: 0;
+  -webkit-transition: opacity 120ms ease-out;
+  transition: opacity 120ms ease-out;
+}
+
+.custom-theme .el-scrollbar__bar.is-vertical {
+  width: 6px;
+  top: 2px;
+}
+
+.custom-theme .el-scrollbar__bar.is-vertical > div {
+  width: 100%;
+}
+
+.custom-theme .el-scrollbar__bar.is-horizontal {
+  height: 6px;
+  left: 2px;
+}
+
+.custom-theme .el-scrollbar__bar.is-horizontal > div {
+  height: 100%;
+}
+
+.custom-theme .el-carousel__item {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  display: inline-block;
+  overflow: hidden;
+  z-index: 0;
+}
+
+.custom-theme .el-carousel__item.is-active {
+  z-index: 2;
+}
+
+.custom-theme .el-carousel__item.is-animating {
+  -webkit-transition: -webkit-transform 0.4s ease-in-out;
+  transition: -webkit-transform 0.4s ease-in-out;
+  transition: transform 0.4s ease-in-out;
+  transition: transform 0.4s ease-in-out, -webkit-transform 0.4s ease-in-out;
+}
+
+.custom-theme .el-carousel__item--card {
+  width: 50%;
+  -webkit-transition: -webkit-transform 0.4s ease-in-out;
+  transition: -webkit-transform 0.4s ease-in-out;
+  transition: transform 0.4s ease-in-out;
+  transition: transform 0.4s ease-in-out, -webkit-transform 0.4s ease-in-out;
+}
+
+.custom-theme .el-carousel__item--card.is-in-stage {
+  cursor: pointer;
+  z-index: 1;
+}
+
+.custom-theme .el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,
+.custom-theme .el-carousel__item--card.is-in-stage:hover .el-carousel__mask {
+  opacity: 0.12;
+}
+
+.custom-theme .el-carousel__item--card.is-active {
+  z-index: 2;
+}
+
+.custom-theme .el-carousel__mask {
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  top: 0;
+  left: 0;
+  background-color: #fff;
+  opacity: 0.24;
+  -webkit-transition: 0.2s;
+  transition: 0.2s;
+}
+
+.custom-theme .el-collapse {
+  border-top: 1px solid #e6ebf5;
+  border-bottom: 1px solid #e6ebf5;
+}
+
+.custom-theme .el-collapse-item__header {
+  height: 48px;
+  line-height: 48px;
+  background-color: #fff;
+  color: #2d2f33;
+  cursor: pointer;
+  border-bottom: 1px solid #e6ebf5;
+  font-size: 13px;
+  font-weight: 500;
+  -webkit-transition: border-bottom-color 0.3s;
+  transition: border-bottom-color 0.3s;
+}
+
+.custom-theme .el-collapse-item__header:active,
+.custom-theme .el-collapse-item__header:focus:not(.focusing) {
+  outline-width: 0;
+}
+
+.custom-theme .el-collapse-item__arrow {
+  margin-right: 8px;
+  -webkit-transition: -webkit-transform 0.3s;
+  transition: -webkit-transform 0.3s;
+  transition: transform 0.3s;
+  transition: transform 0.3s, -webkit-transform 0.3s;
+  float: right;
+  line-height: 48px;
+  font-weight: 300;
+}
+
+.custom-theme .el-collapse-item__wrap {
+  will-change: height;
+  background-color: #fff;
+  overflow: hidden;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  border-bottom: 1px solid #e6ebf5;
+}
+
+.custom-theme .el-collapse-item__content {
+  padding-bottom: 25px;
+  font-size: 13px;
+  color: #2d2f33;
+  line-height: 1.769230769230769;
+}
+
+.custom-theme .el-collapse-item.is-active .el-collapse-item__header {
+  border-bottom-color: transparent;
+}
+
+.custom-theme .el-collapse-item.is-active .el-collapse-item__header .el-collapse-item__arrow {
+  -webkit-transform: rotate(90deg);
+  transform: rotate(90deg);
+}
+
+.custom-theme .el-collapse-item:last-child {
+  margin-bottom: -1px;
+}
+
+.custom-theme .el-input {
+  position: relative;
+  font-size: 14px;
+  display: inline-block;
+  width: 100%;
+}
+
+.custom-theme .el-input::-webkit-scrollbar {
+  z-index: 11;
+  width: 6px;
+}
+
+.custom-theme .el-input::-webkit-scrollbar:horizontal {
+  height: 6px;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-thumb {
+  border-radius: 5px;
+  width: 6px;
+  background: #b4bccc;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-corner {
+  background: #fff;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-track {
+  background: #fff;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-track-piece {
+  background: #fff;
+  width: 6px;
+}
+
+.custom-theme .el-input__inner {
+  -webkit-appearance: none;
+  background-color: #fff;
+  background-image: none;
+  border-radius: 4px;
+  border: 1px solid #d8dce5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  color: #5a5e66;
+  display: inline-block;
+  font-size: inherit;
+  height: 40px;
+  line-height: 1;
+  outline: 0;
+  padding: 0 15px;
+  -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  width: 100%;
+}
+
+.custom-theme .el-input__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:hover {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:focus {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-input__suffix {
+  position: absolute;
+  height: 100%;
+  right: 5px;
+  top: 0;
+  text-align: center;
+  color: #b4bccc;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+  pointer-events: none;
+}
+
+.custom-theme .el-input__suffix-inner {
+  pointer-events: all;
+}
+
+.custom-theme .el-input__prefix {
+  position: absolute;
+  height: 100%;
+  left: 5px;
+  top: 0;
+  text-align: center;
+  color: #b4bccc;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+}
+
+.custom-theme .el-input__icon {
+  height: 100%;
+  width: 25px;
+  text-align: center;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+  line-height: 40px;
+}
+
+.custom-theme .el-input__icon:after {
+  content: '';
+  height: 100%;
+  width: 0;
+  display: inline-block;
+  vertical-align: middle;
+}
+
+.custom-theme .el-input__validateIcon {
+  pointer-events: none;
+}
+
+.custom-theme .el-input.is-active .el-input__inner {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__icon {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input--suffix .el-input__inner {
+  padding-right: 30px;
+}
+
+.custom-theme .el-input--prefix .el-input__inner {
+  padding-left: 30px;
+}
+
+.custom-theme .el-input--medium {
+  font-size: 14px;
+}
+
+.custom-theme .el-input--medium .el-input__inner {
+  height: 36px;
+}
+
+.custom-theme .el-input--medium .el-input__icon {
+  line-height: 36px;
+}
+
+.custom-theme .el-input--small {
+  font-size: 13px;
+}
+
+.custom-theme .el-input--small .el-input__inner {
+  height: 32px;
+}
+
+.custom-theme .el-input--small .el-input__icon {
+  line-height: 32px;
+}
+
+.custom-theme .el-input--mini {
+  font-size: 12px;
+}
+
+.custom-theme .el-input--mini .el-input__inner {
+  height: 28px;
+}
+
+.custom-theme .el-input--mini .el-input__icon {
+  line-height: 28px;
+}
+
+.custom-theme .el-input-group {
+  line-height: normal;
+  display: inline-table;
+  width: 100%;
+  border-collapse: separate;
+}
+
+.custom-theme .el-input-group > .el-input__inner {
+  vertical-align: middle;
+  display: table-cell;
+}
+
+.custom-theme .el-input-group__append,
+.custom-theme .el-input-group__prepend {
+  background-color: #f5f7fa;
+  color: #0a76a4;
+  vertical-align: middle;
+  display: table-cell;
+  position: relative;
+  border: 1px solid #d8dce5;
+  border-radius: 4px;
+  padding: 0 20px;
+  width: 1px;
+  white-space: nowrap;
+}
+
+.custom-theme .el-input-group__append:focus,
+.custom-theme .el-input-group__prepend:focus {
+  outline: 0;
+}
+
+.custom-theme .el-input-group__append .el-button,
+.custom-theme .el-input-group__append .el-select,
+.custom-theme .el-input-group__prepend .el-button,
+.custom-theme .el-input-group__prepend .el-select {
+  display: inline-block;
+  margin: -20px;
+}
+
+.custom-theme .el-input-group__append button.el-button,
+.custom-theme .el-input-group__append div.el-select .el-input__inner,
+.custom-theme .el-input-group__append div.el-select:hover .el-input__inner,
+.custom-theme .el-input-group__prepend button.el-button,
+.custom-theme .el-input-group__prepend div.el-select .el-input__inner,
+.custom-theme .el-input-group__prepend div.el-select:hover .el-input__inner {
+  border-color: transparent;
+  background-color: transparent;
+  color: inherit;
+  border-top: 0;
+  border-bottom: 0;
+}
+
+.custom-theme .el-input-group__append .el-button,
+.custom-theme .el-input-group__append .el-input,
+.custom-theme .el-input-group__prepend .el-button,
+.custom-theme .el-input-group__prepend .el-input {
+  font-size: inherit;
+}
+
+.custom-theme .el-input-group__prepend {
+  border-right: 0;
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-input-group__append {
+  border-left: 0;
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-input-group--prepend .el-input__inner {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-input-group--append .el-input__inner {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-textarea {
+  display: inline-block;
+  width: 100%;
+  vertical-align: bottom;
+}
+
+.custom-theme .el-textarea__inner {
+  display: block;
+  resize: vertical;
+  padding: 5px 15px;
+  line-height: 1.5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 100%;
+  font-size: 14px;
+  color: #5a5e66;
+  background-color: #fff;
+  background-image: none;
+  border: 1px solid #d8dce5;
+  border-radius: 4px;
+  -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+}
+
+.custom-theme .el-textarea__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:hover {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:focus {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-popper .popper__arrow,
+.custom-theme .el-popper .popper__arrow::after {
+  position: absolute;
+  display: block;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+
+.custom-theme .el-popper .popper__arrow {
+  border-width: 6px;
+  -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
+  filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
+}
+
+.custom-theme .el-popper .popper__arrow::after {
+  content: ' ';
+  border-width: 6px;
+}
+
+.custom-theme .el-popper[x-placement^='top'] {
+  margin-bottom: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='top'] .popper__arrow {
+  bottom: -6px;
+  left: 50%;
+  margin-right: 3px;
+  border-top-color: #e6ebf5;
+  border-bottom-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='top'] .popper__arrow::after {
+  bottom: 1px;
+  margin-left: -6px;
+  border-top-color: #fff;
+  border-bottom-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] {
+  margin-top: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] .popper__arrow {
+  top: -6px;
+  left: 50%;
+  margin-right: 3px;
+  border-top-width: 0;
+  border-bottom-color: #e6ebf5;
+}
+
+.custom-theme .el-popper[x-placement^='bottom'] .popper__arrow::after {
+  top: 1px;
+  margin-left: -6px;
+  border-top-width: 0;
+  border-bottom-color: #fff;
+}
+
+.custom-theme .el-popper[x-placement^='right'] {
+  margin-left: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='right'] .popper__arrow {
+  top: 50%;
+  left: -6px;
+  margin-bottom: 3px;
+  border-right-color: #e6ebf5;
+  border-left-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='right'] .popper__arrow::after {
+  bottom: -6px;
+  left: 1px;
+  border-right-color: #fff;
+  border-left-width: 0;
+}
+
+.custom-theme .el-popper[x-placement^='left'] {
+  margin-right: 12px;
+}
+
+.custom-theme .el-popper[x-placement^='left'] .popper__arrow {
+  top: 50%;
+  right: -6px;
+  margin-bottom: 3px;
+  border-right-width: 0;
+  border-left-color: #e6ebf5;
+}
+
+.custom-theme .el-popper[x-placement^='left'] .popper__arrow::after {
+  right: 1px;
+  bottom: -6px;
+  margin-left: -6px;
+  border-right-width: 0;
+  border-left-color: #fff;
+}
+
+.custom-theme .el-cascader {
+  display: inline-block;
+  position: relative;
+  font-size: 14px;
+  line-height: 40px;
+}
+
+.custom-theme .el-cascader .el-input,
+.custom-theme .el-cascader .el-input__inner {
+  cursor: pointer;
+}
+
+.custom-theme .el-cascader .el-input__icon {
+  -webkit-transition: none;
+  transition: none;
+}
+
+.custom-theme .el-cascader .el-icon-arrow-down {
+  -webkit-transition: -webkit-transform 0.3s;
+  transition: -webkit-transform 0.3s;
+  transition: transform 0.3s;
+  transition: transform 0.3s, -webkit-transform 0.3s;
+  font-size: 14px;
+}
+
+.custom-theme .el-cascader .el-icon-arrow-down.is-reverse {
+  -webkit-transform: rotateZ(180deg);
+  transform: rotateZ(180deg);
+}
+
+.custom-theme .el-cascader .el-icon-circle-close {
+  z-index: 2;
+  -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+}
+
+.custom-theme .el-cascader .el-icon-circle-close:hover {
+  color: #878d99;
+}
+
+.custom-theme .el-cascader__clearIcon {
+  z-index: 2;
+  position: relative;
+}
+
+.custom-theme .el-cascader__label {
+  position: absolute;
+  left: 0;
+  top: 0;
+  height: 100%;
+  padding: 0 25px 0 15px;
+  color: #5a5e66;
+  width: 100%;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+  overflow: hidden;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  cursor: pointer;
+  text-align: left;
+  font-size: inherit;
+}
+
+.custom-theme .el-cascader__label span {
+  color: #000;
+}
+
+.custom-theme .el-cascader--medium {
+  font-size: 14px;
+  line-height: 36px;
+}
+
+.custom-theme .el-cascader--small {
+  font-size: 13px;
+  line-height: 32px;
+}
+
+.custom-theme .el-cascader--mini {
+  font-size: 12px;
+  line-height: 28px;
+}
+
+.custom-theme .el-cascader.is-disabled .el-cascader__label {
+  z-index: 2;
+  color: #b4bccc;
+}
+
+.custom-theme .el-cascader-menus {
+  white-space: nowrap;
+  background: #fff;
+  position: absolute;
+  margin: 5px 0;
+  z-index: 2;
+  border: solid 1px #dfe4ed;
+  border-radius: 2px;
+  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+}
+
+.custom-theme .el-cascader-menus .popper__arrow {
+  -webkit-transform: translateX(-400%);
+  transform: translateX(-400%);
+}
+
+.custom-theme .el-cascader-menu {
+  display: inline-block;
+  vertical-align: top;
+  height: 204px;
+  overflow: auto;
+  border-right: solid 1px #dfe4ed;
+  background-color: #fff;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  margin: 0;
+  padding: 6px 0;
+  min-width: 160px;
+}
+
+.custom-theme .el-cascader-menu:last-child {
+  border-right: 0;
+}
+
+.custom-theme .el-cascader-menu__item {
+  font-size: 14px;
+  padding: 8px 20px;
+  position: relative;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  color: #5a5e66;
+  height: 34px;
+  line-height: 1.5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  cursor: pointer;
+}
+
+.custom-theme .el-cascader-menu__item--extensible:after {
+  font-family: element-icons;
+  content: '\e604';
+  font-size: 14px;
+  color: #bfcbd9;
+  position: absolute;
+  right: 15px;
+}
+
+.custom-theme .el-cascader-menu__item.is-disabled {
+  color: #b4bccc;
+  background-color: #fff;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-cascader-menu__item.is-disabled:hover {
+  background-color: #fff;
+}
+
+.custom-theme .el-cascader-menu__item.is-active {
+  color: #262729;
+}
+
+.custom-theme .el-cascader-menu__item:hover {
+  background-color: #f5f7fa;
+}
+
+.custom-theme .el-cascader-menu__item.selected {
+  color: #fff;
+  background-color: #f5f7fa;
+}
+
+.custom-theme .el-cascader-menu__item__keyword {
+  font-weight: 700;
+}
+
+.custom-theme .el-cascader-menu--flexible {
+  height: auto;
+  max-height: 180px;
+  overflow: auto;
+}
+
+.custom-theme .el-cascader-menu--flexible .el-cascader-menu__item {
+  overflow: visible;
+}
+
+.custom-theme .el-color-hue-slider {
+  position: relative;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 280px;
+  height: 12px;
+  background-color: red;
+  padding: 0 2px;
+}
+
+.custom-theme .el-color-hue-slider__bar {
+  position: relative;
+  background: -webkit-gradient(
+    linear,
+    left top,
+    right top,
+    from(red),
+    color-stop(17%, #ff0),
+    color-stop(33%, #0f0),
+    color-stop(50%, #0ff),
+    color-stop(67%, #00f),
+    color-stop(83%, #f0f),
+    to(red)
+  );
+  background: linear-gradient(to right, red 0, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, red 100%);
+  height: 100%;
+}
+
+.custom-theme .el-color-hue-slider__thumb {
+  position: absolute;
+  cursor: pointer;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  left: 0;
+  top: 0;
+  width: 4px;
+  height: 100%;
+  border-radius: 1px;
+  background: #fff;
+  border: 1px solid #f0f0f0;
+  -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
+  box-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
+  z-index: 1;
+}
+
+.custom-theme .el-color-hue-slider.is-vertical {
+  width: 12px;
+  height: 180px;
+  padding: 2px 0;
+}
+
+.custom-theme .el-color-hue-slider.is-vertical .el-color-hue-slider__bar {
+  background: -webkit-gradient(
+    linear,
+    left top,
+    left bottom,
+    from(red),
+    color-stop(17%, #ff0),
+    color-stop(33%, #0f0),
+    color-stop(50%, #0ff),
+    color-stop(67%, #00f),
+    color-stop(83%, #f0f),
+    to(red)
+  );
+  background: linear-gradient(to bottom, red 0, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, red 100%);
+}
+
+.custom-theme .el-color-hue-slider.is-vertical .el-color-hue-slider__thumb {
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 4px;
+}
+
+.custom-theme .el-color-svpanel {
+  position: relative;
+  width: 280px;
+  height: 180px;
+}
+
+.custom-theme .el-color-svpanel__black,
+.custom-theme .el-color-svpanel__white {
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+}
+
+.custom-theme .el-color-svpanel__white {
+  background: -webkit-gradient(linear, left top, right top, from(#fff), to(rgba(255, 255, 255, 0)));
+  background: linear-gradient(to right, #fff, rgba(255, 255, 255, 0));
+}
+
+.custom-theme .el-color-svpanel__black {
+  background: -webkit-gradient(linear, left bottom, left top, from(#000), to(transparent));
+  background: linear-gradient(to top, #000, transparent);
+}
+
+.custom-theme .el-color-svpanel__cursor {
+  position: absolute;
+}
+
+.custom-theme .el-color-svpanel__cursor > div {
+  cursor: head;
+  width: 4px;
+  height: 4px;
+  -webkit-box-shadow: 0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0, 0, 0, 0.3), 0 0 1px 2px rgba(0, 0, 0, 0.4);
+  box-shadow: 0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0, 0, 0, 0.3), 0 0 1px 2px rgba(0, 0, 0, 0.4);
+  border-radius: 50%;
+  -webkit-transform: translate(-2px, -2px);
+  transform: translate(-2px, -2px);
+}
+
+.custom-theme .el-color-alpha-slider {
+  position: relative;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 280px;
+  height: 12px;
+  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);
+}
+
+.custom-theme .el-color-alpha-slider__bar {
+  position: relative;
+  background: -webkit-gradient(linear, left top, right top, from(rgba(255, 255, 255, 0)), to(white));
+  background: linear-gradient(to right, rgba(255, 255, 255, 0) 0, #fff 100%);
+  height: 100%;
+}
+
+.custom-theme .el-color-alpha-slider__thumb {
+  position: absolute;
+  cursor: pointer;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  left: 0;
+  top: 0;
+  width: 4px;
+  height: 100%;
+  border-radius: 1px;
+  background: #fff;
+  border: 1px solid #f0f0f0;
+  -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
+  box-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
+  z-index: 1;
+}
+
+.custom-theme .el-color-alpha-slider.is-vertical {
+  width: 20px;
+  height: 180px;
+}
+
+.custom-theme .el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar {
+  background: -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0)), to(white));
+  background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0, #fff 100%);
+}
+
+.custom-theme .el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb {
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 4px;
+}
+
+.custom-theme .el-color-dropdown {
+  width: 300px;
+}
+
+.custom-theme .el-color-dropdown__main-wrapper {
+  margin-bottom: 6px;
+}
+
+.custom-theme .el-color-dropdown__main-wrapper::after {
+  content: '';
+  display: table;
+  clear: both;
+}
+
+.custom-theme .el-color-dropdown__btns {
+  margin-top: 6px;
+  text-align: right;
+}
+
+.custom-theme .el-color-dropdown__value {
+  float: left;
+  line-height: 26px;
+  font-size: 12px;
+  color: #000;
+  width: 160px;
+}
+
+.custom-theme .el-color-dropdown__btn {
+  border: 1px solid #dcdcdc;
+  color: #333;
+  line-height: 24px;
+  border-radius: 2px;
+  padding: 0 20px;
+  cursor: pointer;
+  background-color: transparent;
+  outline: 0;
+  font-size: 12px;
+}
+
+.custom-theme .el-color-dropdown__btn[disabled] {
+  color: #ccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-color-dropdown__btn:hover {
+  color: #262729;
+  border-color: #262729;
+}
+
+.custom-theme .el-color-dropdown__link-btn {
+  cursor: pointer;
+  color: #262729;
+  text-decoration: none;
+  padding: 15px;
+  font-size: 12px;
+}
+
+.custom-theme .el-color-dropdown__link-btn:hover {
+  color: tint(#262729, 20%);
+}
+
+.custom-theme .el-color-picker {
+  display: inline-block;
+  position: relative;
+  line-height: normal;
+  height: 40px;
+}
+
+.custom-theme .el-color-picker.is-disabled .el-color-picker__trigger {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-color-picker--medium {
+  height: 36px;
+}
+
+.custom-theme .el-color-picker--medium .el-color-picker__trigger {
+  height: 36px;
+  width: 36px;
+}
+
+.custom-theme .el-color-picker--medium .el-color-picker__mask {
+  height: 34px;
+  width: 34px;
+}
+
+.custom-theme .el-color-picker--small {
+  height: 32px;
+}
+
+.custom-theme .el-color-picker--small .el-color-picker__trigger {
+  height: 32px;
+  width: 32px;
+}
+
+.custom-theme .el-color-picker--small .el-color-picker__mask {
+  height: 30px;
+  width: 30px;
+}
+
+.custom-theme .el-color-picker--small .el-color-picker__empty,
+.custom-theme .el-color-picker--small .el-color-picker__icon {
+  -webkit-transform: translate3d(-50%, -50%, 0) scale(0.8);
+  transform: translate3d(-50%, -50%, 0) scale(0.8);
+}
+
+.custom-theme .el-color-picker--mini {
+  height: 28px;
+}
+
+.custom-theme .el-color-picker--mini .el-color-picker__trigger {
+  height: 28px;
+  width: 28px;
+}
+
+.custom-theme .el-color-picker--mini .el-color-picker__mask {
+  height: 26px;
+  width: 26px;
+}
+
+.custom-theme .el-color-picker--mini .el-color-picker__empty,
+.custom-theme .el-color-picker--mini .el-color-picker__icon {
+  -webkit-transform: translate3d(-50%, -50%, 0) scale(0.8);
+  transform: translate3d(-50%, -50%, 0) scale(0.8);
+}
+
+.custom-theme .el-color-picker__mask {
+  height: 38px;
+  width: 38px;
+  border-radius: 4px;
+  position: absolute;
+  top: 1px;
+  left: 1px;
+  z-index: 1;
+  cursor: not-allowed;
+  background-color: rgba(255, 255, 255, 0.7);
+}
+
+.custom-theme .el-color-picker__trigger {
+  display: inline-block;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  height: 40px;
+  width: 40px;
+  padding: 4px;
+  border: 1px solid #e6e6e6;
+  border-radius: 4px;
+  font-size: 0;
+  position: relative;
+  cursor: pointer;
+}
+
+.custom-theme .el-color-picker__color {
+  position: relative;
+  display: block;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  border: 1px solid #999;
+  border-radius: 2px;
+  width: 100%;
+  height: 100%;
+  text-align: center;
+}
+
+.custom-theme .el-color-picker__color.is-alpha {
+  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);
+}
+
+.custom-theme .el-color-picker__color-inner {
+  position: absolute;
+  left: 0;
+  top: 0;
+  right: 0;
+  bottom: 0;
+}
+
+.custom-theme .el-color-picker__empty {
+  font-size: 12px;
+  color: #999;
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  -webkit-transform: translate3d(-50%, -50%, 0);
+  transform: translate3d(-50%, -50%, 0);
+}
+
+.custom-theme .el-color-picker__icon {
+  display: inline-block;
+  position: absolute;
+  width: 100%;
+  top: 50%;
+  left: 50%;
+  -webkit-transform: translate3d(-50%, -50%, 0);
+  transform: translate3d(-50%, -50%, 0);
+  color: #fff;
+  text-align: center;
+  font-size: 12px;
+}
+
+.custom-theme .el-color-picker__panel {
+  position: absolute;
+  z-index: 10;
+  padding: 6px;
+  background-color: #fff;
+  border: 1px solid #e6ebf5;
+  border-radius: 4px;
+  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+}
+
+.custom-theme .el-input {
+  position: relative;
+  font-size: 14px;
+  display: inline-block;
+  width: 100%;
+}
+
+.custom-theme .el-input::-webkit-scrollbar {
+  z-index: 11;
+  width: 6px;
+}
+
+.custom-theme .el-input::-webkit-scrollbar:horizontal {
+  height: 6px;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-thumb {
+  border-radius: 5px;
+  width: 6px;
+  background: #b4bccc;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-corner {
+  background: #fff;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-track {
+  background: #fff;
+}
+
+.custom-theme .el-input::-webkit-scrollbar-track-piece {
+  background: #fff;
+  width: 6px;
+}
+
+.custom-theme .el-input__inner {
+  -webkit-appearance: none;
+  background-color: #fff;
+  background-image: none;
+  border-radius: 4px;
+  border: 1px solid #d8dce5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  color: #5a5e66;
+  display: inline-block;
+  font-size: inherit;
+  height: 40px;
+  line-height: 1;
+  outline: 0;
+  padding: 0 15px;
+  -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  width: 100%;
+}
+
+.custom-theme .el-input__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:hover {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-input__inner:focus {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-input__suffix {
+  position: absolute;
+  height: 100%;
+  right: 5px;
+  top: 0;
+  text-align: center;
+  color: #b4bccc;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+  pointer-events: none;
+}
+
+.custom-theme .el-input__suffix-inner {
+  pointer-events: all;
+}
+
+.custom-theme .el-input__prefix {
+  position: absolute;
+  height: 100%;
+  left: 5px;
+  top: 0;
+  text-align: center;
+  color: #b4bccc;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+}
+
+.custom-theme .el-input__icon {
+  height: 100%;
+  width: 25px;
+  text-align: center;
+  -webkit-transition: all 0.3s;
+  transition: all 0.3s;
+  line-height: 40px;
+}
+
+.custom-theme .el-input__icon:after {
+  content: '';
+  height: 100%;
+  width: 0;
+  display: inline-block;
+  vertical-align: middle;
+}
+
+.custom-theme .el-input__validateIcon {
+  pointer-events: none;
+}
+
+.custom-theme .el-input.is-active .el-input__inner {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-input.is-disabled .el-input__icon {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-input--suffix .el-input__inner {
+  padding-right: 30px;
+}
+
+.custom-theme .el-input--prefix .el-input__inner {
+  padding-left: 30px;
+}
+
+.custom-theme .el-input--medium {
+  font-size: 14px;
+}
+
+.custom-theme .el-input--medium .el-input__inner {
+  height: 36px;
+}
+
+.custom-theme .el-input--medium .el-input__icon {
+  line-height: 36px;
+}
+
+.custom-theme .el-input--small {
+  font-size: 13px;
+}
+
+.custom-theme .el-input--small .el-input__inner {
+  height: 32px;
+}
+
+.custom-theme .el-input--small .el-input__icon {
+  line-height: 32px;
+}
+
+.custom-theme .el-input--mini {
+  font-size: 12px;
+}
+
+.custom-theme .el-input--mini .el-input__inner {
+  height: 28px;
+}
+
+.custom-theme .el-input--mini .el-input__icon {
+  line-height: 28px;
+}
+
+.custom-theme .el-input-group {
+  line-height: normal;
+  display: inline-table;
+  width: 100%;
+  border-collapse: separate;
+}
+
+.custom-theme .el-input-group > .el-input__inner {
+  vertical-align: middle;
+  display: table-cell;
+}
+
+.custom-theme .el-input-group__append,
+.custom-theme .el-input-group__prepend {
+  background-color: #f5f7fa;
+  color: #0a76a4;
+  vertical-align: middle;
+  display: table-cell;
+  position: relative;
+  border: 1px solid #d8dce5;
+  border-radius: 4px;
+  padding: 0 20px;
+  width: 1px;
+  white-space: nowrap;
+}
+
+.custom-theme .el-input-group__append:focus,
+.custom-theme .el-input-group__prepend:focus {
+  outline: 0;
+}
+
+.custom-theme .el-input-group__append .el-button,
+.custom-theme .el-input-group__append .el-select,
+.custom-theme .el-input-group__prepend .el-button,
+.custom-theme .el-input-group__prepend .el-select {
+  display: inline-block;
+  margin: -20px;
+}
+
+.custom-theme .el-input-group__append button.el-button,
+.custom-theme .el-input-group__append div.el-select .el-input__inner,
+.custom-theme .el-input-group__append div.el-select:hover .el-input__inner,
+.custom-theme .el-input-group__prepend button.el-button,
+.custom-theme .el-input-group__prepend div.el-select .el-input__inner,
+.custom-theme .el-input-group__prepend div.el-select:hover .el-input__inner {
+  border-color: transparent;
+  background-color: transparent;
+  color: inherit;
+  border-top: 0;
+  border-bottom: 0;
+}
+
+.custom-theme .el-input-group__append .el-button,
+.custom-theme .el-input-group__append .el-input,
+.custom-theme .el-input-group__prepend .el-button,
+.custom-theme .el-input-group__prepend .el-input {
+  font-size: inherit;
+}
+
+.custom-theme .el-input-group__prepend {
+  border-right: 0;
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-input-group__append {
+  border-left: 0;
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-input-group--prepend .el-input__inner {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-input-group--append .el-input__inner {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-textarea {
+  display: inline-block;
+  width: 100%;
+  vertical-align: bottom;
+}
+
+.custom-theme .el-textarea__inner {
+  display: block;
+  resize: vertical;
+  padding: 5px 15px;
+  line-height: 1.5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 100%;
+  font-size: 14px;
+  color: #5a5e66;
+  background-color: #fff;
+  background-image: none;
+  border: 1px solid #d8dce5;
+  border-radius: 4px;
+  -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+}
+
+.custom-theme .el-textarea__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:hover {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-textarea__inner:focus {
+  outline: 0;
+  border-color: #262729;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner {
+  background-color: #f5f7fa;
+  border-color: #dfe4ed;
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-textarea.is-disabled .el-textarea__inner::placeholder {
+  color: #b4bccc;
+}
+
+.custom-theme .el-button {
+  display: inline-block;
+  line-height: 1;
+  white-space: nowrap;
+  cursor: pointer;
+  background: #fff;
+  border: 1px solid #d8dce5;
+  border-color: #d8dce5;
+  color: #5a5e66;
+  -webkit-appearance: none;
+  text-align: center;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  outline: 0;
+  margin: 0;
+  -webkit-transition: 0.1s;
+  transition: 0.1s;
+  font-weight: 500;
+  -moz-user-select: none;
+  -webkit-user-select: none;
+  -ms-user-select: none;
+  padding: 12px 20px;
+  font-size: 14px;
+  border-radius: 4px;
+}
+
+.custom-theme .el-button + .el-button {
+  margin-left: 10px;
+}
+
+.custom-theme .el-button.is-round {
+  padding: 12px 20px;
+}
+
+.custom-theme .el-button:focus,
+.custom-theme .el-button:hover {
+  color: #262729;
+  border-color: #bebebf;
+  background-color: #e9e9ea;
+}
+
+.custom-theme .el-button:active {
+  color: #222325;
+  border-color: #222325;
+  outline: 0;
+}
+
+.custom-theme .el-button::-moz-focus-inner {
+  border: 0;
+}
+
+.custom-theme .el-button [class*='el-icon-'] + span {
+  margin-left: 5px;
+}
+
+.custom-theme .el-button.is-plain:focus,
+.custom-theme .el-button.is-plain:hover {
+  background: #fff;
+  border-color: #262729;
+  color: #262729;
+}
+
+.custom-theme .el-button.is-plain:active {
+  background: #fff;
+  border-color: #222325;
+  color: #222325;
+  outline: 0;
+}
+
+.custom-theme .el-button.is-active {
+  color: #222325;
+  border-color: #222325;
+}
+
+.custom-theme .el-button.is-disabled,
+.custom-theme .el-button.is-disabled:focus,
+.custom-theme .el-button.is-disabled:hover {
+  color: #b4bccc;
+  cursor: not-allowed;
+  background-image: none;
+  background-color: #fff;
+  border-color: #e6ebf5;
+}
+
+.custom-theme .el-button.is-disabled.el-button--text {
+  background-color: transparent;
+}
+
+.custom-theme .el-button.is-disabled.is-plain,
+.custom-theme .el-button.is-disabled.is-plain:focus,
+.custom-theme .el-button.is-disabled.is-plain:hover {
+  background-color: #fff;
+  border-color: #e6ebf5;
+  color: #b4bccc;
+}
+
+.custom-theme .el-button.is-loading {
+  position: relative;
+  pointer-events: none;
+}
+
+.custom-theme .el-button.is-loading:before {
+  pointer-events: none;
+  content: '';
+  position: absolute;
+  left: -1px;
+  top: -1px;
+  right: -1px;
+  bottom: -1px;
+  border-radius: inherit;
+  background-color: rgba(255, 255, 255, 0.35);
+}
+
+.custom-theme .el-button.is-round {
+  border-radius: 20px;
+  padding: 12px 23px;
+}
+
+.custom-theme .el-button--primary {
+  color: #fff;
+  background-color: #262729;
+  border-color: #262729;
+}
+
+.custom-theme .el-button--primary:focus,
+.custom-theme .el-button--primary:hover {
+  background: #515254;
+  border-color: #515254;
+  color: #fff;
+}
+
+.custom-theme .el-button--primary:active {
+  background: #222325;
+  border-color: #222325;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--primary.is-active {
+  background: #222325;
+  border-color: #222325;
+  color: #fff;
+}
+
+.custom-theme .el-button--primary.is-disabled,
+.custom-theme .el-button--primary.is-disabled:active,
+.custom-theme .el-button--primary.is-disabled:focus,
+.custom-theme .el-button--primary.is-disabled:hover {
+  color: #fff;
+  background-color: #939394;
+  border-color: #939394;
+}
+
+.custom-theme .el-button--primary.is-plain {
+  color: #262729;
+  background: #e9e9ea;
+  border-color: #a8a9a9;
+}
+
+.custom-theme .el-button--primary.is-plain:focus,
+.custom-theme .el-button--primary.is-plain:hover {
+  background: #262729;
+  border-color: #262729;
+  color: #fff;
+}
+
+.custom-theme .el-button--primary.is-plain:active {
+  background: #222325;
+  border-color: #222325;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--primary.is-plain.is-disabled,
+.custom-theme .el-button--primary.is-plain.is-disabled:active,
+.custom-theme .el-button--primary.is-plain.is-disabled:focus,
+.custom-theme .el-button--primary.is-plain.is-disabled:hover {
+  color: #7d7d7f;
+  background-color: #e9e9ea;
+  border-color: #d4d4d4;
+}
+
+.custom-theme .el-button--success {
+  color: #fff;
+  background-color: #409167;
+  border-color: #409167;
+}
+
+.custom-theme .el-button--success:focus,
+.custom-theme .el-button--success:hover {
+  background: #66a785;
+  border-color: #66a785;
+  color: #fff;
+}
+
+.custom-theme .el-button--success:active {
+  background: #3a835d;
+  border-color: #3a835d;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--success.is-active {
+  background: #3a835d;
+  border-color: #3a835d;
+  color: #fff;
+}
+
+.custom-theme .el-button--success.is-disabled,
+.custom-theme .el-button--success.is-disabled:active,
+.custom-theme .el-button--success.is-disabled:focus,
+.custom-theme .el-button--success.is-disabled:hover {
+  color: #fff;
+  background-color: #a0c8b3;
+  border-color: #a0c8b3;
+}
+
+.custom-theme .el-button--success.is-plain {
+  color: #409167;
+  background: #ecf4f0;
+  border-color: #b3d3c2;
+}
+
+.custom-theme .el-button--success.is-plain:focus,
+.custom-theme .el-button--success.is-plain:hover {
+  background: #409167;
+  border-color: #409167;
+  color: #fff;
+}
+
+.custom-theme .el-button--success.is-plain:active {
+  background: #3a835d;
+  border-color: #3a835d;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--success.is-plain.is-disabled,
+.custom-theme .el-button--success.is-plain.is-disabled:active,
+.custom-theme .el-button--success.is-plain.is-disabled:focus,
+.custom-theme .el-button--success.is-plain.is-disabled:hover {
+  color: #8cbda4;
+  background-color: #ecf4f0;
+  border-color: #d9e9e1;
+}
+
+.custom-theme .el-button--warning {
+  color: #fff;
+  background-color: #9da408;
+  border-color: #9da408;
+}
+
+.custom-theme .el-button--warning:focus,
+.custom-theme .el-button--warning:hover {
+  background: #b1b639;
+  border-color: #b1b639;
+  color: #fff;
+}
+
+.custom-theme .el-button--warning:active {
+  background: #8d9407;
+  border-color: #8d9407;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--warning.is-active {
+  background: #8d9407;
+  border-color: #8d9407;
+  color: #fff;
+}
+
+.custom-theme .el-button--warning.is-disabled,
+.custom-theme .el-button--warning.is-disabled:active,
+.custom-theme .el-button--warning.is-disabled:focus,
+.custom-theme .el-button--warning.is-disabled:hover {
+  color: #fff;
+  background-color: #ced284;
+  border-color: #ced284;
+}
+
+.custom-theme .el-button--warning.is-plain {
+  color: #9da408;
+  background: #f5f6e6;
+  border-color: #d8db9c;
+}
+
+.custom-theme .el-button--warning.is-plain:focus,
+.custom-theme .el-button--warning.is-plain:hover {
+  background: #9da408;
+  border-color: #9da408;
+  color: #fff;
+}
+
+.custom-theme .el-button--warning.is-plain:active {
+  background: #8d9407;
+  border-color: #8d9407;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--warning.is-plain.is-disabled,
+.custom-theme .el-button--warning.is-plain.is-disabled:active,
+.custom-theme .el-button--warning.is-plain.is-disabled:focus,
+.custom-theme .el-button--warning.is-plain.is-disabled:hover {
+  color: #c4c86b;
+  background-color: #f5f6e6;
+  border-color: #ebedce;
+}
+
+.custom-theme .el-button--danger {
+  color: #fff;
+  background-color: #b3450e;
+  border-color: #b3450e;
+}
+
+.custom-theme .el-button--danger:focus,
+.custom-theme .el-button--danger:hover {
+  background: #c26a3e;
+  border-color: #c26a3e;
+  color: #fff;
+}
+
+.custom-theme .el-button--danger:active {
+  background: #a13e0d;
+  border-color: #a13e0d;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--danger.is-active {
+  background: #a13e0d;
+  border-color: #a13e0d;
+  color: #fff;
+}
+
+.custom-theme .el-button--danger.is-disabled,
+.custom-theme .el-button--danger.is-disabled:active,
+.custom-theme .el-button--danger.is-disabled:focus,
+.custom-theme .el-button--danger.is-disabled:hover {
+  color: #fff;
+  background-color: #d9a287;
+  border-color: #d9a287;
+}
+
+.custom-theme .el-button--danger.is-plain {
+  color: #b3450e;
+  background: #f7ece7;
+  border-color: #e1b59f;
+}
+
+.custom-theme .el-button--danger.is-plain:focus,
+.custom-theme .el-button--danger.is-plain:hover {
+  background: #b3450e;
+  border-color: #b3450e;
+  color: #fff;
+}
+
+.custom-theme .el-button--danger.is-plain:active {
+  background: #a13e0d;
+  border-color: #a13e0d;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--danger.is-plain.is-disabled,
+.custom-theme .el-button--danger.is-plain.is-disabled:active,
+.custom-theme .el-button--danger.is-plain.is-disabled:focus,
+.custom-theme .el-button--danger.is-plain.is-disabled:hover {
+  color: #d18f6e;
+  background-color: #f7ece7;
+  border-color: #f0dacf;
+}
+
+.custom-theme .el-button--info {
+  color: #fff;
+  background-color: #0a76a4;
+  border-color: #0a76a4;
+}
+
+.custom-theme .el-button--info:focus,
+.custom-theme .el-button--info:hover {
+  background: #3b91b6;
+  border-color: #3b91b6;
+  color: #fff;
+}
+
+.custom-theme .el-button--info:active {
+  background: #096a94;
+  border-color: #096a94;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--info.is-active {
+  background: #096a94;
+  border-color: #096a94;
+  color: #fff;
+}
+
+.custom-theme .el-button--info.is-disabled,
+.custom-theme .el-button--info.is-disabled:active,
+.custom-theme .el-button--info.is-disabled:focus,
+.custom-theme .el-button--info.is-disabled:hover {
+  color: #fff;
+  background-color: #85bbd2;
+  border-color: #85bbd2;
+}
+
+.custom-theme .el-button--info.is-plain {
+  color: #0a76a4;
+  background: #e7f1f6;
+  border-color: #9dc8db;
+}
+
+.custom-theme .el-button--info.is-plain:focus,
+.custom-theme .el-button--info.is-plain:hover {
+  background: #0a76a4;
+  border-color: #0a76a4;
+  color: #fff;
+}
+
+.custom-theme .el-button--info.is-plain:active {
+  background: #096a94;
+  border-color: #096a94;
+  color: #fff;
+  outline: 0;
+}
+
+.custom-theme .el-button--info.is-plain.is-disabled,
+.custom-theme .el-button--info.is-plain.is-disabled:active,
+.custom-theme .el-button--info.is-plain.is-disabled:focus,
+.custom-theme .el-button--info.is-plain.is-disabled:hover {
+  color: #6cadc8;
+  background-color: #e7f1f6;
+  border-color: #cee4ed;
+}
+
+.custom-theme .el-button--medium {
+  padding: 10px 20px;
+  font-size: 14px;
+  border-radius: 4px;
+}
+
+.custom-theme .el-button--medium.is-round {
+  padding: 10px 20px;
+}
+
+.custom-theme .el-button--small {
+  padding: 9px 15px;
+  font-size: 12px;
+  border-radius: 3px;
+}
+
+.custom-theme .el-button--small.is-round {
+  padding: 9px 15px;
+}
+
+.custom-theme .el-button--mini {
+  padding: 7px 15px;
+  font-size: 12px;
+  border-radius: 3px;
+}
+
+.custom-theme .el-button--mini.is-round {
+  padding: 7px 15px;
+}
+
+.custom-theme .el-button--text {
+  border: none;
+  color: #262729;
+  background: 0 0;
+  padding-left: 0;
+  padding-right: 0;
+}
+
+.custom-theme .el-button--text:focus,
+.custom-theme .el-button--text:hover {
+  color: #515254;
+  border-color: transparent;
+  background-color: transparent;
+}
+
+.custom-theme .el-button--text:active {
+  color: #222325;
+  border-color: transparent;
+  background-color: transparent;
+}
+
+.custom-theme .el-button-group {
+  display: inline-block;
+  vertical-align: middle;
+}
+
+.custom-theme .el-button-group::after,
+.custom-theme .el-button-group::before {
+  display: table;
+  content: '';
+}
+
+.custom-theme .el-button-group::after {
+  clear: both;
+}
+
+.custom-theme .el-button-group .el-button {
+  float: left;
+  position: relative;
+}
+
+.custom-theme .el-button-group .el-button + .el-button {
+  margin-left: 0;
+}
+
+.custom-theme .el-button-group .el-button:first-child {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.custom-theme .el-button-group .el-button:last-child {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.custom-theme .el-button-group .el-button:not(:first-child):not(:last-child) {
+  border-radius: 0;
+}
+
+.custom-theme .el-button-group .el-button:not(:last-child) {
+  margin-right: -1px;
+}
+
+.custom-theme .el-button-group .el-button:active,
+.custom-theme .el-button-group .el-button:focus,
+.custom-theme .el-button-group .el-button:hover {
+  z-index: 1;
+}
+
+.custom-theme .el-button-group .el-button.is-active {
+  z-index: 1;
+}
+
+.custom-theme .el-button-group .el-button--primary:first-child {
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--primary:last-child {
+  border-left-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--primary:not(:first-child):not(:last-child) {
+  border-left-color: rgba(255, 255, 255, 0.5);
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--success:first-child {
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--success:last-child {
+  border-left-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--success:not(:first-child):not(:last-child) {
+  border-left-color: rgba(255, 255, 255, 0.5);
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--warning:first-child {
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--warning:last-child {
+  border-left-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--warning:not(:first-child):not(:last-child) {
+  border-left-color: rgba(255, 255, 255, 0.5);
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--danger:first-child {
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--danger:last-child {
+  border-left-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--danger:not(:first-child):not(:last-child) {
+  border-left-color: rgba(255, 255, 255, 0.5);
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--info:first-child {
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--info:last-child {
+  border-left-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-button-group .el-button--info:not(:first-child):not(:last-child) {
+  border-left-color: rgba(255, 255, 255, 0.5);
+  border-right-color: rgba(255, 255, 255, 0.5);
+}
+
+.custom-theme .el-checkbox {
+  color: #5a5e66;
+  font-weight: 500;
+  font-size: 14px;
+  position: relative;
+  cursor: pointer;
+  display: inline-block;
+  white-space: nowrap;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.custom-theme .el-checkbox.is-bordered {
+  padding: 9px 20px 9px 10px;
+  border-radius: 4px;
+  border: 1px solid #d8dce5;
+}
+
+.custom-theme .el-checkbox.is-bordered.is-checked {
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox.is-bordered.is-disabled {
+  border-color: #e6ebf5;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-checkbox.is-bordered + .el-checkbox.is-bordered {
+  margin-left: 10px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--medium {
+  padding: 7px 20px 7px 10px;
+  border-radius: 4px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label {
+  line-height: 17px;
+  font-size: 14px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner {
+  height: 14px;
+  width: 14px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--small {
+  padding: 3px 15px 7px 10px;
+  border-radius: 3px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label {
+  line-height: 15px;
+  font-size: 12px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner {
+  height: 12px;
+  width: 12px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after {
+  height: 6px;
+  width: 2px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--mini {
+  padding: 1px 15px 5px 10px;
+  border-radius: 3px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label {
+  line-height: 12px;
+  font-size: 12px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner {
+  height: 12px;
+  width: 12px;
+}
+
+.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after {
+  height: 6px;
+  width: 2px;
+}
+
+.custom-theme .el-checkbox__input {
+  white-space: nowrap;
+  cursor: pointer;
+  outline: 0;
+  display: inline-block;
+  line-height: 1;
+  position: relative;
+  vertical-align: middle;
+}
+
+.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner {
+  background-color: #edf2fc;
+  border-color: #d8dce5;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner::after {
+  cursor: not-allowed;
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label {
+  cursor: not-allowed;
+}
+
+.custom-theme .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner {
+  background-color: #edf2fc;
+  border-color: #d8dce5;
+}
+
+.custom-theme .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after {
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner {
+  background-color: #edf2fc;
+  border-color: #d8dce5;
+}
+
+.custom-theme .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before {
+  background-color: #b4bccc;
+  border-color: #b4bccc;
+}
+
+.custom-theme .el-checkbox__input.is-disabled + span.el-checkbox__label {
+  color: #b4bccc;
+  cursor: not-allowed;
+}
+
+.custom-theme .el-checkbox__input.is-checked .el-checkbox__inner {
+  background-color: #262729;
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox__input.is-checked .el-checkbox__inner::after {
+  -webkit-transform: rotate(45deg) scaleY(1);
+  transform: rotate(45deg) scaleY(1);
+}
+
+.custom-theme .el-checkbox__input.is-checked + .el-checkbox__label {
+  color: #262729;
+}
+
+.custom-theme .el-checkbox__input.is-focus .el-checkbox__inner {
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox__input.is-indeterminate .el-checkbox__inner {
+  background-color: #262729;
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox__input.is-indeterminate .el-checkbox__inner::before {
+  content: '';
+  position: absolute;
+  display: block;
+  background-color: #fff;
+  height: 2px;
+  -webkit-transform: scale(0.5);
+  transform: scale(0.5);
+  left: 0;
+  right: 0;
+  top: 5px;
+}
+
+.custom-theme .el-checkbox__input.is-indeterminate .el-checkbox__inner::after {
+  display: none;
+}
+
+.custom-theme .el-checkbox__inner {
+  display: inline-block;
+  position: relative;
+  border: 1px solid #d8dce5;
+  border-radius: 2px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 14px;
+  height: 14px;
+  background-color: #fff;
+  z-index: 1;
+  -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46),
+  background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46);
+  transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46),
+  background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46);
+}
+
+.custom-theme .el-checkbox__inner:hover {
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox__inner::after {
+  -webkit-box-sizing: content-box;
+  box-sizing: content-box;
+  content: '';
+  border: 1px solid #fff;
+  border-left: 0;
+  border-top: 0;
+  height: 7px;
+  left: 4px;
+  position: absolute;
+  top: 1px;
+  -webkit-transform: rotate(45deg) scaleY(0);
+  transform: rotate(45deg) scaleY(0);
+  width: 3px;
+  -webkit-transition: -webkit-transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6) 50ms;
+  transition: -webkit-transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6) 50ms;
+  transition: transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6) 50ms;
+  transition: transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6) 50ms,
+  -webkit-transform 0.15s cubic-bezier(0.71, -0.46, 0.88, 0.6) 50ms;
+  -webkit-transform-origin: center;
+  transform-origin: center;
+}
+
+.custom-theme .el-checkbox__original {
+  opacity: 0;
+  outline: 0;
+  position: absolute;
+  margin: 0;
+  width: 0;
+  height: 0;
+  left: -999px;
+}
+
+.custom-theme .el-checkbox__label {
+  display: inline-block;
+  padding-left: 10px;
+  line-height: 19px;
+  font-size: 14px;
+}
+
+.custom-theme .el-checkbox + .el-checkbox {
+  margin-left: 30px;
+}
+
+.custom-theme .el-checkbox-button {
+  position: relative;
+  display: inline-block;
+}
+
+.custom-theme .el-checkbox-button__inner {
+  display: inline-block;
+  line-height: 1;
+  font-weight: 500;
+  white-space: nowrap;
+  vertical-align: middle;
+  cursor: pointer;
+  background: #fff;
+  border: 1px solid #d8dce5;
+  border-left: 0;
+  color: #5a5e66;
+  -webkit-appearance: none;
+  text-align: center;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  outline: 0;
+  margin: 0;
+  position: relative;
+  -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+  -moz-user-select: none;
+  -webkit-user-select: none;
+  -ms-user-select: none;
+  padding: 12px 20px;
+  font-size: 14px;
+  border-radius: 0;
+}
+
+.custom-theme .el-checkbox-button__inner.is-round {
+  padding: 12px 20px;
+}
+
+.custom-theme .el-checkbox-button__inner:hover {
+  color: #262729;
+}
+
+.custom-theme .el-checkbox-button__inner [class*='el-icon-'] {
+  line-height: 0.9;
+}
+
+.custom-theme .el-checkbox-button__inner [class*='el-icon-'] + span {
+  margin-left: 5px;
+}
+
+.custom-theme .el-checkbox-button__original {
+  opacity: 0;
+  outline: 0;
+  position: absolute;
+  margin: 0;
+  left: -999px;
+}
+
+.custom-theme .el-checkbox-button.is-checked .el-checkbox-button__inner {
+  color: #fff;
+  background-color: #262729;
+  border-color: #262729;
+  -webkit-box-shadow: -1px 0 0 0 #7d7d7f;
+  box-shadow: -1px 0 0 0 #7d7d7f;
+}
+
+.custom-theme .el-checkbox-button.is-disabled .el-checkbox-button__inner {
+  color: #b4bccc;
+  cursor: not-allowed;
+  background-image: none;
+  background-color: #fff;
+  border-color: #e6ebf5;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+
+.custom-theme .el-checkbox-button:first-child .el-checkbox-button__inner {
+  border-left: 1px solid #d8dce5;
+  border-radius: 4px 0 0 4px;
+  -webkit-box-shadow: none !important;
+  box-shadow: none !important;
+}
+
+.custom-theme .el-checkbox-button.is-focus .el-checkbox-button__inner {
+  border-color: #262729;
+}
+
+.custom-theme .el-checkbox-button:last-child .el-checkbox-button__inner {
+  border-radius: 0 4px 4px 0;
+}
+
+.custom-theme .el-checkbox-button--medium .el-checkbox-button__inner {
+  padding: 10px 20px;
+  font-size: 14px;
+  border-radius: 0;
+}
+
+.custom-theme .el-checkbox-button--medium .el-checkbox-button__inner.is-round {
+  padding: 10px 20px;
+}
+
+.custom-theme .el-checkbox-button--small .el-checkbox-button__inner {
+  padding: 9px 15px;
+  font-size: 12px;
+  border-radius: 0;
+}
+
+.custom-theme .el-checkbox-button--small .el-checkbox-button__inner.is-round {
+  padding: 9px 15px;
+}
+
+.custom-theme .el-checkbox-button--mini .el-checkbox-button__inner {
+  padding: 7px 15px;
+  font-size: 12px;
+  border-radius: 0;
+}
+
+.custom-theme .el-checkbox-button--mini .el-checkbox-button__inner.is-round {
+  padding: 7px 15px;
+}
+
+.custom-theme .el-checkbox-group {
+  font-size: 0;
+}
+
+.custom-theme .el-transfer {
+  font-size: 14px;
+}
+
+.custom-theme .el-transfer__buttons {
+  display: inline-block;
+  vertical-align: middle;
+  padding: 0 30px;
+}
+
+.custom-theme .el-transfer__button {
+  display: block;
+  margin: 0 auto;
+  padding: 10px;
+  border-radius: 50%;
+  color: #fff;
+  background-color: #262729;
+  font-size: 0;
+}
+
+.custom-theme .el-transfer__button.is-with-texts {
+  border-radius: 4px;
+}
+
+.custom-theme .el-transfer__button.is-disabled {
+  border: 1px solid #d8dce5;
+  background-color: #f5f7fa;
+  color: #b4bccc;
+}
+
+.custom-theme .el-transfer__button.is-disabled:hover {
+  border: 1px solid #d8dce5;
+  background-color: #f5f7fa;
+  color: #b4bccc;
+}
+
+.custom-theme .el-transfer__button:first-child {
+  margin-bottom: 10px;
+}
+
+.custom-theme .el-transfer__button:nth-child(2) {
+  margin: 0;
+}
+
+.custom-theme .el-transfer__button i,
+.custom-theme .el-transfer__button span {
+  font-size: 14px;
+}
+
+.custom-theme .el-transfer__button [class*='el-icon-'] + span {
+  margin-left: 0;
+}
+
+.custom-theme .el-transfer-panel {
+  border: 1px solid #e6ebf5;
+  border-radius: 4px;
+  overflow: hidden;
+  background: #fff;
+  display: inline-block;
+  vertical-align: middle;
+  width: 200px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  position: relative;
+}
+
+.custom-theme .el-transfer-panel__body {
+  height: 246px;
+}
+
+.custom-theme .el-transfer-panel__body.is-with-footer {
+  padding-bottom: 40px;
+}
+
+.custom-theme .el-transfer-panel__list {
+  margin: 0;
+  padding: 6px 0;
+  list-style: none;
+  height: 246px;
+  overflow: auto;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-transfer-panel__list.is-filterable {
+  height: 194px;
+  padding-top: 0;
+}
+
+.custom-theme .el-transfer-panel__item {
+  height: 30px;
+  line-height: 30px;
+  padding-left: 15px;
+  display: block;
+}
+
+.custom-theme .el-transfer-panel__item + .el-transfer-panel__item {
+  margin-left: 0;
+}
+
+.custom-theme .el-transfer-panel__item.el-checkbox {
+  color: #5a5e66;
+}
+
+.custom-theme .el-transfer-panel__item:hover {
+  color: #262729;
+}
+
+.custom-theme .el-transfer-panel__item.el-checkbox .el-checkbox__label {
+  width: 100%;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  display: block;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  padding-left: 24px;
+  line-height: 30px;
+}
+
+.custom-theme .el-transfer-panel__item .el-checkbox__input {
+  position: absolute;
+  top: 8px;
+}
+
+.custom-theme .el-transfer-panel__filter {
+  text-align: center;
+  margin: 15px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  display: block;
+  width: auto;
+}
+
+.custom-theme .el-transfer-panel__filter .el-input__inner {
+  height: 32px;
+  width: 100%;
+  font-size: 12px;
+  display: inline-block;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  border-radius: 16px;
+  padding-right: 10px;
+  padding-left: 30px;
+}
+
+.custom-theme .el-transfer-panel__filter .el-input__icon {
+  margin-left: 5px;
+}
+
+.custom-theme .el-transfer-panel__filter .el-icon-circle-close {
+  cursor: pointer;
+}
+
+.custom-theme .el-transfer-panel .el-transfer-panel__header {
+  height: 40px;
+  line-height: 40px;
+  background: #f5f7fa;
+  margin: 0;
+  padding-left: 15px;
+  border-bottom: 1px solid #e6ebf5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  color: #000;
+}
+
+.custom-theme .el-transfer-panel .el-transfer-panel__header .el-checkbox {
+  display: block;
+  line-height: 40px;
+}
+
+.custom-theme .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label {
+  font-size: 16px;
+  color: #2d2f33;
+  font-weight: 400;
+}
+
+.custom-theme .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span {
+  position: absolute;
+  right: 15px;
+  color: #878d99;
+  font-size: 12px;
+  font-weight: 400;
+}
+
+.custom-theme .el-transfer-panel .el-transfer-panel__footer {
+  height: 40px;
+  background: #fff;
+  margin: 0;
+  padding: 0;
+  border-top: 1px solid #e6ebf5;
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  width: 100%;
+  z-index: 1;
+}
+
+.custom-theme .el-transfer-panel .el-transfer-panel__footer::after {
+  display: inline-block;
+  content: '';
+  height: 100%;
+  vertical-align: middle;
+}
+
+.custom-theme .el-transfer-panel .el-transfer-panel__footer .el-checkbox {
+  padding-left: 20px;
+  color: #5a5e66;
+}
+
+.custom-theme .el-transfer-panel .el-transfer-panel__empty {
+  margin: 0;
+  height: 30px;
+  line-height: 30px;
+  padding: 6px 15px 0;
+  color: #878d99;
+}
+
+.custom-theme .el-transfer-panel .el-checkbox__label {
+  padding-left: 8px;
+}
+
+.custom-theme .el-transfer-panel .el-checkbox__inner {
+  height: 14px;
+  width: 14px;
+  border-radius: 3px;
+}
+
+.custom-theme .el-transfer-panel .el-checkbox__inner::after {
+  height: 6px;
+  width: 3px;
+  left: 4px;
+}
+
+.custom-theme .el-container {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-orient: horizontal;
+  -webkit-box-direction: normal;
+  -ms-flex-direction: row;
+  flex-direction: row;
+  -webkit-box-flex: 1;
+  -ms-flex: 1;
+  flex: 1;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-container.is-vertical {
+  -webkit-box-orient: vertical;
+  -webkit-box-direction: normal;
+  -ms-flex-direction: column;
+  flex-direction: column;
+}
+
+.custom-theme .el-header {
+  padding: 0 20px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-aside {
+  overflow: auto;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.custom-theme .el-main {
+  -webkit-box-flex: 1;
+  -ms-flex: 1;
+  flex: 1;
+  overflow: auto;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  /*padding: 20px;*/
+}
+
+.custom-theme .el-footer {
+  padding: 0 20px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
diff --git a/project-web/src/assets/dataV/1.png b/project-web/src/assets/dataV/1.png
new file mode 100644
index 0000000..55f54ce
--- /dev/null
+++ b/project-web/src/assets/dataV/1.png
Binary files differ
diff --git a/project-web/src/assets/dataV/2.png b/project-web/src/assets/dataV/2.png
new file mode 100644
index 0000000..d956b3f
--- /dev/null
+++ b/project-web/src/assets/dataV/2.png
Binary files differ
diff --git a/project-web/src/assets/dataV/3.png b/project-web/src/assets/dataV/3.png
new file mode 100644
index 0000000..df6f7ae
--- /dev/null
+++ b/project-web/src/assets/dataV/3.png
Binary files differ
diff --git a/project-web/src/assets/dataV/EX.png b/project-web/src/assets/dataV/EX.png
new file mode 100644
index 0000000..af029fe
--- /dev/null
+++ b/project-web/src/assets/dataV/EX.png
Binary files differ
diff --git a/project-web/src/assets/dataV/Ellipse 1954.png b/project-web/src/assets/dataV/Ellipse 1954.png
new file mode 100644
index 0000000..6cc8260
--- /dev/null
+++ b/project-web/src/assets/dataV/Ellipse 1954.png
Binary files differ
diff --git a/project-web/src/assets/dataV/Group 3649.png b/project-web/src/assets/dataV/Group 3649.png
new file mode 100644
index 0000000..5af025a
--- /dev/null
+++ b/project-web/src/assets/dataV/Group 3649.png
Binary files differ
diff --git a/project-web/src/assets/dataV/Group 88.png b/project-web/src/assets/dataV/Group 88.png
new file mode 100644
index 0000000..7d7a7e3
--- /dev/null
+++ b/project-web/src/assets/dataV/Group 88.png
Binary files differ
diff --git a/project-web/src/assets/dataV/MYD.png b/project-web/src/assets/dataV/MYD.png
new file mode 100644
index 0000000..4d1057d
--- /dev/null
+++ b/project-web/src/assets/dataV/MYD.png
Binary files differ
diff --git a/project-web/src/assets/dataV/SLABG.png b/project-web/src/assets/dataV/SLABG.png
new file mode 100644
index 0000000..6bed2e2
--- /dev/null
+++ b/project-web/src/assets/dataV/SLABG.png
Binary files differ
diff --git a/project-web/src/assets/dataV/ST.png b/project-web/src/assets/dataV/ST.png
new file mode 100644
index 0000000..4f2507e
--- /dev/null
+++ b/project-web/src/assets/dataV/ST.png
Binary files differ
diff --git a/project-web/src/assets/dataV/SX.png b/project-web/src/assets/dataV/SX.png
new file mode 100644
index 0000000..0be8389
--- /dev/null
+++ b/project-web/src/assets/dataV/SX.png
Binary files differ
diff --git a/project-web/src/assets/dataV/TSLX.png b/project-web/src/assets/dataV/TSLX.png
new file mode 100644
index 0000000..9ff7f02
--- /dev/null
+++ b/project-web/src/assets/dataV/TSLX.png
Binary files differ
diff --git a/project-web/src/assets/dataV/YX.png b/project-web/src/assets/dataV/YX.png
new file mode 100644
index 0000000..7b46c1d
--- /dev/null
+++ b/project-web/src/assets/dataV/YX.png
Binary files differ
diff --git a/project-web/src/assets/dataV/bg.png b/project-web/src/assets/dataV/bg.png
new file mode 100644
index 0000000..d9e02a4
--- /dev/null
+++ b/project-web/src/assets/dataV/bg.png
Binary files differ
diff --git a/project-web/src/assets/dataV/boxBG.png b/project-web/src/assets/dataV/boxBG.png
new file mode 100644
index 0000000..f09788f
--- /dev/null
+++ b/project-web/src/assets/dataV/boxBG.png
Binary files differ
diff --git a/project-web/src/assets/dataV/cityBox.png b/project-web/src/assets/dataV/cityBox.png
new file mode 100644
index 0000000..74aa3fd
--- /dev/null
+++ b/project-web/src/assets/dataV/cityBox.png
Binary files differ
diff --git a/project-web/src/assets/dataV/comprehensive-ico1.png b/project-web/src/assets/dataV/comprehensive-ico1.png
new file mode 100644
index 0000000..9022b54
--- /dev/null
+++ b/project-web/src/assets/dataV/comprehensive-ico1.png
Binary files differ
diff --git a/project-web/src/assets/dataV/comprehensive-ico2.png b/project-web/src/assets/dataV/comprehensive-ico2.png
new file mode 100644
index 0000000..18bdb5e
--- /dev/null
+++ b/project-web/src/assets/dataV/comprehensive-ico2.png
Binary files differ
diff --git a/project-web/src/assets/dataV/comprehensive-ico3.png b/project-web/src/assets/dataV/comprehensive-ico3.png
new file mode 100644
index 0000000..b9192c9
--- /dev/null
+++ b/project-web/src/assets/dataV/comprehensive-ico3.png
Binary files differ
diff --git a/project-web/src/assets/dataV/comprehensive-ico4.png b/project-web/src/assets/dataV/comprehensive-ico4.png
new file mode 100644
index 0000000..49e00f6
--- /dev/null
+++ b/project-web/src/assets/dataV/comprehensive-ico4.png
Binary files differ
diff --git a/project-web/src/assets/dataV/comprehensive-ico5.png b/project-web/src/assets/dataV/comprehensive-ico5.png
new file mode 100644
index 0000000..1bf4050
--- /dev/null
+++ b/project-web/src/assets/dataV/comprehensive-ico5.png
Binary files differ
diff --git a/project-web/src/assets/dataV/comprehensive-ico6.png b/project-web/src/assets/dataV/comprehensive-ico6.png
new file mode 100644
index 0000000..7ebf333
--- /dev/null
+++ b/project-web/src/assets/dataV/comprehensive-ico6.png
Binary files differ
diff --git a/project-web/src/assets/dataV/fwt.png b/project-web/src/assets/dataV/fwt.png
new file mode 100644
index 0000000..ef5d0c2
--- /dev/null
+++ b/project-web/src/assets/dataV/fwt.png
Binary files differ
diff --git a/project-web/src/assets/dataV/g1.png b/project-web/src/assets/dataV/g1.png
new file mode 100644
index 0000000..a081a41
--- /dev/null
+++ b/project-web/src/assets/dataV/g1.png
Binary files differ
diff --git a/project-web/src/assets/dataV/g2.png b/project-web/src/assets/dataV/g2.png
new file mode 100644
index 0000000..7a5e2d8
--- /dev/null
+++ b/project-web/src/assets/dataV/g2.png
Binary files differ
diff --git a/project-web/src/assets/dataV/g3.png b/project-web/src/assets/dataV/g3.png
new file mode 100644
index 0000000..333db22
--- /dev/null
+++ b/project-web/src/assets/dataV/g3.png
Binary files differ
diff --git a/project-web/src/assets/dataV/gdzs.png b/project-web/src/assets/dataV/gdzs.png
new file mode 100644
index 0000000..8c940aa
--- /dev/null
+++ b/project-web/src/assets/dataV/gdzs.png
Binary files differ
diff --git a/project-web/src/assets/dataV/header.png b/project-web/src/assets/dataV/header.png
new file mode 100644
index 0000000..a641299
--- /dev/null
+++ b/project-web/src/assets/dataV/header.png
Binary files differ
diff --git a/project-web/src/assets/dataV/jxzdgd.png b/project-web/src/assets/dataV/jxzdgd.png
new file mode 100644
index 0000000..25f4809
--- /dev/null
+++ b/project-web/src/assets/dataV/jxzdgd.png
Binary files differ
diff --git a/project-web/src/assets/dataV/kfpjl.png b/project-web/src/assets/dataV/kfpjl.png
new file mode 100644
index 0000000..54ea219
--- /dev/null
+++ b/project-web/src/assets/dataV/kfpjl.png
Binary files differ
diff --git a/project-web/src/assets/dataV/little-box.png b/project-web/src/assets/dataV/little-box.png
new file mode 100644
index 0000000..b7c0a35
--- /dev/null
+++ b/project-web/src/assets/dataV/little-box.png
Binary files differ
diff --git a/project-web/src/assets/dataV/sla.png b/project-web/src/assets/dataV/sla.png
new file mode 100644
index 0000000..fae7243
--- /dev/null
+++ b/project-web/src/assets/dataV/sla.png
Binary files differ
diff --git a/project-web/src/assets/dataV/wjdcl.png b/project-web/src/assets/dataV/wjdcl.png
new file mode 100644
index 0000000..36a14a6
--- /dev/null
+++ b/project-web/src/assets/dataV/wjdcl.png
Binary files differ
diff --git a/project-web/src/assets/dataV/ywtdry.png b/project-web/src/assets/dataV/ywtdry.png
new file mode 100644
index 0000000..093edce
--- /dev/null
+++ b/project-web/src/assets/dataV/ywtdry.png
Binary files differ
diff --git a/project-web/src/assets/dataV/zsk.png b/project-web/src/assets/dataV/zsk.png
new file mode 100644
index 0000000..868efab
--- /dev/null
+++ b/project-web/src/assets/dataV/zsk.png
Binary files differ
diff --git a/project-web/src/assets/iconfont/can.ttf b/project-web/src/assets/iconfont/can.ttf
new file mode 100644
index 0000000..9add37d
--- /dev/null
+++ b/project-web/src/assets/iconfont/can.ttf
Binary files differ
diff --git a/project-web/src/assets/iconfont/can.woff b/project-web/src/assets/iconfont/can.woff
new file mode 100644
index 0000000..ddb90b8
--- /dev/null
+++ b/project-web/src/assets/iconfont/can.woff
Binary files differ
diff --git a/project-web/src/assets/iconfont/can.woff2 b/project-web/src/assets/iconfont/can.woff2
new file mode 100644
index 0000000..c8168f5
--- /dev/null
+++ b/project-web/src/assets/iconfont/can.woff2
Binary files differ
diff --git a/project-web/src/assets/iconfont/iconfont.css b/project-web/src/assets/iconfont/iconfont.css
new file mode 100644
index 0000000..d76c1c0
--- /dev/null
+++ b/project-web/src/assets/iconfont/iconfont.css
@@ -0,0 +1,430 @@
+@font-face {
+  font-family: 'iconfont'; /* Project id 3139466 */
+  src: url('./can.woff2'),
+    url('./can.woff'),
+    url('./can.ttf');
+}
+
+.iconfont {
+  font-family: 'iconfont' !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-drag2:before {
+  content: '\e61e';
+}
+
+.icon-miaosha:before {
+  content: '\e619';
+}
+
+.icon-shipinhao2:before {
+  content: '\e61b';
+}
+
+.icon-youhuiquan:before {
+  content: '\e63c';
+}
+
+.icon-a-dingdanguanli1:before {
+  content: '\e617';
+}
+
+.icon-daihexiao:before {
+  content: '\e618';
+}
+
+.icon-caiwuguanli:before {
+  content: '\e60b';
+}
+
+.icon-yonghuguanli:before {
+  content: '\e60c';
+}
+
+.icon-xitongshezhi:before {
+  content: '\e60d';
+}
+
+.icon-qiandaopeizhi:before {
+  content: '\e60e';
+}
+
+.icon-daituikuan:before {
+  content: '\e60f';
+}
+
+.icon-yihaotong:before {
+  content: '\e610';
+}
+
+.icon-shangpinguanli:before {
+  content: '\e611';
+}
+
+.icon-shanghuguanli:before {
+  content: '\e612';
+}
+
+.icon-daishenheshangpin:before {
+  content: '\e613';
+}
+
+.icon-fenxiaoshezhi:before {
+  content: '\e614';
+}
+
+.icon-zaishoushangpin:before {
+  content: '\e615';
+}
+
+.icon-daifahuo2:before {
+  content: '\e616';
+}
+
+.icon-shipinhao:before {
+  content: '\e60a';
+}
+
+.icon-yingyeshijian2:before {
+  content: '\e801';
+}
+
+.icon-tianjia:before {
+  content: '\e672';
+}
+
+.icon-shoucang3:before {
+  content: '\e79d';
+}
+
+.icon-shouye8:before {
+  content: '\e79e';
+}
+
+.icon-pinzhong:before {
+  content: '\e6a2';
+}
+
+.icon-hanghuo:before {
+  content: '\e6a3';
+}
+
+.icon-zhifa:before {
+  content: '\e6b6';
+}
+
+.icon-dijia:before {
+  content: '\e6b7';
+}
+
+.icon-yuyanqiehuan:before {
+  content: '\e608';
+}
+
+.icon-gouwuche1:before {
+  content: '\e609';
+}
+
+.icon-xuanzhong4:before {
+  content: '\e6af';
+}
+
+.icon-a-bianzu2:before {
+  content: '\e607';
+}
+
+.icon-daifukuan1:before {
+  content: '\e603';
+}
+
+.icon-daifahuo1:before {
+  content: '\e604';
+}
+
+.icon-wancheng:before {
+  content: '\e605';
+}
+
+.icon-daishouhuo1:before {
+  content: '\e606';
+}
+
+.icon-complete:before {
+  content: '\e646';
+}
+
+.icon-gou:before {
+  content: '\e602';
+}
+
+.icon-duoshanghupc-shuomingdanchuang:before {
+  content: '\e79a';
+}
+
+.icon-zizhi:before {
+  content: '\e601';
+}
+
+.icon-baozhang:before {
+  content: '\e6b4';
+}
+
+.icon-xiangxia:before {
+  content: '\e8ca';
+}
+
+.icon-xiangshang:before {
+  content: '\ebbb';
+}
+
+.icon-shaixuan:before {
+  content: '\e651';
+}
+
+.icon-xuanzhong11:before {
+  content: '\e6a5';
+}
+
+.icon-weixuan:before {
+  content: '\e6a6';
+}
+
+.icon-kefu_o:before {
+  content: '\eb63';
+}
+
+.icon-yingyongAPP_o:before {
+  content: '\eb88';
+}
+
+.icon-huobiliu_o:before {
+  content: '\eb9f';
+}
+
+.icon-yizhan_o:before {
+  content: '\ebc6';
+}
+
+.icon-guanzhu:before {
+  content: '\e645';
+}
+
+.icon-shangjiadingdan:before {
+  content: '\e64a';
+}
+
+.icon-jiantou:before {
+  content: '\e600';
+}
+
+.icon-jiazai:before {
+  content: '\e799';
+}
+
+.icon-shouye1:before {
+  content: '\e798';
+}
+
+.icon-wuliu:before {
+  content: '\e797';
+}
+
+.icon-zhuangshixian:before {
+  content: '\e796';
+}
+
+.icon-xihuan1:before {
+  content: '\e794';
+}
+
+.icon-shezhi:before {
+  content: '\e795';
+}
+
+.icon-pingfen:before {
+  content: '\e792';
+}
+
+.icon-pingweifen:before {
+  content: '\e793';
+}
+
+.icon-more:before {
+  content: '\e791';
+}
+
+.icon-yituikuan:before {
+  content: '\e78f';
+}
+
+.icon-tuikuanzhong:before {
+  content: '\e790';
+}
+
+.icon-sousuo2:before {
+  content: '\e78e';
+}
+
+.icon-guanbi:before {
+  content: '\e78d';
+}
+
+.icon-fenlei:before {
+  content: '\e788';
+}
+
+.icon-yuyan:before {
+  content: '\e78c';
+}
+
+.icon-gouwuche:before {
+  content: '\e789';
+}
+
+.icon-xihuan:before {
+  content: '\e78a';
+}
+
+.icon-gerenzhongxin:before {
+  content: '\e78b';
+}
+
+.icon-zhifushibai:before {
+  content: '\e785';
+}
+
+.icon-zhifuchenggong:before {
+  content: '\e786';
+}
+
+.icon-shouji:before {
+  content: '\e784';
+}
+
+.icon-mima:before {
+  content: '\e781';
+}
+
+.icon-youxiang:before {
+  content: '\e782';
+}
+
+.icon-yanzhengma:before {
+  content: '\e783';
+}
+
+.icon-fenxiang:before {
+  content: '\e77f';
+}
+
+.icon-yangshi1:before {
+  content: '\e780';
+}
+
+.icon-gengduo:before {
+  content: '\e776';
+}
+
+.icon-qingkong:before {
+  content: '\e777';
+}
+
+.icon-dingbufanhui:before {
+  content: '\e778';
+}
+
+.icon-xiala:before {
+  content: '\e779';
+}
+
+.icon-kefu:before {
+  content: '\e77a';
+}
+
+.icon-sousuo:before {
+  content: '\e77b';
+}
+
+.icon-paizhao:before {
+  content: '\e77c';
+}
+
+.icon-sousuo1:before {
+  content: '\e77d';
+}
+
+.icon-yangshi2:before {
+  content: '\e77e';
+}
+
+.icon-facebook:before {
+  content: '\e773';
+}
+
+.icon-guge:before {
+  content: '\e774';
+}
+
+.icon-twitter:before {
+  content: '\e775';
+}
+
+.icon-suozi:before {
+  content: '\e772';
+}
+
+.icon-dizhi:before {
+  content: '\e76c';
+}
+
+.icon-a-411ditu:before {
+  content: '\e76d';
+}
+
+.icon-shuoming:before {
+  content: '\e76e';
+}
+
+.icon-shanchu:before {
+  content: '\e76f';
+}
+
+.icon-yonghu:before {
+  content: '\e770';
+}
+
+.icon-bianji:before {
+  content: '\e771';
+}
+
+.icon-daifahuo:before {
+  content: '\e76b';
+}
+
+.icon-daipingjia-2:before {
+  content: '\e767';
+}
+
+.icon-daifukuan:before {
+  content: '\e768';
+}
+
+.icon-shouhou_tuikuan-2:before {
+  content: '\e769';
+}
+
+.icon-daishouhuo:before {
+  content: '\e76a';
+}
+
+.icon-jia:before {
+  content: '\e766';
+}
+
+.icon-jian:before {
+  content: '\e765';
+}
diff --git a/project-web/src/assets/images/40b2.jpeg b/project-web/src/assets/images/40b2.jpeg
new file mode 100644
index 0000000..9890f7b
--- /dev/null
+++ b/project-web/src/assets/images/40b2.jpeg
Binary files differ
diff --git a/project-web/src/assets/images/acttch-icon.png b/project-web/src/assets/images/acttch-icon.png
new file mode 100644
index 0000000..d84097e
--- /dev/null
+++ b/project-web/src/assets/images/acttch-icon.png
Binary files differ
diff --git a/project-web/src/assets/images/app.png b/project-web/src/assets/images/app.png
new file mode 100644
index 0000000..d7eb40d
--- /dev/null
+++ b/project-web/src/assets/images/app.png
Binary files differ
diff --git a/project-web/src/assets/images/avatar-kefu.png b/project-web/src/assets/images/avatar-kefu.png
new file mode 100644
index 0000000..dc25f4d
--- /dev/null
+++ b/project-web/src/assets/images/avatar-kefu.png
Binary files differ
diff --git a/project-web/src/assets/images/cloud-bg.png b/project-web/src/assets/images/cloud-bg.png
new file mode 100644
index 0000000..69f39e4
--- /dev/null
+++ b/project-web/src/assets/images/cloud-bg.png
Binary files differ
diff --git a/project-web/src/assets/images/dataV.png b/project-web/src/assets/images/dataV.png
new file mode 100644
index 0000000..15e9109
--- /dev/null
+++ b/project-web/src/assets/images/dataV.png
Binary files differ
diff --git a/project-web/src/assets/images/doc.png b/project-web/src/assets/images/doc.png
new file mode 100644
index 0000000..1d16e74
--- /dev/null
+++ b/project-web/src/assets/images/doc.png
Binary files differ
diff --git a/project-web/src/assets/images/examine-icon.png b/project-web/src/assets/images/examine-icon.png
new file mode 100644
index 0000000..565aabf
--- /dev/null
+++ b/project-web/src/assets/images/examine-icon.png
Binary files differ
diff --git a/project-web/src/assets/images/exel.png b/project-web/src/assets/images/exel.png
new file mode 100644
index 0000000..ea536fb
--- /dev/null
+++ b/project-web/src/assets/images/exel.png
Binary files differ
diff --git a/project-web/src/assets/images/form-lf.png b/project-web/src/assets/images/form-lf.png
new file mode 100644
index 0000000..dafdf66
--- /dev/null
+++ b/project-web/src/assets/images/form-lf.png
Binary files differ
diff --git a/project-web/src/assets/images/head-one.png b/project-web/src/assets/images/head-one.png
new file mode 100644
index 0000000..72abb07
--- /dev/null
+++ b/project-web/src/assets/images/head-one.png
Binary files differ
diff --git a/project-web/src/assets/images/head-two.png b/project-web/src/assets/images/head-two.png
new file mode 100644
index 0000000..55d14d4
--- /dev/null
+++ b/project-web/src/assets/images/head-two.png
Binary files differ
diff --git a/project-web/src/assets/images/icon-connect.png b/project-web/src/assets/images/icon-connect.png
new file mode 100644
index 0000000..bfd3a24
--- /dev/null
+++ b/project-web/src/assets/images/icon-connect.png
Binary files differ
diff --git a/project-web/src/assets/images/icon-datav.png b/project-web/src/assets/images/icon-datav.png
new file mode 100644
index 0000000..2c7aad6
--- /dev/null
+++ b/project-web/src/assets/images/icon-datav.png
Binary files differ
diff --git a/project-web/src/assets/images/icon-line-up.png b/project-web/src/assets/images/icon-line-up.png
new file mode 100644
index 0000000..da44bf8
--- /dev/null
+++ b/project-web/src/assets/images/icon-line-up.png
Binary files differ
diff --git a/project-web/src/assets/images/icon-notice.png b/project-web/src/assets/images/icon-notice.png
new file mode 100644
index 0000000..dcba1f1
--- /dev/null
+++ b/project-web/src/assets/images/icon-notice.png
Binary files differ
diff --git a/project-web/src/assets/images/icon-phone.png b/project-web/src/assets/images/icon-phone.png
new file mode 100644
index 0000000..17fdab5
--- /dev/null
+++ b/project-web/src/assets/images/icon-phone.png
Binary files differ
diff --git a/project-web/src/assets/images/img.png b/project-web/src/assets/images/img.png
new file mode 100644
index 0000000..285c2ea
--- /dev/null
+++ b/project-web/src/assets/images/img.png
Binary files differ
diff --git a/project-web/src/assets/images/index-icon.png b/project-web/src/assets/images/index-icon.png
new file mode 100644
index 0000000..e4ab947
--- /dev/null
+++ b/project-web/src/assets/images/index-icon.png
Binary files differ
diff --git a/project-web/src/assets/images/index/down.png b/project-web/src/assets/images/index/down.png
new file mode 100644
index 0000000..a90f816
--- /dev/null
+++ b/project-web/src/assets/images/index/down.png
Binary files differ
diff --git a/project-web/src/assets/images/index/dxy.png b/project-web/src/assets/images/index/dxy.png
new file mode 100644
index 0000000..9e3ab55
--- /dev/null
+++ b/project-web/src/assets/images/index/dxy.png
Binary files differ
diff --git a/project-web/src/assets/images/index/fbgd.png b/project-web/src/assets/images/index/fbgd.png
new file mode 100644
index 0000000..a95a643
--- /dev/null
+++ b/project-web/src/assets/images/index/fbgd.png
Binary files differ
diff --git a/project-web/src/assets/images/index/gdc.png b/project-web/src/assets/images/index/gdc.png
new file mode 100644
index 0000000..3f9066f
--- /dev/null
+++ b/project-web/src/assets/images/index/gdc.png
Binary files differ
diff --git a/project-web/src/assets/images/index/jxzgd.png b/project-web/src/assets/images/index/jxzgd.png
new file mode 100644
index 0000000..79949bd
--- /dev/null
+++ b/project-web/src/assets/images/index/jxzgd.png
Binary files differ
diff --git a/project-web/src/assets/images/index/qbgd.png b/project-web/src/assets/images/index/qbgd.png
new file mode 100644
index 0000000..95da117
--- /dev/null
+++ b/project-web/src/assets/images/index/qbgd.png
Binary files differ
diff --git a/project-web/src/assets/images/index/top.png b/project-web/src/assets/images/index/top.png
new file mode 100644
index 0000000..7368085
--- /dev/null
+++ b/project-web/src/assets/images/index/top.png
Binary files differ
diff --git a/project-web/src/assets/images/index/wtc.png b/project-web/src/assets/images/index/wtc.png
new file mode 100644
index 0000000..9a3d211
--- /dev/null
+++ b/project-web/src/assets/images/index/wtc.png
Binary files differ
diff --git a/project-web/src/assets/images/jpg.png b/project-web/src/assets/images/jpg.png
new file mode 100644
index 0000000..b4d35ec
--- /dev/null
+++ b/project-web/src/assets/images/jpg.png
Binary files differ
diff --git a/project-web/src/assets/images/left-nav-bg.png b/project-web/src/assets/images/left-nav-bg.png
new file mode 100644
index 0000000..d1da853
--- /dev/null
+++ b/project-web/src/assets/images/left-nav-bg.png
Binary files differ
diff --git a/project-web/src/assets/images/line-current-icon.png b/project-web/src/assets/images/line-current-icon.png
new file mode 100644
index 0000000..924e889
--- /dev/null
+++ b/project-web/src/assets/images/line-current-icon.png
Binary files differ
diff --git a/project-web/src/assets/images/line-current.png b/project-web/src/assets/images/line-current.png
new file mode 100644
index 0000000..cd4002e
--- /dev/null
+++ b/project-web/src/assets/images/line-current.png
Binary files differ
diff --git a/project-web/src/assets/images/line-nopass.png b/project-web/src/assets/images/line-nopass.png
new file mode 100644
index 0000000..430ebe9
--- /dev/null
+++ b/project-web/src/assets/images/line-nopass.png
Binary files differ
diff --git a/project-web/src/assets/images/line-pass-icon.png b/project-web/src/assets/images/line-pass-icon.png
new file mode 100644
index 0000000..8209fa7
--- /dev/null
+++ b/project-web/src/assets/images/line-pass-icon.png
Binary files differ
diff --git a/project-web/src/assets/images/line-pass.png b/project-web/src/assets/images/line-pass.png
new file mode 100644
index 0000000..8106756
--- /dev/null
+++ b/project-web/src/assets/images/line-pass.png
Binary files differ
diff --git a/project-web/src/assets/images/login-name.png b/project-web/src/assets/images/login-name.png
new file mode 100644
index 0000000..b4b33b2
--- /dev/null
+++ b/project-web/src/assets/images/login-name.png
Binary files differ
diff --git a/project-web/src/assets/images/login_img.png b/project-web/src/assets/images/login_img.png
new file mode 100644
index 0000000..4178bfc
--- /dev/null
+++ b/project-web/src/assets/images/login_img.png
Binary files differ
diff --git a/project-web/src/assets/images/logo.png b/project-web/src/assets/images/logo.png
new file mode 100644
index 0000000..aa8d961
--- /dev/null
+++ b/project-web/src/assets/images/logo.png
Binary files differ
diff --git a/project-web/src/assets/images/map/cancel.png b/project-web/src/assets/images/map/cancel.png
new file mode 100644
index 0000000..4b46b51
--- /dev/null
+++ b/project-web/src/assets/images/map/cancel.png
Binary files differ
diff --git a/project-web/src/assets/images/map/close-total.png b/project-web/src/assets/images/map/close-total.png
new file mode 100644
index 0000000..8792025
--- /dev/null
+++ b/project-web/src/assets/images/map/close-total.png
Binary files differ
diff --git a/project-web/src/assets/images/map/end.png b/project-web/src/assets/images/map/end.png
new file mode 100644
index 0000000..aac56b7
--- /dev/null
+++ b/project-web/src/assets/images/map/end.png
Binary files differ
diff --git a/project-web/src/assets/images/map/icon-gj.png b/project-web/src/assets/images/map/icon-gj.png
new file mode 100644
index 0000000..d10c416
--- /dev/null
+++ b/project-web/src/assets/images/map/icon-gj.png
Binary files differ
diff --git a/project-web/src/assets/images/map/icon-gygz.png b/project-web/src/assets/images/map/icon-gygz.png
new file mode 100644
index 0000000..34d9a28
--- /dev/null
+++ b/project-web/src/assets/images/map/icon-gygz.png
Binary files differ
diff --git a/project-web/src/assets/images/map/icon-gz.png b/project-web/src/assets/images/map/icon-gz.png
new file mode 100644
index 0000000..f24f156
--- /dev/null
+++ b/project-web/src/assets/images/map/icon-gz.png
Binary files differ
diff --git a/project-web/src/assets/images/map/icon-other.png b/project-web/src/assets/images/map/icon-other.png
new file mode 100644
index 0000000..86f4d28
--- /dev/null
+++ b/project-web/src/assets/images/map/icon-other.png
Binary files differ
diff --git a/project-web/src/assets/images/map/icon-qt.png b/project-web/src/assets/images/map/icon-qt.png
new file mode 100644
index 0000000..0f6c8c5
--- /dev/null
+++ b/project-web/src/assets/images/map/icon-qt.png
Binary files differ
diff --git a/project-web/src/assets/images/map/icon-sclzx.png b/project-web/src/assets/images/map/icon-sclzx.png
new file mode 100644
index 0000000..6997602
--- /dev/null
+++ b/project-web/src/assets/images/map/icon-sclzx.png
Binary files differ
diff --git a/project-web/src/assets/images/map/icon-sjzx.png b/project-web/src/assets/images/map/icon-sjzx.png
new file mode 100644
index 0000000..0607222
--- /dev/null
+++ b/project-web/src/assets/images/map/icon-sjzx.png
Binary files differ
diff --git a/project-web/src/assets/images/map/icon-sn.png b/project-web/src/assets/images/map/icon-sn.png
new file mode 100644
index 0000000..a6f7f63
--- /dev/null
+++ b/project-web/src/assets/images/map/icon-sn.png
Binary files differ
diff --git a/project-web/src/assets/images/map/icon-xcpzx.png b/project-web/src/assets/images/map/icon-xcpzx.png
new file mode 100644
index 0000000..a5e263e
--- /dev/null
+++ b/project-web/src/assets/images/map/icon-xcpzx.png
Binary files differ
diff --git a/project-web/src/assets/images/map/icon-xxh.png b/project-web/src/assets/images/map/icon-xxh.png
new file mode 100644
index 0000000..5d0169c
--- /dev/null
+++ b/project-web/src/assets/images/map/icon-xxh.png
Binary files differ
diff --git a/project-web/src/assets/images/map/icon-zhywl.png b/project-web/src/assets/images/map/icon-zhywl.png
new file mode 100644
index 0000000..c1e0917
--- /dev/null
+++ b/project-web/src/assets/images/map/icon-zhywl.png
Binary files differ
diff --git a/project-web/src/assets/images/map/ing.png b/project-web/src/assets/images/map/ing.png
new file mode 100644
index 0000000..2106009
--- /dev/null
+++ b/project-web/src/assets/images/map/ing.png
Binary files differ
diff --git a/project-web/src/assets/images/map/open-total.png b/project-web/src/assets/images/map/open-total.png
new file mode 100644
index 0000000..bc24d0b
--- /dev/null
+++ b/project-web/src/assets/images/map/open-total.png
Binary files differ
diff --git a/project-web/src/assets/images/map/wait.png b/project-web/src/assets/images/map/wait.png
new file mode 100644
index 0000000..5d23e05
--- /dev/null
+++ b/project-web/src/assets/images/map/wait.png
Binary files differ
diff --git a/project-web/src/assets/images/obg-icon.png b/project-web/src/assets/images/obg-icon.png
new file mode 100644
index 0000000..873a673
--- /dev/null
+++ b/project-web/src/assets/images/obg-icon.png
Binary files differ
diff --git a/project-web/src/assets/images/pdf.png b/project-web/src/assets/images/pdf.png
new file mode 100644
index 0000000..130ece4
--- /dev/null
+++ b/project-web/src/assets/images/pdf.png
Binary files differ
diff --git a/project-web/src/assets/images/phone.png b/project-web/src/assets/images/phone.png
new file mode 100644
index 0000000..c810329
--- /dev/null
+++ b/project-web/src/assets/images/phone.png
Binary files differ
diff --git a/project-web/src/assets/images/png.png b/project-web/src/assets/images/png.png
new file mode 100644
index 0000000..b4d35ec
--- /dev/null
+++ b/project-web/src/assets/images/png.png
Binary files differ
diff --git a/project-web/src/assets/images/project/del.png b/project-web/src/assets/images/project/del.png
new file mode 100644
index 0000000..79b0263
--- /dev/null
+++ b/project-web/src/assets/images/project/del.png
Binary files differ
diff --git a/project-web/src/assets/images/project/icon-gj-lv.png b/project-web/src/assets/images/project/icon-gj-lv.png
new file mode 100644
index 0000000..893006e
--- /dev/null
+++ b/project-web/src/assets/images/project/icon-gj-lv.png
Binary files differ
diff --git a/project-web/src/assets/images/project/icon-gygz-lv.png b/project-web/src/assets/images/project/icon-gygz-lv.png
new file mode 100644
index 0000000..7c8e69b
--- /dev/null
+++ b/project-web/src/assets/images/project/icon-gygz-lv.png
Binary files differ
diff --git a/project-web/src/assets/images/project/icon-gz-lv.png b/project-web/src/assets/images/project/icon-gz-lv.png
new file mode 100644
index 0000000..a598446
--- /dev/null
+++ b/project-web/src/assets/images/project/icon-gz-lv.png
Binary files differ
diff --git a/project-web/src/assets/images/project/icon-other-lv.png b/project-web/src/assets/images/project/icon-other-lv.png
new file mode 100644
index 0000000..276897e
--- /dev/null
+++ b/project-web/src/assets/images/project/icon-other-lv.png
Binary files differ
diff --git a/project-web/src/assets/images/project/icon-qt-lv.png b/project-web/src/assets/images/project/icon-qt-lv.png
new file mode 100644
index 0000000..c82d079
--- /dev/null
+++ b/project-web/src/assets/images/project/icon-qt-lv.png
Binary files differ
diff --git a/project-web/src/assets/images/project/icon-return.png b/project-web/src/assets/images/project/icon-return.png
new file mode 100644
index 0000000..baeeb20
--- /dev/null
+++ b/project-web/src/assets/images/project/icon-return.png
Binary files differ
diff --git a/project-web/src/assets/images/project/icon-sclzx-lv.png b/project-web/src/assets/images/project/icon-sclzx-lv.png
new file mode 100644
index 0000000..2f73a29
--- /dev/null
+++ b/project-web/src/assets/images/project/icon-sclzx-lv.png
Binary files differ
diff --git a/project-web/src/assets/images/project/icon-sjzx-lv.png b/project-web/src/assets/images/project/icon-sjzx-lv.png
new file mode 100644
index 0000000..c23e267
--- /dev/null
+++ b/project-web/src/assets/images/project/icon-sjzx-lv.png
Binary files differ
diff --git a/project-web/src/assets/images/project/icon-sn-lv.png b/project-web/src/assets/images/project/icon-sn-lv.png
new file mode 100644
index 0000000..8e14d92
--- /dev/null
+++ b/project-web/src/assets/images/project/icon-sn-lv.png
Binary files differ
diff --git a/project-web/src/assets/images/project/icon-xcpzx-lv.png b/project-web/src/assets/images/project/icon-xcpzx-lv.png
new file mode 100644
index 0000000..a5e263e
--- /dev/null
+++ b/project-web/src/assets/images/project/icon-xcpzx-lv.png
Binary files differ
diff --git a/project-web/src/assets/images/project/icon-xxh-lv.png b/project-web/src/assets/images/project/icon-xxh-lv.png
new file mode 100644
index 0000000..e12a61f
--- /dev/null
+++ b/project-web/src/assets/images/project/icon-xxh-lv.png
Binary files differ
diff --git a/project-web/src/assets/images/project/icon-zhywl-lv.png b/project-web/src/assets/images/project/icon-zhywl-lv.png
new file mode 100644
index 0000000..0148580
--- /dev/null
+++ b/project-web/src/assets/images/project/icon-zhywl-lv.png
Binary files differ
diff --git a/project-web/src/assets/images/project/no-file.png b/project-web/src/assets/images/project/no-file.png
new file mode 100644
index 0000000..9cd99b5
--- /dev/null
+++ b/project-web/src/assets/images/project/no-file.png
Binary files differ
diff --git a/project-web/src/assets/images/project/pdf.png b/project-web/src/assets/images/project/pdf.png
new file mode 100644
index 0000000..d6dde7d
--- /dev/null
+++ b/project-web/src/assets/images/project/pdf.png
Binary files differ
diff --git a/project-web/src/assets/images/project/pic-add.png b/project-web/src/assets/images/project/pic-add.png
new file mode 100644
index 0000000..dc5f7e5
--- /dev/null
+++ b/project-web/src/assets/images/project/pic-add.png
Binary files differ
diff --git a/project-web/src/assets/images/project/ppt.png b/project-web/src/assets/images/project/ppt.png
new file mode 100644
index 0000000..c3dd307
--- /dev/null
+++ b/project-web/src/assets/images/project/ppt.png
Binary files differ
diff --git a/project-web/src/assets/images/project/txt.png b/project-web/src/assets/images/project/txt.png
new file mode 100644
index 0000000..c499137
--- /dev/null
+++ b/project-web/src/assets/images/project/txt.png
Binary files differ
diff --git a/project-web/src/assets/images/project/word.png b/project-web/src/assets/images/project/word.png
new file mode 100644
index 0000000..788dd89
--- /dev/null
+++ b/project-web/src/assets/images/project/word.png
Binary files differ
diff --git a/project-web/src/assets/images/project/xls.png b/project-web/src/assets/images/project/xls.png
new file mode 100644
index 0000000..59d8a43
--- /dev/null
+++ b/project-web/src/assets/images/project/xls.png
Binary files differ
diff --git a/project-web/src/assets/images/staff-female.jpg b/project-web/src/assets/images/staff-female.jpg
new file mode 100644
index 0000000..a419bb8
--- /dev/null
+++ b/project-web/src/assets/images/staff-female.jpg
Binary files differ
diff --git a/project-web/src/assets/images/staff-male.jpg b/project-web/src/assets/images/staff-male.jpg
new file mode 100644
index 0000000..13df560
--- /dev/null
+++ b/project-web/src/assets/images/staff-male.jpg
Binary files differ
diff --git a/project-web/src/assets/images/talk/dataV-1.png b/project-web/src/assets/images/talk/dataV-1.png
new file mode 100644
index 0000000..e8e550f
--- /dev/null
+++ b/project-web/src/assets/images/talk/dataV-1.png
Binary files differ
diff --git a/project-web/src/assets/images/talk/dataV-2.png b/project-web/src/assets/images/talk/dataV-2.png
new file mode 100644
index 0000000..3895870
--- /dev/null
+++ b/project-web/src/assets/images/talk/dataV-2.png
Binary files differ
diff --git a/project-web/src/assets/images/talk/head-kf.png b/project-web/src/assets/images/talk/head-kf.png
new file mode 100644
index 0000000..bf4103e
--- /dev/null
+++ b/project-web/src/assets/images/talk/head-kf.png
Binary files differ
diff --git a/project-web/src/assets/images/talk/head-my.png b/project-web/src/assets/images/talk/head-my.png
new file mode 100644
index 0000000..aa962a0
--- /dev/null
+++ b/project-web/src/assets/images/talk/head-my.png
Binary files differ
diff --git a/project-web/src/assets/images/talk/icon-doc.png b/project-web/src/assets/images/talk/icon-doc.png
new file mode 100644
index 0000000..bfb78e5
--- /dev/null
+++ b/project-web/src/assets/images/talk/icon-doc.png
Binary files differ
diff --git a/project-web/src/assets/images/talk/icon-pdf.png b/project-web/src/assets/images/talk/icon-pdf.png
new file mode 100644
index 0000000..910ad20
--- /dev/null
+++ b/project-web/src/assets/images/talk/icon-pdf.png
Binary files differ
diff --git a/project-web/src/assets/images/talk/icon-ppt.png b/project-web/src/assets/images/talk/icon-ppt.png
new file mode 100644
index 0000000..26424a5
--- /dev/null
+++ b/project-web/src/assets/images/talk/icon-ppt.png
Binary files differ
diff --git a/project-web/src/assets/images/talk/icon-unknown.png b/project-web/src/assets/images/talk/icon-unknown.png
new file mode 100644
index 0000000..02d7f6e
--- /dev/null
+++ b/project-web/src/assets/images/talk/icon-unknown.png
Binary files differ
diff --git a/project-web/src/assets/images/talk/icon-xls.png b/project-web/src/assets/images/talk/icon-xls.png
new file mode 100644
index 0000000..3407076
--- /dev/null
+++ b/project-web/src/assets/images/talk/icon-xls.png
Binary files differ
diff --git a/project-web/src/assets/images/text.png b/project-web/src/assets/images/text.png
new file mode 100644
index 0000000..55079da
--- /dev/null
+++ b/project-web/src/assets/images/text.png
Binary files differ
diff --git a/project-web/src/assets/images/top-bg.png b/project-web/src/assets/images/top-bg.png
new file mode 100644
index 0000000..88b300a
--- /dev/null
+++ b/project-web/src/assets/images/top-bg.png
Binary files differ
diff --git a/project-web/src/assets/images/top-title.png b/project-web/src/assets/images/top-title.png
new file mode 100644
index 0000000..96527a2
--- /dev/null
+++ b/project-web/src/assets/images/top-title.png
Binary files differ
diff --git a/project-web/src/assets/images/visualization/bg1.png b/project-web/src/assets/images/visualization/bg1.png
new file mode 100644
index 0000000..b241948
--- /dev/null
+++ b/project-web/src/assets/images/visualization/bg1.png
Binary files differ
diff --git a/project-web/src/assets/images/visualization/bg2.png b/project-web/src/assets/images/visualization/bg2.png
new file mode 100644
index 0000000..71d749e
--- /dev/null
+++ b/project-web/src/assets/images/visualization/bg2.png
Binary files differ
diff --git a/project-web/src/assets/images/visualization/bg3.png b/project-web/src/assets/images/visualization/bg3.png
new file mode 100644
index 0000000..d7303c7
--- /dev/null
+++ b/project-web/src/assets/images/visualization/bg3.png
Binary files differ
diff --git a/project-web/src/assets/images/visualization/bg4.png b/project-web/src/assets/images/visualization/bg4.png
new file mode 100644
index 0000000..497946f
--- /dev/null
+++ b/project-web/src/assets/images/visualization/bg4.png
Binary files differ
diff --git a/project-web/src/assets/images/visualization/bg5.png b/project-web/src/assets/images/visualization/bg5.png
new file mode 100644
index 0000000..8472402
--- /dev/null
+++ b/project-web/src/assets/images/visualization/bg5.png
Binary files differ
diff --git a/project-web/src/assets/images/visualization/bg6.png b/project-web/src/assets/images/visualization/bg6.png
new file mode 100644
index 0000000..000a469
--- /dev/null
+++ b/project-web/src/assets/images/visualization/bg6.png
Binary files differ
diff --git a/project-web/src/assets/images/visualization/col.png b/project-web/src/assets/images/visualization/col.png
new file mode 100644
index 0000000..69699ef
--- /dev/null
+++ b/project-web/src/assets/images/visualization/col.png
Binary files differ
diff --git a/project-web/src/assets/images/visualization/left.png b/project-web/src/assets/images/visualization/left.png
new file mode 100644
index 0000000..a7f12e3
--- /dev/null
+++ b/project-web/src/assets/images/visualization/left.png
Binary files differ
diff --git a/project-web/src/assets/images/visualization/line.png b/project-web/src/assets/images/visualization/line.png
new file mode 100644
index 0000000..b6e0785
--- /dev/null
+++ b/project-web/src/assets/images/visualization/line.png
Binary files differ
diff --git a/project-web/src/assets/images/visualization/right.png b/project-web/src/assets/images/visualization/right.png
new file mode 100644
index 0000000..79030a8
--- /dev/null
+++ b/project-web/src/assets/images/visualization/right.png
Binary files differ
diff --git a/project-web/src/assets/images/visualization/v-bg.png b/project-web/src/assets/images/visualization/v-bg.png
new file mode 100644
index 0000000..4853a48
--- /dev/null
+++ b/project-web/src/assets/images/visualization/v-bg.png
Binary files differ
diff --git a/project-web/src/assets/images/visualization/v-top-bg.png b/project-web/src/assets/images/visualization/v-top-bg.png
new file mode 100644
index 0000000..d527ec0
--- /dev/null
+++ b/project-web/src/assets/images/visualization/v-top-bg.png
Binary files differ
diff --git a/project-web/src/assets/images/visualization/v-top-title.png b/project-web/src/assets/images/visualization/v-top-title.png
new file mode 100644
index 0000000..2019d9e
--- /dev/null
+++ b/project-web/src/assets/images/visualization/v-top-title.png
Binary files differ
diff --git a/project-web/src/assets/images/word.png b/project-web/src/assets/images/word.png
new file mode 100644
index 0000000..1d16e74
--- /dev/null
+++ b/project-web/src/assets/images/word.png
Binary files differ
diff --git a/project-web/src/assets/images/xls.png b/project-web/src/assets/images/xls.png
new file mode 100644
index 0000000..ea536fb
--- /dev/null
+++ b/project-web/src/assets/images/xls.png
Binary files differ
diff --git a/project-web/src/assets/images/zip.png b/project-web/src/assets/images/zip.png
new file mode 100644
index 0000000..ce90851
--- /dev/null
+++ b/project-web/src/assets/images/zip.png
Binary files differ
diff --git a/project-web/src/assets/imgs/app.png b/project-web/src/assets/imgs/app.png
new file mode 100644
index 0000000..8c0138c
--- /dev/null
+++ b/project-web/src/assets/imgs/app.png
Binary files differ
diff --git a/project-web/src/assets/imgs/dark.svg b/project-web/src/assets/imgs/dark.svg
new file mode 100644
index 0000000..f646bd7
--- /dev/null
+++ b/project-web/src/assets/imgs/dark.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="52px" height="45px" viewBox="0 0 52 45" version="1.1" 
+    xmlns="http://www.w3.org/2000/svg" 
+    xmlns:xlink="http://www.w3.org/1999/xlink">
+    <defs>
+        <filter x="-9.4%" y="-6.2%" width="118.8%" height="122.5%" filterUnits="objectBoundingBox" id="filter-1">
+            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
+            <feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
+            <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.15 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
+            <feMerge>
+                <feMergeNode in="shadowMatrixOuter1"></feMergeNode>
+                <feMergeNode in="SourceGraphic"></feMergeNode>
+            </feMerge>
+        </filter>
+        <rect id="path-2" x="0" y="0" width="48" height="40" rx="4"></rect>
+        <filter x="-4.2%" y="-2.5%" width="108.3%" height="110.0%" filterUnits="objectBoundingBox" id="filter-4">
+            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
+            <feGaussianBlur stdDeviation="0.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
+            <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.1 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
+        </filter>
+    </defs>
+    <g id="閰嶇疆闈㈡澘" width="48" height="40" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="setting-copy-2" width="48" height="40" transform="translate(-1190.000000, -136.000000)">
+            <g id="Group-8" width="48" height="40" transform="translate(1167.000000, 0.000000)">
+                <g id="Group-5-Copy-5" filter="url(#filter-1)" transform="translate(25.000000, 137.000000)">
+                    <mask id="mask-3" fill="white">
+                        <use xlink:href="#path-2"></use>
+                    </mask>
+                    <g id="Rectangle-18">
+                        <use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-2"></use>
+                        <use fill="#F0F2F5" fill-rule="evenodd" xlink:href="#path-2"></use>
+                    </g>
+                    <rect id="Rectangle-11" fill="#FFFFFF" mask="url(#mask-3)" x="0" y="0" width="48" height="10"></rect>
+                    <rect id="Rectangle-18" fill="#303648" mask="url(#mask-3)" x="0" y="0" width="16" height="40"></rect>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>
\ No newline at end of file
diff --git a/project-web/src/assets/imgs/default.jpg b/project-web/src/assets/imgs/default.jpg
new file mode 100644
index 0000000..aa0237b
--- /dev/null
+++ b/project-web/src/assets/imgs/default.jpg
Binary files differ
diff --git a/project-web/src/assets/imgs/default_avatar.png b/project-web/src/assets/imgs/default_avatar.png
new file mode 100644
index 0000000..9198d1a
--- /dev/null
+++ b/project-web/src/assets/imgs/default_avatar.png
Binary files differ
diff --git a/project-web/src/assets/imgs/expressi.jpg b/project-web/src/assets/imgs/expressi.jpg
new file mode 100644
index 0000000..d3fbe46
--- /dev/null
+++ b/project-web/src/assets/imgs/expressi.jpg
Binary files differ
diff --git a/project-web/src/assets/imgs/fahuo.png b/project-web/src/assets/imgs/fahuo.png
new file mode 100644
index 0000000..0d3e2dc
--- /dev/null
+++ b/project-web/src/assets/imgs/fahuo.png
Binary files differ
diff --git a/project-web/src/assets/imgs/fukuan.png b/project-web/src/assets/imgs/fukuan.png
new file mode 100644
index 0000000..e7ac27e
--- /dev/null
+++ b/project-web/src/assets/imgs/fukuan.png
Binary files differ
diff --git a/project-web/src/assets/imgs/haowu.png b/project-web/src/assets/imgs/haowu.png
new file mode 100644
index 0000000..10c55a9
--- /dev/null
+++ b/project-web/src/assets/imgs/haowu.png
Binary files differ
diff --git a/project-web/src/assets/imgs/head.gif b/project-web/src/assets/imgs/head.gif
new file mode 100644
index 0000000..e33fb4a
--- /dev/null
+++ b/project-web/src/assets/imgs/head.gif
Binary files differ
diff --git a/project-web/src/assets/imgs/index_logo.png b/project-web/src/assets/imgs/index_logo.png
new file mode 100644
index 0000000..9023cc3
--- /dev/null
+++ b/project-web/src/assets/imgs/index_logo.png
Binary files differ
diff --git a/project-web/src/assets/imgs/kefuImg.jpg b/project-web/src/assets/imgs/kefuImg.jpg
new file mode 100644
index 0000000..e609d03
--- /dev/null
+++ b/project-web/src/assets/imgs/kefuImg.jpg
Binary files differ
diff --git a/project-web/src/assets/imgs/laber.png b/project-web/src/assets/imgs/laber.png
new file mode 100644
index 0000000..bda12a7
--- /dev/null
+++ b/project-web/src/assets/imgs/laber.png
Binary files differ
diff --git a/project-web/src/assets/imgs/light.svg b/project-web/src/assets/imgs/light.svg
new file mode 100644
index 0000000..4ca4d3e
--- /dev/null
+++ b/project-web/src/assets/imgs/light.svg
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="48px" height="40px" viewBox="0 0 48 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>light</title>
+    <defs>
+        <rect id="path-1" x="0" y="0" width="48" height="40" rx="4"></rect>
+        <rect id="path-3" x="0" y="0" width="48" height="40" rx="4"></rect>
+    </defs>
+    <g id="鍚庡彴" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="light">
+            <g id="Rectangle-18">
+                <g id="path-2-link" fill="#000000" fill-rule="nonzero">
+                    <rect id="path-2" x="0" y="0" width="48" height="40" rx="4"></rect>
+                </g>
+                <g id="path-2-link" fill="#F0F2F5">
+                    <rect id="path-2" x="0" y="0" width="48" height="40" rx="4"></rect>
+                </g>
+            </g>
+            <g id="Rectangle-11-Clipped">
+                <mask id="mask-2" fill="white">
+                    <use xlink:href="#path-1"></use>
+                </mask>
+                <g id="path-2"></g>
+                <rect id="Rectangle-11" fill="#FFFFFF" fill-rule="nonzero" mask="url(#mask-2)" x="0" y="0" width="48" height="10"></rect>
+            </g>
+            <g id="Rectangle-18-Clipped">
+                <mask id="mask-4" fill="white">
+                    <use xlink:href="#path-3"></use>
+                </mask>
+                <g id="path-2"></g>
+                <rect id="Rectangle-18" fill="#2B68C9" fill-rule="nonzero" mask="url(#mask-4)" x="0" y="0" width="16" height="40"></rect>
+            </g>
+        </g>
+    </g>
+</svg>
\ No newline at end of file
diff --git a/project-web/src/assets/imgs/line.jpg b/project-web/src/assets/imgs/line.jpg
new file mode 100644
index 0000000..1640f55
--- /dev/null
+++ b/project-web/src/assets/imgs/line.jpg
Binary files differ
diff --git a/project-web/src/assets/imgs/live-logo.gif b/project-web/src/assets/imgs/live-logo.gif
new file mode 100644
index 0000000..1dfef3a
--- /dev/null
+++ b/project-web/src/assets/imgs/live-logo.gif
Binary files differ
diff --git a/project-web/src/assets/imgs/login-bg.png b/project-web/src/assets/imgs/login-bg.png
new file mode 100644
index 0000000..f4b4444
--- /dev/null
+++ b/project-web/src/assets/imgs/login-bg.png
Binary files differ
diff --git a/project-web/src/assets/imgs/login-name.png b/project-web/src/assets/imgs/login-name.png
new file mode 100644
index 0000000..2fe9a27
--- /dev/null
+++ b/project-web/src/assets/imgs/login-name.png
Binary files differ
diff --git a/project-web/src/assets/imgs/logo.png b/project-web/src/assets/imgs/logo.png
new file mode 100644
index 0000000..b06c554
--- /dev/null
+++ b/project-web/src/assets/imgs/logo.png
Binary files differ
diff --git a/project-web/src/assets/imgs/mobilefoot.png b/project-web/src/assets/imgs/mobilefoot.png
new file mode 100644
index 0000000..4a89d4b
--- /dev/null
+++ b/project-web/src/assets/imgs/mobilefoot.png
Binary files differ
diff --git a/project-web/src/assets/imgs/mobilehead.png b/project-web/src/assets/imgs/mobilehead.png
new file mode 100644
index 0000000..248cfb7
--- /dev/null
+++ b/project-web/src/assets/imgs/mobilehead.png
Binary files differ
diff --git a/project-web/src/assets/imgs/moren.jpg b/project-web/src/assets/imgs/moren.jpg
new file mode 100644
index 0000000..98725f1
--- /dev/null
+++ b/project-web/src/assets/imgs/moren.jpg
Binary files differ
diff --git a/project-web/src/assets/imgs/moren.png b/project-web/src/assets/imgs/moren.png
new file mode 100644
index 0000000..02d2c8d
--- /dev/null
+++ b/project-web/src/assets/imgs/moren.png
Binary files differ
diff --git a/project-web/src/assets/imgs/new_header1.png b/project-web/src/assets/imgs/new_header1.png
new file mode 100644
index 0000000..04fa8f8
--- /dev/null
+++ b/project-web/src/assets/imgs/new_header1.png
Binary files differ
diff --git a/project-web/src/assets/imgs/no.png b/project-web/src/assets/imgs/no.png
new file mode 100644
index 0000000..e4ade86
--- /dev/null
+++ b/project-web/src/assets/imgs/no.png
Binary files differ
diff --git a/project-web/src/assets/imgs/orderIndex.png b/project-web/src/assets/imgs/orderIndex.png
new file mode 100644
index 0000000..74d6ffb
--- /dev/null
+++ b/project-web/src/assets/imgs/orderIndex.png
Binary files differ
diff --git a/project-web/src/assets/imgs/pc.png b/project-web/src/assets/imgs/pc.png
new file mode 100644
index 0000000..7055ca1
--- /dev/null
+++ b/project-web/src/assets/imgs/pc.png
Binary files differ
diff --git a/project-web/src/assets/imgs/phoneBox.png b/project-web/src/assets/imgs/phoneBox.png
new file mode 100644
index 0000000..41e0d27
--- /dev/null
+++ b/project-web/src/assets/imgs/phoneBox.png
Binary files differ
diff --git a/project-web/src/assets/imgs/pingjia.png b/project-web/src/assets/imgs/pingjia.png
new file mode 100644
index 0000000..cecfdcf
--- /dev/null
+++ b/project-web/src/assets/imgs/pingjia.png
Binary files differ
diff --git a/project-web/src/assets/imgs/pricetitle.jpg b/project-web/src/assets/imgs/pricetitle.jpg
new file mode 100644
index 0000000..1451364
--- /dev/null
+++ b/project-web/src/assets/imgs/pricetitle.jpg
Binary files differ
diff --git a/project-web/src/assets/imgs/routine.png b/project-web/src/assets/imgs/routine.png
new file mode 100644
index 0000000..83379ed
--- /dev/null
+++ b/project-web/src/assets/imgs/routine.png
Binary files differ
diff --git a/project-web/src/assets/imgs/scan.gif b/project-web/src/assets/imgs/scan.gif
new file mode 100644
index 0000000..95ed7fa
--- /dev/null
+++ b/project-web/src/assets/imgs/scan.gif
Binary files differ
diff --git a/project-web/src/assets/imgs/shengxian.png b/project-web/src/assets/imgs/shengxian.png
new file mode 100644
index 0000000..57fd8da
--- /dev/null
+++ b/project-web/src/assets/imgs/shengxian.png
Binary files differ
diff --git a/project-web/src/assets/imgs/shouhuo.png b/project-web/src/assets/imgs/shouhuo.png
new file mode 100644
index 0000000..5be7e9a
--- /dev/null
+++ b/project-web/src/assets/imgs/shouhuo.png
Binary files differ
diff --git a/project-web/src/assets/imgs/tabBar/cart.png b/project-web/src/assets/imgs/tabBar/cart.png
new file mode 100644
index 0000000..b55ee31
--- /dev/null
+++ b/project-web/src/assets/imgs/tabBar/cart.png
Binary files differ
diff --git a/project-web/src/assets/imgs/tabBar/cartd.png b/project-web/src/assets/imgs/tabBar/cartd.png
new file mode 100644
index 0000000..4a0ca41
--- /dev/null
+++ b/project-web/src/assets/imgs/tabBar/cartd.png
Binary files differ
diff --git a/project-web/src/assets/imgs/tabBar/cate.png b/project-web/src/assets/imgs/tabBar/cate.png
new file mode 100644
index 0000000..a25cf93
--- /dev/null
+++ b/project-web/src/assets/imgs/tabBar/cate.png
Binary files differ
diff --git a/project-web/src/assets/imgs/tabBar/cated.png b/project-web/src/assets/imgs/tabBar/cated.png
new file mode 100644
index 0000000..76aa0d2
--- /dev/null
+++ b/project-web/src/assets/imgs/tabBar/cated.png
Binary files differ
diff --git a/project-web/src/assets/imgs/tabBar/index.png b/project-web/src/assets/imgs/tabBar/index.png
new file mode 100644
index 0000000..c2d7fae
--- /dev/null
+++ b/project-web/src/assets/imgs/tabBar/index.png
Binary files differ
diff --git a/project-web/src/assets/imgs/tabBar/indexd.png b/project-web/src/assets/imgs/tabBar/indexd.png
new file mode 100644
index 0000000..c6bd228
--- /dev/null
+++ b/project-web/src/assets/imgs/tabBar/indexd.png
Binary files differ
diff --git a/project-web/src/assets/imgs/tabBar/user.png b/project-web/src/assets/imgs/tabBar/user.png
new file mode 100644
index 0000000..26d7fbe
--- /dev/null
+++ b/project-web/src/assets/imgs/tabBar/user.png
Binary files differ
diff --git a/project-web/src/assets/imgs/tabBar/userd.png b/project-web/src/assets/imgs/tabBar/userd.png
new file mode 100644
index 0000000..f3304d7
--- /dev/null
+++ b/project-web/src/assets/imgs/tabBar/userd.png
Binary files differ
diff --git a/project-web/src/assets/imgs/tuikuan.png b/project-web/src/assets/imgs/tuikuan.png
new file mode 100644
index 0000000..1811c61
--- /dev/null
+++ b/project-web/src/assets/imgs/tuikuan.png
Binary files differ
diff --git a/project-web/src/assets/imgs/user_bg.png b/project-web/src/assets/imgs/user_bg.png
new file mode 100644
index 0000000..2e2d706
--- /dev/null
+++ b/project-web/src/assets/imgs/user_bg.png
Binary files differ
diff --git a/project-web/src/assets/imgs/wechat_h5.png b/project-web/src/assets/imgs/wechat_h5.png
new file mode 100644
index 0000000..3fcc224
--- /dev/null
+++ b/project-web/src/assets/imgs/wechat_h5.png
Binary files differ
diff --git a/project-web/src/assets/imgs/weixin.png b/project-web/src/assets/imgs/weixin.png
new file mode 100644
index 0000000..c4dcfe1
--- /dev/null
+++ b/project-web/src/assets/imgs/weixin.png
Binary files differ
diff --git a/project-web/src/assets/imgs/writeOffBg.jpg b/project-web/src/assets/imgs/writeOffBg.jpg
new file mode 100644
index 0000000..935de84
--- /dev/null
+++ b/project-web/src/assets/imgs/writeOffBg.jpg
Binary files differ
diff --git a/project-web/src/assets/imgs/wutu.png b/project-web/src/assets/imgs/wutu.png
new file mode 100644
index 0000000..42c67aa
--- /dev/null
+++ b/project-web/src/assets/imgs/wutu.png
Binary files differ
diff --git a/project-web/src/assets/imgs/youxuan.png b/project-web/src/assets/imgs/youxuan.png
new file mode 100644
index 0000000..01ad375
--- /dev/null
+++ b/project-web/src/assets/imgs/youxuan.png
Binary files differ
diff --git a/project-web/src/assets/js/canvas-nest.min.js b/project-web/src/assets/js/canvas-nest.min.js
new file mode 100644
index 0000000..62dca45
--- /dev/null
+++ b/project-web/src/assets/js/canvas-nest.min.js
@@ -0,0 +1,113 @@
+// JavaScript Document
+!(function () {
+  function o(w, v, i) {
+    return w.getAttribute(v) || i;
+  }
+
+  function j(i) {
+    return document.getElementsByTagName(i);
+  }
+
+  function l() {
+    var i = j('script'),
+      w = i.length,
+      v = i[w - 1];
+    return {
+      l: w,
+      z: o(v, 'zIndex', -2),
+      o: o(v, 'opacity', 0.8),
+      c: o(v, 'color', '255,255,255'),
+      n: o(v, 'count', 240),
+    };
+  }
+
+  function k() {
+    (r = u.width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth),
+      (n = u.height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight);
+  }
+
+  function b() {
+    delay = delay + 1;
+    if (delay < 5) {
+      m(b);
+    } else {
+      delay = 0;
+      e.clearRect(0, 0, r, n);
+      var w = [f].concat(t);
+      var x, v, A, B, z, y;
+      t.forEach(function (i) {
+        (i.x += i.xa),
+          (i.y += i.ya),
+          (i.xa *= i.x > r || i.x < 0 ? -1 : 1),
+          (i.ya *= i.y > n || i.y < 0 ? -1 : 1),
+          e.fillRect(i.x - 0.5, i.y - 0.5, 2, 2);
+        e.fillStyle = '#FFFFFF';
+        for (v = 0; v < w.length; v++) {
+          x = w[v];
+          if (i !== x && null !== x.x && null !== x.y) {
+            (B = i.x - x.x), (z = i.y - x.y), (y = B * B + z * z);
+            y < x.max &&
+              (x === f && y >= x.max / 2 && ((i.x -= 0.03 * B), (i.y -= 0.03 * z)),
+              (A = (x.max - y) / x.max),
+              e.beginPath(),
+              (e.lineWidth = A / 2),
+              (e.strokeStyle = 'rgba(' + s.c + ',' + (A + 0.2) + ')'),
+              e.moveTo(i.x, i.y),
+              e.lineTo(x.x, x.y),
+              e.stroke());
+          }
+        }
+        w.splice(w.indexOf(i), 1);
+      }),
+        m(b);
+    }
+  }
+  var u = document.createElement('canvas'),
+    s = l(),
+    c = 'c_n' + s.l,
+    e = u.getContext('2d'),
+    delay = 0,
+    r,
+    n,
+    m =
+      window.requestAnimationFrame ||
+      window.webkitRequestAnimationFrame ||
+      window.mozRequestAnimationFrame ||
+      window.oRequestAnimationFrame ||
+      window.msRequestAnimationFrame ||
+      function (i) {
+        window.setTimeout(i, 1000 / 45);
+      },
+    a = Math.random,
+    f = {
+      x: null,
+      y: null,
+      max: 20000,
+    };
+  u.id = c;
+  u.style.cssText = 'position:fixed;top:0;left:0;z-index:' + s.z + ';opacity:' + s.o;
+  j('body')[0].appendChild(u);
+  k(), (window.onresize = k);
+  (window.onmousemove = function (i) {
+    (i = i || window.event), (f.x = i.clientX), (f.y = i.clientY);
+  }),
+    (window.onmouseout = function () {
+      (f.x = null), (f.y = null);
+    });
+  for (var t = [], p = 0; s.n > p; p++) {
+    var h = a() * r,
+      g = a() * n,
+      q = 2 * a() - 1,
+      d = 2 * a() - 1;
+    t.push({
+      x: h,
+      y: g,
+      xa: q,
+      ya: d,
+      max: 6000,
+    });
+  }
+  setTimeout(function () {
+    b();
+  }, 100);
+})();
diff --git a/project-web/src/assets/js/emo.js b/project-web/src/assets/js/emo.js
new file mode 100644
index 0000000..337b0a7
--- /dev/null
+++ b/project-web/src/assets/js/emo.js
@@ -0,0 +1,488 @@
+const emoList = [
+	[{
+			url: '100.gif',
+			alt: '[寰瑧]'
+		},
+		{
+			url: '101.gif',
+			alt: '[浼ゅ績]'
+		},
+		{
+			url: '102.gif',
+			alt: '[缇庡コ]'
+		},
+		{
+			url: '103.gif',
+			alt: '[鍙戝憜]'
+		},
+		{
+			url: '104.gif',
+			alt: '[澧ㄩ暅]'
+		},
+		{
+			url: '105.gif',
+			alt: '[鍝璢'
+		},
+		{
+			url: '106.gif',
+			alt: '[缇瀅'
+		},
+		{
+			url: '107.gif',
+			alt: '[鍝慮'
+		},
+		{
+			url: '108.gif',
+			alt: '[鐫'
+		},
+		{
+			url: '109.gif',
+			alt: '[鍝璢'
+		},
+		{
+			url: '110.gif',
+			alt: '[鍥'
+		},
+		{
+			url: '111.gif',
+			alt: '[鎬抅'
+		},
+		{
+			url: '112.gif',
+			alt: '[璋冪毊]'
+		},
+		{
+			url: '113.gif',
+			alt: '[绗慮'
+		},
+		{
+			url: '114.gif',
+			alt: '[鎯婅]'
+		},
+		{
+			url: '115.gif',
+			alt: '[闅捐繃]'
+		},
+		{
+			url: '116.gif',
+			alt: '[閰穄'
+		},
+		{
+			url: '117.gif',
+			alt: '[姹梋'
+		},
+		{
+			url: '118.gif',
+			alt: '[鎶撶媯]'
+		},
+		{
+			url: '119.gif',
+			alt: '[鍚怾'
+		},
+		{
+			url: '120.gif',
+			alt: '[绗慮'
+		},
+		{
+			url: '121.gif',
+			alt: '[蹇箰]'
+		},
+		{
+			url: '122.gif',
+			alt: '[濂嘳'
+		},
+		{
+			url: '123.gif',
+			alt: '[鍌瞉'
+		}
+	],
+	[{
+			url: '124.gif',
+			alt: '[楗縘'
+		},
+		{
+			url: '125.gif',
+			alt: '[绱痌'
+		},
+		{
+			url: '126.gif',
+			alt: '[鍚揮'
+		},
+		{
+			url: '127.gif',
+			alt: '[姹梋'
+		},
+		{
+			url: '128.gif',
+			alt: '[楂樺叴]'
+		},
+		{
+			url: '129.gif',
+			alt: '[闂瞉'
+		},
+		{
+			url: '130.gif',
+			alt: '[鍔姏]'
+		},
+		{
+			url: '131.gif',
+			alt: '[楠俔'
+		},
+		{
+			url: '132.gif',
+			alt: '[鐤戦棶]'
+		},
+		{
+			url: '133.gif',
+			alt: '[绉樺瘑]'
+		},
+		{
+			url: '134.gif',
+			alt: '[涔盷'
+		},
+		{
+			url: '135.gif',
+			alt: '[鐤痌'
+		},
+		{
+			url: '136.gif',
+			alt: '[鍝�]'
+		},
+		{
+			url: '137.gif',
+			alt: '[楝糫'
+		},
+		{
+			url: '138.gif',
+			alt: '[鎵撳嚮]'
+		},
+		{
+			url: '139.gif',
+			alt: '[bye]'
+		},
+		{
+			url: '140.gif',
+			alt: '[姹梋'
+		},
+		{
+			url: '141.gif',
+			alt: '[鎶燷'
+		},
+		{
+			url: '142.gif',
+			alt: '[榧撴帉]'
+		},
+		{
+			url: '143.gif',
+			alt: '[绯熺硶]'
+		},
+		{
+			url: '144.gif',
+			alt: '[鎭舵悶]'
+		},
+		{
+			url: '145.gif',
+			alt: '[浠�涔圿'
+		},
+		{
+			url: '146.gif',
+			alt: '[浠�涔圿'
+		},
+		{
+			url: '147.gif',
+			alt: '[绱痌'
+		}
+	],
+	[{
+			url: '148.gif',
+			alt: '[鐪媇'
+		},
+		{
+			url: '149.gif',
+			alt: '[闅捐繃]'
+		},
+		{
+			url: '150.gif',
+			alt: '[闅捐繃]'
+		},
+		{
+			url: '151.gif',
+			alt: '[鍧廬'
+		},
+		{
+			url: '152.gif',
+			alt: '[浜瞉'
+		},
+		{
+			url: '153.gif',
+			alt: '[鍚揮'
+		},
+		{
+			url: '154.gif',
+			alt: '[鍙�淽'
+		},
+		{
+			url: '155.gif',
+			alt: '[鍒�]'
+		},
+		{
+			url: '156.gif',
+			alt: '[姘存灉]'
+		},
+		{
+			url: '157.gif',
+			alt: '[閰抅'
+		},
+		{
+			url: '158.gif',
+			alt: '[绡悆]'
+		},
+		{
+			url: '159.gif',
+			alt: '[涔掍箵]'
+		},
+		{
+			url: '160.gif',
+			alt: '[鍜栧暋]'
+		},
+		{
+			url: '161.gif',
+			alt: '[缇庨]'
+		},
+		{
+			url: '162.gif',
+			alt: '[鍔ㄧ墿]'
+		},
+		{
+			url: '163.gif',
+			alt: '[椴滆姳]'
+		},
+		{
+			url: '164.gif',
+			alt: '[鏋痌'
+		},
+		{
+			url: '165.gif',
+			alt: '[鍞嘳'
+		},
+		{
+			url: '166.gif',
+			alt: '[鐖盷'
+		},
+		{
+			url: '167.gif',
+			alt: '[鍒嗘墜]'
+		},
+		{
+			url: '168.gif',
+			alt: '[鐢熸棩]'
+		},
+		{
+			url: '169.gif',
+			alt: '[鐢礭'
+		},
+		{
+			url: '170.gif',
+			alt: '[鐐稿脊]'
+		},
+		{
+			url: '171.gif',
+			alt: '[鍒�瀛怾'
+		}
+	],
+	[{
+			url: '172.gif',
+			alt: '[瓒崇悆]'
+		},
+		{
+			url: '173.gif',
+			alt: '[鐡㈣櫕]'
+		},
+		{
+			url: '174.gif',
+			alt: '[缈擼'
+		},
+		{
+			url: '175.gif',
+			alt: '[鏈堜寒]'
+		},
+		{
+			url: '176.gif',
+			alt: '[澶槼]'
+		},
+		{
+			url: '177.gif',
+			alt: '[绀肩墿]'
+		},
+		{
+			url: '178.gif',
+			alt: '[鎶辨姳]'
+		},
+		{
+			url: '179.gif',
+			alt: '[鎷囨寚]'
+		},
+		{
+			url: '180.gif',
+			alt: '[璐綆]'
+		},
+		{
+			url: '181.gif',
+			alt: '[鎻℃墜]'
+		},
+		{
+			url: '182.gif',
+			alt: '[鍓垁鎵媇'
+		},
+		{
+			url: '183.gif',
+			alt: '[鎶辨嫵]'
+		},
+		{
+			url: '184.gif',
+			alt: '[鍕惧紩]'
+		},
+		{
+			url: '185.gif',
+			alt: '[鎷冲ご]'
+		},
+		{
+			url: '186.gif',
+			alt: '[灏忔媷鎸嘳'
+		},
+		{
+			url: '187.gif',
+			alt: '[鎷囨寚鍏玗'
+		},
+		{
+			url: '188.gif',
+			alt: '[椋熸寚]'
+		},
+		{
+			url: '189.gif',
+			alt: '[ok]'
+		},
+		{
+			url: '190.gif',
+			alt: '[鎯呬荆]'
+		},
+		{
+			url: '191.gif',
+			alt: '[鐖卞績]'
+		},
+		{
+			url: '192.gif',
+			alt: '[韫﹀搾]'
+		},
+		{
+			url: '193.gif',
+			alt: '[棰ゆ姈]'
+		},
+		{
+			url: '194.gif',
+			alt: '[鎬勬皵]'
+		},
+		{
+			url: '195.gif',
+			alt: '[璺宠垶]'
+		}
+	],
+	[{
+			url: '196.gif',
+			alt: '[鍙戝憜]'
+		},
+		{
+			url: '197.gif',
+			alt: '[鑳岀潃]'
+		},
+		{
+			url: '198.gif',
+			alt: '[浼告墜]'
+		},
+		{
+			url: '199.gif',
+			alt: '[鑰嶅竻]'
+		},
+		{
+			url: '200.png',
+			alt: '[寰瑧]'
+		},
+		{
+			url: '201.png',
+			alt: '[鐢熺梾]'
+		},
+		{
+			url: '202.png',
+			alt: '[鍝常]'
+		},
+		{
+			url: '203.png',
+			alt: '[鍚愯垖]'
+		},
+		{
+			url: '204.png',
+			alt: '[杩风硦]'
+		},
+		{
+			url: '205.png',
+			alt: '[鐬溂]'
+		},
+		{
+			url: '206.png',
+			alt: '[鎭愭�朷'
+		},
+		{
+			url: '207.png',
+			alt: '[蹇ф剚]'
+		},
+		{
+			url: '208.png',
+			alt: '[鐪ㄧ湁]'
+		},
+		{
+			url: '209.png',
+			alt: '[闂溂]'
+		},
+		{
+			url: '210.png',
+			alt: '[閯欒]'
+		},
+		{
+			url: '211.png',
+			alt: '[闃存殫]'
+		},
+		{
+			url: '212.png',
+			alt: '[灏忛]'
+		},
+		{
+			url: '213.png',
+			alt: '[绀肩墿]'
+		},
+		{
+			url: '214.png',
+			alt: '[鎷滀經]'
+		},
+		{
+			url: '215.png',
+			alt: '[鍔涢噺]'
+		},
+		{
+			url: '216.png',
+			alt: '[閲戦挶]'
+		},
+		{
+			url: '217.png',
+			alt: '[铔嬬硶]'
+		},
+		{
+			url: '218.png',
+			alt: '[褰╁甫]'
+		},
+		{
+			url: '219.png',
+			alt: '[绀肩墿]'
+		}
+	]
+]
+export default emoList
diff --git a/project-web/src/assets/js/media_750.js b/project-web/src/assets/js/media_750.js
new file mode 100644
index 0000000..84c7949
--- /dev/null
+++ b/project-web/src/assets/js/media_750.js
@@ -0,0 +1,61 @@
+(function flexible(window, document) {
+  var docEl = document.documentElement || document.body;
+  var dpr = window.devicePixelRatio || 1;
+
+  // adjust body font size
+  function setBodyFontSize() {
+    if (document.body) {
+    } else {
+      document.addEventListener('DOMContentLoaded', setBodyFontSize);
+    }
+  }
+  setBodyFontSize();
+
+  // set 1rem = viewWidth / 10
+  function setRemUnit() {
+    var rem = docEl.clientWidth / 7.5;
+    docEl.style.fontSize = rem + 'px';
+  }
+
+  setRemUnit();
+
+  // reset rem unit on page resize
+  window.addEventListener('resize', setRemUnit);
+  window.addEventListener('pageshow', function (e) {
+    if (e.persisted) {
+      setRemUnit();
+    }
+  });
+
+  // detect 0.5px supports
+  if (dpr >= 2) {
+    var fakeBody = document.createElement('body');
+    var testElement = document.createElement('div');
+    testElement.style.border = '.5px solid transparent';
+    fakeBody.appendChild(testElement);
+    docEl.appendChild(fakeBody);
+    if (testElement.offsetHeight === 1) {
+      docEl.classList.add('hairlines');
+    }
+    docEl.removeChild(fakeBody);
+  }
+
+  if (typeof WeixinJSBridge == 'object' && typeof WeixinJSBridge.invoke == 'function') {
+    handleFontSize();
+  } else {
+    if (document.addEventListener) {
+      document.addEventListener('WeixinJSBridgeReady', handleFontSize, false);
+    } else if (document.attachEvent) {
+      document.attachEvent('WeixinJSBridgeReady', handleFontSize);
+      document.attachEvent('onWeixinJSBridgeReady', handleFontSize);
+    }
+  }
+  function handleFontSize() {
+    // 璁剧疆缃戦〉瀛椾綋涓洪粯璁ゅぇ灏�
+    WeixinJSBridge.invoke('setFontSizeCallback', { fontSize: 0 });
+    // 閲嶅啓璁剧疆缃戦〉瀛椾綋澶у皬鐨勪簨浠�
+    WeixinJSBridge.on('menu:setfont', function () {
+      WeixinJSBridge.invoke('setFontSizeCallback', { fontSize: 0 });
+    });
+  }
+})(window, document);
diff --git a/project-web/src/assets/logo/logo.png b/project-web/src/assets/logo/logo.png
new file mode 100644
index 0000000..8c0138c
--- /dev/null
+++ b/project-web/src/assets/logo/logo.png
Binary files differ
diff --git a/project-web/src/assets/theme/goodsList1.png b/project-web/src/assets/theme/goodsList1.png
new file mode 100644
index 0000000..8cf7082
--- /dev/null
+++ b/project-web/src/assets/theme/goodsList1.png
Binary files differ
diff --git a/project-web/src/assets/theme/goodsList2.png b/project-web/src/assets/theme/goodsList2.png
new file mode 100644
index 0000000..c9965fb
--- /dev/null
+++ b/project-web/src/assets/theme/goodsList2.png
Binary files differ
diff --git a/project-web/src/assets/theme/goodsList3.png b/project-web/src/assets/theme/goodsList3.png
new file mode 100644
index 0000000..7a373a4
--- /dev/null
+++ b/project-web/src/assets/theme/goodsList3.png
Binary files differ
diff --git a/project-web/src/assets/theme/theme1.png b/project-web/src/assets/theme/theme1.png
new file mode 100644
index 0000000..e8c3c88
--- /dev/null
+++ b/project-web/src/assets/theme/theme1.png
Binary files differ
diff --git a/project-web/src/assets/theme/theme2.png b/project-web/src/assets/theme/theme2.png
new file mode 100644
index 0000000..fb523bb
--- /dev/null
+++ b/project-web/src/assets/theme/theme2.png
Binary files differ
diff --git a/project-web/src/assets/theme/theme3.png b/project-web/src/assets/theme/theme3.png
new file mode 100644
index 0000000..898a5b9
--- /dev/null
+++ b/project-web/src/assets/theme/theme3.png
Binary files differ
diff --git a/project-web/src/assets/theme/theme4.png b/project-web/src/assets/theme/theme4.png
new file mode 100644
index 0000000..0ed72de
--- /dev/null
+++ b/project-web/src/assets/theme/theme4.png
Binary files differ
diff --git a/project-web/src/assets/theme/theme5.png b/project-web/src/assets/theme/theme5.png
new file mode 100644
index 0000000..3fba5cf
--- /dev/null
+++ b/project-web/src/assets/theme/theme5.png
Binary files differ
diff --git a/project-web/src/components/Breadcrumb/index.vue b/project-web/src/components/Breadcrumb/index.vue
new file mode 100644
index 0000000..a9ec539
--- /dev/null
+++ b/project-web/src/components/Breadcrumb/index.vue
@@ -0,0 +1,93 @@
+<template>
+  <el-breadcrumb class="app-breadcrumb" separator="/">
+    <transition-group name="breadcrumb">
+      <el-breadcrumb-item v-for="(item, index) in levelList" :key="item.path">
+        <span v-if="item.redirect === 'noRedirect' || index == levelList.length - 1" class="no-redirect">{{
+          item.meta.title
+        }}</span>
+        <a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
+      </el-breadcrumb-item>
+    </transition-group>
+  </el-breadcrumb>
+</template>
+
+<script>
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+import pathToRegexp from 'path-to-regexp';
+
+export default {
+  data() {
+    return {
+      levelList: null,
+    };
+  },
+  watch: {
+    $route(route) {
+      // if you go to the redirect page, do not update the breadcrumbs
+      if (route.path.startsWith('/redirect/')) {
+        return;
+      }
+      this.getBreadcrumb();
+    },
+  },
+  created() {
+    this.getBreadcrumb();
+  },
+  methods: {
+    getBreadcrumb() {
+      // only show routes with meta.title
+      let matched = this.$route.matched.filter((item) => item.meta && item.meta.title);
+      const first = matched[0];
+
+      if (!this.isDashboard(first)) {
+        matched = [{ path: '/dashboard', meta: { title: '涓婚〉' } }].concat(matched);
+      }
+
+      this.levelList = matched.filter((item) => item.meta && item.meta.title && item.meta.breadcrumb !== false);
+    },
+    isDashboard(route) {
+      const name = route && route.name;
+      if (!name) {
+        return false;
+      }
+      return name.trim().toLocaleLowerCase() === 'Dashboard'.toLocaleLowerCase();
+    },
+    pathCompile(path) {
+      // To solve this problem https://github.com/PanJiaChen/vue-element-admin/issues/561
+      const { params } = this.$route;
+      var toPath = pathToRegexp.compile(path);
+      return toPath(params);
+    },
+    handleLink(item) {
+      const { redirect, path } = item;
+      if (redirect) {
+        this.$router.push(redirect);
+        return;
+      }
+      this.$router.push(this.pathCompile(path));
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.app-breadcrumb.el-breadcrumb {
+  display: inline-block;
+  font-size: 14px;
+  line-height: 50px;
+  margin-left: 8px;
+
+  .no-redirect {
+    color: #97a8be;
+    cursor: text;
+  }
+}
+</style>
diff --git a/project-web/src/components/Hamburger/index.vue b/project-web/src/components/Hamburger/index.vue
new file mode 100644
index 0000000..2465c28
--- /dev/null
+++ b/project-web/src/components/Hamburger/index.vue
@@ -0,0 +1,57 @@
+<template>
+  <div style="padding: 0 15px" @click="toggleClick">
+    <svg
+      :class="{ 'is-active': isActive }"
+      class="hamburger"
+      viewBox="0 0 1024 1024"
+      xmlns="http://www.w3.org/2000/svg"
+      width="64"
+      height="64"
+      color="#fff"
+    >
+      <path
+        d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z"
+      />
+    </svg>
+  </div>
+</template>
+
+<script>
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+export default {
+  name: 'Hamburger',
+  props: {
+    isActive: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  methods: {
+    toggleClick() {
+      this.$emit('toggleClick');
+    },
+  },
+};
+</script>
+
+<style scoped>
+.hamburger {
+  display: inline-block;
+  vertical-align: middle;
+  width: 20px;
+  height: 20px;
+  color: #fff;
+}
+
+.hamburger.is-active {
+  transform: rotate(180deg);
+}
+</style>
diff --git a/project-web/src/components/HeaderSearch/index.vue b/project-web/src/components/HeaderSearch/index.vue
new file mode 100644
index 0000000..9ac6577
--- /dev/null
+++ b/project-web/src/components/HeaderSearch/index.vue
@@ -0,0 +1,187 @@
+<template>
+  <div :class="{ show: show }" class="header-search">
+    <i class="iconfont iconios-search" style="font-size: 20px" @click.stop="click"></i>
+    <el-select
+      ref="headerSearchSelect"
+      v-model="search"
+      :remote-method="querySearch"
+      filterable
+      default-first-option
+      remote
+      placeholder="鎼滅储鑿滃崟"
+      class="header-search-select"
+      @change="change"
+    >
+      <el-option v-for="item in options" :key="item.url" :value="item" :label="item.name.join(' > ')" />
+    </el-select>
+  </div>
+</template>
+
+<script>
+import Fuse from 'fuse.js';
+import path from 'path';
+import { mapGetters } from 'vuex';
+export default {
+  name: 'HeaderSearch',
+  data() {
+    return {
+      search: '',
+      options: [],
+      searchPool: [],
+      show: false,
+      fuse: undefined,
+    };
+  },
+  computed: {
+    ...mapGetters(['permission_routes']),
+    // routes() {
+    //   return this.$store.getters.permission_routes
+    // }
+  },
+  watch: {
+    routes(n) {
+      this.searchPool = this.generateRoutes(this.permission_routes);
+    },
+    searchPool(list) {
+      this.initFuse(list);
+    },
+    show(value) {
+      if (value) {
+        document.body.addEventListener('click', this.close);
+      } else {
+        document.body.removeEventListener('click', this.close);
+      }
+    },
+  },
+  mounted() {
+    // this.searchPool = this.generateRoutes(this.permission_routes);
+  },
+  methods: {
+    click() {
+      this.show = !this.show;
+      if (this.show) {
+        this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.focus();
+      }
+    },
+    close() {
+      this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.blur();
+      this.options = [];
+      this.show = false;
+    },
+    change(val) {
+      this.$router.push(val.path);
+      this.search = '';
+      this.options = [];
+      this.$nextTick(() => {
+        this.show = false;
+      });
+    },
+    initFuse(list) {
+      this.fuse = new Fuse(list, {
+        shouldSort: true,
+        threshold: 0.4,
+        location: 0,
+        distance: 100,
+        maxPatternLength: 32,
+        minMatchCharLength: 1,
+        keys: [
+          {
+            name: 'name',
+            weight: 0.7,
+          },
+          {
+            name: 'url',
+            weight: 0.3,
+          },
+        ],
+      });
+    },
+    // Filter out the routes that can be displayed in the sidebar
+    // And generate the internationalized title
+    generateRoutes(routes, basePath = '/', prefixTitle = []) {
+      let res = [];
+      for (const router of routes) {
+        // console.log("...........");
+        // console.log(router);
+        // skip hidden router
+        if (router.hidden) {
+          continue;
+        }
+
+        const data = {
+          path: path.resolve(basePath, router.url),
+          name: [...prefixTitle],
+          children: router.child || [],
+        };
+
+        if (router.name) {
+          data.name = [...data.name, router.name];
+
+          if (router.redirect !== 'noRedirect') {
+            // only push the routes with title
+            // special case: need to exclude parent router without redirect
+            res.push(data);
+          }
+        }
+
+        // recursive child routes
+        if (router.child) {
+          const tempRoutes = this.generateRoutes(router.child, data.url, data.name);
+          if (tempRoutes.length >= 1) {
+            res = [...res, ...tempRoutes];
+          }
+        }
+      }
+      return res;
+    },
+    querySearch(query) {
+      if (query !== '') {
+        this.options = this.fuse.search(query);
+      } else {
+        this.options = [];
+      }
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.header-search {
+  font-size: 0 !important;
+  display: inline-flex !important;
+  cursor: pointer;
+  .search-icon {
+    cursor: pointer;
+    font-size: 18px;
+    vertical-align: middle;
+  }
+
+  .header-search-select {
+    font-size: 18px;
+    transition: width 0.2s;
+    width: 0;
+    overflow: hidden;
+    background: transparent;
+    border-radius: 0;
+    display: inline-block;
+    /*vertical-align: middle;*/
+    line-height: 50px;
+    ::v-deep .el-input__inner {
+      border-radius: 0;
+      border: 0;
+      padding-left: 0;
+      padding-right: 0;
+      box-shadow: none !important;
+      /*border-bottom: 1px solid #d9d9d9;*/
+      vertical-align: middle;
+    }
+  }
+
+  &.show {
+    .header-search-select {
+      width: 210px;
+      margin-left: 10px;
+    }
+  }
+}
+</style>
diff --git a/project-web/src/components/Screenfull/index.vue b/project-web/src/components/Screenfull/index.vue
new file mode 100644
index 0000000..48246ec
--- /dev/null
+++ b/project-web/src/components/Screenfull/index.vue
@@ -0,0 +1,69 @@
+<template>
+  <div>
+    <i class="iconfont iconios-qr-scanner" style="font-size: 20px" @click="click"></i>
+  </div>
+</template>
+
+<script>
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+import screenfull from 'screenfull';
+
+export default {
+  name: 'Screenfull',
+  data() {
+    return {
+      isFullscreen: false,
+    };
+  },
+  mounted() {
+    this.init();
+  },
+  beforeDestroy() {
+    this.destroy();
+  },
+  methods: {
+    click() {
+      if (!screenfull.enabled) {
+        this.$message({
+          message: 'you browser can not work',
+          type: 'warning',
+        });
+        return false;
+      }
+      screenfull.toggle();
+    },
+    change() {
+      this.isFullscreen = screenfull.isFullscreen;
+    },
+    init() {
+      if (screenfull.enabled) {
+        screenfull.on('change', this.change);
+      }
+    },
+    destroy() {
+      if (screenfull.enabled) {
+        screenfull.off('change', this.change);
+      }
+    },
+  },
+};
+</script>
+
+<style scoped>
+.screenfull-svg {
+  display: inline-block;
+  cursor: pointer;
+  fill: #5a5e66;
+  width: 20px;
+  height: 20px;
+  vertical-align: 10px;
+}
+</style>
diff --git a/project-web/src/components/SvgIcon/index.vue b/project-web/src/components/SvgIcon/index.vue
new file mode 100644
index 0000000..a8e75b7
--- /dev/null
+++ b/project-web/src/components/SvgIcon/index.vue
@@ -0,0 +1,71 @@
+<template>
+  <div v-if="isExternal" :style="styleExternalIcon" class="svg-external-icon svg-icon" v-on="$listeners" />
+  <svg v-else :class="svgClass" aria-hidden="true" v-on="$listeners">
+    <use :xlink:href="iconName" />
+  </svg>
+</template>
+
+<script>
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+// doc: https://panjiachen.github.io/vue-element-admin-site/feature/component/svg-icon.html#usage
+import { isExternal } from '@/utils/validate';
+
+export default {
+  name: 'SvgIcon',
+  props: {
+    iconClass: {
+      type: String,
+      required: true,
+    },
+    className: {
+      type: String,
+      default: '',
+    },
+  },
+  computed: {
+    isExternal() {
+      return isExternal(this.iconClass);
+    },
+    iconName() {
+      return `#icon-${this.iconClass}`;
+    },
+    svgClass() {
+      if (this.className) {
+        return 'svg-icon ' + this.className;
+      } else {
+        return 'svg-icon';
+      }
+    },
+    styleExternalIcon() {
+      return {
+        mask: `url(${this.iconClass}) no-repeat 50% 50%`,
+        '-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%`,
+      };
+    },
+  },
+};
+</script>
+
+<style scoped>
+.svg-icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
+}
+
+.svg-external-icon {
+  background-color: currentColor;
+  mask-size: cover !important;
+  display: inline-block;
+}
+</style>
diff --git a/project-web/src/components/ThemePicker/index.vue b/project-web/src/components/ThemePicker/index.vue
new file mode 100644
index 0000000..1180787
--- /dev/null
+++ b/project-web/src/components/ThemePicker/index.vue
@@ -0,0 +1,183 @@
+<template>
+  <el-color-picker
+    v-model="theme"
+    :predefine="['#409EFF', '#1890ff', '#304156', '#212121', '#11a983', '#13c2c2', '#6959CD', '#f5222d']"
+    class="theme-picker"
+    popper-class="theme-picker-dropdown"
+  />
+</template>
+
+<script>
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+const version = require('element-ui/package.json').version; // element-ui version from node_modules
+const ORIGINAL_THEME = '#409EFF'; // default color
+
+export default {
+  data() {
+    return {
+      chalk: '', // content of theme-chalk css
+      theme: '',
+    };
+  },
+  computed: {
+    defaultTheme() {
+      return this.$store.state.settings.theme;
+    },
+  },
+  watch: {
+    defaultTheme: {
+      handler: function (val, oldVal) {
+        this.theme = val;
+      },
+      immediate: true,
+    },
+    async theme(val) {
+      const oldVal = this.chalk ? this.theme : ORIGINAL_THEME;
+      if (typeof val !== 'string') return;
+      const themeCluster = this.getThemeCluster(val.replace('#', ''));
+      const originalCluster = this.getThemeCluster(oldVal.replace('#', ''));
+
+      const $message = this.$message({
+        message: '  Compiling the theme',
+        customClass: 'theme-message',
+        type: 'success',
+        duration: 0,
+        iconClass: 'el-icon-loading',
+      });
+
+      const getHandler = (variable, id) => {
+        return () => {
+          const originalCluster = this.getThemeCluster(ORIGINAL_THEME.replace('#', ''));
+          const newStyle = this.updateStyle(this[variable], originalCluster, themeCluster);
+
+          let styleTag = document.getElementById(id);
+          if (!styleTag) {
+            styleTag = document.createElement('style');
+            styleTag.setAttribute('id', id);
+            document.head.appendChild(styleTag);
+          }
+          styleTag.innerText = newStyle;
+        };
+      };
+
+      if (!this.chalk) {
+        const url = `https://unpkg.com/element-ui@${version}/lib/theme-chalk/index.css`;
+        await this.getCSSString(url, 'chalk');
+      }
+
+      const chalkHandler = getHandler('chalk', 'chalk-style');
+
+      chalkHandler();
+
+      const styles = [].slice.call(document.querySelectorAll('style')).filter((style) => {
+        const text = style.innerText;
+        return new RegExp(oldVal, 'i').test(text) && !/Chalk Variables/.test(text);
+      });
+      styles.forEach((style) => {
+        const { innerText } = style;
+        if (typeof innerText !== 'string') return;
+        style.innerText = this.updateStyle(innerText, originalCluster, themeCluster);
+      });
+
+      this.$emit('change', val);
+
+      $message.close();
+    },
+  },
+
+  methods: {
+    updateStyle(style, oldCluster, newCluster) {
+      let newStyle = style;
+      oldCluster.forEach((color, index) => {
+        newStyle = newStyle.replace(new RegExp(color, 'ig'), newCluster[index]);
+      });
+      return newStyle;
+    },
+
+    getCSSString(url, variable) {
+      return new Promise((resolve) => {
+        const xhr = new XMLHttpRequest();
+        xhr.onreadystatechange = () => {
+          if (xhr.readyState === 4 && xhr.status === 200) {
+            this[variable] = xhr.responseText.replace(/@font-face{[^}]+}/, '');
+            resolve();
+          }
+        };
+        xhr.open('GET', url);
+        xhr.send();
+      });
+    },
+
+    getThemeCluster(theme) {
+      const tintColor = (color, tint) => {
+        let red = parseInt(color.slice(0, 2), 16);
+        let green = parseInt(color.slice(2, 4), 16);
+        let blue = parseInt(color.slice(4, 6), 16);
+
+        if (tint === 0) {
+          // when primary color is in its rgb space
+          return [red, green, blue].join(',');
+        } else {
+          red += Math.round(tint * (255 - red));
+          green += Math.round(tint * (255 - green));
+          blue += Math.round(tint * (255 - blue));
+
+          red = red.toString(16);
+          green = green.toString(16);
+          blue = blue.toString(16);
+
+          return `#${red}${green}${blue}`;
+        }
+      };
+
+      const shadeColor = (color, shade) => {
+        let red = parseInt(color.slice(0, 2), 16);
+        let green = parseInt(color.slice(2, 4), 16);
+        let blue = parseInt(color.slice(4, 6), 16);
+
+        red = Math.round((1 - shade) * red);
+        green = Math.round((1 - shade) * green);
+        blue = Math.round((1 - shade) * blue);
+
+        red = red.toString(16);
+        green = green.toString(16);
+        blue = blue.toString(16);
+
+        return `#${red}${green}${blue}`;
+      };
+
+      const clusters = [theme];
+      for (let i = 0; i <= 9; i++) {
+        clusters.push(tintColor(theme, Number((i / 10).toFixed(2))));
+      }
+      clusters.push(shadeColor(theme, 0.1));
+      return clusters;
+    },
+  },
+};
+</script>
+
+<style>
+.theme-message,
+.theme-picker-dropdown {
+  z-index: 99999 !important;
+}
+
+.theme-picker .el-color-picker__trigger {
+  height: 26px !important;
+  width: 26px !important;
+  padding: 2px;
+}
+
+.theme-picker-dropdown .el-color-dropdown__link-btn {
+  display: none;
+}
+</style>
diff --git a/project-web/src/components/Tinymce/components/EditorImage.vue b/project-web/src/components/Tinymce/components/EditorImage.vue
new file mode 100644
index 0000000..dd47cfc
--- /dev/null
+++ b/project-web/src/components/Tinymce/components/EditorImage.vue
@@ -0,0 +1,58 @@
+<template>
+  <div class="upload-container">
+    <el-button
+      :style="{ background: color, borderColor: color }"
+      icon="el-icon-upload"
+      size="mini"
+      type="primary"
+      @click="modalPicTap('2')"
+    >
+      涓婁紶鍥剧墖</el-button
+    >
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'EditorSlideUpload',
+  props: {
+    color: {
+      type: String,
+      default: '#1890ff',
+    },
+  },
+  data() {
+    return {
+      dialogVisible: false,
+      listObj: {},
+      fileList: [],
+    };
+  },
+  methods: {
+    modalPicTap(tit) {
+      const _this = this;
+      this.$modalUpload(
+        function (img) {
+          let arr = [];
+          if (img.length > 10) return this.$message.warning('鏈�澶氶�夋嫨10寮犲浘鐗囷紒');
+          img.map((item) => {
+            arr.push(item.sattDir);
+          });
+          _this.$emit('successCBK', arr);
+        },
+        tit,
+        'content',
+      );
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.editor-slide-upload {
+  margin-bottom: 20px;
+  ::v-deep .el-upload--picture-card {
+    width: 100%;
+  }
+}
+</style>
diff --git a/project-web/src/components/Tinymce/dynamicLoadScript.js b/project-web/src/components/Tinymce/dynamicLoadScript.js
new file mode 100644
index 0000000..e5fb26c
--- /dev/null
+++ b/project-web/src/components/Tinymce/dynamicLoadScript.js
@@ -0,0 +1,59 @@
+let callbacks = [];
+
+function loadedTinymce() {
+  // to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2144
+  // check is successfully downloaded script
+  return window.tinymce;
+}
+
+const dynamicLoadScript = (src, callback) => {
+  const existingScript = document.getElementById(src);
+  const cb = callback || function () {};
+
+  if (!existingScript) {
+    const script = document.createElement('script');
+    script.src = src; // src url for the third-party library being loaded.
+    script.id = src;
+    document.body.appendChild(script);
+    callbacks.push(cb);
+    const onEnd = 'onload' in script ? stdOnEnd : ieOnEnd;
+    onEnd(script);
+  }
+
+  if (existingScript && cb) {
+    if (loadedTinymce()) {
+      cb(null, existingScript);
+    } else {
+      callbacks.push(cb);
+    }
+  }
+
+  function stdOnEnd(script) {
+    script.onload = function () {
+      // this.onload = null here is necessary
+      // because even IE9 works not like others
+      this.onerror = this.onload = null;
+      for (const cb of callbacks) {
+        cb(null, script);
+      }
+      callbacks = null;
+    };
+    script.onerror = function () {
+      this.onerror = this.onload = null;
+      cb(new Error('Failed to load ' + src), script);
+    };
+  }
+
+  function ieOnEnd(script) {
+    script.onreadystatechange = function () {
+      if (this.readyState !== 'complete' && this.readyState !== 'loaded') return;
+      this.onreadystatechange = null;
+      for (const cb of callbacks) {
+        cb(null, script); // there is no way to catch loading errors in IE8
+      }
+      callbacks = null;
+    };
+  }
+};
+
+export default dynamicLoadScript;
diff --git a/project-web/src/components/Tinymce/index.vue b/project-web/src/components/Tinymce/index.vue
new file mode 100644
index 0000000..b7a8cb0
--- /dev/null
+++ b/project-web/src/components/Tinymce/index.vue
@@ -0,0 +1,279 @@
+<template>
+  <div :class="{ fullscreen: fullscreen }" class="tinymce-container editor-container">
+    <textarea :id="tinymceId" class="tinymce-textarea"/>
+    <div class="editor-custom-btn-container">
+      <!--      <editorImage color="#1890ff" class="editor-upload-btn" @successCBK="imageSuccessCBK" />-->
+    </div>
+  </div>
+</template>
+
+<script>
+// import editorImage from './components/EditorImage';
+import plugins from './plugins';
+import toolbar from './toolbar';
+import {getDownUrl, getUploadUrl, upLoadFile} from '@/utils/base'
+// import config from '@'
+export default {
+  name: 'Tinymce',
+  // components: { editorImage },
+  props: {
+    id: {
+      type: String,
+      default: function () {
+        return 'vue-tinymce-' + +new Date() + ((Math.random() * 1000).toFixed(0) + '');
+      },
+    },
+    value: {
+      type: String,
+      default: '',
+    },
+    toolbar: {
+      type: Array,
+      required: false,
+      default() {
+        return [];
+      },
+    },
+    // 椤堕儴閰嶇疆灞炴��  鍒嗗埆鏄� 缂栬緫 鏂囨。 琛ㄦ牸 鎻掑叆 鏍煎紡 濯掍綋
+    menubar: {
+      type: String,
+      default: '', // edit  file table insert view format
+    },
+    height: {
+      type: Number,
+      required: false,
+      default: 300,
+    },
+  },
+  data() {
+    return {
+      hasChange: false,
+      hasInit: false,
+      tinymceId: this.id,
+      fullscreen: false,
+      languageTypeList: {
+        en: 'en',
+        zh: 'zh_CN',
+      },
+    };
+  },
+  computed: {
+    language() {
+      // return this.languageTypeList[this.$store.getters.language]
+      return this.languageTypeList['zh'];
+    },
+  },
+  watch: {
+    value(val) {
+      if (!this.hasChange && this.hasInit) {
+        this.$nextTick(() => window.tinymce.get(this.tinymceId).setContent(val || ''));
+      }
+    },
+    language() {
+      this.destroyTinymce();
+      this.$nextTick(() => this.initTinymce());
+    },
+  },
+  mounted() {
+    this.initTinymce();
+  },
+  activated() {
+    this.initTinymce();
+  },
+  deactivated() {
+    this.destroyTinymce();
+  },
+  destroyed() {
+    this.destroyTinymce();
+  },
+  methods: {
+    initTinymce() {
+      const _this = this;
+      window.tinymce.init({
+        branding: false,
+        language: this.language,
+        selector: `#${this.tinymceId}`,
+        height: this.height,
+        body_class: 'panel-body ',
+        object_resizing: false,
+        toolbar: this.toolbar.length > 0 ? this.toolbar : toolbar,
+        menubar: this.menubar,
+        fontsize_formats: '10px 11px 12px 13px 14px 15px 16px 18px 20px 22px 24px 26px 28px 30px 32px 34px 36px',
+        fontsize_input_default_unit: "px",
+        plugins: plugins,
+        file_picker_types: 'image media',
+        content_style: "img {max-width:100%;height:auto}",
+        paste_data_images: true, // 榛樿鏄痜alse鐨勶紝璁板緱瑕佹敼涓簍rue鎵嶈兘绮樿创
+        // 鎴浘  绮樿创鐨勫浘鐗�  闇�瑕佽蛋涓婁紶鏂规硶涓嶇劧灏辨槸涓枃浠舵祦   锛堣鏂规硶宸ュ叿鏍忛噷鐨勫浘鐗囦笂浼� 鏄袱涓柟娉曘�� 鍒嗗紑鍐欙紝姝ゆ柟娉曚负绮樿创鍥剧墖鏃朵娇鐢級
+        urlconverter_callback: function (url, node, on_save, name) {
+          if (node === 'img' && url.startsWith('blob:') || url.startsWith('data:')) {
+            console.log('urlConverter:', url, 'node', node, on_save, name)
+            tinymce.activeEditor && tinymce.activeEditor.uploadImages()
+          }
+          return url;
+        },
+        images_upload_handler: (blobInfo, success, failure) => {
+          const xhr = new XMLHttpRequest()
+          xhr.withCredentials = false
+          xhr.open('POST', getUploadUrl())
+          const formData = new FormData()
+          formData.append('multipartFile', blobInfo.blob())
+          xhr.onload = function (e) {
+            if (xhr.status != 200) {
+              failure('HTTP Error: ' + xhr.status)
+              return
+            }
+            const json = JSON.parse(this.responseText)
+            if (!json || typeof json.data[0].url != 'string') {
+              failure('Invalid JSON: ' + xhr.responseText)
+              return
+            }
+            success(getDownUrl() + json.data[0].url)
+          }
+          xhr.send(formData)
+        },
+        file_picker_callback: function (cb, value, meta) {
+          //褰撶偣鍑籱edia鍥炬爣涓婁紶鏃�,鍒ゆ柇meta.filetype == 'media'鏈夊繀瑕侊紝鍥犱负file_picker_callback鏄痬edia(濯掍綋)銆乮mage(鍥剧墖)銆乫ile(鏂囦欢)鐨勫叡鍚屽叆鍙�
+          if (meta.filetype == 'media') {
+            //鍒涘缓涓�涓殣钘忕殑type=file鐨勬枃浠堕�夋嫨input
+            let input = document.createElement('input');
+            input.setAttribute('type', 'file');
+            input.onchange = function () {
+              let file = this.files[0]; //鍙�夊彇绗竴涓枃浠躲�傚鏋滆閫夊彇鍏ㄩ儴锛屽悗闈㈡敞鎰忓仛淇敼
+              let formData;
+              formData = new FormData();
+              formData.append('multipartFile', file);
+              upLoadFile(formData).then(res => {
+                //鎺ュ彛杩斿洖鐨勬枃浠朵繚瀛樺湴鍧�
+                let mediaLocation = getDownUrl() + res[0].url;
+                cb(mediaLocation, {
+                  title: file.filename
+                });
+              }).catch(err => {
+                console.log('鍑虹幇鏈煡闂锛屽埛鏂伴〉闈紝鎴栬�呰仈绯荤▼搴忓憳: ' + err);
+              })
+            }
+            //瑙﹀彂鐐瑰嚮
+            input.click();
+          }
+        },
+        end_container_on_empty_block: true,
+        powerpaste_word_import: 'clean',
+        code_dialog_height: 450,
+        code_dialog_width: 1000,
+        advlist_bullet_styles: 'square',
+        advlist_number_styles: 'default',
+        default_link_target: '_blank',
+        link_title: false,
+        convert_urls: false, //闃叉璺緞琚浆鍖栦负鐩稿璺緞
+        nonbreaking_force_tab: true, // inserting nonbreaking space &nbsp; need Nonbreaking Space Plugin
+        init_instance_callback: (editor) => {
+          if (_this.value) {
+            editor.setContent(_this.value);
+          }
+          _this.hasInit = true;
+          editor.on('NodeChange Change KeyUp SetContent', () => {
+            this.hasChange = true;
+            this.$emit('input', editor.getContent());
+          });
+        },
+        setup(editor) {
+          editor.on('FullscreenStateChanged', (e) => {
+            _this.fullscreen = e.state;
+          });
+        },
+      });
+    },
+    destroyTinymce() {
+      const tinymce = window.tinymce.get(this.tinymceId);
+      if (this.fullscreen) {
+        tinymce.execCommand('mceFullScreen');
+      }
+
+      if (tinymce) {
+        tinymce.destroy();
+      }
+    },
+    setContent(value) {
+      window.tinymce.get(this.tinymceId).setContent(value);
+    },
+    getContent() {
+      window.tinymce.get(this.tinymceId).getContent();
+    },
+    imageSuccessCBK(arr) {
+      const _this = this;
+      arr.forEach((v) => {
+        if (this.getFileType(v) == 'video') {
+          window.tinymce.get(_this.tinymceId).insertContent(`<video class="wscnph" src="${v}" controls muted></video>`);
+        } else {
+          window.tinymce.get(_this.tinymceId).insertContent(`<img class="wscnph" src="${v}" style="width:30%;height: 30%"/>`);
+        }
+      });
+    },
+    getFileType(fileName) {
+      // 鍚庣紑鑾峰彇
+      let suffix = '';
+      // 鑾峰彇绫诲瀷缁撴灉
+      let result = '';
+      try {
+        const flieArr = fileName.split('.');
+        suffix = flieArr[flieArr.length - 1];
+      } catch (err) {
+        suffix = '';
+      }
+      // fileName鏃犲悗缂�杩斿洖 false
+      if (!suffix) {
+        return false;
+      }
+      suffix = suffix.toLocaleLowerCase();
+      // 鍥剧墖鏍煎紡
+      const imglist = ['png', 'jpg', 'jpeg', 'bmp', 'gif'];
+      // 杩涜鍥剧墖鍖归厤
+      result = imglist.find((item) => item === suffix);
+      if (result) {
+        return 'image';
+      }
+      // 鍖归厤 瑙嗛
+      const videolist = ['mp4', 'm2v', 'mkv', 'rmvb', 'wmv', 'avi', 'flv', 'mov', 'm4v'];
+      result = videolist.find((item) => item === suffix);
+      if (result) {
+        return 'video';
+      }
+      // 鍏朵粬 鏂囦欢绫诲瀷
+      return 'other';
+    },
+  },
+};
+</script>
+
+<style scoped>
+.tinymce-container {
+  position: relative;
+  line-height: normal;
+}
+
+.tinymce-container >>> .mce-fullscreen {
+  z-index: 10000;
+}
+
+.tinymce-textarea {
+  visibility: hidden;
+  z-index: -1;
+}
+
+.editor-custom-btn-container {
+  position: absolute;
+  right: 4px;
+  top: 4px;
+  /*z-index: 2005;*/
+}
+
+.fullscreen .editor-custom-btn-container {
+  z-index: 10000;
+  position: fixed;
+}
+
+.editor-upload-btn {
+  display: inline-block;
+}
+</style>
diff --git a/project-web/src/components/Tinymce/plugins.js b/project-web/src/components/Tinymce/plugins.js
new file mode 100644
index 0000000..34a8e39
--- /dev/null
+++ b/project-web/src/components/Tinymce/plugins.js
@@ -0,0 +1,9 @@
+// Any plugins you want to use has to be imported
+// Detail plugins list see https://www.tinymce.com/docs/plugins/
+// Custom builds see https://www.tinymce.com/download/custom-builds/
+
+const plugins = [
+  'advlist anchor autolink autosave code codesample colorpicker colorpicker contextmenu directionality emoticons fullscreen hr image imagetools insertdatetime link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace spellchecker tabfocus table template textcolor textpattern visualblocks visualchars wordcount',
+];
+
+export default plugins;
diff --git a/project-web/src/components/Tinymce/toolbar.js b/project-web/src/components/Tinymce/toolbar.js
new file mode 100644
index 0000000..b517e0f
--- /dev/null
+++ b/project-web/src/components/Tinymce/toolbar.js
@@ -0,0 +1,9 @@
+// Here is a list of the toolbar
+// Detail list see https://www.tinymce.com/docs/advanced/editor-control-identifiers/#toolbarcontrols
+
+const toolbar = [
+  'fontsizeselect forecolor bold italic underline strikethrough alignleft aligncenter alignright outdent indent link image media preview ',
+];
+// searchreplace removeformat subscript superscript code codesample fontsizeselect  fontselect  blockquote undo redo',
+// hr bullist numlist  anchor pagebreak insertdatetime  table emoticons  backcolor fullscreen
+export default toolbar;
diff --git a/project-web/src/components/UploadExcel/index.vue b/project-web/src/components/UploadExcel/index.vue
new file mode 100644
index 0000000..8142582
--- /dev/null
+++ b/project-web/src/components/UploadExcel/index.vue
@@ -0,0 +1,148 @@
+<template>
+  <div>
+    <input ref="excel-upload-input" class="excel-upload-input" type="file" accept=".xlsx, .xls" @change="handleClick" />
+    <div class="drop" @drop="handleDrop" @dragover="handleDragover" @dragenter="handleDragover">
+      Drop excel file here or
+      <el-button :loading="loading" style="margin-left: 16px" size="mini" type="primary" @click="handleUpload">
+        Browse
+      </el-button>
+    </div>
+  </div>
+</template>
+
+<script>
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+import XLSX from 'xlsx';
+
+export default {
+  props: {
+    beforeUpload: Function, // eslint-disable-line
+    onSuccess: Function, // eslint-disable-line
+  },
+  data() {
+    return {
+      loading: false,
+      excelData: {
+        header: null,
+        results: null,
+      },
+    };
+  },
+  methods: {
+    generateData({ header, results }) {
+      this.excelData.header = header;
+      this.excelData.results = results;
+      this.onSuccess && this.onSuccess(this.excelData);
+    },
+    handleDrop(e) {
+      e.stopPropagation();
+      e.preventDefault();
+      if (this.loading) return;
+      const files = e.dataTransfer.files;
+      if (files.length !== 1) {
+        this.$message.error('Only support uploading one file!');
+        return;
+      }
+      const rawFile = files[0]; // only use files[0]
+
+      if (!this.isExcel(rawFile)) {
+        this.$message.error('Only supports upload .xlsx, .xls, .csv suffix files');
+        return false;
+      }
+      this.upload(rawFile);
+      e.stopPropagation();
+      e.preventDefault();
+    },
+    handleDragover(e) {
+      e.stopPropagation();
+      e.preventDefault();
+      e.dataTransfer.dropEffect = 'copy';
+    },
+    handleUpload() {
+      this.$refs['excel-upload-input'].click();
+    },
+    handleClick(e) {
+      const files = e.target.files;
+      const rawFile = files[0]; // only use files[0]
+      if (!rawFile) return;
+      this.upload(rawFile);
+    },
+    upload(rawFile) {
+      this.$refs['excel-upload-input'].value = null; // fix can't select the same excel
+
+      if (!this.beforeUpload) {
+        this.readerData(rawFile);
+        return;
+      }
+      const before = this.beforeUpload(rawFile);
+      if (before) {
+        this.readerData(rawFile);
+      }
+    },
+    readerData(rawFile) {
+      this.loading = true;
+      return new Promise((resolve, reject) => {
+        const reader = new FileReader();
+        reader.onload = (e) => {
+          const data = e.target.result;
+          const workbook = XLSX.read(data, { type: 'array' });
+          const firstSheetName = workbook.SheetNames[0];
+          const worksheet = workbook.Sheets[firstSheetName];
+          const header = this.getHeaderRow(worksheet);
+          const results = XLSX.utils.sheet_to_json(worksheet);
+          this.generateData({ header, results });
+          this.loading = false;
+          resolve();
+        };
+        reader.readAsArrayBuffer(rawFile);
+      });
+    },
+    getHeaderRow(sheet) {
+      const headers = [];
+      const range = XLSX.utils.decode_range(sheet['!ref']);
+      let C;
+      const R = range.s.r;
+      /* start in the first row */
+      for (C = range.s.c; C <= range.e.c; ++C) {
+        /* walk every column in the range */
+        const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })];
+        /* find the cell in the first row */
+        let hdr = 'UNKNOWN ' + C; // <-- replace with your desired default
+        if (cell && cell.t) hdr = XLSX.utils.format_cell(cell);
+        headers.push(hdr);
+      }
+      return headers;
+    },
+    isExcel(file) {
+      return /\.(xlsx|xls|csv)$/.test(file.name);
+    },
+  },
+};
+</script>
+
+<style scoped>
+.excel-upload-input {
+  display: none;
+  z-index: -9999;
+}
+.drop {
+  border: 2px dashed #bbb;
+  width: 600px;
+  height: 160px;
+  line-height: 160px;
+  margin: 0 auto;
+  font-size: 24px;
+  border-radius: 5px;
+  text-align: center;
+  color: #bbb;
+  position: relative;
+}
+</style>
diff --git a/project-web/src/components/base/iconFrom.vue b/project-web/src/components/base/iconFrom.vue
new file mode 100644
index 0000000..9e7b88b
--- /dev/null
+++ b/project-web/src/components/base/iconFrom.vue
@@ -0,0 +1,112 @@
+<template>
+  <div class="iconBox">
+    <el-input
+      ref="search"
+      v-model.trim="iconVal"
+      placeholder="杈撳叆鍏抽敭璇嶆悳绱�,娉ㄦ剰鍏ㄦ槸鑻辨枃"
+      clearable
+      style="width: 300px"
+      @input="upIcon(iconVal)"
+    />
+    <div class="icons-container">
+      <div class="grid">
+        <div v-for="item of list" :key="item" @click="handleClipboard(generateElementIconCode(item), $event, item)">
+          <el-tooltip placement="top">
+            <div slot="content">
+              {{ generateElementIconCode(item) }}
+            </div>
+            <div class="icon-item">
+              <i :class="'el-icon-' + item" />
+              <span>{{ item }}</span>
+            </div>
+          </el-tooltip>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import elementIcons from '../js/element-icons';
+
+export default {
+  name: 'iconFrom',
+  data() {
+    return {
+      elementIcons,
+      iconVal: '',
+      modals2: false,
+      list: [],
+    };
+  },
+  mounted() {
+    this.list = this.elementIcons;
+  },
+  methods: {
+    generateElementIconCode(symbol) {
+      return `<i class="el-icon-${symbol}" />`;
+    },
+    handleClipboard(text, event, n) {
+      this.iconChange(n);
+      //  clipboard(text, event)
+    },
+    // 鎼滅储
+    upIcon(n) {
+      const arrs = [];
+      for (var i = 0; i < this.elementIcons.length; i++) {
+        if (this.elementIcons[i].indexOf(n) !== -1) {
+          arrs.push(this.elementIcons[i]);
+          this.list = arrs;
+        }
+      }
+    },
+    iconChange(n) {
+      this.$emit('getIcon', n);
+      this.$msgbox.close();
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.icons-container {
+  margin: 10px 20px 0;
+  overflow: hidden;
+
+  .grid {
+    position: relative;
+    display: grid;
+    grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
+  }
+
+  .icon-item {
+    margin: 10px 20px;
+    text-align: center;
+    width: 100px;
+    float: left;
+    font-size: 30px;
+    color: #24292e;
+    cursor: pointer;
+  }
+
+  span {
+    display: block;
+    font-size: 16px;
+    margin-top: 10px;
+  }
+
+  .disabled {
+    pointer-events: none;
+  }
+}
+</style>
diff --git a/project-web/src/components/base/index.js b/project-web/src/components/base/index.js
new file mode 100644
index 0000000..d95cbbf
--- /dev/null
+++ b/project-web/src/components/base/index.js
@@ -0,0 +1,16 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+const components = require.context('./', false, /\.vue$/u);
+export default (Vue) => {
+  components.keys().map((item) => {
+    Vue.component(components(item).default.name, components(item).default);
+  });
+};
diff --git a/project-web/src/components/echartsNew/index.vue b/project-web/src/components/echartsNew/index.vue
new file mode 100644
index 0000000..7a60da7
--- /dev/null
+++ b/project-web/src/components/echartsNew/index.vue
@@ -0,0 +1,78 @@
+<template>
+  <div>
+    <div :id="echarts" :style="styles" />
+  </div>
+</template>
+
+<script>
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+import echarts from 'echarts';
+export default {
+  name: 'Index',
+  props: {
+    styles: {
+      type: Object,
+      default: null,
+    },
+    optionData: {
+      type: Object,
+      default: null,
+    },
+  },
+  data() {
+    return {
+      myChart: null,
+    };
+  },
+  computed: {
+    echarts() {
+      return 'echarts' + Math.ceil(Math.random() * 100);
+    },
+  },
+  watch: {
+    optionData: {
+      handler(newVal, oldVal) {
+        this.handleSetVisitChart();
+      },
+      deep: true, // 瀵硅薄鍐呴儴灞炴�х殑鐩戝惉锛屽叧閿��
+    },
+  },
+  mounted: function () {
+    const vm = this;
+    vm.$nextTick(() => {
+      vm.handleSetVisitChart();
+      window.addEventListener('resize', this.wsFunc);
+    });
+  },
+  beforeDestroy() {
+    window.removeEventListener('resize', this.wsFunc);
+    if (!this.myChart) {
+      return;
+    }
+    this.myChart.dispose();
+    this.myChart = null;
+  },
+  methods: {
+    wsFunc() {
+      this.myChart.resize();
+    },
+    handleSetVisitChart() {
+      this.myChart = echarts.init(document.getElementById(this.echarts));
+      let option = null;
+      option = this.optionData;
+      // 鍩轰簬鍑嗗濂界殑dom锛屽垵濮嬪寲echarts瀹炰緥
+      this.myChart.setOption(option, true);
+    },
+  },
+};
+</script>
+
+<style scoped></style>
diff --git a/project-web/src/components/js/element-icons.js b/project-web/src/components/js/element-icons.js
new file mode 100644
index 0000000..e297d51
--- /dev/null
+++ b/project-web/src/components/js/element-icons.js
@@ -0,0 +1,294 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+const elementIcons = [
+  'platform-eleme',
+  'eleme',
+  'delete-solid',
+  'delete',
+  's-tools',
+  'setting',
+  'user-solid',
+  'user',
+  'phone',
+  'phone-outline',
+  'more',
+  'more-outline',
+  'star-on',
+  'star-off',
+  's-goods',
+  'goods',
+  'warning',
+  'warning-outline',
+  'question',
+  'info',
+  'remove',
+  'circle-plus',
+  'success',
+  'error',
+  'zoom-in',
+  'zoom-out',
+  'remove-outline',
+  'circle-plus-outline',
+  'circle-check',
+  'circle-close',
+  's-help',
+  'help',
+  'minus',
+  'plus',
+  'check',
+  'close',
+  'picture',
+  'picture-outline',
+  'picture-outline-round',
+  'upload',
+  'upload2',
+  'download',
+  'camera-solid',
+  'camera',
+  'video-camera-solid',
+  'video-camera',
+  'message-solid',
+  'bell',
+  's-cooperation',
+  's-order',
+  's-platform',
+  's-fold',
+  's-unfold',
+  's-operation',
+  's-promotion',
+  's-home',
+  's-release',
+  's-ticket',
+  's-management',
+  's-open',
+  's-shop',
+  's-marketing',
+  's-flag',
+  's-comment',
+  's-finance',
+  's-claim',
+  's-custom',
+  's-opportunity',
+  's-data',
+  's-check',
+  's-grid',
+  'menu',
+  'share',
+  'd-caret',
+  'caret-left',
+  'caret-right',
+  'caret-bottom',
+  'caret-top',
+  'bottom-left',
+  'bottom-right',
+  'back',
+  'right',
+  'bottom',
+  'top',
+  'top-left',
+  'top-right',
+  'arrow-left',
+  'arrow-right',
+  'arrow-down',
+  'arrow-up',
+  'd-arrow-left',
+  'd-arrow-right',
+  'video-pause',
+  'video-play',
+  'refresh',
+  'refresh-right',
+  'refresh-left',
+  'finished',
+  'sort',
+  'category-up',
+  'category-down',
+  'rank',
+  'loading',
+  'view',
+  'c-scale-to-original',
+  'date',
+  'edit',
+  'edit-outline',
+  'folder',
+  'folder-opened',
+  'folder-add',
+  'folder-remove',
+  'folder-delete',
+  'folder-checked',
+  'tickets',
+  'document-remove',
+  'document-delete',
+  'document-copy',
+  'document-checked',
+  'document',
+  'document-add',
+  'printer',
+  'paperclip',
+  'takeaway-box',
+  'search',
+  'monitor',
+  'attract',
+  'mobile',
+  'scissors',
+  'umbrella',
+  'headset',
+  'brush',
+  'mouse',
+  'coordinate',
+  'magic-stick',
+  'reading',
+  'data-line',
+  'data-board',
+  'pie-chart',
+  'data-analysis',
+  'collection-tag',
+  'film',
+  'suitcase',
+  'suitcase-1',
+  'receiving',
+  'collection',
+  'files',
+  'notebook-1',
+  'notebook-2',
+  'toilet-paper',
+  'office-building',
+  'school',
+  'table-lamp',
+  'house',
+  'no-smoking',
+  'smoking',
+  'shopping-cart-full',
+  'shopping-cart-1',
+  'shopping-cart-2',
+  'shopping-bag-1',
+  'shopping-bag-2',
+  'sold-out',
+  'sell',
+  'present',
+  'box',
+  'bank-card',
+  'money',
+  'coin',
+  'wallet',
+  'discount',
+  'price-tag',
+  'news',
+  'guide',
+  'male',
+  'female',
+  'thumb',
+  'cpu',
+  'link',
+  'connection',
+  'open',
+  'turn-off',
+  'set-up',
+  'chat-round',
+  'chat-line-round',
+  'chat-square',
+  'chat-dot-round',
+  'chat-dot-square',
+  'chat-line-square',
+  'message',
+  'postcard',
+  'position',
+  'turn-off-microphone',
+  'microphone',
+  'close-notification',
+  'bangzhu',
+  'time',
+  'odometer',
+  'crop',
+  'aim',
+  'switch-button',
+  'full-screen',
+  'copy-document',
+  'mic',
+  'stopwatch',
+  'medal-1',
+  'medal',
+  'trophy',
+  'trophy-1',
+  'first-aid-kit',
+  'discover',
+  'place',
+  'location',
+  'location-outline',
+  'location-information',
+  'add-location',
+  'delete-location',
+  'map-location',
+  'alarm-clock',
+  'timer',
+  'watch-1',
+  'watch',
+  'lock',
+  'unlock',
+  'key',
+  'service',
+  'mobile-phone',
+  'bicycle',
+  'truck',
+  'ship',
+  'basketball',
+  'football',
+  'soccer',
+  'baseball',
+  'wind-power',
+  'light-rain',
+  'lightning',
+  'heavy-rain',
+  'sunrise',
+  'sunrise-1',
+  'sunset',
+  'sunny',
+  'cloudy',
+  'partly-cloudy',
+  'cloudy-and-sunny',
+  'moon',
+  'moon-night',
+  'dish',
+  'dish-1',
+  'food',
+  'chicken',
+  'fork-spoon',
+  'knife-fork',
+  'burger',
+  'tableware',
+  'sugar',
+  'dessert',
+  'ice-cream',
+  'hot-water',
+  'water-cup',
+  'coffee-cup',
+  'cold-drink',
+  'goblet',
+  'goblet-full',
+  'goblet-square',
+  'goblet-square-full',
+  'refrigerator',
+  'grape',
+  'watermelon',
+  'cherry',
+  'apple',
+  'pear',
+  'orange',
+  'coffee',
+  'ice-tea',
+  'ice-drink',
+  'milk-tea',
+  'potato-strips',
+  'lollipop',
+  'ice-cream-square',
+  'ice-cream-round',
+];
+
+export default elementIcons;
diff --git a/project-web/src/components/js/internal.js b/project-web/src/components/js/internal.js
new file mode 100644
index 0000000..bdc1abc
--- /dev/null
+++ b/project-web/src/components/js/internal.js
@@ -0,0 +1,73 @@
+(function () {
+  /* eslint-disable */
+  if (window.frameElement.id) {
+    let parent = window.parent,
+      dialog = parent.$EDITORUI[window.frameElement.id.replace(/_iframe$/, '')],
+      editor = dialog.editor,
+      UE = parent.UE,
+      domUtils = UE.dom.domUtils,
+      utils = UE.utils,
+      browser = UE.browser,
+      /* eslint-disable */
+      ajax = UE.ajax,
+      $G = function (id) {
+        return document.getElementById(id);
+      },
+      $focus = function (node) {
+        setTimeout(function () {
+          if (browser.ie) {
+            var r = node.createTextRange();
+            r.collapse(false);
+            r.select();
+          } else {
+            node.focus();
+          }
+        }, 0);
+      };
+    window.nowEditor = { editor: editor, dialog: dialog };
+    utils.loadFile(document, {
+      href: editor.options.themePath + editor.options.theme + '/dialogbase.css?cache=' + Math.random(),
+      tag: 'link',
+      type: 'text/css',
+      rel: 'stylesheet',
+    });
+    var lang = editor.getLang(dialog.className.split('-')[2]);
+    if (lang) {
+      domUtils.on(window, 'load', function () {
+        var langImgPath = editor.options.langPath + editor.options.lang + '/images/';
+        // 閽堝闈欐�佽祫婧�
+        for (var i in lang['static']) {
+          var dom = $G(i);
+          if (!dom) continue;
+          let tagName = dom.tagName,
+            content = lang['static'][i];
+          if (content.src) {
+            // clone
+            content = utils.extend({}, content, false);
+            content.src = langImgPath + content.src;
+          }
+          if (content.style) {
+            content = utils.extend({}, content, false);
+            content.style = content.style.replace(/url\s*\(/g, 'url(' + langImgPath);
+          }
+          switch (tagName.toLowerCase()) {
+            case 'var':
+              dom.parentNode.replaceChild(document.createTextNode(content), dom);
+              break;
+            case 'select':
+              var ops = dom.options;
+              for (var j = 0, oj; (oj = ops[j]); ) {
+                oj.innerHTML = content.options[j++];
+              }
+              for (var p in content) {
+                p != 'options' && dom.setAttribute(p, content[p]);
+              }
+              break;
+            default:
+              domUtils.setAttributes(dom, content);
+          }
+        }
+      });
+    }
+  }
+})();
diff --git a/project-web/src/components/myButton/myButton.vue b/project-web/src/components/myButton/myButton.vue
new file mode 100644
index 0000000..a37f4f4
--- /dev/null
+++ b/project-web/src/components/myButton/myButton.vue
@@ -0,0 +1,381 @@
+<template>
+  <el-button
+    v-if="show && site!=='tools'"
+    :icon="myIcon"
+    :loading="loading"
+    :plain="myPlain"
+    :size="mySize"
+    :disabled="disabled"
+    :type="myType"
+    @click="click"
+  >{{ myName }}
+  </el-button>
+  <el-button
+    v-else-if="show && site==='tools'"
+    :icon="myIcon"
+    :loading="loading"
+    :plain="myPlain"
+    :size="mySize"
+    :type="myType"
+    @click="click"
+  >{{ myName }}
+  </el-button>
+</template>
+<script>
+export default {
+  props: {
+    checkPermission: { // 鎸夐挳鏉冮檺
+      type: String,
+      default: ''
+    },
+    site: { // filter 鎼滅储鏉★紝tools 宸ュ叿鏉★紝operation 鎿嶄綔鏍忥紝form 琛ㄥ崟
+      type: String,
+      default: ''
+    },
+    type: {// 鎸夐挳绫诲瀷
+      type: String,
+      default: ''
+    },
+    name: {// 鎸夐挳鍚嶇О
+      type: String,
+      default: ''
+    },
+    icon: {// 鍥炬爣
+      type: String,
+      default: null
+    },
+    size: {// 灏哄
+      type: String,
+      default: 'mini'
+    },
+    plain: {// 鍥炬爣
+      type: Boolean,
+      default: false
+    },
+    disabled: {// 鍥炬爣
+      type: Boolean,
+      default: false
+    }
+  },
+  data() {
+    return {
+      filter: {// 鎼滅储鏉′笂鐨勬寜閽悕绉伴泦鍚�
+        size: 'mini',
+        plain: false,
+        other: {
+          '鎼滅储': {
+            type: 'primary',
+            icon: 'el-icon-search'
+          },
+          '閲嶇疆': {
+            type: 'warning',
+            icon: 'el-icon-refresh'
+          },
+          '瀵煎嚭': {
+            type: 'info'
+          }
+
+        }
+      },
+      tools: {// 宸ュ叿鏉′笂鐨勬寜閽泦鍚�
+        size: 'medium',
+        plain: true,
+        type: 'primary',
+        other: {
+          '娣诲姞': {
+            icon: 'el-icon-plus'
+          },
+          '杩斿洖': {
+            icon: 'el-icon-edit-outline'
+          },
+          '鏌ョ湅': {
+            icon: 'el-icon-refresh'
+          },
+          '瀵煎叆': {
+            icon: 'el-icon-upload2'
+          },
+          '瀵煎叆妯℃澘涓嬭浇': {
+            icon: 'el-icon-download'
+          },
+          '瀵煎嚭': {
+            icon: 'el-icon-download'
+          },
+          '鎵撳嵃': {
+            icon: 'el-icon-printer'
+          },
+          '瀵煎嚭EXCEL': {
+            icon: 'el-icon-download'
+          },
+          '瀵煎嚭EXCEL(涓嶅垎椤�)': {
+            icon: 'el-icon-download'
+          },
+          '瀵煎嚭EXCEL(鍒嗛〉)': {
+            icon: 'el-icon-download'
+          },
+          '瀵煎嚭WORD': {
+            icon: 'el-icon-download'
+          },
+          '瀵煎嚭PDF': {
+            icon: 'el-icon-download'
+          },
+          '鏈烘瀯瀵煎叆': {
+            icon: 'el-icon-edit-outline'
+          },
+          '瀵煎叆璁板綍': {
+            icon: 'el-icon-edit-outline'
+          },
+          '瀵煎叆璁板綍鏌ヨ': {
+            icon: 'el-icon-refresh'
+          },
+          '鏂板': {
+            icon: 'el-icon-edit-outline'
+          },
+          '缁存姢鎸囨爣': {
+            icon: 'el-icon-refresh'
+          }
+        }
+      },
+      form: { // 琛ㄥ崟涓婄殑鎸夐挳
+        size: 'medium',
+        plain: false,
+        other: {
+          '閫夋嫨': {
+            type: 'primary'
+          },
+          '鏈嶅姟浜哄憳': {
+            type: 'primary'
+          },
+          '淇濆瓨': {
+            type: 'primary'
+          },
+          '淇濆瓨骞跺彂甯�': {
+            type: 'success'
+          },
+          '鍙栨秷': {
+            type: 'default'
+          },
+          '杩斿洖': {
+            type: 'default'
+          },
+          '鍏抽棴': {
+            type: 'default'
+          },
+          '閲嶇疆': {
+            type: 'default'
+          },
+          '鏆傚瓨': {
+            type: 'warning'
+          },
+          '鏌ヨ': {
+            type: 'primary'
+          },
+          '纭': {
+            type: 'primary'
+          },
+          '纭畾': {
+            type: 'primary'
+          },
+          '鍦板潃鎷惧彇': {
+            type: 'primary'
+          },
+          '涓嬭浇鍥剧墖': {
+            type: 'success'
+          },
+          '鎻愪氦': {
+            type: 'primary'
+          },
+          '杞淳': {
+            type: 'success'
+          },
+          '澶勭悊': {
+            type: 'primary'
+          },
+          '涓婃姤': {
+            type: 'primary'
+          }
+        }
+      },
+      operation: {// 鎿嶄綔鏍忎笂鐨勬寜閽泦鍚�
+        size: 'mini',
+        plain: true,
+        other: {
+          '濉叆': {
+            type: 'primary'
+          },
+          '浜哄憳閰嶇疆': {
+            type: 'primary'
+          },
+          '妯℃澘棰勮': {
+            type: 'success'
+          },
+          '璋冩煡椤归厤缃�': {
+            type: 'default'
+          },
+          '绛夌骇鍗忚': {
+            type: 'primary'
+          },
+          '鏌ョ湅璇︽儏': {
+            type: 'default'
+          },
+          '缂栬緫': {
+            type: 'primary'
+          },
+          '涓嬭浇': {
+            type: 'primary'
+          },
+          '娣诲姞': {
+            type: 'primary'
+          },
+          '澶勭悊': {
+            type: 'primary'
+          },
+          '鍒犻櫎': {
+            type: 'danger'
+          },
+          '鍏抽棴': {
+            type: 'danger'
+          },
+          '杩斿洖': {
+            type: 'danger'
+          },
+          '鏉冮檺': {
+            type: 'success'
+          },
+          '瑙掕壊': {
+            type: 'warning'
+          },
+          '瀵嗙爜鍒濆鍖�': {
+            type: 'default'
+          },
+          '閲嶇疆瀵嗙爜': {
+            type: 'warning'
+          },
+          '浜哄憳': {
+            type: 'success'
+          },
+          '澶囨敞': {
+            type: 'warning'
+          },
+          '鍚敤': {
+            type: 'success'
+          },
+          '绂佺敤': {
+            type: 'warning'
+          },
+          '鍚敤榛戝悕鍗�': {
+            type: 'success'
+          },
+          '鍔犲叆榛戝悕鍗�': {
+            type: 'danger'
+          },
+          '瀹℃牳': {
+            type: 'primary'
+          },
+          '鎾ゅ洖': {
+            type: 'danger'
+          },
+          '璇︽儏': {
+            type: 'success'
+          },
+          '鎻愪氦': {
+            type: 'warning'
+          },
+          '淇敼': {
+            type: 'warning'
+          },
+          '鍙栨秷': {
+            type: 'default'
+          },
+          '杩樺師': {
+            type: 'warning'
+          },
+          '褰掓。': {
+            type: 'primary'
+          },
+          '璋冩煡璇︽儏': {
+            type: 'primary'
+          },
+          '棰勮': {
+            type: 'success'
+          },
+          '澶嶅埗': {
+            type: 'default'
+          },
+          '宸ュ崟璇︽儏': {
+            type: 'success'
+          }
+        }
+      },
+      text: { // 琛ㄥ崟涓婄殑鎸夐挳
+        size: 'mini',
+        type: 'text',
+        icon: '',
+        other: {
+          '娣诲姞': {
+            type: 'primary'
+          },
+          '纭畾': {
+            type: 'primary'
+          }
+        }
+      },
+      loading: false,
+      myType: this.type, // 鎸夐挳绫诲瀷
+      myName: this.name, // 鎸夐挳鍚嶇О
+      myIcon: this.icon, // 鎸夐挳鍥炬爣
+      mySize: this.size, // 鎸夐挳澶у皬
+      myPlain: this.plain, // 鏄惁鏈寸礌鎸夐挳
+      show: true // 鏄惁鏄剧ず
+    }
+  },
+  created() {
+    if (this.checkPermission != '' && this.$store.getters.myButtonPermission.indexOf(this.checkPermission) < 0) {
+      this.show = false
+      return
+    }
+    this.myName = this.name
+    if (this.site == 'filter') {
+      this.mySize = this.filter.size
+      this.myPlain = this.filter.plain
+      this.myType = this.type || this.filter.other[this.myName].type
+      this.myIcon = this.icon || this.filter.other[this.myName].icon
+    } else if (this.site == 'tools') {
+      this.mySize = this.tools.size
+      this.myPlain = this.tools.plain
+      this.myType = this.tools.type
+      if (this.icons != null) {
+        this.myIcon = this.icons
+      } else {
+        this.myIcon = this.tools.other[this.myName].icon
+      }
+    } else if (this.site == 'operation') {
+      this.mySize = this.operation.size
+      this.myPlain = this.operation.plain
+      this.myType = this.type || this.operation.other[this.myName].type
+    } else if (this.site == 'form') {
+      this.mySize = this.form.size || this.size
+      this.myPlain = this.form.plain
+      this.myType = this.type || this.form.other[this.myName].type
+    } else if (this.site == 'text') {
+      this.mySize = this.text.size
+      this.myType = this.text.type
+      this.myIcon = this.icon || this.text.other[this.myName].icon
+    } else {
+      this.mySize = 'mini'
+      this.myPlain = false
+      this.myType = 'text'
+    }
+  },
+  methods: {
+    click() {
+      if (this.site == 'form') {
+        this.loading = true
+      }
+      this.$emit('click')
+      setTimeout(() => {
+        this.loading = false
+      }, 3000)// 3绉掑唴涓嶈兘閲嶅鐐瑰嚮
+    }
+  }
+}
+</script>
diff --git a/project-web/src/components/myInputNumber/index.vue b/project-web/src/components/myInputNumber/index.vue
new file mode 100644
index 0000000..bd1a905
--- /dev/null
+++ b/project-web/src/components/myInputNumber/index.vue
@@ -0,0 +1,94 @@
+<template>
+  <div class="component">
+    <el-input-number
+      style="width: 100%!important;text-align: left"
+      v-bind="$attrs"
+      v-on="$listeners"
+      :value="value"
+      :controls-position="controlsPosition"
+      :precision="precision"
+      :step="step"
+      :min="min"
+      :max="max"
+      :placeholder="placeholder"
+      clearable
+    >
+
+    </el-input-number>
+    <p class="text">{{text}}</p>
+
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'myInputNumber',
+  props: {
+    text:[String],
+    value: {
+      type: [Number,String],
+    },
+    placeholder: {
+      type: String,
+      default: '',
+    },
+    controlsPosition: {
+      type: Object,
+      default: () => {},
+    },
+    label: {
+      type: String,
+      default: '',
+    },
+    step: {
+      type: Number,
+      default: 0.1,
+    },
+    min: {
+      type: Number,
+      default: 0,
+    },
+    max: {
+      type: Number,
+      default: 999,
+    },
+    //绮惧害 1 1浣嶅皬鏁� 2 2浣嶅皬鏁� 绫绘帹
+    precision: {
+      type: Number,
+      default: 0,
+    },
+  }
+};
+</script>
+
+<style scoped lang="scss">
+.component{
+  width: 100%;
+  position: relative;
+  overflow: hidden;
+  .text{
+    position: absolute;
+    top: 1px;
+    bottom: 1px;
+    right: 1px;
+    text-align: center;
+    background-color: #f5f7fa;
+    border-left: 1px solid #dcdfe6;
+    padding: 0 20px;
+    border-radius: 4px;
+    border-top-left-radius: 0;
+    border-bottom-left-radius: 0;
+    color: #909399;
+  }
+}
+>>> .el-input-number__decrease {
+  display: none;
+}
+>>> .el-input-number__increase {
+  display: none;
+}
+>>> .el-input--medium .el-input__inner{
+  text-align: left;
+  padding: 15px;
+}
+</style>
diff --git a/project-web/src/components/mySearch/SearchItem.vue b/project-web/src/components/mySearch/SearchItem.vue
new file mode 100644
index 0000000..4da675b
--- /dev/null
+++ b/project-web/src/components/mySearch/SearchItem.vue
@@ -0,0 +1,319 @@
+<template>
+  <div>
+    <!--鏂囨湰-->
+    <el-input
+      :type="item.inputType || 'text'"
+      v-if="item.type === 'text'"
+      :placeholder="item.placeholder || ''"
+      @change="(e) => inputChange(e)"
+      :clearable="true"
+      v-model="val"
+      style="width: 150px"
+    />
+    <!-- 涓嬫媺-->
+
+    <el-cascader
+      v-model="val"
+      v-if="item.type === 'cascader'"
+      :options="item.options"
+      :props="item.optionsConfig.props||{ checkStrictly: true,value: 'id' }"
+      :clearable="true"
+      style="width: 150px"
+      @change="(v) => this.$emit('change', v)"
+    >
+    </el-cascader>
+    <!-- 涓嬫媺-->
+    <el-select
+      v-if="item.type === 'select'"
+      :placeholder="item.placeholder || ''"
+      v-model="val"
+      show-search
+      :multiple="item.multiple || false"
+      :collapse-tags="item.collapseTags || false"
+      :clearable="true"
+      style="width: 150px"
+      @change="(v) => this.$emit('change', v)"
+    >
+      <el-option v-for="(o, i) in item.options" :value="o.value" :label="o.label" :key="o.value"></el-option>
+    </el-select>
+
+    <!-- 鏍戝舰涓嬫媺-->
+    <el-tree
+      v-if="item.type === 'tree'"
+      v-model="val"
+      placeholder="璇烽�夋嫨"
+      allow-clear
+      :data="treeData"
+      :load-data="onLoadData"
+      style="width: 150px"
+      @change="(v) => this.$emit('change', v)"
+    >
+    </el-tree>
+
+    <!--鏃堕棿-->
+    <el-time-select
+      v-if="item.type === 'time-picker'"
+      :placeholder="item.placeholder || ''"
+      v-model="val"
+      :clearable="true"
+      style="width: 150px"
+      @change="(v) => this.$emit('change', v)"
+    />
+    <!--骞撮�夋嫨鍣�-->
+    <el-date-picker
+      v-if="item.type === 'year-picker'"
+      v-model="val"
+      type="year"
+      :clearable="true"
+      style="width: 150px"
+      @change="(v) => panelChange(v, 'yyyy')"
+    />
+    <!--鏈堥�夋嫨鍣�-->
+    <el-date-picker
+      v-if="item.type === 'month-picker'"
+      v-model="val"
+      type="month"
+      :clearable="true"
+      style="width: 150px"
+      @change="(v) => panelChange(v, 'yyyy-MM')"
+    />
+    <!--鏃ラ�夋嫨鍣�-->
+    <el-date-picker
+      v-if="item.type === 'date-picker'"
+      v-model="val"
+      type="date"
+      :clearable="true"
+      style="width: 150px"
+      @change="(v) => panelChange(v, 'yyyy-MM-dd')"
+    />
+    <!--鏃ユ湡甯︽椂闂撮�夋嫨鍣�-->
+    <el-date-picker
+      v-if="item.type === 'date-time-picker'"
+      v-model="val"
+      type="datetime"
+      :clearable="true"
+      style="width: 150px"
+      format="yyyy-MM-dd HH:mm:ss"
+      value-format="yyyy-MM-dd HH:mm:ss"
+      @change="(v)=>panelChange(v,'yyyy-MM-dd HH:mm:ss')"
+    />
+    <!--鑼冨洿閫夋嫨鏃堕棿-->
+    <el-date-picker
+      v-if="item.type === 'datetimerange-picker'"
+      v-model="val"
+      style="width: 378px"
+      :placeholder="item.placeholder || ''"
+      type="datetimerange"
+      :pickerOptions='pickerOptions'
+      :disabled="item.disabled"
+      :clearable="true"
+      :format="item.format?item.format:'yyyy-MM-dd HH:mm'"
+      :value-format="item.format?item.format:'yyyy-MM-dd HH:mm'"
+      @change="(v) => this.$emit('change', v)"
+    />
+  </div>
+</template>
+
+<script>
+import {formatDates} from '@/utils/index';
+import request from '@/utils/request';
+
+function trim(str) {
+  if (str == null) {
+    return '';
+  }
+  return str.replace(/^\s*(.*?)[\s\n]*$/g, '$1');
+}
+
+export default {
+  name: 'SearchItem',
+  props: {
+    value: [String, Number, Object, Array],
+    item: Object,
+  },
+  created() {
+    if (this.item.type === 'select' && this.item.optionsConfig) {
+      if (this.$axios === undefined) {
+        console.error('璇峰厛閰嶇疆this.$axios');
+        return;
+      }
+      request({
+        url: this.item.optionsConfig.url,
+        method: 'get',
+      }).then((res) => {
+        const data = res || [];
+        this.item.options = [];
+        data.forEach((v) => {
+          this.item.options.push({
+            label: v[this.item.optionsConfig.label || 'label'],
+            value: v[this.item.optionsConfig.value || 'value'],
+          });
+        });
+      });
+    }
+    if (this.item.type === 'cascader' && this.item.optionsConfig) {
+      if (this.$axios === undefined) {
+        console.error('璇峰厛閰嶇疆this.$axios');
+        return;
+      }
+      request({
+        url: this.item.optionsConfig.url,
+        method: 'get',
+      }).then((res) => {
+        const data = res || [];
+        this.item.options = [];
+        this.item.options = data;
+      });
+    }
+    if (this.item.type === 'tree-select' && this.item.optionsConfig) {
+      if (this.$axios === undefined) {
+        console.error('璇峰厛閰嶇疆this.$axios');
+        return;
+      }
+      if (this.item.asyncLoad) {
+        this.asyncLoad({value: 0}).then((res) => {
+          this.treeData = res;
+        });
+      } else {
+        this.asyncLoad({}).then((res) => {
+          this.treeData = res;
+        });
+      }
+    }
+  },
+  watch: {
+    value(v) {
+      this.val = v;
+    },
+  },
+  data() {
+    return {
+      val: this.item.defaultValue,
+      treeData: [], // 鏍戝舰涓嬫媺
+      endOpen: false, // 鎺у埗骞翠唤閫夋嫨鏄剧ず闅愯棌
+      pickerOptions: {
+        shortcuts: [{
+          text: '鏈�杩戜竴鍛�',
+          onClick(picker) {
+            const end = new Date();
+            const start = new Date();
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+            picker.$emit('pick', [start, end]);
+          }
+        }, {
+          text: '鏈�杩戜竴涓湀',
+          onClick(picker) {
+            const end = new Date();
+            const start = new Date();
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+            picker.$emit('pick', [start, end]);
+          }
+        }, {
+          text: '鏈�杩戜笁涓湀',
+          onClick(picker) {
+            const end = new Date();
+            const start = new Date();
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
+            picker.$emit('pick', [start, end]);
+          }
+        },
+          {
+            text: '鏈�杩戝崐骞�',
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 180);
+              picker.$emit('pick', [start, end]);
+            }
+          }]
+      },
+    };
+  },
+  methods: {
+    panelChange(v, type) {
+      var info = null
+      if (v && this.item.type !== 'date-time-picker') {
+        info = formatDates(v, type)
+      } else {
+        info = v
+      }
+      this.val = info
+      this.$emit('change', info)
+    },
+    filterOption(input, option) {
+      return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0;
+    },
+    inputChange(e) {
+      this.$emit('change', trim(e));
+    },
+    onLoadData(treeNode) {
+      return new Promise((resolve) => {
+        if (this.item.asyncLoad === undefined || !this.item.asyncLoad) {
+          resolve();
+          return;
+        }
+        if (treeNode.dataRef.children) {
+          resolve();
+          return;
+        }
+        this.asyncLoad(treeNode.dataRef).then((res) => {
+          treeNode.dataRef.children = res;
+          this.treeData = [...this.treeData];
+          resolve();
+        });
+      });
+    },
+    asyncLoad({value}) {
+      let url = `${this.item.optionsConfig.url}`;
+      if (value !== undefined) {
+        url = `${this.item.optionsConfig.url}?pid=${value}`;
+      }
+      return new Promise((resolve) => {
+        // this.$axios({
+        //   url: url,
+        //   method: 'get'
+        // })
+        request({
+          url: url,
+          method: 'get',
+        })
+          .then((res) => {
+            const data = res || [];
+            const result = [];
+            const rander = (array, r) => {
+              array.forEach((v) => {
+                const d = {
+                  label: v[this.item.optionsConfig.label || 'label'],
+                  value: v[this.item.optionsConfig.value || 'value'],
+                  disabled: false,
+                };
+                if (this.item.allowLv) {
+                  if (
+                    // eslint-disable-next-line no-eval
+                    eval(v[this.item.optionsConfig.lv || 'lv'] + this.item.allowLv)
+                  ) {
+                    d.disabled = false;
+                  } else {
+                    d.disabled = true;
+                  }
+                }
+                if (v.children && v.children.length > 0) {
+                  d.children = [];
+                  rander(v.children, d.children);
+                }
+                r.push(d);
+              });
+            };
+            rander(data, result);
+            resolve(result);
+          })
+          .catch(() => {
+            resolve([]);
+          });
+      });
+    },
+  },
+};
+</script>
+
+<style scoped></style>
diff --git a/project-web/src/components/mySearch/index.js b/project-web/src/components/mySearch/index.js
new file mode 100644
index 0000000..c2fb958
--- /dev/null
+++ b/project-web/src/components/mySearch/index.js
@@ -0,0 +1,64 @@
+import mySearch from './mySearch'
+
+// vue椤甸潰锛�      <my-search ref="searchBar" :items="items"  @search="search"></my-search>
+// items.js 鏍煎紡   type 涓虹被鍨�   dataIndex涓簁ey  label涓烘枃鏈�  defaultValue 涓洪粯璁ゅ��
+// const items =   [
+//   {
+//     type: 'text',
+//     dataIndex: 'name',
+//     label: '鏂囨湰',
+//     defaultValue: ''
+//   },
+//   {
+//     type: 'time-picker',
+//     dataIndex: 'time-picker',
+//     label: '鏃堕棿',
+//     defaultValue: ''
+//   },
+//   {
+//     type: 'date-picker',
+//     dataIndex: 'dateTime',
+//     label: '閫夋嫨鏃�',
+//     defaultValue: ''
+//   },
+//   {
+//     type: 'month-picker',
+//     dataIndex: 'monthTime',
+//     label: '閫夋嫨鏈�',
+//     defaultValue: ''
+//   },
+//   {
+//     type: 'year-picker',
+//     dataIndex: 'yearTime',
+//     label: '閫夋嫨骞�',
+//     defaultValue: ''
+//   },
+//   {
+//     type: 'select',
+//     dataIndex: 'lv',
+//     label: '绛夌骇',
+//     defaultValue: '',
+//     options: [
+//       {
+//         label: 'A绾�',
+//         value: 'A'
+//       },
+//       {
+//         label: 'B绾�',
+//         value: 'B'
+//       },
+//       {
+//         label: 'C绾�',
+//         value: 'C'
+//       },
+//       {
+//         label: 'D绾�',
+//         value: 'D'
+//       }
+//     ]
+//   },
+// ]
+mySearch.install = function (Vue) {
+    Vue.component(mySearch.name, mySearch)
+}
+export default mySearch
diff --git a/project-web/src/components/mySearch/mySearch.vue b/project-web/src/components/mySearch/mySearch.vue
new file mode 100644
index 0000000..8570825
--- /dev/null
+++ b/project-web/src/components/mySearch/mySearch.vue
@@ -0,0 +1,107 @@
+<template>
+  <div class="table-page-search-wrapper" style="padding: 0 10px 10px 10px">
+    <el-form :model="form" inline ref="formData" size="small">
+      <el-form-item :label="item.label" :prop="item.dataIndex" v-for="(item, i) in myItems1" :key="i">
+        <search-item :item="item" @change="formChange($event, i)" :value="item.value" />
+      </el-form-item>
+      <el-form-item>
+        <div class="table-page-search-submitButtons">
+          <el-button size="small" type="primary" icon="el-icon-search" @click="search">鏌ヨ</el-button>
+          <el-button size="small" style="margin-left: 8px" icon="el-icon-refresh" @click="reset">閲嶇疆</el-button>
+        </div>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+<script>
+import SearchItem from './SearchItem';
+
+export default {
+  components: { SearchItem },
+  name: 'mySearch',
+  props: ['items'],
+  data() {
+    return {
+      myItems1: [],
+      // 楂樼骇鎼滅储 灞曞紑/鍏抽棴
+      advanced: false,
+      form: {},
+    };
+  },
+  beforeCreate() {
+    this.form = {};
+  },
+  created() {
+    this.items.map((x, i) => {
+      this.form[x.dataIndex] = x.defaultValue ? x.defaultValue : null;
+    });
+    this.myItems1 = this.items;
+  },
+  computed: {
+    actionMd: function () {
+      if (!this.advanced) {
+        return 4;
+      } else {
+        const _b = this.items.length % 3;
+        if (_b === 0) {
+          return 24;
+        } else {
+          return 4;
+        }
+      }
+    },
+  },
+  methods: {
+    toggleAdvanced() {
+      this.advanced = !this.advanced;
+      this.$emit('openChange');
+    },
+    search(e) {
+      e.preventDefault();
+      this.$refs.formData.validate((valid) => {
+        if (valid) {
+          this.form.pageNum = 1;
+          this.$emit('search', this.form);
+        } else {
+          this.$message.warning('鏍¢獙鏈�氳繃,璇锋鏌�!');
+          return false;
+        }
+      });
+    },
+    reset() {
+      this.$refs['formData'].resetFields();
+      this.items.map((x, i) => {
+        x.value = x.defaultValue ? x.defaultValue : null;
+      });
+      this.myItems1 = this.items;
+      this.$forceUpdate();
+      this.$nextTick(() => {
+        this.form.pageNum = 1;
+        this.$emit('reset');
+        this.$emit('search', this.form);
+      });
+    },
+    formChange(e, i) {
+      this.form[this.items[i].dataIndex] = e;
+      this.items[i].value = e;
+      this.$forceUpdate();
+    },
+  },
+};
+</script>
+
+<style scoped>
+/deep/.el-form--inline .el-form-item__label {
+  font-weight: normal;
+  color: #1d2129;
+}
+.table-page-search-submitButtons {
+  min-width: 160px;
+}
+/deep/.el-button--medium {
+  padding: 10px 12px;
+}
+>>>.el-form-item{
+  margin: 6px 10px 6px 0;
+}
+</style>
diff --git a/project-web/src/components/mySearchCopy/SearchItem.vue b/project-web/src/components/mySearchCopy/SearchItem.vue
new file mode 100644
index 0000000..30581e7
--- /dev/null
+++ b/project-web/src/components/mySearchCopy/SearchItem.vue
@@ -0,0 +1,282 @@
+<template>
+  <div>
+    <!--鏂囨湰-->
+    <el-input
+      :type="item.inputType || 'text'"
+      v-if="item.type === 'text'"
+      :placeholder="item.placeholder || ''"
+      @change="(e) => inputChange(e)"
+      :clearable="true"
+      v-model="val"
+      style="width: 200px"
+    />
+    <!-- 涓嬫媺-->
+
+    <el-cascader
+      v-model="val"
+      v-if="item.type === 'cascader'"
+      :options="item.options"
+      :props="{ checkStrictly: true,value: 'id' }"
+      clearable
+      :clearable="true"
+      style="width: 200px"
+      @change="(v) => this.$emit('change', v)"
+    >
+    </el-cascader>
+    <!-- 涓嬫媺-->
+    <el-select
+      v-if="item.type === 'select'"
+      :placeholder="item.placeholder || ''"
+      v-model="val"
+      show-search
+      :multiple="item.multiple || false"
+      :collapse-tags="item.collapseTags || false"
+      :clearable="true"
+      style="width: 200px"
+      @change="(v) => this.$emit('change', v)"
+    >
+      <el-option v-for="(o, i) in item.options" :value="o.value" :label="o.label" :key="o.value"> </el-option>
+    </el-select>
+
+    <!-- 鏍戝舰涓嬫媺-->
+    <el-tree
+      v-if="item.type === 'tree'"
+      v-model="val"
+      placeholder="璇烽�夋嫨"
+      allow-clear
+      :data="treeData"
+      :load-data="onLoadData"
+      style="width: 200px"
+      @change="(v) => this.$emit('change', v)"
+    >
+    </el-tree>
+
+    <!--鏃堕棿-->
+    <el-time-select
+      v-if="item.type === 'time-picker'"
+      :placeholder="item.placeholder || ''"
+      v-model="val"
+      :clearable="true"
+      style="width: 200px"
+      @change="(v) => this.$emit('change', v)"
+    />
+    <!--骞撮�夋嫨鍣�-->
+    <el-date-picker
+      v-if="item.type === 'year-picker'"
+      v-model="val"
+      type="year"
+      :clearable="true"
+      style="width: 200px"
+      @change="(v) => panelChange(v, 'yyyy')"
+    />
+    <!--鏈堥�夋嫨鍣�-->
+    <el-date-picker
+      v-if="item.type === 'month-picker'"
+      v-model="val"
+      type="month"
+      :clearable="true"
+      style="width: 200px"
+      @change="(v) => panelChange(v, 'yyyy-MM')"
+    />
+    <!--鏃ラ�夋嫨鍣�-->
+    <el-date-picker
+      v-if="item.type === 'date-picker'"
+      v-model="val"
+      type="date"
+      :clearable="true"
+      style="width: 200px"
+      @change="(v) => panelChange(v, 'yyyy-MM-dd')"
+    />
+    <!--鏃ユ湡甯︽椂闂撮�夋嫨鍣�-->
+    <el-date-picker
+      v-if="item.type === 'date-time-picker'"
+      v-model="val"
+      type="datetime"
+      :clearable="true"
+      style="width: 200px"
+      format="yyyy-MM-dd HH:mm:ss"
+      value-format="yyyy-MM-dd HH:mm:ss"
+      @change="(v)=>panelChange(v,'yyyy-MM-dd HH:mm:ss')"
+    />
+    <!--鑼冨洿閫夋嫨鏃堕棿-->
+        <el-date-picker
+          v-if="item.type === 'datetimerange-picker'"
+          v-model="val"
+          :placeholder="item.placeholder || ''"
+          type="datetimerange"
+          :disabled="item.disabled"
+          :clearable="true"
+          format="yyyy-MM-dd HH:mm:ss"
+          value-format="yyyy-MM-dd HH:mm:ss"
+          @change="(v) => this.$emit('change', v)"
+        />
+  </div>
+</template>
+
+<script>
+import { formatDates } from '@/utils/index';
+import request from '@/utils/request';
+
+function trim(str) {
+  if (str == null) {
+    return '';
+  }
+  return str.replace(/^\s*(.*?)[\s\n]*$/g, '$1');
+}
+
+export default {
+  name: 'SearchItem',
+  props: {
+    value: [String, Number, Object, Array],
+    item: Object,
+  },
+  created() {
+    if (this.item.type === 'select' && this.item.optionsConfig) {
+      if (this.$axios === undefined) {
+        console.error('璇峰厛閰嶇疆this.$axios');
+        return;
+      }
+      request({
+        url: this.item.optionsConfig.url,
+        method: 'get',
+      }).then((res) => {
+        const data = res || [];
+        this.item.options = [];
+        data.forEach((v) => {
+          this.item.options.push({
+            label: v[this.item.optionsConfig.label || 'label'],
+            value: v[this.item.optionsConfig.value || 'value'],
+          });
+        });
+      });
+    }
+    if (this.item.type === 'cascader' && this.item.optionsConfig) {
+      if (this.$axios === undefined) {
+        console.error('璇峰厛閰嶇疆this.$axios');
+        return;
+      }
+      request({
+        url: this.item.optionsConfig.url,
+        method: 'get',
+      }).then((res) => {
+        const data = res || [];
+        this.item.options = [];
+        this.item.options = data;
+      });
+    }
+    if (this.item.type === 'tree-select' && this.item.optionsConfig) {
+      if (this.$axios === undefined) {
+        console.error('璇峰厛閰嶇疆this.$axios');
+        return;
+      }
+      if (this.item.asyncLoad) {
+        this.asyncLoad({ value: 0 }).then((res) => {
+          this.treeData = res;
+        });
+      } else {
+        this.asyncLoad({}).then((res) => {
+          this.treeData = res;
+        });
+      }
+    }
+  },
+  watch: {
+    value(v) {
+      this.val = v;
+    },
+  },
+  data() {
+    return {
+      val: this.item.defaultValue,
+      treeData: [], // 鏍戝舰涓嬫媺
+      endOpen: false, // 鎺у埗骞翠唤閫夋嫨鏄剧ず闅愯棌
+    };
+  },
+  methods: {
+    panelChange (v,type) {
+      var info = null
+      if( v && this.item.type!=='date-time-picker'){
+        info = formatDates(v, type)
+      }else{
+        info = v
+      }
+      this.val = info
+      this.$emit('change', info)
+    },
+    filterOption(input, option) {
+      return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0;
+    },
+    inputChange(e) {
+      this.$emit('change', trim(e));
+    },
+    onLoadData(treeNode) {
+      return new Promise((resolve) => {
+        if (this.item.asyncLoad === undefined || !this.item.asyncLoad) {
+          resolve();
+          return;
+        }
+        if (treeNode.dataRef.children) {
+          resolve();
+          return;
+        }
+        this.asyncLoad(treeNode.dataRef).then((res) => {
+          treeNode.dataRef.children = res;
+          this.treeData = [...this.treeData];
+          resolve();
+        });
+      });
+    },
+    asyncLoad({ value }) {
+      let url = `${this.item.optionsConfig.url}`;
+      if (value !== undefined) {
+        url = `${this.item.optionsConfig.url}?pid=${value}`;
+      }
+      return new Promise((resolve) => {
+        // this.$axios({
+        //   url: url,
+        //   method: 'get'
+        // })
+        request({
+          url: url,
+          method: 'get',
+        })
+          .then((res) => {
+            const data = res || [];
+            const result = [];
+            const rander = (array, r) => {
+              array.forEach((v) => {
+                const d = {
+                  label: v[this.item.optionsConfig.label || 'label'],
+                  value: v[this.item.optionsConfig.value || 'value'],
+                  disabled: false,
+                };
+                if (this.item.allowLv) {
+                  if (
+                    // eslint-disable-next-line no-eval
+                    eval(v[this.item.optionsConfig.lv || 'lv'] + this.item.allowLv)
+                  ) {
+                    d.disabled = false;
+                  } else {
+                    d.disabled = true;
+                  }
+                }
+                if (v.children && v.children.length > 0) {
+                  d.children = [];
+                  rander(v.children, d.children);
+                }
+                r.push(d);
+              });
+            };
+            rander(data, result);
+            resolve(result);
+          })
+          .catch(() => {
+            resolve([]);
+          });
+      });
+    },
+  },
+};
+</script>
+
+<style scoped></style>
diff --git a/project-web/src/components/mySearchCopy/index.js b/project-web/src/components/mySearchCopy/index.js
new file mode 100644
index 0000000..e5dcf9e
--- /dev/null
+++ b/project-web/src/components/mySearchCopy/index.js
@@ -0,0 +1,65 @@
+import mySearch from './mySearch'
+
+// 2023.7.11 Can
+// vue椤甸潰锛�      <my-search ref="searchBar" :items="items"  @search="search"></my-search>
+// items.js 鏍煎紡   type 涓虹被鍨�   dataIndex涓簁ey  label涓烘枃鏈�  defaultValue 涓洪粯璁ゅ��
+// const items =   [
+//   {
+//     type: 'text',
+//     dataIndex: 'name',
+//     label: '鏂囨湰',
+//     defaultValue: ''
+//   },
+//   {
+//     type: 'time-picker',
+//     dataIndex: 'time-picker',
+//     label: '鏃堕棿',
+//     defaultValue: ''
+//   },
+//   {
+//     type: 'date-picker',
+//     dataIndex: 'dateTime',
+//     label: '閫夋嫨鏃�',
+//     defaultValue: ''
+//   },
+//   {
+//     type: 'month-picker',
+//     dataIndex: 'monthTime',
+//     label: '閫夋嫨鏈�',
+//     defaultValue: ''
+//   },
+//   {
+//     type: 'year-picker',
+//     dataIndex: 'yearTime',
+//     label: '閫夋嫨骞�',
+//     defaultValue: ''
+//   },
+//   {
+//     type: 'select',
+//     dataIndex: 'lv',
+//     label: '绛夌骇',
+//     defaultValue: '',
+//     options: [
+//       {
+//         label: 'A绾�',
+//         value: 'A'
+//       },
+//       {
+//         label: 'B绾�',
+//         value: 'B'
+//       },
+//       {
+//         label: 'C绾�',
+//         value: 'C'
+//       },
+//       {
+//         label: 'D绾�',
+//         value: 'D'
+//       }
+//     ]
+//   },
+// ]
+mySearch.install = function (Vue) {
+    Vue.component(mySearch.name, mySearch)
+}
+export default mySearch
diff --git a/project-web/src/components/mySearchCopy/mySearch.vue b/project-web/src/components/mySearchCopy/mySearch.vue
new file mode 100644
index 0000000..35a3449
--- /dev/null
+++ b/project-web/src/components/mySearchCopy/mySearch.vue
@@ -0,0 +1,133 @@
+<template>
+  <div class="table-page-search-wrapper">
+    <el-form :model="form" inline ref="formData" label-width="100px" size="small">
+<!--      <el-row :gutter="10">-->
+<!--        <el-col :sm="24" :md="24" :lg="24">-->
+          <el-form-item :label="item.label" :prop="item.dataIndex" v-for="(item, i) in myItems1" :key="i">
+            <search-item :item="item" @change="formChange($event,i)" :value="item.value"/>
+          </el-form-item>
+          <div v-show="advanced" style="display: inline;">
+            <el-form-item :label="item.label" :prop="item.dataIndex" v-for="(item, i) in myItems2" :key="i">
+              <search-item :item="item" @change="formChange($event,i+3)" :value="item.value"/>
+            </el-form-item>
+          </div>
+          <div class="table-page-search-submitButtons">
+            <a
+              @click="toggleAdvanced"
+              style="margin-left: 8px"
+              v-if="items.length > 4">
+              {{ advanced ? "鏀惰捣" : "灞曞紑" }}
+              <i :class="advanced?'el-icon-top':'el-icon-bottom'"/>
+            </a>
+            <el-button type="primary" icon="el-icon-search" @click="search">鏌ヨ</el-button>
+            <el-button style="margin-left: 8px" icon="el-icon-refresh" @click="reset">閲嶇疆</el-button>
+          </div>
+<!--        </el-col>-->
+<!--        <el-col :sm="24" :md="7" :lg="5">-->
+<!--          -->
+<!--        </el-col>-->
+<!--      </el-row>-->
+    </el-form>
+  </div>
+</template>
+<script>
+import SearchItem from './SearchItem'
+
+export default {
+  components: { SearchItem },
+  name: 'mySearch',
+  props: ['items'],
+  data () {
+    return {
+      myItems1: [],
+      myItems2: [],
+      // 楂樼骇鎼滅储 灞曞紑/鍏抽棴
+      advanced: false,
+      form:{}
+    }
+  },
+  beforeCreate () {
+    this.form = {}
+  },
+  created () {
+    this.items.map((x,i)=>{
+      this.form[x.dataIndex] = x.defaultValue ? x.defaultValue:null
+    })
+    if (this.items.length > 4) {
+      this.myItems1 = this.items.slice(0, 4)
+      this.myItems2 = this.items.slice(4)
+    } else {
+      this.myItems1 = this.items
+    }
+  },
+  computed: {
+    actionMd: function () {
+      if (!this.advanced) {
+        return 4
+      } else {
+        const _b = this.items.length % 3
+        if (_b === 0) {
+          return 24
+        } else {
+          return 4
+        }
+      }
+    }
+  },
+  methods: {
+    toggleAdvanced () {
+      this.advanced = !this.advanced
+      this.$emit('openChange')
+    },
+    search (e) {
+      e.preventDefault()
+      this.$refs.formData.validate((valid) => {
+        if (valid) {
+          this.form.pageNum = 1
+          this.$emit('search', this.form)
+        } else {
+          this.$message.warning('鏍¢獙鏈�氳繃,璇锋鏌�!')
+          return false;
+        }
+      });
+    },
+    reset () {
+      this.$refs['formData'].resetFields();
+      this.items.map((x,i)=>{
+        x.value = x.defaultValue ? x.defaultValue:null
+      })
+      if (this.items.length > 3) {
+        this.myItems1 = this.items.slice(0, 3)
+        this.myItems2 = this.items.slice(3)
+      } else {
+        this.myItems1 = this.items
+      }
+      this.$forceUpdate()
+     this.$nextTick(()=>{
+       this.form.pageNum = 1
+       this.$emit('reset')
+       this.$emit('search', this.form)
+     })
+    },
+    formChange(e,i){
+      this.form[this.items[i].dataIndex] = e
+      this.items[i].value = e
+      this.$forceUpdate()
+    }
+  }
+}
+</script>
+
+<style scoped>
+/deep/.el-form--inline .el-form-item__label{
+  font-weight: normal;
+  color: #1D2129;
+}
+.table-page-search-submitButtons{
+  min-width: 160px;
+  float: right;
+}
+ /deep/.el-button--medium{
+ padding:10px 12px;
+}
+</style>
diff --git a/project-web/src/components/mySwitch/mySwitch.vue b/project-web/src/components/mySwitch/mySwitch.vue
new file mode 100644
index 0000000..45826bd
--- /dev/null
+++ b/project-web/src/components/mySwitch/mySwitch.vue
@@ -0,0 +1,55 @@
+<template>
+  <div>
+    <span @click.stop="click">
+      <!-- disabled: 涓诲姩绂佺敤 permission: 鏉冮檺  switchable: 鎿嶄綔鍚庝竴瀹氭椂闂村唴绂佺敤 -->
+      <el-switch
+        :disabled="disabled || permission() || switchable"
+        :value="value"
+        active-color="#0d997c"
+        inactive-color="#C0CCDA"
+      />
+    </span>
+  </div>
+</template>
+
+<script>
+export default {
+  props: {
+    checkPermission: {
+      type: String,
+      default: ''
+    },
+    value: {
+      type: Boolean,
+      default: false
+    },
+    disabled: {
+      type: Boolean,
+      default: false
+    }
+  },
+  data() {
+    return {
+      switchable: false
+    }
+  },
+  methods: {
+    click() {
+      if (!(this.disabled || this.permission() || this.switchable)) {
+        this.switchable = true
+        this.$emit('click')
+        setTimeout(() => {
+          this.switchable = false
+        }, 1000)// 涓�绉掑唴涓嶈兘閲嶅鐐瑰嚮
+      }
+    },
+    // 妫�鏌ユ寜閽潈闄�
+    permission() {
+      if (this.checkPermission && this.$store.getters.myButtonPermission.indexOf(this.checkPermission) < 0) {
+        return true
+      }
+      return false
+    }
+  }
+}
+</script>
diff --git a/project-web/src/components/myTable/myTable.vue b/project-web/src/components/myTable/myTable.vue
new file mode 100644
index 0000000..9ee89bf
--- /dev/null
+++ b/project-web/src/components/myTable/myTable.vue
@@ -0,0 +1,752 @@
+<!--鍒楀闇�瑕佸浐瀹氬彸渚ф搷浣滅敤V锛屽垪灏戜笉闇�瑕佸浐瀹氬彸渚ф搷浣滅敤V2-->
+<template>
+  <div>
+    <!--宸ュ叿鏉�-->
+    <div v-if="!myTable.isTopFrame" class="table-tool-bar" style="overflow: hidden">
+      <!--鑷畾涔夊伐鍏�-->
+      <my-button
+        v-for="(custom, idx) in myTable.tools.custom"
+        :key="idx"
+        site="tools"
+        :check-permission="custom.checkPermission"
+        :name="custom.name"
+        @click="custom.click"
+        style="margin-bottom: 15px"
+      />
+      <!--瀵煎嚭-->
+      <el-popover v-model="visible" placement="right-start" width="250" trigger="click">
+        <el-form ref="exportParams" :model="exportParams" :rules="rules" label-position="right" size="mini" label-width="65px">
+          <el-form-item label="鍚嶇О" prop="fileName"><el-input v-model="exportParams.fileName" /></el-form-item>
+          <el-form-item label="鏍煎紡" class="require">
+            <el-radio-group v-model="exportParams.fileFormat" size="mini"><el-radio label=".xls">.xls</el-radio></el-radio-group>
+          </el-form-item>
+          <el-form-item label="鏁版嵁" class="require">
+            <el-radio-group v-model="exportParams.page" size="mini" @change="changePageSize">
+              <el-radio label="1">鏈〉</el-radio>
+              <el-radio label="2">鍏ㄩ儴</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="椤电爜" style="display: none;" prop="pageNum"><el-input v-model="exportParams.pageNum" /></el-form-item>
+          <el-form-item label="姝ラ暱" style="display: none;" prop="pageSize"><el-input v-model="exportParams.pageSize" /></el-form-item>
+        </el-form>
+        <div style="text-align: right; margin: 0">
+          <el-button size="mini" type="default" @click="visible = false">鍙栨秷</el-button>
+          <el-button type="primary" size="mini" @click="_export_">纭畾</el-button>
+        </div>
+        <my-button v-if="myTable.tools.generalExport.show" slot="reference" site="tools" name="瀵煎嚭" />
+      </el-popover>
+
+      <!--鍒楁帶鍒�-->
+      <el-popover v-if="myTable.tools.columnsCtrl.show" style="float: right;" trigger="click" placement="bottom" width="150">
+        <el-form label-width="10px" style="max-height: 500px;overflow-y: auto;">
+          <el-form-item label="">
+            <el-checkbox-group v-model="checkColumns" @change="changeColumns">
+              <el-checkbox v-for="(column, index) in myTable.columns" :key="index" :label="index">{{ column.title }}</el-checkbox>
+            </el-checkbox-group>
+          </el-form-item>
+        </el-form>
+        <el-button slot="reference" icon="el-icon-setting" size="mini">璁剧疆鍒�</el-button>
+      </el-popover>
+    </div>
+    <!--table鍒楄〃-->
+    <el-table
+      :key="timeStamp"
+      :ref="myTable.ref"
+      v-loading="myTable.loading"
+      :data="myTable.rows"
+      :max-height="myTable.maxHeight"
+      :height="myTable.height"
+      :size="myTable.size"
+      :fit="true"
+      border
+      :highlight-current-row="true"
+      @select="handleSelect"
+      @select-all="handleSelectAll"
+    >
+      <!--璇︽儏-->
+      <el-table-column v-if="myTable.expand" width="50" type="expand">
+        <template slot-scope="{ row }">
+          <el-form size="mini" label-position="left" :inline="false" class="demo-table-expand">
+            <el-form-item v-for="(more, index) in columnHidden" :key="index" size="mini" :label="more.title + '锛�'">
+              <template v-if="more.tag">
+                <el-tag size="mini" :type="more.tag(row).type">{{ more.tag(row).value }} {{ more }}</el-tag>
+              </template>
+              <template v-else>
+                <span v-if="more.formatter">{{ more.formatter(row).value }}</span>
+                <span v-else-if="more.switch">{{ more.switch(row).label }}</span>
+                <span v-else>{{ row[more.field] }}</span>
+              </template>
+            </el-form-item>
+          </el-form>
+        </template>
+      </el-table-column>
+      <el-table-column
+        v-if="myTable.showCheckBox"
+        type="selection"
+        align="center"
+        width="55"
+      />
+      <!--搴忓彿 鏈夊垎椤垫椂-->
+      <el-table-column v-if="myTable.showIndex && myTable.paging.page.pageSize != undefined" label="搴忓彿" align="center" width="60">
+        <template slot-scope="scope">
+          <span>{{ scope.$index + (myTable.paging.page.pageNum - 1) * myTable.paging.page.pageSize + 1 }}</span>
+        </template>
+      </el-table-column>
+
+      <!--搴忓彿 鏃犲垎椤垫椂-->
+      <el-table-column v-if="myTable.showIndex && myTable.paging.page.pageSize == undefined" type="index" align="center" label="搴忓彿" width="60" />
+      <!--鍒楀唴瀹�-->
+      <el-table-column
+        v-for="(column,index) in columnNotHidden"
+        :key="index"
+        :sortable="column.sortable"
+        :label="column.title"
+        :type="column.type"
+        :width="column.width"
+        :min-width="column.minWidth"
+        :align="column.align"
+        :header-align="column.align"
+      >
+        <template slot-scope="scope">
+          <!--寮�鍏筹紙鐢熸垚寮�鍏虫寜閽級-->
+          <template v-if="column.switch">
+            <my-switch
+              :value="column.switch(scope.row).value"
+              :check-permission="column.checkPermission"
+              :disabled="column.switch(scope.row).disabled"
+              @click="switchClick(column.switch(scope.row).click)"
+            />
+          </template>
+          <template v-else-if="column.tag">
+            <el-tag size="mini" :type="column.tag(scope.row).type">{{ column.tag(scope.row).value }}</el-tag>
+          </template>
+          <template v-else-if="column.img">
+            <preview-picture img-style="width:40px;height:40px;" :imgs="column.img(scope.row).imgs" />
+          </template>
+          <template v-else-if="column.audio">
+            <audio v-if="column.audio(scope.row).value" :src="column.audio(scope.row).value" controls style="width: 100%;height: 40px;"></audio>
+            <div v-else>鏆傛棤闊抽</div>
+          </template>
+          <!--鏍煎紡鍖栵紙鏄剧ず棰滆壊锛屽唴瀹癸紝鐐瑰嚮浜嬩欢鎺у埗锛�-->
+          <template v-else-if="column.formatter">
+            <span slot="reference" class="content-text" :style="setStyle(column.formatter(scope.row))" @click="handleClick(column.formatter(scope.row))">
+              {{ column.formatter(scope.row).value }}
+            </span>
+          </template>
+          <template v-else>
+            <!--鐐瑰嚮寮瑰嚭鍗曞厓鏍煎唴瀹�-->
+            <el-popover placement="top-start" trigger="click" :content="getPopoverContent(scope.row, column)">
+              <span slot="reference" class="content-text">{{ scope.row[column.field] }}</span>
+            </el-popover>
+          </template>
+        </template>
+      </el-table-column>
+      <!--鎿嶄綔鍒�-->
+      <el-table-column
+        v-if="myTable.operation.show"
+        label="鎿嶄綔"
+        align="center"
+        :width="myTable.operation.width"
+        fixed="right"
+      >
+        <template slot-scope="scope">
+          <template v-for="(operation, index) in myTable.operation.attr">
+            <my-button
+              v-if="!(operation.hidden && operation.hidden(scope.row))"
+              :key="index"
+              :name="operation.title"
+              site="operation"
+              :type="operation.type"
+              :check-permission="operation.checkPermission"
+              @click="operation.events(scope.row)"
+            />
+          </template>
+          <template v-if="myTable.operation.more && myTable.operation.more.length > 0">
+            <el-dropdown style="margin-left: 5px;" trigger="click">
+              <el-button size="small">
+                鏇村
+                <i class="el-icon-arrow-down el-icon--right"></i>
+              </el-button>
+              <el-dropdown-menu slot="dropdown">
+                <template v-for="(m, i) in myTable.operation.more">
+                  <el-dropdown-item v-if="!(m.hidden && m.hidden(scope.row))" :key="i">
+                    <my-button
+                      :name="m.title"
+                      :check-permission="m.checkPermission"
+                      @click="m.events(scope.row)"
+                    />
+                  </el-dropdown-item>
+                </template>
+              </el-dropdown-menu>
+            </el-dropdown>
+          </template>
+        </template>
+      </el-table-column>
+    </el-table>
+    <el-pagination
+      :small="myTable.paging.page.small"
+      :current-page="myTable.paging.page.pageNum"
+      :page-sizes="[5, 10, 20, 50, 100, 200, 300, 400, 500]"
+      :page-size="myTable.paging.page.pageSize"
+      layout="total, sizes, prev, pager, next, jumper"
+      :total="myTable.paging.page.total"
+      @size-change="handleSizeChange"
+      @current-change="handleCurrentChange"
+    />
+  </div>
+</template>
+
+<script>
+import myButton from '@/components/myButton/myButton'
+import mySwitch from '@/components/mySwitch/mySwitch'
+import request from '@/utils/request'
+import * as valid from '@/utils/validate'
+export default {
+  components: { myButton, mySwitch },
+  props: {
+    table: {
+      type: Object,
+      default() {
+        return null
+      }
+    },
+    parentSelectionsObject: { // 榛樿閫変腑鐨勬暟鎹�
+      type: Array,
+      default() {
+        return []
+      }
+    },
+    parentSelection: { // 榛樿閫変腑鐨勬暟鎹甶d
+      type: Array,
+      default() {
+        return []
+      }
+    },
+    // 褰撶偣鍑婚噸缃寜閽椂,filter鎸囧悜鏀瑰彉鏃朵笉闇�瑕佹墜鍔ㄨ皟鐢╯earch鏂规硶, 浠呮敼鍙榝ilter鍐呴儴鍊兼椂闇�鎵嬪姩璋冪敤search
+    // 濡�: this.filter = {} 涓嶉渶瑕佽皟鐢╯earch    this.filter.name = null 鏃堕渶璋冪敤search
+    filter: {
+      type: Object,
+      default() {
+        return null
+      }
+    }
+  },
+  data() {
+    const validatepageNum = (rule, value, callback) => {
+      if (!valid.isNotEmpty(this.exportParams.pageNum)) {
+        callback(new Error('璇疯緭鍏ラ〉鐮�'))
+      } else if (!valid.isInteger(this.exportParams.pageNum)) {
+        callback(new Error('椤电爜涓烘鏁存暟'))
+      } else {
+        callback()
+      }
+    }
+    const validatepageSize = (rule, value, callback) => {
+      if (!valid.isNotEmpty(this.exportParams.pageSize)) {
+        callback(new Error('璇疯緭鍏ユ闀�'))
+      } else if (!valid.isInteger(this.exportParams.pageSize)) {
+        callback(new Error('姝ラ暱涓烘鏁存暟'))
+      } else if (this.exportParams.pageSize > 20000 || this.exportParams.pageSize < 1) {
+        callback(new Error('鍗曟瀵煎嚭姝ラ暱鑼冨洿1锝�20000'))
+      } else {
+        callback()
+      }
+    }
+    const validatefileName = (rule, value, callback) => {
+      if (!valid.isNotEmpty(this.exportParams.fileName)) {
+        callback(new Error('璇疯緭鍏ユ枃浠跺悕绉�'))
+      } else if (this.exportParams.fileName.length < 1 || this.exportParams.fileName.length > 10) {
+        callback(new Error('鏂囦欢鍚嶇О闀垮害鑼冨洿1锝�10'))
+      } else {
+        callback()
+      }
+    }
+    return {
+      selection: [], // 瀛樺偍澶嶉�夋閫変腑鐨処D
+      selectionObject: [], // 瀛樺偍澶嶉�夋閫変腑鐨勫璞�
+      /** table鍒楄〃鏁版嵁*/
+      myTable: {
+        ref: 'myTable',
+        url: '',
+        params: {},
+        showIndex: true, // 鏄惁鏄剧ず搴忓彿
+        expand: true, // 鏄惁鏄剧ず璇︽儏鏁版嵁
+        loading: false, // 鍔犺浇鏁堟灉
+        // height: 500, // 榛樿楂樺害鑷姩鍗曚綅px
+        // maxHeight: 500, //榛樿涓嶈缃崟浣峱x
+        size: 'medium', // Table 鐨勫昂瀵� medium / small / mini
+        showCheckBox: false, // 鏄惁鏄剧ず澶嶉�夋
+        // 宸ュ叿鏉�
+        tools: {
+          columnsCtrl: {
+            // 鍒楁帶鍒舵寜閽�
+            show: false
+          },
+          generalExport: {
+            // 閫氱敤瀵煎嚭鎸夐挳
+            show: false
+          },
+          custom: [] // 鑷畾涔夊伐鍏锋潯鎸夐挳
+        },
+        columns: [], // 鍒楀睘鎬ч厤缃甤ustom
+        operation: {
+          // 鎿嶄綔鍒�
+          show: false, // 鏄剧ず鎿嶄綔鍒�
+          width: '250', // 瀹藉害
+          attr: [], // 鎿嶄綔
+          more: [] // 鏇村
+        },
+        rows: [], // 鍒楄〃鏁版嵁
+        paging: {
+          show: true, // 鏄剧ず鍒嗛〉
+          // 鍒嗛〉淇℃伅
+          page: {
+            small: false,
+            pageNum: 1,
+            pageSize: 10,
+            total: 0
+          }
+        }
+      },
+      checkColumns: [], // 璁板綍鍒楁帶鍒朵腑閫変腑鐨勫垪
+      // 瀵煎嚭鍔熻兘鎵�闇�鍙傛暟
+      visible: false, // 鎺у埗瀵煎嚭琛ㄥ崟鐨勯殣钘�
+      exportParams: {
+        fileName: '',
+        fileFormat: '.xls',
+        page: '2',
+        pageNum: 1,
+        pageSize: 20000
+      },
+      // 瀵煎嚭琛ㄥ崟鏍¢獙
+      rules: {
+        fileName: [{ required: true, validator: validatefileName, trigger: 'blur' }],
+        pageNum: [{ required: true, validator: validatepageNum, trigger: 'blur' }],
+        pageSize: [{ required: true, validator: validatepageSize, trigger: 'blur' }]
+      },
+      timeStamp: new Date().getTime()
+    }
+  },
+  computed: {
+    // 閫氳繃璁$畻灞炴�ц繃婊ゆ帀鍒楄〃涓笉闇�瑕佹樉绀虹殑椤圭洰
+    columnHidden: function() {
+      return this.myTable.columns.filter(function(x) {
+        return x.hidden
+      })
+    },
+    columnNotHidden: function() {
+      return this.myTable.columns.filter(function(x) {
+        return !x.hidden
+      })
+    }
+  },
+  watch: {
+    filter(val) {
+      this.search({ pageNum: 1 })
+    },
+    parentSelectionsObject(e) {
+      // 鍒濆鍖栭粯璁ら�変腑鐨勫垪
+      this.selectionObject = e
+      this.selectionObject.forEach(sel => {
+        if (!this.selection.includes(sel.id)) {
+          this.selection.push(sel.id)
+        }
+      })
+      this.reloadCheckBox()
+    },
+    selectionObject(val){ //鑾峰彇閫変腑瀵硅薄
+      this.$emit('getSel',val)
+    },
+    table(e) {
+      Object.assign(this.myTable, e)
+      this.reloadCheckBox()
+    }
+  },
+  created() {
+    const that = this
+    window.onresize = function() {
+      that.timeStamp = new Date().getTime()
+    }
+    that.selection = that.parentSelection
+    // 鍒濆鍖栭粯璁ら�変腑鐨勫垪(濡傛灉selectionObject锛宻election鍚屾椂瀛樺湪鍒欎互selectionObject涓轰富)
+    that.selectionObject = that.parentSelectionsObject
+    that.selectionObject.forEach(sel => {
+      that.selection.push(sel.id)
+    })
+    this.initTable()
+  },
+  methods: {
+    childDeleteitem(idd){
+      // 瀛愮粍浠跺彇娑堥�変腑
+      this.selectionObject = this.selectionObject.filter(({ id }) => id !== idd)
+      this.selection = this.selection.filter(id => id !== idd)
+    },
+    // 鍗曢��
+    handleSelect(selection, row) {
+      // 妫�鏌election涓槸鍚﹀寘鍚玶ow锛屽鏋滃寘鍚垯涓洪�変腑锛屽惁鍒欏彇娑堥�変腑
+      let _b = false
+      selection.forEach(sel => {
+        if (sel.id === row.id) {
+          _b = true
+          return false
+        }
+      })
+      if (_b) { // 鍖呭惈=閫変腑
+        this.selection.push(row.id)
+        this.selectionObject.push(row)
+      } else { // 涓嶅寘鍚�=鍙栨秷閫変腑
+        this.selectionObject = this.selectionObject.filter(({ id }) => id !== row.id)
+        this.selection = this.selection.filter(id => id !== row.id)
+      }
+    },
+    clearSelection() {
+      this.selection = []
+      this.$refs[this.myTable.ref].clearSelection()
+    },
+    // 鍏ㄩ��
+    handleSelectAll(selection) {
+      // 濡傛灉selection.length>0閬嶅巻锛屽瓨鍦ㄥ垯蹇界暐锛屼笉瀛樺湪鍒欐坊鍔�. 鍚﹀垯绉婚櫎鏈〉鎵�鏈夋暟鎹��
+      if (selection.length > 0) { // 鍏ㄩ��
+        // 閬嶅巻 涓嶅瓨鍦ㄥ垯鍔犲叆
+        selection.forEach(sel => {
+          if (this.selection.indexOf(sel.id) < 0) {
+            this.selection.push(sel.id)
+            this.selectionObject.push(sel)
+          }
+        })
+      } else { // 鍏ㄤ笉閫�
+        this.myTable.rows.forEach(row => {
+          const index = this.selection.indexOf(row.id)
+          if (index > -1) {
+            this.selection.splice(index, 1)
+            this.selectionObject.splice(index, 1)
+          }
+        })
+      }
+    },
+    reloadCheckBox() {
+      this.$nextTick(() => {
+        // 閲嶆柊鍕鹃�夎閫変腑椤�
+        this.$refs[this.myTable.ref].clearSelection()
+        // this.selectionObject.length = 0
+        if (this.selection.length > 0) {
+          this.myTable.rows.forEach(row => {
+            for (let m = 0; m < this.selection.length; m++) {
+              if (row.id == this.selection[m]) {
+                this.$refs[this.myTable.ref].toggleRowSelection(row, true)
+                // this.selectionObject.push(row)
+              }
+            }
+          })
+        }
+      })
+    },
+    // 鑾峰彇琚�変腑椤筰d
+    getChedkIds() {
+      const newArr = Array.from(new Set(this.selection));  // 鍘婚噸
+      return newArr
+    },
+    // 鑾峰彇琚�変腑椤�
+    getChedkObject() {
+      return this.selectionObject
+    },
+    initTable() {
+      if (this.table !== null) {
+        Object.assign(this.myTable, this.table)
+        if (this.myTable.paging.page === undefined) {
+          this.$set(this.myTable.paging, 'page', {
+            small: false,
+            pageNum: 1,
+            pageSize: 10,
+            total: 0
+          })
+        }
+        this.$nextTick(() => {
+          this.search({ pageNum: 1 })
+        })
+        this.myTable.columns.forEach((column, idx) => {
+          if (!column.hidden) {
+            this.checkColumns.push(idx)
+          }
+        })
+        this.timeStamp = new Date().getTime()
+        this.reloadCheckBox()
+      }
+    },
+    /*
+		 * @Author : liu.q [916000612@qq.com]
+		 * @Date : 2019-07-17 10:52
+		 * @Description : 鍒楄〃鎼滅储
+		 */
+    search(param) {
+      this.$nextTick(() => {
+        this.myTable.loading = true
+        const params = Object.assign({}, this.filter)
+        params.pageSize = this.myTable.paging.page.pageSize
+        if (param && param.pageNum) {
+          this.myTable.paging.page.pageNum = param.pageNum
+        }
+        params.pageNum = this.myTable.paging.page.pageNum
+        if (param == undefined) {
+          params.pageNum = 1
+        }
+        request({
+          url: this.myTable.url,
+          method: 'get',
+          params: params
+        }).then(res => {
+          if (res.datas) {
+            this.$set(this.myTable, 'rows', res.datas)
+          }
+          this.$set(
+            this.myTable.paging,
+            'page',
+            Object.assign(this.myTable.paging.page, {
+              pageSize: res.pageSize,
+              pageNum: res.pageIndex,
+              total: res.totalRows
+            })
+          )
+          this.myTable.loading = false
+          this.reloadCheckBox()
+        })
+      })
+    },
+    /*
+		 * @Author : liu.q [916000612@qq.com]
+		 * @Date : 2019-07-17 10:48
+		 * @Description : 鑾峰彇璁剧疆鍒楄〃寮瑰眰鍐呭
+		 */
+    getPopoverContent(row, column) {
+      if (column.formatterHigh) {
+        return column.formatterHigh(row).value + ''
+      } else if (column.formatter) {
+        return column.formatter(row) + ''
+      } else {
+        return row[column.field] + ''
+      }
+    },
+    /*
+		 * @Author : liu.q [916000612@qq.com]
+		 * @Date : 2019-07-17 11:39
+		 * @Description :鍗曞厓鏍煎唴瀹规牸寮忓寲鏍峰紡
+		 */
+    setStyle(format) {
+      let styles = ''
+      if (format.click != undefined) {
+        styles += 'cursor: pointer;'
+      }
+      if (format.type != undefined) {
+        if (format.type == 'primary') {
+          styles += 'color:#409EFF;'
+        } else if (format.type == 'danger') {
+          styles += 'color:#F56C6C;'
+        } else if (format.type == 'success') {
+          styles += 'color:#67C23A;'
+        } else if (format.type == 'warning') {
+          styles += 'color:#E6A23C;'
+        } else if (format.type == 'info') {
+          styles += 'color:#909399;'
+        }
+      }
+      return styles
+    },
+    /*
+		 * @Author : liu.q [916000612@qq.com]
+		 * @Date : 2019-07-17 12:20
+		 * @Description : formatter 鐐瑰嚮浜嬩欢
+		 */
+    handleClick(format) {
+      if (format.click != undefined) {
+        format.click()
+      }
+    },
+    /*
+		 * @Author : liu.q [916000612@qq.com]
+		 * @Date : 2019-07-17 12:21
+		 * @Description : 寮�鍏崇偣鍑讳簨浠�
+		 */
+    switchClick(click) {
+      if (typeof click === 'function') {
+        click()
+      }
+    },
+    /*
+		 * @Author : liu.q [916000612@qq.com]
+		 * @Date : 2019-07-17 14:22
+		 * @Description :鍒囨崲pageSize
+		 */
+    handleSizeChange(pageSize) {
+      this.myTable.paging.page.pageSize = pageSize
+      this.search({ pageNum: 1 })
+    },
+    /*
+		 * @Author : liu.q [916000612@qq.com]
+		 * @Date : 2019-07-17 14:22
+		 * @Description :鍒囨崲pageNum
+		 */
+    handleCurrentChange(pageNum) {
+      this.myTable.paging.page.pageNum = pageNum
+      this.search({ pageNum: pageNum })
+    },
+    /*
+		 * @Author : liu.q [916000612@qq.com]
+		 * @Date : 2019-07-17 14:52
+		 * @Description :鍒楁帶鍒�
+		 */
+    changeColumns() {
+      this.myTable.columns.forEach((column, idx) => {
+        if (this.checkColumns.includes(idx)) {
+          column.hidden = false
+        } else {
+          column.hidden = true
+        }
+        this.$set(this.myTable.columns, idx, column)
+      })
+    },
+    /*
+		 * @Author : liu.q [916000612@qq.com]
+		 * @Date : 2019-07-23 10:44
+		 * @Description : 淇敼瀵煎嚭 pageSize
+		 */
+    changePageSize() {
+      if (this.exportParams.page == 1) {
+        this.exportParams.pageSize = this.myTable.paging.page.pageSize
+      } else if (this.exportParams.page == 2) {
+        this.exportParams.pageSize = 20000
+      }
+    },
+    /*
+		 * @Author : liu.q [916000612@qq.com]
+		 * @Date : 2019-07-17 16:38
+		 * @Description :閫氱敤瀵煎嚭
+		 */
+    _export_() {
+      this.$refs['exportParams'].validate(valid => {
+        if (valid) {
+          // 鍒ゆ柇鎬绘潯鏁版槸鍚﹀ぇ浜庢渶澶ф敮鎸佹潯鏁�
+          if (this.myTable.paging.page.total > 20000) {
+            this.$confirm(`褰撳墠绛涢�夋暟鎹潯鏁�${this.myTable.paging.page.total},鏈�澶ф敮鎸佸鍑烘潯鏁�20000,鏄惁缁х画瀵煎嚭锛焋, '鎻愮ず', {
+              confirmButtonText: '鏄�',
+              cancelButtonText: '鍚�',
+              type: 'warning'
+            })
+              .then(() => {
+                this._export_m()
+              })
+              .catch(() => {
+                this.$message({
+                  type: 'info',
+                  message: '宸插彇娑堝鍑�'
+                })
+                return false
+              })
+          } else {
+            this._export_m()
+          }
+        } else {
+          return false
+        }
+      })
+    },
+    /*
+		 * @Author : liu.q [916000612@qq.com]
+		 * @Date : 2019-07-23 11:22
+		 * @Description : 鐪熸鐨勫鍑�
+		 */
+    _export_m() {
+      const loading = this.$loading({
+        lock: true,
+        text: '姝e湪瀵煎嚭...',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      })
+      this.visible = false
+      const params = {}
+      params.url = this.myTable.url
+      const columns = []
+      this.myTable.columns.forEach(c => {
+        if (!c.hidden || c.export) {
+          columns.push({
+            title: c.title,
+            field: c.field
+          })
+        }
+      })
+      params.columns = encodeURI(JSON.stringify(columns))
+      params.filter = encodeURI(
+        JSON.stringify(
+          Object.assign(
+            {
+              pageNum: this.exportParams.pageNum,
+              pageSize: this.exportParams.pageSize
+            },
+            this.filter
+          )
+        )
+      )
+      params.fileName = encodeURI(this.exportParams.fileName)
+      if (this.myTable.tools.generalExport.formatter) {
+        params.formatter = encodeURI(JSON.stringify(this.myTable.tools.generalExport.formatter))
+      }
+
+      request({
+        url: globalConf.baseUrl + '/v1/base/pc/export/generalExport', // 璇锋眰鍦板潃,
+        method: 'post',
+        data: params
+      }).then(response => {
+        if (response.code == 1) {
+          const link = globalConf.baseUrl + `/v1/base/web/common/downExcel?key=${response.data}`
+          window.location.href = link
+        } else {
+          this.$message({
+            message: '鍝庡憖锛屽嚭鎰忓浜嗐�傘�傘��',
+            type: 'warning'
+          })
+        }
+        loading.close()
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+>>> .el-table__fixed-right {
+  height: 100% !important;
+}
+
+/*璇︽儏琛ㄥ崟*/
+.demo-table-expand .el-form-item{
+  width: 100%;
+}
+
+/*鍒楄〃鍐呮枃瀛楄繃闀垮姞鐪佺暐*/
+.content-text{
+  overflow:hidden;
+  text-overflow:ellipsis;
+  white-space:nowrap
+}
+
+/*鍒嗛〉涓婅竟璺�*/
+.el-pagination {
+  white-space: nowrap;
+  padding: 2px 5px;
+  color: #303133;
+  font-weight: 700;
+  margin-top: 10px;
+}
+.el-radio {
+  margin-right: 10px;
+}
+.el-radio__label {
+  font-size: 14px;
+  padding-left: 2px !important;
+}
+.el-table__empty-block {
+  margin: 0 auto;
+}
+.table-tool-bar{
+  /*margin-bottom: 15px;*/
+}
+</style>
diff --git a/project-web/src/components/myTable/myTableV2.vue b/project-web/src/components/myTable/myTableV2.vue
new file mode 100644
index 0000000..47b61b2
--- /dev/null
+++ b/project-web/src/components/myTable/myTableV2.vue
@@ -0,0 +1,644 @@
+<!--鍒楀闇�瑕佸浐瀹氬彸渚ф搷浣滅敤V锛屽垪灏戜笉闇�瑕佸浐瀹氬彸渚ф搷浣滅敤V2-->
+<template>
+  <div>
+    <!--宸ュ叿鏉�-->
+    <div v-if="!myTable.isTopFrame" class="table-tool-bar" style="overflow: hidden">
+      <!--鑷畾涔夊伐鍏�-->
+      <my-button
+        v-for="(custom, idx) in myTable.tools.custom"
+        :key="idx"
+        site="tools"
+        :check-permission="custom.checkPermission"
+        :name="custom.name"
+        @click="custom.click"
+        style="margin-bottom: 15px"
+      />
+      <!--瀵煎嚭-->
+      <el-popover v-model="visible" placement="right-start" width="250" trigger="click">
+        <el-form ref="exportParams" :model="exportParams" :rules="rules" label-position="right" size="mini" label-width="65px">
+          <el-form-item label="鍚嶇О" prop="fileName"><el-input v-model="exportParams.fileName" /></el-form-item>
+          <el-form-item label="鏍煎紡" class="require">
+            <el-radio-group v-model="exportParams.fileFormat" size="mini"><el-radio label=".xls">.xls</el-radio></el-radio-group>
+          </el-form-item>
+          <el-form-item label="鏁版嵁" class="require">
+            <el-radio-group v-model="exportParams.page" size="mini" @change="changePageSize">
+              <el-radio label="1">鏈〉</el-radio>
+              <el-radio label="2">鍏ㄩ儴</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="椤电爜" style="display: none;" prop="pageNum"><el-input v-model="exportParams.pageNum" /></el-form-item>
+          <el-form-item label="姝ラ暱" style="display: none;" prop="pageSize"><el-input v-model="exportParams.pageSize" /></el-form-item>
+        </el-form>
+        <div style="text-align: right; margin: 0">
+          <el-button size="mini" type="default" @click="visible = false">鍙栨秷</el-button>
+          <el-button type="primary" size="mini" @click="_export_">纭畾</el-button>
+        </div>
+        <my-button v-if="myTable.tools.generalExport.show" slot="reference" site="tools" name="瀵煎嚭" />
+      </el-popover>
+
+      <!--鍒楁帶鍒�-->
+      <el-popover v-if="myTable.tools.columnsCtrl.show" style="float: right;" trigger="click" placement="bottom" width="150">
+        <el-form label-width="10px" style="max-height: 500px;overflow-y: auto;">
+          <el-form-item label="">
+            <el-checkbox-group v-model="checkColumns" @change="changeColumns">
+              <el-checkbox v-for="(column, index) in myTable.columns" :key="index" :label="index">{{ column.title }}</el-checkbox>
+            </el-checkbox-group>
+          </el-form-item>
+        </el-form>
+        <el-button slot="reference" icon="el-icon-setting" size="mini">璁剧疆鍒�</el-button>
+      </el-popover>
+    </div>
+    <!--table鍒楄〃-->
+    <el-table
+      style="width: 100%;"
+      :key="timeStamp"
+      :ref="myTable.ref"
+      v-loading="myTable.loading"
+      :data="myTable.rows"
+      :max-height="myTable.maxHeight"
+      :height="myTable.height"
+      :size="myTable.size"
+      :fit="true"
+      border
+      :highlight-current-row="true"
+    >
+      <!--璇︽儏-->
+      <el-table-column v-if="myTable.expand" width="50" type="expand">
+        <template slot-scope="{ row }">
+          <el-form size="mini" label-position="left" :inline="false" class="demo-table-expand">
+            <el-form-item v-for="(more, index) in columnHidden" :key="index" size="mini" :label="more.title + '锛�'">
+              <template v-if="more.tag">
+                <el-tag size="mini" :type="more.tag(row).type">{{ more.tag(row).value }} {{ more }}</el-tag>
+              </template>
+              <template v-else>
+                <span v-if="more.formatter">{{ more.formatter(row).value }}</span>
+                <span v-else-if="more.switch">{{ more.switch(row).label }}</span>
+                <span v-else>{{ row[more.field] }}</span>
+              </template>
+            </el-form-item>
+          </el-form>
+        </template>
+      </el-table-column>
+
+      <!--搴忓彿 鏈夊垎椤垫椂-->
+      <el-table-column v-if="myTable.showIndex && myTable.paging.page.pageSize != undefined" label="搴忓彿" align="center" width="60" fixed="left">
+        <template slot-scope="scope">
+          <span>{{ scope.$index + (myTable.paging.page.pageNum - 1) * myTable.paging.page.pageSize + 1 }}</span>
+        </template>
+      </el-table-column>
+
+      <!--搴忓彿 鏃犲垎椤垫椂-->
+      <el-table-column v-if="myTable.showIndex && myTable.paging.page.pageSize == undefined" type="index" align="center" label="搴忓彿" width="60" />
+      <!--鍒楀唴瀹�-->
+      <el-table-column
+        v-for="(column,index) in columnNotHidden"
+        :key="index"
+        :sortable="column.sortable"
+        :label="column.title"
+        :type="column.type"
+        :width="column.width"
+        :min-width="column.minWidth"
+        :align="column.align"
+        :header-align="column.align"
+      >
+        <template slot-scope="scope">
+          <!--寮�鍏筹紙鐢熸垚寮�鍏虫寜閽級-->
+          <template v-if="column.switch">
+            <my-switch
+              :value="column.switch(scope.row).value"
+              :check-permission="column.checkPermission"
+              :disabled="column.switch(scope.row).disabled"
+              @click="switchClick(column.switch(scope.row).click)"
+            />
+          </template>
+          <template v-else-if="column.tag">
+            <el-tag size="mini" :type="column.tag(scope.row).type">{{ column.tag(scope.row).value }}</el-tag>
+          </template>
+          <template v-else-if="column.img">
+            <preview-picture img-style="width:40px;height:40px;" :imgs="column.img(scope.row).imgs" />
+          </template>
+          <template v-else-if="column.audio">
+            <audio v-if="column.audio(scope.row).value" :src="column.audio(scope.row).value" controls style="width: 100%;height: 40px;"></audio>
+            <div v-else>鏆傛棤闊抽</div>
+          </template>
+          <!--鏍煎紡鍖栵紙鏄剧ず棰滆壊锛屽唴瀹癸紝鐐瑰嚮浜嬩欢鎺у埗锛�-->
+          <template v-else-if="column.formatter">
+            <span slot="reference" class="content-text" :style="setStyle(column.formatter(scope.row))" @click="handleClick(column.formatter(scope.row))"  v-on:dblclick="handleDbClick(column.formatter(scope.row))">
+              {{ column.formatter(scope.row).value }}
+            </span>
+          </template>
+          <template v-else>
+            <!--鐐瑰嚮寮瑰嚭鍗曞厓鏍煎唴瀹�-->
+            <el-popover placement="top-start" trigger="click" :content="getPopoverContent(scope.row, column)">
+              <span slot="reference" class="content-text">{{ scope.row[column.field] }}</span>
+            </el-popover>
+          </template>
+        </template>
+      </el-table-column>
+      <!--鎿嶄綔鍒�-->
+      <el-table-column
+        fixed="right"
+        v-if="myTable.operation.show"
+        label="鎿嶄綔"
+        header-align="center"
+        :align="myTable.operation.align || 'center'"
+        :width="myTable.operation.width"
+      >
+        <template slot-scope="scope">
+          <template v-for="(operation, index) in myTable.operation.attr">
+            <my-button
+              v-if="!(operation.hidden && operation.hidden(scope.row))"
+              :key="index"
+              :name="operation.title"
+              site="operation"
+              :type="operation.type"
+              :check-permission="operation.checkPermission"
+              @click="operation.events(scope.row)"
+            />
+          </template>
+          <template v-if="myTable.operation.more && myTable.operation.more.length > 0">
+            <el-dropdown style="margin-left: 5px;" trigger="click">
+              <el-button size="small">
+                鏇村
+                <i class="el-icon-arrow-down el-icon--right"></i>
+              </el-button>
+              <el-dropdown-menu slot="dropdown">
+                <template v-for="(m, i) in myTable.operation.more">
+                  <el-dropdown-item v-if="!(m.hidden && m.hidden(scope.row))" :key="i">
+                    <my-button
+                      :name="m.title"
+                      :check-permission="m.checkPermission"
+                      @click="m.events(scope.row)"
+                    />
+                  </el-dropdown-item>
+                </template>
+              </el-dropdown-menu>
+            </el-dropdown>
+          </template>
+        </template>
+      </el-table-column>
+    </el-table>
+    <el-pagination
+      v-if="myTable.paging.show"
+      :small="myTable.paging.page.small"
+      :current-page="myTable.paging.page.pageNum"
+      :page-sizes="[5, 10, 20, 50, 100, 200, 300, 400, 500]"
+      :page-size="myTable.paging.page.pageSize"
+      layout="total, sizes, prev, pager, next, jumper"
+      :total="myTable.paging.page.total"
+      @size-change="handleSizeChange"
+      @current-change="handleCurrentChange"
+    />
+  </div>
+</template>
+
+<script>
+import myButton from '@/components/myButton/myButton'
+import mySwitch from '@/components/mySwitch/mySwitch'
+import request from '@/utils/request'
+import * as valid from '@/utils/validate'
+export default {
+  components: { myButton, mySwitch },
+  props: {
+    table: {
+      type: Object,
+      default() {
+        return null
+      }
+    },
+    // 褰撶偣鍑婚噸缃寜閽椂,filter鎸囧悜鏀瑰彉鏃朵笉闇�瑕佹墜鍔ㄨ皟鐢╯earch鏂规硶, 浠呮敼鍙榝ilter鍐呴儴鍊兼椂闇�鎵嬪姩璋冪敤search
+    // 濡�: this.filter = {} 涓嶉渶瑕佽皟鐢╯earch    this.filter.name = null 鏃堕渶璋冪敤search
+    filter: {
+      type: Object,
+      default() {
+        return null
+      }
+    }
+  },
+  data() {
+    const validatepageNum = (rule, value, callback) => {
+      if (!valid.isNotEmpty(this.exportParams.pageNum)) {
+        callback(new Error('璇疯緭鍏ラ〉鐮�'))
+      } else if (!valid.isInteger(this.exportParams.pageNum)) {
+        callback(new Error('椤电爜涓烘鏁存暟'))
+      } else {
+        callback()
+      }
+    }
+    const validatepageSize = (rule, value, callback) => {
+      if (!valid.isNotEmpty(this.exportParams.pageSize)) {
+        callback(new Error('璇疯緭鍏ユ闀�'))
+      } else if (!valid.isInteger(this.exportParams.pageSize)) {
+        callback(new Error('姝ラ暱涓烘鏁存暟'))
+      } else if (this.exportParams.pageSize > 20000 || this.exportParams.pageSize < 1) {
+        callback(new Error('鍗曟瀵煎嚭姝ラ暱鑼冨洿1锝�20000'))
+      } else {
+        callback()
+      }
+    }
+    const validatefileName = (rule, value, callback) => {
+      if (!valid.isNotEmpty(this.exportParams.fileName)) {
+        callback(new Error('璇疯緭鍏ユ枃浠跺悕绉�'))
+      } else if (this.exportParams.fileName.length < 1 || this.exportParams.fileName.length > 10) {
+        callback(new Error('鏂囦欢鍚嶇О闀垮害鑼冨洿1锝�10'))
+      } else {
+        callback()
+      }
+    }
+    return {
+      /** table鍒楄〃鏁版嵁*/
+      myTable: {
+        url: '',
+        params: {},
+        border: false,
+        showIndex: true, // 鏄惁鏄剧ず搴忓彿
+        expand: true, // 鏄惁鏄剧ず璇︽儏鏁版嵁
+        loading: false, // 鍔犺浇鏁堟灉
+        // height: 500, // 榛樿楂樺害鑷姩鍗曚綅px
+        // maxHeight: 500, //榛樿涓嶈缃崟浣峱x
+        size: 'medium', // Table 鐨勫昂瀵� medium / small / mini
+        showCheckBox: false, // 鏄惁鏄剧ず澶嶉�夋
+        // 宸ュ叿鏉�
+        tools: {
+          columnsCtrl: {
+            // 鍒楁帶鍒舵寜閽�
+            show: false
+          },
+          generalExport: {
+            // 閫氱敤瀵煎嚭鎸夐挳
+            show: false
+          },
+          custom: [] // 鑷畾涔夊伐鍏锋潯鎸夐挳
+        },
+        columns: [], // 鍒楀睘鎬ч厤缃甤ustom
+        operation: {
+          // 鎿嶄綔鍒�
+          show: false, // 鏄剧ず鎿嶄綔鍒�
+          width: '250', // 瀹藉害
+          attr: [], // 鎿嶄綔
+          more: [] // 鏇村
+        },
+        rows: [], // 鍒楄〃鏁版嵁
+        paging: {
+          show: true, // 鏄剧ず鍒嗛〉
+          // 鍒嗛〉淇℃伅
+          page: {
+            small: false,
+            pageNum: 1,
+            pageSize: 10,
+            total: 0
+          }
+        }
+      },
+      checkColumns: [], // 璁板綍鍒楁帶鍒朵腑閫変腑鐨勫垪
+      // 瀵煎嚭鍔熻兘鎵�闇�鍙傛暟
+      visible: false, // 鎺у埗瀵煎嚭琛ㄥ崟鐨勯殣钘�
+      exportParams: {
+        fileName: '',
+        fileFormat: '.xls',
+        page: '2',
+        pageNum: 1,
+        pageSize: 20000
+      },
+      // 瀵煎嚭琛ㄥ崟鏍¢獙
+      rules: {
+        fileName: [{ required: true, validator: validatefileName, trigger: 'blur' }],
+        pageNum: [{ required: true, validator: validatepageNum, trigger: 'blur' }],
+        pageSize: [{ required: true, validator: validatepageSize, trigger: 'blur' }]
+      },
+      timeStamp: new Date().getTime()
+    }
+  },
+  computed: {
+    // 閫氳繃璁$畻灞炴�ц繃婊ゆ帀鍒楄〃涓笉闇�瑕佹樉绀虹殑椤圭洰
+    columnHidden: function() {
+      return this.myTable.columns.filter(function(x) {
+        return x.hidden
+      })
+    },
+    columnNotHidden: function() {
+      return this.myTable.columns.filter(function(x) {
+        return !x.hidden
+      })
+    }
+  },
+  watch: {
+    filter(val) {
+      this.search({ pageNum: 1 })
+    }
+  },
+  created() {
+    const that = this
+    window.onresize = function() {
+      that.timeStamp = new Date().getTime()
+    }
+    this.initTable()
+  },
+  methods: {
+    initTable() {
+      if (this.table !== null) {
+        Object.assign(this.myTable, this.table)
+        if (this.myTable.paging.page === undefined) {
+          this.$set(this.myTable.paging, 'page', {
+            small: false,
+            pageNum: 1,
+            pageSize: 10,
+            total: 0
+          })
+        }
+        this.$nextTick(() => {
+          this.search({ pageNum: 1 })
+        })
+        this.myTable.columns.forEach((column, idx) => {
+          if (!column.hidden) {
+            this.checkColumns.push(idx)
+          }
+        })
+        this.timeStamp = new Date().getTime()
+      }
+    },
+    /*
+		 * @Author : liu.q [916000612@qq.com]
+		 * @Date : 2019-07-17 10:52
+		 * @Description : 鍒楄〃鎼滅储
+		 */
+    search(param) {
+      this.$nextTick(() => {
+        this.myTable.loading = true
+        const params = Object.assign({}, this.filter)
+        if(this.myTable.paging.show){
+          params.pageSize = this.myTable.paging.page.pageSize
+          if (param && param.pageNum) {
+            this.myTable.paging.page.pageNum = param.pageNum
+          }
+          params.pageNum = this.myTable.paging.page.pageNum
+          if (param == undefined) {
+            params.pageNum = 1
+          }
+        }
+
+        request({
+          url: this.myTable.url,
+          method: 'get',
+          params: params
+        }).then(res => {
+          if(this.myTable.paging.show){
+            if (res.datas) {
+              this.$set(this.myTable, 'rows', res.datas)
+            }
+            this.$set(
+              this.myTable.paging,
+              'page',
+              Object.assign(this.myTable.paging.page, {
+                total: res.totalRows
+              })
+            )
+          }else{
+            this.$set(this.myTable, 'rows', res)
+          }
+
+          this.myTable.loading = false
+        })
+      })
+    },
+    /*
+		 * @Author : liu.q [916000612@qq.com]
+		 * @Date : 2019-07-17 10:48
+		 * @Description : 鑾峰彇璁剧疆鍒楄〃寮瑰眰鍐呭
+		 */
+    getPopoverContent(row, column) {
+      if (column.formatterHigh) {
+        return column.formatterHigh(row).value + ''
+      } else if (column.formatter) {
+        return column.formatter(row) + ''
+      } else {
+        return row[column.field] + ''
+      }
+    },
+    /*
+		 * @Author : liu.q [916000612@qq.com]
+		 * @Date : 2019-07-17 11:39
+		 * @Description :鍗曞厓鏍煎唴瀹规牸寮忓寲鏍峰紡
+		 */
+    setStyle(format) {
+      let styles = ''
+      if (format.click != undefined) {
+        styles += 'cursor: pointer;'
+      }
+      if (format.type != undefined) {
+        if (format.type == 'primary') {
+          styles += 'color:#0d997c;'
+        } else if (format.type == 'danger') {
+          styles += 'color:#F56C6C;'
+        } else if (format.type == 'success') {
+          styles += 'color:#67C23A;'
+        } else if (format.type == 'warning') {
+          styles += 'color:#E6A23C;'
+        } else if (format.type == 'info') {
+          styles += 'color:#909399;'
+        }
+      }
+      return styles
+    },
+    /*
+		 * @Author : liu.q [916000612@qq.com]
+		 * @Date : 2019-07-17 12:20
+		 * @Description : formatter 鐐瑰嚮浜嬩欢
+		 */
+    handleClick(format) {
+      if (format.click != undefined) {
+        format.click()
+      }
+    },
+    // 鍙屽嚮浜嬩欢
+    handleDbClick(format) {
+      if (format.dbClick != undefined) {
+        format.dbClick()
+      }
+    },
+    /*
+		 * @Author : liu.q [916000612@qq.com]
+		 * @Date : 2019-07-17 12:21
+		 * @Description : 寮�鍏崇偣鍑讳簨浠�
+		 */
+    switchClick(click) {
+      if (typeof click === 'function') {
+        click()
+      }
+    },
+    /*
+		 * @Author : liu.q [916000612@qq.com]
+		 * @Date : 2019-07-17 14:22
+		 * @Description :鍒囨崲pageSize
+		 */
+    handleSizeChange(pageSize) {
+      this.myTable.paging.page.pageSize = pageSize
+      this.search({ pageNum: 1 })
+    },
+    /*
+		 * @Author : liu.q [916000612@qq.com]
+		 * @Date : 2019-07-17 14:22
+		 * @Description :鍒囨崲pageNum
+		 */
+    handleCurrentChange(pageNum) {
+      this.myTable.paging.page.pageNum = pageNum
+      this.search({ pageNum: pageNum })
+    },
+    /*
+		 * @Author : liu.q [916000612@qq.com]
+		 * @Date : 2019-07-17 14:52
+		 * @Description :鍒楁帶鍒�
+		 */
+    changeColumns() {
+      this.myTable.columns.forEach((column, idx) => {
+        if (this.checkColumns.includes(idx)) {
+          column.hidden = false
+        } else {
+          column.hidden = true
+        }
+        this.$set(this.myTable.columns, idx, column)
+      })
+    },
+    /*
+		 * @Author : liu.q [916000612@qq.com]
+		 * @Date : 2019-07-23 10:44
+		 * @Description : 淇敼瀵煎嚭 pageSize
+		 */
+    changePageSize() {
+      if (this.exportParams.page == 1) {
+        this.exportParams.pageSize = this.myTable.paging.page.pageSize
+      } else if (this.exportParams.page == 2) {
+        this.exportParams.pageSize = 20000
+      }
+    },
+    /*
+		 * @Author : liu.q [916000612@qq.com]
+		 * @Date : 2019-07-17 16:38
+		 * @Description :閫氱敤瀵煎嚭
+		 */
+    _export_() {
+      this.$refs['exportParams'].validate(valid => {
+        if (valid) {
+          // 鍒ゆ柇鎬绘潯鏁版槸鍚﹀ぇ浜庢渶澶ф敮鎸佹潯鏁�
+          if (this.myTable.paging.page.total > 20000) {
+            this.$confirm(`褰撳墠绛涢�夋暟鎹潯鏁�${this.myTable.paging.page.total},鏈�澶ф敮鎸佸鍑烘潯鏁�20000,鏄惁缁х画瀵煎嚭锛焋, '鎻愮ず', {
+              confirmButtonText: '鏄�',
+              cancelButtonText: '鍚�',
+              type: 'warning'
+            })
+              .then(() => {
+                this._export_m()
+              })
+              .catch(() => {
+                this.$message({
+                  type: 'info',
+                  message: '宸插彇娑堝鍑�'
+                })
+                return false
+              })
+          } else {
+            this._export_m()
+          }
+        } else {
+          return false
+        }
+      })
+    },
+    /*
+		 * @Author : liu.q [916000612@qq.com]
+		 * @Date : 2019-07-23 11:22
+		 * @Description : 鐪熸鐨勫鍑�
+		 */
+    _export_m() {
+      const loading = this.$loading({
+        lock: true,
+        text: '姝e湪瀵煎嚭...',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      })
+
+      this.visible = false
+      const params = {}
+      params.url = this.myTable.url
+      const columns = []
+      this.myTable.columns.forEach(c => {
+        if (!c.hidden || c.export) {
+          columns.push({
+            title: c.title,
+            field: c.field
+          })
+        }
+      })
+      params.columns = encodeURI(JSON.stringify(columns))
+      params.filter = encodeURI(
+        JSON.stringify(
+          Object.assign(
+            {
+              pageNum: this.exportParams.pageNum,
+              pageSize: this.exportParams.pageSize
+            },
+            this.filter
+          )
+        )
+      )
+      params.fileName = encodeURI(this.exportParams.fileName)
+      if (this.myTable.tools.generalExport.formatter) {
+        params.formatter = encodeURI(JSON.stringify(this.myTable.tools.generalExport.formatter))
+      }
+
+      request({
+        url: globalConf.baseUrl + '/v1/base/pc/export/generalExport', // 璇锋眰鍦板潃,
+        method: 'post',
+        data: params
+      }).then(response => {
+        if (response.code == 10000) {
+          const link = globalConf.baseUrl + `/v1/base/web/common/downExcel?key=${response.data}`
+          window.location.href = link
+        } else {
+          this.$message({
+            message: '鍝庡憖锛屽嚭鎰忓浜嗐�傘�傘��',
+            type: 'warning'
+          })
+        }
+        loading.close()
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+/*璇︽儏琛ㄥ崟*/
+.demo-table-expand .el-form-item{
+  width: 100%;
+}
+
+/*鍒楄〃鍐呮枃瀛楄繃闀垮姞鐪佺暐*/
+.content-text{
+  overflow:hidden;
+  text-overflow:ellipsis;
+  white-space:nowrap
+}
+
+/*鍒嗛〉涓婅竟璺�*/
+.el-pagination {
+  white-space: nowrap;
+  padding: 2px 5px;
+  color: #303133;
+  font-weight: 700;
+  margin-top: 10px;
+}
+.el-radio {
+  margin-right: 10px;
+}
+.el-radio__label {
+  font-size: 14px;
+  padding-left: 2px !important;
+}
+.el-table__empty-block {
+  margin: 0 auto;
+}
+.table-tool-bar{
+  /*margin-bottom: 15px;*/
+}
+</style>
diff --git a/project-web/src/components/myTree/index.vue b/project-web/src/components/myTree/index.vue
new file mode 100644
index 0000000..81ac3e2
--- /dev/null
+++ b/project-web/src/components/myTree/index.vue
@@ -0,0 +1,177 @@
+<template>
+  <div>
+    <el-input
+      style='margin-bottom: 8px;width:100%'
+      placeholder='鎼滅储'
+      prefix-icon='el-icon-search'
+      v-model='searchValue'
+      clearable>
+    </el-input>
+    <div class='tree-box'>
+      <div class='refresh-btn' v-if='treeList.length>0' @click='refshData'>
+        閲嶇疆<i class='el-icon-refresh'></i>
+      </div>
+      <el-tree
+        ref='tree'
+        :data='treeList'
+        node-key='id'
+        @node-expand='onExpand'
+        @node-click='onSelect'
+        :expand-on-click-node='false'
+        :default-expand-all='autoExpandParent'
+        :filter-node-method='filterNode'
+        :highlight-current='true'
+      >
+        <template slot-scope='{ node, data }'>
+        <span v-if='node.label.indexOf(searchValue) > -1' class='font-14 line-h-30'>
+          {{ node.label.substr(0, node.label.indexOf(searchValue)) }}
+          <span style='color: #0d997c' class='font-14 line-h-30'>{{ searchValue }}</span>
+          {{ node.label.substr(node.label.indexOf(searchValue) + searchValue.length) }}
+        </span>
+          <span v-else>{{ node.label }}</span>
+        </template>
+      </el-tree>
+    </div>
+  </div>
+</template>
+
+<script>
+
+export default {
+  props: {// 绗簩绉嶆柟寮�
+    treeList: {
+      type: Array,
+      default: function() {
+        return [];
+      },
+    },
+  },
+  data() {
+    return {
+      expandedKeys: [],
+      searchValue: '',
+      autoExpandParent: false,
+      dataList: [],
+    };
+  },
+  watch: {
+    searchValue(val) {
+      this.$refs.tree.filter(val);
+    },
+    treeList(curVal) {
+      if (curVal) {
+        this.generateList(curVal);
+        this.treeList = curVal;
+        const rander = (array, param) => {
+          array.forEach(v => {
+            v.scopedSlots = param;
+            if (v.children && v.children.length > 0) {
+              rander(v.children, param);
+            }
+          });
+        };
+        rander(this.treeList, { label: 'label' });
+      }
+    },
+  },
+  methods: {
+    onExpand(expandedKeys) {
+      this.expandedKeys = expandedKeys;
+      this.autoExpandParent = false;
+    },
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.label.indexOf(value) !== -1;
+    },
+    onChange(e) {
+      const value = e;
+      const expandedKeys = this.dataList.map(item => {
+        if (item.label.indexOf(value) > -1) {
+          return this.getParentKey(item.id, this.treeList);
+        }
+        return null;
+      })
+        .filter((item, i, self) => item && self.indexOf(item) === i);
+      Object.assign(this, {
+        expandedKeys,
+        searchValue: value,
+        autoExpandParent: true,
+      });
+    },
+    getParentKey(id, tree) {
+      let parentKey;
+      for (let i = 0; i < tree.length; i++) {
+        const node = tree[i];
+        if (node.children) {
+          if (node.children.some(item => item.id === id)) {
+            parentKey = node.id;
+          } else if (this.getParentKey(id, node.children)) {
+            parentKey = this.getParentKey(id, node.children);
+          }
+        }
+      }
+      return parentKey;
+    },
+    generateList(data) {
+      for (let i = 0; i < data.length; i++) {
+        const node = data[i];
+        const id = node.id;
+        this.dataList.push({ id: id, label: node.label });
+        if (node.children) {
+          this.generateList(node.children);
+        }
+      }
+    },
+    onSelect(selectedNodes) {
+      const param = { id: selectedNodes.id, name: selectedNodes.label };
+      if (selectedNodes.code) {
+        param.code = selectedNodes.code;
+      }
+      this.$emit('setNode', param);
+    },
+    refshData() {
+      this.$refs.tree.setCheckedKeys([]);
+      this.$refs.tree.setCurrentKey(null);
+      this.$forceUpdate();
+      this.$emit('setNode', {});
+    },
+  },
+};
+</script>
+<style scoped>
+/deep/ .el-tree-node__content {
+  font-size: 14px;
+  height: 40px;
+  line-height: 40px;
+}
+
+.font-14 {
+  font-size: 14px;
+}
+
+.tree-box {
+  position: relative;
+  max-height: calc(100vh - 306px);
+  overflow-y: scroll;
+}
+
+.tree-box::-webkit-scrollbar {
+  width: 5px;
+}
+
+.refresh-btn {
+  cursor: pointer;
+  position: absolute;
+  top: 0;
+  right: 0;
+  font-size: 14px;
+  z-index: 101;
+  line-height: 40px;
+  color: #999;
+  text-align: right;
+}
+
+.refresh-btn:hover {
+  color: #0c8aff;
+}
+</style>
diff --git a/project-web/src/components/myTree/satisficingIndex.vue b/project-web/src/components/myTree/satisficingIndex.vue
new file mode 100644
index 0000000..a06c52c
--- /dev/null
+++ b/project-web/src/components/myTree/satisficingIndex.vue
@@ -0,0 +1,137 @@
+<template>
+  <div>
+    <div class="tree-box">
+      <el-tree
+        ref="tree"
+        :data="treeList"
+        node-key="id"
+        :props="{
+           'label':'name'
+        }"
+        @node-expand="onExpand"
+        @node-click="onSelect"
+        :expand-on-click-node="false"
+        :default-expand-all="autoExpandParent"
+        highlight-current="true"
+      >
+      </el-tree>
+    </div>
+  </div>
+</template>
+
+<script>
+
+  export default {
+    props: {// 绗簩绉嶆柟寮�
+      treeList: {
+        type: Array,
+        default: function () {
+          return []
+        }
+      }
+    },
+    data () {
+      return {
+        expandedKeys: [],
+        searchValue: '',
+        autoExpandParent: false,
+        dataList: []
+      }
+    },
+    watch: {
+      treeList (curVal) {
+        if (curVal) {
+          this.generateList(curVal)
+          this.treeList = curVal
+        }
+      }
+    },
+    methods: {
+      onExpand (expandedKeys) {
+        this.expandedKeys = expandedKeys
+        this.autoExpandParent = false
+      },
+      onChange (e) {
+        const value = e
+        const expandedKeys = this.dataList.map(item => {
+            if (item.label.indexOf(value) > -1) {
+              return this.getParentKey(item.id, this.treeList)
+            }
+            return null
+          })
+          .filter((item, i, self) => item && self.indexOf(item) === i)
+        Object.assign(this, {
+          expandedKeys,
+          searchValue: value,
+          autoExpandParent: true
+        })
+      },
+      getParentKey (id, tree) {
+        let parentKey
+        for (let i = 0; i < tree.length; i++) {
+          const node = tree[i]
+          if (node.children) {
+            if (node.children.some(item => item.id === id)) {
+              parentKey = node.id
+            } else if (this.getParentKey(id, node.children)) {
+              parentKey = this.getParentKey(id, node.children)
+            }
+          }
+        }
+        return parentKey
+      },
+      generateList (data) {
+          //id 鍜� 瀵硅薄鑳借幏鍙栧埌
+        for (let i = 0; i < data.length; i++) {
+          const node = data[i]
+          const id = node.id
+            console.log(id+'id')
+            console.log(node.name+'name')
+          this.dataList.push({ id: id, label: node.name })
+        }
+      },
+      onSelect (selectedNodes) {
+          console.log(selectedNodes.id)
+          console.log(selectedNodes.name)
+          const param = { id: selectedNodes.id, name: selectedNodes.name }
+          this.$emit('setNode', param)
+      },
+      refshData(){
+        this.$refs.tree.setCheckedKeys([]);
+        this.$emit('setNode', {})
+      }
+    }
+  }
+</script>
+<style scoped>
+/deep/ .el-tree-node__content{
+  font-size: 14px;
+  height: 40px;
+  line-height: 40px;
+}
+.font-14{
+  font-size: 14px;
+}
+.tree-box{
+  position: relative;
+  max-height: calc(100vh - 306px);
+  overflow-y: scroll;
+}
+.tree-box::-webkit-scrollbar{
+  width: 5px;
+}
+.refresh-btn{
+  cursor: pointer;
+  position: absolute;
+  top:0;
+  right:0;
+  font-size: 14px;
+  z-index: 101;
+  line-height: 40px;
+  color: #999;
+  text-align: right;
+}
+.refresh-btn:hover{
+  color: #0c8aff;
+}
+</style>
diff --git a/project-web/src/components/upload/index.vue b/project-web/src/components/upload/index.vue
new file mode 100644
index 0000000..f54212b
--- /dev/null
+++ b/project-web/src/components/upload/index.vue
@@ -0,0 +1,256 @@
+<template>
+  <div>
+    <el-upload
+      class="upload-demo"
+      :action="defaultSettings.uploadUrl"
+      :multiple="defaultSettings.multiple"
+      name="multipartFile"
+      :accept="defaultSettings.accept"
+      :file-list="showList"
+      :list-type="defaultSettings.type"
+      :limit="defaultSettings.num"
+      :disabled="defaultSettings.disabled"
+      :on-exceed="handleExceed"
+      :on-preview="handlePreview"
+      :on-remove="handleRemove"
+      :before-upload="beforeUpload"
+      :on-success="handleUploadSuccess"
+      :headers="headers"
+      :drag="settings.drag"
+    >
+      <div v-if="settings.type==='picture-card'">
+        <template>
+          <i class="el-icon-plus"></i>
+        </template>
+      </div>
+      <div v-else>
+        <template v-if="settings.drag">
+          <i class="el-icon-upload" />
+          <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
+        </template>
+        <el-button v-if="!settings.drag" size="medium" type="text" plain icon="el-icon-upload">
+          {{ defaultSettings.title }}
+        </el-button>
+      </div>
+      <div v-if="defaultSettings.tip" slot="tip" class="el-upload__tip">{{ defaultSettings.tip }}</div>
+      <div v-else slot="tip" class="el-upload__tip">鍙兘涓婁紶{{ defaultSettings.num }}涓牸寮忎负[{{ defaultSettings.accept }}]鐨勬枃浠讹紝涓斾笉瓒呰繃{{ defaultSettings.max }}M
+      </div>
+    </el-upload>
+    <div id="uploadPreviewImages" style="display:none;">
+      <span
+        v-for="(src,index) in fileList"
+        :key="index"
+      >
+        <img
+          v-if="checkImg(src.name)"
+          class="v-img"
+          :src="src.url"
+          :alt="src.name"
+          style="width: 100px;height: 100px;"
+        >
+      </span>
+    </div>
+  </div>
+</template>
+
+<script>
+import { getToken } from '@/utils/auth'
+import { sessionToken } from '@/settings'
+import { getDownUrl } from '@/utils/base'
+import Viewer from 'viewerjs'
+import 'viewerjs/dist/viewer.css'
+
+let viewer = null
+export default {
+  props: {
+    values: {
+      type: Array,
+      default: function() {
+        return []
+      }
+    },
+    settings: {
+      type: Object,
+      default: function() {
+        return {}
+      }
+    }
+  },
+  data() {
+    return {
+      headers: {},
+      showList: [], // 鐢ㄤ簬璇︽儏灞曠ず
+      fileList: [],
+      defaultSettings: {
+        title: '闄勪欢涓婁紶',
+        max: 100, // 鏈�澶уぇ灏忥紝鍗曚綅M
+        num: 10, // 鏀寔涓婁紶鍥剧墖涓暟
+        accept: '.jpg,.jpeg,.png,.bmp,.pdf,.doc,.docx,.xls,.xlsx,.apk,.zip', // 闄愬埗鏍煎紡
+        tip: '', // 鎻愮ず 榛樿锛歚鍙兘涓婁紶${this.defaultSettings.num}涓�${this.defaultSettings.accept}鏂囦欢锛屼笖涓嶈秴杩�${this.defaultSettings.max}kb`
+        uploadUrl: '', // 涓婁紶璺緞
+        multiple: true, // 鏄惁鏀寔鎵归噺涓婁紶
+        disabled: false, // 鏄惁绂佺敤
+        type: 'text' // text/picture
+      }
+    }
+  },
+  watch: {
+    values(v) {
+      this.fileList = Object.assign([], v)
+      this.showList = Object.assign([], v)
+      this.$nextTick(() => {
+        this.initPreviewImg()
+      })
+    }
+  },
+  created() {
+    this.showList = Object.assign([], this.values)
+    this.fileList = Object.assign([], this.values)
+
+    this.showList.forEach(obj => {
+      obj.url = this.getUrl(obj.path)
+    })
+
+    this.fileList.forEach(obj => {
+      obj.url = this.getUrl(obj.path)
+    })
+
+    this.defaultSettings = Object.assign(this.defaultSettings, this.settings)
+    //
+    // this.$nextTick(() => {
+    //   new Viewer(document.getElementsByClassName('el-upload-list'))
+    // })
+  },
+  mounted() {
+    this.initPreviewImg()
+    this.headers[sessionToken] = getToken()
+  },
+  methods: {
+    handleRemove(file, fileList) {
+      for (let i = 0; i < this.fileList.length; i++) {
+        const img = this.fileList[i]
+        if (file.name == img.name) {
+          this.fileList.splice(i, 1)
+          break
+        }
+      }
+      this.$nextTick(() => {
+        this.$emit('on-change')
+        this.initPreviewImg()
+      })
+    },
+    handleExceed(files, fileList) {
+      this.$message.warning('鏈�澶氫笂浼�' + this.defaultSettings.num + '涓枃浠�')
+    },
+    beforeUpload(file) {
+      let isRepeat = true
+      for (let i = 0; i < this.fileList.length; i++) {
+        const f = this.fileList[i]
+        if (file.name == f.name) {
+          isRepeat = false
+          break
+        }
+      }
+      if (!isRepeat) {
+        this.$message.error('璇ユ枃浠跺凡瀛樺湪!')
+      }
+      const isImg = this.defaultSettings.accept.split(',').indexOf(file.name.substr(file.name.lastIndexOf('.'), file.name.length).toLocaleString()) > -1
+      const isLt2M = file.size / 1024 / 1024 < Number(this.defaultSettings.max)
+      if (!isImg) {
+        this.$message.error('涓婁紶鏂囦欢鏍煎紡鍙兘鏄� ' + this.defaultSettings.accept + ' 鏍煎紡!')
+      }
+      if (!isLt2M) {
+        this.$message.error('涓婁紶鏂囦欢澶у皬涓嶈兘瓒呰繃 ' + this.defaultSettings.max + 'M!' + '褰撳墠鏂囦欢澶у皬锛�' + (file.size / 1024 / 1024).toFixed(2) + 'M')
+      }
+      return isImg && isLt2M && isRepeat
+    },
+    handleUploadSuccess(response, file, fileList) {
+      if (response.code === 1) {
+        response.data.forEach(f => {
+          this.fileList.push({
+            fileType:f.fileExt,
+            id: f.id,
+            name: f.fileName,
+            url: this.getUrl(f.url),
+            path: f.url,
+            attSize: f.fileSize || null
+          })
+        })
+        this.$nextTick(() => {
+          this.$emit('on-change')
+          this.initPreviewImg()
+        })
+      } else {
+        this.$message.warning('涓婁紶澶辫触')
+      }
+    },
+    getContent() {
+      return this.fileList
+    },
+    handlePreview(file) {
+      if (!this.checkImg(file.name)) {
+        return false
+      }
+      let index = 0
+      for (let i = 0; i < this.fileList.length; i++) {
+        const f = this.fileList[i]
+        if (this.checkImg(f.name)) {
+          if (file.id == f.id) {
+            break
+          }
+          index++
+        }
+      }
+      // this.fileList.forEach((f, i) => {
+      //   if (file.uid == f.uid) {
+      //     index = i
+      //   }
+      // })
+      // document.querySelector('#uploadPreviewImages').children[0].click()
+      viewer.view(index)
+    },
+    /*
+     * @Author : liu.q [916000612@qq.com]
+     * @Date : 2019-05-26 14:48
+     * @Description : 鍒濆鍖�
+     */
+    initPreviewImg() {
+      if (viewer != null) {
+        viewer.destroy()
+      }
+      const ViewerDom = document.querySelector('#uploadPreviewImages')
+      viewer = new Viewer(ViewerDom, {
+      })
+      //
+    },
+    /*
+     * @Author : liu.q [916000612@qq.com]
+     * @Date : 2019-05-26 14:48
+     * @Description : 鏍¢獙鍥剧墖
+     */
+    checkImg(name) {
+      const suffix = name.substring(name.lastIndexOf('.'), name.length)
+      const imgArray = ['.jpg', '.jpeg', '.png', '.bmp']
+      if (imgArray.indexOf(suffix) < 0) {
+        return false
+      }
+      return true
+    },
+    getUrl(path) {
+      if (path.substr(0, 7).toLowerCase() == 'http://' || path.substr(0, 8).toLowerCase() == 'https://') {
+        return path
+      } else {
+        return getDownUrl() + path
+      }
+    }
+  }
+}
+</script>
+
+<style scoped>
+  /* 鍥剧墖棰勮灞傜骇*/
+  .viewer-container {
+    z-index: 90709102!important;
+  }
+
+</style>
diff --git a/project-web/src/components/uploadFrom/index.js b/project-web/src/components/uploadFrom/index.js
new file mode 100644
index 0000000..d2a7933
--- /dev/null
+++ b/project-web/src/components/uploadFrom/index.js
@@ -0,0 +1,25 @@
+import Element from 'element-ui';
+import '@/styles/element-variables.scss';
+import uploadFromComponent from './index.vue';
+import Vue from 'vue';
+import Cookies from 'js-cookie';
+
+Vue.use(Element, {
+  size: Cookies.get('size') || 'medium', // set element-ui default size
+});
+const uploadFrom = {};
+uploadFrom.install = function (Vue, options) {
+  const ToastConstructor = Vue.extend(uploadFromComponent);
+  // 鐢熸垚涓�涓瀛愮被鐨勫疄渚�
+  const instance = new ToastConstructor();
+  instance.$mount(document.createElement('div'));
+  document.body.appendChild(instance.$el);
+  Vue.prototype.$modalUpload = function (callback, isMore, modelName, boolean) {
+    instance.visible = true;
+    instance.callback = callback;
+    instance.isMore = isMore; //鏄惁鏄閫�
+    instance.modelName = modelName; //涓婁紶鏂囦欢鍖呭悕瀛�
+    instance.booleanVal = boolean;
+  };
+};
+export default uploadFrom;
diff --git a/project-web/src/components/uploadFrom/index.vue b/project-web/src/components/uploadFrom/index.vue
new file mode 100644
index 0000000..15ce63a
--- /dev/null
+++ b/project-web/src/components/uploadFrom/index.vue
@@ -0,0 +1,46 @@
+<template>
+  <div>
+    <el-dialog
+      title="涓婁紶鍥剧墖"
+      :visible.sync="visible"
+      width="950px"
+      :modal="booleanVal"
+      append-to-body
+      :before-close="handleClose"
+    >
+      <upload-picture v-if="visible" :isMore="isMore" :modelName="modelName" @getImage="getImage"></upload-picture>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'UploadFroms',
+  data() {
+    return {
+      visible: false,
+      callback: function () {},
+      isMore: '',
+      modelName: '',
+      ISmodal: false,
+      booleanVal: false,
+    };
+  },
+  watch: {
+    // show() {
+    //   this.visible = this.show
+    // }
+  },
+  methods: {
+    handleClose() {
+      this.visible = false;
+    },
+    getImage(img) {
+      this.callback(img);
+      this.visible = false;
+    },
+  },
+};
+</script>
+
+<style scoped></style>
diff --git a/project-web/src/components/win/index.vue b/project-web/src/components/win/index.vue
new file mode 100644
index 0000000..19087ef
--- /dev/null
+++ b/project-web/src/components/win/index.vue
@@ -0,0 +1,72 @@
+<template>
+  <!--鍔ㄧ敾-->
+  <transition name="el-fade-in">
+    <el-dialog
+      :title="title"
+      :width="width"
+      :modal="false"
+      :visible.sync="visible"
+      top="150px"
+      :append-to-body="false"
+      :destroy-on-close="true"
+      @close="close"
+    >
+      <div v-loading="loading">
+        <slot/>
+      </div>
+      <div v-if="$slots.footer" slot="footer">
+        <slot name="footer"/>
+      </div>
+    </el-dialog>
+  </transition>
+</template>
+
+<script>
+export default {
+  props: {
+    loading: {
+      type: Boolean,
+      default: false
+    },
+    title: {
+      type: String,
+      default: ''
+    },
+    width: {
+      type: String,
+      default: '50%'
+    }
+  },
+  data() {
+    return {
+      visible: true
+    }
+  },
+  mounted() {
+    try {
+      window.onresize = function () {
+        document.querySelectorAll('.cus-dialog').forEach(v => {
+          v.style.width = document.querySelector('.app-main').clientWidth + 'px'
+          v.style.height = '100%'
+        })
+      }
+      window.onresize()
+    } catch (e) {
+      console.error(e)
+    }
+  },
+  methods: {
+    close() {
+      this.visible = false
+      this.$emit('close')
+    }
+  }
+}
+</script>
+
+<style scoped>
+>>> .el-dialog__body {
+  overflow-y: auto;
+  max-height: calc(100vh - 140px);
+}
+</style>
diff --git a/project-web/src/components/win/win-lg.vue b/project-web/src/components/win/win-lg.vue
new file mode 100644
index 0000000..a98c691
--- /dev/null
+++ b/project-web/src/components/win/win-lg.vue
@@ -0,0 +1,91 @@
+<template>
+  <!--鍔ㄧ敾-->
+  <transition name="el-fade-in">
+    <el-dialog
+      :title="title"
+      :width="'1200px'"
+      :modal="true"
+      :visible.sync="visible"
+      top="15vh"
+      :close-on-click-modal="false"
+      :append-to-body="true"
+      :destroy-on-close="true"
+      @close="close"
+    >
+      <div v-loading="loading">
+        <slot/>
+      </div>
+      <div v-if="$slots.footer" slot="footer">
+        <slot name="footer"/>
+      </div>
+    </el-dialog>
+  </transition>
+</template>
+
+<script>
+export default {
+  props: {
+    loading: {
+      type: Boolean,
+      default: false
+    },
+    title: {
+      type: String,
+      default: ''
+    }
+  },
+  data() {
+    return {
+      visible: true
+    }
+  },
+  mounted() {
+    try {
+      window.onresize = function () {
+        document.querySelectorAll('.cus-dialog').forEach(v => {
+          v.style.width = document.querySelector('.app-main').clientWidth + 'px'
+          v.style.height = '100%'
+        })
+      }
+      window.onresize()
+    } catch (e) {
+      console.error(e)
+    }
+  },
+  methods: {
+    close() {
+      this.visible = false
+      this.$emit('close')
+    }
+  }
+}
+</script>
+
+<style scoped lang="scss">
+>>> .el-dialog__headerbtn{
+  top:13px;
+}
+>>> .el-dialog__header {
+  padding:12px 20px;
+}
+>>> .el-dialog__body {
+  overflow-y: auto;
+  max-height: calc(100vh - 240px);
+  &::-webkit-scrollbar {
+    display: block;
+    width: 4px;
+    height: 10px;
+    border-radius: 2px;
+    background: red;
+  }
+  /* 淇敼婊氬姩鏉$殑杞ㄩ亾鍜屾粦鍧楅鑹� */
+  &::-webkit-scrollbar-track {
+    background: #f1f1f1;
+  }
+  &::-webkit-scrollbar-thumb {
+    background: #999;
+    border-radius: 2px;
+
+  }
+}
+</style>
diff --git a/project-web/src/components/win/win-md.vue b/project-web/src/components/win/win-md.vue
new file mode 100644
index 0000000..3ab8032
--- /dev/null
+++ b/project-web/src/components/win/win-md.vue
@@ -0,0 +1,95 @@
+<template>
+  <!--鍔ㄧ敾-->
+  <transition name="el-fade-in">
+    <el-dialog
+      :title="title"
+      :width="width"
+      :modal="true"
+      :visible.sync="visible"
+      :top="'15vh'"
+      :close-on-click-modal="false"
+      :append-to-body="true"
+      :destroy-on-close="true"
+      @close="close"
+    >
+      <div v-loading="loading">
+        <slot/>
+      </div>
+      <div v-if="$slots.footer" slot="footer">
+        <slot name="footer"/>
+      </div>
+    </el-dialog>
+  </transition>
+</template>
+
+<script>
+export default {
+  props: {
+    loading: {
+      type: Boolean,
+      default: false
+    },
+    width: {
+      type: String,
+      default: '900px'
+    },
+    title: {
+      type: String,
+      default: ''
+    }
+  },
+  data() {
+    return {
+      visible: true
+    }
+  },
+  mounted() {
+    try {
+      window.onresize = function () {
+        document.querySelectorAll('.cus-dialog').forEach(v => {
+          v.style.width = document.querySelector('.app-main').clientWidth + 'px'
+          v.style.height = '100%'
+        })
+      }
+      window.onresize()
+    } catch (e) {
+      console.error(e)
+    }
+  },
+  methods: {
+    close() {
+      this.visible = false
+      this.$emit('close')
+    }
+  }
+}
+</script>
+
+<style scoped lang="scss">
+>>> .el-dialog__headerbtn{
+  top:13px;
+}
+>>> .el-dialog__header {
+  padding:12px 20px;
+}
+>>> .el-dialog__body {
+  overflow-y: auto;
+  max-height: calc(100vh - 340px);
+  &::-webkit-scrollbar {
+    display: block;
+    width: 4px;
+    height: 10px;
+    border-radius: 2px;
+    background: red;
+  }
+  /* 淇敼婊氬姩鏉$殑杞ㄩ亾鍜屾粦鍧楅鑹� */
+  &::-webkit-scrollbar-track {
+    background: #f1f1f1;
+  }
+  &::-webkit-scrollbar-thumb {
+    background: #999;
+    border-radius: 2px;
+
+  }
+}
+</style>
diff --git a/project-web/src/components/win/win-sm.vue b/project-web/src/components/win/win-sm.vue
new file mode 100644
index 0000000..d8ee3ba
--- /dev/null
+++ b/project-web/src/components/win/win-sm.vue
@@ -0,0 +1,75 @@
+<template>
+  <!--鍔ㄧ敾-->
+  <transition name="el-fade-in">
+    <el-dialog
+      :title="title"
+      :width="'540px'"
+      :modal="true"
+      :visible.sync="visible"
+      :top="'15vh'"
+      :close-on-click-modal="false"
+      :append-to-body="true"
+      :destroy-on-close="true"
+      @close="close"
+    >
+      <div v-loading="loading">
+        <slot/>
+      </div>
+      <div v-if="$slots.footer" slot="footer">
+        <slot name="footer"/>
+      </div>
+    </el-dialog>
+  </transition>
+</template>
+
+<script>
+export default {
+  props: {
+    loading: {
+      type: Boolean,
+      default: false
+    },
+    title: {
+      type: String,
+      default: ''
+    }
+  },
+  data() {
+    return {
+      visible: true
+    }
+  },
+  mounted() {
+    try {
+      window.onresize = function () {
+        document.querySelectorAll('.cus-dialog').forEach(v => {
+          v.style.width = document.querySelector('.app-main').clientWidth + 'px'
+          v.style.height = '100%'
+        })
+      }
+      window.onresize()
+    } catch (e) {
+      console.error(e)
+    }
+  },
+  methods: {
+    close() {
+      this.visible = false
+      this.$emit('close')
+    }
+  }
+}
+</script>
+
+<style scoped>
+>>> .el-dialog__headerbtn{
+  top:13px;
+}
+>>> .el-dialog__header {
+  padding:12px 20px;
+}
+>>> .el-dialog__body {
+  overflow-y: auto;
+  max-height: calc(100vh - 340px);
+}
+</style>
diff --git a/project-web/src/components/win2/index.vue b/project-web/src/components/win2/index.vue
new file mode 100644
index 0000000..463664b
--- /dev/null
+++ b/project-web/src/components/win2/index.vue
@@ -0,0 +1,151 @@
+<template>
+  <!--鍔ㄧ敾-->
+  <transition name="el-fade-in">
+    <el-dialog
+      :close-on-press-escape="false"
+      :modal="false"
+      :modal-append-to-body="false"
+      width="100%"
+      :visible.sync="visible"
+      custom-class="cus-dialog2"
+      :show-close="false"
+      center
+      :destroy-on-close="true"
+      @close="close"
+    >
+      <div slot="title">
+        <div class="winTitle">
+          <img src="@/assets/images/project/icon-return.png" alt="杩斿洖" @click="close" class="return-logo" />
+          <span>{{ title }}</span>
+        </div>
+      </div>
+      <div v-loading="loading" :style="{paddingBottom: $slots.footer?'80px !important':0}">
+        <slot />
+      </div>
+      <div v-if="$slots.footer" slot="footer" class="dialog-footer">
+        <slot name="footer" />
+      </div>
+    </el-dialog>
+  </transition>
+</template>
+
+<script>
+export default {
+  props: {
+    loading: {
+      type: Boolean,
+      default: false,
+    },
+    title: {
+      type: String,
+      default: '',
+    },
+  },
+  data() {
+    return {
+      visible: true,
+      width: 0,
+      top: 0,
+    };
+  },
+  // watch:{
+  //  'visible':{
+  //    deep:true,
+  //    immediate:true,
+  //    handle(val){
+  //      console.log(val)
+  //    }
+  //  }
+  // },
+  mounted() {
+    this.show();
+  },
+  // watch:{
+  //   $router(){
+  //     this.close()
+  //   }
+  // },
+  methods: {
+    show() {
+      this.visible = true;
+      try {
+        window.onresize = function () {
+          document.querySelectorAll('.cus-dialog2').forEach((v) => {
+            v.style.width = '100%'
+            v.style.top = '0'
+            v.style.left = 0
+            v.style.marginTop = 0
+          });
+          document.querySelectorAll('.el-dialog__wrapper').forEach((v) => {
+            v.style.width = document.querySelector('.app-main').clientWidth + 'px';
+            v.style.top = '120px';
+            v.style.left = document.querySelector('.app-main').getBoundingClientRect().left  + 'px';
+          });
+
+        };
+        window.onresize();
+      } catch (e) {
+        console.error(e);
+      }
+    },
+    close() {
+      this.visible = false;
+      this.$emit('close');
+    },
+  },
+};
+</script>
+
+<style scoped lang="scss">
+.winTitle {
+  padding: 20px;
+  display: flex;
+  align-items: center;
+  font-size: 18px;
+  font-weight: 600;
+  color:#666666;
+  span {
+    margin-left: 10px;
+  }
+}
+
+>>> .cus-dialog2 > .el-dialog__footer {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  padding: 0;
+  background-color: #fff;
+}
+
+>>> .cus-dialog2 > .el-dialog__header {
+  border: none;
+  padding: 0 !important;
+}
+
+>>> .cus-dialog2 {
+  margin: 0 !important;
+}
+
+>>> .cus-dialog2 > .el-dialog__body {
+  height: calc(100vh - 190px);
+  overflow-y: auto;
+  overflow-x: hidden;
+  padding: 0 !important;
+
+  &::-webkit-scrollbar {
+    width: 0;
+  }
+
+  //婊氬姩鏉¤建閬�
+  &::-webkit-scrollbar-track {
+    width: 0;
+  }
+}
+
+.return-logo {
+  width: 24px;
+  height: 24px;
+  cursor: pointer;
+}
+</style>
diff --git a/project-web/src/directive/copy/copy.js b/project-web/src/directive/copy/copy.js
new file mode 100644
index 0000000..ae49b34
--- /dev/null
+++ b/project-web/src/directive/copy/copy.js
@@ -0,0 +1,75 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import { Message } from 'element-ui';
+
+const vCopy = {
+  // 鍚嶅瓧鐖卞彇鍟ュ彇鍟�
+  /*
+    bind 閽╁瓙鍑芥暟锛岀涓�娆$粦瀹氭椂璋冪敤锛屽彲浠ュ湪杩欓噷鍋氬垵濮嬪寲璁剧疆
+    el: 浣滅敤鐨� dom 瀵硅薄
+    value: 浼犵粰鎸囦护鐨勫�硷紝涔熷氨鏄垜浠 copy 鐨勫��
+  */
+  bind(el, { value }) {
+    el.$value = value; // 鐢ㄤ竴涓叏灞�灞炴�ф潵瀛樹紶杩涙潵鐨勫�硷紝鍥犱负杩欎釜鍊煎湪鍒殑閽╁瓙鍑芥暟閲岃繕浼氱敤鍒�
+    el.handler = () => {
+      if (!el.$value) {
+        // 鍊间负绌虹殑鏃跺�欙紝缁欏嚭鎻愮ず锛屾垜杩欓噷鐨勬彁绀烘槸鐢ㄧ殑 element-ui 鐨勬彁绀猴紝浣犱滑闅忔剰
+        Message.warning('鏃犲鍒跺唴瀹�');
+        return;
+      }
+      // 鍔ㄦ�佸垱寤� textarea 鏍囩
+      const textarea = document.createElement('textarea');
+      // 灏嗚 textarea 璁句负鍙锛屽悓鏃跺皢 textarea 绉诲嚭鍙鍖哄煙
+      textarea.readOnly = 'readonly';
+      textarea.style.position = 'absolute';
+      textarea.style.left = '-9999px';
+      // 灏嗚 copy 鐨勫�艰祴缁� textarea 鏍囩鐨� value 灞炴��
+      textarea.value = el.$value;
+      // 灏� textarea 鎻掑叆鍒� body 涓�
+      document.body.appendChild(textarea);
+      // 閫変腑鍊煎苟澶嶅埗
+      textarea.select();
+      textarea.setSelectionRange(0, textarea.value.length);
+      //灏辨槸鍙互閫氳繃璁剧疆璧峰浜庣粓姝綅缃紝鏉ラ�変腑涓�娈垫枃鏈腑鐨勪竴閮ㄥ垎,杩欓噷鍏跺疄灏辨槸鍏ㄩ��
+      const result = document.execCommand('Copy');
+      //html鍘熺敓鐨勫鍒跺姛鑳�
+      /**
+       * 鎷撳睍
+       * :document.execCommand(鈥漵electAll鈥�) 鍏ㄩ��
+       * :document.execCommand(open) 鎵撳紑
+       * :document.execCommand(saveAs) 鍙﹀瓨涓�
+       */
+      if (result) {
+        Message.success('澶嶅埗鎴愬姛');
+      }
+      document.body.removeChild(textarea);
+      //澶嶅埗鎴愬姛鐒跺悗鍒犻櫎textarea鏍囩
+    };
+    // 缁戝畾鐐瑰嚮浜嬩欢锛屽氨鏄墍璋撶殑涓�閿� copy 鍟�
+    el.addEventListener('click', el.handler);
+  },
+  // 褰撲紶杩涙潵鐨勫�兼洿鏂扮殑鏃跺�欒Е鍙�
+  componentUpdated(el, { value }) {
+    el.$value = value;
+  },
+  // 鎸囦护涓庡厓绱犺В缁戠殑鏃跺�欙紝绉婚櫎浜嬩欢缁戝畾
+  unbind(el) {
+    el.removeEventListener('click', el.handler);
+  },
+};
+
+//浣跨敤绀轰緥 <el-button v-copy="info">澶嶅埗</el-button>
+//data() {
+// return {
+//    info:'瑕佸鍒剁殑鍐呭'
+// }
+
+export default vCopy;
diff --git a/project-web/src/directive/dialog/drag.js b/project-web/src/directive/dialog/drag.js
new file mode 100644
index 0000000..08b8739
--- /dev/null
+++ b/project-web/src/directive/dialog/drag.js
@@ -0,0 +1,68 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+export default {
+  bind(el, binding, vnode, oldVnode) {
+    const value = binding.value;
+    if (value == false) return;
+    // 鑾峰彇鎷栨嫿鍐呭澶撮儴
+    const dialogHeaderEl = el.querySelector('.el-dialog__header');
+    const dragDom = el.querySelector('.el-dialog');
+    dialogHeaderEl.style.cursor = 'move';
+    // 鑾峰彇鍘熸湁灞炴�� ie dom鍏冪礌.currentStyle 鐏嫄璋锋瓕 window.getComputedStyle(dom鍏冪礌, null);
+    const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null);
+    dragDom.style.position = 'absolute';
+    dragDom.style.marginTop = 0;
+    let width = dragDom.style.width;
+    if (width.includes('%')) {
+      width = +document.body.clientWidth * (+width.replace(/\%/g, '') / 100);
+    } else {
+      width = +width.replace(/\px/g, '');
+    }
+    dragDom.style.left = `${(document.body.clientWidth - width) / 2}px`;
+    // 榧犳爣鎸変笅浜嬩欢
+    dialogHeaderEl.onmousedown = (e) => {
+      // 榧犳爣鎸変笅锛岃绠楀綋鍓嶅厓绱犺窛绂诲彲瑙嗗尯鐨勮窛绂� (榧犳爣鐐瑰嚮浣嶇疆璺濈鍙绐楀彛鐨勮窛绂�)
+      const disX = e.clientX - dialogHeaderEl.offsetLeft;
+      const disY = e.clientY - dialogHeaderEl.offsetTop;
+
+      // 鑾峰彇鍒扮殑鍊煎甫px 姝e垯鍖归厤鏇挎崲
+      let styL, styT;
+
+      // 娉ㄦ剰鍦╥e涓� 绗竴娆¤幏鍙栧埌鐨勫�间负缁勪欢鑷甫50% 绉诲姩涔嬪悗璧嬪�间负px
+      if (sty.left.includes('%')) {
+        styL = +document.body.clientWidth * (+sty.left.replace(/\%/g, '') / 100);
+        styT = +document.body.clientHeight * (+sty.top.replace(/\%/g, '') / 100);
+      } else {
+        styL = +sty.left.replace(/\px/g, '');
+        styT = +sty.top.replace(/\px/g, '');
+      }
+
+      // 榧犳爣鎷栨嫿浜嬩欢
+      document.onmousemove = function (e) {
+        // 閫氳繃浜嬩欢濮旀墭锛岃绠楃Щ鍔ㄧ殑璺濈 锛堝紑濮嬫嫋鎷借嚦缁撴潫鎷栨嫿鐨勮窛绂伙級
+        const l = e.clientX - disX;
+        const t = e.clientY - disY;
+
+        let finallyL = l + styL;
+        let finallyT = t + styT;
+
+        // 绉诲姩褰撳墠鍏冪礌
+        dragDom.style.left = `${finallyL}px`;
+        dragDom.style.top = `${finallyT}px`;
+      };
+
+      document.onmouseup = function (e) {
+        document.onmousemove = null;
+        document.onmouseup = null;
+      };
+    };
+  },
+};
diff --git a/project-web/src/directive/dialog/dragHeight.js b/project-web/src/directive/dialog/dragHeight.js
new file mode 100644
index 0000000..222516b
--- /dev/null
+++ b/project-web/src/directive/dialog/dragHeight.js
@@ -0,0 +1,43 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+export default {
+  bind(el) {
+    const dragDom = el.querySelector('.el-dialog');
+    const lineEl = document.createElement('div');
+    lineEl.style =
+      'width: 6px; background: inherit; height: 10px; position: absolute; right: 0; bottom: 0; margin: auto; z-index: 1; cursor: nwse-resize;';
+    lineEl.addEventListener(
+      'mousedown',
+      function (e) {
+        // 榧犳爣鎸変笅锛岃绠楀綋鍓嶅厓绱犺窛绂诲彲瑙嗗尯鐨勮窛绂�
+        const disX = e.clientX - el.offsetLeft;
+        const disY = e.clientY - el.offsetTop;
+        // 褰撳墠瀹藉害 楂樺害
+        const curWidth = dragDom.offsetWidth;
+        const curHeight = dragDom.offsetHeight;
+        document.onmousemove = function (e) {
+          e.preventDefault(); // 绉诲姩鏃剁鐢ㄩ粯璁や簨浠�
+          // 閫氳繃浜嬩欢濮旀墭锛岃绠楃Щ鍔ㄧ殑璺濈
+          const xl = e.clientX - disX;
+          const yl = e.clientY - disY;
+          dragDom.style.width = `${curWidth + xl}px`;
+          dragDom.style.height = `${curHeight + yl}px`;
+        };
+        document.onmouseup = function (e) {
+          document.onmousemove = null;
+          document.onmouseup = null;
+        };
+      },
+      false,
+    );
+    dragDom.appendChild(lineEl);
+  },
+};
diff --git a/project-web/src/directive/dialog/dragWidth.js b/project-web/src/directive/dialog/dragWidth.js
new file mode 100644
index 0000000..e8eebeb
--- /dev/null
+++ b/project-web/src/directive/dialog/dragWidth.js
@@ -0,0 +1,39 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+export default {
+  bind(el) {
+    const dragDom = el.querySelector('.el-dialog');
+    const lineEl = document.createElement('div');
+    lineEl.style =
+      'width: 5px; background: inherit; height: 80%; position: absolute; right: 0; top: 0; bottom: 0; margin: auto; z-index: 1; cursor: w-resize;';
+    lineEl.addEventListener(
+      'mousedown',
+      function (e) {
+        // 榧犳爣鎸変笅锛岃绠楀綋鍓嶅厓绱犺窛绂诲彲瑙嗗尯鐨勮窛绂�
+        const disX = e.clientX - el.offsetLeft;
+        // 褰撳墠瀹藉害
+        const curWidth = dragDom.offsetWidth;
+        document.onmousemove = function (e) {
+          e.preventDefault(); // 绉诲姩鏃剁鐢ㄩ粯璁や簨浠�
+          // 閫氳繃浜嬩欢濮旀墭锛岃绠楃Щ鍔ㄧ殑璺濈
+          const l = e.clientX - disX;
+          dragDom.style.width = `${curWidth + l}px`;
+        };
+        document.onmouseup = function (e) {
+          document.onmousemove = null;
+          document.onmouseup = null;
+        };
+      },
+      false,
+    );
+    dragDom.appendChild(lineEl);
+  },
+};
diff --git a/project-web/src/directive/float.js b/project-web/src/directive/float.js
new file mode 100644
index 0000000..b287ae0
--- /dev/null
+++ b/project-web/src/directive/float.js
@@ -0,0 +1,40 @@
+import Vue from 'vue'
+
+Vue.directive('float', function (el, binding) {
+  const {value} = binding
+  const min = value.min || 0
+  const max = value.max || 9999999
+  const digit = value.digit || 2
+  const _input = el
+  _input.onkeyup = function (e) {
+    let value = e.currentTarget.firstElementChild.value
+    if (value.length == 1) {
+      value = value.replace(/[^1-9]/g, '')
+    } else {
+      if (digit == 1) {
+        value = value.replace(/^0[0-9]+/, val => val[1])
+          .replace(/^(\.)+/, '')
+          .replace(/[^\d.]/g, '')
+          .replace(/\.+/, '.')
+          .replace(/^(\-)*(\d+)\.(\d).*$/, '$1$2.$3')
+      } else {
+        value = value.replace(/^0[0-9]+/, val => val[1])
+          .replace(/^(\.)+/, '')
+          .replace(/[^\d.]/g, '')
+          .replace(/\.+/, '.')
+          .replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3')
+      }
+    }
+    if (min) {
+      if (value < min) {
+        value = min
+      }
+    }
+    if (max) {
+      if (value > max) {
+        value = max
+      }
+    }
+    e.currentTarget.firstElementChild.value = value
+  }
+})
diff --git a/project-web/src/directive/index.js b/project-web/src/directive/index.js
new file mode 100644
index 0000000..4dbc507
--- /dev/null
+++ b/project-web/src/directive/index.js
@@ -0,0 +1,24 @@
+
+import hasRole from './permission/hasRole';
+import hasPermi from './permission/hasPermi';
+import dialogDrag from './dialog/drag';
+import dialogDragWidth from './dialog/dragWidth';
+import dialogDragHeight from './dialog/dragHeight';
+import copy from './copy/copy';
+
+const install = function (Vue) {
+  Vue.directive('hasRole', hasRole);
+  Vue.directive('hasPermi', hasPermi);
+  Vue.directive('dialogDrag', dialogDrag);
+  Vue.directive('dialogDragWidth', dialogDragWidth);
+  Vue.directive('dialogDragHeight', dialogDragHeight);
+  Vue.directive('copy', copy);
+};
+
+if (window.Vue) {
+  window['hasRole'] = hasRole;
+  window['hasPermi'] = hasPermi;
+  Vue.use(install); // eslint-disable-line
+}
+
+export default install;
diff --git a/project-web/src/directive/num.js b/project-web/src/directive/num.js
new file mode 100644
index 0000000..e873f8d
--- /dev/null
+++ b/project-web/src/directive/num.js
@@ -0,0 +1,27 @@
+import Vue from 'vue'
+
+Vue.directive('num', function (el, binding) {
+  const min = binding.value.min
+  const max = binding.value.max
+  const _input = el
+  _input.onkeyup = function (e) {
+    let value = e.currentTarget.firstElementChild.value
+    if (value.length == 1) {
+      value = value.replace(/[^1-9]/g, '')
+    } else {
+      value = value.replace(/[^\d]/g, '')
+    }
+    if (min) {
+      if (value < min) {
+        value = min
+      }
+    }
+    if (max) {
+      if (value > max) {
+        value = max
+      }
+    }
+    e.currentTarget.firstElementChild.value = value
+  }
+
+})
diff --git a/project-web/src/directive/permission/hasPermi.js b/project-web/src/directive/permission/hasPermi.js
new file mode 100644
index 0000000..04be248
--- /dev/null
+++ b/project-web/src/directive/permission/hasPermi.js
@@ -0,0 +1,32 @@
+
+import store from '@/store';
+
+export default {
+  inserted(el, binding, vnode) {
+    // 褰撹缁戝畾鐨勫厓绱犳彃鍏ュ埌 DOM 涓椂鈥︹��
+    const { value } = binding;
+    const all_permission = '*:*:*';
+    //瓒呯鏍囪瘑
+    const permissions = store.getters && store.getters.permissions;
+    //浠巊etters涓彇鍑轰粠鎺ュ彛璇锋眰鍒扮殑鏉冮檺鏍囪瘑鏁扮粍
+    if (value && value instanceof Array && value.length > 0) {
+      //value涓烘寚浠ょ殑缁戝畾鍊硷紝骞朵笖瑕佹眰鏄竴涓潪绌烘暟缁�
+      const permissionFlag = value;
+
+      const hasPermissions = permissions.some((permission) => {
+        //some() 鏂规硶鐢ㄤ簬妫�娴嬫暟缁勪腑鐨勫厓绱犳槸鍚︽弧瓒虫寚瀹氭潯浠讹紙鍑芥暟鎻愪緵锛�
+        //濡傛灉鏄秴绠℃垨鑰呭叾浠栫鐞嗗憳鏈夊搴旂殑鏉冮檺鏍囪瘑
+        return all_permission === permission || permissionFlag.includes(permission);
+        //妫�娴嬫暟缁� permissionFlag 鏄惁鍖呭惈 permission
+      });
+
+      if (!hasPermissions) {
+        el.parentNode && el.parentNode.removeChild(el);
+        //鍚﹀垯灏卞垹闄よ鑺傜偣锛屼綋鐜板湪椤甸潰涓婂氨鏄病鏈夋寜閽搴旂殑鏉冮檺鏍囪瘑灏变笉鏄剧ず璇ユ寜閽�
+      }
+    } else {
+      throw new Error(`璇疯缃搷浣滄潈闄愭爣绛惧�糮);
+      //椤甸潰涓婁娇鐢╲-hasPermi娌℃湁浼犲�肩殑鎯呭喌涓嬬粰鐨勬彁绀�
+    }
+  },
+};
diff --git a/project-web/src/directive/permission/hasRole.js b/project-web/src/directive/permission/hasRole.js
new file mode 100644
index 0000000..8a10828
--- /dev/null
+++ b/project-web/src/directive/permission/hasRole.js
@@ -0,0 +1,24 @@
+
+import store from '@/store';
+
+export default {
+  inserted(el, binding, vnode) {
+    const { value } = binding;
+    const super_admin = 'ROLE_SUPERVISOR';
+    const roles = store.state.user.name;
+
+    if (value && value instanceof Array && value.length > 0) {
+      const roleFlag = value;
+
+      const hasRole = roles.some((role) => {
+        return super_admin === role || roleFlag.includes(role);
+      });
+
+      if (!hasRole) {
+        el.parentNode && el.parentNode.removeChild(el);
+      }
+    } else {
+      throw new Error(`璇疯缃鑹叉潈闄愭爣绛惧��"`);
+    }
+  },
+};
diff --git a/project-web/src/filters/commFilter.js b/project-web/src/filters/commFilter.js
new file mode 100644
index 0000000..0e0a7e2
--- /dev/null
+++ b/project-web/src/filters/commFilter.js
@@ -0,0 +1,269 @@
+
+import * as constants from '@/utils/constants.js';
+import { formatDates } from '@/utils/index';
+
+// 鍏叡杩囨护鍣�
+export function filterEmpty(val) {
+  let _result = '-';
+  if (!val) {
+    return _result;
+  }
+  _result = val;
+  return _result;
+}
+
+// 鏃堕棿杩囨护鍣�
+export function formatDate(time) {
+  if (time !== 0) {
+    const date = new Date(time * 1000);
+    return formatDates(date, 'yyyy-MM-dd hh:mm');
+  }
+}
+
+export function filterYesOrNo(value) {
+  return value ? '鏄�' : '鍚�';
+}
+
+export function filterShowOrHide(value) {
+  return value ? '鏄剧ず' : '涓嶆樉绀�';
+}
+
+export function filterShowOrHideForFormConfig(value) {
+  return value === '鈥�0鈥�' ? '鏄剧ず' : '涓嶆樉绀�';
+}
+
+export function filterYesOrNoIs(value) {
+  return value ? '鍚�' : '鏄�';
+}
+
+export function filterCategroyType(value) {
+  return constants.categoryType.filter((item) => value === item.value)[0].name;
+}
+
+export function filterConfigCategory(value) {
+  return constants.configCategory.filter((item) => value === item.value)[0].label;
+}
+
+/**
+ * @description 鍏紬鍙峰洖澶嶇被鍨�
+ */
+export function keywordStatusFilter(status) {
+  const statusMap = {
+    text: '鏂囧瓧娑堟伅',
+    image: '鍥剧墖娑堟伅',
+    news: '鍥炬枃娑堟伅',
+    voice: '澹伴煶娑堟伅',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 浼樻儬鍒哥被鍨�
+ */
+export function couponUserTypeFilter(status) {
+  const statusMap = {
+    1: '閫氱敤鍒�',
+    2: '鍟嗗搧鍒�',
+    3: '鍝佺被鍒�',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 浼樻儬鍒搁鍙栨柟寮�
+ */
+export function couponTypeFilter(status) {
+  const statusMap = {
+    1: '鎵嬪姩棰嗗彇',
+    2: '鏂颁汉鍒�',
+    3: '璧犻�佸埜',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 鏂囩珷鍒嗙被
+ */
+export function articleTypeFilter(status) {
+  if (!status) {
+    return '';
+  }
+  let arrayList = JSON.parse(localStorage.getItem('articleClass'));
+  if (arrayList.filter((item) => Number(status) === Number(item.id)).length < 1) {
+    return '';
+  }
+  return arrayList.filter((item) => Number(status) === Number(item.id))[0].name;
+}
+
+/**
+ * @description 鏀粯鐘舵��
+ */
+export function payStatusFilter(status) {
+  const statusMap = {
+    false: '鏈敮浠�',
+    true: '宸叉敮浠�',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 鎻愮幇鏂瑰紡
+ */
+export function extractTypeFilter(status) {
+  const statusMap = {
+    bank: '閾惰鍗�',
+    alipay: '鏀粯瀹�',
+    weixin: '寰俊',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 鍏呭�肩被鍨�
+ */
+export function rechargeTypeFilter(status) {
+  const statusMap = {
+    public: '寰俊鍏紬鍙�',
+    weixinh5: '寰俊H5鏀粯',
+    routine: '灏忕▼搴�',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 璐㈠姟瀹℃牳鐘舵��
+ */
+export function extractStatusFilter(status) {
+  const statusMap = {
+    '-1': '宸叉嫆缁�',
+    0: '瀹℃牳涓�',
+    1: '宸叉彁鐜�',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 鐮嶄环鐘舵��
+ */
+export function bargainStatusFilter(status) {
+  const statusMap = {
+    1: '杩涜涓�',
+    2: '鏈畬鎴�',
+    3: '宸叉垚鍔�',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 鐮嶄环鐘舵��
+ */
+export function bargainColorFilter(status) {
+  const statusMap = {
+    1: '',
+    2: 'danger',
+    3: 'success',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 鎷煎洟鐘舵��
+ */
+export function groupStatusFilter(status) {
+  const statusMap = {
+    1: '杩涜涓�',
+    2: '宸叉垚鍔�',
+    3: '鏈畬鎴�',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 鎷煎洟鐘舵��
+ */
+export function groupColorFilter(status) {
+  const statusMap = {
+    1: '',
+    2: 'success',
+    3: 'danger',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 涓�鍙烽�歵ab鍊�
+ */
+export function onePassTypeFilter(status) {
+  const statusMap = {
+    sms: '鐭俊',
+    copy: '鍟嗗搧閲囬泦',
+    expr_query: '鐗╂祦鏌ヨ',
+    expr_dump: '鐢靛瓙闈㈠崟鎵撳嵃',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 绉垎鐘舵��
+ */
+export function integralStatusFilter(status) {
+  const statusMap = {
+    1: '璁㈠崟鍒涘缓',
+    2: '鍐荤粨鏈�',
+    3: '瀹屾垚',
+    4: '澶辨晥',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 鍏宠仈绫诲瀷
+ */
+export function integralLinkTypeFilter(status) {
+  const statusMap = {
+    order: '璁㈠崟',
+    refund: '閫�娆�',
+    sign: '绛惧埌',
+    system: '绯荤粺鎿嶄綔',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 鍏宠仈id
+ */
+export function integralLinkIdFilter(status) {
+  const statusMap = {
+    orderNo: '璁㈠崟鍙�',
+    refundOrderNo: '閫�娆惧崟鍙�',
+    0: '-',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 姘涘洿鍥俱�佹椿鍔ㄨ竟妗嗕娇鐢ㄨ寖鍥寸被鍨�
+ */
+export function activityMethodFilter(status) {
+  const statusMap = {
+    0: '鍏ㄩ儴鍟嗗搧',
+    1: '鎸囧畾鍟嗗搧',
+    2: '鎸囧畾鍝佺墝',
+    3: '鎸囧畾鍟嗗搧鍒嗙被',
+    4: '鎸囧畾鍟嗘埛',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 绉掓潃鍟嗗搧娲诲姩鐘舵��
+ *
+ */
+export function activityStatusFilter(status) {
+  const statusMap = {
+    0: '鏈紑濮�',
+    1: '杩涜涓�',
+    2: '宸茬粨鏉�',
+  };
+  return statusMap[status];
+}
diff --git a/project-web/src/filters/finance.js b/project-web/src/filters/finance.js
new file mode 100644
index 0000000..ccba6c5
--- /dev/null
+++ b/project-web/src/filters/finance.js
@@ -0,0 +1,33 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+//璐㈠姟杩囨护鍣�
+/**
+ * 璧勯噾娴佹按 浜ゆ槗绫诲瀷
+ */
+export function transactionTypeFilter(status) {
+  const statusMap = {
+    pay_order: '璁㈠崟鏀粯',
+    refund_order: '璁㈠崟閫�娆�',
+  };
+  return statusMap[status];
+}
+
+/**
+ * 缁撶畻绫诲瀷
+ */
+export function closingTypeFilter(status) {
+  const statusMap = {
+    bank: '閾惰鍗�',
+    wechat: '寰俊',
+    alipay: '鏀粯瀹�',
+  };
+  return statusMap[status];
+}
diff --git a/project-web/src/filters/index.js b/project-web/src/filters/index.js
new file mode 100644
index 0000000..78342bc
--- /dev/null
+++ b/project-web/src/filters/index.js
@@ -0,0 +1,75 @@
+// import parseTime, formatTime and set to filter
+export { parseTime, formatTime } from '@/utils';
+
+export * from '../filters/commFilter';
+export * from '../filters/user';
+export * from '../filters/order';
+export * from '../filters/wx';
+export * from '../filters/merchant';
+export * from '../filters/product';
+export * from '../filters/finance';
+/**
+ * Show plural label if time is plural number
+ * @param {number} time
+ * @param {string} label
+ * @return {string}
+ */
+function pluralize(time, label) {
+  if (time === 1) {
+    return time + label;
+  }
+  return time + label + 's';
+}
+
+/**
+ * @param {number} time
+ */
+export function timeAgo(time) {
+  const between = Date.now() / 1000 - Number(time);
+  if (between < 3600) {
+    return pluralize(~~(between / 60), ' minute');
+  } else if (between < 86400) {
+    return pluralize(~~(between / 3600), ' hour');
+  } else {
+    return pluralize(~~(between / 86400), ' day');
+  }
+}
+
+/**
+ * Number formatting
+ * like 10000 => 10k
+ * @param {number} num
+ * @param {number} digits
+ */
+export function numberFormatter(num, digits) {
+  const si = [
+    { value: 1e18, symbol: 'E' },
+    { value: 1e15, symbol: 'P' },
+    { value: 1e12, symbol: 'T' },
+    { value: 1e9, symbol: 'G' },
+    { value: 1e6, symbol: 'M' },
+    { value: 1e3, symbol: 'k' },
+  ];
+  for (let i = 0; i < si.length; i++) {
+    if (num >= si[i].value) {
+      return (num / si[i].value).toFixed(digits).replace(/\.0+$|(\.[0-9]*[1-9])0+$/, '$1') + si[i].symbol;
+    }
+  }
+  return num.toString();
+}
+
+/**
+ * 10000 => "10,000"
+ * @param {number} num
+ */
+export function toThousandFilter(num) {
+  return (+num || 0).toString().replace(/^-?\d+/g, (m) => m.replace(/(?=(?!\b)(\d{3})+$)/g, ','));
+}
+
+/**
+ * Upper case first char
+ * @param {String} string
+ */
+export function uppercaseFirst(string) {
+  return string.charAt(0).toUpperCase() + string.slice(1);
+}
diff --git a/project-web/src/filters/merchant.js b/project-web/src/filters/merchant.js
new file mode 100644
index 0000000..0744b55
--- /dev/null
+++ b/project-web/src/filters/merchant.js
@@ -0,0 +1,66 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+//鍟嗘埛杩囨护鍣�
+import store from '@/store';
+
+/**
+ * 鍟嗘埛鍒嗙被
+ */
+export function merCategoryFilter(status) {
+  if (!status) {
+    return '';
+  }
+  let arrayList = store.getters.merchantClassify;
+  let array = arrayList.filter((item) => status === item.id);
+  if (array.length) {
+    return array[0].name;
+  } else {
+    return '';
+  }
+}
+
+/**
+ * 鍟嗛摵绫诲瀷
+ */
+export function merchantTypeFilter(status) {
+  if (!status) {
+    return '';
+  }
+  let arrayList = store.getters.merchantType;
+  let array = arrayList.filter((item) => status === item.id);
+  if (array.length) {
+    return array[0].name;
+  } else {
+    return '';
+  }
+}
+
+/**
+ * 鍟嗘埛鍒涘缓绫诲瀷
+ */
+export function merCreateTypeFilter(status) {
+  const statusMap = {
+    admin: '绠$悊鍛樺垱寤�',
+    apply: '鍟嗘埛鍏ラ┗鐢宠',
+  };
+  return statusMap[status];
+}
+
+/**
+ * 鍟嗘埛绫诲埆
+ */
+export function selfTypeFilter(status) {
+  const statusMap = {
+    true: '鑷惀',
+    false: '闈炶嚜钀�',
+  };
+  return statusMap[status];
+}
diff --git a/project-web/src/filters/order.js b/project-web/src/filters/order.js
new file mode 100644
index 0000000..25193e2
--- /dev/null
+++ b/project-web/src/filters/order.js
@@ -0,0 +1,80 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+//璁㈠崟杩囨护鍣�
+
+/**
+ * @description 鏀粯鐘舵��
+ */
+export function paidFilter(status) {
+  const statusMap = {
+    true: '宸叉敮浠�',
+    false: '鏈敮浠�',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 璁㈠崟鐘舵��
+ * 2,宸叉敹璐э紝寰呰瘎浠�
+ */
+export function orderStatusFilter(status) {
+  const statusMap = {
+    0: '寰呮敮浠�',
+    1: '寰呭彂璐�',
+    2: '閮ㄥ垎鏀惰揣',
+    3: '寰呮牳閿�',
+    4: '寰呮敹璐�',
+    5: '宸叉敹璐�',
+    6: '宸插畬鎴�',
+    9: '宸插彇娑�',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 璁㈠崟涓殑閫�娆剧姸鎬�
+ * 2,宸叉敹璐э紝寰呰瘎浠�
+ */
+export function orderRefundStatusFilter(status) {
+  const statusMap = {
+    0: '鏈��娆�',
+    1: '鐢宠閫�娆句腑',
+    2: '閮ㄥ垎閫�娆�',
+    3: '宸查��娆�',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 閫�娆剧姸鎬�
+ * 2,宸叉敹璐э紝寰呰瘎浠�
+ */
+export function refundStatusFilter(status) {
+  const statusMap = {
+    0: '寰呭鏍�',
+    1: '鎷掔粷閫�娆�',
+    2: '閫�娆句腑',
+    3: '宸查��娆�',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 鏀粯鏂瑰紡
+ */
+export function payTypeFilter(status) {
+  const statusMap = {
+    weixin: '寰俊',
+    alipay: '鏀粯瀹�',
+    yue: '浣欓',
+  };
+  return statusMap[status];
+}
diff --git a/project-web/src/filters/product.js b/project-web/src/filters/product.js
new file mode 100644
index 0000000..a530f29
--- /dev/null
+++ b/project-web/src/filters/product.js
@@ -0,0 +1,77 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+/**
+ * 瀹℃牳鐘舵��
+ */
+export function auditStatusFilter(status) {
+  const statusMap = {
+    0: '鏃犻渶瀹℃牳',
+    1: '寰呭鏍�',
+    2: '瀹℃牳鎴愬姛',
+    3: '瀹℃牳鎷掔粷',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 瑙嗛鍙疯崏绋垮晢鍝佸井淇″鏍哥姸鎬�
+ */
+export function editStatusFilter(status) {
+  const statusMap = {
+    '-1': '杩濊/椋庢帶绯荤粺涓�',
+    '-2': '骞冲彴涓嬫灦',
+    '-3': '鍟嗗涓嬫灦',
+    1: '鏈鏍�',
+    2: '瀹℃牳涓�',
+    3: '瀹℃牳澶辫触',
+    4: '瀹℃牳鎴愬姛',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 瑙嗛鍙疯崏绋垮晢鍝佸钩鍙板鏍哥姸鎬�
+ */
+export function platformStatusFilter(status) {
+  const statusMap = {
+    1: '鏈鏍�',
+    2: '瀹℃牳涓�',
+    3: '瀹℃牳澶辫触',
+    4: '瀹℃牳鎴愬姛',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 瑙嗛鍙锋寮忓晢鍝佺姸鎬�
+ */
+export function videoStatusFilter(status) {
+  const statusMap = {
+    0: '鍒濆鍊�',
+    5: '涓婃灦',
+    11: '鑷富涓嬫灦',
+    13: '杩濊涓嬫灦/椋庢帶绯荤粺涓嬫灦',
+  };
+  return statusMap[status];
+}
+
+/**
+ * @description 瑙嗛鍙� 寰俊鍟嗗搧绫诲瀷璧勮川绫诲瀷
+ */
+export function productQualificationTypeFilter(status) {
+  const statusMap = {
+    0: '涓嶉渶瑕�',
+    1: '蹇呭~',
+    2: '閫夊~',
+    null: '鏃犺姹�',
+  };
+  return statusMap[status];
+}
diff --git a/project-web/src/filters/user.js b/project-web/src/filters/user.js
new file mode 100644
index 0000000..1565d1a
--- /dev/null
+++ b/project-web/src/filters/user.js
@@ -0,0 +1,49 @@
+//浼氬憳杩囨护鍣�
+
+/**
+ * 鐢ㄦ埛娉ㄥ唽绫诲瀷
+ */
+export function registerTypeFilter(status) {
+  const statusMap = {
+    wechat: '鍏紬鍙�',
+    routine: '灏忕▼搴�',
+    h5: 'H5',
+    iosWx: '寰俊ios',
+    androidWx: '寰俊瀹夊崜',
+    ios: 'ios',
+  };
+  return statusMap[status];
+}
+
+/**
+ * 鐢ㄦ埛绫诲瀷
+ */
+export function filterIsPromoter(status) {
+  const statusMap = {
+    true: '鎺ㄥ箍鍛�',
+    false: '鏅�氱敤鎴�',
+  };
+  return statusMap[status];
+}
+
+/**
+ * 鏍囩
+ */
+export function tagFilter(status) {
+  if (!status) {
+    return '-';
+  }
+  let arr = JSON.parse(localStorage.getItem('tagAllList'));
+  let obj = {};
+  for (let i in arr) {
+    obj[arr[i].id] = arr[i];
+  }
+  let strArr = status.split(',');
+  let newArr = [];
+  for (let item of strArr) {
+    if (obj[item]) {
+      newArr.push(obj[item].name);
+    }
+  }
+  return newArr.join(',');
+}
diff --git a/project-web/src/filters/wx.js b/project-web/src/filters/wx.js
new file mode 100644
index 0000000..b3cfad8
--- /dev/null
+++ b/project-web/src/filters/wx.js
@@ -0,0 +1,39 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+//灏忕▼搴� 寰俊杩囨护鍣�
+import Cookies from 'js-cookie';
+/**
+ * @description 灏忕▼搴忔墍灞炵被鐩�
+ */
+export function wxCategoryFilter(status) {
+  if (!status) {
+    return '';
+  }
+  if (!Cookies.get('WxCategory')) {
+    return;
+  }
+  let arrayList = JSON.parse(Cookies.get('WxCategory'));
+  if (arrayList.filter((item) => Number(status) === Number(item.id)).length < 1) {
+    return '';
+  }
+  return arrayList.filter((item) => Number(status) === Number(item.id))[0].name;
+}
+
+/**
+ * @description 灏忕▼搴忔ā鏉跨被鍨�
+ */
+export function wxTypeFilter(status) {
+  const statusMap = {
+    2: '涓�娆℃�ц闃�',
+    3: '闀挎湡璁㈤槄',
+  };
+  return statusMap[status];
+}
diff --git a/project-web/src/icons/index.js b/project-web/src/icons/index.js
new file mode 100644
index 0000000..f69cbfb
--- /dev/null
+++ b/project-web/src/icons/index.js
@@ -0,0 +1,9 @@
+import Vue from 'vue';
+import SvgIcon from '@/components/SvgIcon'; // svg component
+
+// register globally
+Vue.component('svg-icon', SvgIcon);
+
+const req = require.context('./svg', false, /\.svg$/);
+const requireAll = (requireContext) => requireContext.keys().map(requireContext);
+requireAll(req);
diff --git a/project-web/src/icons/svg/404.svg b/project-web/src/icons/svg/404.svg
new file mode 100644
index 0000000..6df5019
--- /dev/null
+++ b/project-web/src/icons/svg/404.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M121.718 73.272v9.953c3.957-7.584 6.199-16.05 6.199-24.995C127.917 26.079 99.273 0 63.958 0 28.644 0 0 26.079 0 58.23c0 .403.028.806.028 1.21l22.97-25.953h13.34l-19.76 27.187h6.42V53.77l13.728-19.477v49.361H22.998V73.272H2.158c5.951 20.284 23.608 36.208 45.998 41.399-1.44 3.3-5.618 11.263-12.565 12.674-8.607 1.764 23.358.428 46.163-13.178 17.519-4.611 31.938-15.849 39.77-30.513h-13.506V73.272H85.02V59.464l22.998-25.977h13.008l-19.429 27.187h6.421v-7.433l13.727-19.402v39.433h-.027zm-78.24 2.822a10.516 10.516 0 0 1-.996-4.535V44.548c0-1.613.332-3.124.996-4.535a11.66 11.66 0 0 1 2.713-3.68c1.134-1.032 2.49-1.864 4.04-2.468 1.55-.605 3.21-.908 4.982-.908h11.292c1.77 0 3.431.303 4.981.908 1.522.604 2.85 1.41 3.986 2.418l-12.26 16.303v-2.898a1.96 1.96 0 0 0-.665-1.512c-.443-.403-.996-.604-1.66-.604-.665 0-1.218.201-1.661.604a1.96 1.96 0 0 0-.664 1.512v9.071L44.364 77.606a10.556 10.556 0 0 1-.886-1.512zm35.73-4.535c0 1.613-.332 3.124-.997 4.535a11.66 11.66 0 0 1-2.712 3.68c-1.134 1.032-2.49 1.864-4.04 2.469-1.55.604-3.21.907-4.982.907H55.185c-1.77 0-3.431-.303-4.981-.907-1.55-.605-2.906-1.437-4.041-2.47a12.49 12.49 0 0 1-1.384-1.512l13.727-18.217v6.375c0 .605.222 1.109.665 1.512.442.403.996.604 1.66.604.664 0 1.218-.201 1.66-.604a1.96 1.96 0 0 0 .665-1.512V53.87L75.97 36.838c.913.932 1.66 1.99 2.214 3.175.664 1.41.996 2.922.996 4.535v27.011h.028z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/bug.svg b/project-web/src/icons/svg/bug.svg
new file mode 100644
index 0000000..05a150d
--- /dev/null
+++ b/project-web/src/icons/svg/bug.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M127.88 73.143c0 1.412-.506 2.635-1.518 3.669-1.011 1.033-2.209 1.55-3.592 1.55h-17.887c0 9.296-1.783 17.178-5.35 23.645l16.609 17.044c1.011 1.034 1.517 2.257 1.517 3.67 0 1.412-.506 2.635-1.517 3.668-.958 1.033-2.155 1.55-3.593 1.55-1.438 0-2.635-.517-3.593-1.55l-15.811-16.063a15.49 15.49 0 0 1-1.196 1.06c-.532.434-1.65 1.208-3.353 2.322a50.104 50.104 0 0 1-5.192 2.974c-1.758.87-3.94 1.658-6.546 2.364-2.607.706-5.189 1.06-7.748 1.06V47.044H58.89v73.062c-2.716 0-5.417-.367-8.106-1.102-2.688-.734-5.003-1.631-6.945-2.692a66.769 66.769 0 0 1-5.268-3.179c-1.571-1.057-2.73-1.94-3.476-2.65L33.9 109.34l-14.611 16.877c-1.066 1.14-2.344 1.711-3.833 1.711-1.277 0-2.422-.434-3.434-1.304-1.012-.978-1.557-2.187-1.635-3.627-.079-1.44.333-2.705 1.236-3.794l16.129-18.51c-3.087-6.197-4.63-13.644-4.63-22.342H5.235c-1.383 0-2.58-.517-3.592-1.55S.125 74.545.125 73.132c0-1.412.506-2.635 1.518-3.668 1.012-1.034 2.21-1.55 3.592-1.55h17.887V43.939L9.308 29.833c-1.012-1.033-1.517-2.256-1.517-3.669 0-1.412.505-2.635 1.517-3.668 1.012-1.034 2.21-1.55 3.593-1.55s2.58.516 3.593 1.55l13.813 14.106h67.396l13.814-14.106c1.012-1.034 2.21-1.55 3.592-1.55 1.384 0 2.581.516 3.593 1.55 1.012 1.033 1.518 2.256 1.518 3.668 0 1.413-.506 2.636-1.518 3.67l-13.814 14.105v23.975h17.887c1.383 0 2.58.516 3.593 1.55 1.011 1.033 1.517 2.256 1.517 3.668l-.005.01zM89.552 26.175H38.448c0-7.23 2.489-13.386 7.466-18.469C50.892 2.623 56.92.082 64 .082c7.08 0 13.108 2.541 18.086 7.624 4.977 5.083 7.466 11.24 7.466 18.469z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/chart.svg b/project-web/src/icons/svg/chart.svg
new file mode 100644
index 0000000..27728fb
--- /dev/null
+++ b/project-web/src/icons/svg/chart.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M0 54.857h36.571V128H0V54.857zM91.429 27.43H128V128H91.429V27.429zM45.714 0h36.572v128H45.714V0z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/clipboard.svg b/project-web/src/icons/svg/clipboard.svg
new file mode 100644
index 0000000..90923ff
--- /dev/null
+++ b/project-web/src/icons/svg/clipboard.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M54.857 118.857h64V73.143H89.143c-1.902 0-3.52-.668-4.855-2.002-1.335-1.335-2.002-2.954-2.002-4.855V36.57H54.857v82.286zM73.143 16v-4.571a2.2 2.2 0 0 0-.677-1.61 2.198 2.198 0 0 0-1.609-.676H20.571c-.621 0-1.158.225-1.609.676a2.198 2.198 0 0 0-.676 1.61V16a2.2 2.2 0 0 0 .676 1.61c.451.45.988.676 1.61.676h50.285c.622 0 1.158-.226 1.61-.677.45-.45.676-.987.676-1.609zm18.286 48h21.357L91.43 42.642V64zM128 73.143v48c0 1.902-.667 3.52-2.002 4.855-1.335 1.335-2.953 2.002-4.855 2.002H52.57c-1.901 0-3.52-.667-4.854-2.002-1.335-1.335-2.003-2.953-2.003-4.855v-11.429H6.857c-1.902 0-3.52-.667-4.855-2.002C.667 106.377 0 104.759 0 102.857v-96c0-1.902.667-3.52 2.002-4.855C3.337.667 4.955 0 6.857 0h77.714c1.902 0 3.52.667 4.855 2.002 1.335 1.335 2.003 2.953 2.003 4.855V30.29c1 .622 1.856 1.29 2.569 2.003l29.147 29.147c1.335 1.335 2.478 3.145 3.429 5.43.95 2.287 1.426 4.383 1.426 6.291v-.018z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/component.svg b/project-web/src/icons/svg/component.svg
new file mode 100644
index 0000000..207ada3
--- /dev/null
+++ b/project-web/src/icons/svg/component.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h54.857v54.857H0V0zm0 73.143h54.857V128H0V73.143zm73.143 0H128V128H73.143V73.143zm27.428-18.286C115.72 54.857 128 42.577 128 27.43 128 12.28 115.72 0 100.571 0 85.423 0 73.143 12.28 73.143 27.429c0 15.148 12.28 27.428 27.428 27.428z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/dashboard.svg b/project-web/src/icons/svg/dashboard.svg
new file mode 100644
index 0000000..5317d37
--- /dev/null
+++ b/project-web/src/icons/svg/dashboard.svg
@@ -0,0 +1 @@
+<svg width="128" height="100" xmlns="http://www.w3.org/2000/svg"><path d="M27.429 63.638c0-2.508-.893-4.65-2.679-6.424-1.786-1.775-3.94-2.662-6.464-2.662-2.524 0-4.679.887-6.465 2.662-1.785 1.774-2.678 3.916-2.678 6.424 0 2.508.893 4.65 2.678 6.424 1.786 1.775 3.94 2.662 6.465 2.662 2.524 0 4.678-.887 6.464-2.662 1.786-1.775 2.679-3.916 2.679-6.424zm13.714-31.801c0-2.508-.893-4.65-2.679-6.424-1.785-1.775-3.94-2.662-6.464-2.662-2.524 0-4.679.887-6.464 2.662-1.786 1.774-2.679 3.916-2.679 6.424 0 2.508.893 4.65 2.679 6.424 1.785 1.774 3.94 2.662 6.464 2.662 2.524 0 4.679-.888 6.464-2.662 1.786-1.775 2.679-3.916 2.679-6.424zM71.714 65.98l7.215-27.116c.285-1.23.107-2.378-.536-3.443-.643-1.064-1.56-1.762-2.75-2.094-1.19-.33-2.333-.177-3.429.462-1.095.639-1.81 1.573-2.143 2.804l-7.214 27.116c-2.857.237-5.405 1.266-7.643 3.088-2.238 1.822-3.738 4.152-4.5 6.992-.952 3.644-.476 7.098 1.429 10.364 1.905 3.265 4.69 5.37 8.357 6.317 3.667.947 7.143.474 10.429-1.42 3.285-1.892 5.404-4.66 6.357-8.305.762-2.84.619-5.607-.429-8.305-1.047-2.697-2.762-4.85-5.143-6.46zm47.143-2.342c0-2.508-.893-4.65-2.678-6.424-1.786-1.775-3.94-2.662-6.465-2.662-2.524 0-4.678.887-6.464 2.662-1.786 1.774-2.679 3.916-2.679 6.424 0 2.508.893 4.65 2.679 6.424 1.786 1.775 3.94 2.662 6.464 2.662 2.524 0 4.679-.887 6.465-2.662 1.785-1.775 2.678-3.916 2.678-6.424zm-45.714-45.43c0-2.509-.893-4.65-2.679-6.425C68.68 10.01 66.524 9.122 64 9.122c-2.524 0-4.679.887-6.464 2.661-1.786 1.775-2.679 3.916-2.679 6.425 0 2.508.893 4.65 2.679 6.424 1.785 1.774 3.94 2.662 6.464 2.662 2.524 0 4.679-.888 6.464-2.662 1.786-1.775 2.679-3.916 2.679-6.424zm32 13.629c0-2.508-.893-4.65-2.679-6.424-1.785-1.775-3.94-2.662-6.464-2.662-2.524 0-4.679.887-6.464 2.662-1.786 1.774-2.679 3.916-2.679 6.424 0 2.508.893 4.65 2.679 6.424 1.785 1.774 3.94 2.662 6.464 2.662 2.524 0 4.679-.888 6.464-2.662 1.786-1.775 2.679-3.916 2.679-6.424zM128 63.638c0 12.351-3.357 23.78-10.071 34.286-.905 1.372-2.19 2.058-3.858 2.058H13.93c-1.667 0-2.953-.686-3.858-2.058C3.357 87.465 0 76.037 0 63.638c0-8.613 1.69-16.847 5.071-24.703C8.452 31.08 13 24.312 18.714 18.634c5.715-5.68 12.524-10.199 20.429-13.559C47.048 1.715 55.333.035 64 .035c8.667 0 16.952 1.68 24.857 5.04 7.905 3.36 14.714 7.88 20.429 13.559 5.714 5.678 10.262 12.446 13.643 20.301 3.38 7.856 5.071 16.09 5.071 24.703z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/documentation.svg b/project-web/src/icons/svg/documentation.svg
new file mode 100644
index 0000000..7043122
--- /dev/null
+++ b/project-web/src/icons/svg/documentation.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M71.984 44.815H115.9L71.984 9.642v35.173zM16.094.05h63.875l47.906 38.37v76.74c0 3.392-1.682 6.645-4.677 9.044-2.995 2.399-7.056 3.746-11.292 3.746H16.094c-4.236 0-8.297-1.347-11.292-3.746-2.995-2.399-4.677-5.652-4.677-9.044V12.84C.125 5.742 7.23.05 16.094.05zm71.86 102.32V89.58h-71.86v12.79h71.86zm23.952-25.58V64H16.094v12.79h95.812z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/drag.svg b/project-web/src/icons/svg/drag.svg
new file mode 100644
index 0000000..4185d3c
--- /dev/null
+++ b/project-web/src/icons/svg/drag.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M73.137 29.08h-9.209 29.7L63.886.093 34.373 29.08h20.49v27.035H27.238v17.948h27.625v27.133h18.274V74.063h27.41V56.115h-27.41V29.08zm-9.245 98.827l27.518-26.711H36.59l27.302 26.71zM.042 64.982l27.196 27.029V38.167L.042 64.982zm100.505-26.815V92.01l27.41-27.029-27.41-26.815z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/edit.svg b/project-web/src/icons/svg/edit.svg
new file mode 100644
index 0000000..d26101f
--- /dev/null
+++ b/project-web/src/icons/svg/edit.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M106.133 67.2a4.797 4.797 0 0 0-4.8 4.8c0 .187.014.36.027.533h-.027V118.4H9.6V26.667h50.133c2.654 0 4.8-2.147 4.8-4.8 0-2.654-2.146-4.8-4.8-4.8H9.6a9.594 9.594 0 0 0-9.6 9.6V118.4c0 5.307 4.293 9.6 9.6 9.6h91.733c5.307 0 9.6-4.293 9.6-9.6V72.533h-.026c.013-.173.026-.346.026-.533 0-2.653-2.146-4.8-4.8-4.8z"/><path d="M125.16 13.373L114.587 2.8c-3.747-3.747-9.854-3.72-13.6.027l-52.96 52.96a4.264 4.264 0 0 0-.907 1.36L33.813 88.533c-.746 1.76-.226 3.534.907 4.68 1.133 1.147 2.92 1.667 4.693.92l31.4-13.293c.507-.213.96-.52 1.36-.907l52.96-52.96c3.747-3.746 3.774-9.853.027-13.6zM66.107 72.4l-18.32 7.76 7.76-18.32L92.72 24.667l10.56 10.56L66.107 72.4zm52.226-52.227l-8.266 8.267-10.56-10.56 8.266-8.267.027-.026 10.56 10.56-.027.026z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/education.svg b/project-web/src/icons/svg/education.svg
new file mode 100644
index 0000000..7bfb01d
--- /dev/null
+++ b/project-web/src/icons/svg/education.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M88.883 119.565c-7.284 0-19.434 2.495-21.333 8.25v.127c-4.232.13-5.222 0-7.108 0-1.895-5.76-14.045-8.256-21.333-8.256H0V0h42.523c9.179 0 17.109 5.47 21.47 13.551C68.352 5.475 76.295 0 85.478 0H128v119.57l-39.113-.005h-.004zM60.442 24.763c0-9.651-8.978-16.507-17.777-16.507H7.108V111.43H39.11c7.054-.14 18.177.082 21.333 6.12v-4.628c-.134-5.722-.004-13.522 0-13.832V27.413l.004-2.655-.004.005zm60.442-16.517h-35.55c-8.802 0-17.78 6.856-17.78 16.493v74.259c.004.32.138 8.115 0 13.813v4.627c3.155-6.022 14.279-6.26 21.333-6.114h32V8.25l-.003-.005z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/email.svg b/project-web/src/icons/svg/email.svg
new file mode 100644
index 0000000..74d25e2
--- /dev/null
+++ b/project-web/src/icons/svg/email.svg
@@ -0,0 +1 @@
+<svg width="128" height="96" xmlns="http://www.w3.org/2000/svg"><path d="M64.125 56.975L120.188.912A12.476 12.476 0 0 0 115.5 0h-103c-1.588 0-3.113.3-4.513.838l56.138 56.137z"/><path d="M64.125 68.287l-62.3-62.3A12.42 12.42 0 0 0 0 12.5v71C0 90.4 5.6 96 12.5 96h103c6.9 0 12.5-5.6 12.5-12.5v-71a12.47 12.47 0 0 0-1.737-6.35L64.125 68.287z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/example.svg b/project-web/src/icons/svg/example.svg
new file mode 100644
index 0000000..46f42b5
--- /dev/null
+++ b/project-web/src/icons/svg/example.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M96.258 57.462h31.421C124.794 27.323 100.426 2.956 70.287.07v31.422a32.856 32.856 0 0 1 25.971 25.97zm-38.796-25.97V.07C27.323 2.956 2.956 27.323.07 57.462h31.422a32.856 32.856 0 0 1 25.97-25.97zm12.825 64.766v31.421c30.46-2.885 54.507-27.253 57.713-57.712H96.579c-2.886 13.466-13.146 23.726-26.292 26.291zM31.492 70.287H.07c2.886 30.46 27.253 54.507 57.713 57.713V96.579c-13.466-2.886-23.726-13.146-26.291-26.292z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/excel.svg b/project-web/src/icons/svg/excel.svg
new file mode 100644
index 0000000..74d97b8
--- /dev/null
+++ b/project-web/src/icons/svg/excel.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M78.208 16.576v8.384h38.72v5.376h-38.72v8.704h38.72v5.376h-38.72v8.576h38.72v5.376h-38.72v8.576h38.72v5.376h-38.72v8.576h38.72v5.376h-38.72v8.512h38.72v5.376h-38.72v11.136H128v-94.72H78.208zM0 114.368L72.128 128V0L0 13.632v100.736z"/><path d="M28.672 82.56h-11.2l14.784-23.488-14.08-22.592h11.52l8.192 14.976 8.448-14.976h11.136l-14.08 22.208L58.368 82.56H46.656l-8.768-15.68z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/exit-fullscreen.svg b/project-web/src/icons/svg/exit-fullscreen.svg
new file mode 100644
index 0000000..485c128
--- /dev/null
+++ b/project-web/src/icons/svg/exit-fullscreen.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M49.217 41.329l-.136-35.24c-.06-2.715-2.302-4.345-5.022-4.405h-3.65c-2.712-.06-4.866 2.303-4.806 5.016l.152 19.164-24.151-23.79a6.698 6.698 0 0 0-9.499 0 6.76 6.76 0 0 0 0 9.526l23.93 23.713-18.345.074c-2.712-.069-5.228 1.813-5.64 5.02v3.462c.069 2.721 2.31 4.97 5.022 5.03l35.028-.207c.052.005.087.025.133.025l2.457.054a4.626 4.626 0 0 0 3.436-1.38c.88-.874 1.205-2.096 1.169-3.462l-.262-2.465c0-.048.182-.081.182-.136h.002zm52.523 51.212l18.32-.073c2.713.06 5.224-1.609 5.64-4.815v-3.462c-.068-2.722-2.317-4.97-5.021-5.04l-34.58.21c-.053 0-.086-.021-.138-.021l-2.451-.06a4.64 4.64 0 0 0-3.445 1.381c-.885.868-1.201 2.094-1.174 3.46l.27 2.46c.005.06-.177.095-.177.141l.141 34.697c.069 2.713 2.31 4.338 5.022 4.397l3.45.006c2.705.062 4.867-2.31 4.8-5.026l-.153-18.752 24.151 23.946a6.69 6.69 0 0 0 9.494 0 6.747 6.747 0 0 0 0-9.523L101.74 92.54v.001zM48.125 80.662a4.636 4.636 0 0 0-3.437-1.382l-2.457.06c-.05 0-.082.022-.137.022l-35.025-.21c-2.712.07-4.957 2.318-5.022 5.04v3.462c.409 3.206 2.925 4.874 5.633 4.814l18.554.06-24.132 23.928c-2.62 2.626-2.62 6.89 0 9.524a6.694 6.694 0 0 0 9.496 0l24.155-23.79-.155 18.866c-.06 2.722 2.094 5.093 4.801 5.025h3.65c2.72-.069 4.962-1.685 5.022-4.406l.141-34.956c0-.05-.182-.082-.182-.136l.262-2.46c.03-1.366-.286-2.592-1.166-3.46h-.001zM80.08 47.397a4.62 4.62 0 0 0 3.443 1.374l2.45-.054c.055 0 .088-.02.143-.028l35.08.21c2.712-.062 4.953-2.312 5.021-5.033l.009-3.463c-.417-3.211-2.937-5.084-5.64-5.025l-18.615-.073 23.917-23.715c2.63-2.623 2.63-6.879.008-9.513a6.691 6.691 0 0 0-9.494 0L92.251 26.016l.155-19.312c.065-2.713-2.097-5.085-4.802-5.025h-3.45c-2.713.069-4.954 1.693-5.022 4.406l-.139 35.247c0 .054.18.088.18.136l-.267 2.465c-.028 1.366.288 2.588 1.174 3.463v.001z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/eye-open.svg b/project-web/src/icons/svg/eye-open.svg
new file mode 100644
index 0000000..88dcc98
--- /dev/null
+++ b/project-web/src/icons/svg/eye-open.svg
@@ -0,0 +1 @@
+<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="128" height="128"><defs><style/></defs><path d="M512 128q69.675 0 135.51 21.163t115.498 54.997 93.483 74.837 73.685 82.006 51.67 74.837 32.17 54.827L1024 512q-2.347 4.992-6.315 13.483T998.87 560.17t-31.658 51.669-44.331 59.99-56.832 64.34-69.504 60.16-82.347 51.5-94.848 34.687T512 896q-69.675 0-135.51-21.163t-115.498-54.826-93.483-74.326-73.685-81.493-51.67-74.496-32.17-54.997L0 513.707q2.347-4.992 6.315-13.483t18.816-34.816 31.658-51.84 44.331-60.33 56.832-64.683 69.504-60.331 82.347-51.84 94.848-34.816T512 128.085zm0 85.333q-46.677 0-91.648 12.331t-81.152 31.83-70.656 47.146-59.648 54.485-48.853 57.686-37.675 52.821-26.325 43.99q12.33 21.674 26.325 43.52t37.675 52.351 48.853 57.003 59.648 53.845T339.2 767.02t81.152 31.488T512 810.667t91.648-12.331 81.152-31.659 70.656-46.848 59.648-54.186 48.853-57.344 37.675-52.651T927.957 512q-12.33-21.675-26.325-43.648t-37.675-52.65-48.853-57.345-59.648-54.186-70.656-46.848-81.152-31.659T512 213.334zm0 128q70.656 0 120.661 50.006T682.667 512 632.66 632.661 512 682.667 391.339 632.66 341.333 512t50.006-120.661T512 341.333zm0 85.334q-35.328 0-60.33 25.002T426.666 512t25.002 60.33T512 597.334t60.33-25.002T597.334 512t-25.002-60.33T512 426.666z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/eye.svg b/project-web/src/icons/svg/eye.svg
new file mode 100644
index 0000000..16ed2d8
--- /dev/null
+++ b/project-web/src/icons/svg/eye.svg
@@ -0,0 +1 @@
+<svg width="128" height="64" xmlns="http://www.w3.org/2000/svg"><path d="M127.072 7.994c1.37-2.208.914-5.152-.914-6.87-2.056-1.717-4.797-1.226-6.396.982-.229.245-25.586 32.382-55.74 32.382-29.24 0-55.74-32.382-55.968-32.627-1.6-1.963-4.57-2.208-6.397-.49C-.17 3.086-.399 6.275 1.2 8.238c.457.736 5.94 7.36 14.62 14.72L4.17 35.96c-1.828 1.963-1.6 5.152.228 6.87.457.98 1.6 1.471 2.742 1.471s2.284-.49 3.198-1.472l12.564-13.983c5.94 4.416 13.021 8.587 20.788 11.53l-4.797 17.418c-.685 2.699.686 5.397 3.198 6.133h1.37c2.057 0 3.884-1.472 4.341-3.68L52.6 42.83c3.655.736 7.538 1.227 11.422 1.227 3.883 0 7.767-.49 11.422-1.227l4.797 17.173c.457 2.208 2.513 3.68 4.34 3.68.457 0 .914 0 1.143-.246 2.513-.736 3.883-3.434 3.198-6.133l-4.797-17.172c7.767-2.944 14.848-7.114 20.788-11.53l12.336 13.738c.913.981 2.056 1.472 3.198 1.472s2.284-.49 3.198-1.472c1.828-1.963 1.828-4.906.228-6.87l-11.65-13.001c9.366-7.36 14.849-14.474 14.849-14.474z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/form.svg b/project-web/src/icons/svg/form.svg
new file mode 100644
index 0000000..dcbaa18
--- /dev/null
+++ b/project-web/src/icons/svg/form.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M84.068 23.784c-1.02 0-1.877-.32-2.572-.96a8.588 8.588 0 0 1-1.738-2.237 11.524 11.524 0 0 1-1.042-2.621c-.232-.895-.348-1.641-.348-2.238V0h.278c.834 0 1.622.085 2.363.256.742.17 1.645.575 2.711 1.214 1.066.64 2.363 1.535 3.892 2.686 1.53 1.15 3.453 2.664 5.77 4.54 2.502 2.045 4.494 3.771 5.977 5.178 1.483 1.406 2.618 2.6 3.406 3.58.787.98 1.274 1.812 1.46 2.494.185.682.277 1.278.277 1.79v2.046H84.068zM127.3 84.01c.278.682.464 1.535.556 2.558.093 1.023-.37 2.003-1.39 2.94-.463.427-.88.832-1.25 1.215-.372.384-.696.704-.974.96a6.69 6.69 0 0 1-.973.767l-11.816-10.741a44.331 44.331 0 0 0 1.877-1.535 31.028 31.028 0 0 1 1.737-1.406c1.112-.938 2.317-1.343 3.615-1.215 1.297.128 2.363.405 3.197.83.927.427 1.923 1.173 2.989 2.239 1.065 1.065 1.876 2.195 2.432 3.388zM78.23 95.902c2.038 0 3.752-.511 5.143-1.534l-26.969 25.83H18.037c-1.761 0-3.684-.47-5.77-1.407a24.549 24.549 0 0 1-5.838-3.709 21.373 21.373 0 0 1-4.518-5.306c-1.204-2.003-1.807-4.07-1.807-6.202V16.495c0-1.79.44-3.665 1.32-5.626A18.41 18.41 0 0 1 5.04 5.562a21.798 21.798 0 0 1 5.213-3.964C12.198.533 14.237 0 16.37 0h53.24v15.984c0 1.62.278 3.367.834 5.242a16.704 16.704 0 0 0 2.572 5.179c1.159 1.577 2.665 2.898 4.518 3.964 1.853 1.066 4.078 1.598 6.673 1.598h20.295v42.325L85.458 92.45c1.02-1.364 1.529-2.856 1.529-4.476 0-2.216-.857-4.113-2.572-5.69-1.714-1.577-3.776-2.366-6.186-2.366H26.1c-2.409 0-4.448.789-6.116 2.366-1.668 1.577-2.502 3.474-2.502 5.69 0 2.217.834 4.092 2.502 5.626 1.668 1.535 3.707 2.302 6.117 2.302h52.13zM26.1 47.951c-2.41 0-4.449.789-6.117 2.366-1.668 1.577-2.502 3.473-2.502 5.69 0 2.216.834 4.092 2.502 5.626 1.668 1.534 3.707 2.302 6.117 2.302h52.13c2.409 0 4.47-.768 6.185-2.302 1.715-1.534 2.572-3.41 2.572-5.626 0-2.217-.857-4.113-2.572-5.69-1.714-1.577-3.776-2.366-6.186-2.366H26.1zm52.407 64.063l1.807-1.663 3.476-3.196a479.75 479.75 0 0 0 4.587-4.284 500.757 500.757 0 0 1 5.004-4.667c3.985-3.666 8.48-7.758 13.485-12.276l11.677 10.741-13.485 12.404-5.004 4.603-4.587 4.22a179.46 179.46 0 0 0-3.267 3.068c-.88.853-1.367 1.322-1.46 1.407-.463.341-.973.703-1.529 1.087-.556.383-1.112.703-1.668.959-.556.256-1.413.575-2.572.959a83.5 83.5 0 0 1-3.545 1.087 72.2 72.2 0 0 1-3.475.895c-1.112.256-1.946.426-2.502.511-1.112.17-1.854.043-2.224-.383-.371-.426-.464-1.151-.278-2.174.092-.511.278-1.279.556-2.302.278-1.023.602-2.067.973-3.132l1.042-3.005c.325-.938.58-1.577.765-1.918a10.157 10.157 0 0 1 2.224-2.941z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/fullscreen.svg b/project-web/src/icons/svg/fullscreen.svg
new file mode 100644
index 0000000..0e86b6f
--- /dev/null
+++ b/project-web/src/icons/svg/fullscreen.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M38.47 52L52 38.462l-23.648-23.67L43.209 0H.035L0 43.137l14.757-14.865L38.47 52zm74.773 47.726L89.526 76 76 89.536l23.648 23.672L84.795 128h43.174L128 84.863l-14.757 14.863zM89.538 52l23.668-23.648L128 43.207V.038L84.866 0 99.73 14.76 76 38.472 89.538 52zM38.46 76L14.792 99.651 0 84.794v43.173l43.137.033-14.865-14.757L52 89.53 38.46 76z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/guide.svg b/project-web/src/icons/svg/guide.svg
new file mode 100644
index 0000000..b271001
--- /dev/null
+++ b/project-web/src/icons/svg/guide.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M1.482 70.131l36.204 16.18 69.932-65.485-61.38 70.594 46.435 18.735c1.119.425 2.397-.17 2.797-1.363v-.085L127.998.047 1.322 65.874c-1.12.597-1.519 1.959-1.04 3.151.32.511.72.937 1.2 1.107zm44.676 57.821L64.22 107.26l-18.062-7.834v28.527z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/icon.svg b/project-web/src/icons/svg/icon.svg
new file mode 100644
index 0000000..82be8ee
--- /dev/null
+++ b/project-web/src/icons/svg/icon.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M115.147.062a13 13 0 0 1 4.94.945c1.55.63 2.907 1.526 4.069 2.688a13.148 13.148 0 0 1 2.761 4.069c.678 1.55 1.017 3.245 1.017 5.086v102.3c0 3.681-1.187 6.733-3.56 9.155-2.373 2.422-5.352 3.633-8.937 3.633H12.992c-3.875 0-7-1.26-9.373-3.779-2.373-2.518-3.56-5.667-3.56-9.445V12.704c0-3.39 1.163-6.345 3.488-8.863C5.872 1.32 8.972.062 12.847.062h102.3zM81.434 109.047c1.744 0 3.003-.412 3.778-1.235.775-.824 1.163-1.914 1.163-3.27 0-1.26-.388-2.325-1.163-3.197-.775-.872-2.034-1.307-3.778-1.307H72.57c.097-.194.145-.485.145-.872V27.09h9.01c1.743 0 2.954-.436 3.633-1.308.678-.872 1.017-1.938 1.017-3.197 0-1.26-.34-2.325-1.017-3.197-.679-.872-1.89-1.308-3.633-1.308H46.268c-1.743 0-2.954.436-3.632 1.308-.678.872-1.018 1.938-1.018 3.197 0 1.26.34 2.325 1.018 3.197.678.872 1.889 1.308 3.632 1.308h8.138v72.075c0 .193.024.339.073.436.048.096.072.242.072.436H46.56c-1.744 0-3.003.435-3.778 1.307-.775.872-1.163 1.938-1.163 3.197 0 1.356.388 2.446 1.163 3.27.775.823 2.034 1.235 3.778 1.235h34.875z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/international.svg b/project-web/src/icons/svg/international.svg
new file mode 100644
index 0000000..e9b56ee
--- /dev/null
+++ b/project-web/src/icons/svg/international.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M83.287 103.01c-1.57-3.84-6.778-10.414-15.447-19.548-2.327-2.444-2.182-4.306-1.338-9.862v-.64c.553-3.81 1.513-6.05 14.313-8.087 6.516-1.018 8.203 1.57 10.589 5.178l.785 1.193a12.625 12.625 0 0 0 6.43 5.207c1.134.524 2.53 1.164 4.421 2.24 4.596 2.53 4.596 5.41 4.596 11.753v.727a26.91 26.91 0 0 1-5.178 17.454 59.055 59.055 0 0 1-19.025 11.026c3.49-6.546.814-14.313 0-16.553l-.146-.087zM64 5.12a58.502 58.502 0 0 1 25.484 5.818 54.313 54.313 0 0 0-12.859 10.327c-.93 1.28-1.716 2.473-2.472 3.579-2.444 3.694-3.637 5.352-5.818 5.614a25.105 25.105 0 0 1-4.219 0c-4.276-.29-10.094-.64-11.956 4.422-1.193 3.23-1.396 11.956 2.444 16.495.66 1.077.778 2.4.32 3.578a7.01 7.01 0 0 1-2.066 3.229 18.938 18.938 0 0 1-2.909-2.91 18.91 18.91 0 0 0-8.32-6.603c-1.25-.349-2.647-.64-3.985-.93-3.782-.786-8.03-1.688-9.019-3.812a14.895 14.895 0 0 1-.727-5.818 21.935 21.935 0 0 0-1.396-9.25 8.873 8.873 0 0 0-5.557-4.946A58.705 58.705 0 0 1 64 5.12zM0 64c0 35.346 28.654 64 64 64 35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/language.svg b/project-web/src/icons/svg/language.svg
new file mode 100644
index 0000000..0082b57
--- /dev/null
+++ b/project-web/src/icons/svg/language.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M84.742 36.8c2.398 7.2 5.595 12.8 11.19 18.4 4.795-4.8 7.992-11.2 10.39-18.4h-21.58zm-52.748 40h20.78l-10.39-28-10.39 28z"/><path d="M111.916 0H16.009C7.218 0 .025 7.2.025 16v96c0 8.8 7.193 16 15.984 16h95.907c8.791 0 15.984-7.2 15.984-16V16c0-8.8-6.394-16-15.984-16zM72.754 103.2c-1.598 1.6-3.197 1.6-4.795 1.6-.8 0-2.398 0-3.197-.8-.8-.8-1.599 0-1.599-.8s-.799-1.6-1.598-3.2c-.8-1.6-.8-2.4-1.599-4l-3.196-8.8H28.797L25.6 96c-1.598 3.2-2.398 5.6-3.197 7.2-.8 1.6-2.398 1.6-4.795 1.6-1.599 0-3.197-.8-4.796-1.6-1.598-1.6-2.397-2.4-2.397-4 0-.8 0-1.6.799-3.2.8-1.6.8-2.4 1.598-4l17.583-44.8c.8-1.6.8-3.2 1.599-4.8.799-1.6 1.598-3.2 2.397-4 .8-.8 1.599-2.4 3.197-3.2 1.599-.8 3.197-.8 4.796-.8 1.598 0 3.196 0 4.795.8 1.598.8 2.398 1.6 3.197 3.2.799.8 1.598 2.4 2.397 4 .8 1.6 1.599 3.2 2.398 5.6l17.583 44c1.598 3.2 2.398 5.6 2.398 7.2-.8.8-1.599 2.4-2.398 4zM116.711 72c-8.791-3.2-15.185-7.2-20.78-12-5.594 5.6-12.787 9.6-21.579 12l-2.397-4c8.791-2.4 15.984-5.6 21.579-11.2C87.939 51.2 83.144 44 81.545 36h-7.992v-3.2h21.58c-1.6-2.4-3.198-5.6-4.796-8l2.397-.8c1.599 2.4 3.997 5.6 5.595 8.8h19.98v4h-7.992c-2.397 8-6.393 15.2-11.189 20 5.595 4.8 11.988 8.8 20.78 11.2l-3.197 4z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/link.svg b/project-web/src/icons/svg/link.svg
new file mode 100644
index 0000000..48197ba
--- /dev/null
+++ b/project-web/src/icons/svg/link.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M115.625 127.937H.063V12.375h57.781v12.374H12.438v90.813h90.813V70.156h12.374z"/><path d="M116.426 2.821l8.753 8.753-56.734 56.734-8.753-8.745z"/><path d="M127.893 37.982h-12.375V12.375H88.706V0h39.187z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/list.svg b/project-web/src/icons/svg/list.svg
new file mode 100644
index 0000000..20259ed
--- /dev/null
+++ b/project-web/src/icons/svg/list.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M1.585 12.087c0 6.616 3.974 11.98 8.877 11.98 4.902 0 8.877-5.364 8.877-11.98 0-6.616-3.975-11.98-8.877-11.98-4.903 0-8.877 5.364-8.877 11.98zM125.86.107H35.613c-1.268 0-2.114 1.426-2.114 2.852v18.255c0 1.712 1.057 2.853 2.114 2.853h90.247c1.268 0 2.114-1.426 2.114-2.853V2.96c0-1.711-1.057-2.852-2.114-2.852zM.106 62.86c0 6.615 3.974 11.979 8.876 11.979 4.903 0 8.877-5.364 8.877-11.98 0-6.616-3.974-11.98-8.877-11.98-4.902 0-8.876 5.364-8.876 11.98zM124.17 50.88H33.921c-1.268 0-2.114 1.425-2.114 2.851v18.256c0 1.711 1.057 2.852 2.114 2.852h90.247c1.268 0 2.114-1.426 2.114-2.852V53.73c0-1.426-.846-2.852-2.114-2.852zM.106 115.913c0 6.616 3.974 11.98 8.876 11.98 4.903 0 8.877-5.364 8.877-11.98 0-6.616-3.974-11.98-8.877-11.98-4.902 0-8.876 5.364-8.876 11.98zm124.064-11.98H33.921c-1.268 0-2.114 1.426-2.114 2.853v18.255c0 1.711 1.057 2.852 2.114 2.852h90.247c1.268 0 2.114-1.426 2.114-2.852v-18.255c0-1.427-.846-2.853-2.114-2.853z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/lock.svg b/project-web/src/icons/svg/lock.svg
new file mode 100644
index 0000000..74fee54
--- /dev/null
+++ b/project-web/src/icons/svg/lock.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M119.88 49.674h-7.987V39.52C111.893 17.738 90.45.08 63.996.08 37.543.08 16.1 17.738 16.1 39.52v10.154H8.113c-4.408 0-7.987 2.94-7.987 6.577v65.13c0 3.637 3.57 6.577 7.987 6.577H119.88c4.407 0 7.987-2.94 7.987-6.577v-65.13c-.008-3.636-3.58-6.577-7.987-6.577zm-23.953 0H32.065V39.52c0-14.524 14.301-26.295 31.931-26.295 17.63 0 31.932 11.777 31.932 26.295v10.153z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/message.svg b/project-web/src/icons/svg/message.svg
new file mode 100644
index 0000000..14ca817
--- /dev/null
+++ b/project-web/src/icons/svg/message.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M0 20.967v59.59c0 11.59 8.537 20.966 19.075 20.966h28.613l1 26.477L76.8 101.523h32.125c10.538 0 19.075-9.377 19.075-20.966v-59.59C128 9.377 119.463 0 108.925 0h-89.85C8.538 0 0 9.377 0 20.967zm82.325 33.1c0-5.524 4.013-9.935 9.037-9.935 5.026 0 9.038 4.41 9.038 9.934 0 5.524-4.025 9.934-9.038 9.934-5.024 0-9.037-4.41-9.037-9.934zm-27.613 0c0-5.524 4.013-9.935 9.038-9.935s9.037 4.41 9.037 9.934c0 5.524-4.025 9.934-9.037 9.934-5.025 0-9.038-4.41-9.038-9.934zm-27.1 0c0-5.524 4.013-9.935 9.038-9.935s9.038 4.41 9.038 9.934c0 5.524-4.026 9.934-9.05 9.934-5.013 0-9.025-4.41-9.025-9.934z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/money.svg b/project-web/src/icons/svg/money.svg
new file mode 100644
index 0000000..c1580de
--- /dev/null
+++ b/project-web/src/icons/svg/money.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M54.122 127.892v-28.68H7.513V87.274h46.609v-12.4H7.513v-12.86h38.003L.099 0h22.6l32.556 45.07c3.617 5.144 6.44 9.611 8.487 13.385 1.788-3.05 4.89-7.779 9.301-14.186L103.93 0h24.01L82.385 62.013h38.34v12.862h-46.41v12.4h46.41v11.937h-46.41v28.68H54.123z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/nested.svg b/project-web/src/icons/svg/nested.svg
new file mode 100644
index 0000000..06713a8
--- /dev/null
+++ b/project-web/src/icons/svg/nested.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M.002 9.2c0 5.044 3.58 9.133 7.998 9.133 4.417 0 7.997-4.089 7.997-9.133 0-5.043-3.58-9.132-7.997-9.132S.002 4.157.002 9.2zM31.997.066h95.981V18.33H31.997V.066zm0 45.669c0 5.044 3.58 9.132 7.998 9.132 4.417 0 7.997-4.088 7.997-9.132 0-3.263-1.524-6.278-3.998-7.91-2.475-1.63-5.524-1.63-7.998 0-2.475 1.632-4 4.647-4 7.91zM63.992 36.6h63.986v18.265H63.992V36.6zm-31.995 82.2c0 5.043 3.58 9.132 7.998 9.132 4.417 0 7.997-4.089 7.997-9.132 0-5.044-3.58-9.133-7.997-9.133s-7.998 4.089-7.998 9.133zm31.995-9.131h63.986v18.265H63.992V109.67zm0-27.404c0 5.044 3.58 9.133 7.998 9.133 4.417 0 7.997-4.089 7.997-9.133 0-3.263-1.524-6.277-3.998-7.909-2.475-1.631-5.524-1.631-7.998 0-2.475 1.632-4 4.646-4 7.91zm31.995-9.13h31.991V91.4H95.987V73.135z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/password.svg b/project-web/src/icons/svg/password.svg
new file mode 100644
index 0000000..e291d85
--- /dev/null
+++ b/project-web/src/icons/svg/password.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M108.8 44.322H89.6v-5.36c0-9.04-3.308-24.163-25.6-24.163-23.145 0-25.6 16.881-25.6 24.162v5.361H19.2v-5.36C19.2 15.281 36.798 0 64 0c27.202 0 44.8 15.281 44.8 38.961v5.361zm-32 39.356c0-5.44-5.763-9.832-12.8-9.832-7.037 0-12.8 4.392-12.8 9.832 0 3.682 2.567 6.808 6.407 8.477v11.205c0 2.718 2.875 4.962 6.4 4.962 3.524 0 6.4-2.244 6.4-4.962V92.155c3.833-1.669 6.393-4.795 6.393-8.477zM128 64v49.201c0 8.158-8.645 14.799-19.2 14.799H19.2C8.651 128 0 121.359 0 113.201V64c0-8.153 8.645-14.799 19.2-14.799h89.6c10.555 0 19.2 6.646 19.2 14.799z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/pdf.svg b/project-web/src/icons/svg/pdf.svg
new file mode 100644
index 0000000..957aa0c
--- /dev/null
+++ b/project-web/src/icons/svg/pdf.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="128" height="128"><path d="M869.073 277.307H657.111V65.344l211.962 211.963zm-238.232 26.27V65.344l-476.498-.054v416.957h714.73v-178.67H630.841zm-335.836 360.57c-5.07-3.064-10.944-5.133-17.61-6.201-6.67-1.064-13.603-1.6-20.81-1.6h-48.821v85.641h48.822c7.206 0 14.14-.532 20.81-1.6 6.665-1.065 12.54-3.133 17.609-6.202 5.064-3.063 9.134-7.406 12.208-13.007 3.065-5.602 4.6-12.937 4.6-22.011 0-9.07-1.535-16.408-4.6-22.01-3.074-5.603-7.144-9.94-12.208-13.01zM35.82 541.805v416.904h952.358V541.805H35.821zm331.421 191.179c-3.6 11.071-9.343 20.879-17.209 29.413-7.874 8.542-18.078 15.408-30.617 20.61-12.544 5.206-27.747 7.807-45.621 7.807h-66.036v102.45h-62.831V607.517h128.867c17.874 0 33.077 2.6 45.62 7.802 12.541 5.207 22.745 12.076 30.618 20.615 7.866 8.538 13.604 18.277 17.21 29.212 3.6 10.943 5.401 22.278 5.401 34.018 0 11.477-1.8 22.752-5.402 33.819zM644.9 806.417c-5.343 17.61-13.408 32.818-24.212 45.627-10.807 12.803-24.283 22.879-40.423 30.213-16.146 7.343-35.155 11.007-57.03 11.007h-123.26V607.518h123.26c18.41 0 35.552 2.941 51.428 8.808 15.873 5.869 29.618 14.671 41.22 26.412 11.608 11.744 20.674 26.411 27.217 44.02 6.535 17.61 9.803 38.288 9.803 62.035 0 20.81-2.67 40.02-8.003 57.624zm245.362-146.07h-138.07v66.03h119.66v48.829h-119.66v118.058h-62.83V607.518h200.9v52.829h-.001zm-318.2 25.611c-6.402-8.266-14.877-14.604-25.412-19.01-10.544-4.402-23.551-6.602-39.019-6.602h-44.825v180.088h56.029c9.07 0 17.872-1.463 26.415-4.401 8.535-2.932 16.14-7.802 22.812-14.609 6.665-6.8 12.007-15.667 16.007-26.61 4.003-10.94 6.003-24.275 6.003-40.021 0-14.408-1.4-27.416-4.202-39.019-2.8-11.607-7.406-21.542-13.808-29.816zm0 0"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/people.svg b/project-web/src/icons/svg/people.svg
new file mode 100644
index 0000000..2bd54ae
--- /dev/null
+++ b/project-web/src/icons/svg/people.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M104.185 95.254c8.161 7.574 13.145 17.441 13.145 28.28 0 1.508-.098 2.998-.285 4.466h-10.784c.238-1.465.403-2.948.403-4.465 0-8.983-4.36-17.115-11.419-23.216C86 104.66 75.355 107.162 64 107.162c-11.344 0-21.98-2.495-31.22-6.83-7.064 6.099-11.444 14.218-11.444 23.203 0 1.517.165 3 .403 4.465H10.955a35.444 35.444 0 0 1-.285-4.465c0-10.838 4.974-20.713 13.127-28.291C9.294 85.42.003 70.417.003 53.58.003 23.99 28.656.001 64 .001s63.997 23.988 63.997 53.58c0 16.842-9.299 31.85-23.812 41.673zM64 36.867c-29.454 0-53.33-10.077-53.33 15.342 0 25.418 23.876 46.023 53.33 46.023 29.454 0 53.33-20.605 53.33-46.023 0-25.419-23.876-15.342-53.33-15.342zm24.888 25.644c-3.927 0-7.111-2.665-7.111-5.953 0-3.288 3.184-5.954 7.11-5.954 3.928 0 7.111 2.666 7.111 5.954s-3.183 5.953-7.11 5.953zm-3.556 16.372c0 4.11-9.55 7.442-21.332 7.442-11.781 0-21.332-3.332-21.332-7.442 0-1.06.656-2.064 1.8-2.976 3.295 2.626 10.79 4.465 19.532 4.465 8.743 0 16.237-1.84 19.531-4.465 1.145.912 1.801 1.916 1.801 2.976zm-46.22-16.372c-3.927 0-7.11-2.665-7.11-5.953 0-3.288 3.183-5.954 7.11-5.954 3.927 0 7.111 2.666 7.111 5.954s-3.184 5.953-7.11 5.953z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/peoples.svg b/project-web/src/icons/svg/peoples.svg
new file mode 100644
index 0000000..aab852e
--- /dev/null
+++ b/project-web/src/icons/svg/peoples.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M95.648 118.762c0 5.035-3.563 9.121-7.979 9.121H7.98c-4.416 0-7.979-4.086-7.979-9.121C0 100.519 15.408 83.47 31.152 76.75c-9.099-6.43-15.216-17.863-15.216-30.987v-9.128c0-20.16 14.293-36.518 31.893-36.518s31.894 16.358 31.894 36.518v9.122c0 13.137-6.123 24.556-15.216 30.993 15.738 6.726 31.141 23.769 31.141 42.012z"/><path d="M106.032 118.252h15.867c3.376 0 6.101-3.125 6.101-6.972 0-13.957-11.787-26.984-23.819-32.123 6.955-4.919 11.638-13.66 11.638-23.704v-6.985c0-15.416-10.928-27.926-24.39-27.926-1.674 0-3.306.193-4.89.561 1.936 4.713 3.018 9.974 3.018 15.526v9.121c0 13.137-3.056 23.111-11.066 30.993 14.842 4.41 27.312 23.42 27.541 41.509z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/qq.svg b/project-web/src/icons/svg/qq.svg
new file mode 100644
index 0000000..ee13d4e
--- /dev/null
+++ b/project-web/src/icons/svg/qq.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M18.448 57.545l-.244-.744-.198-.968-.132-.53v-2.181l.236-.859.24-.908.317-.953.428-1.06.561-1.103.794-1.104v-.773l.077-.724.123-.984.34-1.106.313-1.194.25-.548.289-.511.371-.569.405-.423v-2.73l.234-1.407.236-1.633.42-1.955.577-2.035.43-1.118.426-1.217.468-1.135.559-1.216.57-1.332.655-1.247.737-1.331.929-1.33.43-.762.457-.624.995-1.406 1.025-1.403 1.163-1.444 1.246-1.405 1.352-1.384 1.41-1.423 1.708-1.536 1.083-.934 1.322-1.008 1.34-.89 1.448-.855 1.392-.76 1.57-.63 1.667-.775 1.657-.532 1.653-.552 1.787-.548 1.785-.417 1.876-.347L59.128.68l1.879-.245 1.876-.252 2.002-.106h5.912l1.97.243 1.981.231 2.019.207 1.874.441 1.979.413 1.857.475 2.035.53 1.862.646 1.782.738 1.904.78 1.736.853 1.689.95 1.655 1.044 1.425.971.662.548.693.401 1.323 1.1 1.115 1.064 1.112 1.1 1.083 1.214.894 1.178 1.064 1.217.74 1.306.752 1.162.798 1.352.661 1.175 1.113 2.489.546 1.286.428 1.192.428 1.294.384 1.217.267 1.047.347 1.231.607 2.198.388 1.924.253 1.861.217 1.497.342 2.28.077.362.274.41.737 1.18.473.8.42.832.534.892.472 1.07.307 1.093.334 1.2.252 1.232.115.605.106.746v.648l-.106.643v.8l-.192.774-.35 1.5-.403.76-.299.852v.213l.142.264.4.623 1.746 2.53 1.377 1.9.66 1.267.889 1.389.774 1.52.893 1.627.894 1.828 1.006 2.069.567 1.268.518 1.239.447 1.307.44 1.175.336 1.235.342 1.16.432 2.261.343 2.31.235 2.05v2.891l-.158 1.025-.226 1.768-.308 1.59-.48 1.44-.18.588-.336.707-.28.493-.375.607-.33.383-.42.494-.375.4-.401.34-.48.207-.432.207-.355.114h-.543l-.346-.114-.66-.32-.302-.212-.317-.223-.347-.304-.35-.342-.579-.63-.684-.89-.539-.917-.538-.734-.526-.855-.741-1.517-.833-1.579-.098-.055h-.138l-.338.247-.196.415-.326.516-.567 1.533-.856 2.182-1.096 2.626-.824 1.308-.864 1.366-1.027 1.536-1.09 1.503-.557.68-.676.743-1.555 1.497.136.135.21.214.777.446 3.235 1.524 1.41.779 1.347.756 1.332.953 1.187.982.574.443.432.511.445.593.367.643.198.533.242.64.105.554.115.647-.115.433v.44l-.105.454-.242.415-.092.325-.22.394-.587.784-.543.627-.42.47-.35.348-.893.638-1.01.556-1.077.532-1.155.511-1.287.495-.693.207-.608.167-1.496.342-1.545.325-1.552.323-1.689.27-1.74.072-1.785.21h-5.539l-1.998-.114-1.86-.168-2.005-.27-1.99-.209-2.095-.286-2.03-.495-1.981-.374-1.968-.552-2.019-.707-1.98-.585-1.044-.342-.927-.323-.586-.223-.582-.12h-1.647l-1.904-.131-.962-.096-1.24-.135-.795.705-1.085.665-1.471.701-1.628.875-.99.475-1.033.376-2.281.914-1.24.305-1.3.343-1.803.344-1.13.086-1.193.1-1.246.135-1.45.053h-5.926l-3.346-.053-3.25-.321-1.644-.23-1.589-.23-1.546-.227-1.547-.305-1.442-.456-1.434-.325-1.294-.51-1.223-.474-1.142-.533-.99-.583-.984-.71-.336-.343-.44-.415-.334-.362-.3-.417-.278-.415-.215-.42-.311-.89-.109-.46-.138-.51v-.473l.138-.533v-.53l.109-.53v-1.069l.052-.564.259-.647.215-.646.39-.779.286-.3.236-.348.615-.738.49-.38.464-.266.428-.338.676-.21.543-.324.676-.341.77-.227.775-.231.897-.192.85-.11 1.008-.13 1.093-.081.284-.092h.063l.137-.115v-.13l-.2-.266-.58-.27-1.45-1.231-.975-.761-1.127-.967-1.136-1.082-1.181-1.382-1.36-1.558-.508-.843-.672-.87-.58-1.007-.522-1.1-.704-1.047-.459-1.194-.547-1.192-.546-1.33-.397-1.273-.378-1.575-.112-.057h-.115l-.059-.113h-.14l-.23.113-.114.057-.158.264-.057.321-.119.286-.206.477-.664 1.157-.345.701-.546.612-.58.736-.641.816-.677.724-.795.701-.734.658-.814.524-.89.546-.855.325-1.008.247-.99.095h-.233l-.228-.095-.18-.384-.29-.188-.38-.912-.237-.493-.255-.707-.21-.734-.113-.724-.313-1.648-.12-.972v-3.185l.12-2.379.196-1.214.23-1.252.21-1.347.374-1.254.42-1.443.431-1.407.578-1.448.545-1.38.754-1.4.699-1.52.855-1.425 1.006-1.538 1.023-1.382 1.069-1.538.891-1.071 1.142-1.227 1.202-1.237.56-.59.678-.662.985-.836 1.012-.853 1.647-1.446 1.242-.889z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/search.svg b/project-web/src/icons/svg/search.svg
new file mode 100644
index 0000000..84233dd
--- /dev/null
+++ b/project-web/src/icons/svg/search.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M124.884 109.812L94.256 79.166c-.357-.357-.757-.629-1.129-.914a50.366 50.366 0 0 0 8.186-27.59C101.327 22.689 78.656 0 50.67 0 22.685 0 0 22.688 0 50.663c0 27.989 22.685 50.663 50.656 50.663 10.186 0 19.643-3.03 27.6-8.201.286.385.557.771.9 1.114l30.628 30.632a10.633 10.633 0 0 0 7.543 3.129c2.728 0 5.457-1.043 7.543-3.115 4.171-4.157 4.171-10.915.014-15.073M50.671 85.338C31.557 85.338 16 69.78 16 50.663c0-19.102 15.557-34.661 34.67-34.661 19.115 0 34.657 15.559 34.657 34.675 0 19.102-15.557 34.661-34.656 34.661"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/shopping.svg b/project-web/src/icons/svg/shopping.svg
new file mode 100644
index 0000000..87513e7
--- /dev/null
+++ b/project-web/src/icons/svg/shopping.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M42.913 101.36c1.642 0 3.198.332 4.667.996a12.28 12.28 0 0 1 3.89 2.772c1.123 1.184 1.987 2.582 2.592 4.193.605 1.612.908 3.318.908 5.118 0 1.8-.303 3.507-.908 5.118-.605 1.611-1.469 3.01-2.593 4.194a13.3 13.3 0 0 1-3.889 2.843 10.582 10.582 0 0 1-4.667 1.066c-1.729 0-3.306-.355-4.732-1.066a13.604 13.604 0 0 1-3.825-2.843c-1.123-1.185-1.988-2.583-2.593-4.194a14.437 14.437 0 0 1-.907-5.118c0-1.8.302-3.506.907-5.118.605-1.61 1.47-3.009 2.593-4.193a12.515 12.515 0 0 1 3.825-2.772c1.426-.664 3.003-.996 4.732-.996zm53.932.285c1.643 0 3.22.331 4.733.995a11.386 11.386 0 0 1 3.889 2.772c1.08 1.185 1.945 2.583 2.593 4.194.648 1.61.972 3.317.972 5.118 0 1.8-.324 3.506-.972 5.117-.648 1.611-1.513 3.01-2.593 4.194a12.253 12.253 0 0 1-3.89 2.843 11 11 0 0 1-4.732 1.066 10.58 10.58 0 0 1-4.667-1.066 12.478 12.478 0 0 1-3.824-2.843c-1.08-1.185-1.945-2.583-2.593-4.194a13.581 13.581 0 0 1-.973-5.117c0-1.801.325-3.507.973-5.118.648-1.611 1.512-3.01 2.593-4.194a11.559 11.559 0 0 1 3.824-2.772 11.212 11.212 0 0 1 4.667-.995zm21.781-80.747c2.42 0 4.3.355 5.64 1.066 1.34.71 2.29 1.587 2.852 2.63a6.427 6.427 0 0 1 .778 3.34c-.044 1.185-.195 2.204-.454 3.057-.26.853-.8 2.606-1.62 5.26a589.268 589.268 0 0 1-2.788 8.743 1236.373 1236.373 0 0 0-3.047 9.453c-.994 3.128-1.75 5.592-2.269 7.393-1.123 3.79-2.55 6.42-4.278 7.89-1.728 1.469-3.846 2.203-6.352 2.203H39.023l1.945 12.795h65.342c4.148 0 6.223 1.943 6.223 5.828 0 1.896-.41 3.53-1.232 4.905-.821 1.374-2.442 2.061-4.862 2.061H38.505c-1.729 0-3.176-.426-4.343-1.28-1.167-.852-2.14-1.966-2.917-3.34a21.277 21.277 0 0 1-1.88-4.478 44.128 44.128 0 0 1-1.102-4.55c-.087-.568-.324-1.942-.713-4.122-.39-2.18-.865-4.904-1.426-8.174l-1.88-10.947c-.692-4.027-1.383-8.079-2.075-12.154-1.642-9.572-3.5-20.234-5.574-31.986H6.87c-1.296 0-2.377-.356-3.24-1.067a9.024 9.024 0 0 1-2.14-2.558 10.416 10.416 0 0 1-1.167-3.2C.108 8.53 0 7.488 0 6.54c0-1.896.583-3.46 1.75-4.69C2.917.615 4.494 0 6.482 0h13.095c1.728 0 3.111.284 4.148.853 1.037.569 1.858 1.28 2.463 2.132a8.548 8.548 0 0 1 1.297 2.701c.26.948.475 1.754.648 2.417.173.758.346 1.825.519 3.199.173 1.374.345 2.772.518 4.193.26 1.706.519 3.507.778 5.403h88.678z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/size.svg b/project-web/src/icons/svg/size.svg
new file mode 100644
index 0000000..ddb25b8
--- /dev/null
+++ b/project-web/src/icons/svg/size.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M0 54.857h54.796v18.286H36.531V128H18.265V73.143H0V54.857zm127.857-36.571H91.935V128H72.456V18.286H36.534V0h91.326l-.003 18.286z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/skill.svg b/project-web/src/icons/svg/skill.svg
new file mode 100644
index 0000000..a3b7312
--- /dev/null
+++ b/project-web/src/icons/svg/skill.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M31.652 93.206h33.401c1.44 2.418 3.077 4.663 4.93 6.692h-38.33v-6.692zm0-10.586h28.914a44.8 44.8 0 0 1-1.264-6.688h-27.65v6.688zm0-17.27H59.39c.288-2.286.714-4.532 1.34-6.687H31.65v6.687h.003zm53.913 44.84v5.85c0 2.798-2.095 5.075-4.667 5.075h-70.07c-2.576 0-4.663-2.277-4.663-5.075V31.26l23.22-20.96v22.25H17.16v6.688h18.39V6.688h45.348c2.576 0 4.667 2.277 4.667 5.066v20.009c1.987-.675 4.053-1.128 6.17-1.445v-18.56C91.738 5.28 86.874 0 80.902 0H31.15L0 28.118v87.917c0 6.48 4.859 11.759 10.832 11.759h70.07c5.974 0 10.837-5.27 10.837-11.759v-4.41c-2.117-.312-4.183-.765-6.17-1.435h-.004zM23.279 58.667h-7.96v6.688h7.96v-6.688zm-7.956 41.23h7.96v-6.691h-7.96v6.692zm7.956-23.96h-7.96v6.687h7.96v-6.688zm89.718-15.042l-4.896-4.07-12.447 17.613-11.19-9.305-3.762 5.311 16.091 13.38 16.204-22.929zM128 70.978c0-18.632-13.97-33.782-31.147-33.782-17.168 0-31.135 15.155-31.135 33.782 0 18.628 13.97 33.783 31.135 33.783 17.172 0 31.143-15.15 31.143-33.783H128zm-6.17 0c0 14.933-11.203 27.1-24.981 27.1-13.77 0-24.987-12.158-24.987-27.1 0-14.941 11.195-27.099 24.987-27.099 13.778 0 24.982 12.158 24.982 27.1z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/star.svg b/project-web/src/icons/svg/star.svg
new file mode 100644
index 0000000..6cf86e6
--- /dev/null
+++ b/project-web/src/icons/svg/star.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M70.66 4.328l14.01 29.693c1.088 2.29 3.177 3.882 5.603 4.25l31.347 4.76c6.087.926 8.528 8.756 4.117 13.247L103.05 79.395c-1.75 1.78-2.544 4.352-2.132 6.867l5.352 32.641c1.043 6.337-5.33 11.182-10.778 8.19l-28.039-15.409a7.13 7.13 0 0 0-6.91 0l-28.039 15.41c-5.448 2.99-11.821-1.854-10.777-8.19l5.352-32.642c.415-2.515-.387-5.088-2.136-6.867L2.264 56.278C-2.146 51.787.286 43.957 6.38 43.031l31.343-4.76c2.419-.368 4.51-1.96 5.595-4.25L57.334 4.328c2.728-5.77 10.605-5.77 13.325 0z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/tab.svg b/project-web/src/icons/svg/tab.svg
new file mode 100644
index 0000000..b4b48e4
--- /dev/null
+++ b/project-web/src/icons/svg/tab.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M78.921.052H49.08c-1.865 0-3.198 1.599-3.198 3.464v6.661c0 1.865 1.6 3.464 3.198 3.464h29.84c1.865 0 3.198-1.599 3.198-3.464V3.516C82.385 1.65 80.786.052 78.92.052zm45.563 0H94.642c-1.865 0-3.464 1.599-3.464 3.464v6.661c0 1.865 1.599 3.464 3.464 3.464h29.842c1.865-.266 3.464-1.599 3.464-3.464V3.516c0-1.865-1.599-3.464-3.464-3.464zm0 22.382H40.02c-1.866 0-3.464-1.599-3.464-3.464V3.516c0-1.865-1.599-3.464-3.464-3.464H3.516C1.65.052.052 1.651.052 3.516V124.75c0 1.598 1.599 3.197 3.464 3.197h120.968c1.865 0 3.464-1.599 3.464-3.464V25.898c0-1.865-1.599-3.464-3.464-3.464z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/table.svg b/project-web/src/icons/svg/table.svg
new file mode 100644
index 0000000..0e3dc9d
--- /dev/null
+++ b/project-web/src/icons/svg/table.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M.006.064h127.988v31.104H.006V.064zm0 38.016h38.396v41.472H.006V38.08zm0 48.384h38.396v41.472H.006V86.464zM44.802 38.08h38.396v41.472H44.802V38.08zm0 48.384h38.396v41.472H44.802V86.464zM89.598 38.08h38.396v41.472H89.598zm0 48.384h38.396v41.472H89.598z"/><path d="M.006.064h127.988v31.104H.006V.064zm0 38.016h38.396v41.472H.006V38.08zm0 48.384h38.396v41.472H.006V86.464zM44.802 38.08h38.396v41.472H44.802V38.08zm0 48.384h38.396v41.472H44.802V86.464zM89.598 38.08h38.396v41.472H89.598zm0 48.384h38.396v41.472H89.598z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/theme.svg b/project-web/src/icons/svg/theme.svg
new file mode 100644
index 0000000..5982a2f
--- /dev/null
+++ b/project-web/src/icons/svg/theme.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M125.5 36.984L95.336 2.83C93.735 1.018 91.565 0 89.3 0c-2.263 0-4.433 1.018-6.033 2.83l-3.786 4.286c-1.6 1.812-3.77 2.83-6.032 2.831H54.553c-2.263 0-4.434-1.018-6.033-2.83L44.734 2.83C43.134 1.018 40.964 0 38.701 0c-2.263 0-4.434 1.018-6.034 2.83L2.5 36.984C.9 38.796 0 41.254 0 43.815c0 2.562.899 5.02 2.5 6.831L14.565 64.31c2.178 2.468 5.367 3.403 8.33 2.444 1.35-.435 2.709.592 2.709 2.18v49.407c0 5.313 3.84 9.66 8.532 9.66h59.726c4.693 0 8.532-4.347 8.532-9.66V68.934c0-1.59 1.36-2.616 2.71-2.181 2.962.96 6.15.024 8.329-2.444L125.5 50.646c1.6-1.811 2.499-4.269 2.499-6.83 0-2.563-.899-5.02-2.5-6.832z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/tree-table.svg b/project-web/src/icons/svg/tree-table.svg
new file mode 100644
index 0000000..8aafdb8
--- /dev/null
+++ b/project-web/src/icons/svg/tree-table.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M44.8 0h79.543C126.78 0 128 1.422 128 4.267v23.466c0 2.845-1.219 4.267-3.657 4.267H44.8c-2.438 0-3.657-1.422-3.657-4.267V4.267C41.143 1.422 42.362 0 44.8 0zm22.857 48h56.686c2.438 0 3.657 1.422 3.657 4.267v23.466c0 2.845-1.219 4.267-3.657 4.267H67.657C65.22 80 64 78.578 64 75.733V52.267C64 49.422 65.219 48 67.657 48zm0 48h56.686c2.438 0 3.657 1.422 3.657 4.267v23.466c0 2.845-1.219 4.267-3.657 4.267H67.657C65.22 128 64 126.578 64 123.733v-23.466C64 97.422 65.219 96 67.657 96zM50.286 68.267c2.02 0 3.657-1.91 3.657-4.267 0-2.356-1.638-4.267-3.657-4.267H17.37V32h6.4c2.02 0 3.658-1.91 3.658-4.267V4.267C27.429 1.91 25.79 0 23.77 0H3.657C1.637 0 0 1.91 0 4.267v23.466C0 30.09 1.637 32 3.657 32h6.4v80c0 2.356 1.638 4.267 3.657 4.267h36.572c2.02 0 3.657-1.91 3.657-4.267 0-2.356-1.638-4.267-3.657-4.267H17.37V68.267h32.915z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/tree.svg b/project-web/src/icons/svg/tree.svg
new file mode 100644
index 0000000..dd4b7dd
--- /dev/null
+++ b/project-web/src/icons/svg/tree.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M126.713 90.023c.858.985 1.287 2.134 1.287 3.447v29.553c0 1.423-.429 2.6-1.287 3.53-.858.93-1.907 1.395-3.146 1.395H97.824c-1.145 0-2.146-.465-3.004-1.395-.858-.93-1.287-2.107-1.287-3.53V93.47c0-.875.19-1.696.572-2.462.382-.766.906-1.368 1.573-1.806a3.84 3.84 0 0 1 2.146-.657h9.725V69.007a3.84 3.84 0 0 0-.43-1.806 3.569 3.569 0 0 0-1.143-1.313 2.714 2.714 0 0 0-1.573-.492h-36.47v23.149h9.725c1.144 0 2.145.492 3.004 1.478.858.985 1.287 2.134 1.287 3.447v29.553c0 .876-.191 1.696-.573 2.463-.38.766-.905 1.368-1.573 1.806a3.84 3.84 0 0 1-2.145.656H51.915a3.84 3.84 0 0 1-2.145-.656c-.668-.438-1.216-1.04-1.645-1.806a4.96 4.96 0 0 1-.644-2.463V93.47c0-1.313.43-2.462 1.288-3.447.858-.986 1.907-1.478 3.146-1.478h9.582v-23.15h-37.9c-.953 0-1.74.356-2.359 1.068-.62.711-.93 1.56-.93 2.544v19.538h9.726c1.239 0 2.264.492 3.074 1.478.81.985 1.216 2.134 1.216 3.447v29.553c0 1.423-.405 2.6-1.216 3.53-.81.93-1.835 1.395-3.074 1.395H4.29c-.476 0-.93-.082-1.358-.246a4.1 4.1 0 0 1-1.144-.657 4.658 4.658 0 0 1-.93-1.067 5.186 5.186 0 0 1-.643-1.395 5.566 5.566 0 0 1-.215-1.56V93.47c0-.437.048-.875.143-1.313a3.95 3.95 0 0 1 .429-1.15c.19-.328.429-.656.715-.984.286-.329.572-.602.858-.821.286-.22.62-.383 1.001-.493.382-.11.763-.164 1.144-.164h9.726V61.619c0-.985.31-1.833.93-2.544.619-.712 1.358-1.068 2.216-1.068h44.335V39.62h-9.582c-1.24 0-2.288-.492-3.146-1.477a5.09 5.09 0 0 1-1.287-3.448V5.14c0-1.423.429-2.627 1.287-3.612.858-.985 1.907-1.477 3.146-1.477h25.743c.763 0 1.478.246 2.145.739a5.17 5.17 0 0 1 1.573 1.888c.382.766.573 1.587.573 2.462v29.553c0 1.313-.43 2.463-1.287 3.448-.859.985-1.86 1.477-3.004 1.477h-9.725v18.389h42.762c.954 0 1.74.355 2.36 1.067.62.711.93 1.56.93 2.545v26.925h9.582c1.239 0 2.288.492 3.146 1.478z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/user.svg b/project-web/src/icons/svg/user.svg
new file mode 100644
index 0000000..0ba0716
--- /dev/null
+++ b/project-web/src/icons/svg/user.svg
@@ -0,0 +1 @@
+<svg width="130" height="130" xmlns="http://www.w3.org/2000/svg"><path d="M63.444 64.996c20.633 0 37.359-14.308 37.359-31.953 0-17.649-16.726-31.952-37.359-31.952-20.631 0-37.36 14.303-37.358 31.952 0 17.645 16.727 31.953 37.359 31.953zM80.57 75.65H49.434c-26.652 0-48.26 18.477-48.26 41.27v2.664c0 9.316 21.608 9.325 48.26 9.325H80.57c26.649 0 48.256-.344 48.256-9.325v-2.663c0-22.794-21.605-41.271-48.256-41.271z" stroke="#979797"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/wechat.svg b/project-web/src/icons/svg/wechat.svg
new file mode 100644
index 0000000..c586e55
--- /dev/null
+++ b/project-web/src/icons/svg/wechat.svg
@@ -0,0 +1 @@
+<svg width="128" height="110" xmlns="http://www.w3.org/2000/svg"><path d="M86.635 33.334c1.467 0 2.917.113 4.358.283C87.078 14.392 67.58.111 45.321.111 20.44.111.055 17.987.055 40.687c0 13.104 6.781 23.863 18.115 32.209l-4.527 14.352 15.82-8.364c5.666 1.182 10.207 2.395 15.858 2.395 1.42 0 2.829-.073 4.227-.189-.886-3.19-1.398-6.53-1.398-9.996 0-20.845 16.98-37.76 38.485-37.76zm-24.34-12.936c3.407 0 5.665 2.363 5.665 5.954 0 3.576-2.258 5.97-5.666 5.97-3.392 0-6.795-2.395-6.795-5.97 0-3.591 3.403-5.954 6.795-5.954zM30.616 32.323c-3.393 0-6.818-2.395-6.818-5.971 0-3.591 3.425-5.954 6.818-5.954 3.392 0 5.65 2.363 5.65 5.954 0 3.576-2.258 5.97-5.65 5.97z"/><path d="M127.945 70.52c0-19.075-18.108-34.623-38.448-34.623-21.537 0-38.5 15.548-38.5 34.623 0 19.108 16.963 34.622 38.5 34.622 4.508 0 9.058-1.2 13.584-2.395l12.414 7.167-3.404-11.923c9.087-7.184 15.854-16.712 15.854-27.471zm-50.928-5.97c-2.254 0-4.53-2.362-4.53-4.773 0-2.378 2.276-4.771 4.53-4.771 3.422 0 5.665 2.393 5.665 4.771 0 2.41-2.243 4.773-5.665 4.773zm24.897 0c-2.24 0-4.498-2.362-4.498-4.773 0-2.378 2.258-4.771 4.498-4.771 3.392 0 5.665 2.393 5.665 4.771 0 2.41-2.273 4.773-5.665 4.773z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svg/zip.svg b/project-web/src/icons/svg/zip.svg
new file mode 100644
index 0000000..f806fc4
--- /dev/null
+++ b/project-web/src/icons/svg/zip.svg
@@ -0,0 +1 @@
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M78.527 116.793c.178.008.348.024.527.024h40.233c4.711-.005 8.53-3.677 8.534-8.21V18.895c-.004-4.532-3.823-8.204-8.534-8.209H79.054c-.179 0-.353.016-.527.024V0L0 10.082v107.406l78.527 10.342v-11.037zm0-101.362c.174-.024.348-.052.527-.052h40.233c2.018 0 3.659 1.578 3.659 3.52v89.713c-.003 1.942-1.64 3.517-3.659 3.519H79.054c-.179 0-.353-.028-.527-.052V15.431zM30.262 75.757l-18.721-.46V72.37l11.3-16.673v-.148l-10.266.164v-4.51l17.504-.44v3.264L18.696 70.76v.144l11.566.176v4.678zm9.419.231l-5.823-.144V50.671l5.823-.144v25.461zm22.255-11.632c-2.168 1.922-5.353 2.76-9.02 2.736-.702.004-1.402-.04-2.097-.131v9.303l-5.997-.148V50.743c1.852-.352 4.473-.647 8.218-.743 3.838-.096 6.608.539 8.48 1.913 1.807 1.306 3.032 3.5 3.032 6.112s-.926 4.833-2.612 6.331h-.004zM53.36 54.45c-.856-.01-1.71.083-2.541.275v7.682c.523.116 1.167.152 2.06.152 3.301-.004 5.36-1.614 5.36-4.314 0-2.425-1.772-3.843-4.875-3.791l-.004-.004zm39.847-37.066h9.564v3.795h-9.564v-3.795zm-9.568 5.68h9.564v3.8h-9.564v-3.8zm9.568 6.216h9.564v3.799h-9.564V29.28zm0 12h9.564v3.794h-9.564V41.28zm-9.568-6.096h9.564v3.795h-9.564v-3.795zm9.472 47.064c2.512 0 4.921-.96 6.697-2.67 1.776-1.708 2.773-4.026 2.772-6.442l-1.748-15.263c0-5.033-2.492-9.112-7.725-9.112-5.232 0-7.72 4.079-7.72 9.112l-1.752 15.263c-.001 2.417.996 4.735 2.773 6.444 1.777 1.71 4.187 2.669 6.7 2.668h.003zm-3.135-16.75h6.27v12.743h-6.27V65.5z"/></svg>
\ No newline at end of file
diff --git a/project-web/src/icons/svgo.yml b/project-web/src/icons/svgo.yml
new file mode 100644
index 0000000..541b4bb
--- /dev/null
+++ b/project-web/src/icons/svgo.yml
@@ -0,0 +1,21 @@
+# replace default config
+
+# multipass: true
+# full: true
+
+plugins:
+  # - name
+  #
+  # or:
+  # - name: false
+  # - name: true
+  #
+  # or:
+  # - name:
+  #     param1: 1
+  #     param2: 2
+
+  - removeAttrs:
+      attrs:
+        - 'fill'
+        - 'fill-rule'
diff --git a/project-web/src/layout/components/AppMain.vue b/project-web/src/layout/components/AppMain.vue
new file mode 100644
index 0000000..3ff485b
--- /dev/null
+++ b/project-web/src/layout/components/AppMain.vue
@@ -0,0 +1,50 @@
+<template>
+  <section class="app-main">
+    <transition name="fade-transform" mode="out-in">
+      <keep-alive :include="cachedViews">
+        <router-view :key="key" />
+      </keep-alive>
+    </transition>
+  </section>
+</template>
+
+<script>
+export default {
+  name: 'AppMain',
+  data() {
+    return {};
+  },
+  computed: {
+    cachedViews() {
+      return this.$store.state.tagsView.cachedViews;
+    },
+    key() {
+      return this.$route.path;
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.app-main {
+  /* 50= navbar  50  */
+  height: calc(100vh - 130px);
+  width: 100%;
+  position: relative;
+  overflow-x: hidden;
+  overflow-y: auto;
+  background: #f5f5f5;
+}
+
+
+.hasTagsView {
+  .fixed-header + .app-main {
+    //padding-top: 80px;
+  }
+}
+.el-popup-parent--hidden {
+  .fixed-header {
+    padding-right: 15px;
+  }
+}
+</style>
diff --git a/project-web/src/layout/components/Navbar.vue b/project-web/src/layout/components/Navbar.vue
new file mode 100644
index 0000000..052dffb
--- /dev/null
+++ b/project-web/src/layout/components/Navbar.vue
@@ -0,0 +1,340 @@
+<template>
+  <div class="navbar navbar-yw">
+    <div style="display: flex;align-items: center">
+      <img class="logo" src="@/assets/images/logo.png" alt=""/>
+      <img class="logo-txt" src="@/assets/images/top-title.png" alt=""/>
+    </div>
+    <div class="right-menu">
+      <div class="menu-item" @click="dataV">
+        <img class="icon" src="@/assets/images/icon-datav.png" alt="鏁版嵁鐪嬫澘" title="鏁版嵁鐪嬫澘">
+      </div>
+      <div class="user">
+        <img class="avatar" :src="userInfo&&userInfo.avatar?ftpUrl+userInfo.avatar:require('@/assets/images/40b2.jpeg')" alt="">
+        <div>
+          <el-dropdown>
+            <div class="user-name">{{ name }}<i class="el-icon-arrow-down"/></div>
+            <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item>
+                <div @click="$router.push('/userInfo')">涓汉淇℃伅</div>
+              </el-dropdown-item>
+              <!--              <el-dropdown-item>淇敼瀵嗙爜</el-dropdown-item>-->
+              <el-dropdown-item>
+                <div @click="logout">閫�鍑�</div>
+              </el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
+          <div v-if="userInfo && userInfo.userName" class="user-role">{{ userInfo.userName }}</div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import {mapGetters} from 'vuex'
+import {getDownUrl} from "@/utils/base";
+export default {
+  data() {
+    return {
+      ftpUrl: getDownUrl(),
+      userName: '鏈煡',
+    }
+  },
+  computed: {
+    ...mapGetters([
+      'userInfo',
+      'sidebar',
+      'name',
+      'avatar',
+      'device',
+      'dir'
+    ])
+  },
+  methods: {
+    openNotification(){
+      this.$emit('openNotification')
+    },
+    logout() {
+      this.$confirm('纭畾閫�鍑�?', '', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '杩斿洖',
+        type: 'warning'
+      }).then(() => {
+        this.$store.dispatch('user/logout').then(() => {
+          location.reload()
+        })
+      }).catch(() => {
+      })
+    },
+    dataV() {
+      // window.open("https://datav.aliyuncs.com/share/87597dbd720965d4a2e901d683a0805c");
+      const {href} = this.$router.resolve({
+        path: '/dataV'
+      })
+      window.open(href, '_blank')
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.navbar-yw{
+  background-image: url("~@/assets/images/top-bg.png");
+  background-size: auto 70px;
+  background-position: right center;
+  background-color: #203d6d;
+}
+.navbar {
+  height: 70px;
+  position: relative;
+  box-shadow: 0 1px 4px rgba(0, 21, 41, .08);
+  color: #fff;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  padding: 0 40px;
+  z-index: 100;
+  .logo{
+    width: 39px;
+    height: 39px;
+    margin-right: 10px;
+  }
+  .logo-txt {
+    width: 352px;
+    height: 43px;
+  }
+  .phone-call {
+    margin-left: 50px;
+    width: 325px;
+    height: 44px;
+    border-radius: 30px;
+    background-color: #fff;
+    display: flex;
+    align-items: center;
+    transition: all 0.3s;
+
+    &-left {
+      cursor: pointer;
+      flex-shrink: 0;
+      width: 73px;
+      height: 36px;
+      border-right: 1px solid #eee;
+      text-align: center;
+      line-height: 36px;
+      font-size: 14px;
+      color: #000;
+    }
+
+    &-right {
+      flex-shrink: 0;
+      width: 251px;
+      display: flex;
+      align-items: center;
+      justify-content: flex-end;
+      position: relative;
+      &-phone {
+        font-size: 14px;
+        color: #000;
+        margin-bottom: 5px;
+      }
+
+      &-tip {
+        font-size: 12px;
+        color: #999;
+      }
+
+      &-btn {
+        cursor: pointer;
+        margin-left: 10px;
+        margin-right: 4px;
+        width: 67px;
+        height: 38px;
+        border-radius: 26px;
+        box-sizing: border-box;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+
+        img {
+          width: 32px;
+          height: 32px;
+        }
+      }
+    }
+  }
+
+  .phone-red {
+    background-color: #f3595a;
+  }
+
+  .phone-green {
+    background-color: #67C23A;
+  }
+  .phone-normal{
+    background-color: #dbdbdb;
+  }
+  .phone {
+    -webkit-animation: vibrate 2s cubic-bezier(.36, .07, .19, .97) infinite;
+    animation: vibrate 2s cubic-bezier(.36, .07, .19, .97) infinite;
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+    -webkit-backface-visibility: hidden;
+    backface-visibility: hidden;
+    -webkit-perspective: 300px;
+    perspective: 300px;
+  }
+
+  @keyframes vibrate {
+    0%, 2%, 4%, 6%, 8%, 10%, 12%, 14%, 16%, 18% {
+      -webkit-transform: translate3d(-3px, 0, 0);
+      transform: translate3d(-3px, 0, 0);
+    }
+    1%, 3%, 5%, 7%, 9%, 11%, 13%, 15%, 17%, 19% {
+      -webkit-transform: translate3d(3px, 0, 0);
+      transform: translate3d(3px, 0, 0);
+    }
+    20%, 100% {
+      -webkit-transform: translate3d(0, 0, 0);
+      transform: translate3d(0, 0, 0);
+    }
+  }
+
+  .connect {
+    display: flex;
+    align-items: center;
+    margin-left: 10px;
+    position: relative;
+  }
+  // 杞帴娴獥
+
+  .right-menu {
+    display: flex;
+    align-items: center;
+  }
+
+  .menu-item {
+    cursor: pointer;
+    width: 32px;
+    height: 32px;
+    position: relative;
+    margin:0 15px;
+  }
+
+  .user {
+    margin-left: 24px;
+    display: flex;
+    align-items: center;
+    .avatar {
+      width: 44px;
+      height: 44px;
+      border-radius: 50%;
+      margin-right: 10px;
+    }
+
+    .user-name {
+      cursor: pointer;
+      color: #FFFFFF;
+      font-size: 14px;
+    }
+
+    .user-role {
+      margin-top: 4px;
+      font-size: 12px;
+      color: rgba(255, 255, 255, 0.8);
+    }
+  }
+}
+
+.ewm-show:hover .ewm-box {
+  display: block;
+}
+
+.ewm-box {
+  display: none;
+  position: absolute;
+  bottom: -110px;
+  left: 50%;
+  margin-left: -50px;
+  z-index: 100001;
+}
+
+.ewm-f-box {
+  position: relative;
+  background-color: #FFFFFF;
+}
+
+.ewm-f-box::after {
+  position: absolute;
+  left: 50%;
+  top: -8px;
+  margin-left: -5px;
+  display: block;
+  content: '';
+  width: 0;
+  height: 0;
+  border-left: 8px solid transparent;
+  border-right: 8px solid transparent;
+  border-bottom: 8px solid #fff;
+}
+
+.navbar .menu-item .ewm-img {
+  width: 100px;
+}
+// 鎷ㄦ墦鐢佃瘽寮圭獥
+.phone-hover{
+  width: 300px;
+  position: absolute;
+  left:60%;
+  top: 50px;
+  background-color: #FFFFFF;
+  border-radius: 4px;
+  padding:12px;
+  box-shadow: 0 0 8px 2px rgba(0,0,0,0.3);
+  z-index: 101;
+}
+// 杞帴
+.zj-hover{
+  left:0;
+}
+.zj-list{
+  min-height: 300px;
+  max-height: 300px;
+  overflow-y: scroll;
+}
+.zj-list::-webkit-scrollbar, {
+  width: 4px;
+}
+
+.zj-list::-webkit-scrollbar-thumb, {
+  box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
+}
+.zj-item{
+  padding:16px;
+  border-bottom: 1px solid #f5f5f5;
+}
+.zj-item:hover{
+  background-color: #f5f5f5;
+  cursor: pointer;
+}
+.color-11A{
+  color:#11AD6F;
+}
+.color-F35{
+  color:#F3595A;
+}
+.com-head{
+  width: 38px;
+  height: 38px;
+  margin-right: 5px;
+}
+.icon-zj{
+  width: 22px;
+  height: 22px;
+}
+>>> .el-form--label-top .el-form-item__label{
+  padding:0!important;
+}
+.m-b-5{
+  margin-bottom: 5px;
+}
+</style>
diff --git a/project-web/src/layout/components/Settings/index.vue b/project-web/src/layout/components/Settings/index.vue
new file mode 100644
index 0000000..e2ee981
--- /dev/null
+++ b/project-web/src/layout/components/Settings/index.vue
@@ -0,0 +1,284 @@
+<template>
+  <div class="drawer-container">
+    <div>
+      <h3 class="drawer-title">涓婚椋庢牸璁剧疆</h3>
+      <div class="setting-drawer-block-checbox">
+        <div class="setting-drawer-block-checbox-item" @click="handleTheme('theme-dark')">
+          <img src="@/assets/imgs/dark.svg" alt="dark" />
+          <div v-if="sideTheme === 'theme-dark'" class="setting-drawer-block-checbox-selectIcon" style="display: block">
+            <i aria-label="鍥炬爣: check" class="anticon anticon-check">
+              <svg
+                viewBox="64 64 896 896"
+                data-icon="check"
+                width="1em"
+                height="1em"
+                :fill="theme"
+                aria-hidden="true"
+                focusable="false"
+                class=""
+              >
+                <path
+                  d="M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z"
+                />
+              </svg>
+            </i>
+          </div>
+        </div>
+        <div class="setting-drawer-block-checbox-item" @click="handleTheme('theme-light')">
+          <img src="@/assets/imgs/light.svg" alt="light" />
+          <div
+            v-if="sideTheme === 'theme-light'"
+            class="setting-drawer-block-checbox-selectIcon"
+            style="display: block"
+          >
+            <i aria-label="鍥炬爣: check" class="anticon anticon-check">
+              <svg
+                viewBox="64 64 896 896"
+                data-icon="check"
+                width="1em"
+                height="1em"
+                :fill="theme"
+                aria-hidden="true"
+                focusable="false"
+                class=""
+              >
+                <path
+                  d="M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z"
+                />
+              </svg>
+            </i>
+          </div>
+        </div>
+      </div>
+      <el-divider />
+      <div class="drawer-item">
+        <span>涓婚棰滆壊</span>
+        <theme-picker style="float: right; height: 26px; margin: -3px 8px 0 0" @change="themeChange" />
+      </div>
+
+      <div class="drawer-item">
+        <span>寮�鍚� TopNav</span>
+        <el-switch v-model="topNav" class="drawer-switch" />
+      </div>
+
+      <div class="drawer-item" v-if="topNav">
+        <span>寮�鍚� Icon</span>
+        <el-switch v-model="navIcon" class="drawer-switch" />
+      </div>
+
+      <div class="drawer-item">
+        <span>寮�鍚� Tags-Views</span>
+        <el-switch v-model="tagsView" class="drawer-switch" />
+      </div>
+
+      <div class="drawer-item">
+        <span>鍥哄畾 Header</span>
+        <el-switch v-model="fixedHeader" class="drawer-switch" />
+      </div>
+
+      <div class="drawer-item">
+        <span>鏄剧ず Logo</span>
+        <el-switch v-model="sidebarLogo" class="drawer-switch" />
+      </div>
+
+      <el-divider />
+      <el-button size="small" type="primary" plain icon="el-icon-document-add" @click="saveSetting">淇濆瓨閰嶇疆</el-button>
+      <el-button size="small" plain icon="el-icon-refresh" @click="resetSetting">閲嶇疆閰嶇疆</el-button>
+    </div>
+  </div>
+</template>
+
+<script>
+import ThemePicker from '@/components/ThemePicker';
+
+export default {
+  components: { ThemePicker },
+  data() {
+    return {
+      sideTheme: this.$store.state.settings.sideTheme,
+      routers: this.$store.state.permission.routes,
+    };
+  },
+  computed: {
+    theme: {
+      get() {
+        return this.$store.state.settings.theme;
+      },
+    },
+    fixedHeader: {
+      get() {
+        return this.$store.state.settings.fixedHeader;
+      },
+      set(val) {
+        this.$store.dispatch('settings/changeSetting', {
+          key: 'fixedHeader',
+          value: val,
+        });
+      },
+    },
+    topNav: {
+      get() {
+        //鍥炶皟鍑芥暟 褰撻渶瑕佽鍙栧綋鍓嶅睘鎬у�兼槸鎵ц锛屾牴鎹浉鍏虫暟鎹绠楀苟杩斿洖褰撳墠灞炴�х殑鍊�
+        return this.$store.state.settings.topNav;
+      },
+      set(val) {
+        //鐩戣褰撳墠灞炴�у�肩殑鍙樺寲锛屽綋灞炴�у�煎彂鐢熷彉鍖栨椂鎵ц锛屾洿鏂扮浉鍏崇殑灞炴�ф暟鎹�
+        //val灏辨槸topNav鐨勬渶鏂板睘鎬у��
+        this.$store.dispatch('settings/changeSetting', {
+          key: 'topNav',
+          value: val,
+        });
+        if (val) {
+          let key = this.$route.path.split('/')[1];
+          //閫氳繃鎴彇褰撳墠璺敱鐨勭涓�绾х洰褰曡窡椤堕儴涓�绾ц彍鍗曢�変腑椤圭殑val鍊煎仛鍖归厤
+          key = '/' + key;
+          this.routers.map((item) => {
+            if (key == item.url && item.child.length > 0) {
+              //濡傛灉鍖归厤锛屽氨缁欎晶杈瑰鑸祴鍊间负閫変腑椤圭殑瀛愮骇鏁扮粍
+              this.$store.commit('permission/SET_SIDEBAR_ROUTERS', item.child);
+            } else if (key == item.url && !item.child.length) {
+              //濡傛灉閬嶅巻浠ュ悗val鍊肩瓑浜巌tem鐨剈rl锛屼絾鏄湁娌℃湁瀛愮骇锛屽氨鎶婂畠瀛愮骇璧嬪�肩粰渚ц竟瀵艰埅鐨勬暟缁勶紝杩欓噷閽堝dashboard鎺у埗鍙�
+              this.$store.commit('permission/SET_SIDEBAR_ROUTERS', [item]);
+            }
+          });
+        }
+        if (!val) {
+          //鍏抽棴鐨勬椂鍊欎晶杈瑰鑸殑鍙栧�艰繕鏄彇榛樿鐨剅outes鏁扮粍
+          this.$store.commit('permission/SET_SIDEBAR_ROUTERS', this.$store.state.permission.routes);
+        }
+      },
+    },
+    navIcon: {
+      get() {
+        return this.$store.state.settings.navIcon;
+      },
+      set(val) {
+        this.$store.dispatch('settings/changeSetting', {
+          //dispatch锛氬惈鏈夊紓姝ユ搷浣滐紝渚嬪鍚戝悗鍙版彁浜ゆ暟鎹紝鍐欐硶锛� this.$store.dispatch('action鏂规硶鍚�',鍊�)
+          //commit锛氬悓姝ユ搷浣滐紝鍐欐硶锛歵his.$store.commit('mutations鏂规硶鍚�',鍊�)
+          key: 'navIcon',
+          value: val,
+        });
+      },
+    },
+    tagsView: {
+      get() {
+        return this.$store.state.settings.tagsView;
+      },
+      set(val) {
+        this.$store.dispatch('settings/changeSetting', {
+          key: 'tagsView',
+          value: val,
+        });
+      },
+    },
+    sidebarLogo: {
+      get() {
+        return this.$store.state.settings.sidebarLogo;
+      },
+      set(val) {
+        this.$store.dispatch('settings/changeSetting', {
+          key: 'sidebarLogo',
+          value: val,
+        });
+      },
+    },
+  },
+  methods: {
+    themeChange(val) {
+      this.$store.dispatch('settings/changeSetting', {
+        key: 'theme',
+        value: val,
+      });
+    },
+    handleTheme(val) {
+      this.$store.dispatch('settings/changeSetting', {
+        key: 'sideTheme',
+        value: val,
+      });
+      this.sideTheme = val;
+    },
+    saveSetting() {
+      this.$modal.loading('姝e湪淇濆瓨鍒版湰鍦帮紝璇风◢鍊�...');
+      //灏嗚缃啓鍏ョ紦瀛�
+      this.$cache.local.setJSON('layout-setting', {
+        topNav: this.topNav,
+        tagsView: this.tagsView,
+        fixedHeader: this.fixedHeader,
+        sidebarLogo: this.sidebarLogo,
+        dynamicTitle: this.dynamicTitle,
+        sideTheme: this.sideTheme,
+        theme: this.theme,
+        navIcon: this.navIcon,
+      });
+      setTimeout(this.$modal.closeLoading(), 1000);
+    },
+    resetSetting() {
+      this.$modal.loading('姝e湪娓呴櫎璁剧疆缂撳瓨骞跺埛鏂帮紝璇风◢鍊�...');
+      this.$cache.local.remove('layout-setting');
+      setTimeout('window.location.reload()', 1000);
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+::v-deep .el-switch {
+  width: 40px;
+}
+.drawer-container {
+  padding: 24px;
+  font-size: 14px;
+  line-height: 1.5;
+  word-wrap: break-word;
+
+  .drawer-title {
+    margin-bottom: 12px;
+    color: rgba(0, 0, 0, 0.85);
+    font-size: 14px;
+    line-height: 22px;
+  }
+
+  .drawer-item {
+    color: rgba(0, 0, 0, 0.65);
+    font-size: 14px;
+    padding: 12px 0;
+  }
+
+  .drawer-switch {
+    float: right;
+  }
+  .setting-drawer-block-checbox {
+    display: flex;
+    justify-content: flex-start;
+    align-items: center;
+    margin-top: 10px;
+    margin-bottom: 20px;
+
+    .setting-drawer-block-checbox-item {
+      position: relative;
+      margin-right: 16px;
+      border-radius: 2px;
+      cursor: pointer;
+
+      img {
+        width: 48px;
+        height: 48px;
+      }
+
+      .setting-drawer-block-checbox-selectIcon {
+        position: absolute;
+        top: 0;
+        right: 0;
+        width: 100%;
+        height: 100%;
+        padding-top: 15px;
+        padding-left: 24px;
+        color: #1890ff;
+        font-weight: 700;
+        font-size: 14px;
+      }
+    }
+  }
+}
+</style>
diff --git a/project-web/src/layout/components/Sidebar/FixiOSBug.js b/project-web/src/layout/components/Sidebar/FixiOSBug.js
new file mode 100644
index 0000000..a50c9fa
--- /dev/null
+++ b/project-web/src/layout/components/Sidebar/FixiOSBug.js
@@ -0,0 +1,36 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+export default {
+  computed: {
+    device() {
+      return this.$store.state.app.device;
+    },
+  },
+  mounted() {
+    // In order to fix the click on menu on the ios device will trigger the mouseleave bug
+    // https://github.com/PanJiaChen/vue-element-admin/issues/1135
+    this.fixBugIniOS();
+  },
+  methods: {
+    fixBugIniOS() {
+      const $subMenu = this.$refs.subMenu;
+      if ($subMenu) {
+        const handleMouseleave = $subMenu.handleMouseleave;
+        $subMenu.handleMouseleave = (e) => {
+          if (this.device === 'mobile') {
+            return;
+          }
+          handleMouseleave(e);
+        };
+      }
+    },
+  },
+};
diff --git a/project-web/src/layout/components/Sidebar/Item.vue b/project-web/src/layout/components/Sidebar/Item.vue
new file mode 100644
index 0000000..c0dee5a
--- /dev/null
+++ b/project-web/src/layout/components/Sidebar/Item.vue
@@ -0,0 +1,32 @@
+<script>
+
+export default {
+  name: 'MenuItem',
+  functional: true,
+  props: {
+    icon: {
+      type: String,
+      default: '',
+    },
+    title: {
+      type: String,
+      default: '',
+    },
+  },
+  render(h, context) {
+    const { icon, title } = context.props;
+    const vnodes = [];
+
+    if (icon) {
+      const ic = 'el-icon-' + icon;
+      //class={ic}
+      // vnodes.push(<i style="color:#ffffff;"  />);
+    }
+
+    if (title) {
+      vnodes.push(<span slot="title">{title}</span>);
+    }
+    return vnodes;
+  },
+};
+</script>
diff --git a/project-web/src/layout/components/Sidebar/Link.vue b/project-web/src/layout/components/Sidebar/Link.vue
new file mode 100644
index 0000000..20f8ab3
--- /dev/null
+++ b/project-web/src/layout/components/Sidebar/Link.vue
@@ -0,0 +1,35 @@
+<template>
+  <!-- eslint-disable vue/require-component-is -->
+  <component v-bind="linkProps(to)">
+    <slot />
+  </component>
+</template>
+
+<script>
+import { isExternal } from '@/utils/validate';
+
+export default {
+  props: {
+    to: {
+      type: String,
+      required: true,
+    },
+  },
+  methods: {
+    linkProps(url) {
+      if (isExternal(url)) {
+        return {
+          is: 'a',
+          href: url,
+          target: '_blank',
+          rel: 'noopener',
+        };
+      }
+      return {
+        is: 'router-link',
+        to: url,
+      };
+    },
+  },
+};
+</script>
diff --git a/project-web/src/layout/components/Sidebar/Logo.vue b/project-web/src/layout/components/Sidebar/Logo.vue
new file mode 100644
index 0000000..acadf5d
--- /dev/null
+++ b/project-web/src/layout/components/Sidebar/Logo.vue
@@ -0,0 +1,103 @@
+<template>
+  <div class="sidebar-logo-container" :class="{ collapse: collapse }">
+    <transition name="sidebarLogoFade">
+      <router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/">
+        <img v-if="logoSmall" :src="logoSmall" class="sidebar-logo-small" />
+      </router-link>
+      <router-link v-else key="expand" class="sidebar-logo-link" to="/">
+        <img v-if="logo" :src="logo" class="sidebar-logo-big" />
+      </router-link>
+    </transition>
+  </div>
+</template>
+
+<script>
+import logoImg from '@/assets/imgs/logo.png';
+
+export default {
+  name: 'SidebarLogo',
+  props: {
+    collapse: {
+      type: Boolean,
+      required: true,
+    },
+  },
+  data() {
+    return {
+      title: 'Vue Element Admin',
+      logo: logoImg,
+      logoSmall: '',
+    };
+  },
+  mounted() {
+    // this.getLogo();
+    // this.getSquareLogo();
+  },
+  methods: {
+    // getLogo() {
+    //   systemConfigApi.configGetUniq({ key: 'site_logo_lefttop' }).then((data) => {
+    //     this.logo = data;
+    //   });
+    // },
+    // getSquareLogo() {
+    //   systemConfigApi.configGetUniq({ key: 'site_logo_square' }).then((data) => {
+    //     this.logoSmall = data;
+    //   });
+    // },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.sidebarLogoFade-enter-active {
+  transition: opacity 1.5s;
+}
+.sidebar-logo-big {
+  width: auto;
+  height: 40px;
+  vertical-align: middle;
+  margin-right: 12px;
+}
+.sidebarLogoFade-enter,
+.sidebarLogoFade-leave-to {
+  opacity: 0;
+}
+
+.sidebar-logo-container {
+  position: relative;
+  width: 100%;
+  height: 55px;
+  line-height: 55px;
+  text-align: center;
+  overflow: hidden;
+  background: #fff;
+
+  & .sidebar-logo-link {
+    height: 100%;
+    width: 100%;
+
+    & .sidebar-logo-small {
+      width: 35px;
+      height: 35px;
+      vertical-align: middle;
+    }
+
+    & .sidebar-title {
+      display: inline-block;
+      margin: 0;
+      color: #fff;
+      font-weight: 600;
+      line-height: 50px;
+      font-size: 14px;
+      font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;
+      vertical-align: middle;
+    }
+  }
+
+  &.collapse {
+    .sidebar-logo {
+      margin-right: 0px;
+    }
+  }
+}
+</style>
diff --git a/project-web/src/layout/components/Sidebar/SidebarItem.vue b/project-web/src/layout/components/Sidebar/SidebarItem.vue
new file mode 100644
index 0000000..b5b8a95
--- /dev/null
+++ b/project-web/src/layout/components/Sidebar/SidebarItem.vue
@@ -0,0 +1,171 @@
+<template>
+  <div v-if="!item.hidden">
+    <template
+      v-if="
+        hasOneShowingChild(item.childList, item) &&
+        (!onlyOneChild.childList || onlyOneChild.noShowingChildren) &&
+        !item.alwaysShow
+      "
+    >
+      <router-link v-if="onlyOneChild" :to="onlyOneChild.component">
+        <el-menu-item :index="resolvePath(onlyOneChild.component)" :class="{ 'submenu-title-noDropdown': !isNest }">
+<!--          <span v-if="activeMenu===resolvePath(onlyOneChild.component)" class="cur-icon"><span class="dot"/></span>
+          <span v-else class="cur-empty"/>-->
+          <item :icon="onlyOneChild.extra || (item.meta && item.extra)" :title="onlyOneChild.name"/>
+        </el-menu-item>
+      </router-link>
+    </template>
+    <el-submenu v-else ref="subMenu" :index="resolvePath(item.component)" popper-append-to-body>
+      <template slot="title">
+        <item v-if="item" :icon="item && item.icon" :title="item.name"/>
+      </template>
+      <sidebar-item
+        v-for="(childs, i) in item.childList"
+        :key="i"
+        :is-nest="true"
+        :item="childs"
+        :base-path="resolvePath(childs.component)"
+        class="nest-menu"
+      />
+    </el-submenu>
+  </div>
+</template>
+
+<script>
+import path from 'path';
+import {isExternal} from '@/utils/validate';
+import Item from './Item';
+import AppLink from './Link';
+import FixiOSBug from './FixiOSBug';
+
+export default {
+  name: 'SidebarItem',
+  components: {Item, AppLink},
+  mixins: [FixiOSBug],
+  props: {
+    // route object
+    item: {
+      type: Object,
+      required: true,
+    },
+    isNest: {
+      type: Boolean,
+      default: false,
+    },
+    basePath: {
+      type: String,
+      default: '',
+    },
+  },
+  data() {
+    // To fix https://github.com/PanJiaChen/vue-admin-template/issues/237
+    // TODO: refactor with render function
+    this.onlyOneChild = null;
+    return {};
+  },
+  // mounted(){
+  //   console.log('kkkk',this.item)
+  // },
+  mounted() {
+  },
+  computed: {
+    activeMenu() {
+      const route = this.$route
+      const {meta, path} = route
+      // if set path, the sidebar will highlight the path you set
+      if (meta.activeMenu) {
+        return meta.activeMenu
+      }
+      return path
+    }
+  },
+  methods: {
+    hasOneShowingChild(childList = [], parent) {
+      const showingChildren = childList.filter((item) => {
+        if (item.hidden) {
+          return false;
+        } else {
+          // Temp set(will be used if only has one showing childList)
+          this.onlyOneChild = item;
+          return true;
+        }
+      });
+
+      // When there is only one childList router, the childList router is displayed by default
+      if (showingChildren.length === 1) {
+        return true;
+      }
+
+      // Show parent if there are no childList router to display
+      if (showingChildren.length === 0) {
+        this.onlyOneChild = {...parent, path: '', noShowingChildren: true};
+        return true;
+      }
+
+      return false;
+    },
+    resolvePath(routePath) {
+      // console.log(this.item);
+      // console.log("............" + routePath);
+      if (isExternal(routePath)) {
+        return routePath;
+      }
+      if (isExternal(this.basePath)) {
+        return this.basePath;
+      }
+      // console.log(this.basePath, routePath)
+      return path.resolve(this.basePath, routePath);
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+> > > .el-submenu__title {
+  height: 35px;
+  line-height: 35px;
+}
+
+> > > .is-opened .el-submenu__title {
+  background-color: #ECF2FF;
+  color: #0d997c;
+
+  i {
+    color: #0d997c
+  }
+}
+/*
+> > > .el-menu-item {
+  padding-left: 5px !important;
+}*/
+
+> > > .el-menu-item:hover, .el-menu-item:focus {
+  background: #fff;
+  color: #0d997c;
+}
+
+.cur-icon {
+  display: inline-block;
+  width: 10px;
+  height: 10px;
+  border-radius: 5px;
+  border: 1px solid #0d997c;
+  position: relative;
+
+  .dot {
+    position: absolute;
+    top: 2px;
+    left: 2px;
+    display: inline-block;
+    width: 4px;
+    height: 4px;
+    border-radius: 2px;
+    background-color: #0d997c;
+  }
+}
+
+.cur-empty {
+  display: inline-block;
+  width: 10px;
+  height: 10px;
+}
+</style>
diff --git a/project-web/src/layout/components/Sidebar/index.vue b/project-web/src/layout/components/Sidebar/index.vue
new file mode 100644
index 0000000..d6414d6
--- /dev/null
+++ b/project-web/src/layout/components/Sidebar/index.vue
@@ -0,0 +1,265 @@
+<template>
+  <div
+    :class="{ 'has-logo': showLogo }"
+    :style="{
+      backgroundColor: settings.sideTheme === 'theme-light' ? variables.menuLightBackground : variables.menuBackground,
+    }"
+  >
+<!--    <logo v-if="showLogo" :collapse="isCollapse" />-->
+    <el-aside class="my-aside" :style="{backgroundColor: (!openAside||routes.length&&rootRoute&&rootRoute.meta)?'#f6f8fc':'#fff'}">
+      <el-scrollbar style="position: relative" wrap-class="scrollbar-wrapper">
+        <template v-for="route in routes">
+          <div
+            v-if="!route.hidden"
+            :key="route.id"
+            class="root-route"
+            :class="{act:actId===route.id}"
+            @click="routeClick(route)"
+          >
+            <i class="route-icon" :class="route.meta && route.meta.icon" />
+            <div class="root-route-title">{{ route.meta ? route.meta.title : '' }}</div>
+          </div>
+        </template>
+      </el-scrollbar>
+    </el-aside>
+    <div v-if="routes.length&&rootRoute&&rootRoute.meta" style="position: relative">
+      <div :class="openAside?'aside-box':'aside-box-close'">
+        <el-aside width="172px;" style="border-right: 1px solid #EEEEEE">
+          <el-scrollbar wrap-class="scrollbar-wrapper">
+            <div class="menu-title">{{ rootRoute.meta.title }}</div>
+            <el-menu
+              :default-active="activeMenu"
+              :collapse="false"
+              :background-color="variables.menuBg"
+              :text-color="variables.menuText"
+              :unique-opened="true"
+              :active-text-color="variables.menuActiveText"
+              :collapse-transition="false"
+              mode="vertical"
+              @select="handleSelect"
+            >
+              <sidebar-item v-for="route in sidebarRouters" :key="route.id" :item="route" :base-path="route.path" />
+            </el-menu>
+          </el-scrollbar>
+        </el-aside>
+      </div>
+      <div class="toggle-box" :class="openAside?'':'toggle-box-right'" @click="openAside=!openAside"><i class="el-icon-arrow-left" /></div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { mapGetters, mapState } from 'vuex';
+import Logo from './Logo';
+import SidebarItem from './SidebarItem';
+import variables from '@/styles/variables.scss';
+import { isEmpty, isNotEmpty } from '@/utils/validate'
+export default {
+  components: { SidebarItem, Logo },
+  data(){
+    return{
+      openAside: true,
+      actId: '',
+      activeMenuIdx: '',
+      // showSidebar: userSidebarTop,
+      // needTagsView: tagsView,
+      subRoute: [],
+      rootRoute: { meta: { title: '' }}
+    }
+  },
+  methods:{
+    routeClick(route) {
+      this.rootRoute = route
+      this.subRoute = route.children
+      this.actId = route.id
+      const rootRoute = this.getFirstRoute(route)
+      this.$router.push(rootRoute.path)
+    },
+    handleSelect(key, keyPath) {
+      this.activeMenuIdx = key
+    },
+    getFirstRoute(route) {
+      if (isNotEmpty(route.children)) {
+        const len = route.children.length
+        for (let i = 0; i < len; i++) {
+          const item = route.children[i]
+          if (isNotEmpty(item)) {
+            const route = this.getFirstRoute(item)
+            if (isEmpty(route.children)) {
+              return route
+            }
+          }
+        }
+      } else {
+        return route
+      }
+    },
+  },
+  computed: {
+    ...mapState(['settings']),
+    ...mapGetters(['permission_routes', 'sidebarRouters', 'sidebar']),
+    activeMenu() {
+      const route = this.$route;
+      const { meta, path } = route;
+      // if set path, the sidebar will highlight the path you set
+      if (meta.activeMenu) {
+        return meta.activeMenu;
+      }
+      return path;
+    },
+    showLogo() {
+      return this.$store.state.settings.sidebarLogo;
+    },
+    variables() {
+      return variables;
+    },
+    isCollapse() {
+      return !this.sidebar.opened;
+    },
+    routes() {
+      // console.log(this.$router.options.routes)
+      return this.$router.options.routes
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.el-submenu__icon-arrow {
+  color: #fff !important;
+}
+.header {
+  width: 100%;
+  -webkit-box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
+  box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
+  position: fixed;
+  z-index: 3;
+  top: 60px;
+}
+
+.header .navbar {
+  max-width: 1200px;
+  margin-left: auto;
+  margin-right: auto;
+  -webkit-box-shadow: 0 0 0;
+  box-shadow: 0 0 0;
+}
+
+.root-route {
+  align-self: center;
+  width: 92px;
+  height: 58px;
+  border-radius: 10px;
+  cursor: pointer;
+  font-size: 12px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  margin: 20px auto;
+  color: #666;
+  line-height: 1;
+  transition: 0.3s;
+
+  .route-icon {
+    width: 30px;
+    height: 30px;
+    font-size: 30px;
+    line-height: 1;
+    color: #C4C4C4;
+  }
+
+  .root-route-title {
+    margin-top: 2px;
+  }
+}
+
+.root-route:hover {
+  background-color: #0d997c;
+  color: #fff;
+
+  .route-icon {
+    width: 30px;
+    height: 30px;
+    font-size: 30px;
+    line-height: 1;
+    color: #fff;
+  }
+}
+
+.root-route.act {
+  background-color: #0d997c;
+  color: #fff;
+
+  .route-icon {
+    width: 30px;
+    height: 30px;
+    font-size: 30px;
+    line-height: 1;
+    color: #fff;
+  }
+}
+.aside-box{
+  width: 171px;
+  transition: all 0.3s;
+}
+.aside-box-close{
+  transition: all 0.3s;
+  width: 0;
+}
+.toggle-box {
+  width: 31px;
+  height: 62px;
+  border-radius: 0 31px 31px 0;
+  border: 1px solid #eeeeee;
+  box-sizing: border-box;
+  background: #ffffff;
+  position: absolute;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  color: #999;
+  font-size: 24px;
+  top: 67px;
+  right: -31px;
+  z-index: 99;
+  transition: all 0.3s;
+  transition-delay: 0.2s;
+  transform: rotate(0);
+}
+.toggle-box-right i{
+  transform: rotate(180deg);
+  transition-delay: 0.2s;
+}
+.breadcrumb{
+  height: 56px;
+  line-height: 56px;
+  padding: 0 24px;
+  font-size: 18px;
+  font-weight: bold;
+  background-color: #fff;
+}
+.my-aside {
+  width: 128px !important;
+  transition: all 0.3s;
+}
+
+.bg {
+  width: 121px;
+  position: absolute;
+  bottom: 0;
+  z-index: -1;
+}
+
+.el-menu {
+  border: none;
+}
+
+.menu-title {
+  background-color: #ECF2FF;
+  padding: 0px 10px;
+  margin: 10px;
+  font-size: 15px;
+  color: #0d997c;
+  border-radius: 4px;
+}
+</style>
diff --git a/project-web/src/layout/components/TagsView/ScrollPane.vue b/project-web/src/layout/components/TagsView/ScrollPane.vue
new file mode 100644
index 0000000..6454c2f
--- /dev/null
+++ b/project-web/src/layout/components/TagsView/ScrollPane.vue
@@ -0,0 +1,94 @@
+<template>
+  <el-scrollbar ref="scrollContainer" :vertical="false" class="scroll-container" @wheel.native.prevent="handleScroll">
+    <slot />
+  </el-scrollbar>
+</template>
+
+<script>
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+const tagAndTagSpacing = 4; // tagAndTagSpacing
+
+export default {
+  name: 'ScrollPane',
+  data() {
+    return {
+      left: 0,
+    };
+  },
+  computed: {
+    scrollWrapper() {
+      return this.$refs.scrollContainer.$refs.wrap;
+    },
+  },
+  methods: {
+    handleScroll(e) {
+      const eventDelta = e.wheelDelta || -e.deltaY * 40;
+      const $scrollWrapper = this.scrollWrapper;
+      $scrollWrapper.scrollLeft = $scrollWrapper.scrollLeft + eventDelta / 4;
+    },
+    moveToTarget(currentTag) {
+      const $container = this.$refs.scrollContainer.$el;
+      const $containerWidth = $container.offsetWidth;
+      const $scrollWrapper = this.scrollWrapper;
+      const tagList = this.$parent.$refs.tag;
+
+      let firstTag = null;
+      let lastTag = null;
+
+      // find first tag and last tag
+      if (tagList.length > 0) {
+        firstTag = tagList[0];
+        lastTag = tagList[tagList.length - 1];
+      }
+
+      if (firstTag === currentTag) {
+        $scrollWrapper.scrollLeft = 0;
+      } else if (lastTag === currentTag) {
+        $scrollWrapper.scrollLeft = $scrollWrapper.scrollWidth - $containerWidth;
+      } else {
+        // find preTag and nextTag
+        const currentIndex = tagList.findIndex((item) => item === currentTag);
+        const prevTag = tagList[currentIndex - 1];
+        const nextTag = tagList[currentIndex + 1];
+
+        // the tag's offsetLeft after of nextTag
+        const afterNextTagOffsetLeft = nextTag.$el.offsetLeft + nextTag.$el.offsetWidth + tagAndTagSpacing;
+
+        // the tag's offsetLeft before of prevTag
+        const beforePrevTagOffsetLeft = prevTag.$el.offsetLeft - tagAndTagSpacing;
+
+        if (afterNextTagOffsetLeft > $scrollWrapper.scrollLeft + $containerWidth) {
+          $scrollWrapper.scrollLeft = afterNextTagOffsetLeft - $containerWidth;
+        } else if (beforePrevTagOffsetLeft < $scrollWrapper.scrollLeft) {
+          $scrollWrapper.scrollLeft = beforePrevTagOffsetLeft;
+        }
+      }
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.scroll-container {
+  white-space: nowrap;
+  position: relative;
+  overflow: hidden;
+  width: 100%;
+  ::v-deep {
+    .el-scrollbar__bar {
+      bottom: 0px;
+    }
+    .el-scrollbar__wrap {
+      /*height: 49px;*/
+    }
+  }
+}
+</style>
diff --git a/project-web/src/layout/components/TagsView/index.vue b/project-web/src/layout/components/TagsView/index.vue
new file mode 100644
index 0000000..0354595
--- /dev/null
+++ b/project-web/src/layout/components/TagsView/index.vue
@@ -0,0 +1,332 @@
+<template>
+  <div id="tags-view-container" class="tags-view-container" v-if="!isPhone">
+    <scroll-pane ref="scrollPane" class="tags-view-wrapper">
+      <router-link
+        v-for="tag in visitedViews"
+        ref="tag"
+        :key="tag.path"
+        :class="isActive(tag) ? 'active' : ''"
+        :to="{ path: tag.path, query: tag.query, fullPath: tag.fullPath }"
+        tag="span"
+        class="tags-view-item"
+        @click.middle.native="!isAffix(tag) ? closeSelectedTag(tag) : ''"
+        @contextmenu.prevent.native="openMenu(tag, $event)"
+      >
+        {{ tag.title }}
+        <span v-if="!isAffix(tag)" class="el-icon-close" @click.prevent.stop="closeSelectedTag(tag)" />
+      </router-link>
+    </scroll-pane>
+    <ul v-show="visible" :style="{ left: (openAside?left+170:left) + 'px', top: top + 'px' }" class="contextmenu">
+      <li @click="refreshSelectedTag(selectedTag)">鍒锋柊</li>
+      <li v-if="!isAffix(selectedTag)" @click="closeSelectedTag(selectedTag)">鍏抽棴</li>
+      <li @click="closeOthersTags">鍏抽棴鍏朵粬</li>
+      <li @click="closeAllTags(selectedTag)">鍏抽棴鎵�鏈�</li>
+    </ul>
+  </div>
+</template>
+
+<script>
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+import ScrollPane from './ScrollPane';
+import path from 'path';
+
+export default {
+  props:{
+    openAside:{
+      type: Boolean,
+      default: false
+    }
+  },
+  components: { ScrollPane },
+  data() {
+    return {
+      fullWidth: document.body.clientWidth,
+      visible: false,
+      top: 0,
+      left: 0,
+      selectedTag: {},
+      affixTags: [],
+      isPhone: this.$wechat.isPhone(),
+    };
+  },
+  computed: {
+    visitedViews() {
+      return this.$store.state.tagsView.visitedViews;
+    },
+    routes() {
+      return this.$store.state.permission.routes;
+    },
+    theme() {
+      return this.$store.state.settings.theme;
+    },
+    topNav: {
+      get() {
+        return this.$store.state.settings.topNav;
+      },
+    },
+  },
+  watch: {
+    $route() {
+      this.addTags();
+      if (this.topNav) this.setSidebarRouters(); //宸︿晶浜岀骇鑿滃崟鍚屾
+      if (!this.isPhone) this.moveToCurrentTag();
+    },
+    visible(value) {
+      if (value) {
+        document.body.addEventListener('click', this.closeMenu);
+      } else {
+        document.body.removeEventListener('click', this.closeMenu);
+      }
+    },
+  },
+  mounted() {
+    window.addEventListener('resize', this.handleResize);
+    this.initTags();
+    this.addTags();
+    if (this.topNav) this.setSidebarRouters();
+  },
+  methods: {
+    handleResize(event) {
+      this.fullWidth = document.body.clientWidth;
+    },
+    isActive(route) {
+      return route.path === this.$route.path;
+    },
+    isAffix(tag) {
+      return tag.meta && tag.meta.affix;
+    },
+    filterAffixTags(routes, basePath = '/') {
+      let tags = [];
+      routes.forEach((route) => {
+        if (route.meta && route.meta.affix) {
+          const tagPath = path.resolve(basePath, route.path);
+          tags.push({
+            fullPath: tagPath,
+            path: tagPath,
+            name: route.name,
+            meta: { ...route.meta },
+          });
+        }
+        if (route.children) {
+          const tempTags = this.filterAffixTags(route.children, route.path);
+          if (tempTags.length >= 1) {
+            tags = [...tags, ...tempTags];
+          }
+        }
+      });
+      return tags;
+    },
+    initTags() {
+      const affixTags = (this.affixTags = this.filterAffixTags(this.routes));
+      for (const tag of affixTags) {
+        // Must have tag name
+        if (tag.name) {
+          this.$store.dispatch('tagsView/addVisitedView', tag);
+        }
+      }
+    },
+    /**
+     * 宸︿晶浜岀骇鑿滃崟鍚屾
+     */
+    setSidebarRouters() {
+      let key = this.$route.path.split('/')[1];
+      //閫氳繃鎴彇褰撳墠璺敱鐨勭涓�绾х洰褰曡窡椤堕儴涓�绾ц彍鍗曢�変腑椤圭殑val鍊煎仛鍖归厤
+      key = '/' + key;
+      this.routes.map((item) => {
+        if (key == item.url && item.child.length > 0) {
+          //濡傛灉鍖归厤锛屽氨缁欎晶杈瑰鑸祴鍊间负閫変腑椤圭殑瀛愮骇鏁扮粍
+          this.$store.commit('permission/SET_SIDEBAR_ROUTERS', item.child);
+        } else if (key == item.url && !item.child.length) {
+          //濡傛灉閬嶅巻浠ュ悗val鍊肩瓑浜巌tem鐨剈rl锛屼絾鏄湁娌℃湁瀛愮骇锛屽氨鎶婂畠瀛愮骇璧嬪�肩粰渚ц竟瀵艰埅鐨勬暟缁勶紝杩欓噷閽堝dashboard鎺у埗鍙�
+          this.$store.commit('permission/SET_SIDEBAR_ROUTERS', [item]);
+        }
+      });
+    },
+    addTags() {
+      const { name } = this.$route;
+      if (name) {
+        this.$store.dispatch('tagsView/addView', this.$route);
+      }
+      return false;
+    },
+    moveToCurrentTag() {
+      const tags = this.$refs.tag;
+      this.$nextTick(() => {
+        for (const tag of tags) {
+          if (tag.to.path === this.$route.path) {
+            this.$refs.scrollPane.moveToTarget(tag);
+            // when query is different then update
+            if (tag.to.fullPath !== this.$route.fullPath) {
+              this.$store.dispatch('tagsView/updateVisitedView', this.$route);
+            }
+            break;
+          }
+        }
+      });
+    },
+    refreshSelectedTag(view) {
+      this.$store.dispatch('tagsView/delCachedView', view).then(() => {
+        const { fullPath } = view;
+        this.$nextTick(() => {
+          this.$router.replace({
+            path: '/redirect' + fullPath,
+          });
+        });
+      });
+    },
+    closeSelectedTag(view) {
+      this.$store.dispatch('tagsView/delView', view).then(({ visitedViews }) => {
+        if (this.isActive(view)) {
+          this.toLastView(visitedViews, view);
+        }
+      });
+    },
+    closeOthersTags() {
+      this.$router.push(this.selectedTag);
+      this.$store.dispatch('tagsView/delOthersViews', this.selectedTag).then(() => {
+        this.moveToCurrentTag();
+      });
+    },
+    closeAllTags(view) {
+      this.$store.dispatch('tagsView/delAllViews').then(({ visitedViews }) => {
+        if (this.affixTags.some((tag) => tag.path === view.path)) {
+          return;
+        }
+        this.toLastView(visitedViews, view);
+      });
+    },
+    toLastView(visitedViews, view) {
+      const latestView = visitedViews.slice(-1)[0];
+      if (latestView) {
+        this.$router.push(latestView.fullPath);
+      } else {
+        // now the default is to redirect to the home page if there is no tags-view,
+        // you can adjust it according to your needs.
+        if (view.name === 'Dashboard') {
+          // to reload home page
+          this.$router.replace({ path: '/redirect' + view.fullPath });
+        } else {
+          this.$router.push('/dashboard');
+        }
+      }
+    },
+    openMenu(tag, e) {
+      const menuMinWidth = 105;
+      const offsetLeft = this.$el.getBoundingClientRect().left; // container margin left
+      const offsetWidth = this.$el.offsetWidth; // container width
+      const maxLeft = offsetWidth - menuMinWidth; // left boundary
+      const left = e.clientX - offsetLeft + 15; // 15: margin right
+      if (left > maxLeft) {
+        this.left = maxLeft;
+      } else {
+        this.left = left;
+      }
+      this.top = e.clientY;
+      this.visible = true;
+      this.selectedTag = tag;
+    },
+    closeMenu() {
+      this.visible = false;
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.tags-view-container {
+  padding: 6px 0;
+  width: 100%;
+  background: #ffffff;
+  // border-bottom: 1px solid #d8dce5;
+  // box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .12), 0 0 3px 0 rgba(0, 0, 0, .04);
+  .tags-view-wrapper {
+    .tags-view-item {
+      display: inline-block;
+      position: relative;
+      cursor: pointer;
+      height: 36px;
+      line-height: 36px;
+      border: 1px solid #eeeeee;
+      color: #666666;
+      background: #fff;
+      padding: 0 8px;
+      font-size: 14px;
+      margin-left: 10px;
+      border-radius: 3px;
+      &:first-of-type {
+        margin-left: 20px;
+      }
+      &:last-of-type {
+        margin-right: 20px;
+      }
+      &.active {
+        background-color: #fff;
+        color: #333333;
+        border-color: #C8CED5;
+        // &::before {
+        //   content: '';
+        //   background: #fff;
+        //   display: inline-block;
+        //   width: 8px;
+        //   height: 8px;
+        //   border-radius: 50%;
+        //   position: relative;
+        //   margin-right: 2px;
+        // }
+      }
+    }
+  }
+  .contextmenu {
+    margin: 0;
+    background: #fff;
+    z-index: 3000;
+    position: absolute;
+    list-style-type: none;
+    padding: 5px 0;
+    border-radius: 4px;
+    font-size: 12px;
+    font-weight: 400;
+    color: #333;
+    box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, 0.3);
+    li {
+      margin: 0;
+      padding: 7px 16px;
+      cursor: pointer;
+      &:hover {
+        background: #eee;
+      }
+    }
+  }
+}
+</style>
+
+<style lang="scss" scoped>
+//reset element css of el-icon-close
+.tags-view-wrapper {
+  .tags-view-item {
+    .el-icon-close {
+      font-size: 16px;
+      border-radius: 50%;
+      text-align: center;
+      transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
+      transform-origin: 100% 50%;
+      &:before {
+        transform: scale(0.6);
+        display: inline-block;
+      }
+      &:hover {
+        background-color: #b4bccc;
+        color: #fff;
+      }
+    }
+  }
+}
+</style>
diff --git a/project-web/src/layout/components/index.js b/project-web/src/layout/components/index.js
new file mode 100644
index 0000000..6f53956
--- /dev/null
+++ b/project-web/src/layout/components/index.js
@@ -0,0 +1,14 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+export { default as AppMain } from './AppMain';
+export { default as Navbar } from './Navbar';
+export { default as Settings } from './Settings';
+export { default as Sidebar } from './Sidebar/index.vue';
+export { default as TagsView } from './TagsView/index.vue';
diff --git "a/project-web/src/layout/imgs/Group 42731\346\220\234\347\264\2429579.png" "b/project-web/src/layout/imgs/Group 42731\346\220\234\347\264\2429579.png"
new file mode 100644
index 0000000..882a5bd
--- /dev/null
+++ "b/project-web/src/layout/imgs/Group 42731\346\220\234\347\264\2429579.png"
Binary files differ
diff --git a/project-web/src/layout/imgs/bggl.png b/project-web/src/layout/imgs/bggl.png
new file mode 100644
index 0000000..f512cd6
--- /dev/null
+++ b/project-web/src/layout/imgs/bggl.png
Binary files differ
diff --git a/project-web/src/layout/imgs/bgglA.png b/project-web/src/layout/imgs/bgglA.png
new file mode 100644
index 0000000..7442177
--- /dev/null
+++ b/project-web/src/layout/imgs/bgglA.png
Binary files differ
diff --git a/project-web/src/layout/imgs/fbgl.png b/project-web/src/layout/imgs/fbgl.png
new file mode 100644
index 0000000..0243f3f
--- /dev/null
+++ b/project-web/src/layout/imgs/fbgl.png
Binary files differ
diff --git a/project-web/src/layout/imgs/fbglA.png b/project-web/src/layout/imgs/fbglA.png
new file mode 100644
index 0000000..2367d21
--- /dev/null
+++ b/project-web/src/layout/imgs/fbglA.png
Binary files differ
diff --git a/project-web/src/layout/imgs/jcxx.png b/project-web/src/layout/imgs/jcxx.png
new file mode 100644
index 0000000..12716a7
--- /dev/null
+++ b/project-web/src/layout/imgs/jcxx.png
Binary files differ
diff --git a/project-web/src/layout/imgs/jcxxA.png b/project-web/src/layout/imgs/jcxxA.png
new file mode 100644
index 0000000..ee4e1d6
--- /dev/null
+++ b/project-web/src/layout/imgs/jcxxA.png
Binary files differ
diff --git a/project-web/src/layout/imgs/jxgl.png b/project-web/src/layout/imgs/jxgl.png
new file mode 100644
index 0000000..faa42f1
--- /dev/null
+++ b/project-web/src/layout/imgs/jxgl.png
Binary files differ
diff --git a/project-web/src/layout/imgs/jxglA.png b/project-web/src/layout/imgs/jxglA.png
new file mode 100644
index 0000000..59a67bd
--- /dev/null
+++ b/project-web/src/layout/imgs/jxglA.png
Binary files differ
diff --git a/project-web/src/layout/imgs/kfgzt.png b/project-web/src/layout/imgs/kfgzt.png
new file mode 100644
index 0000000..7257d1f
--- /dev/null
+++ b/project-web/src/layout/imgs/kfgzt.png
Binary files differ
diff --git a/project-web/src/layout/imgs/kfgztA.png b/project-web/src/layout/imgs/kfgztA.png
new file mode 100644
index 0000000..82ebbd5
--- /dev/null
+++ b/project-web/src/layout/imgs/kfgztA.png
Binary files differ
diff --git a/project-web/src/layout/imgs/mydgl.png b/project-web/src/layout/imgs/mydgl.png
new file mode 100644
index 0000000..5227e97
--- /dev/null
+++ b/project-web/src/layout/imgs/mydgl.png
Binary files differ
diff --git a/project-web/src/layout/imgs/mydglA.png b/project-web/src/layout/imgs/mydglA.png
new file mode 100644
index 0000000..f46d754
--- /dev/null
+++ b/project-web/src/layout/imgs/mydglA.png
Binary files differ
diff --git a/project-web/src/layout/imgs/sjgl.png b/project-web/src/layout/imgs/sjgl.png
new file mode 100644
index 0000000..2230525
--- /dev/null
+++ b/project-web/src/layout/imgs/sjgl.png
Binary files differ
diff --git a/project-web/src/layout/imgs/sjglA.png b/project-web/src/layout/imgs/sjglA.png
new file mode 100644
index 0000000..e58202a
--- /dev/null
+++ b/project-web/src/layout/imgs/sjglA.png
Binary files differ
diff --git a/project-web/src/layout/imgs/sy.png b/project-web/src/layout/imgs/sy.png
new file mode 100644
index 0000000..328a8d3
--- /dev/null
+++ b/project-web/src/layout/imgs/sy.png
Binary files differ
diff --git a/project-web/src/layout/imgs/syA.png b/project-web/src/layout/imgs/syA.png
new file mode 100644
index 0000000..0d1b68e
--- /dev/null
+++ b/project-web/src/layout/imgs/syA.png
Binary files differ
diff --git a/project-web/src/layout/imgs/wtgl.png b/project-web/src/layout/imgs/wtgl.png
new file mode 100644
index 0000000..41f3b1a
--- /dev/null
+++ b/project-web/src/layout/imgs/wtgl.png
Binary files differ
diff --git a/project-web/src/layout/imgs/wtglA.png b/project-web/src/layout/imgs/wtglA.png
new file mode 100644
index 0000000..2e40749
--- /dev/null
+++ b/project-web/src/layout/imgs/wtglA.png
Binary files differ
diff --git a/project-web/src/layout/imgs/xmgl.png b/project-web/src/layout/imgs/xmgl.png
new file mode 100644
index 0000000..1d3e0aa
--- /dev/null
+++ b/project-web/src/layout/imgs/xmgl.png
Binary files differ
diff --git a/project-web/src/layout/imgs/xmglA.png b/project-web/src/layout/imgs/xmglA.png
new file mode 100644
index 0000000..e5b73c8
--- /dev/null
+++ b/project-web/src/layout/imgs/xmglA.png
Binary files differ
diff --git a/project-web/src/layout/imgs/xtgl.png b/project-web/src/layout/imgs/xtgl.png
new file mode 100644
index 0000000..d5d1b8f
--- /dev/null
+++ b/project-web/src/layout/imgs/xtgl.png
Binary files differ
diff --git a/project-web/src/layout/imgs/xtglA.png b/project-web/src/layout/imgs/xtglA.png
new file mode 100644
index 0000000..8dd4614
--- /dev/null
+++ b/project-web/src/layout/imgs/xtglA.png
Binary files differ
diff --git a/project-web/src/layout/imgs/zskgl.png b/project-web/src/layout/imgs/zskgl.png
new file mode 100644
index 0000000..4e7ace1
--- /dev/null
+++ b/project-web/src/layout/imgs/zskgl.png
Binary files differ
diff --git a/project-web/src/layout/imgs/zskglA.png b/project-web/src/layout/imgs/zskglA.png
new file mode 100644
index 0000000..2e4ca7c
--- /dev/null
+++ b/project-web/src/layout/imgs/zskglA.png
Binary files differ
diff --git a/project-web/src/layout/index.vue b/project-web/src/layout/index.vue
new file mode 100644
index 0000000..3c1a382
--- /dev/null
+++ b/project-web/src/layout/index.vue
@@ -0,0 +1,531 @@
+<template>
+  <el-container>
+    <div class="app-wrapper">
+      <div v-if="device === 'mobile' && sidebar.opened" class="drawer-bg" @click="handleClickOutside"/>
+      <div :class="{ hasTagsView: needTagsView }" class="main-container">
+        <el-header height="70px">
+          <div :class="{ 'fixed-header': fixedHeader }">
+            <navbar />
+          </div>
+        </el-header>
+        <el-container>
+          <el-aside class="my-aside" :style="{ backgroundColor: !openAside ? '#fff' : '#EBEEF5' }">
+            <!--        <el-aside class="my-aside" :style="{backgroundColor: (!openAside||sidebarRouters.length&&rootRoute&&rootRoute.meta)?'#F6F8FC':'#EBEEF5'}">-->
+            <el-scrollbar style="position: relative" wrap-class="scrollbar-wrapper">
+              <template v-for="(route, index) in sidebarRouters">
+                <div
+                  v-if="!route.hidden"
+                  :key="route.id"
+                  class="root-route"
+                  :class="{ act: actId === route.id }"
+                  @click="routeClick(route)"
+                >
+                  <!--                  <i class="route-icon" :class="'el-icon-' + route.icon" />-->
+<!--                  <img v-if="actId === route.id" :src="iconsList[actId].urlA" alt=""/>-->
+<!--                  <img v-else :src="iconsList[route.id].url" alt=""/>-->
+                  <div class="root-route-title">{{ route.name }}</div>
+                </div>
+              </template>
+            </el-scrollbar>
+          </el-aside>
+          <div class="my-aside-box">
+            <div
+              v-if="subRoute && subRoute.length > 0 && rootRoute"
+              :class="openAside ? 'aside-box' : 'aside-box-close'"
+            >
+              <el-aside width="170px;" style="height: 100%; border-right: 1px solid #eeeeee">
+                <el-scrollbar wrap-class="scrollbar-wrapper">
+                  <div class="menu-title">{{ rootRoute.name }}</div>
+                  <el-menu
+                    :default-active="activeMenu"
+                    :collapse="false"
+                    :background-color="variables.menuBg"
+                    :text-color="variables.menuText"
+                    :unique-opened="true"
+                    :active-text-color="variables.menuActiveText"
+                    :collapse-transition="false"
+                    mode="vertical"
+                    @select="handleSelect"
+                  >
+                    <sidebar-item v-for="route in subRoute" :key="route.id" :item="route" :base-path="route.path"/>
+                  </el-menu>
+                </el-scrollbar>
+              </el-aside>
+            </div>
+            <div
+              class="toggle-box"
+              v-if="subRoute && subRoute.length"
+              :class="openAside ? '' : 'toggle-box-right'"
+              @click="switchOpen"
+            >
+              <i style="font-size: 16px" class="el-icon-arrow-left"/>
+            </div>
+          </div>
+          <el-main>
+            <tags-view v-if="needTagsView" :openAside="openAside" :visible="true"/>
+            <app-main/>
+          </el-main>
+        </el-container>
+      </div>
+    </div>
+  </el-container>
+</template>
+
+<script>
+import {AppMain, Navbar, Settings, Sidebar, TagsView} from './components';
+import ResizeMixin from './mixin/ResizeHandler';
+import {mapGetters, mapState} from 'vuex';
+import SidebarItem from './components/Sidebar/SidebarItem';
+import variables from '@/styles/variables.scss';
+import {isEmpty, isNotEmpty} from '@/utils/validate';
+
+export default {
+  name: 'Layout',
+  data() {
+    return {
+      openAside: true,// 浜岀骇鑿滃崟鏄惁灞曞紑
+      actId: '',
+      activeMenuIdx: '',
+      subRoute: [],
+      rootRoute: {meta: {title: ''}},
+      iconsList: {
+        12000: {
+          url: require('./imgs/kfgzt.png'),
+          urlA: require('./imgs/kfgztA.png'),
+        },
+        13000: {
+          url: require('./imgs/sjgl.png'),
+          urlA: require('./imgs/sjglA.png'),
+        },
+        6000: {
+          url: require('./imgs/jcxx.png'),
+          urlA: require('./imgs/jcxxA.png'),
+        },
+        7000: {
+          url: require('./imgs/jcxx.png'),
+          urlA: require('./imgs/jcxxA.png'),
+        },
+        10000: {
+          url: require('./imgs/xtgl.png'),
+          urlA: require('./imgs/xtglA.png'),
+        },
+        20230801151431: {
+          url: require('./imgs/mydgl.png'),
+          urlA: require('./imgs/mydglA.png'),
+        },
+        11000: {
+          url: require('./imgs/xmgl.png'),
+          urlA: require('./imgs/xmglA.png'),
+        },
+        20230726152522: {
+          url: require('./imgs/zskgl.png'),
+          urlA: require('./imgs/zskglA.png'),
+        },
+        8000: {
+          url: require('./imgs/xtgl.png'),
+          urlA: require('./imgs/xtglA.png'),
+        },
+      },
+    };
+  },
+  components: {
+    AppMain,
+    Navbar,
+    Settings,
+    Sidebar,
+    TagsView,
+    SidebarItem
+  },
+  mixins: [ResizeMixin],
+  watch: {
+    $route(to, from) {
+      const route = this.$route;
+      let root = this.getCurrentRoute(route.path, this.sidebarRouters);
+      if (root && root.length > 0) {
+        this.rootRoute = root[0];
+      }
+      this.actId = this.rootRoute.id;
+
+      if (this.activeMenu.length > 1) {
+        this.subActId = this.activeMenu[1].id;
+        this.subRoute = this.rootRoute.childList;
+      } else {
+        this.subActId = '';
+        this.subRoute = [];
+      }
+    }
+  },
+  computed: {
+    ...mapGetters(['permission_routes', 'sidebarRouters', 'sidebar']),
+    ...mapState({
+      sidebar: (state) => state.app.sidebar,
+      device: (state) => state.app.device,
+      showSettings: (state) => state.settings.showSettings,
+      needTagsView: (state) => state.settings.tagsView,
+      fixedHeader: (state) => state.settings.fixedHeader,
+    }),
+    classObj() {
+      return {
+        openSidebar: this.sidebar.opened,
+        withoutAnimation: this.sidebar.withoutAnimation,
+        mobile: this.device === 'mobile',
+      };
+    },
+    activeMenu() {
+      const route = this.$route;
+      const {meta, path} = route;
+      // if set path, the sidebar will highlight the path you set
+      if (meta.activeMenu) {
+        return meta.activeMenu;
+      }
+      return path;
+    },
+    showLogo() {
+      return this.$store.state.settings.sidebarLogo;
+    },
+    variables() {
+      return variables;
+    },
+    isCollapse() {
+      return !this.sidebar.opened;
+    },
+  },
+  mounted() {
+    const route = this.$route;
+    let root = this.getCurrentRoute(route.path, this.sidebarRouters);
+    if (root && root.length > 0) {
+      this.rootRoute = root[0];
+      this.actId = this.rootRoute.id;
+    }
+    if (this.activeMenu.length > 1) {
+      this.subActId = this.activeMenu[1].id;
+      this.subRoute = this.rootRoute.childList;
+    }
+    if(!localStorage.getItem('openAside')){
+      localStorage.setItem('openAside','open')
+
+    }
+    if(localStorage.getItem('openAside')=='open'){
+      this.openAside=true
+    }
+    if(localStorage.getItem('openAside')=='close'){
+      this.openAside=false
+    }
+  },
+  methods: {
+    switchOpen(){
+      this.openAside=!this.openAside
+      localStorage.setItem('openAside',this.openAside?'open':'close')
+    },
+    handleSelect(key, keyPath) {
+      this.activeMenuIdx = key;
+    },
+    routeClick(route) {
+      // console.log(route)
+      this.rootRoute = route;
+      this.subRoute = route.childList;
+      this.actId = route.id;
+      const rootRoute = this.getFirstRoute(route);
+
+      if (route.childList.length == 0) {
+        this.$router.push(rootRoute.component);
+      }
+      this.openAside = true;
+    },
+    getFirstRoute(route) {
+      if (isNotEmpty(route.childList)) {
+        const len = route.childList.length;
+        for (let i = 0; i < len; i++) {
+          const item = route.childList[i];
+          if (isNotEmpty(item)) {
+            const route = this.getFirstRoute(item);
+            if (isEmpty(route.childList)) {
+              return route;
+            }
+          }
+        }
+      } else {
+        return route;
+      }
+    },
+    getCurrentRoute(path, nodes, ids) {
+      if (ids === undefined) {
+        ids = [];
+      }
+      // console.log(path,nodes,'okookk')
+      const len = nodes.length;
+      for (let i = 0; i < len; i++) {
+        const item = nodes[i];
+        const idArr = ids.concat();
+        idArr.push(item);
+        // console.log(item.url , path)
+        if (item.component === path) {
+          return idArr;
+        }
+        if (item.childList && item.childList.length > 0) {
+          const findResult = this.getCurrentRoute(path, item.childList, idArr);
+          if (findResult) {
+            return findResult;
+          }
+        }
+      }
+    },
+    handleClickOutside() {
+      this.$store.dispatch('app/closeSideBar', {withoutAnimation: false});
+    }
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+@import '~@/styles/mixin.scss';
+@import '~@/styles/variables.scss';
+
+.el-main {
+  padding: 0;
+}
+
+> > > .el-scrollbar__ba {
+  display: none;
+}
+
+> > > .el-scrollbar__thumb {
+  display: none;
+}
+
+> > > .el-menu-item {
+  height: 35px;
+  line-height: 35px;
+}
+
+.open-image {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  position: fixed;
+  background-color: rgba(0, 0, 0, 0.6);
+  height: 100%;
+  width: 100%;
+  top: 0;
+  left: 0;
+  z-index: 999999;
+}
+
+.app-wrapper {
+  @include clearfix;
+  position: relative;
+  height: 100%;
+  width: 100%;
+
+  &.mobile.openSidebar {
+    position: fixed;
+    top: 0;
+  }
+}
+
+.drawer-bg {
+  background: #000;
+  opacity: 0.3;
+  width: 100%;
+  top: 0;
+  height: 100%;
+  position: absolute;
+  z-index: 999;
+}
+
+.fixed-header {
+  position: fixed;
+  top: 0;
+  right: 0;
+  z-index: 9;
+  width: calc(100% - #{$base-sidebar-width});
+  transition: width 0.28s;
+}
+
+.mobile .fixed-header {
+  width: 100%;
+}
+
+.el-submenu__icon-arrow {
+  color: #fff !important;
+}
+
+.header {
+  width: 100%;
+  -webkit-box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
+  box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
+  position: fixed;
+  z-index: 3;
+  top: 60px;
+}
+
+.header .navbar {
+  max-width: 1200px;
+  margin-left: auto;
+  margin-right: auto;
+  -webkit-box-shadow: 0 0 0;
+  box-shadow: 0 0 0;
+}
+
+.root-route {
+  align-self: center;
+  width: 92px;
+  height: 58px;
+  border-radius: 10px;
+  cursor: pointer;
+  font-size: 14px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  margin: 20px auto;
+  color: #666;
+  line-height: 1;
+  transition: 0.3s;
+
+  .route-icon {
+    width: 30px;
+    height: 30px;
+    font-size: 30px;
+    line-height: 1;
+    color: #c4c4c4;
+  }
+
+  .root-route-title {
+    margin-top: 2px;
+  }
+}
+
+.root-route:hover {
+  background-color: #0d997c;
+  color: #fff;
+
+  .route-icon {
+    width: 30px;
+    height: 30px;
+    font-size: 30px;
+    line-height: 1;
+    color: #fff;
+  }
+}
+
+.root-route.act {
+  background-color: #0d997c;
+  color: #fff;
+
+  .route-icon {
+    width: 30px;
+    height: 30px;
+    font-size: 30px;
+    line-height: 1;
+    color: #fff;
+  }
+}
+
+> > > .el-aside {
+  padding: 0 10px;
+  width: 170px;
+}
+
+.aside-box {
+  width: 170px;
+  transition: all 0.3s;
+  height: calc(100vh - 80px);
+  background-color: #fff;
+  position: relative;
+}
+
+.aside-box-close {
+  transition: all 0.3s;
+  width: 0;
+  overflow: hidden;
+}
+
+.toggle-box {
+  cursor: pointer;
+  width: 23px;
+  height: 97px;
+  border-radius: 0 31px 31px 0;
+  border: 1px solid #eeeeee;
+  box-sizing: border-box;
+  background: #0D997C;
+  position: absolute;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  color: #999;
+  font-size: 24px;
+  top: 50%;
+  right: -22px;
+  z-index: 2;
+  transition: all 0.3s;
+  transition-delay: 0.2s;
+  transform: rotate(0);
+  transform: translateY(-50%);
+  i {
+    color: #fff;
+  }
+}
+
+.toggle-box-right i {
+  transform: rotate(180deg);
+  transition-delay: 0.2s;
+}
+
+.breadcrumb {
+  height: 56px;
+  line-height: 56px;
+  padding: 0 24px;
+  font-size: 18px;
+  font-weight: bold;
+  background-color: #fff;
+}
+
+.my-aside {
+  padding: 0;
+  width: 121px !important;
+  transition: all 0.3s;
+  height: calc(100vh - 80px);
+  overflow-y: auto;
+
+  &::-webkit-scrollbar {
+    display: none;
+    width: 0 !important;
+    -ms-overflow-style: none;
+  }
+}
+
+.bg {
+  width: 121px;
+  position: absolute;
+  bottom: 0;
+  z-index: -1;
+}
+
+.el-menu {
+  border: none;
+}
+
+.menu-title {
+  background-color: #F6F8FC;
+  padding: 0px 10px;
+  margin: 10px 0;
+  font-size: 16px;
+  color: #1D2129;
+  border-radius: 4px;
+}
+
+.my-aside-box {
+  position: relative;
+
+  &::-webkit-scrollbar {
+    display: none;
+    width: 0 !important;
+    -ms-overflow-style: none;
+  }
+}
+
+.my-aside-box::-webkit-scrollbar {
+  display: none;
+}
+</style>
diff --git a/project-web/src/layout/mixin/ResizeHandler.js b/project-web/src/layout/mixin/ResizeHandler.js
new file mode 100644
index 0000000..29563a4
--- /dev/null
+++ b/project-web/src/layout/mixin/ResizeHandler.js
@@ -0,0 +1,55 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import store from '@/store';
+
+const { body } = document;
+const WIDTH = 992; // refer to Bootstrap's responsive design
+
+export default {
+  watch: {
+    $route() {
+      if (this.device === 'mobile' && this.sidebar.opened) {
+        store.dispatch('app/closeSideBar', { withoutAnimation: false });
+      }
+    },
+  },
+  beforeMount() {
+    window.addEventListener('resize', this.$_resizeHandler);
+  },
+  beforeDestroy() {
+    window.removeEventListener('resize', this.$_resizeHandler);
+  },
+  mounted() {
+    const isMobile = this.$_isMobile();
+    if (isMobile) {
+      store.dispatch('app/toggleDevice', 'mobile');
+      store.dispatch('app/closeSideBar', { withoutAnimation: true });
+    }
+  },
+  methods: {
+    // use $_ for mixins properties
+    // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential
+    $_isMobile() {
+      const rect = body.getBoundingClientRect();
+      return rect.width - 1 < WIDTH;
+    },
+    $_resizeHandler() {
+      if (!document.hidden) {
+        const isMobile = this.$_isMobile();
+        store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop');
+
+        if (isMobile) {
+          store.dispatch('app/closeSideBar', { withoutAnimation: true });
+        }
+      }
+    },
+  },
+};
diff --git a/project-web/src/libs/debounce.js b/project-web/src/libs/debounce.js
new file mode 100644
index 0000000..cd068a5
--- /dev/null
+++ b/project-web/src/libs/debounce.js
@@ -0,0 +1,19 @@
+/**
+ * 涓�涓畝鍗曠殑鍑芥暟闃叉姈
+ * @param {Function} fun 闇�瑕侀檺鍒舵墽琛岄鐜囩殑鍑芥暟
+ * @param {Number} delay 寤惰繜鏃堕棿锛岃繖娈垫椂闂磋繃鍚庯紝鎵嶅彲瑙﹀彂绗簩娆�
+ */
+export default function (fun, delay) {
+  // 璁板綍涓婁竴娆″嚱鏁拌Е鍙戠殑鏃堕棿
+  var timer = null;
+  var debounced = function () {
+    var ctx = this;
+    var args = arguments;
+    // 娓呴櫎涓婁竴娆″欢鏃跺櫒
+    if (timer) clearTimeout(timer);
+    timer = setTimeout(function () {
+      fun.apply(ctx, args);
+    }, delay);
+  };
+  return debounced;
+}
diff --git a/project-web/src/libs/dialog.js b/project-web/src/libs/dialog.js
new file mode 100644
index 0000000..5904ec5
--- /dev/null
+++ b/project-web/src/libs/dialog.js
@@ -0,0 +1,67 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import {
+  Confirm as confirm,
+  Alert as alert,
+  Toast as toast,
+  Notify as notify,
+  Loading as loading,
+} from 'vue-ydui/dist/lib.rem/dialog';
+
+const dialog = {
+  confirm,
+  alert,
+  toast,
+  notify,
+  loading,
+};
+
+const icons = { error: '鎿嶄綔澶辫触', success: '鎿嶄綔鎴愬姛' };
+Object.keys(icons).reduce((dialog, key) => {
+  dialog[key] = (mes, obj = {}) => {
+    return new Promise(function (resolve) {
+      toast({
+        mes: mes || icons[key],
+        timeout: 1000,
+        icon: key,
+        callback: () => {
+          resolve();
+        },
+        ...obj,
+      });
+    });
+  };
+  return dialog;
+}, dialog);
+
+dialog.message = (mes = '鎿嶄綔澶辫触', obj = {}) => {
+  return new Promise(function (resolve) {
+    toast({
+      mes,
+      timeout: 1000,
+      callback: () => {
+        resolve();
+      },
+      ...obj,
+    });
+  });
+};
+
+dialog.validateError = (...args) => {
+  validatorDefaultCatch(...args);
+};
+
+export function validatorDefaultCatch(err, type = 'message') {
+  console.log(err);
+  return dialog[type](err.errors[0].message);
+}
+
+export default dialog;
diff --git a/project-web/src/libs/index.js b/project-web/src/libs/index.js
new file mode 100644
index 0000000..48e43d0
--- /dev/null
+++ b/project-web/src/libs/index.js
@@ -0,0 +1,44 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+import modalIcon from '@/libs/modal-icon';
+import modalParserFrom from '@/libs/modal-parserFrom';
+import modalSure from '@/libs/modal-sure';
+import modalPrompt from '@/libs/modal-prompt';
+import timeOptions from '@/libs/timeOptions';
+import dialog from '@/libs/dialog';
+import * as constants from '@/utils/constants.js';
+import * as selfUtil from '@/utils/ZBKJIutil.js';
+import * as Auth from '@/libs/wechat';
+import util from '@/utils/utils';
+import schema from 'async-validator';
+import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree } from '@/utils/parsing';
+import axios from 'axios';
+export default {
+  install(Vue) {
+    Vue.prototype.$modalSure = modalSure;
+    Vue.prototype.$modalIcon = modalIcon;
+    Vue.prototype.$modalParserFrom = modalParserFrom;
+    Vue.prototype.$timeOptions = timeOptions;
+    Vue.prototype.$constants = constants;
+    Vue.prototype.$selfUtil = selfUtil;
+    Vue.prototype.handleTree = handleTree;
+    Vue.prototype.parseTime = parseTime;
+    Vue.prototype.resetForm = resetForm;
+    Vue.prototype.$dialog = dialog;
+    Vue.prototype.$scroll = scroll;
+    Vue.prototype.$wechat = Auth;
+    Vue.prototype.$util = util;
+    Vue.prototype.$modalPrompt = modalPrompt;
+    Vue.prototype.$axios = axios;
+    Vue.prototype.$validator = function (rule) {
+      return new schema(rule);
+    };
+  },
+};
diff --git a/project-web/src/libs/modal-coupon.js b/project-web/src/libs/modal-coupon.js
new file mode 100644
index 0000000..493294d
--- /dev/null
+++ b/project-web/src/libs/modal-coupon.js
@@ -0,0 +1,57 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+/**
+ * 浼樻儬鍒稿垪琛ㄥ脊绐楀舰寮忓睍绀虹粍浠�
+ * @param handle
+ * @param keyNum 閲嶇疆琛ㄥ崟key鍊�
+ * @param callback 鍥炶皟鍑芥暟
+ * @param couponId 浼樻儬鍒竔d
+ * @param userIds 鐢ㄦ埛id
+ * @returns {Promise<any>}
+ */
+export default function modalCoupon(handle, keyNum, callback, couponId = [], userIds) {
+  const h = this.$createElement;
+  return new Promise((resolve, reject) => {
+    this.$msgbox({
+      title: '浼樻儬鍒稿垪琛�',
+      customClass: 'upload-form-temp',
+      closeOnClickModal: false,
+      showClose: false,
+      message: h('div', { class: 'common-form-upload' }, [
+        h('couponList', {
+          props: {
+            handle: handle,
+            couponId: couponId,
+            keyNum: keyNum,
+            userIds: userIds,
+          },
+          on: {
+            getCouponId(id) {
+              callback(id);
+            },
+          },
+        }),
+      ]),
+      showCancelButton: false,
+      showConfirmButton: false,
+    })
+      .then(() => {
+        resolve();
+      })
+      .catch(() => {
+        reject();
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑�',
+        });
+      });
+  });
+}
diff --git a/project-web/src/libs/modal-icon.js b/project-web/src/libs/modal-icon.js
new file mode 100644
index 0000000..f545bc8
--- /dev/null
+++ b/project-web/src/libs/modal-icon.js
@@ -0,0 +1,47 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+/**
+ * 鑿滃崟鍥炬爣寮圭獥褰㈠紡灞曠ず缁勪欢
+ * @param callback 鍥炶皟鍑芥暟
+ * @returns {Promise<any>}
+ */
+export default function modalIcon(callback) {
+  const h = this.$createElement;
+  return new Promise((resolve, reject) => {
+    this.$msgbox({
+      title: '鑿滃崟鍥炬爣',
+      customClass: 'upload-form',
+      closeOnClickModal: false,
+      showClose: false,
+      message: h('div', { class: 'common-form-upload' }, [
+        h('iconFrom', {
+          on: {
+            getIcon(n) {
+              callback(n);
+            },
+          },
+        }),
+      ]),
+      showCancelButton: false,
+      showConfirmButton: false,
+    })
+      .then(() => {
+        resolve();
+      })
+      .catch(() => {
+        reject();
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑�',
+        });
+      });
+  });
+}
diff --git a/project-web/src/libs/modal-parserFrom.js b/project-web/src/libs/modal-parserFrom.js
new file mode 100644
index 0000000..24803ff
--- /dev/null
+++ b/project-web/src/libs/modal-parserFrom.js
@@ -0,0 +1,49 @@
+
+/**
+ * 寮圭獥鏍峰紡鐨勮〃鍗曢厤缃殑鎻愪氦
+ * @param title 鏍囬
+ * @param formId 琛ㄥ崟id
+ * @param isCreate 鏄惁鏄紪杈�
+ * @param editData 璇︽儏鏁版嵁
+ * @param callback 鍥炶皟鍑芥暟
+ * @param keyNum 閲嶇疆琛ㄥ崟key鍊�
+ * @returns {Promise<any>}
+ */
+export default function modalParserFrom(title, formId, isCreate, editData, callback, keyNum) {
+  const h = this.$createElement;
+  return new Promise((resolve, reject) => {
+    this.$msgbox({
+      title,
+      customClass: 'upload-form',
+      closeOnClickModal: false,
+      showClose: true,
+      message: h('div', { class: 'common-form-upload' }, [
+        h('ZBParser', {
+          props: {
+            formId,
+            isCreate,
+            editData,
+            keyNum,
+          },
+          on: {
+            submit(formValue) {
+              callback(formValue);
+            },
+          },
+        }),
+      ]),
+      showCancelButton: false,
+      showConfirmButton: false,
+    })
+      .then(() => {
+        resolve();
+      })
+      .catch(() => {
+        reject();
+        // this.$message({
+        //   type: 'info',
+        //   message: '宸插彇娑�'
+        // })
+      });
+  });
+}
diff --git a/project-web/src/libs/modal-prompt.js b/project-web/src/libs/modal-prompt.js
new file mode 100644
index 0000000..3acd095
--- /dev/null
+++ b/project-web/src/libs/modal-prompt.js
@@ -0,0 +1,56 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+/**
+ * $prompt涓�琛屽唴瀹筰nput鎻愪氦灏佽
+ * @param inputType input type 绫诲瀷
+ * @param title 鏍囬
+ * @param val 鍥炴樉鐨勫��
+ * @returns {Promise<any>}
+ */
+export default function modalPrompt(inputType, title, val) {
+  return new Promise((resolve, reject) => {
+    this.$prompt(`${title}`, {
+      confirmButtonText: '纭畾',
+      cancelButtonText: '鍙栨秷',
+      inputErrorMessage: `璇疯緭鍏�${title}`,
+      inputType: inputType,
+      inputValue: val ? val : '',
+      showClose: false,
+      closeOnClickModal: false,
+      inputPlaceholder: `璇疯緭鍏�${title}`,
+      inputValidator: (value) => {
+        if (!value) return '杈撳叆涓嶈兘涓虹┖';
+      },
+      beforeClose: (action, instance, done) => {
+        if (action === 'confirm') {
+          instance.confirmButtonLoading = true;
+          instance.confirmButtonText = '鎵ц涓�...';
+          setTimeout(() => {
+            done();
+            setTimeout(() => {
+              instance.confirmButtonLoading = false;
+            }, 300);
+          }, 3000);
+        } else {
+          done();
+        }
+      },
+    })
+      .then(({ value }) => {
+        resolve(value);
+        // this.ruleForm.reason = value;
+        // this.submit();
+      })
+      .catch(() => {
+        this.$message.info('鍙栨秷杈撳叆');
+      });
+  });
+}
diff --git a/project-web/src/libs/modal-sure.js b/project-web/src/libs/modal-sure.js
new file mode 100644
index 0000000..cd5a0e3
--- /dev/null
+++ b/project-web/src/libs/modal-sure.js
@@ -0,0 +1,34 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+/**
+ * 鍐嶆纭畾寮圭獥缁勪欢
+ * @param title 鏍囬
+ * @returns {Promise<any>}
+ */
+export default function modalSure(title) {
+  return new Promise((resolve, reject) => {
+    this.$confirm(`纭畾${title || '姘镐箙鍒犻櫎璇ユ暟鎹�'}`, '鎻愮ず', {
+      confirmButtonText: '纭畾',
+      cancelButtonText: '鍙栨秷',
+      type: 'warning',
+    })
+      .then(() => {
+        resolve();
+      })
+      .catch(() => {
+        reject();
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑�',
+        });
+      });
+  });
+}
diff --git a/project-web/src/libs/public.js b/project-web/src/libs/public.js
new file mode 100644
index 0000000..34b8270
--- /dev/null
+++ b/project-web/src/libs/public.js
@@ -0,0 +1,24 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+/**
+ * @description 鐭俊鏄惁鐧诲綍
+ */
+export function isLogin() {
+  return new Promise((resolve, reject) => {
+    isLoginApi()
+      .then(async (res) => {
+        resolve(res);
+      })
+      .catch((res) => {
+        reject(res);
+      });
+  });
+}
diff --git a/project-web/src/libs/timeOptions.js b/project-web/src/libs/timeOptions.js
new file mode 100644
index 0000000..b48bc93
--- /dev/null
+++ b/project-web/src/libs/timeOptions.js
@@ -0,0 +1,65 @@
+// +---------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +---------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +---------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +---------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +---------------------------------------------------------------------
+
+export default {
+  shortcuts: [
+    {
+      text: '鏄ㄥぉ',
+      onClick(picker) {
+        const end = new Date();
+        const start = new Date();
+        start.setTime(start.getTime() - 3600 * 1000 * 24);
+        picker.$emit('pick', [start, end]);
+      },
+    },
+    {
+      text: '鏈�杩戜竷澶�',
+      onClick(picker) {
+        const end = new Date();
+        const start = new Date();
+        start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+        picker.$emit('pick', [start, end]);
+      },
+    },
+    {
+      text: '鏈湀',
+      onClick(picker) {
+        const end = new Date();
+        const start = new Date();
+        start.setTime(start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), 1)));
+        picker.$emit('pick', [start, end]);
+      },
+    },
+    {
+      text: '鏈�杩�30澶�',
+      onClick(picker) {
+        const end = new Date();
+        const start = new Date();
+        start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+        picker.$emit('pick', [start, end]);
+      },
+    },
+    {
+      text: '鏈�杩戜竴骞�',
+      onClick(picker) {
+        const end = new Date();
+        const start = new Date();
+        start.setTime(start.getTime() - 3600 * 1000 * 24 * 365);
+        picker.$emit('pick', [start, end]);
+      },
+    },
+  ],
+  disabledDate(time) {
+    let curDate = new Date().getTime();
+    let three = 365 * 24 * 3600 * 1000;
+    let threeMonths = curDate - three;
+    return time.getTime() > Date.now() || time.getTime() < threeMonths;
+  },
+};
diff --git a/project-web/src/libs/wechat.js b/project-web/src/libs/wechat.js
new file mode 100644
index 0000000..4b79ab5
--- /dev/null
+++ b/project-web/src/libs/wechat.js
@@ -0,0 +1,183 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import WechatJSSDK from 'wechat-jssdk/dist/client.umd';
+import { getWechatConfig, wechatAuth } from '@/api/system/wxApi';
+import { getToken, removeToken, setToken } from '@/utils/auth';
+import { parseQuery } from '@/utils';
+import Cookies from 'js-cookie';
+const STATE_KEY = 'wx_authorize_state';
+import store from '@/store';
+const WX_AUTH = 'wx_auth';
+const BACK_URL = 'login_back_url';
+const LOGINTYPE = 'loginType';
+let instance;
+let wechatObj;
+const LONGITUDE = 'user_longitude';
+const LATITUDE = 'user_latitude';
+
+const WECHAT_SCRIPT_URL = '//res.wx.qq.com/open/js/jweixin-1.6.0.js';
+
+/**
+ * 鏄惁鏄井淇�
+ */
+export function isWeixin() {
+  return navigator.userAgent.toLowerCase().indexOf('micromessenger') !== -1;
+}
+
+/**
+ * 鏄惁鏄Щ鍔ㄧ
+ */
+export function isPhone() {
+  return /(iPhone|iPad|iPod|iOS|Android)/i.test(navigator.userAgent);
+}
+
+export default function wechat() {
+  return new Promise((resolve, reject) => {
+    if (instance) return resolve(instance);
+    getWechatConfig()
+      .then((res) => {
+        const _wx = WechatJSSDK(res);
+        wechatObj = _wx;
+        _wx
+          .initialize()
+          .then(() => {
+            instance = _wx.wx;
+            instance.initConfig = res;
+            resolve(instance);
+          })
+          .catch(reject);
+      })
+      .catch((err) => {
+        reject(err);
+      });
+  });
+}
+
+export function loginByWxCode(code) {
+  return new Promise((resolve, reject) => {
+    let loginType = getToken();
+    wechatAuth(code)
+      .then((res) => {
+        store.commit('SET_TOKEN', res.token);
+        setToken(res.token);
+        Cookies.set(WX_AUTH, code);
+        resolve(res);
+      })
+      .catch((err) => {
+        reject(err);
+      });
+  });
+}
+
+export function getWXCodeByUrl(path, step) {
+  if (getToken()) return;
+  generatorWxUrl(path, step);
+}
+
+export function generatorWxUrl(path, step) {
+  wechat()
+    .then((wx) => {
+      window.location.href = getAuthUrl(wx.initConfig, path, step);
+    })
+    .catch((err) => {
+      reject(err);
+    });
+}
+
+function getAuthUrl(config, path, step) {
+  const finalUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${
+    config.appId
+  }&redirect_uri=${encodeURIComponent(path)}&response_type=code&scope=snsapi_base&state=${step}#wechat_redirect`;
+  return finalUrl;
+}
+
+function getQueryString(name) {
+  var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
+  var reg_rewrite = new RegExp('(^|/)' + name + '/([^/]*)(/|$)', 'i');
+  var r = window.location.search.substr(1).match(reg);
+  var q = window.location.pathname.substr(1).match(reg_rewrite);
+  if (r != null) {
+    return unescape(r[2]);
+  } else if (q != null) {
+    return unescape(q[2]);
+  } else {
+    return null;
+  }
+}
+
+/**
+ * 鍏紬鍙蜂簨浠�
+ * @param name 浜嬩欢鍚�
+ * @param config 閰嶇疆
+ * @returns {Promise<unknown>}
+ */
+export function wechatEvevt(name, config) {
+  return new Promise((resolve, reject) => {
+    let wx;
+    let configDefault = {
+      fail(res) {
+        if (wx) return reject({ is_ready: true, wx: wx });
+        getWechatConfig().then((res) => {
+          wechatObj.signSignature({
+            nonceStr: res.nonceStr,
+            signature: res.signature,
+            timestamp: res.timestamp,
+          });
+          wx = wechatObj.getOriginalWx();
+          reject({ is_ready: true, wx: wx });
+        });
+      },
+      success(res) {
+        resolve(res);
+      },
+      cancel(err) {
+        reject(err);
+      },
+      complete(err) {
+        reject(err);
+      },
+    };
+    Object.assign(configDefault, config);
+    getWechatConfig().then((res) => {
+      const _wx = WechatJSSDK(res);
+      _wx.initialize().then(() => {
+        instance = _wx.getOriginalWx();
+        instance.ready(() => {
+          if (typeof name === 'object') {
+            name.forEach((item) => {
+              instance[item] && instance[item](configDefault);
+            });
+          } else instance[name] && instance[name](configDefault);
+        });
+      });
+    });
+  });
+}
+
+export function ready() {
+  return new Promise((resolve) => {
+    if (typeof instance !== 'undefined') {
+      instance.ready(() => {
+        resolve(instance);
+      });
+    } else {
+      getWechatConfig().then((res) => {
+        const _wx = WechatJSSDK(res);
+        _wx.initialize().then(() => {
+          instance = _wx.wx;
+          instance.ready(() => {
+            resolve(instance);
+          });
+        });
+      });
+    }
+  });
+}
diff --git a/project-web/src/libs/yearOptions.js b/project-web/src/libs/yearOptions.js
new file mode 100644
index 0000000..95c7ca7
--- /dev/null
+++ b/project-web/src/libs/yearOptions.js
@@ -0,0 +1,37 @@
+// +---------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +---------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +---------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +---------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +---------------------------------------------------------------------
+
+export default {
+  shortcuts: [
+    {
+      text: '鏈湀',
+      onClick(picker) {
+        picker.$emit('pick', [new Date(), new Date()]);
+      },
+    },
+    {
+      text: '浠婂勾鑷充粖',
+      onClick(picker) {
+        const end = new Date();
+        const start = new Date(new Date().getFullYear(), 0);
+        picker.$emit('pick', [start, end]);
+      },
+    },
+    {
+      text: '鏈�杩戝叚涓湀',
+      onClick(picker) {
+        const end = new Date();
+        const start = new Date();
+        start.setMonth(start.getMonth() - 6);
+        picker.$emit('pick', [start, end]);
+      },
+    },
+  ],
+};
diff --git a/project-web/src/main.js b/project-web/src/main.js
new file mode 100644
index 0000000..7095f49
--- /dev/null
+++ b/project-web/src/main.js
@@ -0,0 +1,176 @@
+import Vue from 'vue';
+import '@babel/polyfill';
+import Element from 'element-ui';
+import 'normalize.css/normalize.css'; // a modern alternative to CSS resets
+import './styles/element-variables.scss';
+import '@/styles/index.scss'; // global css
+import '@/assets/iconfont/iconfont.css';
+import 'swiper/dist/css/swiper.css';
+import 'vue-ydui/dist/ydui.base.css';
+// import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree } from "@/utils/parsing";
+// 鎳掑姞杞�
+import VueLazyload from 'vue-lazyload';
+import VueAwesomeSwiper from 'vue-awesome-swiper';
+import Cookies from 'js-cookie';
+import Debounce from './libs/debounce.js'; //闃叉姈鑷畾涔夋寚浠�
+Vue.config.devtools = true;
+
+import Print from '@/utils/print';
+Vue.use(Print);
+// 鐧惧害鍦板浘
+import BaiduMap from 'vue-baidu-map'
+Vue.use(BaiduMap,{
+  ak:''
+});
+
+import App from './App';
+import store from './store';
+import router from './router';
+import base from './components/base/index'; // 鍏叡缁勪欢
+import './icons'; // icon
+import './permission'; // permission control
+import './utils/error-log'; // error integralLog
+import * as filters from './filters'; // global filters
+import {parseQuery} from '@/utils';
+import plugins from './plugins';
+import directive from './directive'; //directive
+import libs from './libs/index.js'; // 鍏ㄥ眬鍑芥暟
+import mySearch from '@/components/mySearch'; // 鍏叡鎼滅储
+import './directive/float';
+import './directive/num';
+import searchInfo from '@/utils/changeColor';
+import exportExcel from '@/utils/exportExcel'; // 瀵煎嚭
+import {previewDoc, downLoad} from '@/utils/base';
+Vue.prototype.exportExcelUtils = exportExcel;
+Vue.prototype.previewDoc = previewDoc;
+Vue.prototype.downLoad = downLoad;
+Vue.prototype.$searchInfo = searchInfo;
+Vue.use(VueLazyload, {
+  preLoad: 1.3,
+  error: require('./assets/imgs/no.png'),
+  loading: require('./assets/imgs/moren.jpg'),
+  attempt: 1,
+  listenEvents: ['scroll', 'wheel', 'mousewheel', 'resize', 'animationend', 'transitionend', 'touchmove'],
+});
+
+Vue.use(VueAwesomeSwiper);
+Vue.use(plugins);
+Vue.use(directive);
+Vue.use(libs);
+Vue.use(base);
+Vue.use(mySearch);
+let cookieName = 'VCONSOLE';
+let query = parseQuery();
+let urlSpread = query['spread'];
+let vconsole = query[cookieName.toLowerCase()];
+let md5Crmeb = 'b14d1e9baeced9bb7525ab19ee35f2d2'; //CRMEB MD5 鍔犲瘑寮�鍚痸console妯″紡
+let md5UnCrmeb = '3dca2162c4e101b7656793a1af20295c'; //UN_CREMB MD5 鍔犲瘑鍏抽棴vconsole妯″紡
+
+if (vconsole !== undefined) {
+  if (vconsole === md5UnCrmeb && Cookies.has(cookieName)) Cookies.remove(cookieName);
+} else vconsole = Cookies.get(cookieName);
+
+if (vconsole !== undefined && vconsole === md5Crmeb) {
+  Cookies.set(cookieName, md5Crmeb, 3600);
+  const module = () => import('vconsole');
+  module().then((Module) => {
+    new Module.default();
+  });
+}
+// 鑷畾涔夊疄鐜癝tring 绫诲瀷鐨剅eplaceAll鏂规硶
+String.prototype.replaceAll = function (s1, s2) {
+  return this.replace(new RegExp(s1, 'gm'), s2);
+};
+// Vue.prototype.$modalCoupon = modalCoupon
+/**
+ * If you don't want to use mock-server
+ * you want to use MockJs for mock api
+ * you can execute: mockXHR()
+ *
+ * Currently MockJs will be used in the production environment,
+ * please remove it before going online ! ! !
+ */
+// if (process.env.NODE_ENV === 'production') {
+//   const { mockXHR } = require('../mock')
+//   mockXHR()
+// }
+
+Vue.use(Element, {
+  size: 'small', // set element-ui default size
+  zIndex: 3000,
+});
+
+// register global utility filters
+Object.keys(filters).forEach((key) => {
+  Vue.filter(key, filters[key]);
+});
+
+Vue.config.productionTip = false;
+
+const $previewApp = document.getElementById('previewApp');
+const childAttrs = {
+  file: '',
+  dialog: ' width="600px" class="dialog-width" v-if="visible" :visible.sync="visible" :modal-append-to-body="false" ',
+};
+
+
+function buildLinks(links) {
+  let strs = '';
+  links.forEach((url) => {
+    strs += `<link href="${url}" rel="stylesheet">`;
+  });
+  return strs;
+}
+
+
+function newVue(attrs, main, html) {
+  // eslint-disable-next-line no-eval
+  main = eval(`(${main})`);
+  main.template = `<div>${html}</div>`;
+  new Vue({
+    components: {
+      child: main,
+    },
+    data() {
+      return {
+        visible: true,
+      };
+    },
+    template: `
+      <div>
+      <child ${attrs}/>
+      </div>`,
+  }).$mount('#app');
+}
+
+String.prototype.replaceAll = function (s1, s2) {
+  return this.replace(new RegExp(s1, 'gm'), s2);
+};
+
+/**
+ * 闃叉姈 闃叉閲嶅鐐瑰嚮
+ * 浼犲弬锛歷-debounceClick="() =>{handleFun(arg)}"
+ * 涓嶄紶鍙�:v-debounceClick="handleFun"
+ * delayTime:寤惰繜鐨勬椂闂�,鍙墽琛屾渶鍚庝竴娆�
+ */
+Vue.directive('debounceClick', {
+  bind(el, binding, vnode, oldvnode) {
+  },
+  inserted: function (el, binding) {
+    let delayTime = el.getAttribute('delay-time') || 1000;
+    el.onclick = Debounce(function () {
+      binding.value();
+    }, delayTime);
+  },
+});
+import '@/mock'
+new Vue({
+  el: '#app',
+  router,
+  store,
+  render: (h) => h(App),
+  beforeCreate() {
+    Vue.prototype.$EventBus = this
+  }
+
+});
diff --git a/project-web/src/mock/index.js b/project-web/src/mock/index.js
new file mode 100644
index 0000000..6f1f001
--- /dev/null
+++ b/project-web/src/mock/index.js
@@ -0,0 +1,37 @@
+import Mock from 'mockjs';
+import stageConfig from './projectConfig/stageConfig';
+import stageNode from './projectConfig/stageNode';
+import buildPlan from './projectConfig/buildPlan';
+import buildPlanNode from './projectConfig/buildPlanNode';
+import kanbanConfig from './projectConfig/kanbanConfig';
+import kanbanNode from './projectConfig/kanbanNode';
+import warningConfig from './projectConfig/warningConfig';
+import cancel from './projectManagement/cancel';
+import classify from './projectManagement/classify';
+import audit from './projectManagement/audit';
+import record from './projectManagement/record';
+import information from './projectManagement/information';
+/**
+ * 妯℃嫙鏁版嵁mock
+ *
+ * mock鏄惁寮�鍚ā鎷熸暟鎹嫤鎴�
+ *
+ * false 鏃朵负璇锋眰鎺ュ彛
+ */
+
+stageConfig({ mock: false }); //椤圭洰鑺傜偣閰嶇疆
+stageNode({ mock: false }); //椤圭洰闃舵鑺傜偣
+buildPlan({ mock: false }); //椤圭洰寤鸿璁″垝
+buildPlanNode({ mock: false }); //椤圭洰寤鸿璁″垝  闃舵鑺傜偣閰嶇疆
+kanbanConfig({ mock: false }); //鐪嬫澘鑺傜偣閰嶇疆
+kanbanNode({ mock: false }); //鐪嬫澘鑺傜偣閰嶇疆  妯$増鑺傜偣璁剧疆
+warningConfig({ mock: false }); //涓存湡棰勮璁剧疆
+classify({ mock: false }); //椤圭洰鍒嗙被
+cancel({ mock: false }); //椤圭洰鍙栨秷
+audit({ mock: false }); //椤圭洰瀹℃牳
+record({ mock: false }); //椤圭洰褰掓。
+information({ mock: false }); //椤圭洰淇℃伅
+// 寤惰繜鍔犺浇
+Mock.setup({
+  timeout: '1000',
+});
diff --git a/project-web/src/mock/projectConfig/buildPlan.js b/project-web/src/mock/projectConfig/buildPlan.js
new file mode 100644
index 0000000..f40d487
--- /dev/null
+++ b/project-web/src/mock/projectConfig/buildPlan.js
@@ -0,0 +1,68 @@
+import Mock from 'mockjs';
+
+/*椤圭洰寤鸿璁″垝*/
+export default ({mock}) => {
+  if (!mock) return;
+  //鏂板
+  Mock.mock(new RegExp("/pc/p/temp/project/add"), 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+
+    });
+  });
+  //鍒犻櫎
+  Mock.mock(new RegExp("/pc/p/temp/project/del"), 'delete', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+
+    });
+  });
+  //缂栬緫
+  Mock.mock(new RegExp("/pc/p/temp/project/upd"), 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+
+    });
+  });
+  //淇敼鐘舵��
+  Mock.mock(new RegExp("/pc/p/temp/project/updStatus"), 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+
+    });
+  });
+  //璇︽儏
+  Mock.mock(new RegExp("/pc/p/temp/project/detail"), 'get', () => {
+    return Mock.mock({
+      code: 1,
+      data: {
+        id: '@id',
+        projectName: '@ctitle(3,5)',
+        projectCode: '@id',
+        'planTypeName|1': ['涓皬鍨嬪疄鐗╃綉宸ョ▼', '澶у瀷瀹炵墿缃戝伐绋�', '灏忚妯′俊鎭寲宸ョ▼', '澶ц妯′俊鎭寲宸ョ▼'],
+        'planTypeCode|1-4': 4,
+        "status|0-1": 0,
+      },
+    });
+  });
+  //鏌ヨ鍒楄〃
+  Mock.mock(new RegExp("/pc/p/temp/project/list"), 'get', () => {
+    return Mock.mock({
+      code: 1,
+      'data|4': [
+        {
+          id: '@id',
+          projectName: '@ctitle(3,5)',
+          projectCode: '@id',
+          'planTypeName|1': ['涓皬鍨嬪疄鐗╃綉宸ョ▼', '澶у瀷瀹炵墿缃戝伐绋�', '灏忚妯′俊鎭寲宸ョ▼', '澶ц妯′俊鎭寲宸ョ▼'],
+          'planTypeCode|1-4': 4,
+          "status|0-1": 0,
+        },
+      ]
+    });
+  })
+}
diff --git a/project-web/src/mock/projectConfig/buildPlanNode.js b/project-web/src/mock/projectConfig/buildPlanNode.js
new file mode 100644
index 0000000..97760a9
--- /dev/null
+++ b/project-web/src/mock/projectConfig/buildPlanNode.js
@@ -0,0 +1,89 @@
+import Mock from 'mockjs';
+
+/*椤圭洰寤鸿璁″垝*/
+export default ({mock}) => {
+  if (!mock) return;
+  //鏌ヨ椤圭洰闃舵鑺傜偣鏍�
+  Mock.mock(new RegExp("/pc/p/temp/stage/node/tree"), 'get', () => {
+    return Mock.mock({
+      code: 1,
+      'data|5': [
+        {
+          id: '@id',
+          name: '@ctitle(3,5)',
+          'children|6':[
+            {
+              id: '@id',
+              name: '@ctitle(3,5)',
+            }
+          ]
+        },
+      ]
+
+    });
+  })
+  //鏌ヨ璁″垝妯$増闃舵鑺傜偣鏍�
+  Mock.mock(new RegExp("/pc/p/temp/project/stage/node/tree"), 'get', () => {
+    return Mock.mock({
+      code: 1,
+      'data|5': [
+        {
+          id: '@id',
+          name: '@ctitle(3,5)',
+          'stageTimeDays|40-350':50,
+          'children|6':[
+            {
+              id: '@id',
+              name: '@ctitle(3,5)',
+              'nodeTimeStart|1-80': 20,
+              'nodeTimeDays|1-80': 20,
+              'completeNotifyStatus|0-1': 1,
+              'notifyTempStageNodeId|3-5':['@ctitle(3,5)'],
+              'warnNeed|0-1': 1,
+              'fileNeed|0-1': 1,
+            }
+          ]
+        },
+      ]
+
+    });
+  })
+  //璁剧疆椤圭洰妯$増涓嬮樁娈佃妭鐐�
+  Mock.mock(new RegExp("/pc/p/temp/project/stage/node"), 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+    });
+  })
+  //鏌ヨ椤圭洰妯$増涓嬮樁娈佃妭鐐硅鎯�
+  Mock.mock(new RegExp("/pc/p/temp/project/stage/node"), 'get', () => {
+    let data = Mock.mock({
+      'data|5': [
+        {
+          id: '@id',
+          stageName: '@ctitle(3,5)',
+          'stageTimeDays|40-350':50,
+          nodeName: '@ctitle(3,5)',
+          'nodeTimeStart|1-80': 20,
+          'nodeTimeDays|1-80': 20,
+          'completeNotifyStatus|0-1': 1,
+          'notifyStage|3-5':['@ctitle(3,5)'],
+          'notifyNode|3-5':['@ctitle(3,5)'],
+          'warnNeed|0-1': 1,
+          'fileNeed|0-1': 1,
+        },
+      ]
+    })
+    let arr = [4,3,6,5,6]
+    let temp = []
+    data.data.map((item,i)=>{
+      for (let j = 0; j < arr[i]; j++) {
+        temp.push(item)
+      }
+    })
+    return {
+      code: 1,
+      data: temp
+    }
+  })
+}
diff --git a/project-web/src/mock/projectConfig/kanbanConfig.js b/project-web/src/mock/projectConfig/kanbanConfig.js
new file mode 100644
index 0000000..d6cd621
--- /dev/null
+++ b/project-web/src/mock/projectConfig/kanbanConfig.js
@@ -0,0 +1,52 @@
+import Mock from 'mockjs';
+
+/*鐪嬫澘鑺傜偣閰嶇疆*/
+export default ({mock}) => {
+  if (!mock) return;
+  //缂栬緫
+  Mock.mock(new RegExp("/pc/p/temp/project/board/upd"), 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+
+    });
+  });
+  //淇敼鐘舵��
+  Mock.mock(new RegExp("/pc/p/temp/project/board/updStatus"), 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+
+    });
+  });
+  //璇︽儏
+  Mock.mock(new RegExp("/pc/p/temp/project/board/detail"), 'get', () => {
+    return Mock.mock({
+      code: 1,
+      data: {
+        id: '@id',
+        boardName: '@ctitle(3,5)',
+        boardCode: '@id',
+        "sort|+1": 1,
+        "status|0-1": 0,
+      },
+
+    });
+  });
+  //鏌ヨ鍒楄〃
+  Mock.mock(new RegExp("/pc/p/temp/project/board/list"), 'get', () => {
+    return Mock.mock({
+      code: 1,
+      'data|5': [
+        {
+          id: '@id',
+          boardName: '@ctitle(3,5)',
+          boardCode: '@id',
+          "sort|+1": 1,
+          "status|0-1": 0,
+        },
+      ]
+    });
+  })
+
+}
diff --git a/project-web/src/mock/projectConfig/kanbanNode.js b/project-web/src/mock/projectConfig/kanbanNode.js
new file mode 100644
index 0000000..4e802c6
--- /dev/null
+++ b/project-web/src/mock/projectConfig/kanbanNode.js
@@ -0,0 +1,48 @@
+import Mock from 'mockjs';
+
+/*鐪嬫澘鑺傜偣閰嶇疆*/
+export default ({mock}) => {
+  if (!mock) return;
+  //缂栬緫
+  Mock.mock(new RegExp("/pc/p/temp/project/board/node/upd"), 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+
+    });
+  });
+  //鏌ヨ鍒楄〃
+  Mock.mock(new RegExp("/pc/p/temp/project/board/node/tree"), 'get', () => {
+    return Mock.mock({
+      code: 1,
+      'data|5': [
+        {
+          id: '@id',
+          name: '@ctitle(3,5)',
+          'children|6':[
+            {
+              id: '@id',
+              name: '@ctitle(3,5)',
+            }
+          ]
+        },
+      ]
+    });
+  })
+  //鏌ヨ鍒楄〃
+  Mock.mock(new RegExp("/pc/p/temp/project/board/node/list"), 'get', () => {
+    return Mock.mock({
+      code: 1,
+      'data|5': [
+        {
+          id: '@id',
+          tempBoardId: '@id',
+          tempProjectId: '@id',
+          tempProjectName: '@ctitle(3,5)',
+          // 'tempStageNodeIds|3': ['@id']
+          'tempStageNodeIds': []
+        },
+      ]
+    });
+  })
+}
diff --git a/project-web/src/mock/projectConfig/stageConfig.js b/project-web/src/mock/projectConfig/stageConfig.js
new file mode 100644
index 0000000..f64dba6
--- /dev/null
+++ b/project-web/src/mock/projectConfig/stageConfig.js
@@ -0,0 +1,72 @@
+import Mock from 'mockjs';
+
+/*椤圭洰鑺傜偣閰嶇疆*/
+export default ({mock}) => {
+  if (!mock) return;
+  //鏂板
+  Mock.mock(new RegExp("/pc/p/temp/stage/add"), 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+
+    });
+  });
+  //鍒犻櫎
+  Mock.mock(new RegExp("/pc/p/temp/stage/del"), 'delete', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+
+    });
+  });
+  //缂栬緫
+  Mock.mock(new RegExp("/pc/p/temp/stage/upd"), 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+
+    });
+  });
+  //淇敼鐘舵��
+  Mock.mock(new RegExp("/pc/p/temp/stage/updStatus"), 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+
+    });
+  });
+  //璇︽儏
+  Mock.mock(new RegExp("/pc/p/temp/stage/detail"), 'get', () => {
+    return Mock.mock({
+      code: 1,
+      data: {
+        id: '@id',
+        stageName: '@ctitle(3,5)',
+        nodeName: '@ctitle(2,4)',
+        "sort|+1": 1,
+        "status|0-1": 0,
+      },
+
+    });
+  });
+  //鏌ヨ椤圭洰闃舵鍒楄〃
+  Mock.mock(/\/pc\/\/p\/temp\/stage\/list/, 'get', () => {
+    const data = Mock.mock({
+      code: 1,
+      data: {
+        'datas|10': [
+          {
+            id: '@id',
+            stageName: '鍐屾暟'+'@ctitle(3,5)',
+            nodeName: '@ctitle(2,4)',
+            "sort|+1": 1,
+            "status|0-1": 0,
+          },
+        ],
+        totalRows: 40
+      }
+
+    });
+    return data
+  })
+}
diff --git a/project-web/src/mock/projectConfig/stageNode.js b/project-web/src/mock/projectConfig/stageNode.js
new file mode 100644
index 0000000..b840d69
--- /dev/null
+++ b/project-web/src/mock/projectConfig/stageNode.js
@@ -0,0 +1,71 @@
+import Mock from 'mockjs';
+
+/*闃舵鑺傜偣*/
+export default ({mock}) => {
+  if (!mock) return;
+  //鏂板
+  Mock.mock(new RegExp("/pc/p/temp/stage/node/add"), 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+
+    });
+  });
+  //鍒犻櫎
+  Mock.mock(new RegExp("/pc/p/temp/stage/node/del"), 'delete', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+
+    });
+  });
+  //缂栬緫
+  Mock.mock(new RegExp("/pc/p/temp/stage/node/upd"), 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+
+    });
+  });
+  //淇敼鐘舵��
+  Mock.mock(new RegExp("/pc/p/temp/stage/node/updStatus"), 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+
+    });
+  });
+  //璇︽儏
+  Mock.mock(new RegExp("/pc/p/temp/stage/node/detail"), 'get', () => {
+    return Mock.mock({
+      code: 1,
+      data: {
+        id: '@id',
+        nodeName: '@ctitle(3,5)',
+        remark: '@cparagraph(2)',
+        "sort|+1": 1,
+        "status|0-1": 0,
+      },
+
+    });
+  });
+  //鏌ヨ鍒楄〃
+  Mock.mock(new RegExp("/pc/p/temp/stage/node/list"), 'get', () => {
+    return Mock.mock({
+      code: 1,
+      data: {
+        'datas|10': [
+          {
+            id: '@id',
+            nodeName: '@ctitle(3,5)',
+            remark: '@cparagraph(2)',
+            "sort|+1": 1,
+            "status|0-1": 0,
+          },
+        ],
+        totalRows: 40
+      }
+
+    });
+  })
+}
diff --git a/project-web/src/mock/projectConfig/warningConfig.js b/project-web/src/mock/projectConfig/warningConfig.js
new file mode 100644
index 0000000..dba8a65
--- /dev/null
+++ b/project-web/src/mock/projectConfig/warningConfig.js
@@ -0,0 +1,128 @@
+import Mock from 'mockjs';
+
+/*涓存湡棰勮璁剧疆*/
+export default ({mock}) => {
+  if (!mock) return;
+  //鏂板
+  Mock.mock(new RegExp("/pc/p/temp/expiration/notify/add"), 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+
+    });
+  });
+  //鍒犻櫎
+  Mock.mock(new RegExp("/pc/p/temp/expiration/notify/del"), 'delete', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+
+    });
+  });
+  //缂栬緫
+  Mock.mock(new RegExp("/pc/p/temp/expiration/notify/upd"), 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+
+    });
+  });
+  //淇敼鐘舵��
+  Mock.mock(new RegExp("/pc/p/temp/expiration/notify/updStatus"), 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+
+    });
+  });
+  //璇︽儏
+  Mock.mock(new RegExp("/pc/p/temp/expiration/notify/detail"), 'get', () => {
+    const phonePrefix = ['132', '135', '189']
+    const index = Math.floor(Math.random() * phonePrefix.length)
+    var phone = []
+    for (let i = 0; i < 15; i++) {
+      phone.push(phonePrefix[index] + Mock.mock(/\d{8}/))
+    }
+    return Mock.mock({
+      code: 1,
+      data: {
+        id: '@id',
+        tempExpirationNotifyName: '@ctitle(3,5)',
+        tempExpirationNotifyCode: '@id',
+        createOrgName: '@city()',
+        'expireBefore1|5-10': 6,
+        'beforeManagerNotify1|0-1': 0,
+        'beforeManagerNotifyUser1|3-6': [
+          {
+            id: '@id',
+            userName: '@cname',
+          }
+        ],
+        'expireBefore2|5-10': 6,
+        'beforeManagerNotify2|0-1': 0,
+        'beforeManagerNotifyUser2|3-6': [
+          {
+            id: '@id',
+            userName: '@cname',
+          }
+        ],
+        'expireBefore3|5-10': 6,
+        'beforeManagerNotify3|0-1': 0,
+        'beforeManagerNotifyUser3|3-6': [
+          {
+            id: '@id',
+            userName: '@cname',
+          }
+        ],
+        'expireAfter1|5-10': 6,
+        'afterManagerNotify1|0-1': 0,
+        'afterManagerNotifyUser1|3-6': [
+          {
+            id: '@id',
+            userName: '@cname',
+          }
+        ],
+        'expireAfter2|5-10': 6,
+        'afterManagerNotify2|0-1': 0,
+        'afterManagerNotifyUser2|3-6': [
+          {
+            id: '@id',
+            userName: '@cname',
+          }
+        ],
+        'expireAfter3|5-10': 6,
+        'afterManagerNotify3|0-1': 0,
+        'afterManagerNotifyUser3|3-6': [
+          {
+            id: '@id',
+            userName: '@cname',
+          }
+        ],
+        "notifyWx|0-1": 0,
+        "notifyMobMsg|0-1": 0,
+        "notifyMobMsgWay|0-1": 0,
+        "status|0-1": 0,
+        notifyMob: phone.join(','),
+        'notifyTime|0-23': 9
+      },
+    });
+  });
+  //鏌ヨ鍒楄〃
+  Mock.mock(new RegExp("/pc/p/temp/expiration/notify/list"), 'get', () => {
+    return Mock.mock({
+      code: 1,
+      'data|10': [
+        {
+          id: '@id',
+          tempExpirationNotifyName: '@ctitle(3,5)',
+          tempExpirationNotifyCode: '@id',
+          createOrgName: '@city()',
+          "notifyWx|0-1": 0,
+          "notifyMobMsg|0-1": 0,
+          "notifyMobMsgWay|0-1": 0,
+          "status|0-1": 0,
+        },
+      ]
+    });
+  })
+}
diff --git a/project-web/src/mock/projectManagement.js b/project-web/src/mock/projectManagement.js
new file mode 100644
index 0000000..ef01669
--- /dev/null
+++ b/project-web/src/mock/projectManagement.js
@@ -0,0 +1,255 @@
+import Mock from 'mockjs';
+export default ({ mock }) => {
+  if (!mock) return;
+  // 椤圭洰鍒嗙被
+  // 椤圭洰鍒嗙被宸︿晶鏍�
+  Mock.mock(/\/pc\/\/p\/project\/category\/tree/, 'get', () => {
+    return Mock.mock({
+      code: 1,
+      'data|5':[
+        {
+          label: '@ctitle(5)',
+          id: '@id',
+          'children|3-10':[
+            {
+              label: '@ctitle(5)',
+              id: '@id',
+              parentId:'@id'
+            }
+          ]
+        }
+      ]
+    });
+  });
+  // 椤圭洰鍒嗙被琛ㄦ牸
+  Mock.mock(/\/pc\/\/p\/project\/category\/list/, 'get', () => {
+    return Mock.mock({
+      code: 1,
+      data:{
+        'datas|10': [
+          {
+            id: '@id',
+            title: '@ctitle(6,12)',
+            "orderNum|+1": 1,
+            "status|0-1": 0,
+          },
+        ],
+        pageIndex:1,
+        pageSize:10,
+        totalRows: 40
+      }
+    });
+  });
+  // 淇敼椤圭洰鍒嗙被鐘舵��
+  Mock.mock(/\/pc\/\/p\/project\/category\/updateStatus/, 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data:1
+    });
+  });
+  // 鏂板鍒嗙被
+  Mock.mock(/\/pc\/\/p\/project\/category\/add/, 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+    });
+  });
+  // 淇敼鍒嗙被
+  Mock.mock(/\/pc\/\/p\/project\/category\/edit/, 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+    });
+  });
+  // 鍒犻櫎鍒嗙被
+  Mock.mock(/\/pc\/\/p\/project\/category\/del/, 'delete', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+    });
+  });
+  // 鑾峰彇鍒嗙被璇︽儏
+  Mock.mock(/\/pc\/\/p\/project\/category\/detail/, 'get', () => {
+    return Mock.mock({
+      code: 1,
+      data: {
+        id: '@id',
+        title: '@ctitle(6,12)',
+        "orderNum|+1": 1,
+        "status|0-1": 0,
+      }
+    });
+  });
+  // 椤圭洰淇℃伅
+  // 椤堕儴椤圭洰淇℃伅缁熻
+  Mock.mock(/\/pc\/\/p\/project\/info\/total/, 'get', () => {
+    return Mock.mock({
+      code: 1,
+      data: {
+        "projectTotal|50-100": 66,
+        "awaitNum|20-50": 20,
+        "ingNum|20-50": 20,
+        "postponeNum|20-50": 20,
+        "endNum|20-50": 20,
+        "cancelNum|20-50": 20,
+      }
+    })
+  })
+  // 椤圭洰淇℃伅琛ㄦ牸
+  Mock.mock(/\/pc\/\/p\/project\/info\/list/, 'get', () => {
+    return Mock.mock({
+      code: 1,
+      data:{
+        'datas|10': [
+          {
+            id: '@id',
+            projectName: '@ctitle(6,12)',
+            projectCode: '@id',
+            projectCategoryName:'@ctitle(4,6)',
+            buildOrgName:'@city',
+            approvalDate:'@datetime("yyyy-MM-dd HH:mm")',
+            createTime:'@datetime("yyyy-MM-dd HH:mm")',
+            "progressRate|50-100": 60,
+            'expirationNotifyStatus|0-1':0,
+            "status|0-4": 0, // 0 鏈紑宸� 1 杩涜涓� 2 宸插畬鎴� 3 宸插彇娑� 4 宸插欢鏈�
+          },
+        ],
+        pageIndex:1,
+        pageSize:10,
+        totalRows: 40
+      }
+    });
+  });
+  // 棰勮璁剧疆 淇濆瓨妯℃澘棰勮
+  Mock.mock(/\/pc\/\/p\/project\/info\/tempNotify\/save/, 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+    });
+  });
+  // 涓嬭揪鎶曡祫 鑾峰彇宸茬粡涓嬭揪鎶曡祫鐨勯搴�
+  Mock.mock(/\/pc\/\/p\/release\/invest\/info\/list/, 'get', () => {
+    return Mock.mock({
+      code: 1,
+      'data|2': [
+        {
+          "releaseInvest|10-20": 10,
+        }
+      ]
+    })
+  })
+  // 涓嬭揪鎶曡祫 淇濆瓨
+  Mock.mock(/\/pc\/\/p\/project\/info\/investInfo\/save/, 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+    });
+  });
+
+
+  // 椤圭洰瀹℃牳
+  // 椤圭洰瀹℃牳琛ㄦ牸
+  Mock.mock(/\/pc\/\/p\/project\/audit\/list/, 'get', () => {
+    return Mock.mock({
+      code: 1,
+      data:{
+        'datas|10': [
+          {
+            id: '@id',
+            projectName: '@ctitle(6,12)',
+            projectCode: '@id',
+            projectCategoryName:'@ctitle(4,6)',
+            buildOrgName:'@city',
+            approvalDate:'@datetime("yyyy-MM-dd HH:mm")',
+            createTime:'@datetime("yyyy-MM-dd HH:mm")',
+            "sourceStatus|0-1": 0, // 0褰掓。 1鏂板
+            'auditStatus|0-2':0 // 0 鏈鏍� 1 涓嶉�氳繃 2 閫氳繃
+          },
+        ],
+        pageIndex:1,
+        pageSize:10,
+        totalRows: 40
+      }
+    });
+  });
+  // 椤圭洰瀹℃牳 瀹℃牳
+  Mock.mock(/\/pc\/\/p\/project\/audit\/upd/, 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+    });
+  });
+
+
+  // 椤圭洰褰掓。
+  // 椤圭洰褰掓。鍒楄〃
+  Mock.mock(/\/pc\/\/p\/project\/record\/list/, 'get', () => {
+    return Mock.mock({
+      code: 1,
+      data:{
+        'datas|10': [
+          {
+            id: '@id',
+            projectName: '@ctitle(6,12)',
+            projectCode: '@id',
+            projectCategoryName:'@ctitle(4,6)',
+            buildOrgName:'@city',
+            approvalDate:'@datetime("yyyy-MM-dd HH:mm")',
+            createTime:'@datetime("yyyy-MM-dd HH:mm")',
+            'archiveStatus|0-2':0 //  0 鏈綊妗� 1 瀹℃牳涓� 2 宸插綊妗�
+          },
+        ],
+        pageIndex:1,
+        pageSize:10,
+        totalRows: 40
+      }
+    });
+  });
+  // 椤圭洰褰掓。
+  Mock.mock(/\/pc\/\/p\/project\/record\/save/, 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+    });
+  });
+  // 椤圭洰杩樺師
+  Mock.mock(/\/pc\/\/p\/project\/record\/upd/, 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+    });
+  });
+
+  // 椤圭洰鍙栨秷
+  // 椤圭洰鍙栨秷鍒楄〃
+  Mock.mock(/\/pc\/\/p\/project\/cancel\/list/, 'get', () => {
+    return Mock.mock({
+      code: 1,
+      data:{
+        'datas|10': [
+          {
+            id: '@id',
+            projectName: '@ctitle(6,12)',
+            projectCode: '@id',
+            projectCategoryName:'@ctitle(4,6)',
+            buildOrgName:'@city',
+            approvalDate:'@datetime("yyyy-MM-dd HH:mm")',
+            createTime:'@datetime("yyyy-MM-dd HH:mm")',
+            'cancelStatus|0-1':0 //  0 鏈彇娑� 1 宸插彇娑�
+          },
+        ],
+        pageIndex:1,
+        pageSize:10,
+        totalRows: 40
+      }
+    });
+  });
+
+  // 椤圭洰鍙栨秷
+  Mock.mock(/\/\/\/p\/project\/cancel\/save/, 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+    });
+  });
+}
diff --git a/project-web/src/mock/projectManagement/audit.js b/project-web/src/mock/projectManagement/audit.js
new file mode 100644
index 0000000..9bb4c04
--- /dev/null
+++ b/project-web/src/mock/projectManagement/audit.js
@@ -0,0 +1,36 @@
+import Mock from 'mockjs';
+export default ({ mock }) => {
+  if (!mock) return;
+  // 椤圭洰瀹℃牳
+  // 椤圭洰瀹℃牳琛ㄦ牸
+  Mock.mock(/\/pc\/\/p\/project\/audit\/list/, 'get', () => {
+    return Mock.mock({
+      code: 1,
+      data:{
+        'datas|10': [
+          {
+            id: '@id',
+            projectName: '@ctitle(6,12)',
+            projectCode: '@id',
+            projectCategoryName:'@ctitle(4,6)',
+            buildOrgName:'@city',
+            approvalDate:'@datetime("yyyy-MM-dd HH:mm")',
+            createTime:'@datetime("yyyy-MM-dd HH:mm")',
+            "sourceStatus|0-1": 0, // 0褰掓。 1鏂板
+            'auditStatus|0-2':0 // 0 鏈鏍� 1 涓嶉�氳繃 2 閫氳繃
+          },
+        ],
+        pageIndex:1,
+        pageSize:10,
+        totalRows: 40
+      }
+    });
+  });
+  // 椤圭洰瀹℃牳 瀹℃牳
+  Mock.mock(/\/pc\/\/p\/project\/audit\/upd/, 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+    });
+  });
+}
diff --git a/project-web/src/mock/projectManagement/cancel.js b/project-web/src/mock/projectManagement/cancel.js
new file mode 100644
index 0000000..99538ec
--- /dev/null
+++ b/project-web/src/mock/projectManagement/cancel.js
@@ -0,0 +1,36 @@
+import Mock from 'mockjs';
+export default ({ mock }) => {
+  if (!mock) return;
+  // 椤圭洰鍙栨秷
+  // 椤圭洰鍙栨秷鍒楄〃
+  Mock.mock(new RegExp('/pc/p/project/cancel/list'), 'get', () => {
+    return Mock.mock({
+      code: 1,
+      data:{
+        'datas|10': [
+          {
+            id: '@id',
+            projectName: '@ctitle(6,12)',
+            projectCode: '@id',
+            projectCategoryName:'@ctitle(4,6)',
+            buildOrgName:'@city',
+            approvalDate:'@datetime("yyyy-MM-dd HH:mm")',
+            createTime:'@datetime("yyyy-MM-dd HH:mm")',
+            'cancelStatus|0-1':0 //  0 鏈彇娑� 1 宸插彇娑�
+          },
+        ],
+        pageIndex:1,
+        pageSize:10,
+        totalRows: 40
+      }
+    });
+  });
+
+  // 椤圭洰鍙栨秷
+  Mock.mock(/\/pc\/p\/project\/cancel\/save/, 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+    });
+  });
+}
diff --git a/project-web/src/mock/projectManagement/classify.js b/project-web/src/mock/projectManagement/classify.js
new file mode 100644
index 0000000..3c8e035
--- /dev/null
+++ b/project-web/src/mock/projectManagement/classify.js
@@ -0,0 +1,82 @@
+import Mock from 'mockjs';
+export default ({ mock }) => {
+  if (!mock) return;
+  // 椤圭洰鍒嗙被宸︿晶鏍�
+  Mock.mock(/\/pc\/\/p\/project\/category\/tree/, 'get', () => {
+    return Mock.mock({
+      code: 1,
+      'data|5':[
+        {
+          label: '@ctitle(5)',
+          id: '@id',
+          'children|3-10':[
+            {
+              label: '@ctitle(5)',
+              id: '@id',
+              parentId:'@id'
+            }
+          ]
+        }
+      ]
+    });
+  });
+  // 椤圭洰鍒嗙被琛ㄦ牸
+  Mock.mock(/\/pc\/\/p\/project\/category\/list/, 'get', () => {
+    return Mock.mock({
+      code: 1,
+      data:{
+        'datas|10': [
+          {
+            id: '@id',
+            title: '@ctitle(6,12)',
+            "orderNum|+1": 1,
+            "status|0-1": 0,
+          },
+        ],
+        pageIndex:1,
+        pageSize:10,
+        totalRows: 40
+      }
+    });
+  });
+  // 淇敼椤圭洰鍒嗙被鐘舵��
+  Mock.mock(/\/pc\/\/p\/project\/category\/updateStatus/, 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data:1
+    });
+  });
+  // 鏂板鍒嗙被
+  Mock.mock(/\/pc\/\/p\/project\/category\/add/, 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+    });
+  });
+  // 淇敼鍒嗙被
+  Mock.mock(/\/pc\/\/p\/project\/category\/edit/, 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+    });
+  });
+  // 鍒犻櫎鍒嗙被
+  Mock.mock(/\/pc\/\/p\/project\/category\/del/, 'delete', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+    });
+  });
+  // 鑾峰彇鍒嗙被璇︽儏
+  Mock.mock(/\/pc\/\/p\/project\/category\/detail/, 'get', () => {
+    return Mock.mock({
+      code: 1,
+      data: {
+        id: '@id',
+        title: '@ctitle(6,12)',
+        "orderNum|+1": 1,
+        "status|0-1": 0,
+      }
+    });
+  });
+}
diff --git a/project-web/src/mock/projectManagement/information.js b/project-web/src/mock/projectManagement/information.js
new file mode 100644
index 0000000..2ad55f8
--- /dev/null
+++ b/project-web/src/mock/projectManagement/information.js
@@ -0,0 +1,68 @@
+import Mock from 'mockjs';
+export default ({ mock }) => {
+  if (!mock) return;
+  // 椤堕儴椤圭洰淇℃伅缁熻
+  Mock.mock(new RegExp('/pc/p/project/info/total'), 'get', () => {
+    return Mock.mock({
+      code: 1,
+      data: {
+        "projectTotal|50-100": 66,
+        "awaitNum|20-50": 20,
+        "ingNum|20-50": 20,
+        "postponeNum|20-50": 20,
+        "endNum|20-50": 20,
+        "cancelNum|20-50": 20,
+      }
+    })
+  })
+  // 椤圭洰淇℃伅琛ㄦ牸
+  Mock.mock(new RegExp('/pc/p/project/info/list'), 'get', () => {
+    return Mock.mock({
+      code: 1,
+      data:{
+        'datas|10': [
+          {
+            id: '@id',
+            projectName: '@ctitle(6,12)',
+            projectCode: '@id',
+            projectCategoryName:'@ctitle(4,6)',
+            buildOrgName:'@city',
+            approvalDate:'@datetime("yyyy-MM-dd HH:mm")',
+            createTime:'@datetime("yyyy-MM-dd HH:mm")',
+            "progressRate|50-100": 60,
+            'expirationNotifyStatus|0-1':0,
+            "status|0-4": 0, // 0 鏈紑宸� 1 杩涜涓� 2 宸插畬鎴� 3 宸插彇娑� 4 宸插欢鏈�
+          },
+        ],
+        pageIndex:1,
+        pageSize:10,
+        totalRows: 40
+      }
+    });
+  });
+  // 棰勮璁剧疆 淇濆瓨妯℃澘棰勮
+  Mock.mock(new RegExp('/pc/p/project/info/tempNotify/save'), 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+    });
+  });
+  // 涓嬭揪鎶曡祫 鑾峰彇宸茬粡涓嬭揪鎶曡祫鐨勯搴�
+  Mock.mock(new RegExp('/pc/p/release/invest/info/list'), 'get', () => {
+    return Mock.mock({
+      code: 1,
+      'data|2': [
+        {
+          "releaseInvest|10-20": 10,
+        }
+      ]
+    })
+  })
+  // 涓嬭揪鎶曡祫 淇濆瓨
+  Mock.mock(new RegExp('/pc/p/project/info/investInfo/save'), 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+    });
+  });
+}
diff --git a/project-web/src/mock/projectManagement/record.js b/project-web/src/mock/projectManagement/record.js
new file mode 100644
index 0000000..55687ce
--- /dev/null
+++ b/project-web/src/mock/projectManagement/record.js
@@ -0,0 +1,42 @@
+import Mock from 'mockjs';
+export default ({ mock }) => {
+  if (!mock) return;
+  // 椤圭洰褰掓。
+  // 椤圭洰褰掓。鍒楄〃
+  Mock.mock(/\/pc\/p\/project\/info\/record\/list/, 'get', () => {
+    return Mock.mock({
+      code: 1,
+      data:{
+        'datas|10': [
+          {
+            id: '@id',
+            projectName: '@ctitle(6,12)',
+            projectCode: '@id',
+            projectCategoryName:'@ctitle(4,6)',
+            buildOrgName:'@city',
+            approvalDate:'@datetime("yyyy-MM-dd HH:mm")',
+            createTime:'@datetime("yyyy-MM-dd HH:mm")',
+            'archiveStatus|0-2':0 //  0 鏈綊妗� 1 瀹℃牳涓� 2 宸插綊妗�
+          },
+        ],
+        pageIndex:1,
+        pageSize:10,
+        totalRows: 40
+      }
+    });
+  });
+  // 椤圭洰褰掓。
+  Mock.mock(/\/pc\/p\/project\/info\/record\/save/, 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+    });
+  });
+  // 椤圭洰杩樺師
+  Mock.mock(/\/pc\/p\/project\/info\/record\/upd/, 'post', () => {
+    return Mock.mock({
+      code: 1,
+      data: 1
+    });
+  });
+}
diff --git a/project-web/src/permission.js b/project-web/src/permission.js
new file mode 100644
index 0000000..589d741
--- /dev/null
+++ b/project-web/src/permission.js
@@ -0,0 +1,67 @@
+import router from './router';
+import store from './store';
+import { Message } from 'element-ui';
+import NProgress from 'nprogress'; // progress bar
+import 'nprogress/nprogress.css'; // progress bar style
+import { getToken, getCPass } from '@/utils/auth'; // get token from cookie
+import getPageTitle from '@/utils/get-page-title';
+
+NProgress.configure({ showSpinner: false }); // NProgress Configuration
+
+const whiteList = ['/login', '/auth-redirect','/resetPwd']; // no redirect whitelist
+
+
+router.beforeEach(async (to, from, next) => {
+  // start progress bar
+  NProgress.start();
+
+  // set page title
+  document.title = getPageTitle(to.meta.title);
+
+  // determine whether the user has logged in
+  const hasToken = getToken();
+  if (hasToken) {
+    if (to.path === '/login') {
+      // if is logged in, redirect to the home page
+      next({ path: '/' });
+      NProgress.done();
+    }else if( to.path === '/resetPwd'){
+      next();
+      NProgress.done();
+    }else {
+      const hasRoles = store.getters.roles && store.getters.roles.length > 0;
+      if (hasRoles) {
+        next();
+      } else {
+        try {
+          const roles = await store.dispatch('user/getInfo').roles;
+          const accessRoutes = await store.dispatch('permission/generateRoutes');
+          router.options.routes = accessRoutes // 鍔ㄦ�佹坊鍔犲彲璁块棶璺敱琛�
+          router.addRoutes(accessRoutes);
+          next({ ...to, replace: true });
+        } catch (error) {
+          store.dispatch('user/logout').then(() => {
+            Message.error(error)
+            next({ path: '/login?redirect=${to.path}' })
+          })
+        }
+      }
+    }
+  } else {
+    /* has no token*/
+    if (whiteList.indexOf(to.path) !== -1) {
+      // in the free login whitelist, go directly
+      next();
+    } else {
+      // other pages that do not have permission to access are redirected to the login page.
+      // next(`/login?redirect=${to.path}`);
+      next('/login');
+      NProgress.done();
+    }
+  }
+});
+
+router.afterEach(() => {
+  // finish progress bar
+  NProgress.done();
+});
diff --git a/project-web/src/plugins/auth.js b/project-web/src/plugins/auth.js
new file mode 100644
index 0000000..845b2e8
--- /dev/null
+++ b/project-web/src/plugins/auth.js
@@ -0,0 +1,45 @@
+
+import store from '@/store';
+
+function authPermission(permission) {
+  const all_permission = '*:*:*';
+  const permissions = store.getters && store.getters.permissions;
+  if (permission && permission.length > 0) {
+    return permissions.some((v) => {
+      return all_permission === v || v === permission;
+    });
+  } else {
+    return false;
+  }
+}
+
+function authRole(role) {
+  const super_admin = 'ROLE_SUPERVISOR';
+  const roles = store.getters && store.getters.roles;
+  if (role && role.length > 0) {
+    return roles.some((v) => {
+      return super_admin === v || v === role;
+    });
+  } else {
+    return false;
+  }
+}
+
+export default {
+  // 楠岃瘉鐢ㄦ埛鏄惁鍏峰鏌愭潈闄�
+  hasPermi(permission) {
+    return authPermission(permission);
+  },
+  // 楠岃瘉鐢ㄦ埛鏄惁鍚湁鎸囧畾鏉冮檺锛屽彧闇�鍖呭惈鍏朵腑涓�涓�
+  hasPermiOr(permissions) {
+    return permissions.some((item) => {
+      return authPermission(item);
+    });
+  },
+  // 楠岃瘉鐢ㄦ埛鏄惁鍚湁鎸囧畾鏉冮檺锛屽繀椤诲叏閮ㄦ嫢鏈�
+  hasPermiAnd(permissions) {
+    return permissions.every((item) => {
+      return authPermission(item);
+    });
+  },
+};
diff --git a/project-web/src/plugins/cache.js b/project-web/src/plugins/cache.js
new file mode 100644
index 0000000..230410a
--- /dev/null
+++ b/project-web/src/plugins/cache.js
@@ -0,0 +1,118 @@
+// +---------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +---------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +---------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +---------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +---------------------------------------------------------------------
+
+const sessionCache = {
+  set(key, value) {
+    if (!sessionStorage) {
+      return;
+    }
+    if (key != null && value != null) {
+      sessionStorage.setItem(key, value);
+    }
+  },
+  get(key) {
+    if (!sessionStorage) {
+      return null;
+    }
+    if (key == null) {
+      return null;
+    }
+    return sessionStorage.getItem(key);
+  },
+  setJSON(key, jsonValue) {
+    if (jsonValue != null) {
+      this.set(key, JSON.stringify(jsonValue));
+    }
+  },
+  getJSON(key) {
+    const value = this.get(key);
+    if (value != null) {
+      return JSON.parse(value);
+    }
+  },
+  remove(key) {
+    sessionStorage.removeItem(key);
+  },
+};
+const localCache = {
+  set(key, value) {
+    if (!localStorage) {
+      return;
+    }
+    if (key != null && value != null) {
+      localStorage.setItem(key, value);
+    }
+  },
+  get(key) {
+    if (!localStorage) {
+      return null;
+    }
+    if (key == null) {
+      return null;
+    }
+    return localStorage.getItem(key);
+  },
+  setJSON(key, jsonValue) {
+    if (jsonValue != null) {
+      this.set(key, JSON.stringify(jsonValue));
+    }
+  },
+  getJSON(key) {
+    const value = this.get(key);
+    if (value != null) {
+      return JSON.parse(value);
+    }
+  },
+  remove(key) {
+    localStorage.removeItem(key);
+  },
+  // 妫�娴嬬紦瀛樻槸鍚﹀瓨鍦�
+  has(key) {
+    return localStorage.getItem(key) ? true : false;
+  },
+  setItem(params) {
+    let obj = {
+      name: '',
+      value: '',
+      expires: '',
+      startTime: new Date().getTime(),
+    };
+    let options = {};
+    //灏唎bj鍜屼紶杩涙潵鐨刾arams鍚堝苟
+    Object.assign(options, obj, params);
+    if (options.expires) {
+      //濡傛灉options.expires璁剧疆浜嗙殑璇�
+      //浠ptions.name涓簁ey锛宱ptions涓哄�兼斁杩涘幓
+      localStorage.setItem(options.name, JSON.stringify(options));
+    } else {
+      //濡傛灉options.expires娌℃湁璁剧疆锛屽氨鍒ゆ柇涓�涓媣alue鐨勭被鍨�
+      let type = Object.prototype.toString.call(options.value);
+      //濡傛灉value鏄璞℃垨鑰呮暟缁勫璞$殑绫诲瀷锛屽氨鍏堢敤JSON.stringify杞竴涓嬶紝鍐嶅瓨杩涘幓
+      if (Object.prototype.toString.call(options.value) == '[object Object]') {
+        options.value = JSON.stringify(options.value);
+      }
+      if (Object.prototype.toString.call(options.value) == '[object Array]') {
+        options.value = JSON.stringify(options.value);
+      }
+      localStorage.setItem(options.name, options.value);
+    }
+  },
+};
+
+export default {
+  /**
+   * 浼氳瘽绾х紦瀛�
+   */
+  session: sessionCache,
+  /**
+   * 鏈湴缂撳瓨
+   */
+  local: localCache,
+};
diff --git a/project-web/src/plugins/download.js b/project-web/src/plugins/download.js
new file mode 100644
index 0000000..107363f
--- /dev/null
+++ b/project-web/src/plugins/download.js
@@ -0,0 +1,82 @@
+// +---------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +---------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +---------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +---------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +---------------------------------------------------------------------
+
+import { saveAs } from 'file-saver';
+import axios from 'axios';
+import { getToken } from '@/utils/auth';
+import { Message } from 'element-ui';
+
+const baseURL = process.env.VUE_APP_BASE_API;
+
+export default {
+  name(name, isDelete = true) {
+    var url = baseURL + '/common/download?fileName=' + encodeURI(name) + '&delete=' + isDelete;
+    axios({
+      method: 'get',
+      url: url,
+      responseType: 'blob',
+      headers: { Authorization: 'Bearer ' + getToken() },
+    }).then(async (res) => {
+      const isLogin = await this.blobValidate(res.data);
+      if (isLogin) {
+        const blob = new Blob([res.data]);
+        this.saveAs(blob, decodeURI(res.headers['download-filename']));
+      } else {
+        Message.error('鏃犳晥鐨勪細璇濓紝鎴栬�呬細璇濆凡杩囨湡锛岃閲嶆柊鐧诲綍銆�');
+      }
+    });
+  },
+  resource(resource) {
+    var url = baseURL + '/common/download/resource?resource=' + encodeURI(resource);
+    axios({
+      method: 'get',
+      url: url,
+      responseType: 'blob',
+      headers: { Authorization: 'Bearer ' + getToken() },
+    }).then(async (res) => {
+      const isLogin = await this.blobValidate(res.data);
+      if (isLogin) {
+        const blob = new Blob([res.data]);
+        this.saveAs(blob, decodeURI(res.headers['download-filename']));
+      } else {
+        Message.error('鏃犳晥鐨勪細璇濓紝鎴栬�呬細璇濆凡杩囨湡锛岃閲嶆柊鐧诲綍銆�');
+      }
+    });
+  },
+  zip(url, name) {
+    var url = baseURL + url;
+    axios({
+      method: 'get',
+      url: url,
+      responseType: 'blob',
+      headers: { Authorization: 'Bearer ' + getToken() },
+    }).then(async (res) => {
+      const isLogin = await this.blobValidate(res.data);
+      if (isLogin) {
+        const blob = new Blob([res.data], { type: 'application/zip' });
+        this.saveAs(blob, name);
+      } else {
+        Message.error('鏃犳晥鐨勪細璇濓紝鎴栬�呬細璇濆凡杩囨湡锛岃閲嶆柊鐧诲綍銆�');
+      }
+    });
+  },
+  saveAs(text, name, opts) {
+    saveAs(text, name, opts);
+  },
+  async blobValidate(data) {
+    try {
+      const text = await data.text();
+      JSON.parse(text);
+      return false;
+    } catch (error) {
+      return true;
+    }
+  },
+};
diff --git a/project-web/src/plugins/index.js b/project-web/src/plugins/index.js
new file mode 100644
index 0000000..0f7ee29
--- /dev/null
+++ b/project-web/src/plugins/index.js
@@ -0,0 +1,17 @@
+import auth from './auth';
+import cache from './cache';
+import modal from './modal';
+import download from './download';
+
+export default {
+  install(Vue) {
+    // 璁よ瘉瀵硅薄
+    Vue.prototype.$auth = auth;
+    // 缂撳瓨瀵硅薄
+    Vue.prototype.$cache = cache;
+    // 妯℃�佹瀵硅薄
+    Vue.prototype.$modal = modal;
+    // 涓嬭浇鏂囦欢
+    Vue.prototype.$download = download;
+  },
+};
diff --git a/project-web/src/plugins/modal.js b/project-web/src/plugins/modal.js
new file mode 100644
index 0000000..bcd71e8
--- /dev/null
+++ b/project-web/src/plugins/modal.js
@@ -0,0 +1,85 @@
+// +---------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +---------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +---------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +---------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +---------------------------------------------------------------------
+
+import { Message, MessageBox, Notification, Loading } from 'element-ui';
+
+let loadingInstance;
+
+export default {
+  // 娑堟伅鎻愮ず
+  msg(content) {
+    Message.info(content);
+  },
+  // 閿欒娑堟伅
+  msgError(content) {
+    Message.error(content);
+  },
+  // 鎴愬姛娑堟伅
+  msgSuccess(content) {
+    Message.success(content);
+  },
+  // 璀﹀憡娑堟伅
+  msgWarning(content) {
+    Message.warning(content);
+  },
+  // 寮瑰嚭鎻愮ず
+  alert(content) {
+    MessageBox.alert(content, '绯荤粺鎻愮ず');
+  },
+  // 閿欒鎻愮ず
+  alertError(content) {
+    MessageBox.alert(content, '绯荤粺鎻愮ず', { type: 'error' });
+  },
+  // 鎴愬姛鎻愮ず
+  alertSuccess(content) {
+    MessageBox.alert(content, '绯荤粺鎻愮ず', { type: 'success' });
+  },
+  // 璀﹀憡鎻愮ず
+  alertWarning(content) {
+    MessageBox.alert(content, '绯荤粺鎻愮ず', { type: 'warning' });
+  },
+  // 閫氱煡鎻愮ず
+  notify(content) {
+    Notification.info(content);
+  },
+  // 閿欒閫氱煡
+  notifyError(content) {
+    Notification.error(content);
+  },
+  // 鎴愬姛閫氱煡
+  notifySuccess(content) {
+    Notification.success(content);
+  },
+  // 璀﹀憡閫氱煡
+  notifyWarning(content) {
+    Notification.warning(content);
+  },
+  // 纭绐椾綋
+  confirm(content) {
+    return MessageBox.confirm(content, '绯荤粺鎻愮ず', {
+      confirmButtonText: '纭畾',
+      cancelButtonText: '鍙栨秷',
+      type: 'warning',
+    });
+  },
+  // 鎵撳紑閬僵灞�
+  loading(content) {
+    loadingInstance = Loading.service({
+      lock: true,
+      text: content,
+      spinner: 'el-icon-loading',
+      background: 'rgba(0, 0, 0, 0.7)',
+    });
+  },
+  // 鍏抽棴閬僵灞�
+  closeLoading() {
+    loadingInstance.close();
+  },
+};
diff --git a/project-web/src/router/index.js b/project-web/src/router/index.js
new file mode 100644
index 0000000..1af6e2b
--- /dev/null
+++ b/project-web/src/router/index.js
@@ -0,0 +1,132 @@
+
+import Vue from 'vue';
+import Router from 'vue-router';
+
+Vue.use(Router);
+
+/* Layout */
+import Layout from '@/layout';
+
+
+/**
+ * Note: sub-menu only appear when route children.length >= 1
+ * Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html
+ *
+ * hidden: true                   if set true, item will not show in the sidebar(default is false)
+ * alwaysShow: true               if set true, will always show the root menu
+ *                                if not set alwaysShow, when item has more than one children route,
+ *                                it will becomes nested mode, otherwise not show the root menu
+ * redirect: noRedirect           if set noRedirect will no redirect in the breadcrumb
+ * name:'router-name'             the name is used by <keep-alive> (must set!!!)
+ * meta : {
+    roles: ['admin','editor']    control the page roles (you can set multiple roles)
+    title: 'title'               the name show in sidebar and breadcrumb (recommend set)
+    icon: 'svg-name'             the icon show in the sidebar
+    noCache: true                if set true, the page will no be cached(default is false)
+    affix: true                  if set true, the tag will affix in the tags-view
+    breadcrumb: false            if set false, the item will hidden in breadcrumb(default is true)
+    activeMenu: '/example/list'  if set path, the sidebar will highlight the path you set
+  }
+ */
+
+/**
+ * constantRoutes
+ * a base page that does not have permission requirements
+ * all roles can be accessed
+ *
+ */
+
+export const constantRoutes = [
+
+  {
+    path: '/redirect',
+    component: Layout,
+    hidden: true,
+    children: [
+      {
+        path: '/redirect/:path(.*)',
+        component: () => import('@/views/redirect/index'),
+      },
+    ],
+  },
+  {
+    path: '/login',
+    component: () => import('@/views/login/index'),
+    hidden: true,
+  },
+  {
+    path: '/dataV',
+    component: () => import('@/views/dataV/static'),
+    hidden: true,
+  },
+  {
+    path: '/resetPwd',
+    component: () => import('@/views/login/resetPassword'),
+    hidden: true,
+  },
+  {
+    path: '/auth-redirect',
+    component: () => import('@/views/login/auth-redirect'),
+    hidden: true,
+  },
+  {
+    path: '/401',
+    component: () => import('@/views/error-page/401'),
+    hidden: true,
+  },
+  {
+    path: '/',
+    component: Layout,
+    redirect: '/dashboard',
+    children: [
+      {
+        path: 'dashboard',
+        component: () => import('@/views/dashboard/index'),
+        name: 'Dashboard',
+        meta: { title: '涓婚〉', icon: 'dashboard', affix: true },
+      },
+    ],
+  },
+  {
+    path: '/',
+    component: Layout,
+    children: [
+      {
+        path: 'userInfo',
+        component: () => import('@/views/systemSetting/user/profile/index'),
+        name: 'userInfo',
+        meta: { title: '涓汉淇℃伅', icon: 'dashboard', affix: false },
+      },
+    ],
+  },
+  // 404 page must be placed at the end !!!
+  {
+    path: '/404',
+    component: () => import('@/views/error-page/404'),
+    redirect: '/404',
+    hidden: true,
+  },
+  // { path: '*', redirect: '/404', hidden: true },
+];
+
+/**
+ * asyncRoutes
+ * the routes that need to be dynamically loaded based on user roles
+ */
+export const asyncRoutes = [];
+const createRouter = () =>
+  new Router({
+    // mode: 'history', // require service support
+    scrollBehavior: () => ({ y: 0 }),
+    routes: constantRoutes,
+  });
+
+const router = createRouter();
+
+// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
+export function resetRouter() {
+  const newRouter = createRouter();
+  router.matcher = newRouter.matcher; // reset router
+}
+
+export default router;
diff --git a/project-web/src/settings.js b/project-web/src/settings.js
new file mode 100644
index 0000000..1a16a49
--- /dev/null
+++ b/project-web/src/settings.js
@@ -0,0 +1,64 @@
+
+// 璇锋眰鎺ュ彛鍦板潃 濡傛灉娌℃湁閰嶇疆鑷姩鑾峰彇褰撳墠缃戝潃璺緞
+const VUE_APP_API_URL = process.env.VUE_APP_BASE_API || `${location.origin}/api/`;
+module.exports = {
+  // 鎺ュ彛璇锋眰鍦板潃
+  apiBaseURL: VUE_APP_API_URL,
+
+  title: '鍥哄畾璧勪骇椤圭洰杩涘害',
+
+  /**
+   * @type {boolean} true | false
+   * @description Whether show the settings right-panel
+   * 鏄惁鏄剧ず璁剧疆鍙充晶闈㈡澘
+   */
+  showSettings: true,
+
+  /**
+   * @type {boolean} true | false
+   * @description Whether need tagsView
+   * 鏄惁浣跨敤tagsView
+   */
+  tagsView: true,
+
+  /**
+   * @type {boolean} true | false
+   * @description Whether fix the header
+   * 鏄惁鍥哄畾header
+   */
+  fixedHeader: true,
+
+  /**
+   * @type {boolean} true | false
+   * @description Whether show the logo in sidebar
+   * 鏄惁鍦ㄤ晶杈规爮涓樉绀簂ogo
+   */
+  sidebarLogo: false,
+
+  /**
+   * @type {boolean} true | false
+   * @description Whether to turn on top bar navigation
+   * 鏄惁寮�鍚《鏍忓鑸�
+   */
+  topNav: true,
+
+  /**
+   * @type {boolean} true | false
+   * @description Whether to navigation icon
+   * 鏄惁鏄剧ず瀵艰埅icon
+   */
+  navIcon: true,
+  /**
+   * @type {string | array} 'production' | ['production', 'development']
+   * @description Need show err logs component.
+   * The default is only used in the production env
+   * If you want to also use it in dev, you can pass ['production', 'development']
+   */
+  errorLog: 'production',
+  /*
+ * @Author : can
+ * @Date : 2023-7-13
+ * @Description : sesssionToken 鏍囪瘑
+ */
+  sessionToken: 'Authorization'
+};
diff --git a/project-web/src/store/getters.js b/project-web/src/store/getters.js
new file mode 100644
index 0000000..450c288
--- /dev/null
+++ b/project-web/src/store/getters.js
@@ -0,0 +1,23 @@
+
+const getters = {
+  sidebar: (state) => state.app.sidebar,
+  size: (state) => state.app.size,
+  device: (state) => state.app.device,
+  visitedViews: (state) => state.tagsView.visitedViews,
+  cachedViews: (state) => state.tagsView.cachedViews,
+  token: (state) => state.user.token,
+  avatar: (state) => state.user.avatar,
+  name: (state) => state.user.name,
+  introduction: (state) => state.user.introduction,
+  roles: (state) => state.user.roles,
+  permission_routes: (state) => state.permission.routes,
+  permissions: (state) => state.user.permissions,
+  myButtonPermission:(state) => state.user.myButtonPermission,
+  sidebarRouters: (state) => state.permission.sidebarRouters,
+  errorLogs: (state) => state.errorLog.logs,
+  isLogin: (state) => state.user.isLogin,
+  frontDomain: (state) => state.settings.frontDomain,
+  info: state => state.user.info,
+  userInfo: state => state.user.userInfo,
+};
+export default getters;
diff --git a/project-web/src/store/index.js b/project-web/src/store/index.js
new file mode 100644
index 0000000..04fd5a9
--- /dev/null
+++ b/project-web/src/store/index.js
@@ -0,0 +1,24 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+import getters from './getters';
+
+Vue.use(Vuex);
+
+// https://webpack.js.org/guides/dependency-management/#requirecontext
+const modulesFiles = require.context('./modules', true, /\.js$/);
+
+// you do not need `import app from './modules/app'`
+// it will auto require all vuex module from modules file
+const modules = modulesFiles.keys().reduce((modules, modulePath) => {
+  // set './app.js' => 'app'
+  const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1');
+  const value = modulesFiles(modulePath);
+  modules[moduleName] = value.default;
+  return modules;
+}, {});
+const store = new Vuex.Store({
+  modules,
+  getters,
+});
+
+export default store;
diff --git a/project-web/src/store/modules/app.js b/project-web/src/store/modules/app.js
new file mode 100644
index 0000000..f49977b
--- /dev/null
+++ b/project-web/src/store/modules/app.js
@@ -0,0 +1,72 @@
+
+import Cookies from 'js-cookie';
+
+const state = {
+  msgNumData: {
+    cuibantotalnum: 0,
+    daibantotalnum: 0,
+    notreadnum: 0,
+    totalnotreadnum: 0,
+    readnum: 0,
+    totalnum: 0
+  }, //閫氱煡娑堟伅鏁版嵁
+  captureStatus: false, //鎴浘鎻掍欢鍒濆鍖栫姸鎬�
+  sidebar: {
+    opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true,
+    withoutAnimation: false,
+  },
+  device: 'desktop',
+  size: Cookies.get('size') || 'mini',
+};
+
+const mutations = {
+  SET_MSG_NUM:(state,obj)=>{
+    state.msgNumData = obj;
+  },
+  SET_CAPTURE_SATE:(state,status)=>{
+    state.captureStatus = status;
+  },
+  TOGGLE_SIDEBAR: (state) => {
+    state.sidebar.opened = !state.sidebar.opened;
+    state.sidebar.withoutAnimation = false;
+    if (state.sidebar.opened) {
+      Cookies.set('sidebarStatus', 1);
+    } else {
+      Cookies.set('sidebarStatus', 0);
+    }
+  },
+  CLOSE_SIDEBAR: (state, withoutAnimation) => {
+    Cookies.set('sidebarStatus', 0);
+    state.sidebar.opened = false;
+    state.sidebar.withoutAnimation = withoutAnimation;
+  },
+  TOGGLE_DEVICE: (state, device) => {
+    state.device = device;
+  },
+  SET_SIZE: (state, size) => {
+    state.size = size;
+    Cookies.set('size', size);
+  },
+};
+
+const actions = {
+  toggleSideBar({ commit }) {
+    commit('TOGGLE_SIDEBAR');
+  },
+  closeSideBar({ commit }, { withoutAnimation }) {
+    commit('CLOSE_SIDEBAR', withoutAnimation);
+  },
+  toggleDevice({ commit }, device) {
+    commit('TOGGLE_DEVICE', device);
+  },
+  setSize({ commit }, size) {
+    commit('SET_SIZE', size);
+  },
+};
+
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};
diff --git a/project-web/src/store/modules/errorLog.js b/project-web/src/store/modules/errorLog.js
new file mode 100644
index 0000000..0d41a2b
--- /dev/null
+++ b/project-web/src/store/modules/errorLog.js
@@ -0,0 +1,38 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+const state = {
+  logs: [],
+};
+
+const mutations = {
+  ADD_ERROR_LOG: (state, log) => {
+    state.logs.push(log);
+  },
+  CLEAR_ERROR_LOG: (state) => {
+    state.logs.splice(0);
+  },
+};
+
+const actions = {
+  addErrorLog({ commit }, log) {
+    commit('ADD_ERROR_LOG', log);
+  },
+  clearErrorLog({ commit }) {
+    commit('CLEAR_ERROR_LOG');
+  },
+};
+
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};
diff --git a/project-web/src/store/modules/permission.js b/project-web/src/store/modules/permission.js
new file mode 100644
index 0000000..71137e6
--- /dev/null
+++ b/project-web/src/store/modules/permission.js
@@ -0,0 +1,181 @@
+import * as roleApi from '@/api/system/roleApi.js';
+import Layout from '@/layout/index'
+
+/**
+ * Filter asynchronous routing tables by recursion
+ * @param routes asyncRoutes
+ * @param roles
+ */
+export function filterAsyncRoutes(routes, roles) {
+  const res = [];
+  routes.forEach((route) => {
+    const tmp = { ...route };
+    if (tmp.child) {
+      tmp.child = filterAsyncRoutes(tmp.child, roles);
+    }
+    res.push(tmp);
+  });
+
+  return res;
+}
+
+const state = {
+  routes: [],
+  addRoutes: [],
+  topbarRouters: [],
+  sidebarRouters: JSON.parse(localStorage.getItem('sidebarRouters')) || [],
+};
+
+const mutations = {
+  SET_ROUTES: (state, routes) => {
+    state.addRoutes = routes;
+    state.routes = routes;
+  },
+  SET_TOPBAR_ROUTES: (state, routes) => {
+    state.topbarRouters = routes;
+  },
+  SET_SIDEBAR_ROUTERS: (state, routes) => {
+    state.sidebarRouters = routes;
+    localStorage.setItem('sidebarRouters', JSON.stringify(routes));
+    if (!routes.length) localStorage.removeItem('sidebarRouters');
+  },
+};
+const actions = {
+  generateRoutes({ commit }) {
+    return new Promise(async (resolve) => {
+      let accessedRoutes = [];
+      let menus = await roleApi.menuListApi();
+      commit('SET_SIDEBAR_ROUTERS', menus);
+      let list = tree2arr(JSON.parse(JSON.stringify(menus)),[])
+      let menuData = [];
+      if (list != null && list.length > 0) {
+        const rlist = [];
+        for (let i = 0; i < list.length; i++) {
+          const sm = list[i];
+          if (sm.pid == 0) {
+            rlist.push(getResultMap(sm))
+            list.splice(i, 1)
+            i--
+          }
+
+        }
+        menuData = setChildren(list, rlist)
+      }
+      commit('SET_ROUTES', menuData);
+      resolve(menuData);
+    });
+  },
+};
+
+function comRouter(menus, asyncRouter, hasLeft) {
+  const res = [];
+  asyncRouter.forEach((router) => {
+    const _leftUrl = hasLeft ? hasLeft + '/' + router.path : router.path;
+    const _hasPromise = menus.filter((item) => item.url.startsWith(_leftUrl));
+    if (_hasPromise.length > 0) {
+      res.push(router);
+    }
+    if (router.children) {
+      comRouter(menus, router.children, router.path);
+    }
+  });
+  return res;
+}
+
+
+const setChildren = (list, rlist) => {
+  let b// 鍑忓皯娌″繀瑕佺殑閬嶅巻
+  for (let x = 0; x < rlist.length; x++) {
+    const m = rlist[x]
+    b = false
+    for (let i = 0; i < list.length; i++) {
+      const sm = list[i]
+      if (sm.pid === m.id) { // 瀛樺湪瀛愯妭鐐�
+        b = true
+        if (m.children === undefined) {
+          m.children = []
+        }
+        const clist = m.children
+        const cmap = getResultMap(sm)
+        clist.push(cmap)
+        list.splice(i, 1)
+        i--
+        setChildren(list, clist)
+        continue
+      }
+      if (b) {
+        break
+      }
+    }
+  }
+  return rlist
+}
+const tree2arr = (tree)=>{
+  let arr=[]
+  tree.map(item=>{
+    arr.push(item)
+    if(item.childList.length>0){
+      arr.push(...tree2arr(item.childList))
+    }
+  })
+  return arr
+}
+const getResultMap = sysMenu => { //M 鐩綍 C鑿滃崟 F鎸夐挳
+  const result = {}
+  result.id = sysMenu.id
+  result.name = 'menu' + sysMenu.id
+  if (sysMenu.menuType == 'M') { // 鐩綍
+
+    if (sysMenu.pid == '0') {
+      result.path = ''
+      result.component = Layout
+      result.redirect = 'noredirect'
+      result.alwaysShow = false
+    } else {
+      result.path = ''
+      result.component = () => import(`@/views/routerView/index`)
+      result.redirect = 'noredirect'
+    }
+  } else if (sysMenu.menuType == 'C') {
+    let url = sysMenu.component
+    if(url.substr(0, 7) == 'http://' || url.substr(0,8)=='https://'){
+      if(url.indexOf('?')>-1){
+        result.path = url+'&sessionToken='+getToken()
+      }else{
+        result.path = url+'?sessionToken='+getToken()
+      }
+    }else if(url.indexOf("?")>-1){
+      const params = url.substring(url.indexOf("?")+1,url.length).split("&");
+      let param={}
+      params.forEach(function(v){
+        param[v.split("=")[0]] = v.split("=")[1]
+      })
+      result.props=param
+      url = url.substring(0,url.indexOf("?"))
+      result.path = '/views' + url+'/'+sysMenu.id
+      result.component = () => import(`@/views/${url}`)
+    }else{
+      result.path =  sysMenu.component
+      // result.component = () => import(`@/views/${url}`)
+      result.component= resolve  => require([`@/views${url}`],resolve)
+    }
+
+
+  } else {
+    result.hidden = true
+  }
+
+  const result1 = {}
+  result1.title = sysMenu.name
+  result1.icon = sysMenu.icons
+  result1.noCache = false
+  // result1.role = ['admin','editor']
+  result.meta = result1
+  return result
+}
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};
diff --git a/project-web/src/store/modules/settings.js b/project-web/src/store/modules/settings.js
new file mode 100644
index 0000000..08db1e5
--- /dev/null
+++ b/project-web/src/store/modules/settings.js
@@ -0,0 +1,50 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import defaultSettings from '@/settings';
+import Cache from '@/plugins/cache';
+const { showSettings, tagsView, fixedHeader, sidebarLogo, topNav, sideTheme, navIcon } = defaultSettings;
+const storageSetting = Cache.local.has('layout-setting') ? Cache.local.getJSON('layout-setting') : '';
+const state = {
+  theme: storageSetting.theme || '#409EFF',
+  sideTheme: storageSetting.sideTheme || sideTheme,
+  topNav: storageSetting.topNav === undefined ? topNav : storageSetting.topNav,
+  showSettings: showSettings,
+  tagsView: storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView,
+  fixedHeader: storageSetting.fixedHeader === undefined ? fixedHeader : storageSetting.fixedHeader,
+  sidebarLogo: storageSetting.sidebarLogo === undefined ? sidebarLogo : storageSetting.sidebarLogo,
+  navIcon: storageSetting.navIcon === undefined ? navIcon : storageSetting.navIcon,
+  frontDomain: localStorage.getItem('frontDomain') || '', //绉诲姩绔煙鍚�
+};
+const mutations = {
+  CHANGE_SETTING: (state, { key, value }) => {
+    if (state.hasOwnProperty(key)) {
+      state[key] = value;
+    }
+  },
+  SET_FrontDomain(state, frontDomain) {
+    state.frontDomain = frontDomain;
+    localStorage.setItem('frontDomain', frontDomain);
+    if (!frontDomain) localStorage.removeItem('frontDomain');
+  },
+};
+
+const actions = {
+  changeSetting({ commit }, data) {
+    commit('CHANGE_SETTING', data);
+  },
+};
+
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};
diff --git a/project-web/src/store/modules/tagsView.js b/project-web/src/store/modules/tagsView.js
new file mode 100644
index 0000000..52abc05
--- /dev/null
+++ b/project-web/src/store/modules/tagsView.js
@@ -0,0 +1,170 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+const state = {
+  visitedViews: [],
+  cachedViews: [],
+};
+
+const mutations = {
+  ADD_VISITED_VIEW: (state, view) => {
+    if (state.visitedViews.some((v) => v.path === view.path)) return;
+    state.visitedViews.push(
+      Object.assign({}, view, {
+        title: view.meta.title || 'no-name',
+      }),
+    );
+  },
+  ADD_CACHED_VIEW: (state, view) => {
+    if (state.cachedViews.includes(view.name)) return;
+    if (!view.meta.noCache) {
+      state.cachedViews.push(view.name);
+    }
+  },
+
+  DEL_VISITED_VIEW: (state, view) => {
+    for (const [i, v] of state.visitedViews.entries()) {
+      if (v.path === view.path) {
+        state.visitedViews.splice(i, 1);
+        break;
+      }
+    }
+  },
+  DEL_CACHED_VIEW: (state, view) => {
+    const index = state.cachedViews.indexOf(view.name);
+    index > -1 && state.cachedViews.splice(index, 1);
+  },
+
+  DEL_OTHERS_VISITED_VIEWS: (state, view) => {
+    state.visitedViews = state.visitedViews.filter((v) => {
+      return v.meta.affix || v.path === view.path;
+    });
+  },
+  DEL_OTHERS_CACHED_VIEWS: (state, view) => {
+    const index = state.cachedViews.indexOf(view.name);
+    if (index > -1) {
+      state.cachedViews = state.cachedViews.slice(index, index + 1);
+    } else {
+      // if index = -1, there is no cached tags
+      state.cachedViews = [];
+    }
+  },
+
+  DEL_ALL_VISITED_VIEWS: (state) => {
+    // keep affix tags
+    const affixTags = state.visitedViews.filter((tag) => tag.meta.affix);
+    state.visitedViews = affixTags;
+  },
+  DEL_ALL_CACHED_VIEWS: (state) => {
+    state.cachedViews = [];
+  },
+
+  UPDATE_VISITED_VIEW: (state, view) => {
+    for (let v of state.visitedViews) {
+      if (v.path === view.path) {
+        v = Object.assign(v, view);
+        break;
+      }
+    }
+  },
+};
+
+const actions = {
+  addView({ dispatch }, view) {
+    dispatch('addVisitedView', view);
+    dispatch('addCachedView', view);
+  },
+  addVisitedView({ commit }, view) {
+    commit('ADD_VISITED_VIEW', view);
+  },
+  addCachedView({ commit }, view) {
+    commit('ADD_CACHED_VIEW', view);
+  },
+
+  delView({ dispatch, state }, view) {
+    return new Promise((resolve) => {
+      dispatch('delVisitedView', view);
+      dispatch('delCachedView', view);
+      resolve({
+        visitedViews: [...state.visitedViews],
+        cachedViews: [...state.cachedViews],
+      });
+    });
+  },
+  delVisitedView({ commit, state }, view) {
+    return new Promise((resolve) => {
+      commit('DEL_VISITED_VIEW', view);
+      resolve([...state.visitedViews]);
+    });
+  },
+  delCachedView({ commit, state }, view) {
+    return new Promise((resolve) => {
+      commit('DEL_CACHED_VIEW', view);
+      resolve([...state.cachedViews]);
+    });
+  },
+
+  delOthersViews({ dispatch, state }, view) {
+    return new Promise((resolve) => {
+      dispatch('delOthersVisitedViews', view);
+      dispatch('delOthersCachedViews', view);
+      resolve({
+        visitedViews: [...state.visitedViews],
+        cachedViews: [...state.cachedViews],
+      });
+    });
+  },
+  delOthersVisitedViews({ commit, state }, view) {
+    return new Promise((resolve) => {
+      commit('DEL_OTHERS_VISITED_VIEWS', view);
+      resolve([...state.visitedViews]);
+    });
+  },
+  delOthersCachedViews({ commit, state }, view) {
+    return new Promise((resolve) => {
+      commit('DEL_OTHERS_CACHED_VIEWS', view);
+      resolve([...state.cachedViews]);
+    });
+  },
+
+  delAllViews({ dispatch, state }, view) {
+    return new Promise((resolve) => {
+      dispatch('delAllVisitedViews', view);
+      dispatch('delAllCachedViews', view);
+      resolve({
+        visitedViews: [...state.visitedViews],
+        cachedViews: [...state.cachedViews],
+      });
+    });
+  },
+  delAllVisitedViews({ commit, state }) {
+    return new Promise((resolve) => {
+      commit('DEL_ALL_VISITED_VIEWS');
+      resolve([...state.visitedViews]);
+    });
+  },
+  delAllCachedViews({ commit, state }) {
+    return new Promise((resolve) => {
+      commit('DEL_ALL_CACHED_VIEWS');
+      resolve([...state.cachedViews]);
+    });
+  },
+
+  updateVisitedView({ commit }, view) {
+    commit('UPDATE_VISITED_VIEW', view);
+  },
+};
+
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};
diff --git a/project-web/src/store/modules/user.js b/project-web/src/store/modules/user.js
new file mode 100644
index 0000000..4910810
--- /dev/null
+++ b/project-web/src/store/modules/user.js
@@ -0,0 +1,231 @@
+import {getInfo, login, logout,getCurInfo} from '@/api/user';
+import {getToken, removeToken,setUserInfo, setToken,getUser,getUserDetail,setUserDetail,setCPass} from '@/utils/auth';
+import router, {resetRouter} from '@/router';
+import {isLoginApi} from '@/api/system/sms';
+import Cookies from 'js-cookie';
+import {getQueryString} from '@/libs/wechat';
+import {Loading} from 'element-ui';
+import {encrypt} from '@/utils/jsencrypt'
+import store from "@/store";
+
+const state = {
+  info: getUser(),
+  userInfo:getUserDetail(),//鐢ㄦ埛璇︾粏淇℃伅
+  token: getToken(),
+  userId:'',
+  name: '',
+  avatar: '',
+  introduction: '',
+  roles: [],
+  isLogin: Cookies.get('isLogin'),
+  permissions: [],
+  myButtonPermission:[],
+  captcha: {
+    captchaVerification: '',
+    secretKey: '',
+    token: '',
+  }, //婊戝潡楠岃瘉token
+};
+
+const mutations = {
+  SET_USER_INFO:(state, info)=>{
+    // 璁剧疆璇︾粏淇℃伅
+    state.userInfo = info
+    setUserDetail(info)
+  },
+  SET_MYBUTTONPERMISSION: (state, myButtonPermission) => {
+    state.myButtonPermission = myButtonPermission
+  },
+  SET_TOKEN: (state, token) => {
+    state.token = token;
+    setToken(token)
+  },
+  SET_USERINFO: (state, user) =>{
+    // 淇濆瓨鐢ㄦ埛淇℃伅
+    state.info = user
+    setUserInfo(user)
+  },
+  SET_ISLOGIN: (state, isLogin) => {
+    state.isLogin = isLogin;
+    Cookies.set(isLogin);
+  },
+  SET_INTRODUCTION: (state, introduction) => {
+    state.introduction = introduction;
+  },
+  SET_USERID: (state, id) => {
+    state.userId = id;
+  },
+  SET_NAME: (state, name) => {
+    state.name = name;
+  },
+  SET_AVATAR: (state, avatar) => {
+    state.avatar = avatar;
+  },
+  SET_ROLES: (state, roles) => {
+    state.roles = roles;
+  },
+  SET_PERMISSIONS: (state, permissions) => {
+    state.permissions = permissions;
+  },
+  SET_CAPTCHA: (state, captcha) => {
+    state.captcha = captcha;
+  }
+};
+
+const actions = {
+  // user login
+  login({ commit }, userInfo) {
+    // const { account, pwd, key, code, wxCode } = userInfo;
+    const username = userInfo.account.trim()
+    // const password = userInfo.password
+    const password = encrypt(userInfo.password)
+    const code = userInfo.code
+    const uuid = userInfo.uuid
+    const loginType = userInfo.loginType
+    const verifyType = userInfo.verifyType
+    Loading.service();
+    return new Promise((resolve, reject) => {
+      // login(userInfo)
+      login(username, password, code, uuid, loginType, verifyType)
+        .then((data) => {
+          let loadingInstance = Loading.service();
+          loadingInstance.close();
+          commit('SET_TOKEN', data.token);
+          commit('SET_USERINFO', data.userInfo);
+          getCurInfo().then(res=>{
+            commit('SET_USER_INFO',res)
+          })
+          resolve();
+        })
+        .catch((error) => {
+          reject(error);
+        });
+    });
+  },
+
+  // 鐭俊鏄惁鐧诲綍
+  isLogin({ commit }, userInfo) {
+    return new Promise((resolve, reject) => {
+      isLoginApi()
+        .then(async (res) => {
+          commit('SET_ISLOGIN', res.isLogin);
+          resolve(res);
+        })
+        .catch((res) => {
+          commit('SET_ISLOGIN', false);
+          reject(res);
+        });
+    });
+  },
+
+  // get user info
+  getInfo({ commit, state }) {
+    return new Promise((resolve, reject) => {
+      getInfo(state.token)
+        .then(data => {
+          if (!data) {
+            reject('Verification failed, please Login again.');
+          }
+          let roles = data.roleIds;
+          if (!roles || roles.length <= 0) {
+            reject('getInfo: roles must be a non-null array!');
+          }
+          // 鑾峰彇骞惰缃慨鏀瑰瘑鐮佺殑鐘舵��
+          setCPass(data.force_change_pass)
+          if( data.force_change_pass ){
+            router.push({ path: '/resetPwd' });
+            reject(data);
+          }
+          commit('SET_USERID', data.id);
+          commit('SET_ROLES', roles);
+          commit('SET_NAME', data.account);
+          commit('SET_AVATAR', 'http://kaifa.crmeb.net/system/images/admin_logo.png');
+          commit('SET_INTRODUCTION', data.realName);
+          commit('SET_PERMISSIONS', data.permissions); //鏉冮檺鏍囪瘑
+          resolve(data);
+        })
+        .catch((error) => {
+          reject(error);
+        });
+    });
+  },
+
+  // user logout
+  logout({ commit, state, dispatch }) {
+    Loading.service();
+    return new Promise((resolve, reject) => {
+      logout(state.token)
+        .then(() => {
+          let loadingInstance = Loading.service();
+          loadingInstance.close();
+          commit('SET_TOKEN', '');
+          commit('SET_ROLES', []);
+          commit('SET_PERMISSIONS', []);
+          commit('SET_CONNECTION_CLEAR', null) // 鏂紑閾炬帴
+          removeToken();
+          resetRouter();
+          // localStorage.clear();
+          Cookies.remove('storeStaffList');
+          Cookies.remove('JavaInfo');
+          localStorage.clear('sidebarRouters');
+          sessionStorage.removeItem('token');
+          // reset visited views and cached views
+          // to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2485
+          dispatch('tagsView/delAllViews', null, { root: true });
+
+          resolve();
+        })
+        .catch((error) => {
+          reject(error);
+        });
+    });
+  },
+
+  // remove token
+  resetToken({ commit }) {
+    return new Promise((resolve) => {
+      commit('SET_TOKEN', '');
+      commit('SET_ROLES', []);
+      removeToken();
+      resolve();
+    });
+  },
+  // // 璁剧疆token
+  // setToken({ commit }, state) {
+  //   return new Promise((resolve) => {
+  //     commit('SET_TOKEN', state.token);
+  //     // Cookies.set('JavaInfo', JSON.stringify(state));
+  //     setToken(data.token);
+  //     resolve();
+  //   });
+  // },
+
+  // dynamically modify permissions
+  changeRoles({ commit, dispatch }, role) {
+    return new Promise(async (resolve) => {
+      // const token = role + '-token';
+      //
+      // commit('SET_TOKEN', token);
+      // // setToken(token);
+      //
+      const { roles } = await dispatch('getInfo');
+      // resetRouter();
+      // generate accessible routes map based on roles
+      const accessRoutes = await dispatch('permission/generateRoutes', roles, { root: true });
+      // dynamically add accessible routes
+      router.addRoutes(accessRoutes);
+
+      // reset visited views and cached views
+      dispatch('tagsView/delAllViews', null, { root: true });
+
+      resolve();
+    });
+  },
+};
+
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};
diff --git a/project-web/src/styles/btn.scss b/project-web/src/styles/btn.scss
new file mode 100644
index 0000000..df96fd0
--- /dev/null
+++ b/project-web/src/styles/btn.scss
@@ -0,0 +1,99 @@
+@import './variables.scss';
+
+@mixin colorBtn($color) {
+  background: $color;
+
+  &:hover {
+    color: $color;
+
+    &:before,
+    &:after {
+      background: $color;
+    }
+  }
+}
+
+.blue-btn {
+  @include colorBtn($blue);
+}
+
+.light-blue-btn {
+  @include colorBtn($light-blue);
+}
+
+.red-btn {
+  @include colorBtn($red);
+}
+
+.pink-btn {
+  @include colorBtn($pink);
+}
+
+.green-btn {
+  @include colorBtn($green);
+}
+
+.tiffany-btn {
+  @include colorBtn($tiffany);
+}
+
+.yellow-btn {
+  @include colorBtn($yellow);
+}
+
+.pan-btn {
+  font-size: 14px;
+  color: #fff;
+  padding: 14px 36px;
+  border-radius: 8px;
+  border: none;
+  outline: none;
+  transition: 600ms ease all;
+  position: relative;
+  display: inline-block;
+
+  &:hover {
+    background: #fff;
+
+    &:before,
+    &:after {
+      width: 100%;
+      transition: 600ms ease all;
+    }
+  }
+
+  &:before,
+  &:after {
+    content: '';
+    position: absolute;
+    top: 0;
+    right: 0;
+    height: 2px;
+    width: 0;
+    transition: 400ms ease all;
+  }
+
+  &::after {
+    right: inherit;
+    top: inherit;
+    left: 0;
+    bottom: 0;
+  }
+}
+
+.custom-button {
+  display: inline-block;
+  line-height: 1;
+  white-space: nowrap;
+  cursor: pointer;
+  background: #fff;
+  color: #fff;
+  -webkit-appearance: none;
+  text-align: center;
+  box-sizing: border-box;
+  outline: 0;
+  margin: 0;
+  padding: 10px 15px;
+  font-size: 14px;
+  border-radius: 4px;
+}
diff --git a/project-web/src/styles/element-ui.scss b/project-web/src/styles/element-ui.scss
new file mode 100644
index 0000000..bc6f8e8
--- /dev/null
+++ b/project-web/src/styles/element-ui.scss
@@ -0,0 +1,99 @@
+// cover some element-ui styles
+.el-aside{
+  margin: 0!important;
+}
+.el-breadcrumb__inner,
+.el-breadcrumb__inner a {
+  font-weight: 400 !important;
+}
+
+.el-upload {
+  input[type='file'] {
+    display: none !important;
+  }
+}
+
+.el-upload__input {
+  display: none;
+}
+
+.cell {
+  .el-tag {
+    margin-right: 0px;
+  }
+}
+
+.small-padding {
+  .cell {
+    padding-left: 5px;
+    padding-right: 5px;
+  }
+}
+
+.fixed-width {
+  .el-button--mini {
+    padding: 7px 10px;
+    width: 60px;
+  }
+}
+
+.status-col {
+  .cell {
+    padding: 0 10px;
+    text-align: center;
+
+    .el-tag {
+      margin-right: 0px;
+    }
+  }
+}
+
+// to fixed https://github.com/ElemeFE/element/issues/2461
+.el-dialog {
+  transform: none;
+  left: 0;
+  position: relative;
+  margin: 0 auto;
+}
+
+// refine element ui upload
+.upload-container {
+  .el-upload {
+    //width: 100%;
+
+    .el-upload-dragger {
+      width: 100%;
+      height: 200px;
+    }
+  }
+}
+
+// dropdown
+.el-dropdown-menu {
+  a {
+    display: block;
+  }
+}
+
+// fix date-picker ui bug in filter-item
+.el-range-editor.el-input__inner {
+  display: inline-flex !important;
+}
+
+// to fix el-date-picker css style
+.el-range-separator {
+  box-sizing: content-box;
+}
+.el-card.is-always-shadow {
+  //box-shadow: none;
+}
+.el-form-item__label{
+  font-weight: normal;
+}
+.el-dialog__body::-webkit-scrollbar{
+  display: none;
+}
+
+.el-dialog__body::-webkit-scrollbar {
+  box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
+}
diff --git a/project-web/src/styles/element-variables.scss b/project-web/src/styles/element-variables.scss
new file mode 100644
index 0000000..ddbe7df
--- /dev/null
+++ b/project-web/src/styles/element-variables.scss
@@ -0,0 +1,31 @@
+/**
+* I think element-ui's default theme color is too light for long-term use.
+* So I modified the default color and you can modify it to your liking.
+**/
+
+/* theme color */
+$--color-primary: #0D997C;//#1890ff;
+$--color-success: #11AD6F; //#13ce66;
+$--color-warning: #ffba00;
+$--color-danger: #ff4949;
+// $--color-info: #1E1E1E;
+
+$--button-font-weight: 400;
+
+// $--color-text-regular: #1f2d3d;
+
+$--border-color-light: #dfe4ed;
+$--border-color-lighter: #e6ebf5;
+
+$--table-border: 1px solid#dfe6ec;
+
+/* icon font path, required */
+$--font-path: '~element-ui/lib/theme-chalk/fonts';
+
+@import '~element-ui/packages/theme-chalk/src/index';
+
+// the :export directive is the magic sauce for webpack
+// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
+:export {
+  theme: $--color-primary;
+}
diff --git a/project-web/src/styles/index.scss b/project-web/src/styles/index.scss
new file mode 100644
index 0000000..e132428
--- /dev/null
+++ b/project-web/src/styles/index.scss
@@ -0,0 +1,330 @@
+@import './variables.scss';
+@import './mixin.scss';
+@import './transition.scss';
+@import './element-ui.scss';
+@import './sidebar.scss';
+@import './btn.scss';
+@import './styles.scss';
+
+body {
+  height: 100%;
+  -moz-osx-font-smoothing: grayscale;
+  -webkit-font-smoothing: antialiased;
+  text-rendering: optimizeLegibility;
+  font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
+}
+
+label {
+  font-weight: 700;
+}
+
+html {
+  height: 100%;
+  box-sizing: border-box;
+}
+
+#app {
+  height: 100%;
+}
+
+*,
+*:before,
+*:after {
+  box-sizing: inherit;
+}
+// 鏃犻渶婊氬姩鏉�
+.no-scrollbar::-webkit-scrollbar {
+  display: none!important;
+}
+.app-main::-webkit-scrollbar {
+  display: none!important;
+}
+.filter-container{
+  padding: 15px 10px 0 15px;
+  background-color: #F6F8FC;
+}
+.no-padding {
+  padding: 0px !important;
+}
+
+.padding-content {
+  padding: 4px 0;
+}
+
+a:focus,
+a:active {
+  outline: none;
+}
+
+a,
+a:focus,
+a:hover {
+  cursor: pointer;
+  color: inherit;
+  text-decoration: none;
+}
+
+div:focus {
+  outline: none;
+}
+
+.fr {
+  float: right;
+}
+
+.fl {
+  float: left;
+}
+
+.pr-5 {
+  padding-right: 5px;
+}
+
+.pl-5 {
+  padding-left: 5px;
+}
+
+.block {
+  display: block;
+}
+
+.pointer {
+  cursor: pointer;
+}
+
+.inlineBlock {
+  display: block;
+}
+
+.clearfix {
+  &:after {
+    visibility: hidden;
+    display: block;
+    font-size: 0;
+    content: ' ';
+    clear: both;
+    height: 0;
+  }
+}
+
+aside {
+  //background: #eef1f6;
+  padding: 8px 24px;
+  margin-bottom: 20px;
+  border-radius: 2px;
+  display: block;
+  line-height: 32px;
+  font-size: 16px;
+  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Fira Sans',
+    'Droid Sans', 'Helvetica Neue', sans-serif;
+  color: #2c3e50;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+
+  a {
+    color: #337ab7;
+    cursor: pointer;
+
+    &:hover {
+      color: rgb(32, 160, 255);
+    }
+  }
+}
+
+//main-container鍏ㄥ眬鏍峰紡
+.app-container {
+  padding: 16px;
+  height: 100%;
+}
+
+.components-container {
+  position: relative;
+}
+
+.pagination-container {
+  margin-top: 30px;
+}
+
+.text-center {
+  text-align: center;
+}
+
+.sub-navbar {
+  height: 50px;
+  line-height: 50px;
+  position: relative;
+  width: 100%;
+  text-align: right;
+  padding-right: 20px;
+  transition: 600ms ease position;
+  background: linear-gradient(
+    90deg,
+    rgba(32, 182, 249, 1) 0%,
+    rgba(32, 182, 249, 1) 0%,
+    rgba(33, 120, 241, 1) 100%,
+    rgba(33, 120, 241, 1) 100%
+  );
+
+  .subtitle {
+    font-size: 20px;
+    color: #fff;
+  }
+
+  &.draft {
+    background: #d0d0d0;
+  }
+
+  &.deleted {
+    background: #d0d0d0;
+  }
+}
+
+.link-type,
+.link-type:focus {
+  color: #337ab7;
+  cursor: pointer;
+
+  &:hover {
+    color: rgb(32, 160, 255);
+  }
+}
+
+.filter-container {
+  .filter-item {
+    display: inline-block;
+    vertical-align: middle;
+    margin-bottom: 10px;
+  }
+}
+
+//refine vue-multiselect plugin
+.multiselect {
+  line-height: 16px;
+}
+
+.multiselect--active {
+  z-index: 1000 !important;
+}
+
+.ml10 {
+  margin-left: 10px;
+}
+.ml20 {
+  margin-left: 20px;
+}
+.mb10 {
+  margin-bottom: 10px;
+}
+.link {
+  color: #409eff;
+  cursor: pointer;
+}
+.color-red {
+  color: #f56c6c;
+}
+.btn-width100 {
+  width: 100%;
+}
+.el-card__body{
+ border-radius: 8px!important;
+}
+// 2023-7-13 鏂版坊鍔犲叕鍏辨牱寮�
+.font-12 {
+  font-size: 12px;
+}
+.font-13{
+  font-size: 13px;
+}
+.font-14 {
+  font-size: 14px;
+}
+.font-15 {
+  font-size: 15px;
+}
+.font-16 {
+  font-size: 16px;
+}
+
+.font-18 {
+  font-size: 18px;
+}
+
+.f-r {
+  display: flex;
+  align-items: center;
+}
+
+.f-col {
+  display: flex;
+  flex-direction: column;
+}
+
+.f-r-top {
+  align-items: flex-start;
+}
+
+.f-r-center {
+  justify-content: center;
+}
+
+.f-r-between {
+  justify-content: space-between;
+}
+
+.f-r-start {
+  justify-content: flex-start;
+}
+
+.f-r-end {
+  justify-content: flex-end;
+}
+
+.f-1 {
+  flex: 1;
+}
+
+.color-333 {
+  color: #333333;
+}
+
+.color-666 {
+  color: #666666;
+}
+
+.color-999 {
+  color: #999999;
+}
+.color-839{
+  color:#83919E;
+}
+.bg-fff {
+  background-color: #FFFFFF;
+}
+
+.bg-f5f {
+  background-color: #F5F5F5;
+}
+
+.font-bold {
+  font-weight: bold;
+}
+
+.text-center {
+  text-align: center;
+}
+.line-1{
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+.line-2{
+  word-break: break-all;
+  text-overflow: ellipsis;
+  display: -webkit-box;
+  -webkit-box-orient: vertical;
+  -webkit-line-clamp:2;
+  overflow: hidden;
+}
+button{
+  font-family: sans-serif!important;
+}
diff --git a/project-web/src/styles/mixin.scss b/project-web/src/styles/mixin.scss
new file mode 100644
index 0000000..5250e71
--- /dev/null
+++ b/project-web/src/styles/mixin.scss
@@ -0,0 +1,60 @@
+@mixin clearfix {
+  &:after {
+    content: '';
+    display: table;
+    clear: both;
+  }
+}
+
+@mixin scrollBar {
+  &::-webkit-scrollbar-track-piece {
+    background: #d3dce6;
+  }
+
+  &::-webkit-scrollbar {
+    width: 6px;
+  }
+
+  &::-webkit-scrollbar-thumb {
+    background: #99a9bf;
+    border-radius: 20px;
+  }
+}
+
+@mixin relative {
+  position: relative;
+  width: 100%;
+  height: 100%;
+}
+
+@mixin pct($pct) {
+  width: #{$pct};
+  position: relative;
+  margin: 0 auto;
+}
+
+@mixin triangle($width, $height, $color, $direction) {
+  $width: $width/2;
+  $color-border-style: $height solid $color;
+  $transparent-border-style: $width solid transparent;
+  height: 0;
+  width: 0;
+
+  @if $direction==up {
+    border-bottom: $color-border-style;
+    border-left: $transparent-border-style;
+    border-right: $transparent-border-style;
+  } @else if $direction==right {
+    border-left: $color-border-style;
+    border-top: $transparent-border-style;
+    border-bottom: $transparent-border-style;
+  } @else if $direction==down {
+    border-top: $color-border-style;
+    border-left: $transparent-border-style;
+    border-right: $transparent-border-style;
+  } @else if $direction==left {
+    border-right: $color-border-style;
+    border-top: $transparent-border-style;
+    border-bottom: $transparent-border-style;
+  }
+}
diff --git a/project-web/src/styles/reset.css b/project-web/src/styles/reset.css
new file mode 100644
index 0000000..bbca8b7
--- /dev/null
+++ b/project-web/src/styles/reset.css
@@ -0,0 +1,284 @@
+body,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+hr,
+p,
+blockquote,
+dl,
+dt,
+dd,
+ul,
+ol,
+li,
+pre,
+form,
+fieldset,
+legend,
+button,
+input,
+textarea,
+th,
+td,
+select {
+  margin: 0;
+  padding: 0;
+}
+body,
+button,
+input,
+select,
+textarea {
+  font-size: 0.3rem;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+  font-size: 100%;
+}
+address,
+cite,
+dfn,
+em,
+var {
+  font-style: normal;
+}
+code,
+kbd,
+pre,
+samp {
+  font-family: couriernew, courier, monospace;
+}
+small {
+  font-size: 12px;
+}
+ul,
+ol {
+  list-style: none;
+}
+sup {
+  vertical-align: text-top;
+}
+sub {
+  vertical-align: text-bottom;
+}
+legend {
+  color: #000;
+}
+fieldset,
+img {
+  border: 0;
+}
+button,
+input,
+select,
+textarea {
+  font-size: 100%;
+}
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+  width: 100%;
+}
+/* HTML5 display-role reset for older browsers */
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+menu,
+nav,
+section {
+  display: block;
+}
+input,
+input[type='search'],
+button,
+select,
+option,
+textarea,
+a {
+  outline: none;
+  border: 0;
+  -webkit-appearance: none;
+  border-radius: 0;
+  background: none;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+/* custom */
+a {
+  text-decoration: none;
+  -webkit-backface-visibility: hidden;
+  color: #333;
+}
+body,
+input,
+textarea {
+  -webkit-text-size-adjust: none;
+  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+  font-family: 'PingFang SC', 'STHeitiSC-Light', 'Helvetica-Light', arial, sans-serif, 'Droid Sans Fallback';
+  color: #333;
+}
+div,
+section,
+header,
+footer {
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+input {
+  line-height: normal;
+  box-sizing: border-box;
+}
+.fl {
+  float: left;
+}
+.fr {
+  float: right;
+}
+.clear {
+  clear: both;
+  height: 0;
+  line-height: 0;
+  font-size: 0;
+}
+.clearfix:after {
+  content: '.';
+  display: block;
+  height: 0;
+  visibility: hidden;
+  clear: both;
+  overflow: hidden;
+}
+::-webkit-scrollbar {
+  width: 0px;
+}
+::-webkit-scrollbar-track {
+  background-color: unset;
+}
+
+::-webkit-scrollbar-thumb {
+  background-color: unset;
+}
+
+::-webkit-scrollbar-thumb:hover {
+  background-color: unset;
+}
+
+::-webkit-scrollbar-thumb:active {
+  background-color: unset;
+}
+.flex {
+  display: -webkit-box;
+  display: -moz-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+}
+.con-cell {
+  display: table-cell;
+  height: 100%;
+  vertical-align: middle;
+}
+.old-price {
+  text-decoration: line-through;
+}
+
+.icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
+}
+@font-face {
+  font-family: 'GuildfordProBook 5';
+  /*src:url('GuildfordProBook 5.otf')*/
+}
+[v-cloak] {
+  display: none;
+}
+.iconfont {
+  font-size: 0.36rem;
+}
+/* 涓�鍍忕礌杈规 */
+@media (-webkit-min-device-pixel-ratio: 1.5), (min-device-pixel-ratio: 1.5) {
+  .border-1px::after {
+    -webkit-transform: scaleY(0.7);
+    -moz-transform: scaleY(0.7);
+    -o-transform: scaleY(0.7);
+    -ms-transform: scaleY(0.7);
+    transform: scaleY(0.7);
+  }
+  .border-1px::before {
+    -webkit-transform: scaleY(0.7);
+    -moz-transform: scaleY(0.7);
+    -o-transform: scaleY(0.7);
+    -ms-transform: scaleY(0.7);
+    transform: scaleY(0.7);
+  }
+}
+@media (-webkit-min-device-pixel-ratio: 2), (min-device-pixel-ratio: 2) {
+  .border-1px::after {
+    -webkit-transform: scaleY(0.5);
+    -moz-transform: scaleY(0.5);
+    -o-transform: scaleY(0.5);
+    -ms-transform: scaleY(0.5);
+    transform: scaleY(0.5);
+  }
+  .border-1px::before {
+    -webkit-transform: scaleY(0.5);
+    -moz-transform: scaleY(0.5);
+    -o-transform: scaleY(0.5);
+    -ms-transform: scaleY(0.5);
+    transform: scaleY(0.5);
+  }
+}
+@media (-webkit-min-device-pixel-ratio: 3), (min-device-pixel-ratio: 3) {
+  .border-1px::after {
+    -webkit-transform: scaleY(0.33);
+    -moz-transform: scaleY(0.33);
+    -o-transform: scaleY(0.33);
+    -ms-transform: scaleY(0.33);
+    transform: scaleY(0.33);
+  }
+  .border-1px::before {
+    -webkit-transform: scaleY(0.33);
+    -moz-transform: scaleY(0.33);
+    -o-transform: scaleY(0.33);
+    -ms-transform: scaleY(0.33);
+    transform: scaleY(0.33);
+  }
+}
+.line1 {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  width: 100%;
+}
+.line2 {
+  word-break: break-all;
+  display: -webkit-box;
+  -webkit-line-clamp: 2;
+  -webkit-box-orient: vertical;
+  overflow: hidden;
+}
+.mask {
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  z-index: 555;
+  background-color: rgba(0, 0, 0, 0.5);
+}
diff --git a/project-web/src/styles/sidebar.scss b/project-web/src/styles/sidebar.scss
new file mode 100644
index 0000000..2aa3f4e
--- /dev/null
+++ b/project-web/src/styles/sidebar.scss
@@ -0,0 +1,210 @@
+#app {
+  .main-container {
+    min-height: 100%;
+    transition: margin-left 0.28s;
+    //margin-left: $base-sidebar-width;
+    position: relative;
+  }
+
+  .sidebar-container {
+    transition: width 0.28s;
+    width: $base-sidebar-width !important;
+    background-color: $base-menu-background;
+    height: 100%;
+    position: fixed;
+    font-size: 0px;
+    top: 0;
+    bottom: 0;
+    left: 0;
+    z-index: 1001;
+    overflow: hidden;
+
+    // reset element-ui css
+    .horizontal-collapse-transition {
+      transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out;
+    }
+
+    .scrollbar-wrapper {
+      overflow-x: hidden !important;
+    }
+
+    .el-scrollbar__bar.is-vertical {
+      right: 0px;
+    }
+
+    .el-scrollbar {
+      height: 100%;
+    }
+
+    &.has-logo {
+      .el-scrollbar {
+        height: calc(100% - 50px);
+        padding-bottom: 40px;
+      }
+    }
+
+    .is-horizontal {
+      display: none;
+    }
+
+    a {
+      display: inline-block;
+      width: 100%;
+      overflow: hidden;
+    }
+
+    .svg-icon {
+      margin-right: 16px;
+    }
+
+    .el-menu {
+      border: none;
+      height: 100%;
+      width: 100% !important;
+    }
+
+    // menu hover
+    .submenu-title-noDropdown,
+    .el-submenu__title {
+      &:hover {
+        // background-color: rgba(0, 0, 0, 0.06) !important;
+      }
+    }
+    .is-active {
+      background-color: #fff !important;
+      font-weight: 500;
+    }
+    .is-active > .el-submenu__title {
+      // color: $base-menu-color-active ;
+    }
+
+    & .nest-menu .el-submenu > .el-submenu__title,
+    & .el-submenu .el-menu-item {
+      min-width: $base-sidebar-width !important;
+      background-color: subMenuBackground !important;
+
+      &:hover {
+        // background-color: rgba(0, 0, 0, 0.06) !important;
+      }
+    }
+  }
+
+  .hideSidebar {
+    .sidebar-container {
+      width: 54px !important;
+    }
+
+    .main-container {
+      //margin-left: 54px;
+    }
+
+    .submenu-title-noDropdown {
+      //padding: 0 !important;
+      position: relative;
+
+      .el-tooltip {
+        padding: 0 !important;
+        text-align: center !important;
+        .svg-icon {
+          margin-left: 20px;
+        }
+      }
+    }
+
+    .el-submenu {
+      overflow: hidden;
+
+      & > .el-submenu__title {
+        padding: 0 !important;
+        text-align: center;
+        .svg-icon {
+          margin-left: 20px;
+        }
+
+        .el-submenu__icon-arrow {
+          display: none;
+        }
+      }
+    }
+
+    .el-menu--collapse {
+      .el-submenu {
+        & > .el-submenu__title {
+          & > span {
+            height: 0;
+            width: 0;
+            overflow: hidden;
+            visibility: hidden;
+            display: inline-block;
+          }
+        }
+      }
+    }
+  }
+
+  .el-menu--collapse .el-menu .el-submenu {
+    min-width: $base-sidebar-width !important;
+  }
+
+  // mobile responsive
+  .mobile {
+    .main-container {
+      margin-left: 0px;
+    }
+
+    .sidebar-container {
+      transition: transform 0.28s;
+      width: $base-sidebar-width !important;
+    }
+
+    &.hideSidebar {
+      .sidebar-container {
+        pointer-events: none;
+        transition-duration: 0.3s;
+        transform: translate3d(-$base-sidebar-width, 0, 0);
+      }
+    }
+  }
+
+  .withoutAnimation {
+    .main-container,
+    .sidebar-container {
+      transition: none;
+    }
+  }
+}
+
+// when menu collapsed
+.el-menu--vertical {
+  & > .el-menu {
+    .svg-icon {
+      margin-right: 16px;
+    }
+  }
+
+  .nest-menu .el-submenu > .el-submenu__title,
+  .el-menu-item {
+    &:hover {
+      // you can use $subMenuHover
+      background-color: rgba(0, 0, 0, 0.06) !important;
+    }
+  }
+  // the scroll bar appears when the subMenu is too long
+  > .el-menu--popup {
+    max-height: 100vh;
+    overflow-y: auto;
+
+    &::-webkit-scrollbar-track-piece {
+      background: #d3dce6;
+    }
+
+    &::-webkit-scrollbar {
+      width: 6px;
+    }
+
+    &::-webkit-scrollbar-thumb {
+      background: #99a9bf;
+      border-radius: 20px;
+    }
+  }
+}
diff --git a/project-web/src/styles/styles.scss b/project-web/src/styles/styles.scss
new file mode 100644
index 0000000..ea3f18d
--- /dev/null
+++ b/project-web/src/styles/styles.scss
@@ -0,0 +1,628 @@
+@charset "UTF-8";
+#app .sidebar-container .is-active {
+  background: none !important;
+}
+.el-table {
+  .el-table__header-wrapper,
+  .el-table__fixed-header-wrapper {
+    th {
+      word-break: break-word;
+      height: 47px;
+      background: #f3f8fe;
+      color: #515a6e;
+      font-size: 14px;
+      font-weight: 500;
+    }
+  }
+}
+
+.el-dialog__body {
+  padding: 20px !important;
+}
+
+.acea-row {
+  display: -webkit-box;
+  display: -moz-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex !important;
+  -webkit-box-lines: multiple;
+  -moz-box-lines: multiple;
+  -o-box-lines: multiple;
+  -webkit-flex-wrap: wrap;
+  -ms-flex-wrap: wrap;
+  flex-wrap: wrap;
+  /* 杈呭姪绫� */
+}
+
+.acea-row.row-middle {
+  -webkit-box-align: center;
+  -moz-box-align: center;
+  -o-box-align: center;
+  -ms-flex-align: center;
+  -webkit-align-items: center;
+  align-items: center;
+}
+.acea-row.justify-content {
+  -webkit-justify-content: center;
+  justify-content: center;
+}
+.acea-row.row-right {
+  -webkit-box-pack: end;
+  -moz-box-pack: end;
+  -o-box-pack: end;
+  -ms-flex-pack: end;
+  -webkit-justify-content: flex-end;
+  justify-content: flex-end;
+}
+
+.acea-row.row-bottom {
+  -webkit-box-align: end;
+  -moz-box-align: end;
+  -o-box-align: end;
+  -ms-flex-align: end;
+  -webkit-align-items: flex-end;
+  align-items: flex-end;
+}
+
+.acea-row.row-around {
+  justify-content: space-around;
+  -webkit-justify-content: space-around;
+}
+
+.acea-row.row-between {
+  -webkit-box-pack: justify;
+  -moz-box-pack: justify;
+  -o-box-pack: justify;
+  -ms-flex-pack: justify;
+  -webkit-justify-content: space-between;
+  justify-content: space-between;
+}
+
+/* 涓婁笅宸﹀彸鍨傜洿灞呬腑 */
+.acea-row.row-center-wrapper {
+  -webkit-box-align: center;
+  -moz-box-align: center;
+  -o-box-align: center;
+  -ms-flex-align: center;
+  -webkit-align-items: center;
+  align-items: center;
+  -webkit-box-pack: center;
+  -moz-box-pack: center;
+  -ms-flex-pack: center;
+  -webkit-justify-content: center;
+  justify-content: center;
+}
+
+/* 涓婁笅涓よ竟灞呬腑瀵归綈 */
+.acea-row.row-between-wrapper {
+  -webkit-box-align: center;
+  -moz-box-align: center;
+  -o-box-align: center;
+  -ms-flex-align: center;
+  -webkit-align-items: center;
+  align-items: center;
+  -webkit-box-pack: justify;
+  -moz-box-pack: justify;
+  -o-box-pack: justify;
+  -ms-flex-pack: justify;
+  -webkit-justify-content: space-between;
+  justify-content: space-between;
+}
+
+.acea-row.row-column-around {
+  -webkit-flex-direction: column;
+  -ms-flex-direction: column;
+  flex-direction: column;
+  justify-content: space-around;
+  -webkit-justify-content: space-around;
+}
+
+//鐧诲綍椤靛姩鐢�
+.index_bg {
+  width: 100%;
+  height: 100vh;
+  background: rgba(0, 0, 0, 0.6) !important;
+  z-index: 0 !important;
+}
+
+.divBox {
+  padding: 20px;
+  // padding: 0 20px 20px;
+  box-sizing: border-box;
+  .el-pagination {
+    display: flex;
+    justify-content: flex-end;
+    margin-top: 25px;
+  }
+}
+
+.el-dialog {
+  border-radius: 6px;
+}
+
+.fontColor3 {
+  color: #ed4014;
+}
+
+/* 鍘绘帀婊氬姩鏉� */
+.scrollbarAll::-webkit-scrollbar {
+  display: none; /* Chrome Safari */
+}
+
+.scrollbarAll {
+  scrollbar-width: none; /* firefox */
+  -ms-overflow-style: none; /* IE 10+ */
+  overflow-x: hidden;
+  overflow-y: auto;
+}
+
+.seachTiele {
+  font-size: 12px;
+  line-height: 29px;
+}
+
+.seachWidth {
+  //width: 219px !important;
+}
+
+.el-divider--horizontal {
+  margin: 19px 0;
+}
+
+.suibian-modal {
+  .el-dialog__footer {
+    display: none !important;
+  }
+}
+
+.el-dialog__footer {
+  border-top: 1px solid #dcdfe6;
+  padding:15px!important;
+}
+
+.el-message-box__wrapper {
+  overflow: auto;
+}
+
+.el-message-box {
+  overflow: auto !important;
+}
+
+.modal-form {
+  width: 700px;
+}
+
+table .el-image {
+  width: 30px !important;
+  height: 30px !important;
+}
+
+.upload-form {
+  min-width: 1000px;
+  max-height: 620px;
+}
+
+.upload-form-temp {
+  min-width: 1000px;
+  max-height: 700px;
+}
+
+.listPic {
+  .image-slot {
+    width: 100%;
+    height: 100%;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+  }
+}
+
+.switchTable {
+  .el-switch.is-disabled {
+    opacity: 1;
+  }
+  .el-switch.is-disabled .el-switch__core,
+  .el-switch.is-disabled .el-switch__label {
+    cursor: pointer !important;
+  }
+}
+
+/**
+ * 涓婁紶鍥剧墖鐨勭収鐩告満
+ */
+.upLoadPicBox {
+  display: inline-block;
+  cursor: pointer;
+  .upLoad {
+    width: 58px;
+    height: 58px;
+    line-height: 58px;
+    border: 1px dotted rgba(0, 0, 0, 0.1);
+    border-radius: 4px;
+    background: rgba(0, 0, 0, 0.02);
+    display: flex;
+    justify-content: center;
+    align-items: center;
+  }
+}
+
+/**
+ * 鏍囬甯︿笅鍒掔嚎
+ */
+.dividerTitle {
+  .title {
+    border-bottom: 2px solid #1890ff;
+    padding: 0 8px 18px 5px;
+    color: #000;
+    font-size: 14px;
+  }
+}
+
+.cameraIconfont {
+  color: #898989;
+  font-size: 26px;
+}
+
+.ml10 {
+  margin-left: 10px;
+}
+
+.mr10 {
+  margin-right: 10px !important;
+}
+
+.mr15 {
+  margin-right: 15px;
+}
+
+.mb5 {
+  margin-bottom: 5px;
+}
+
+.mt20 {
+  margin-top: 20px;
+}
+
+.mb15 {
+  margin-bottom: 15px;
+}
+
+.mb20 {
+  margin-bottom: 20px;
+}
+
+.mb35 {
+  margin-bottom: 35px !important;
+}
+
+.mt20 {
+  margin-top: 20px;
+}
+
+.mr50 {
+  margin-right: 50px;
+}
+
+.mr20 {
+  margin-right: 20px;
+}
+
+.mr15 {
+  margin-right: 15px;
+}
+
+.ml40 {
+  margin-left: 40px !important;
+}
+
+.mr5 {
+  margin-right: 5px !important;
+}
+
+.font14 {
+  font-size: 14px;
+}
+
+//琛ㄦ牸鍥剧墖瀹藉害
+.tabBox_img {
+  width: 36px;
+  height: 36px;
+  border-radius: 4px;
+  display: table-cell;
+  vertical-align: middle;
+}
+
+.tabBox_img img {
+  width: 100%;
+  height: 100%;
+}
+
+.picMiddle {
+  display: table;
+}
+
+.spBlock {
+  display: block;
+}
+
+//琛ㄦ牸澶撮儴棰滆壊
+.el-table thead {
+  color: #333 !important;
+}
+
+// 妯℃�佹
+.creatformModel {
+  min-width: 700px;
+  max-height: 620px;
+}
+
+.width100 {
+  width: 100%;
+}
+
+//dialog澶撮儴鍔犵嚎鏉�
+.el-dialog__header {
+  border-bottom: 1px solid #dcdfe6;
+}
+
+//鐐瑰嚮涓婁紶鍥炬牱寮忥紙寮圭獥锛�
+.publicPicBox {
+  display: inline-block;
+  cursor: pointer;
+}
+
+.publicPicBox .upLoad {
+  width: 58px;
+  height: 58px;
+  line-height: 58px;
+  border: 1px dotted rgba(0, 0, 0, 0.1);
+  border-radius: 4px;
+  background: rgba(0, 0, 0, 0.02);
+}
+
+.publicPicBox .pictrue {
+  width: 60px;
+  height: 60px;
+  border: 1px dotted rgba(0, 0, 0, 0.1);
+  margin-right: 10px;
+}
+
+.publicPicBox .pictrue img {
+  width: 100%;
+  height: 100%;
+}
+
+.publicPicBox .iconfont {
+  color: #898989;
+  font-size: 18px;
+}
+
+//鍏ㄥ眬寮圭獥瀹藉害锛�
+.dialogWidth {
+  width: 80%;
+}
+
+/**
+ * 琛ㄦ牸涓嬫媺鍐呭
+ */
+.demo-table-expand {
+  font-size: 0;
+}
+
+.demo-table-expand label {
+  width: 111px;
+  color: #99a9bf;
+}
+
+.demo-table-expand .el-form-item {
+  margin-right: 0;
+  margin-bottom: 0;
+  width: 33.33%;
+}
+
+/*switch鏍峰紡*/
+.el-switch__label {
+  position: absolute;
+  display: none;
+  color: #fff;
+  font-size: 12px !important;
+}
+
+/*鎵撳紑鏃舵枃瀛椾綅缃缃�*/
+.el-switch__label--right {
+  z-index: 1;
+  margin-left: -4px;
+  font-size: 12px !important;
+}
+
+/*鍏抽棴鏃舵枃瀛椾綅缃缃�*/
+.el-switch__label--left {
+  z-index: 1;
+  left: 8px;
+  font-size: 12px !important;
+}
+
+/*鏄剧ず鏂囧瓧*/
+.el-switch__label.is-active {
+  display: block;
+  color: #fff;
+  font-size: 12px !important;
+}
+.el-switch__label * {
+  font-size: 12px !important;
+}
+
+.selWidth {
+  width: 300px;
+}
+
+//琛ㄦ牸瀛椾綋
+//.el-table--mini{
+//  font-size: 13px !important;
+//}
+
+//瀵屾枃鏈紪杈戝櫒寮规
+#edui_fixedlayer {
+  z-index: 4000 !important;
+}
+
+.edui-shadow {
+  //z-index: -1 !important;
+}
+
+.edui-default {
+  // z-index: 4000 !important;
+}
+
+.edui-dialog {
+  z-index: 4009 !important;
+}
+
+.maskModel {
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  z-index: 55;
+  background-color: rgba(0, 0, 0, 0.5);
+}
+
+.line2 {
+  word-break: break-all;
+  display: -webkit-box;
+  -webkit-line-clamp: 2;
+  -webkit-box-orient: vertical;
+  overflow: hidden;
+}
+
+.el-image-viewer__close {
+  color: #fff;
+}
+
+.statistical-page .mpvue-calendar {
+  min-width: 100%;
+}
+
+.statistical-page .mpvue-calendar table {
+  margin: 0;
+}
+
+.statistical-page .mpvue-calendar td {
+  border-right: 1px solid #fff;
+  padding: 0;
+  width: 14% !important;
+}
+
+.statistical-page .calendar-tools {
+  box-shadow: unset;
+  -webkit-box-shadow: unset;
+  -o-box-shadow: unset;
+  -moz-box-shadow: unset;
+}
+
+.statistical-page .mc-head-box div {
+  font-size: 14px;
+}
+
+.statistical-page .mpvue-calendar td:not(.disabled) span.mc-date-red {
+  color: unset;
+}
+
+.statistical-page .mpvue-calendar .mc-range-mode .mc-range-end span.calendar-date,
+.statistical-page .mpvue-calendar .mc-range-mode .mc-range-begin span.calendar-date {
+  border-radius: 0;
+  background-color: #2291f8 !important;
+}
+
+.statistical-page .mpvue-calendar td.selected span.mc-date-red {
+  color: #fff;
+}
+
+.statistical-page .mc-range-mode .selected .mc-range-bg {
+  background-color: #a0dcf9;
+}
+
+.statistical-page .mpvue-calendar .mc-range-mode .mc-range-row-last .calendar-date,
+.statistical-page .mpvue-calendar .mc-range-mode .mc-range-row-first .calendar-date {
+  background-color: #a0dcf9;
+}
+
+.statistical-page .mpvue-calendar .mc-range-mode .selected.mc-range-second-to-last span {
+  background-color: #a0dcf9;
+}
+
+.statistical-page .mpvue-calendar .mc-range-mode .mc-range-month-first.selected .calendar-date,
+.statistical-page .mpvue-calendar .mc-range-mode .mc-range-month-last.selected .calendar-date {
+  background-color: #a0dcf9;
+}
+
+.statistical-page .mc-today-element .calendar-date {
+  border-radius: 0;
+  background-color: unset;
+}
+
+//寮圭獥鏍峰紡
+.el-message-box__header {
+  //padding: 30px;
+}
+
+//鎶藉眽鎻愪氦鎸夐挳
+.from-foot-btn {
+  width: 100%;
+  padding: 20px;
+  background: #fff;
+}
+.witth50 {
+  width: 50%;
+}
+.drawer_fix {
+  z-index: 10;
+  position: absolute;
+  left: 0;
+  bottom: 0px;
+  padding-bottom: 10px;
+  background: #fff;
+}
+.fix {
+  position: fixed;
+  bottom: 0;
+}
+.btn-shadow {
+  box-shadow: 0px -2px 4px 0px rgba(0, 0, 0, 0.05);
+}
+
+//澶氬浘涓浘鐗囨牱寮�
+.pictrue {
+  width: 60px;
+  height: 60px;
+  border: 1px dotted rgba(0, 0, 0, 0.1);
+  margin-right: 10px;
+  position: relative;
+  cursor: pointer;
+  img {
+    width: 100%;
+    height: 100%;
+  }
+  video {
+    width: 100%;
+    height: 100%;
+  }
+}
+
+//澶氬浘涓垹闄ゅ浘鐗囨寜閽�
+.btndel {
+  position: absolute;
+  z-index: 1;
+  width: 20px !important;
+  height: 20px !important;
+  left: 46px;
+  top: -4px;
+}
+
+/*鎶藉眽slot澶撮儴鏍囬*/
+.demo-drawer_title {
+  font-size: 19px;
+  color: #303133;
+}
diff --git a/project-web/src/styles/transition.scss b/project-web/src/styles/transition.scss
new file mode 100644
index 0000000..b02f60b
--- /dev/null
+++ b/project-web/src/styles/transition.scss
@@ -0,0 +1,48 @@
+// global transition css
+
+/* fade */
+.fade-enter-active,
+.fade-leave-active {
+  transition: opacity 0.28s;
+}
+
+.fade-enter,
+.fade-leave-active {
+  opacity: 0;
+}
+
+/* fade-transform */
+.fade-transform-leave-active,
+.fade-transform-enter-active {
+  transition: all 0.5s;
+}
+
+.fade-transform-enter {
+  opacity: 0;
+  transform: translateX(-30px);
+}
+
+.fade-transform-leave-to {
+  opacity: 0;
+  transform: translateX(30px);
+}
+
+/* breadcrumb transition */
+.breadcrumb-enter-active,
+.breadcrumb-leave-active {
+  transition: all 0.5s;
+}
+
+.breadcrumb-enter,
+.breadcrumb-leave-active {
+  opacity: 0;
+  transform: translateX(20px);
+}
+
+.breadcrumb-move {
+  transition: all 0.5s;
+}
+
+.breadcrumb-leave-active {
+  position: absolute;
+}
diff --git a/project-web/src/styles/variables.scss b/project-web/src/styles/variables.scss
new file mode 100644
index 0000000..3dca7d0
--- /dev/null
+++ b/project-web/src/styles/variables.scss
@@ -0,0 +1,57 @@
+// base color
+$blue: #324157;
+$light-blue: #3a71a8;
+$red: #c03639;
+$pink: #e65d6e;
+$green: #30b08f;
+$tiffany: #4ab7bd;
+$yellow: #fec171;
+$panGreen: #30b08f;
+
+$base-menu-color: #ffffff; //榛樿瀛椾綋棰滆壊
+$base-menu-color-active: #f4f4f5;
+$base-menu-background: #304156; //榛樿鑳屾櫙鑹�
+$base-logo-title-color: #ffffff; //榛樿logo_title瀛椾綋棰滆壊
+
+$base-menu-light-color: #ffffff; //娴呰壊涓婚瀛椾綋棰滆壊
+$base-menu-light-background: #2b68c9; //娴呰壊涓婚鑳屾櫙鑹�
+$base-logo-light-title-color: #001529; //娴呰壊涓婚logo_title棰滆壊
+
+$base-sub-menu-background: #1f2d3d;
+$base-sub-menu-hover: #001528;
+// sidebar
+// $menuText:#bfcbd9;
+$menuActiveText: #0d997c;
+// $subMenuActiveText:#f4f4f5;
+
+// $menuBg:#001529;
+// $menuHover:#263445;
+
+// $subMenuBg:#000c17;
+// $subMenuHover:#001528;
+
+$base-sidebar-width: 0px;
+
+// the :export directive is the magic sauce for webpack
+// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
+:export {
+  // menuText: $menuText;
+  menuActiveText: $menuActiveText;
+  // menuActiveBg:$menuActiveText;
+  // subMenuActiveText: $subMenuActiveText;
+  // menuBg: $menuBg;
+  // menuHover: $menuHover;
+  // subMenuBg: $subMenuBg;
+  // subMenuHover: $subMenuHover;
+  // sideBarWidth: $sideBarWidth;
+  menuColor: $base-menu-color;
+  menuLightColor: $base-menu-light-color;
+  menuColorActive: $base-menu-color-active;
+  menuBackground: $base-menu-background;
+  menuLightBackground: $base-menu-light-background;
+  subMenuBackground: $base-sub-menu-background;
+  subMenuHover: $base-sub-menu-hover;
+  sideBarWidth: $base-sidebar-width;
+  logoTitleColor: $base-logo-title-color;
+  logoLightTitleColor: $base-logo-light-title-color;
+}
diff --git a/project-web/src/utils/DateFormatter.js b/project-web/src/utils/DateFormatter.js
new file mode 100644
index 0000000..0212b4e
--- /dev/null
+++ b/project-web/src/utils/DateFormatter.js
@@ -0,0 +1,180 @@
+/**
+ * @Description 鏃堕棿杞崲涓篖ong绫诲瀷
+ * @Author wh
+ * @Date 2023/7/13 9:10
+ */
+export function DateToLong(val) {
+    if (val == null || val == undefined || val == '' || val == 'null' || val == 'undefined') {
+        return true;
+    }
+    //  .replace(/ 杩欓噷濉鍖归厤鐨勫唴瀹�/g,'杩欓噷鏄鏇挎崲涓虹殑鍐呭'锛�
+    /*
+    1. 鏇挎崲-
+    2. 鏇挎崲:
+    3. 鏇挎崲绌烘牸
+     */
+    var temp = val.toString().replace(/\s/g, '').replace(/-/g, '').replace(/:/g, '')
+    return temp;
+}
+
+function padLeftZero(str) {
+    return ('00' + str).substr(str.length)
+}
+
+/**
+ * @Description 20230712183150
+ * 14 浣嶆椂闂� 杞负 yyyy-MM-dd HH:mm:ss
+ * @Author wh
+ * @Date 2023/7/13 9:21
+ */
+export function LongToDateTime(val) {
+    if (val == null || val == undefined || val == '' || val == 'null' || val == 'undefined') {
+        return true;
+    }
+    var temp = val.toString()
+    // 骞�
+    var y = temp.slice(0, 4);
+    // 鏈�
+    var m = temp.slice(4, 6);
+    // 鏃�
+    var d = temp.slice(6, 8);
+    // 鏃�
+    var hh = temp.slice(8, 10);
+    // 鍒�
+    var mm = temp.slice(10, 12);
+    // 绉�
+    var ss = temp.slice(12, 14);
+    var result = y + '-' + m + '-' + d + ' ' + hh + ':' + mm + ':' + ss
+    return result;
+}
+
+export function LongToDate(val) {
+    if (val == null || val == undefined || val == '' || val == 'null' || val == 'undefined') {
+        return true;
+    }
+    var temp = val.toString()
+    // 骞�
+    var y = temp.slice(0, 4);
+    // 鏈�
+    var m = temp.slice(4, 6);
+    // 鏃�
+    var d = temp.slice(6, 8);
+    var result = y + '-' + m + '-' + d
+    return result;
+}
+
+export function formatDate(date, fmt) {
+    try {
+        if (!(date instanceof Date)) {
+            date = new Date(date)
+        }
+        if (fmt == undefined || fmt == '') {
+            fmt = 'yyyy-MM-dd hh:mm:ss'
+        }
+        if (/(y+)/.test(fmt)) {
+            fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
+        }
+        const o = {
+            'M+': date.getMonth() + 1,
+            'd+': date.getDate(),
+            'h+': date.getHours(),
+            'm+': date.getMinutes(),
+            's+': date.getSeconds()
+        }
+        for (const k in o) {
+            if (new RegExp(`(${k})`).test(fmt)) {
+                const str = o[k] + ''
+                fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : padLeftZero(str))
+            }
+        }
+        return fmt
+    } catch (e) {
+        return '-'
+    }
+}
+
+/**
+ * 褰撳墠鏃堕棿
+ *  yyyy-MM-dd HH:mm:ss
+ * @returns {string}
+ */
+export function formattedDate() {
+    const date = new Date();
+    const year = date.getFullYear();
+    const month = (date.getMonth() + 1).toString().padStart(2, '0');
+    const day = date.getDate().toString().padStart(2, '0');
+    const hour = date.getHours().toString().padStart(2, '0');
+    const minute = date.getMinutes().toString().padStart(2, '0');
+    const second = date.getSeconds().toString().padStart(2, '0');
+    return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
+}
+
+/**
+ * 褰撳墠鏃ユ湡
+ *  yyyy-MM-dd
+ * @returns {string}
+ */
+export function formattedDateDuan() {
+    const date = new Date();
+    const year = date.getFullYear();
+    const month = (date.getMonth() + 1).toString().padStart(2, '0');
+    const day = date.getDate().toString().padStart(2, '0');
+    return `${year}-${month}-${day}`;
+}
+
+/**
+ * 浼犲叆鏃堕棿鏍煎紡鐨勬椂闂达紝浠ュ綋鍓嶆椂闂翠负鏍囧噯锛岃繑鍥炶窛绂诲綋鍓嶆椂闂翠箣鍓�
+ */
+export function timeago(date) { //dateTimeStamp鏄竴涓椂闂存绉掞紝娉ㄦ剰鏃堕棿鎴虫槸绉掔殑褰㈠紡锛屽湪杩欎釜姣鐨勫熀纭�涓婇櫎浠�1000锛屽氨鏄崄浣嶆暟鐨勬椂闂存埑銆�13浣嶆暟鐨勯兘鏄椂闂存绉掋��
+  if (!date) {
+    return
+  }
+  if (!(date instanceof Date)) {
+    date = new Date(date.replace(/-/g, '/'))
+  }
+
+  var dateTimeStamp = date.getTime()
+
+  var minute = 1000 * 60; //鎶婂垎锛屾椂锛屽ぉ锛屽懆锛屽崐涓湀锛屼竴涓湀鐢ㄦ绉掕〃绀�
+  var hour = minute * 60;
+  var day = hour * 24;
+  var week = day * 7;
+  var halfamonth = day * 15;
+  var month = day * 30;
+  var now = new Date().getTime(); //鑾峰彇褰撳墠鏃堕棿姣
+  var diffValue = now - dateTimeStamp; //鏃堕棿宸�
+
+  if (diffValue < 0) {
+    return;
+  }
+  var minC = diffValue / minute; //璁$畻鏃堕棿宸殑鍒嗭紝鏃讹紝澶╋紝鍛紝鏈�
+  var hourC = diffValue / hour;
+  var dayC = diffValue / day;
+  var weekC = diffValue / week;
+  var monthC = diffValue / month;
+  var result = '';
+  if (monthC >= 1 && monthC <= 3) {
+    result = " " + parseInt(monthC) + "鏈堝墠"
+  } else if (weekC >= 1 && weekC <= 3) {
+    result = " " + parseInt(weekC) + "鍛ㄥ墠"
+  } else if (dayC >= 1 && dayC <= 6) {
+    result = " " + parseInt(dayC) + "澶╁墠"
+  } else if (hourC >= 1 && hourC <= 23) {
+    result = " " + parseInt(hourC) + "灏忔椂鍓�"
+  } else if (minC >= 1 && minC <= 59) {
+    result = " " + parseInt(minC) + "鍒嗛挓鍓�"
+  } else if (diffValue >= 0 && diffValue <= minute) {
+    result = "鍒氬垰"
+  } else {
+    var datetime = new Date();
+    datetime.setTime(dateTimeStamp);
+    var Nyear = datetime.getFullYear();
+    var Nmonth = datetime.getMonth() + 1 < 10 ? "0" + (datetime.getMonth() + 1) : datetime.getMonth() + 1;
+    var Ndate = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate();
+    var Nhour = datetime.getHours() < 10 ? "0" + datetime.getHours() : datetime.getHours();
+    var Nminute = datetime.getMinutes() < 10 ? "0" + datetime.getMinutes() : datetime.getMinutes();
+    var Nsecond = datetime.getSeconds() < 10 ? "0" + datetime.getSeconds() : datetime.getSeconds();
+    result = Nyear + "-" + Nmonth + "-" + Ndate
+  }
+  return result;
+}
diff --git a/project-web/src/utils/StringUtils.js b/project-web/src/utils/StringUtils.js
new file mode 100644
index 0000000..03accdb
--- /dev/null
+++ b/project-web/src/utils/StringUtils.js
@@ -0,0 +1,14 @@
+/**
+ * 鍒ゆ柇缁欏畾瀛楃涓叉槸鍚︿负绌�
+ * @param val
+ * @returns {boolean}
+ * @author 鏃跺厠鑻�
+ * @date 2023-04-18
+ */
+export function isEmptyValue(val){
+  if(val == null || val == undefined || val == '' || val == 'null' || val == 'undefined'){
+    return true;
+  }
+  return false;
+}
+
diff --git a/project-web/src/utils/ZBKJIutil.js b/project-web/src/utils/ZBKJIutil.js
new file mode 100644
index 0000000..bd7be94
--- /dev/null
+++ b/project-web/src/utils/ZBKJIutil.js
@@ -0,0 +1,125 @@
+
+import store from '@/store';
+
+/**
+ * 鏍规嵁闇�姹傝繃婊ゆ帀treeData涓殑child.length === 0鐨勬暟鎹�
+ * @param treeData
+ * @returns {Uint8Array | BigInt64Array | any[] | Float64Array | Int8Array | Float32Array | Int32Array | Uint32Array | Uint8ClampedArray | BigUint64Array | Int16Array | Uint16Array}
+ */
+export function clearTreeData(treeData) {
+  return treeData.map((item) => {
+    if (item.child.length === 0) {
+      delete item.child;
+    } else {
+      clearTreeData(item.child);
+    }
+    return item;
+  });
+}
+
+export function addTreeListLabel(treeData) {
+  // 鍥犳爲褰㈡帶浠跺湪slot-scope妯″紡涓嬫樉绀哄瓧娈靛彧鑳戒负label涓烘鑷畾涔夋坊鍔爈abel瀛楁鍜宑hild=children
+  return treeData.map((item) => {
+    if (
+      (item.name === '璁剧疆' ||
+        item.name === '绠$悊鍛樺垪琛�' ||
+        item.name === '韬唤绠$悊' ||
+        item.name === '绠$悊鏉冮檺' ||
+        item.name === '绠$悊鍛樺垪琛�' ||
+        item.name === '鏉冮檺瑙勫垯') &&
+      store.getters.name !== 'supervisor'
+    ) {
+      item.disabled = true;
+    }
+    item.label = item.name;
+    return item;
+  });
+}
+
+export function addTreeListLabelForCasCard(treeData, child) {
+  treeData.map((item) => {
+    if (
+      (item.name === '璁剧疆' ||
+        item.name === '绠$悊鍛樺垪琛�' ||
+        item.name === '韬唤绠$悊' ||
+        item.name === '绠$悊鏉冮檺' ||
+        item.name === '绠$悊鍛樺垪琛�' ||
+        item.name === '鏉冮檺瑙勫垯') &&
+      store.getters.name !== 'admin'
+    ) {
+      item.disabled = true;
+    }
+    item.label = item.name;
+    return item;
+  });
+}
+
+//鍔犳硶鍑芥暟锛岀敤鏉ュ緱鍒扮簿纭殑鍔犳硶缁撴灉
+//璇存槑锛歫avascript鐨勫姞娉曠粨鏋滀細鏈夎宸紝鍦ㄤ袱涓诞鐐规暟鐩稿姞鐨勬椂鍊欎細姣旇緝鏄庢樉銆傝繖涓嚱鏁拌繑鍥炶緝涓虹簿纭殑鍔犳硶缁撴灉銆�
+//璋冪敤锛�$h.Add(arg1,arg2)
+//杩斿洖鍊硷細arg1鍔犱笂arg2鐨勭簿纭粨鏋�
+export function Add(arg1, arg2) {
+  arg2 = parseFloat(arg2);
+  var r1, r2, m;
+  try {
+    r1 = arg1.toString().split('.')[1].length;
+  } catch (e) {
+    r1 = 0;
+  }
+  try {
+    r2 = arg2.toString().split('.')[1].length;
+  } catch (e) {
+    r2 = 0;
+  }
+  m = Math.pow(100, Math.max(r1, r2));
+  return (this.Mul(arg1, m) + this.Mul(arg2, m)) / m;
+}
+
+//涔樻硶鍑芥暟锛岀敤鏉ュ緱鍒扮簿纭殑涔樻硶缁撴灉
+//璇存槑锛歫avascript鐨勪箻娉曠粨鏋滀細鏈夎宸紝鍦ㄤ袱涓诞鐐规暟鐩镐箻鐨勬椂鍊欎細姣旇緝鏄庢樉銆傝繖涓嚱鏁拌繑鍥炶緝涓虹簿纭殑涔樻硶缁撴灉銆�
+//璋冪敤锛�$h.Mul(arg1,arg2)
+//杩斿洖鍊硷細arg1涔樹互arg2鐨勭簿纭粨鏋�
+export function Mul(arg1, arg2) {
+  arg1 = parseFloat(arg1);
+  arg2 = parseFloat(arg2);
+  var m = 0,
+    s1 = arg1.toString(),
+    s2 = arg2.toString();
+  try {
+    m += s1.split('.')[1].length;
+  } catch (e) {}
+  try {
+    m += s2.split('.')[1].length;
+  } catch (e) {}
+  return (Number(s1.replace('.', '')) * Number(s2.replace('.', ''))) / Math.pow(10, m);
+}
+
+//鏇挎崲瀹夊叏鍩熷悕
+export function setDomain(url) {
+  url = url ? url.toString() : '';
+  // 姝e垯鏇挎崲瀛樺湪鐨勮浆涔夌
+  url = url.replace(/\\/g, '');
+  url = window.location.protocol === 'https:' ? url.replace('http://', 'https://') : url;
+  if (url.startsWith('src="')) {
+    url = url.replaceAll('src="', '');
+  }
+  if (url.startsWith('//img') && window.location.protocol === 'https:') {
+    url = url.replace('//img', 'https://img');
+  }
+  return url;
+}
+
+// 杩囨护瀵屾枃鏈腑鐨� img 鐩稿璺緞璁块棶
+export function replaceImgSrcHttps(content) {
+  return content.replaceAll('src="//', 'src="https://');
+}
+
+/**
+ *璁$畻table鍥哄畾楂樺害
+ */
+export function getTableHeight(height) {
+  let windowHeight = document.documentElement.clientHeight || document.body.clientHeight;
+  let herderHeight = 100;
+  let footerHeight = 93;
+  return windowHeight - herderHeight - footerHeight - height;
+}
diff --git a/project-web/src/utils/auth.js b/project-web/src/utils/auth.js
new file mode 100644
index 0000000..3f77cc6
--- /dev/null
+++ b/project-web/src/utils/auth.js
@@ -0,0 +1,37 @@
+import Cookies from 'js-cookie';
+import storage from 'store';
+const TokenKey = 'iplatform_token';
+const userKey = 'user'
+const userInfo = 'userInfo'
+export function getToken() {
+  return storage.get(TokenKey);
+}
+// 鑾峰彇鐢ㄦ埛鏄惁淇敼鍘熷瀵嗙爜   can  2023/08/04
+export function getCPass() {
+  return storage.get('forceChangePass');
+}
+// 瀛樺偍鐢ㄦ埛鏄惁淇敼鍘熷瀵嗙爜鐘舵�� true  false   can  2023/08/04
+export function setCPass(val) {
+  return storage.set('forceChangePass',val);
+}
+//鑾峰彇鐢ㄦ埛璇︾粏淇℃伅
+export function getUserDetail() {
+  return storage.get(userInfo)
+}
+//璁剧疆鐢ㄦ埛璇︾粏淇℃伅
+export function setUserDetail(info) {
+  return storage.set(userInfo, info);
+}
+export function getUser() {
+  return storage.get(userKey)
+}
+export function setUserInfo(info) {
+  return storage.set(userKey, info);
+}
+export function setToken(token) {
+  return storage.set(TokenKey, token);
+}
+
+export function removeToken() {
+  return storage.remove(TokenKey);
+}
diff --git a/project-web/src/utils/base.js b/project-web/src/utils/base.js
new file mode 100644
index 0000000..d4980c0
--- /dev/null
+++ b/project-web/src/utils/base.js
@@ -0,0 +1,91 @@
+import {Message} from 'element-ui'
+import SettingIplatform from "../../public/static/config";
+import axios from "axios";
+import store from "@/store";
+
+// Base Url
+export function getBaseUrl() {
+  return SettingIplatform.apiBaseURL
+}
+
+// Ftp Url
+export function getFtpUrl() {
+  return SettingIplatform.ftpUrl
+}
+
+// Ftp 涓嬭浇鍦板潃
+export function getDownUrl() {
+  return getBaseUrl() + '/file/'
+}
+
+// Ftp 涓婁紶鍦板潃
+export function getUploadUrl() {
+  return getBaseUrl() + '/pc/fin/file/uploadMore'
+}
+
+// 棰勮鏂囦欢
+export function previewDoc(obj) {
+  const routeUrl = this.$router.resolve({url: '/webOffice/preview'})
+  let url = obj.url
+  const wordLIst = ['doc', 'docm', 'docx', 'docxf', 'dot', 'dotm', 'dotx', 'epub', 'fodt', 'fb2', 'htm', 'html', 'mht', 'odt', 'oform', 'ott', 'oxps', 'pdf', 'rtf', 'txt', 'djvu', 'xml', 'xps', 'csv', 'fods', 'ods', 'ots', 'xls', 'xlsb', 'xlsm', 'xlsx', 'xlt', 'xltm', 'xltx', 'fodp', 'odp', 'otp', 'pot', 'potm', 'potx', 'pps', 'ppsm', 'ppsx', 'ppt', 'pptm', 'pptx']
+  const arr = url.split('.')
+  if (arr.length === 2) {
+    if (wordLIst.includes(arr[arr.length - 1])) {
+      if (obj.url.indexOf('http') !== 0) {
+        url = SettingIplatform.ftpUrl + url
+      }
+      window.open(routeUrl.href + '?url=' + encodeURIComponent(url) + '&docName=' + encodeURIComponent(encodeURIComponent(obj.fileName)), '_blank')
+    } else {
+      Message.warning('鏂囦欢鏍煎紡涓嶆敮鎸侀瑙堬紒')
+    }
+  }
+}
+
+// 涓嬭浇鏂囦欢
+export function downLoad(obj) {
+  let url = obj.url
+  if (obj.url.indexOf('http') !== 0) {
+    url = SettingIplatform.ftpUrl + obj.url
+  }
+  window.open(decodeURI(url))
+  /* var doc = document.createElement('a')
+  doc.href = url
+  doc.download = filename
+  doc.target = '_blank'
+  doc.click()*/
+  /* const loading = Loading.service({
+    lock: true,
+    text: '姝e湪涓嬭浇...',
+    spinner: 'el-icon-loading',
+    background: 'rgba(0, 0, 0, 0.7)'
+  })
+  download(obj.url, obj.name, null, loading)*/
+}
+
+// 涓婁紶鏂囦欢
+export function upLoadFile(formData) {
+  const token = !store.getters.token ? sessionStorage.getItem('token') : store.getters.token;
+  return new Promise((resolve, reject) => {
+    axios.post(
+      getUploadUrl(),
+      formData,
+      {
+        headers: {
+          'Authorization': token
+        },
+        dataType: 'json',
+        crossDomain: true,
+        processData: false,
+        contentType: false,
+      }
+    ).then(res => {
+      if (res.data.code === 1) {
+        resolve(res.data.data)
+      } else {
+        reject()
+      }
+    }).catch(err => {
+      reject(err)
+    })
+  })
+}
diff --git a/project-web/src/utils/changeColor.js b/project-web/src/utils/changeColor.js
new file mode 100644
index 0000000..6fd3e4f
--- /dev/null
+++ b/project-web/src/utils/changeColor.js
@@ -0,0 +1,8 @@
+function searchInfo(str, selStr,color) {
+  color=color||'#F3595A'
+  //str涓鸿鏀瑰彉棰滆壊鐨勫瓧绗︼紙浼犲叆鐨勫弬鏁帮級
+  //selStr鏄寚瀹氱殑瀛楃涓�
+  let res = new RegExp('(' + str + ')', 'g');
+  return selStr.replace(res, `<span style='color:${color}'>${str}</span>`);
+}
+export default searchInfo;
diff --git a/project-web/src/utils/clipboard.js b/project-web/src/utils/clipboard.js
new file mode 100644
index 0000000..22c16c7
--- /dev/null
+++ b/project-web/src/utils/clipboard.js
@@ -0,0 +1,42 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import Vue from 'vue';
+import Clipboard from 'clipboard';
+
+function clipboardSuccess() {
+  Vue.prototype.$message({
+    message: 'Copy successfully',
+    type: 'success',
+    duration: 1500,
+  });
+}
+
+function clipboardError() {
+  Vue.prototype.$message({
+    message: 'Copy failed',
+    type: 'error',
+  });
+}
+
+export default function handleClipboard(text, event) {
+  const clipboard = new Clipboard(event.target, {
+    text: () => text,
+  });
+  clipboard.on('success', () => {
+    clipboardSuccess();
+    clipboard.destroy();
+  });
+  clipboard.on('error', () => {
+    clipboardError();
+    clipboard.destroy();
+  });
+  clipboard.onClick(event);
+}
diff --git a/project-web/src/utils/constants.js b/project-web/src/utils/constants.js
new file mode 100644
index 0000000..7a2a246
--- /dev/null
+++ b/project-web/src/utils/constants.js
@@ -0,0 +1,144 @@
+/*
+/ 鍏ㄥ眬闈欐�佸彉閲忓畾涔�
+鍒囧嬁闅忔剰淇敼鏁扮粍娆″簭锛屽緢澶氬湴鏂瑰凡涓嬫爣鏂瑰紡浣跨敤
+ */
+
+export const page = {
+  limit: [10, 20, 40, 60, 80, 100],
+  page: 1,
+  layout: 'total, sizes, prev, pager, next, jumper',
+};
+
+/**
+ * 鏃犻檺鏋佸垎绫籺ype
+ * @type {{product: number, attachment: number, menu: number, article: number, operator: number}}
+ */
+export const categoryType = [
+  // 1 浜у搧鍒嗙被锛�2 鏂囩珷鍒嗙被 3 闄勪欢鍒嗙被锛� 4 璁剧疆鍒嗙被锛� 5 鑿滃崟鍒嗙被锛� 6 閰嶇疆鍒嗙被锛� 7 绉掓潃閰嶇疆
+  { name: '浜у搧鍒嗙被', value: 1, shortName: '浜у搧' },
+  { name: '鏂囩珷鍒嗙被', value: 2, shortName: '鏂囩珷' },
+  { name: '闄勪欢鍒嗙被', value: 3, shortName: '闄勪欢' },
+  { name: '璁剧疆鍒嗙被', value: 4, shortName: '璁剧疆' },
+  { name: '鑿滃崟鍒嗙被', value: 5, shortName: '鑿滃崟' },
+  { name: '閰嶇疆鍒嗙被', value: 6, shortName: '閰嶇疆' },
+  { name: '绉掓潃閰嶇疆', value: 7, shortName: '绉掓潃' },
+];
+
+export const roleListStatus = [
+  { label: '鍏ㄩ儴', value: '' },
+  { label: '鏄剧ず', value: 1 },
+  { label: '涓嶆樉绀�', value: 0 },
+];
+
+export const showHiddenStatus = [
+  { label: '鏄剧ず', value: '鈥�1鈥�' },
+  { label: '涓嶆樉绀�', value: '鈥�0鈥�' },
+];
+
+export const switchStatus = [
+  { label: '寮�鍚�', value: 1 },
+  { label: '鍏抽棴', value: 0 },
+];
+
+export const deletedOrNormal = [
+  { label: '姝e父', value: 0 },
+  { label: '宸插垹闄�', value: 1 },
+];
+
+// 2023-05-23
+export const normalOrDisabled = [
+  { label: '姝e父', value: 0 },
+  { label: '绂佺敤', value: 1 },
+];
+export const sysOrgType = [
+  { label: '闆嗗洟 (椤剁骇鍗曚綅)', value: 0 },
+  { label: '鍏徃 (浜岀骇鍗曚綅)', value: 1 },
+  { label: '宸ュ巶 (涓夌骇鍗曚綅)', value: 2 },
+  { label: '鍒嗗巶 (鍥涚骇鍗曚綅)', value: 3 },
+  { label: '閮ㄩ棬 (鎸傚埌浠绘剰鍗曚綅)', value: 9 },
+];
+export const sex = [
+  { label: '鐢�', value: 0 },
+  { label: '濂�', value: 1 },
+];
+export const statusOptions = [
+  { value: 'M', label: '鐩綍' },
+  { value: 'C', label: '鑿滃崟' },
+  { value: 'A', label: '鎸夐挳' },
+];
+export const showStatus = [
+  { label: '鏄剧ず', value: 1 },
+  { label: '闅愯棌', value: 0 },
+];
+
+/**
+ * 鏆傛椂寮冪敤
+ * @type {*[]}
+ */
+export const configCategory = [
+  { label: '绯荤粺', value: '0' },
+  { label: '搴旂敤', value: '1' },
+  { label: '鏀粯', value: '2' },
+  { label: '鍏朵粬', value: '3' },
+];
+
+/**
+ * 琛ㄥ崟閰嶇疆闆嗗悎闆嗕腑閰嶇疆
+ * @type {{id: number, dis: string}[]}
+ */
+export const formConfigIds = [
+  { id: 84, dis: '寰俊鍏紬鍙疯〃鍗曢厤缃�' },
+  { id: 86, dis: '绉掓潃閰嶇疆' },
+];
+
+/**
+ * 鏃堕棿閫夋嫨鍣�
+ */
+export const fromList = {
+  title: '閫夋嫨鏃堕棿',
+  custom: true,
+  fromTxt: [
+    { text: '鍏ㄩ儴', val: '' },
+    { text: '浠婂ぉ', val: 'today' },
+    { text: '鏄ㄥぉ', val: 'yesterday' },
+    { text: '鏈�杩�7澶�', val: 'lately7' },
+    { text: '鏈�杩�30澶�', val: 'lately30' },
+    { text: '鏈湀', val: 'month' },
+    { text: '鏈勾', val: 'year' },
+  ],
+};
+
+/**
+ * 缁熻绠$悊鏃堕棿閫夋嫨鍣�
+ */
+export const timeList = {
+  title: '閫夋嫨鏃堕棿',
+  custom: true,
+  fromTxt: [
+    { text: '鏄ㄥぉ', val: `` },
+    { text: '鏈�杩�7澶�', val: 'lately7' },
+    { text: '鏈�杩�30澶�', val: 'lately30' },
+  ],
+};
+
+/**
+ * 鍟嗘埛瀹℃牳鐘舵��
+ */
+export const statusList = {
+  title: '鐘舵��',
+  custom: true,
+  fromTxt: [
+    { text: '鍏ㄩ儴', val: '' },
+    { text: '寰呭鏍�', val: '1' },
+    { text: '瀹℃牳閫氳繃', val: '2' },
+    { text: '瀹℃牳鎷掔粷', val: '3' },
+  ],
+};
+
+/**
+ *  鏁板�艰寖鍥�
+ */
+export const NUM_Range = {
+  min: 1,
+  max: 9999,
+};
diff --git a/project-web/src/utils/error-log.js b/project-web/src/utils/error-log.js
new file mode 100644
index 0000000..3a04713
--- /dev/null
+++ b/project-web/src/utils/error-log.js
@@ -0,0 +1,44 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import Vue from 'vue';
+import store from '@/store';
+import { isString, isArray } from '@/utils/validate';
+import settings from '@/settings';
+
+// you can set in settings.js
+// errorLog:'production' | ['production', 'development']
+const { errorLog: needErrorLog } = settings;
+
+function checkNeed() {
+  const env = process.env.NODE_ENV;
+  if (isString(needErrorLog)) {
+    return env === needErrorLog;
+  }
+  if (isArray(needErrorLog)) {
+    return needErrorLog.includes(env);
+  }
+  return false;
+}
+
+if (checkNeed()) {
+  Vue.config.errorHandler = function (err, vm, info) {
+    // Don't ask me why I use Vue.nextTick, it just a hack.
+    // detail see https://forum.vuejs.org/t/dispatch-in-vue-config-errorhandler-has-some-problem/23500
+    Vue.nextTick(() => {
+      store.dispatch('errorLog/addErrorLog', {
+        err,
+        vm,
+        info,
+        url: window.location.href,
+      });
+    });
+  };
+}
diff --git a/project-web/src/utils/errorCode.js b/project-web/src/utils/errorCode.js
new file mode 100644
index 0000000..d2111ee
--- /dev/null
+++ b/project-web/src/utils/errorCode.js
@@ -0,0 +1,6 @@
+export default {
+  '401': '璁よ瘉澶辫触锛屾棤娉曡闂郴缁熻祫婧�',
+  '403': '褰撳墠鎿嶄綔娌℃湁鏉冮檺',
+  '404': '璁块棶璧勬簮涓嶅瓨鍦�',
+  'default': '绯荤粺鏈煡閿欒锛岃鍙嶉缁欑鐞嗗憳'
+}
diff --git a/project-web/src/utils/eventBus.js b/project-web/src/utils/eventBus.js
new file mode 100644
index 0000000..b0230b5
--- /dev/null
+++ b/project-web/src/utils/eventBus.js
@@ -0,0 +1,2 @@
+import Vue from 'vue'
+export default new Vue()
diff --git a/project-web/src/utils/exportExcel.js b/project-web/src/utils/exportExcel.js
new file mode 100644
index 0000000..761a31f
--- /dev/null
+++ b/project-web/src/utils/exportExcel.js
@@ -0,0 +1,19 @@
+import FileSaver from 'file-saver';
+import * as XLSX from 'xlsx'
+export default {
+  // 瀵煎嚭Excel琛ㄦ牸
+  exportExcel(excelName, tableName) {
+    //excelName琛ㄧず鐢熸垚excel鐨勬枃浠跺悕     tableName琛ㄧず琛ㄦ牸鐨刬d
+    let tables = document.querySelector(tableName).cloneNode(true) // 閲嶇偣
+    tables.removeChild(tables.querySelector(".el-table__fixed")) // 閲嶇偣
+    var wb = XLSX.utils.table_to_book(tables,{raw:true})
+    var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' })
+    try {
+      FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), excelName)
+    } catch (e) {
+      if (typeof console !== 'undefined') console.log(e, wbout)
+    }
+    return wbout
+  }
+}
+
diff --git a/project-web/src/utils/get-page-title.js b/project-web/src/utils/get-page-title.js
new file mode 100644
index 0000000..ea3eb75
--- /dev/null
+++ b/project-web/src/utils/get-page-title.js
@@ -0,0 +1,20 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import defaultSettings from '@/settings';
+
+const title = defaultSettings.title || 'Vue Element Admin';
+
+export default function getPageTitle(pageTitle) {
+  if (pageTitle) {
+    return `${pageTitle} - ${title}`;
+  }
+  return `${title}`;
+}
diff --git a/project-web/src/utils/index.js b/project-web/src/utils/index.js
new file mode 100644
index 0000000..fede7c7
--- /dev/null
+++ b/project-web/src/utils/index.js
@@ -0,0 +1,407 @@
+
+import Cookies from 'js-cookie';
+/**
+ * Created by PanJiaChen on 16/11/18.
+ */
+/**
+ * Parse the time to string
+ * @param {(Object|string|number)} date
+ * @param {string} fmt
+ * @returns {string | null}
+ */
+export function formatDates(date, fmt) {
+  if (/(y+)/.test(fmt)) {
+    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
+  }
+  let o = {
+    'M+': date.getMonth() + 1,
+    'd+': date.getDate(),
+    'h+': date.getHours(),
+    'm+': date.getMinutes(),
+    's+': date.getSeconds(),
+  };
+  for (let k in o) {
+    if (new RegExp(`(${k})`).test(fmt)) {
+      let str = o[k] + '';
+      fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : padLeftZero(str));
+    }
+  }
+  return fmt;
+}
+function padLeftZero(str) {
+  return ('00' + str).substr(str.length);
+}
+
+/**
+ * 鏇存敼鏃堕棿鏍煎紡鎴�2010-01-10鏍煎紡
+ * @param {(Object|string|number)} time
+ * @param {string} cFormat
+ * @returns {string | null}
+ */
+export function parseTime(time, cFormat) {
+  if (arguments.length === 0) {
+    return null;
+  }
+  const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}';
+  let date;
+  if (typeof time === 'object') {
+    date = time;
+  } else {
+    if (typeof time === 'string') {
+      if (/^[0-9]+$/.test(time)) {
+        time = parseInt(time);
+      } else {
+        time = time.replace(new RegExp(/-/gm), '/');
+      }
+    }
+    if (typeof time === 'number' && time.toString().length === 10) {
+      time = time * 1000;
+    }
+    date = new Date(time);
+  }
+  const formatObj = {
+    y: date.getFullYear(),
+    m: date.getMonth() + 1,
+    d: date.getDate(),
+    h: date.getHours(),
+    i: date.getMinutes(),
+    s: date.getSeconds(),
+    a: date.getDay(),
+  };
+  const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
+    const value = formatObj[key];
+    // Note: getDay() returns 0 on Sunday
+    if (key === 'a') {
+      return ['鏃�', '涓�', '浜�', '涓�', '鍥�', '浜�', '鍏�'][value];
+    }
+    return value.toString().padStart(2, '0');
+  });
+  return time_str;
+}
+
+/**
+ * @param {number} time
+ * @param {string} option
+ * @returns {string}
+ */
+export function formatTime(time, option) {
+  if (('' + time).length === 10) {
+    time = parseInt(time) * 1000;
+  } else {
+    time = +time;
+  }
+  const d = new Date(time);
+  const now = Date.now();
+
+  const diff = (now - d) / 1000;
+
+  if (diff < 30) {
+    return '鍒氬垰';
+  } else if (diff < 3600) {
+    // less 1 hour
+    return Math.ceil(diff / 60) + '鍒嗛挓鍓�';
+  } else if (diff < 3600 * 24) {
+    return Math.ceil(diff / 3600) + '灏忔椂鍓�';
+  } else if (diff < 3600 * 24 * 2) {
+    return '1澶╁墠';
+  }
+  if (option) {
+    return parseTime(time, option);
+  } else {
+    return d.getMonth() + 1 + '鏈�' + d.getDate() + '鏃�' + d.getHours() + '鏃�' + d.getMinutes() + '鍒�';
+  }
+}
+
+/**
+ * @param {string} url
+ * @returns {Object}
+ */
+export function getQueryObject(url) {
+  url = url == null ? window.location.href : url;
+  const search = url.substring(url.lastIndexOf('?') + 1);
+  const obj = {};
+  const reg = /([^?&=]+)=([^?&=]*)/g;
+  search.replace(reg, (rs, $1, $2) => {
+    const name = decodeURIComponent($1);
+    let val = decodeURIComponent($2);
+    val = String(val);
+    obj[name] = val;
+    return rs;
+  });
+  return obj;
+}
+
+/**
+ * @param {string} input value
+ * @returns {number} output value
+ */
+export function byteLength(str) {
+  // returns the byte length of an utf8 string
+  let s = str.length;
+  for (var i = str.length - 1; i >= 0; i--) {
+    const code = str.charCodeAt(i);
+    if (code > 0x7f && code <= 0x7ff) s++;
+    else if (code > 0x7ff && code <= 0xffff) s += 2;
+    if (code >= 0xdc00 && code <= 0xdfff) i--;
+  }
+  return s;
+}
+
+/**
+ * @param {Array} actual
+ * @returns {Array}
+ */
+export function cleanArray(actual) {
+  const newArray = [];
+  for (let i = 0; i < actual.length; i++) {
+    if (actual[i]) {
+      newArray.push(actual[i]);
+    }
+  }
+  return newArray;
+}
+
+/**
+ * @param {Object} json
+ * @returns {Array}
+ */
+export function param(json) {
+  if (!json) return '';
+  return cleanArray(
+    Object.keys(json).map((key) => {
+      if (json[key] === undefined) return '';
+      return encodeURIComponent(key) + '=' + encodeURIComponent(json[key]);
+    }),
+  ).join('&');
+}
+
+/**
+ * @param {string} url
+ * @returns {Object}
+ */
+export function param2Obj(url) {
+  const search = url.split('?')[1];
+  if (!search) {
+    return {};
+  }
+  return JSON.parse(
+    '{"' +
+      decodeURIComponent(search).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g, '":"').replace(/\+/g, ' ') +
+      '"}',
+  );
+}
+
+/**
+ * @param {string} val
+ * @returns {string}
+ */
+export function html2Text(val) {
+  const div = document.createElement('div');
+  div.innerHTML = val;
+  return div.textContent || div.innerText;
+}
+
+/**
+ * Merges two objects, giving the last one precedence
+ * @param {Object} target
+ * @param {(Object|Array)} source
+ * @returns {Object}
+ */
+export function objectMerge(target, source) {
+  if (typeof target !== 'object') {
+    target = {};
+  }
+  if (Array.isArray(source)) {
+    return source.slice();
+  }
+  Object.keys(source).forEach((property) => {
+    const sourceProperty = source[property];
+    if (typeof sourceProperty === 'object') {
+      target[property] = objectMerge(target[property], sourceProperty);
+    } else {
+      target[property] = sourceProperty;
+    }
+  });
+  return target;
+}
+
+/**
+ * @param {HTMLElement} element
+ * @param {string} className
+ */
+export function toggleClass(element, className) {
+  if (!element || !className) {
+    return;
+  }
+  let classString = element.className;
+  const nameIndex = classString.indexOf(className);
+  if (nameIndex === -1) {
+    classString += '' + className;
+  } else {
+    classString = classString.substr(0, nameIndex) + classString.substr(nameIndex + className.length);
+  }
+  element.className = classString;
+}
+
+/**
+ * @param {string} type
+ * @returns {Date}
+ */
+export function getTime(type) {
+  if (type === 'start') {
+    return new Date().getTime() - 3600 * 1000 * 24 * 90;
+  } else {
+    return new Date(new Date().toDateString());
+  }
+}
+
+/**
+ * @param {Function} func
+ * @param {number} wait
+ * @param {boolean} immediate
+ * @return {*}
+ */
+export function debounce(func, wait, immediate) {
+  let timeout, args, context, timestamp, result;
+
+  const later = function () {
+    // 鎹笂涓�娆¤Е鍙戞椂闂撮棿闅�
+    const last = +new Date() - timestamp;
+
+    // 涓婃琚寘瑁呭嚱鏁拌璋冪敤鏃堕棿闂撮殧 last 灏忎簬璁惧畾鏃堕棿闂撮殧 wait
+    if (last < wait && last > 0) {
+      timeout = setTimeout(later, wait - last);
+    } else {
+      timeout = null;
+      // 濡傛灉璁惧畾涓篿mmediate===true锛屽洜涓哄紑濮嬭竟鐣屽凡缁忚皟鐢ㄨ繃浜嗘澶勬棤闇�璋冪敤
+      if (!immediate) {
+        result = func.apply(context, args);
+        if (!timeout) context = args = null;
+      }
+    }
+  };
+
+  return function (...args) {
+    context = this;
+    timestamp = +new Date();
+    const callNow = immediate && !timeout;
+    // 濡傛灉寤舵椂涓嶅瓨鍦紝閲嶆柊璁惧畾寤舵椂
+    if (!timeout) timeout = setTimeout(later, wait);
+    if (callNow) {
+      result = func.apply(context, args);
+      context = args = null;
+    }
+
+    return result;
+  };
+}
+
+/**
+ * This is just a simple version of deep copy
+ * Has a lot of edge cases bug
+ * If you want to use a perfect deep copy, use lodash's _.cloneDeep
+ * @param {Object} source
+ * @returns {Object}
+ */
+export function deepClone(source) {
+  if (!source && typeof source !== 'object') {
+    throw new Error('error arguments', 'deepClone');
+  }
+  const targetObj = source.constructor === Array ? [] : {};
+  Object.keys(source).forEach((keys) => {
+    if (source[keys] && typeof source[keys] === 'object') {
+      targetObj[keys] = deepClone(source[keys]);
+    } else {
+      targetObj[keys] = source[keys];
+    }
+  });
+  return targetObj;
+}
+
+/**
+ * @param {Array} arr
+ * @returns {Array}
+ */
+export function uniqueArr(arr) {
+  return Array.from(new Set(arr));
+}
+
+/**
+ * @returns {string}
+ */
+export function createUniqueString() {
+  const timestamp = +new Date() + '';
+  const randomNum = parseInt((1 + Math.random()) * 65536) + '';
+  return (+(randomNum + timestamp)).toString(32);
+}
+
+/**
+ * Check if an element has a class
+ * @param {HTMLElement} elm
+ * @param {string} cls
+ * @returns {boolean}
+ */
+export function hasClass(ele, cls) {
+  return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
+}
+
+/**
+ * Add class to element
+ * @param {HTMLElement} elm
+ * @param {string} cls
+ */
+export function addClass(ele, cls) {
+  if (!hasClass(ele, cls)) ele.className += ' ' + cls;
+}
+
+/**
+ * Remove class from element
+ * @param {HTMLElement} elm
+ * @param {string} cls
+ */
+export function removeClass(ele, cls) {
+  if (hasClass(ele, cls)) {
+    const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
+    ele.className = ele.className.replace(reg, ' ');
+  }
+}
+
+/**
+ * 鍒ゆ柇鍦板潃
+ */
+export function parseQuery() {
+  const res = {};
+
+  const query = (location.href.split('?')[1] || '').trim().replace(/^(\?|#|&)/, '');
+
+  if (!query) {
+    return res;
+  }
+
+  query.split('&').forEach((param) => {
+    const parts = param.replace(/\+/g, ' ').split('=');
+    const key = decodeURIComponent(parts.shift());
+    const val = parts.length > 0 ? decodeURIComponent(parts.join('=')) : null;
+
+    if (res[key] === undefined) {
+      res[key] = val;
+    } else if (Array.isArray(res[key])) {
+      res[key].push(val);
+    } else {
+      res[key] = [res[key], val];
+    }
+  });
+
+  return res;
+}
+
+/**
+ * 鏄惁鏄牳閿�鍛�
+ */
+export function isWriteOff() {
+  if (localStorage.getItem('storeStaffList')) {
+    let JavaInfo = JSON.parse(Cookies.get('JavaInfo'));
+    let staff = JSON.parse(localStorage.getItem('storeStaffList'));
+    return staff.some((item) => item.avatar === JavaInfo.account);
+  }
+}
diff --git a/project-web/src/utils/jsencrypt.js b/project-web/src/utils/jsencrypt.js
new file mode 100644
index 0000000..de326bb
--- /dev/null
+++ b/project-web/src/utils/jsencrypt.js
@@ -0,0 +1,33 @@
+import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'
+
+// 瀵嗛挜瀵圭敓鎴� http://web.chacuo.net/netrsakeypair
+
+const publicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDffJ9KczIXi+nsa2Sib3rLnZ5R\n' +
+  'yhlY5enEhZTQc1GcTeZb6gqu4HoDJV6lskfexSNCUC/3mmNj2nruWGgRg6iVCAMB\n' +
+  'Uf5oMv5nVqIhZ5davy1UZ9yvwL0+yVhBSXmamUmezQlh0H3clUI1N3Hc9aCiulB6\n' +
+  'RMIsv1aukBkTBhgQZQIDAQAB'
+
+// 鏆備笉闇�瑕佺閽ヨВ瀵嗘湇鍔$鏁版嵁銆�2023-05-12
+const privateKey = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\n' +
+  '7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN\n' +
+  'PuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA\n' +
+  'kM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow\n' +
+  'cSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv\n' +
+  'DQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh\n' +
+  'YhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3\n' +
+  'UP8iWi1Qw0Y='
+
+// 鍔犲瘑
+export function encrypt(txt) {
+  const encryptor = new JSEncrypt()
+  encryptor.setPublicKey(publicKey) // 璁剧疆鍏挜
+  return encryptor.encrypt(txt) // 瀵规暟鎹繘琛屽姞瀵�
+}
+
+// 瑙e瘑
+export function decrypt(txt) {
+  const encryptor = new JSEncrypt()
+  encryptor.setPrivateKey(privateKey) // 璁剧疆绉侀挜
+  return encryptor.decrypt(txt) // 瀵规暟鎹繘琛岃В瀵�
+}
+
diff --git a/project-web/src/utils/newToExcel.js b/project-web/src/utils/newToExcel.js
new file mode 100644
index 0000000..79bbb8d
--- /dev/null
+++ b/project-web/src/utils/newToExcel.js
@@ -0,0 +1,30 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+import { export_json_to_excel } from '../vendor/Export1Excel';
+
+/**
+ * @method exportExcel
+ * @param {Array} header   琛ㄥご
+ * @param {Array} filterVal 琛ㄥご灞炴�у瓧娈�
+ * @param {String} filename 鏂囦欢鍚嶇О
+ * @param {Array} tableData 鍒楄〃鏁版嵁
+ **/
+export default function exportExcel(header, filterVal, filename, tableData) {
+  var data = formatJson(filterVal, tableData);
+  export_json_to_excel(header, data, filename);
+}
+
+function formatJson(filterVal, tableData) {
+  return tableData.map((v) => {
+    return filterVal.map((j) => {
+      return v[j];
+    });
+  });
+}
diff --git a/project-web/src/utils/open-window.js b/project-web/src/utils/open-window.js
new file mode 100644
index 0000000..eeff8c5
--- /dev/null
+++ b/project-web/src/utils/open-window.js
@@ -0,0 +1,53 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+/**
+ *Created by PanJiaChen on 16/11/29.
+ * @param {Sting} url
+ * @param {Sting} title
+ * @param {Number} w
+ * @param {Number} h
+ */
+export default function openWindow(url, title, w, h) {
+  // Fixes dual-screen position                            Most browsers       Firefox
+  const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : screen.left;
+  const dualScreenTop = window.screenTop !== undefined ? window.screenTop : screen.top;
+
+  const width = window.innerWidth
+    ? window.innerWidth
+    : document.documentElement.clientWidth
+    ? document.documentElement.clientWidth
+    : screen.width;
+  const height = window.innerHeight
+    ? window.innerHeight
+    : document.documentElement.clientHeight
+    ? document.documentElement.clientHeight
+    : screen.height;
+
+  const left = width / 2 - w / 2 + dualScreenLeft;
+  const top = height / 2 - h / 2 + dualScreenTop;
+  const newWindow = window.open(
+    url,
+    title,
+    'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=yes, copyhistory=no, width=' +
+      w +
+      ', height=' +
+      h +
+      ', top=' +
+      top +
+      ', left=' +
+      left,
+  );
+
+  // Puts focus on the newWindow
+  if (window.focus) {
+    newWindow.focus();
+  }
+}
diff --git a/project-web/src/utils/parsing.js b/project-web/src/utils/parsing.js
new file mode 100644
index 0000000..d742ae1
--- /dev/null
+++ b/project-web/src/utils/parsing.js
@@ -0,0 +1,280 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+/**
+ * 閫氱敤js鏂规硶灏佽澶勭悊
+ * Copyright (c) 2019 ruoyi
+ */
+
+// 鏃ユ湡鏍煎紡鍖�
+export function parseTime(time, pattern) {
+  if (arguments.length === 0 || !time) {
+    return null;
+  }
+  const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}';
+  let date;
+  if (typeof time === 'object') {
+    date = time;
+  } else {
+    if (typeof time === 'string' && /^[0-9]+$/.test(time)) {
+      time = parseInt(time);
+    } else if (typeof time === 'string') {
+      time = time
+        .replace(new RegExp(/-/gm), '/')
+        .replace('T', ' ')
+        .replace(new RegExp(/\.[\d]{3}/gm), '');
+    }
+    if (typeof time === 'number' && time.toString().length === 10) {
+      time = time * 1000;
+    }
+    date = new Date(time);
+  }
+  const formatObj = {
+    y: date.getFullYear(),
+    m: date.getMonth() + 1,
+    d: date.getDate(),
+    h: date.getHours(),
+    i: date.getMinutes(),
+    s: date.getSeconds(),
+    a: date.getDay(),
+  };
+  const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
+    let value = formatObj[key];
+    // Note: getDay() returns 0 on Sunday
+    if (key === 'a') {
+      return ['鏃�', '涓�', '浜�', '涓�', '鍥�', '浜�', '鍏�'][value];
+    }
+    if (result.length > 0 && value < 10) {
+      value = '0' + value;
+    }
+    return value || 0;
+  });
+  return time_str;
+}
+
+/**
+ * @Description 闀挎暣鏁拌浆鎹负鏃堕棿灞曠ず
+ * @Author wh
+ * @Date 2023/7/17 13:48
+ */
+export function LongToDateTime(val){
+  if(val == null || val == undefined || val == '' || val == 'null' || val == 'undefined'){
+    return true;
+  }
+  var temp = val.toString()
+  // 骞�
+  var y = temp.slice(0, 4);
+  // 鏈�
+  var m = temp.slice(4, 6);
+  // 鏃�
+  var d = temp.slice(6, 8);
+  // 鏃�
+  var hh = temp.slice(8, 10);
+  // 鍒�
+  var mm = temp.slice(10, 12);
+  // 绉�
+  var ss = temp.slice(12, 14);
+  var result = y + '-' + m + '-' + d + ' ' + hh + ':' + mm + ':' + ss
+  return result;
+}
+
+/**
+ * @Description 鏃堕棿杞崲涓簂ong
+ * @Author wh
+ * @Date 2023/7/17 13:49
+ */
+export function DateToLong(val){
+  if(val == null || val == undefined || val == '' || val == 'null' || val == 'undefined'){
+    return true;
+  }
+  //  .replace(/ 杩欓噷濉鍖归厤鐨勫唴瀹�/g,'杩欓噷鏄鏇挎崲涓虹殑鍐呭'锛�
+  /*
+  1. 鏇挎崲-
+  2. 鏇挎崲:
+  3. 鏇挎崲绌烘牸
+   */
+  var temp = val.toString().replace(/\s/g, '').replace(/-/g, '').replace(/:/g, '')
+  return temp;
+}
+
+// 琛ㄥ崟閲嶇疆
+export function resetForm(refName) {
+  if (this.$refs[refName]) {
+    this.$refs[refName].resetFields();
+  }
+}
+
+// 娣诲姞鏃ユ湡鑼冨洿
+export function addDateRange(params, dateRange, propName) {
+  let search = params;
+  search.params =
+    typeof search.params === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {};
+  dateRange = Array.isArray(dateRange) ? dateRange : [];
+  if (typeof propName === 'undefined') {
+    search.params['beginTime'] = dateRange[0];
+    search.params['endTime'] = dateRange[1];
+  } else {
+    search.params['begin' + propName] = dateRange[0];
+    search.params['end' + propName] = dateRange[1];
+  }
+  return search;
+}
+
+// 瀛楃涓叉牸寮忓寲(%s )
+export function sprintf(str) {
+  var args = arguments,
+    flag = true,
+    i = 1;
+  str = str.replace(/%s/g, function () {
+    var arg = args[i++];
+    if (typeof arg === 'undefined') {
+      flag = false;
+      return '';
+    }
+    return arg;
+  });
+  return flag ? str : '';
+}
+
+// 杞崲瀛楃涓诧紝undefined,null绛夎浆鍖栦负""
+export function praseStrEmpty(str) {
+  if (!str || str == 'undefined' || str == 'null') {
+    return '';
+  }
+  return str;
+}
+
+// 鏁版嵁鍚堝苟
+export function mergeRecursive(source, target) {
+  for (var p in target) {
+    try {
+      if (target[p].constructor == Object) {
+        source[p] = mergeRecursive(source[p], target[p]);
+      } else {
+        source[p] = target[p];
+      }
+    } catch (e) {
+      source[p] = target[p];
+    }
+  }
+  return source;
+}
+
+/**
+ * 鏋勯�犳爲鍨嬬粨鏋勬暟鎹�
+ * @param {*} data 鏁版嵁婧�
+ * @param {*} id id瀛楁 榛樿 'id'
+ * @param {*} parentId 鐖惰妭鐐瑰瓧娈� 榛樿 'parentId'
+ * @param {*} children 瀛╁瓙鑺傜偣瀛楁 榛樿 'children'
+ */
+export function handleTree(data, id, parentId, children) {
+  let config = {
+    id: id || 'id',
+    parentId: parentId || 'parentId',
+    childrenList: children || 'children',
+  };
+
+  var childrenListMap = {};
+  var nodeIds = {};
+  var tree = [];
+
+  for (let d of data) {
+    let parentId = d[config.parentId];
+    if (childrenListMap[parentId] == null) {
+      childrenListMap[parentId] = [];
+    }
+    nodeIds[d[config.id]] = d;
+    childrenListMap[parentId].push(d);
+  }
+
+  for (let d of data) {
+    let parentId = d[config.parentId];
+    if (nodeIds[parentId] == null) {
+      tree.push(d);
+    }
+  }
+
+  for (let t of tree) {
+    adaptToChildrenList(t);
+  }
+
+  function adaptToChildrenList(o) {
+    if (childrenListMap[o[config.id]] !== null) {
+      o[config.childrenList] = childrenListMap[o[config.id]];
+    }
+    if (o[config.childrenList]) {
+      for (let c of o[config.childrenList]) {
+        adaptToChildrenList(c);
+      }
+    }
+  }
+  return tree;
+}
+
+/**
+ * 璺敱鏁版嵁閬嶅巻
+ *
+ */
+export function formatRoutes(routerArr) {
+  let arr = [],
+    obj = {};
+  routerArr.forEach((tmp) => {
+    obj = {
+      id: tmp.id,
+      pid: tmp.pid,
+      name: tmp.name,
+      url: tmp.component,
+      path: '/' + tmp.pid + '/',
+      perms: tmp.perms,
+      child: tmp.childList.length
+        ? tmp.childList.map((item) => {
+            return {
+              id: item.id,
+              pid: item.pid,
+              name: item.name,
+              url: item.component,
+              path: '/' + tmp.pid + '/' + item.pid + '/',
+              perms: item.perms,
+              extra: item.icon,
+              child: item.childList.length
+                ? item.childList.map((item1) => {
+                    return {
+                      id: item1.id,
+                      pid: item1.pid,
+                      name: item1.name,
+                      url: item1.component,
+                      path: '/' + tmp.pid + '/' + item.pid + '/' + item1.pid + '/',
+                      perms: item1.perms,
+                      extra: item1.icon,
+                      child: item1.childList.length
+                        ? item1.childList.map((item2) => {
+                            return {
+                              id: item2.id,
+                              pid: item2.pid,
+                              name: item2.name,
+                              url: item2.component,
+                              path: '/' + tmp.pid + '/' + item.pid + '/' + item1.pid + '/' + item2.pid + '/',
+                              perms: item2.perms,
+                              extra: item2.icon,
+                            };
+                          })
+                        : [],
+                    };
+                  })
+                : [],
+            };
+          })
+        : [],
+      extra: tmp.icon,
+    };
+    arr.push(obj);
+  });
+  return arr;
+}
diff --git a/project-web/src/utils/permission.js b/project-web/src/utils/permission.js
new file mode 100644
index 0000000..24b1b63
--- /dev/null
+++ b/project-web/src/utils/permission.js
@@ -0,0 +1,61 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+import store from '@/store';
+
+/**
+ * 瀛楃鏉冮檺鏍¢獙
+ * @param {Array} value 鏍¢獙鍊�
+ * @returns {Boolean}
+ */
+export function checkPermi(value) {
+  if (value && value instanceof Array && value.length > 0) {
+    const permissions = store.getters && store.getters.permissions;
+    const permissionDatas = value;
+    const all_permission = '*:*:*';
+
+    const hasPermission = permissions.some((permission) => {
+      return all_permission === permission || permissionDatas.includes(permission);
+    });
+
+    if (!hasPermission) {
+      return false;
+    }
+    return true;
+  } else {
+    console.error(`need roles! Like checkPermi="['system:user:add','system:user:edit']"`);
+    return false;
+  }
+}
+
+/**
+ * 瑙掕壊鏉冮檺鏍¢獙
+ * @param {Array} value 鏍¢獙鍊�
+ * @returns {Boolean}
+ */
+export function checkRole(value) {
+  if (value && value instanceof Array && value.length > 0) {
+    const roles = store.getters && store.getters.roles;
+    const permissionRoles = value;
+    const super_admin = 'admin';
+
+    const hasRole = roles.some((role) => {
+      return super_admin === role || permissionRoles.includes(role);
+    });
+
+    if (!hasRole) {
+      return false;
+    }
+    return true;
+  } else {
+    console.error(`need roles! Like checkRole="['admin','editor']"`);
+    return false;
+  }
+}
diff --git a/project-web/src/utils/print.js b/project-web/src/utils/print.js
new file mode 100644
index 0000000..8c0b08e
--- /dev/null
+++ b/project-web/src/utils/print.js
@@ -0,0 +1,125 @@
+// 鎵撳嵃绫诲睘鎬с�佹柟娉曞畾涔�
+/* eslint-disable */
+const Print = function (dom, options) {
+  if (!(this instanceof Print)) return new Print(dom, options);
+  this.options = this.extend({ noPrint: '.no-print' }, options);
+  if (typeof dom === 'string') {
+    this.dom = document.querySelector(dom);
+  } else {
+    this.isDOM(dom);
+    this.dom = this.isDOM(dom) ? dom : dom.$el;
+  }
+  this.init();
+};
+Print.prototype = {
+  init: function () {
+    var content = this.getStyle() + this.getHtml();
+    this.writeIframe(content);
+  },
+  extend: function (obj, obj2) {
+    for (var k in obj2) {
+      obj[k] = obj2[k];
+    }
+    return obj;
+  },
+  getStyle: function () {
+    var str = '',
+      styles = document.querySelectorAll('style,link');
+    for (var i = 0; i < styles.length; i++) {
+      str += styles[i].outerHTML;
+    }
+    str += '<style>' + (this.options.noPrint ? this.options.noPrint : '.no-print') + '{display:none;}</style>';
+    return str;
+  },
+  getHtml: function () {
+    var inputs = document.querySelectorAll('input');
+    var textareas = document.querySelectorAll('textarea');
+    var selects = document.querySelectorAll('select');
+    for (var k = 0; k < inputs.length; k++) {
+      if (inputs[k].type == 'checkbox' || inputs[k].type == 'radio') {
+        if (inputs[k].checked == true) {
+          inputs[k].setAttribute('checked', 'checked');
+        } else {
+          inputs[k].removeAttribute('checked');
+        }
+      } else if (inputs[k].type == 'text') {
+        inputs[k].setAttribute('value', inputs[k].value);
+      } else {
+        inputs[k].setAttribute('value', inputs[k].value);
+      }
+    }
+    for (var k2 = 0; k2 < textareas.length; k2++) {
+      if (textareas[k2].type == 'textarea') {
+        textareas[k2].innerHTML = textareas[k2].value;
+      }
+    }
+    for (var k3 = 0; k3 < selects.length; k3++) {
+      if (selects[k3].type == 'select-one') {
+        var child = selects[k3].children;
+        for (var i in child) {
+          if (child[i].tagName == 'OPTION') {
+            if (child[i].selected == true) {
+              child[i].setAttribute('selected', 'selected');
+            } else {
+              child[i].removeAttribute('selected');
+            }
+          }
+        }
+      }
+    }
+    return this.dom.outerHTML;
+  },
+  writeIframe: function (content) {
+    var w,
+      doc,
+      iframe = document.createElement('iframe'),
+      f = document.body.appendChild(iframe);
+    iframe.id = 'myIframe';
+    iframe.style = 'position:absolute;width:0;height:0;top:-10px;left:-10px;';
+    iframe.setAttribute('style', 'position:absolute;width:0;height:0;top:-10px;left:-10px;');
+    w = f.contentWindow || f.contentDocument;
+    doc = f.contentDocument || f.contentWindow.document;
+    doc.open();
+    doc.write(content);
+    doc.close();
+    let _this=this
+    iframe.onload = function () {
+      _this.toPrint(w);
+
+      setTimeout(function () {
+        document.body.removeChild(iframe);
+      }, 100);
+    };
+  },
+  toPrint: function (frameWindow) {
+    try {
+      setTimeout(function () {
+        frameWindow.focus();
+        try {
+          if (!frameWindow.document.execCommand('print', false, null)) {
+            frameWindow.print();
+          }
+        } catch (e) {
+          frameWindow.print();
+        }
+        frameWindow.close();
+      }, 10);
+    } catch (err) {
+      console.log('err', err);
+    }
+  },
+  isDOM:
+    typeof HTMLElement === 'object'
+      ? function (obj) {
+          return obj instanceof HTMLElement;
+        }
+      : function (obj) {
+          return obj && typeof obj === 'object' && obj.nodeType === 1 && typeof obj.nodeName === 'string';
+        },
+};
+const MyPlugin = {};
+MyPlugin.install = function (Vue, options) {
+  // 4. 娣诲姞瀹炰緥鏂规硶
+  Vue.prototype.$print = Print;
+};
+export default MyPlugin;
diff --git a/project-web/src/utils/request.js b/project-web/src/utils/request.js
new file mode 100644
index 0000000..a843344
--- /dev/null
+++ b/project-web/src/utils/request.js
@@ -0,0 +1,169 @@
+import axios from 'axios';
+import {Message, MessageBox} from 'element-ui';
+import store from '@/store';
+import {setToken} from '@/utils/auth';
+import errorCode from '@/utils/errorCode'
+// import SettingIplatform from '@/utils/settingIplatform';
+import SettingIplatform from '../../public/static/config';
+import {isPhone} from '@/libs/wechat';
+
+// 鏄惁鏄剧ず閲嶆柊鐧诲綍
+export let isRelogin = {show: false};
+
+axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
+
+const service = axios.create({
+  baseURL: SettingIplatform.apiBaseURL,
+  timeout: 60000, // 杩囨湡鏃堕棿
+});
+
+// request interceptor
+service.interceptors.request.use(
+  (config) => {
+    // 鍙戦�佽姹備箣鍓嶅仛鐨�
+    const token = !store.getters.token ? sessionStorage.getItem('token') : store.getters.token;
+    if (token) {
+      config.headers['Authorization'] = token;
+    }
+    if (/get/i.test(config.method)) {
+      config.params = config.params || {};
+      config.params.temp = Date.parse(new Date()) / 1000;
+    }
+    return config;
+  },
+  (error) => {
+    return Promise.reject(error);
+  },
+);
+
+// response interceptor
+service.interceptors.response.use(res => {
+    if (SettingIplatform.debug) {
+      console.log('%c璇锋眰鎺ュ彛锛�', 'color: #529b2e', res.config.url)
+      if (res.config.method.toLowerCase() === 'get') {
+        console.log('%c璇锋眰鍙傛暟锛�', 'color: #529b2e', res.config.params)
+      } else {
+        try{
+          console.log('%c璇锋眰鍙傛暟锛�', 'color: #529b2e', JSON.parse(res.config.data))
+        } catch (e) {
+
+        }
+
+      }
+      console.log('%c杩斿洖缁撴灉锛�', 'color: #529b2e', res.data)
+    }
+    // 鏈缃姸鎬佺爜鍒欓粯璁ゆ垚鍔熺姸鎬�
+    // const code = res.data.code || 200;
+    // 2022-11-08 杩欓噷浣跨敤鑷繁涓氬姟瀹氫箟鐨勬垚鍔熺姸鎬佺爜:1
+    // const res = response.data;
+    let showErrMsg = res.config.showErrMsg;
+    if (showErrMsg == undefined) {
+      showErrMsg = true
+    }
+    const code = res.data.code;
+    if (res.headers.hasOwnProperty("tokenrefresh")) {
+      setToken(res.headers.tokenrefresh);
+      store.commit('user/SET_TOKEN', res.headers.tokenrefresh);
+    }
+    // 鑾峰彇閿欒淇℃伅
+    const msg = errorCode[code] || res.data.msg || errorCode['default']
+    // 浜岃繘鍒舵暟鎹垯鐩存帴杩斿洖
+    if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
+      return res.data
+    }
+    if (code === 10) {
+      // console.log("+++++++++++ token杩囨湡");
+      if (!isRelogin.show) {
+        isRelogin.show = true;
+        MessageBox.confirm('鐧诲綍鐘舵�佸凡杩囨湡锛屾偍鍙互缁х画鐣欏湪璇ラ〉闈紝鎴栬�呴噸鏂扮櫥褰�', '绯荤粺鎻愮ず', {
+            confirmButtonText: '閲嶆柊鐧诲綍',
+            cancelButtonText: '鍙栨秷',
+            type: 'warning'
+          }
+        ).then(() => {
+          isRelogin.show = false;
+          store.dispatch('user/logout').then(() => {
+            // 2023-06-07锛岄噸瀹氬悜鍒扮湅鏉块〉闈紝鍘熸潵'/index'涓�鐩存姤404
+            // location.href = '/dashboard';
+            window.location.reload()
+          })
+
+        }).catch(() => {
+          isRelogin.show = false;
+        });
+      }
+      return Promise.reject('鏃犳晥鐨勪細璇濓紝鎴栬�呬細璇濆凡杩囨湡锛岃閲嶆柊鐧诲綍銆�')
+    } else if (code === 500 && showErrMsg) {
+      Message({
+        message: msg,
+        type: 'error'
+      })
+      return Promise.reject(new Error(msg))
+    } else if (code !== 1) {
+      // 濡傛灉涓嶆槸瓒呯骇绠$悊鍛�
+      if (!(store.getters.info && store.getters.info.realName === '瓒呯骇绠$悊鐢ㄦ埛') && showErrMsg) {
+        Message({
+          message: msg,
+          type: 'error',
+          duration: 5 * 1000
+        });
+      }
+      if (isPhone()) {
+        //绉诲姩绔�
+        return Promise.reject(res || 'Error');
+      }
+      return Promise.reject('error')
+    } else {
+      // 2023-05-16锛岀粺涓�鎷︽埅鍘婚櫎瀹為檯涓氬姟鏁版嵁銆�
+      return res.data.data;
+    }
+    // if (res.code === 401) {
+    //   // to re-login
+    //   Message.error('鏃犳晥鐨勪細璇濓紝鎴栬�呯櫥褰曞凡杩囨湡锛岃閲嶆柊鐧诲綍銆�');
+    //   if (window.location.pathname !== '/login') location.href = '/login';
+    // } else if (res.code === 403) {
+    //   Message.error('娌℃湁鏉冮檺璁块棶銆�');
+    // }
+    // if (res.code !== 200 && res.code !== 401) {
+    //   if (isPhone()) {
+    //     //绉诲姩绔�
+    //     return Promise.reject(res || 'Error');
+    //   }
+    //   Message({
+    //     message: res.message || 'Error',
+    //     type: 'error',
+    //     duration: 5 * 1000,
+    //   });
+    //   return Promise.reject();
+    // } else {
+    //   return res.data;
+    // }
+  },
+  error => {
+    console.log('err' + error)
+    let {message} = error;
+    if (message == "Network Error") {
+      message = "鍚庣鎺ュ彛杩炴帴寮傚父";
+    } else if (message.includes("timeout")) {
+      message = "绯荤粺鎺ュ彛璇锋眰瓒呮椂";
+    } else if (message.includes("Request failed with status code")) {
+      message = "绯荤粺鎺ュ彛" + message.substr(message.length - 3) + "寮傚父";
+    }
+    Message({
+      message: message,
+      type: 'error',
+      duration: 5 * 1000
+    })
+    return Promise.reject(error)
+  }
+  // (error) => {
+  //   Message({
+  //     message: error.message,
+  //     type: 'error',
+  //     duration: 5 * 1000,
+  //   });
+  //   return Promise.reject(error);
+  // },
+);
+
+export default service;
diff --git a/project-web/src/utils/scroll-to.js b/project-web/src/utils/scroll-to.js
new file mode 100644
index 0000000..5cc8297
--- /dev/null
+++ b/project-web/src/utils/scroll-to.js
@@ -0,0 +1,75 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+Math.easeInOutQuad = function (t, b, c, d) {
+  t /= d / 2;
+  if (t < 1) {
+    return (c / 2) * t * t + b;
+  }
+  t--;
+  return (-c / 2) * (t * (t - 2) - 1) + b;
+};
+
+// requestAnimationFrame for Smart Animating http://goo.gl/sx5sts
+var requestAnimFrame = (function () {
+  return (
+    window.requestAnimationFrame ||
+    window.webkitRequestAnimationFrame ||
+    window.mozRequestAnimationFrame ||
+    function (callback) {
+      window.setTimeout(callback, 1000 / 60);
+    }
+  );
+})();
+
+/**
+ * Because it's so fucking difficult to detect the scrolling element, just move them all
+ * @param {number} amount
+ */
+function move(amount) {
+  document.documentElement.scrollTop = amount;
+  document.body.parentNode.scrollTop = amount;
+  document.body.scrollTop = amount;
+}
+
+function position() {
+  return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop;
+}
+
+/**
+ * @param {number} to
+ * @param {number} duration
+ * @param {Function} callback
+ */
+export function scrollTo(to, duration, callback) {
+  const start = position();
+  const change = to - start;
+  const increment = 20;
+  let currentTime = 0;
+  duration = typeof duration === 'undefined' ? 500 : duration;
+  var animateScroll = function () {
+    // increment the time
+    currentTime += increment;
+    // find the value with the quadratic in-out easing function
+    var val = Math.easeInOutQuad(currentTime, start, change, duration);
+    // move the document.body
+    move(val);
+    // do the animation unless its over
+    if (currentTime < duration) {
+      requestAnimFrame(animateScroll);
+    } else {
+      if (callback && typeof callback === 'function') {
+        // the animation is done so lets callback
+        callback();
+      }
+    }
+  };
+  animateScroll();
+}
diff --git a/project-web/src/utils/settingIplatform.js b/project-web/src/utils/settingIplatform.js
new file mode 100644
index 0000000..3743ccf
--- /dev/null
+++ b/project-web/src/utils/settingIplatform.js
@@ -0,0 +1,21 @@
+
+// 璇锋眰鎺ュ彛鍦板潃 濡傛灉娌℃湁閰嶇疆鑷姩鑾峰彇褰撳墠缃戝潃璺緞
+const VUE_APP_API_URL = process.env.VUE_APP_BASE_API || `${location.origin}`;
+const VUE_APP_WS_URL =
+  process.env.VUE_APP_WS_URL || (location.protocol === 'https' ? 'wss' : 'ws') + ':' + location.hostname;
+
+const SettingIplatform = {
+  // 鏈嶅姟鍣ㄥ湴鍧�
+  httpUrl: VUE_APP_API_URL,
+  // 涓婁紶璺緞
+  ftpUrl: 'http://172.16.60.209:8082/progress',//寮�鍙�
+  // ftpUrl:'https://jmy.jinmingyuan.com/progress',// 娴嬭瘯,
+// 鎺ュ彛璇锋眰鍦板潃
+// apiBaseURL: 'http://116.198.39.83:8082/progress', // 姝e紡
+  apiBaseURL: 'http://172.16.60.90:8082/progress',//寮�鍙�
+// apiBaseURL: 'https://jmy.jinmingyuan.com/progress',// 娴嬭瘯,
+  // socket杩炴帴
+  wsSocketUrl: VUE_APP_WS_URL,
+};
+
+export default SettingIplatform;
diff --git a/project-web/src/utils/utils.js b/project-web/src/utils/utils.js
new file mode 100644
index 0000000..c8af483
--- /dev/null
+++ b/project-web/src/utils/utils.js
@@ -0,0 +1,58 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+export default {
+  // 璁剧疆閫変腑鐨勬柟娉�
+  // 璁板繂閫夋嫨鏍稿績鏂规硶
+  changePageCoreRecordData: function (multipleSelectionAll, multipleSelection, tableData, successFn) {
+    // 鏍囪瘑褰撳墠琛岀殑鍞竴閿殑鍚嶇О
+    const idKey = 'uid';
+    const that = this;
+    // 濡傛灉鎬昏蹇嗕腑杩樻病鏈夐�夋嫨鐨勬暟鎹紝閭d箞灏辩洿鎺ュ彇褰撳墠椤甸�変腑鐨勬暟鎹紝涓嶉渶瑕佸悗闈竴绯诲垪璁$畻
+    if (multipleSelectionAll.length <= 0) {
+      multipleSelectionAll = multipleSelection;
+      successFn(multipleSelectionAll);
+      return;
+    }
+    // 鎬婚�夋嫨閲岄潰鐨刱ey闆嗗悎
+    const selectAllIds = [];
+    multipleSelectionAll.forEach((row) => {
+      selectAllIds.push(row[idKey]);
+    });
+    const selectIds = [];
+    // 鑾峰彇褰撳墠椤甸�変腑鐨刬d
+    multipleSelection.forEach((row) => {
+      selectIds.push(row[idKey]);
+      // 濡傛灉鎬婚�夋嫨閲岄潰涓嶅寘鍚綋鍓嶉〉閫変腑鐨勬暟鎹紝閭d箞灏卞姞鍏ュ埌鎬婚�夋嫨闆嗗悎閲�
+      if (selectAllIds.indexOf(row[idKey]) < 0) {
+        multipleSelectionAll.push(row);
+      }
+    });
+    const noSelectIds = [];
+    // 寰楀埌褰撳墠椤垫病鏈夐�変腑鐨刬d
+    tableData.forEach((row) => {
+      if (selectIds.indexOf(row[idKey]) < 0) {
+        noSelectIds.push(row[idKey]);
+      }
+    });
+    noSelectIds.forEach((uid) => {
+      if (selectAllIds.indexOf(uid) >= 0) {
+        for (let i = 0; i < multipleSelectionAll.length; i++) {
+          if (multipleSelectionAll[i][idKey] == uid) {
+            // 濡傛灉鎬婚�夋嫨涓湁鏈閫変腑鐨勶紝閭d箞灏卞垹闄よ繖鏉�
+            multipleSelectionAll.splice(i, 1);
+            break;
+          }
+        }
+      }
+    });
+    successFn(multipleSelectionAll);
+  },
+};
diff --git a/project-web/src/utils/validate.js b/project-web/src/utils/validate.js
new file mode 100644
index 0000000..75ebaf2
--- /dev/null
+++ b/project-web/src/utils/validate.js
@@ -0,0 +1,181 @@
+
+/**
+ * Created by PanJiaChen on 16/11/18.
+ */
+const baseAttr = {
+  min: '%s鏈�灏忛暱搴︿负:min',
+  max: '%s鏈�澶ч暱搴︿负:max',
+  length: '%s闀垮害蹇呴』涓�:length',
+  range: '%s闀垮害涓�:range',
+  pattern: '$s鏍煎紡閿欒',
+};
+
+/**
+ * @param {string} path
+ * @returns {Boolean}
+ */
+export function isExternal(path) {
+  return /^(https?:|mailto:|tel:)/.test(path);
+}
+
+/**
+ * @param {string} str
+ * @returns {Boolean}
+ */
+export function validUsername(str) {
+  const valid_map = ['admin', 'editor'];
+  return valid_map.indexOf(str.trim()) >= 0;
+}
+
+/**
+ * @param {string} str
+ * @returns {Boolean}
+ */
+export function validPassword(str) {
+  const reg = /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,.\/]).{8,12}$/;
+  return reg.test(str)
+}
+
+/**
+ * @param {string} url
+ * @returns {Boolean}
+ */
+export function validURL(url) {
+  const reg =
+    /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/;
+  return reg.test(url);
+}
+
+/**
+ * @param {string} str
+ * @returns {Boolean}
+ */
+export function validLowerCase(str) {
+  const reg = /^[a-z]+$/;
+  return reg.test(str);
+}
+
+/**
+ * @param {string} str
+ * @returns {Boolean}
+ */
+export function validUpperCase(str) {
+  const reg = /^[A-Z]+$/;
+  return reg.test(str);
+}
+
+/**
+ * @param {string} str
+ * @returns {Boolean}
+ */
+export function validAlphabets(str) {
+  const reg = /^[A-Za-z]+$/;
+  return reg.test(str);
+}
+
+/**
+ * @param {string} email
+ * @returns {Boolean}
+ */
+export function validEmail(email) {
+  // eslint-disable-next-line no-useless-escape
+  const reg =
+    /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
+  return reg.test(email);
+}
+
+/**
+ * @param {string} str
+ * @returns {Boolean}
+ */
+export function isString(str) {
+  if (typeof str === 'string' || str instanceof String) {
+    return true;
+  }
+  return false;
+}
+
+/**
+ * @param {Array} arg
+ * @returns {Boolean}
+ */
+export function isArray(arg) {
+  if (typeof Array.isArray === 'undefined') {
+    return Object.prototype.toString.call(arg) === '[object Array]';
+  }
+  return Array.isArray(arg);
+}
+
+const bindMessage = (fn, message) => {
+  fn.message = (field) => message.replace('%s', field || '');
+};
+
+export function required(message, opt = {}) {
+  return {
+    required: true,
+    message,
+    type: 'string',
+    ...opt,
+  };
+}
+bindMessage(required, '璇疯緭鍏�%s');
+
+/**
+ * 姝g‘鐨勯噾棰�
+ *
+ * @param message
+ * @returns {*}
+ */
+export function num(message) {
+  return attrs.pattern(/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/, message);
+}
+bindMessage(num, '%s鏍煎紡涓嶆纭�');
+
+const attrs = Object.keys(baseAttr).reduce((attrs, key) => {
+  attrs[key] = (attr, message = '', opt = {}) => {
+    const _attr = key === 'range' ? { min: attr[0], max: attr[1] } : { [key]: attr };
+
+    return {
+      message: message.replace(`:${key}`, key === 'range' ? `${attr[0]}-${attr[1]}` : attr),
+      type: 'string',
+      ..._attr,
+      ...opt,
+    };
+  };
+  bindMessage(attrs[key], baseAttr[key]);
+  return attrs;
+}, {});
+export default attrs;
+
+export function isEmpty(obj) {
+  return typeof obj === 'undefined' || obj === null || obj === '' || obj === '[]' || obj === '{}' || obj.length <= 0;
+}
+
+export function isNotEmpty(obj) {
+  if (typeof obj == 'undefined' || obj == null || obj == '' || obj.length <= 0) {
+    return false
+  } else {
+    return true
+  }
+}
+/**
+ * 鍑芥暟闃叉姈 (鍙墽琛屾渶鍚庝竴娆$偣鍑�)
+ * @param fn
+ * @param delay
+ * @returns {Function}
+ * @constructor
+ */
+export const Debounce = (fn, t) => {
+  const delay = t || 500;
+  let timer;
+  return function () {
+    const args = arguments;
+    if (timer) {
+      clearTimeout(timer);
+    }
+    timer = setTimeout(() => {
+      timer = null;
+      fn.apply(this, args);
+    }, delay);
+  };
+};
diff --git a/project-web/src/utils/web-connection.js b/project-web/src/utils/web-connection.js
new file mode 100644
index 0000000..5b707d3
--- /dev/null
+++ b/project-web/src/utils/web-connection.js
@@ -0,0 +1,151 @@
+import {isEmptyValue} from '@/utils/StringUtils'
+import store from "@/store";
+
+/**
+ * 瀹氫箟'Websocket'杩炴帴瀵硅薄銆�
+ * @author 鏃跺厠鑻�
+ * @date 2023-04-17
+ */
+class WebConnection {
+  // static uid;
+  // static uri;
+  constructor(_uri, _uid) {
+    if(isEmptyValue(_uri)){
+      throw 'uri鍙傛暟涓虹┖';
+    }
+    if(isEmptyValue(_uid)){
+      throw 'uid鍙傛暟涓虹┖';
+    }
+    this.uri = _uri;
+    this.uid = _uid;
+    this.socket = null;
+    this._ws_timer = setInterval(this.timedCheckConnection, 15000);  // 瀹氭椂浠诲姟
+  }
+
+  shutdown(){
+    if(this.socket != null && this.socket != undefined){
+      this.socket.close();
+    }
+  }
+
+  startConnect(){
+    if('WebSocket' in window){
+      this.socket = new WebSocket(this.uri);
+      this.socket.onopen = this.wsOpen;
+      this.socket.onmessage = this.wsMessage;
+      this.socket.onerror = this.wsError;
+      this.socket.onclose = this.wsClose;
+      // console.log('寮�濮嬭繛鎺ebSocket id涓�',this.uid)
+    } else {
+      this.socket = null;
+      console.log('鍒涘缓ws閿欒锛屽彲鑳藉綋鍓嶆祻瑙堝櫒涓嶆敮鎸亀ebSocket')
+    }
+  }
+
+  timedCheckConnection(){
+    let uri = store.state.user.uri;
+    let uid = store.state.user.uid;
+    if(!isEmptyValue(uri) && !isEmptyValue(uid)){
+      // 2023-04-18锛岃繖閲屼篃鏃犳硶鐩存帴浣跨敤锛歵his.socket锛屽洜涓烘鏃朵负绌猴紙undefined锛�
+      // console.log("鏄惁杩炴帴 = " + this.socket);
+      // if(this.socket == null || this.socket == undefined || !this.connected()){
+      if(store.state.user.webConnection == null || !store.state.user.webConnection.connected()){
+        this.uri = uri;
+        this.uid = uid;
+        // console.log("閲嶆柊杩炴帴锛�" + this.uri);
+        store.state.user.webConnection.shutdown()
+        store.state.user.webConnection.startConnect();
+      }
+    } else{
+      console.error("uri鎴杣id涓虹┖," + this.uid + ", " + this.uri);
+    }
+  }
+  wsOpen(){
+    // 2023-04-18锛屾敞鎰忥細杩欓噷鍥炶皟鏂规硶涓棤娉曠洿鎺ヨ幏鍙栵細this.uid锛岀寽娴嬫槸鍥犱负涓婁笅鏂囩幆澧冨凡缁忓彉鍖栵紙绫讳技浜庡尶鍚嶇被鎹㈡垚鐙珛绫荤殑鎯呭喌锛�
+    // 鍥犳锛岀粡杩囬暱鏃堕棿鐮旂┒锛屽喅瀹氶渶瑕佹斁鍦ㄥ叏灞�store涓��
+    let uid = store.state.user.uid;
+    this.send(JSON.stringify({"protocol":"login", "uid":uid}));
+    // console.log(this);
+  }
+  wsClose(){
+    this.uid = store.state.user.uid;
+    this.uri = store.state.user.uri;
+    // console.log("娴忚鍣ㄦ柇寮�杩炴帴锛�" + this.uid);
+    setTimeout(()=>{
+      store.state.user.webConnection.startConnect();
+    },2000)
+    // store.state.user.webConnection.shutdown()
+    // store.state.user.webConnection.startConnect();
+  }
+  wsError(err){
+    // console.log('== websocket error ==', err);
+    // store.state.user.webConnection.shutdown()
+    // store.state.user.webConnection.startConnect();
+  }
+  wsMessage(event){
+    // console.log(event);
+    if(event.data == null || event.data == "" || event.data == "null"){
+      console.log("鎺ユ敹鍒版湇鍔$绌烘暟鎹甛n");
+      return;
+    }
+    store.commit('user/SET_WS_MSG', event);
+  }
+
+  processServerRequest(data){
+    if(data == null){
+      return;
+    }
+    if(data.protocol == "heartbeat"){
+      return;
+    }
+    if(data.protocol == "login"){
+      if(data.status == 0){
+        // uid = data.uid;
+        //$("#showText").append("鏈嶅姟宸茶繛鎺ワ紝寮�濮嬫彁闂細" + data.uid + "\n");
+        console.log("娴忚鍣ㄨ繛鎺ユ垚鍔�:" + data.uid);
+      } else {
+        console.log("鐧诲綍璁よ瘉澶辫触锛�" + data.status + "\n");
+      }
+      return;
+    }
+
+    if(data.protocol == "chat" || data.protocol == "broadcast"){
+      console.log("鎺ユ敹鍒皐eb鎺ㄩ�侊細");
+      return JSON.stringify(data.data)
+      // store.commit('user/SET_WS_MSG', data.data);
+      // if(data.data.touch == 1){
+      //   touchEvent(data.data);
+      // } else {
+      //   voiceEvent(data.data);
+      // }
+    }
+    console.log(data);
+  }
+
+  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  //~ 鍐呴儴绉佹湁鏂规硶
+  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  send(message){
+    if(this.socket == null){
+      return;
+    }
+    if (this.socket.readyState == WebSocket.OPEN) {
+      this.socket.send(message);
+    } else {
+      console.log("connection is not start.");
+    }
+  }
+
+  connected(){
+    if(this.socket == null || this.socket == undefined){
+      return false;
+    }
+    if(this.socket.readyState == 1){
+      return true;
+    }
+    return false;
+  }
+
+}
+
+export default WebConnection;
diff --git a/project-web/src/vendor/Blob.js b/project-web/src/vendor/Blob.js
new file mode 100644
index 0000000..ec63195
--- /dev/null
+++ b/project-web/src/vendor/Blob.js
@@ -0,0 +1,182 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+/* eslint-disable */
+/* Blob.js
+ * A Blob implementation.
+ * 2014-05-27
+ *
+ * By Eli Grey, http://eligrey.com
+ * By Devin Samarin, https://github.com/eboyjr
+ * License: X11/MIT
+ *   See LICENSE.md
+ */
+
+/*global self, unescape */
+/*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true,
+ plusplus: true */
+
+/*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */
+
+(function (view) {
+  'use strict';
+
+  view.URL = view.URL || view.webkitURL;
+
+  if (view.Blob && view.URL) {
+    try {
+      new Blob();
+      return;
+    } catch (e) {}
+  }
+
+  // Internally we use a BlobBuilder implementation to base Blob off of
+  // in order to support older browsers that only have BlobBuilder
+  var BlobBuilder =
+    view.BlobBuilder ||
+    view.WebKitBlobBuilder ||
+    view.MozBlobBuilder ||
+    (function (view) {
+      var get_class = function (object) {
+          return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1];
+        },
+        FakeBlobBuilder = function BlobBuilder() {
+          this.data = [];
+        },
+        FakeBlob = function Blob(data, type, encoding) {
+          this.data = data;
+          this.size = data.length;
+          this.type = type;
+          this.encoding = encoding;
+        },
+        FBB_proto = FakeBlobBuilder.prototype,
+        FB_proto = FakeBlob.prototype,
+        FileReaderSync = view.FileReaderSync,
+        FileException = function (type) {
+          this.code = this[(this.name = type)];
+        },
+        file_ex_codes = (
+          'NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR ' +
+          'NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR'
+        ).split(' '),
+        file_ex_code = file_ex_codes.length,
+        real_URL = view.URL || view.webkitURL || view,
+        real_create_object_URL = real_URL.createObjectURL,
+        real_revoke_object_URL = real_URL.revokeObjectURL,
+        URL = real_URL,
+        btoa = view.btoa,
+        atob = view.atob,
+        ArrayBuffer = view.ArrayBuffer,
+        Uint8Array = view.Uint8Array;
+      FakeBlob.fake = FB_proto.fake = true;
+      while (file_ex_code--) {
+        FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1;
+      }
+      if (!real_URL.createObjectURL) {
+        URL = view.URL = {};
+      }
+      URL.createObjectURL = function (blob) {
+        var type = blob.type,
+          data_URI_header;
+        if (type === null) {
+          type = 'application/octet-stream';
+        }
+        if (blob instanceof FakeBlob) {
+          data_URI_header = 'data:' + type;
+          if (blob.encoding === 'base64') {
+            return data_URI_header + ';base64,' + blob.data;
+          } else if (blob.encoding === 'URI') {
+            return data_URI_header + ',' + decodeURIComponent(blob.data);
+          }
+          if (btoa) {
+            return data_URI_header + ';base64,' + btoa(blob.data);
+          } else {
+            return data_URI_header + ',' + encodeURIComponent(blob.data);
+          }
+        } else if (real_create_object_URL) {
+          return real_create_object_URL.call(real_URL, blob);
+        }
+      };
+      URL.revokeObjectURL = function (object_URL) {
+        if (object_URL.substring(0, 5) !== 'data:' && real_revoke_object_URL) {
+          real_revoke_object_URL.call(real_URL, object_URL);
+        }
+      };
+      FBB_proto.append = function (data /*, endings*/) {
+        var bb = this.data;
+        // decode data to a binary string
+        if (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) {
+          var str = '',
+            buf = new Uint8Array(data),
+            i = 0,
+            buf_len = buf.length;
+          for (; i < buf_len; i++) {
+            str += String.fromCharCode(buf[i]);
+          }
+          bb.push(str);
+        } else if (get_class(data) === 'Blob' || get_class(data) === 'File') {
+          if (FileReaderSync) {
+            var fr = new FileReaderSync();
+            bb.push(fr.readAsBinaryString(data));
+          } else {
+            // async FileReader won't work as BlobBuilder is sync
+            throw new FileException('NOT_READABLE_ERR');
+          }
+        } else if (data instanceof FakeBlob) {
+          if (data.encoding === 'base64' && atob) {
+            bb.push(atob(data.data));
+          } else if (data.encoding === 'URI') {
+            bb.push(decodeURIComponent(data.data));
+          } else if (data.encoding === 'raw') {
+            bb.push(data.data);
+          }
+        } else {
+          if (typeof data !== 'string') {
+            data += ''; // convert unsupported types to strings
+          }
+          // decode UTF-16 to binary string
+          bb.push(unescape(encodeURIComponent(data)));
+        }
+      };
+      FBB_proto.getBlob = function (type) {
+        if (!arguments.length) {
+          type = null;
+        }
+        return new FakeBlob(this.data.join(''), type, 'raw');
+      };
+      FBB_proto.toString = function () {
+        return '[object BlobBuilder]';
+      };
+      FB_proto.slice = function (start, end, type) {
+        var args = arguments.length;
+        if (args < 3) {
+          type = null;
+        }
+        return new FakeBlob(this.data.slice(start, args > 1 ? end : this.data.length), type, this.encoding);
+      };
+      FB_proto.toString = function () {
+        return '[object Blob]';
+      };
+      FB_proto.close = function () {
+        this.size = this.data.length = 0;
+      };
+      return FakeBlobBuilder;
+    })(view);
+
+  view.Blob = function Blob(blobParts, options) {
+    var type = options ? options.type || '' : '';
+    var builder = new BlobBuilder();
+    if (blobParts) {
+      for (var i = 0, len = blobParts.length; i < len; i++) {
+        builder.append(blobParts[i]);
+      }
+    }
+    return builder.getBlob(type);
+  };
+})((typeof self !== 'undefined' && self) || (typeof window !== 'undefined' && window) || this.content || this);
diff --git a/project-web/src/vendor/Export1Excel.js b/project-web/src/vendor/Export1Excel.js
new file mode 100644
index 0000000..0f10824
--- /dev/null
+++ b/project-web/src/vendor/Export1Excel.js
@@ -0,0 +1,143 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+/* eslint-disable */
+require('script-loader!file-saver'); //淇濆瓨鏂囦欢鐢�
+require('./Blob.js'); //杞簩杩涘埗鐢�
+require('script-loader!xlsx/dist/xlsx.core.min'); //xlsx鏍稿績
+function generateArray(table) {
+  var out = [];
+  var rows = table.querySelectorAll('tr');
+  var ranges = [];
+  for (var R = 0; R < rows.length; ++R) {
+    var outRow = [];
+    var row = rows[R];
+    var columns = row.querySelectorAll('td');
+    for (var C = 0; C < columns.length; ++C) {
+      var cell = columns[C];
+      var colspan = cell.getAttribute('colspan');
+      var rowspan = cell.getAttribute('rowspan');
+      var cellValue = cell.innerText;
+      if (cellValue !== '' && cellValue == +cellValue) cellValue = +cellValue;
+
+      //Skip ranges
+      ranges.forEach(function (range) {
+        if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {
+          for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);
+        }
+      });
+
+      //Handle Row Span
+      if (rowspan || colspan) {
+        rowspan = rowspan || 1;
+        colspan = colspan || 1;
+        ranges.push({ s: { r: R, c: outRow.length }, e: { r: R + rowspan - 1, c: outRow.length + colspan - 1 } });
+      }
+      //Handle Value
+      outRow.push(cellValue !== '' ? cellValue : null);
+
+      //Handle Colspan
+      if (colspan) for (var k = 0; k < colspan - 1; ++k) outRow.push(null);
+    }
+    out.push(outRow);
+  }
+  return [out, ranges];
+}
+
+function datenum(v, date1904) {
+  if (date1904) v += 1462;
+  var epoch = Date.parse(v);
+  return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
+}
+
+function sheet_from_array_of_arrays(data, opts) {
+  var ws = {};
+  var range = { s: { c: 10000000, r: 10000000 }, e: { c: 0, r: 0 } };
+  for (var R = 0; R != data.length; ++R) {
+    for (var C = 0; C != data[R].length; ++C) {
+      if (range.s.r > R) range.s.r = R;
+      if (range.s.c > C) range.s.c = C;
+      if (range.e.r < R) range.e.r = R;
+      if (range.e.c < C) range.e.c = C;
+      var cell = { v: data[R][C] };
+      if (cell.v == null) continue;
+      var cell_ref = XLSX.utils.encode_cell({ c: C, r: R });
+
+      if (typeof cell.v === 'number') cell.t = 'n';
+      else if (typeof cell.v === 'boolean') cell.t = 'b';
+      else if (cell.v instanceof Date) {
+        cell.t = 'n';
+        cell.z = XLSX.SSF._table[14];
+        cell.v = datenum(cell.v);
+      } else cell.t = 's';
+
+      ws[cell_ref] = cell;
+    }
+  }
+  if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
+  return ws;
+}
+
+function Workbook() {
+  if (!(this instanceof Workbook)) return new Workbook();
+  this.SheetNames = [];
+  this.Sheets = {};
+}
+
+function s2ab(s) {
+  var buf = new ArrayBuffer(s.length);
+  var view = new Uint8Array(buf);
+  for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;
+  return buf;
+}
+
+export function export_table_to_excel(id) {
+  var theTable = document.getElementById(id);
+  var oo = generateArray(theTable);
+  var ranges = oo[1];
+
+  /* original data */
+  var data = oo[0];
+  var ws_name = 'SheetJS';
+
+  var wb = new Workbook(),
+    ws = sheet_from_array_of_arrays(data);
+
+  /* add ranges to worksheet */
+  // ws['!cols'] = ['apple', 'banan'];
+  ws['!merges'] = ranges;
+
+  /* add worksheet to workbook */
+  wb.SheetNames.push(ws_name);
+  wb.Sheets[ws_name] = ws;
+
+  var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: false, type: 'binary' });
+
+  saveAs(new Blob([s2ab(wbout)], { type: 'application/octet-stream' }), 'test.xlsx');
+}
+
+function formatJson(jsonData) {}
+export function export_json_to_excel(th, jsonData, defaultTitle) {
+  /* original data */
+
+  var data = jsonData;
+  data.unshift(th);
+  var ws_name = 'SheetJS';
+
+  var wb = new Workbook(),
+    ws = sheet_from_array_of_arrays(data);
+
+  /* add worksheet to workbook */
+  wb.SheetNames.push(ws_name);
+  wb.Sheets[ws_name] = ws;
+
+  var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: false, type: 'binary' });
+  var title = defaultTitle || '鍒楄〃';
+  saveAs(new Blob([s2ab(wbout)], { type: 'application/octet-stream' }), title + '.xlsx');
+}
diff --git a/project-web/src/vendor/Export2Excel.js b/project-web/src/vendor/Export2Excel.js
new file mode 100644
index 0000000..c64f4ed
--- /dev/null
+++ b/project-web/src/vendor/Export2Excel.js
@@ -0,0 +1,236 @@
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+/* eslint-disable */
+import { saveAs } from 'file-saver';
+import XLSX from 'xlsx';
+
+function generateArray(table) {
+  var out = [];
+  var rows = table.querySelectorAll('tr');
+  var ranges = [];
+  for (var R = 0; R < rows.length; ++R) {
+    var outRow = [];
+    var row = rows[R];
+    var columns = row.querySelectorAll('td');
+    for (var C = 0; C < columns.length; ++C) {
+      var cell = columns[C];
+      var colspan = cell.getAttribute('colspan');
+      var rowspan = cell.getAttribute('rowspan');
+      var cellValue = cell.innerText;
+      if (cellValue !== '' && cellValue == +cellValue) cellValue = +cellValue;
+
+      //Skip ranges
+      ranges.forEach(function (range) {
+        if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {
+          for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);
+        }
+      });
+
+      //Handle Row Span
+      if (rowspan || colspan) {
+        rowspan = rowspan || 1;
+        colspan = colspan || 1;
+        ranges.push({
+          s: {
+            r: R,
+            c: outRow.length,
+          },
+          e: {
+            r: R + rowspan - 1,
+            c: outRow.length + colspan - 1,
+          },
+        });
+      }
+
+      //Handle Value
+      outRow.push(cellValue !== '' ? cellValue : null);
+
+      //Handle Colspan
+      if (colspan) for (var k = 0; k < colspan - 1; ++k) outRow.push(null);
+    }
+    out.push(outRow);
+  }
+  return [out, ranges];
+}
+
+function datenum(v, date1904) {
+  if (date1904) v += 1462;
+  var epoch = Date.parse(v);
+  return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
+}
+
+function sheet_from_array_of_arrays(data, opts) {
+  var ws = {};
+  var range = {
+    s: {
+      c: 10000000,
+      r: 10000000,
+    },
+    e: {
+      c: 0,
+      r: 0,
+    },
+  };
+  for (var R = 0; R != data.length; ++R) {
+    for (var C = 0; C != data[R].length; ++C) {
+      if (range.s.r > R) range.s.r = R;
+      if (range.s.c > C) range.s.c = C;
+      if (range.e.r < R) range.e.r = R;
+      if (range.e.c < C) range.e.c = C;
+      var cell = {
+        v: data[R][C],
+      };
+      if (cell.v == null) continue;
+      var cell_ref = XLSX.utils.encode_cell({
+        c: C,
+        r: R,
+      });
+
+      if (typeof cell.v === 'number') cell.t = 'n';
+      else if (typeof cell.v === 'boolean') cell.t = 'b';
+      else if (cell.v instanceof Date) {
+        cell.t = 'n';
+        cell.z = XLSX.SSF._table[14];
+        cell.v = datenum(cell.v);
+      } else cell.t = 's';
+
+      ws[cell_ref] = cell;
+    }
+  }
+  if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
+  return ws;
+}
+
+function Workbook() {
+  if (!(this instanceof Workbook)) return new Workbook();
+  this.SheetNames = [];
+  this.Sheets = {};
+}
+
+function s2ab(s) {
+  var buf = new ArrayBuffer(s.length);
+  var view = new Uint8Array(buf);
+  for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;
+  return buf;
+}
+
+export function export_table_to_excel(id) {
+  var theTable = document.getElementById(id);
+  var oo = generateArray(theTable);
+  var ranges = oo[1];
+
+  /* original data */
+  var data = oo[0];
+  var ws_name = 'SheetJS';
+
+  var wb = new Workbook(),
+    ws = sheet_from_array_of_arrays(data);
+
+  /* add ranges to worksheet */
+  // ws['!cols'] = ['apple', 'banan'];
+  ws['!merges'] = ranges;
+
+  /* add worksheet to workbook */
+  wb.SheetNames.push(ws_name);
+  wb.Sheets[ws_name] = ws;
+
+  var wbout = XLSX.write(wb, {
+    bookType: 'xlsx',
+    bookSST: false,
+    type: 'binary',
+  });
+
+  saveAs(
+    new Blob([s2ab(wbout)], {
+      type: 'application/octet-stream',
+    }),
+    'test.xlsx',
+  );
+}
+
+export function export_json_to_excel({
+  multiHeader = [],
+  header,
+  data,
+  filename,
+  merges = [],
+  autoWidth = true,
+  bookType = 'xlsx',
+} = {}) {
+  /* original data */
+  filename = filename || 'excel-list';
+  data = [...data];
+  data.unshift(header);
+
+  for (let i = multiHeader.length - 1; i > -1; i--) {
+    data.unshift(multiHeader[i]);
+  }
+
+  var ws_name = 'SheetJS';
+  var wb = new Workbook(),
+    ws = sheet_from_array_of_arrays(data);
+
+  if (merges.length > 0) {
+    if (!ws['!merges']) ws['!merges'] = [];
+    merges.forEach((item) => {
+      ws['!merges'].push(XLSX.utils.decode_range(item));
+    });
+  }
+
+  if (autoWidth) {
+    /*璁剧疆worksheet姣忓垪鐨勬渶澶у搴�*/
+    const colWidth = data.map((row) =>
+      row.map((val) => {
+        /*鍏堝垽鏂槸鍚︿负null/undefined*/
+        if (val == null) {
+          return {
+            wch: 10,
+          };
+        } else if (val.toString().charCodeAt(0) > 255) {
+          /*鍐嶅垽鏂槸鍚︿负涓枃*/
+          return {
+            wch: val.toString().length * 2,
+          };
+        } else {
+          return {
+            wch: val.toString().length,
+          };
+        }
+      }),
+    );
+    /*浠ョ涓�琛屼负鍒濆鍊�*/
+    let result = colWidth[0];
+    for (let i = 1; i < colWidth.length; i++) {
+      for (let j = 0; j < colWidth[i].length; j++) {
+        if (result[j]['wch'] < colWidth[i][j]['wch']) {
+          result[j]['wch'] = colWidth[i][j]['wch'];
+        }
+      }
+    }
+    ws['!cols'] = result;
+  }
+
+  /* add worksheet to workbook */
+  wb.SheetNames.push(ws_name);
+  wb.Sheets[ws_name] = ws;
+
+  var wbout = XLSX.write(wb, {
+    bookType: bookType,
+    bookSST: false,
+    type: 'binary',
+  });
+  saveAs(
+    new Blob([s2ab(wbout)], {
+      type: 'application/octet-stream',
+    }),
+    `${filename}.${bookType}`,
+  );
+}
diff --git a/project-web/src/vendor/Export2Zip.js b/project-web/src/vendor/Export2Zip.js
new file mode 100644
index 0000000..b0d8368
--- /dev/null
+++ b/project-web/src/vendor/Export2Zip.js
@@ -0,0 +1,39 @@
+// +---------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +---------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +---------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +---------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +---------------------------------------------------------------------
+
+/* eslint-disable */
+import { saveAs } from 'file-saver';
+import JSZip from 'jszip';
+
+export function export_txt_to_zip(th, jsonData, txtName, zipName) {
+  const zip = new JSZip();
+  const txt_name = txtName || 'file';
+  const zip_name = zipName || 'file';
+  const data = jsonData;
+  let txtData = `${th}\r\n`;
+  data.forEach((row) => {
+    let tempStr = '';
+    tempStr = row.toString();
+    txtData += `${tempStr}\r\n`;
+  });
+  zip.file(`${txt_name}.txt`, txtData);
+  zip
+    .generateAsync({
+      type: 'blob',
+    })
+    .then(
+      (blob) => {
+        saveAs(blob, `${zip_name}.zip`);
+      },
+      (err) => {
+        alert('瀵煎嚭澶辫触');
+      },
+    );
+}
diff --git a/project-web/src/views/components/myImport.vue b/project-web/src/views/components/myImport.vue
new file mode 100644
index 0000000..400e608
--- /dev/null
+++ b/project-web/src/views/components/myImport.vue
@@ -0,0 +1,161 @@
+<template>
+  <el-dialog
+    v-if="dialogShow"
+    width="40%"
+    :center="true"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    :title="dialogTitle"
+    :before-close="beforeClose"
+    :modal="modal"
+    :visible="dialogShow"
+  >
+    <el-row v-loading="loading" element-loading-text="鏁版嵁瀵煎叆涓�">
+      <el-col :span="24">
+        <el-form>
+          <el-form-item v-if="templateSettings.templateUrl != null" label="涓嬭浇妯℃澘锛�" prop="lon">
+            <a class="blue-txt" style="color:#409EFF" :href="templateSettings.templateUrl" target="_blank">{{ templateSettings.templateName }}</a>
+          </el-form-item>
+          <el-form-item label="閫夊彇鏂囦欢锛�" prop="lon">
+            <el-upload
+              :headers="headers"
+              :ref="fileSettings.ref"
+              class="upload-demo"
+              name="file"
+              :data="fileSettings.data"
+              :action="fileSettings.uploadUrl"
+              :before-upload="beforeAvatarUpload"
+              :on-success="handleUploadSuccess"
+              :on-change="file"
+              :multiple="fileSettings.multiple"
+              :limit="fileSettings.num"
+              :accept="fileSettings.accept"
+              :auto-upload="fileSettings.autoUpload"
+            >
+              <el-button size="small" type="primary">{{ fileSettings.title }}</el-button>
+              <div slot="tip" class="el-upload__tip">鍙兘涓婁紶{{ fileSettings.num }}涓牸寮忎负{{ fileSettings.accept }}鐨勬枃浠讹紝涓斾笉瓒呰繃{{ fileSettings.max }}kb</div>
+            </el-upload>
+          </el-form-item>
+          <el-form-item label="瀵煎叆鏁版嵁锛�" prop="lon">
+            <el-button style="margin-left: 10px;" size="small" type="success" @click="handleSubmit">寮�濮嬪鍏�</el-button>
+          </el-form-item>
+        </el-form>
+      </el-col>
+    </el-row>
+  </el-dialog>
+</template>
+<script>
+import { getToken } from '@/utils/auth'
+import { sessionToken } from '@/settings'
+export default {
+  props: {
+    importSetting: {
+      type: Object,
+      default: () => {
+        return {}
+      }
+    },
+    dialogShow: {
+      type: Boolean,
+      default: false
+    },
+    modal: {
+      type: Boolean,
+      default: false
+    },
+    dialogTitle: {
+      type: String,
+      default: ''
+    }
+  },
+  data() {
+    return {
+      headers: {},
+      loading: false,
+      /* 鏂囦欢涓婁紶 */
+      fileSettings: {
+        ref: 'myFile',
+        data: {}, //棰濆鍙傛暟
+        title: '鐐瑰嚮涓婁紶',
+        max: 1024, // 鏈�澶уぇ灏忥紝鍗曚綅kb
+        num: 1, // 鏀寔涓婁紶鏂囦欢涓暟
+        accept: '.xlsx', // 闄愬埗鏍煎紡
+        uploadUrl: '', // 涓婁紶璺緞
+        type: 'text', // text/picture
+        multiple: false, // 鏄惁鏀寔鎵归噺涓婁紶
+        disabled: false, // 鏄惁绂佺敤
+        autoUpload: false, // 鏄惁鍦ㄩ�夊彇鏂囦欢鍚庣珛鍗宠繘琛屼笂浼�
+        onSuccess: null // 涓婁紶鎴愬姛鍥炶皟
+      },
+      isUpload: false,
+      /* 妯℃澘涓嬭浇*/
+      templateSettings: {
+        templateName: '妯℃澘涓嬭浇', // 鍚嶇О
+        templateUrl: null // 涓嬭浇鍦板潃
+      }
+    }
+  },
+  watch: {
+    dialogShow(val) {
+      if (val) {
+        this.fileSettings = Object.assign(this.fileSettings, this.importSetting.fileSettings)
+        this.templateSettings = Object.assign(this.templateSettings, this.importSetting.templateSettings)
+        console.log(this.templateSettings)
+        this.fileSettings.onSuccess = this.importSetting.onSuccess
+      }
+    }
+  },
+  mounted() {
+    this.headers[sessionToken] = getToken()
+  },
+  methods: {
+    /* 鍏抽棴绐楀彛 */
+    beforeClose() {
+      if (this.loading) {
+        this.$confirm('姝e湪鎵ц瀵煎叆,纭鍏抽棴锛�').then(() => {
+          this.importSetting.dialogShow = false
+          this.loading = false
+        }).catch()
+      } else {
+        this.importSetting.dialogShow = false
+      }
+    },
+    /* 鏍¢獙鏂囦欢 */
+    beforeAvatarUpload(file) {
+      const isFormat = this.fileSettings.accept.split(',').indexOf(file.name.substr(file.name.lastIndexOf('.'), file.name.length).toLocaleString()) > -1
+      if (!isFormat) {
+        this.$message.error(`涓婁紶鏂囦欢鍙兘鏄� ${this.fileSettings.accept} 鏍煎紡!`)
+      }
+      const isLtMaxKB = file.size / 1024 < this.fileSettings.max
+
+      if (!isLtMaxKB) {
+        this.$message.error('涓婁紶鏂囦欢澶у皬涓嶈兘瓒呰繃 ' + this.fileSettings.max + 'kb!')
+      }
+      return isFormat && isLtMaxKB
+    },
+    /* 寮�濮嬪鍏� */
+    handleSubmit() {
+      if (!this.isUpload) {
+        this.$message.error(`璇蜂笂浼犳枃浠禶)
+      } else {
+        this.$refs[this.fileSettings.ref].submit()
+      }
+    },
+    file(file, list) {
+      if (file) {
+        this.isUpload = true
+      }
+    },
+    /* 涓婁紶鎴愬姛鎵ц瀵煎叆 */
+    handleUploadSuccess(response, file, fileList) {
+      if (this.fileSettings.onSuccess) {
+        this.loading = true
+        this.fileSettings.onSuccess(response, () => {
+          this.loading = false;
+          this.importSetting.dialogShow = false
+        })
+      }
+    }
+  }
+}
+</script>
diff --git a/project-web/src/views/dashboard/components/GDLX.vue b/project-web/src/views/dashboard/components/GDLX.vue
new file mode 100644
index 0000000..1d2eda7
--- /dev/null
+++ b/project-web/src/views/dashboard/components/GDLX.vue
@@ -0,0 +1,124 @@
+<template>
+  <div style="width: 100%">
+      <div id="main3" />
+    <p style="text-align: center;font-size: 16px;font-weight: 600">宸ュ崟绫诲瀷</p>
+  </div>
+</template>
+<script>
+import * as echarts from 'echarts';
+
+export default {
+  name: 'GDLX',
+  props: {
+    activeId: {
+      type: String,
+      default: '',
+    },
+  },
+  data() {
+    return {
+      myChart: null,
+      options: {},
+    };
+  },
+  mounted() {
+    this.getCenterLine();
+    // 鐩戝惉灞忓箷瀹藉害鍙樺寲锛氬綋娴忚鍣ㄥ彂鐢焤esize浜嬩欢鐨勬椂鍊欙紝瑙﹀彂echart鐨剅esize浜嬩欢锛岄噸缁榗anvas
+    window.addEventListener('resize', () => {
+      this.changeWidth();
+    });
+  },
+  methods: {
+
+    getCenterLine() {
+      // getCenterLine({
+      //   id: this.activeId,
+      //   weekFlag: this.weekFlag,
+      //   monthFlag: this.monthFlag,
+      //   startDay: this.value2 ? this.value2[0] : null,
+      //   endDay: this.value2 ? this.value2[1] : null
+      // }).then(res => {
+      //   const data = res.data
+      var chartDom = document.getElementById('main3');
+      this.myChart = echarts.init(chartDom);
+      this.options = {
+        color: [ '#1877FF','#5EDEA5','#F7BE12','#55C6E1','#ED653B'],
+        tooltip: {
+          trigger: 'axis',
+          axisPointer: {
+            type: 'shadow',
+          },
+        },
+
+        // toolbox: {
+        //   show: true,
+        //   orient: 'vertical',
+        //   left: 'right',
+        //   top: 'center',
+        //   feature: {
+        //     mark: { show: true },
+        //     dataView: { show: true, readOnly: false },
+        //     magicType: { show: true, type: ['line', 'bar', 'stack'] },
+        //     restore: { show: true },
+        //     saveAsImage: { show: true },
+        //   },
+        // },
+
+        series: [
+          {
+
+            name: 'Access From',
+            type: 'pie',
+            radius: ['40%','65%'],
+            minAngle: 2, // 鏈�灏忕殑鎵囧尯瑙掑害锛�0~360锛夛紝鐢ㄤ簬闃叉鏌愪釜鍊艰繃灏忓鑷存墖鍖哄お灏忓奖鍝嶄氦浜�
+            avoidLabelOverlap: true, // 鏄惁鍚敤闃叉鏍囩閲嶅彔绛栫暐
+            itemStyle: {
+              normal: {
+                label: {
+                  show: true,
+                  formatter(param) {
+                    // correct the percentage
+                    return param.name + '\n' + ' ' + param.percent.toFixed(1) + '%';
+                  }
+                },
+                labelLine: {
+                  show: true,
+                  length: 0.01
+                }
+              }
+            },
+            data: [
+              { value: 1048, name: '璁″垝宸ュ崟' },
+              { value: 735, name: '鏁呴殰宸ュ崟' },
+              { value: 580, name: '鏃ュ父宸ュ崟' },
+
+            ]
+          }]
+      };
+      this.options && this.myChart.setOption(this.options);
+    },
+    changeWidth() {
+      this.myChart.resize();
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+#main3 {
+  width: 100%;
+  height: 300px;
+}
+
+.box-card {
+  margin-top: 10px;
+  width: 100%;
+  border-radius: 10px;
+  border: none;
+  .card-title-right {
+    display: flex;
+    align-items: center;
+    align-self: flex-end;
+    float: right;
+  }
+}
+</style>
diff --git a/project-web/src/views/dashboard/components/SJDJ.vue b/project-web/src/views/dashboard/components/SJDJ.vue
new file mode 100644
index 0000000..6ea0f91
--- /dev/null
+++ b/project-web/src/views/dashboard/components/SJDJ.vue
@@ -0,0 +1,136 @@
+<template>
+  <div style="width: 100%">
+      <div id="main2" />
+    <p style="text-align: center;font-size: 16px;font-weight: 600">浜嬩欢绛夌骇</p>
+  </div>
+</template>
+<script>
+import * as echarts from 'echarts';
+import * as dash from "@/api/dashboard/dash";
+
+export default {
+  name: 'SJDJ',
+  props: {
+    activeId: {
+      type: String,
+      default: '',
+    },
+  },
+  data() {
+    return {
+      myChart: null,
+      options: {},
+    };
+  },
+  mounted() {
+    this.getCenterLine();
+    // 鐩戝惉灞忓箷瀹藉害鍙樺寲锛氬綋娴忚鍣ㄥ彂鐢焤esize浜嬩欢鐨勬椂鍊欙紝瑙﹀彂echart鐨剅esize浜嬩欢锛岄噸缁榗anvas
+    window.addEventListener('resize', () => {
+      this.changeWidth();
+    });
+    this.getData();
+  },
+  methods: {
+    getData(){
+      //鑾峰彇椤圭洰鏁版嵁
+      dash.getLVNum().then(res => {
+        if (res) {
+          this.projectInfo = res
+          // 浜嬩欢鏁伴噺
+          this.options.series[0].data = this.projectInfo
+          this.myChart.setOption(this.options)
+        }
+      })
+    },
+    getCenterLine() {
+      // getCenterLine({
+      //   id: this.activeId,
+      //   weekFlag: this.weekFlag,
+      //   monthFlag: this.monthFlag,
+      //   startDay: this.value2 ? this.value2[0] : null,
+      //   endDay: this.value2 ? this.value2[1] : null
+      // }).then(res => {
+      //   const data = res.data
+      var chartDom = document.getElementById('main2');
+      this.myChart = echarts.init(chartDom);
+      this.options = {
+        color: [ '#1877FF','#5EDEA5','#F7BE12','#55C6E1','#ED653B'],
+        tooltip: {
+          trigger: 'axis',
+          axisPointer: {
+            type: 'shadow',
+          },
+        },
+
+        // toolbox: {
+        //   show: true,
+        //   orient: 'vertical',
+        //   left: 'right',
+        //   top: 'center',
+        //   feature: {
+        //     mark: { show: true },
+        //     dataView: { show: true, readOnly: false },
+        //     magicType: { show: true, type: ['line', 'bar', 'stack'] },
+        //     restore: { show: true },
+        //     saveAsImage: { show: true },
+        //   },
+        // },
+
+        series: [
+          {
+
+            name: 'Access From',
+            type: 'pie',
+            radius: ['40%','65%'],
+            minAngle: 2, // 鏈�灏忕殑鎵囧尯瑙掑害锛�0~360锛夛紝鐢ㄤ簬闃叉鏌愪釜鍊艰繃灏忓鑷存墖鍖哄お灏忓奖鍝嶄氦浜�
+            avoidLabelOverlap: true, // 鏄惁鍚敤闃叉鏍囩閲嶅彔绛栫暐
+            itemStyle: {
+              normal: {
+                label: {
+                  show: true,
+                  formatter(param) {
+                    // correct the percentage
+                    return param.name + '\n' + ' ' + param.percent.toFixed(1) + '%';
+                  }
+                },
+                labelLine: {
+                  show: true,
+                  length: 0.01
+                }
+              }
+            },
+            data: [
+              { value: 100, name: '绛夌骇涓�' },
+              { value: 100, name: '绛夌骇浜�' },
+              { value: 100, name: '绛夌骇涓�' },
+
+            ]
+          }]
+      };
+      this.options && this.myChart.setOption(this.options);
+    },
+    changeWidth() {
+      this.myChart.resize();
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+#main2 {
+  width: 100%;
+  height: 300px;
+}
+
+.box-card {
+  margin-top: 10px;
+  width: 100%;
+  border-radius: 10px;
+  border: none;
+  .card-title-right {
+    display: flex;
+    align-items: center;
+    align-self: flex-end;
+    float: right;
+  }
+}
+</style>
diff --git a/project-web/src/views/dashboard/components/SJGDZB.vue b/project-web/src/views/dashboard/components/SJGDZB.vue
new file mode 100644
index 0000000..7a367b1
--- /dev/null
+++ b/project-web/src/views/dashboard/components/SJGDZB.vue
@@ -0,0 +1,139 @@
+<template>
+  <div style="width: 100%">
+      <div id="main4" />
+    <p style="text-align: center;font-size: 16px;font-weight: 600">浜嬩欢宸ュ崟鍗犳瘮</p>
+  </div>
+</template>
+<script>
+import * as echarts from 'echarts';
+import * as dash from "@/api/dashboard/dash";
+
+export default {
+  name: 'SJGDZB',
+  props: {
+    activeId: {
+      type: String,
+      default: '',
+    },
+  },
+  data() {
+    return {
+      myChart: null,
+      options: {},
+    };
+  },
+  mounted() {
+    this.getCenterLine();
+    // 鐩戝惉灞忓箷瀹藉害鍙樺寲锛氬綋娴忚鍣ㄥ彂鐢焤esize浜嬩欢鐨勬椂鍊欙紝瑙﹀彂echart鐨剅esize浜嬩欢锛岄噸缁榗anvas
+    window.addEventListener('resize', () => {
+      this.changeWidth();
+    });
+    this.getData();
+  },
+  methods: {
+    getData(){
+      //鑾峰彇椤圭洰鏁版嵁
+      dash.getEventType().then(res => {
+        if (res) {
+          this.projectInfo = res
+          // 浜嬩欢鏁伴噺
+          this.options.series[0].data = this.projectInfo
+          this.myChart.setOption(this.options)
+        }
+      })
+    },
+    getCenterLine() {
+      // getCenterLine({
+      //   id: this.activeId,
+      //   weekFlag: this.weekFlag,
+      //   monthFlag: this.monthFlag,
+      //   startDay: this.value2 ? this.value2[0] : null,
+      //   endDay: this.value2 ? this.value2[1] : null
+      // }).then(res => {
+      //   const data = res.data
+      var chartDom = document.getElementById('main4');
+      this.myChart = echarts.init(chartDom);
+      this.options = {
+        color: [ '#1877FF','#5EDEA5','#F7BE12','#55C6E1','#ED653B'],
+        tooltip: {
+          trigger: 'axis',
+          axisPointer: {
+            type: 'shadow',
+          },
+        },
+
+        // toolbox: {
+        //   show: true,
+        //   orient: 'vertical',
+        //   left: 'right',
+        //   top: 'center',
+        //   feature: {
+        //     mark: { show: true },
+        //     dataView: { show: true, readOnly: false },
+        //     magicType: { show: true, type: ['line', 'bar', 'stack'] },
+        //     restore: { show: true },
+        //     saveAsImage: { show: true },
+        //   },
+        // },
+
+        series: [
+          {
+
+            name: 'Access From',
+            type: 'pie',
+            radius: ['40%','65%'],
+            minAngle: 2, // 鏈�灏忕殑鎵囧尯瑙掑害锛�0~360锛夛紝鐢ㄤ簬闃叉鏌愪釜鍊艰繃灏忓鑷存墖鍖哄お灏忓奖鍝嶄氦浜�
+            avoidLabelOverlap: true, // 鏄惁鍚敤闃叉鏍囩閲嶅彔绛栫暐
+            itemStyle: {
+              normal: {
+                label: {
+                  show: true,
+                  formatter(param) {
+                    // correct the percentage
+                    return param.name + '\n' + ' ' + param.percent.toFixed(1) + '%';
+                  }
+                },
+                labelLine: {
+                  show: true,
+                  length: 0.01
+                }
+              }
+            },
+            data: [
+              { value: 1048, name: '鍜ㄨ' },
+              { value: 735, name: '鍛婅' },
+              { value: 580, name: '鏁呴殰' },
+              { value: 580, name: '鏈嶅姟璇锋眰' },
+              { value: 580, name: '鐢冲憡' },
+
+
+            ]
+          }]
+      };
+      this.options && this.myChart.setOption(this.options);
+    },
+    changeWidth() {
+      this.myChart.resize();
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+#main4 {
+  width: 100%;
+  height: 300px;
+}
+
+.box-card {
+  margin-top: 10px;
+  width: 100%;
+  border-radius: 10px;
+  border: none;
+  .card-title-right {
+    display: flex;
+    align-items: center;
+    align-self: flex-end;
+    float: right;
+  }
+}
+</style>
diff --git a/project-web/src/views/dashboard/components/XMGZD.vue b/project-web/src/views/dashboard/components/XMGZD.vue
new file mode 100644
index 0000000..0151ea9
--- /dev/null
+++ b/project-web/src/views/dashboard/components/XMGZD.vue
@@ -0,0 +1,261 @@
+<template>
+  <div style="width: 100%">
+    <el-card class="box-card">
+      <div slot="header" class="clearfix">
+        <span style="font-weight: 600; font-size: 20px">椤圭洰宸ヤ綔鍗曠粺璁�</span>
+        <div class="card-title-right">
+          <div :style="{ color: weekFlag ? '#378cff' : '' }" @click="changeDate(1)">杩�7澶�</div>
+          <div :style="{ color: monthFlag ? '#378cff' : '' }" style="margin: 0 30px 0 10px" @click="changeDate(2)">
+            杩�30澶�
+          </div>
+          <el-date-picker
+            v-model="value2"
+            type="daterange"
+            :picker-options="pickerOptions"
+            range-separator="鑷�"
+            start-placeholder="寮�濮嬫棩鏈�"
+            end-placeholder="缁撴潫鏃ユ湡"
+            align="right"
+            value-format="yyyyMMdd"
+          />
+          <el-button type="primary" style="margin-left: 10px" @click="searchOnClick">鎼滅储</el-button>
+        </div>
+      </div>
+      <div id="main" />
+    </el-card>
+  </div>
+</template>
+<script>
+import * as echarts from 'echarts';
+import * as dash from '@/api/dashboard/dash';
+
+export default {
+  name: 'XMGZD',
+  props: {
+    activeId: {
+      type: String,
+      default: '',
+    },
+  },
+  data() {
+    return {
+      pickerOptions: {
+        shortcuts: [
+          {
+            text: '鏈�杩戜竴鍛�',
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+              picker.$emit('pick', [start, end]);
+            },
+          },
+          {
+            text: '鏈�杩戜竴涓湀',
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+              picker.$emit('pick', [start, end]);
+            },
+          },
+          {
+            text: '鏈�杩戜笁涓湀',
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
+              picker.$emit('pick', [start, end]);
+            },
+          },
+        ],
+      },
+      value2: '',
+      myChart: null,
+      weekFlag: 1, // 杩戜竷澶�
+      monthFlag: null, // 杩�30澶�
+      options: {},
+    };
+  },
+  mounted() {
+    this.getCenterLine();
+    // 鐩戝惉灞忓箷瀹藉害鍙樺寲锛氬綋娴忚鍣ㄥ彂鐢焤esize浜嬩欢鐨勬椂鍊欙紝瑙﹀彂echart鐨剅esize浜嬩欢锛岄噸缁榗anvas
+    window.addEventListener('resize', () => {
+      this.changeWidth();
+    });
+    this.getProjectInfo();
+  },
+  created() {},
+  methods: {
+    changeDate(type) {
+      if (type == 1) {
+        this.monthFlag = null;
+        if (this.weekFlag) {
+          this.weekFlag = null;
+        } else {
+          this.weekFlag = 1;
+        }
+        if (this.weekFlag) {
+          this.monthFlag = null;
+          this.value2 = [];
+        }
+        this.searchByTime();
+      }
+      if (type == 2) {
+        this.weekFlag = null;
+        if (this.monthFlag) {
+          this.monthFlag = null;
+        } else {
+          this.monthFlag = 1;
+        }
+        if (this.monthFlag) {
+          this.weekFlag = null;
+          this.value2 = [];
+        }
+        this.searchByTime();
+      }
+    },
+    searchOnClick() {
+      this.monthFlag = null;
+      this.weekFlag = null;
+      this.searchByTime();
+    },
+    getProjectInfo() {
+      //鑾峰彇椤圭洰鏁版嵁
+      dash.getNumByProject().then((res) => {
+        if (res) {
+          this.projectInfo = res;
+          this.options.xAxis[0].data = this.projectInfo.projjectName;
+          // 浜嬩欢鏁伴噺
+          this.options.series[0].data = this.projectInfo.eventNum;
+          // 宸ュ崟鏁伴噺
+          this.options.series[1].data = this.projectInfo.workNum;
+          this.myChart.setOption(this.options);
+        }
+      });
+    },
+    searchByTime() {
+      var param = {};
+      if (this.value2 != null && this.value2.length > 0) {
+        param.begin = this.value2[0];
+        param.end = this.value2[1];
+      }
+
+      if (this.weekFlag != null) {
+        param.weekFlag = this.weekFlag;
+      }
+      if (this.monthFlag != null) {
+        param.monthFlag = this.monthFlag;
+      }
+      dash.getNumByProject(param).then((res) => {
+        if (res) {
+          this.projectInfo = res;
+          this.options.xAxis[0].data = this.projectInfo.projjectName;
+          // 浜嬩欢鏁伴噺
+          this.options.series[0].data = this.projectInfo.eventNum;
+          // 宸ュ崟鏁伴噺
+          this.options.series[1].data = this.projectInfo.workNum;
+          this.myChart.setOption(this.options);
+        }
+      });
+    },
+    getCenterLine() {
+      // getCenterLine({
+      //   id: this.activeId,
+      //   weekFlag: this.weekFlag,
+      //   monthFlag: this.monthFlag,
+      //   startDay: this.value2 ? this.value2[0] : null,
+      //   endDay: this.value2 ? this.value2[1] : null
+      // }).then(res => {
+      //   const data = res.data
+      var chartDom = document.getElementById('main');
+      this.myChart = echarts.init(chartDom);
+      this.options = {
+        color: ['#5EDEA5', '#1877FF'],
+        tooltip: {
+          trigger: 'axis',
+          axisPointer: {
+            type: 'shadow',
+          },
+        },
+        legend: {
+          data: ['闂宸ュ崟', '浜嬩欢宸ュ崟'],
+        },
+        toolbox: {
+          show: true,
+          orient: 'vertical',
+          left: 'right',
+          top: 'center',
+          feature: {
+            mark: { show: true },
+            dataView: { show: true, readOnly: false },
+            magicType: { show: true, type: ['line', 'bar', 'stack'] },
+            restore: { show: true },
+            saveAsImage: { show: true },
+          },
+        },
+        xAxis: [
+          {
+            type: 'category',
+            axisTick: { show: false },
+            data: ['棰勭畻涓�浣撳寲骞冲彴', '涓�鍗¢�氱郴缁�', '棰勭畻涓�浣撳寲骞冲彴', '涓�鍗¢�氱郴缁�'],
+          },
+        ],
+        yAxis: [
+          {
+            type: 'value',
+          },
+        ],
+        series: [
+          {
+            name: '浜嬩欢宸ュ崟',
+            type: 'bar',
+            barWidth: 20,
+            barGap: 0,
+            emphasis: {
+              focus: 'series',
+            },
+            data: [320, 332, 301, 334],
+          },
+          {
+            name: '闂宸ュ崟',
+            type: 'bar',
+            barWidth: 20,
+
+            emphasis: {
+              focus: 'series',
+            },
+            data: [220, 182, 191, 234],
+          },
+        ],
+      };
+
+      this.options && this.myChart.setOption(this.options);
+      // });
+    },
+    changeWidth() {
+      this.myChart.resize();
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+#main {
+  width: 100%;
+  height: 400px;
+}
+
+.box-card {
+  margin-top: 10px;
+  width: 100%;
+  border-radius: 10px;
+  border: none;
+
+  .card-title-right {
+    display: flex;
+    align-items: center;
+    align-self: flex-end;
+    float: right;
+  }
+}
+</style>
diff --git a/project-web/src/views/dashboard/components/XYZC.vue b/project-web/src/views/dashboard/components/XYZC.vue
new file mode 100644
index 0000000..5066119
--- /dev/null
+++ b/project-web/src/views/dashboard/components/XYZC.vue
@@ -0,0 +1,243 @@
+<template>
+  <div style="width: 100%">
+    <el-card class="box-card">
+      <div slot="header" class="clearfix">
+        <span style="font-weight: 600; font-size: 20px">鍝嶅簲鏀寔绫荤粺璁�</span>
+        <div class="card-title-right">
+          <div :style="{ color: weekFlag ? '#378cff' : '' }" @click="changeDate(1)">杩�7澶�</div>
+          <div :style="{ color: monthFlag ? '#378cff' : '' }" style="margin: 0 30px 0 10px" @click="changeDate(2)">
+            杩�30澶�
+          </div>
+          <el-date-picker
+            v-model="value2"
+            type="daterange"
+            :picker-options="pickerOptions"
+            range-separator="鑷�"
+            start-placeholder="寮�濮嬫棩鏈�"
+            end-placeholder="缁撴潫鏃ユ湡"
+            align="right"
+            value-format="yyyyMMdd"
+          />
+          <el-button type="primary" style="margin-left: 10px" @click="getCenterLine">鎼滅储</el-button>
+        </div>
+      </div>
+      <div id="main1" />
+    </el-card>
+  </div>
+</template>
+<script>
+import * as echarts from 'echarts';
+
+export default {
+  name: 'XYZC',
+  props: {
+    activeId: {
+      type: String,
+      default: '',
+    },
+  },
+  data() {
+    return {
+      pickerOptions: {
+        shortcuts: [
+          {
+            text: '鏈�杩戜竴鍛�',
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+              picker.$emit('pick', [start, end]);
+            },
+          },
+          {
+            text: '鏈�杩戜竴涓湀',
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+              picker.$emit('pick', [start, end]);
+            },
+          },
+          {
+            text: '鏈�杩戜笁涓湀',
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
+              picker.$emit('pick', [start, end]);
+            },
+          },
+        ],
+      },
+      value2: '',
+      myChart: null,
+      weekFlag: 1, // 杩戜竷澶�
+      monthFlag: null, // 杩�30澶�
+      options: {},
+    };
+  },
+  mounted() {
+    this.getCenterLine();
+    // 鐩戝惉灞忓箷瀹藉害鍙樺寲锛氬綋娴忚鍣ㄥ彂鐢焤esize浜嬩欢鐨勬椂鍊欙紝瑙﹀彂echart鐨剅esize浜嬩欢锛岄噸缁榗anvas
+    window.addEventListener('resize', () => {
+      this.changeWidth();
+    });
+  },
+  methods: {
+    changeDate(type) {
+      if (type == 1) {
+        this.monthFlag = null;
+        if (this.weekFlag) {
+          this.weekFlag = null;
+        } else {
+          this.weekFlag = 1;
+        }
+        if (this.weekFlag) {
+          this.monthFlag = null;
+          this.value2 = [];
+        }
+        this.getCenterLine();
+      }
+      if (type == 2) {
+        this.weekFlag = null;
+        if (this.monthFlag) {
+          this.monthFlag = null;
+        } else {
+          this.monthFlag = 1;
+        }
+        if (this.monthFlag) {
+          this.weekFlag = null;
+          this.value2 = [];
+        }
+        this.getCenterLine();
+      }
+    },
+    getCenterLine() {
+      // getCenterLine({
+      //   id: this.activeId,
+      //   weekFlag: this.weekFlag,
+      //   monthFlag: this.monthFlag,
+      //   startDay: this.value2 ? this.value2[0] : null,
+      //   endDay: this.value2 ? this.value2[1] : null
+      // }).then(res => {
+      //   const data = res.data
+      var chartDom = document.getElementById('main1');
+      this.myChart = echarts.init(chartDom);
+      this.options = {
+        color: ['#ED653B', '#1877FF'],
+        tooltip: {
+          trigger: 'axis',
+          axisPointer: {
+            type: 'shadow',
+          },
+        },
+        legend: {
+          data: ['鍝嶅簲閫熷害', '澶勭悊閫熷害'],
+        },
+        toolbox: {
+          show: true,
+          orient: 'vertical',
+          left: 'right',
+          top: 'center',
+          feature: {
+            mark: { show: true },
+            dataView: { show: true, readOnly: false },
+            magicType: { show: true, type: ['line', 'bar', 'stack'] },
+            restore: { show: true },
+            saveAsImage: { show: true },
+          },
+        },
+        xAxis: [
+          {
+            type: 'category',
+            axisTick: { show: false },
+            data: [
+              '12-01',
+              '12-02',
+              '12-03',
+              '12-04',
+              '12-05',
+              '12-06',
+              '12-07',
+              '12-08',
+              '12-09',
+              '12-10',
+              '12-11',
+              '12-12',
+            ],
+          },
+        ],
+        yAxis: [
+          {
+            type: 'value',
+          },
+        ],
+        dataZoom: [
+          {
+            orient: 'horizontal',
+
+            show: true, //鎺у埗婊氬姩鏉℃樉绀洪殣钘�
+
+            realtime: true, //鎷栧姩婊氬姩鏉℃椂鏄惁鍔ㄦ�佺殑鏇存柊鍥捐〃鏁版嵁
+
+            height: 15, //婊氬姩鏉¢珮搴�
+
+            start: 0, //婊氬姩鏉″紑濮嬩綅缃紙鍏�100绛変唤锛�
+            //
+            // end: 30, //婊氬姩鏉$粨鏉熶綅缃�
+            bottom: '4%',
+            zoomLock: true, //鎺у埗闈㈡澘鏄惁杩涜缂╂斁
+          }
+        ],
+
+        series: [
+          {
+            name: '鍝嶅簲閫熷害',
+            type: 'line',
+            barGap: 0,
+            smooth: true,
+            emphasis: {
+              focus: 'series',
+            },
+            data: [320, 332, 301, 334, 320, 332, 301, 334, 320, 332, 301, 334],
+          },
+          {
+            name: '澶勭悊閫熷害',
+            type: 'line',
+            smooth: true,
+            emphasis: {
+              focus: 'series',
+            },
+            data: [220, 182, 191, 234, 220, 182, 191, 234, 220, 182, 191, 234],
+          },
+        ],
+      };
+
+      this.options && this.myChart.setOption(this.options);
+      // });
+    },
+    changeWidth() {
+      this.myChart.resize();
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+#main1 {
+  width: 100%;
+  height: 400px;
+}
+
+.box-card {
+  margin-top: 10px;
+  width: 100%;
+  border-radius: 10px;
+  border: none;
+  .card-title-right {
+    display: flex;
+    align-items: center;
+    align-self: flex-end;
+    float: right;
+  }
+}
+</style>
diff --git a/project-web/src/views/dashboard/components/progressMY.vue b/project-web/src/views/dashboard/components/progressMY.vue
new file mode 100644
index 0000000..fbe7ea8
--- /dev/null
+++ b/project-web/src/views/dashboard/components/progressMY.vue
@@ -0,0 +1,80 @@
+<template>
+  <div class="container">
+    <div class="box">
+      <div class="flex">
+        <span>寰呭搷搴�</span>
+        <el-progress style="flex: 1;margin-left: 10px" :text-inside="true" :stroke-width="26" :percentage="this.projectInfo.poolBi"></el-progress>
+      </div>
+      <div class="flex">
+        <span>杩涜涓�</span>
+        <el-progress
+          style="flex: 1;margin-left: 10px"
+          :text-inside="true"
+          :stroke-width="24"
+          :percentage="this.projectInfo.doBi"
+          status="success"
+        ></el-progress>
+      </div>
+      <div class="flex">
+        <span>宸插鐞�</span>
+        <el-progress
+          :text-inside="true"
+          style="flex: 1;margin-left: 10px"
+          :stroke-width="20"
+          :percentage="this.projectInfo.doneBi"
+          status="exception"
+        ></el-progress>
+      </div>
+      <div class="flex">
+        <span>宸插彇娑�</span>
+        <el-progress
+          :text-inside="true"
+          style="flex: 1;margin-left: 10px"
+          :stroke-width="20"
+          :percentage="this.projectInfo.noBi"
+          status="warning"
+        ></el-progress>
+      </div>
+    </div>
+    <p style="text-align: center;font-size: 16px;font-weight: 600">娴佺▼鍗犳瘮</p>
+  </div>
+</template>
+
+<script>
+import * as dash from "@/api/dashboard/dash";
+
+export default {
+  name: 'progressMY',
+  data() {
+    return {
+      projectInfo: {},
+
+    }
+  },
+  mounted() {
+    dash.getProcess().then(res => {
+      if (res) {
+        this.projectInfo = res
+      }
+    })
+  }
+};
+
+
+
+</script>
+
+<style scoped>
+
+.box {
+  width: 100%;
+  height: 300px;
+
+  transform: translateY(30%);
+}
+.flex {
+  display: flex;
+  align-items: center;
+  margin-bottom: 20px;
+}
+</style>
diff --git a/project-web/src/views/dashboard/index.vue b/project-web/src/views/dashboard/index.vue
new file mode 100644
index 0000000..c65a195
--- /dev/null
+++ b/project-web/src/views/dashboard/index.vue
@@ -0,0 +1,302 @@
+<template>
+  <div class="content">
+<!--    <el-row :gutter="10">
+      <el-col :span="12">
+        <el-row :gutter="10">
+          <el-col :span="8">
+            <div class="flex bg-fff box flex-between">
+              <div class="flex f-c f-col">
+                <img class="icon" src="@/assets/images/index/qbgd.png"></img>
+                <span>鍏ㄩ儴宸ュ崟</span>
+              </div>
+              <div class="flex f-e f-col">
+                <div class="font-28">20<span class="font-12">涓�</span> </div>
+                <div><img class='arrow' src="@/assets/images/index/top.png"></img> 鐜瘮涓婂懆</div>
+              </div>
+            </div>
+          </el-col>
+          <el-col :span="8">
+            <div class="flex bg-fff box flex-between">
+              <div class="flex f-c f-col">
+                <img class="icon" src="@/assets/images/index/gdc.png"></img>
+                <span>宸ュ崟姹�</span>
+              </div>
+              <div class="flex f-e f-col">
+                <div class="font-28">2<span class="font-12">涓�</span> </div>
+                <div><img class='arrow' src="@/assets/images/index/top.png"></img> 鐜瘮涓婂懆</div>
+              </div>
+            </div>
+          </el-col>
+          <el-col :span="8">
+            <div class="flex bg-fff box flex-between">
+              <div class="flex f-c f-col">
+                <img class="icon" src="@/assets/images/index/gdc.png"></img>
+                <span>寰呭搷搴斿伐鍗�</span>
+              </div>
+              <div class="flex f-e f-col">
+                <div class="font-28">1<span class="font-12">涓�</span> </div>
+                <div><img class='arrow' src="@/assets/images/index/top.png"></img> 鐜瘮涓婂懆</div>
+              </div>
+            </div>
+          </el-col>
+        </el-row>
+      </el-col>
+      <el-col :span="12">
+        <el-row :gutter="10">
+          <el-col :span="8">
+            <div class="flex bg-fff box flex-between">
+              <div class="flex f-c f-col">
+                <img class="icon" src="@/assets/images/index/jxzgd.png"></img>
+                <span>杩涜涓伐鍗�</span>
+              </div>
+              <div class="flex f-e f-col">
+                <div class="font-28">3<span class="font-12">涓�</span> </div>
+                <div><img class='arrow' src="@/assets/images/index/top.png"></img> 鐜瘮涓婂懆</div>
+              </div>
+            </div>
+          </el-col>
+          <el-col :span="8">
+            <div class="flex bg-fff box flex-between">
+              <div class="flex f-c f-col">
+                <img class="icon" src="@/assets/images/index/gdc.png"></img>
+                <span>浜嬩欢姹�</span>
+              </div>
+              <div class="flex f-e f-col">
+                <div class="font-28">{{eventInfo.pool}}<span class="font-12">涓�</span> </div>
+                <div>
+                  <img v-if="eventInfo.poolLastNum>=0" class='arrow' src="@/assets/images/index/top.png"></img>
+                  <img  v-if="eventInfo.poolLastNum<0" class='arrow' src="@/assets/images/index/down.png"></img>
+                  鐜瘮涓婂懆</div>
+              </div>
+            </div>
+          </el-col>
+          <el-col :span="8">
+            <div class="flex bg-fff box flex-between">
+              <div class="flex f-c f-col">
+                <img class="icon" src="@/assets/images/index/dxy.png"></img>
+                <span>杩涜涓簨浠�</span>
+              </div>
+              <div class="flex f-e f-col">
+                <div class="font-28">{{eventInfo.wait}}<span class="font-12">涓�</span> </div>
+                <div>
+                  <img v-if="eventInfo.waitLastNum>=0" class='arrow' src="@/assets/images/index/top.png"></img>
+                  <img  v-if="eventInfo.waitLastNum<0" class='arrow' src="@/assets/images/index/down.png"></img>
+                  鐜瘮涓婂懆</div>
+              </div>
+            </div>
+          </el-col>
+        </el-row>
+      </el-col>
+    </el-row>
+
+    <el-row :gutter="10" style="margin-top: 10px">
+      <el-col :span="12">
+        <el-row :gutter="10">
+          <el-col :span="8">
+            <div class="flex bg-fff box flex-between">
+              <div class="flex f-c f-col">
+                <img class="icon" src="@/assets/images/index/wtc.png"></img>
+                <span>闂姹�</span>
+              </div>
+              <div class="flex f-e f-col">
+                <div class="font-28">0<span class="font-12">涓�</span> </div>
+                <div><img class='arrow' src="@/assets/images/index/top.png"></img> 鐜瘮涓婂懆</div>
+              </div>
+            </div>
+          </el-col>
+          <el-col :span="8">
+            <div class="flex bg-fff box flex-between">
+              <div class="flex f-c f-col">
+                <img class="icon" src="@/assets/images/index/dxy.png"></img>
+                <span>寰呭搷搴旈棶棰�</span>
+              </div>
+              <div class="flex f-e f-col">
+                <div class="font-28">0<span class="font-12">涓�</span> </div>
+                <div><img class='arrow' src="@/assets/images/index/top.png"></img> 鐜瘮涓婂懆</div>
+              </div>
+            </div>
+          </el-col>
+          <el-col :span="8">
+            <div class="flex bg-fff box flex-between">
+              <div class="flex f-c f-col">
+                <img class="icon" src="@/assets/images/index/gdc.png"></img>
+                <span>鍙樻洿宸ュ崟</span>
+              </div>
+              <div class="flex f-e f-col">
+                <div class="font-28">0<span class="font-12">涓�</span> </div>
+                <div><img class='arrow' src="@/assets/images/index/top.png"></img> 鐜瘮涓婂懆</div>
+              </div>
+            </div>
+          </el-col>
+        </el-row>
+      </el-col>
+      <el-col :span="12">
+        <el-row :gutter="10">
+          <el-col :span="8">
+            <div class="flex bg-fff box flex-between">
+              <div class="flex f-c f-col">
+                <img class="icon" src="@/assets/images/index/dxy.png"></img>
+                <span>寰呭搷搴斿彉鏇�</span>
+              </div>
+              <div class="flex f-e f-col">
+                <div class="font-28">0<span class="font-12">涓�</span> </div>
+                <div><img class='arrow' src="@/assets/images/index/top.png"></img> 鐜瘮涓婂懆</div>
+              </div>
+            </div>
+          </el-col>
+          <el-col :span="8">
+            <div class="flex bg-fff box flex-between">
+              <div class="flex f-c f-col">
+                <img class="icon" src="@/assets/images/index/fbgd.png"></img>
+                <span>鍙戝竷宸ュ崟</span>
+              </div>
+              <div class="flex f-e f-col">
+                <div class="font-28">2<span class="font-12">涓�</span> </div>
+                <div><img class='arrow' src="@/assets/images/index/top.png"></img> 鐜瘮涓婂懆</div>
+              </div>
+            </div>
+          </el-col>
+          <el-col :span="8">
+            <div class="flex bg-fff box flex-between">
+              <div class="flex f-c f-col">
+                <img class="icon" src="@/assets/images/index/dxy.png"></img>
+                <span>寰呭搷搴斿彂甯�</span>
+              </div>
+              <div class="flex f-e f-col">
+                <div class="font-28">5<span class="font-12">涓�</span> </div>
+                <div><img class='arrow' src="@/assets/images/index/top.png"></img> 鐜瘮涓婂懆</div>
+              </div>
+            </div>
+          </el-col>
+        </el-row>
+      </el-col>
+    </el-row>
+    <el-row :gutter="10">
+      <el-col :span="12">
+        <XMGZD></XMGZD>
+      </el-col>
+      <el-col :span="12">
+        <XYZC></XYZC>
+      </el-col>
+    </el-row>
+    <el-card class="box-card">
+
+        <span style="font-weight: 600;font-size: 20px">宸ュ崟缁熻</span>
+
+      <el-row :gutter="10">
+        <el-col :span="6">
+          <SJDJ></SJDJ>
+        </el-col>
+        <el-col :span="6">
+        <GDLX></GDLX>
+        </el-col>
+        <el-col :span="6">
+          <SJGDZB></SJGDZB>
+        </el-col>
+        <el-col :span="6">
+          <progressMY></progressMY>
+        </el-col>
+      </el-row>
+
+    </el-card>-->
+  </div>
+</template>
+
+<script>
+// 鍒涘缓Context
+import {formattedDate} from "@/utils/DateFormatter";
+import * as dash from '@/api/dashboard/dash'
+// import * as createEvent from "@/api/eventManage/createEvent";
+const ComponentContext = require.context('./components', false, /\.vue$/i);
+let res_components = {};
+// 鐢熸垚寰呭緟娉ㄥ唽缁勪欢闆嗗悎
+ComponentContext.keys().forEach((componentFilePath) => {
+  let comp = ComponentContext(componentFilePath);
+  res_components[componentFilePath.replace(/^\.\/(.*)\.\w+$/, '$1')] = comp.default;
+});
+export default {
+  name: 'Dashboard',
+  components: {...res_components},
+  data() {
+    return {
+      eventInfo:{}
+    };
+  },
+  created() {
+    // this.getEventInfo()
+
+  },
+  methods: {
+       // 鑾峰彇浜嬩欢鏁版嵁
+       getEventInfo(){
+         dash.getEventInfo().then(res => {
+           if (res) {
+             this.eventInfo = res
+           }
+         })
+       }
+  }
+
+};
+</script>
+<style lang="scss" scoped>
+.content{
+  padding:10px
+}
+.box{
+  border-radius: 10px;
+  padding: 20px 0;
+  align-items: flex-end;
+}
+.flex{
+  display: flex;
+}
+.flex-between{
+  justify-content: space-around;
+}
+.f-col{
+  flex-direction: column;
+}
+.f-c{
+  align-items: center;
+}
+.f-e{
+  align-items: flex-end;
+}
+.f-s{
+  align-items: flex-start;
+}
+.c-1{
+  color: #11AD6F;
+}
+.c-f{
+  color: #FF4B4B;
+}
+.font-28{
+  font-size: 28px;
+}
+.font-12{
+  font-size: 12px;
+}
+.icon{
+  width: 30px;
+  height: 30px;
+  margin-bottom: 10px;
+}
+.arrow{
+  width: 12px;
+  height: 12px;
+}
+.box-card {
+  margin-top: 10px;
+  width: 100%;
+  border-radius: 10px;
+  border: none;
+  .card-title-right {
+    display: flex;
+    align-items: center;
+    align-self: flex-end;
+    float: right;
+  }
+}
+</style>
diff --git a/project-web/src/views/dataV/components/batchPlan.vue b/project-web/src/views/dataV/components/batchPlan.vue
new file mode 100644
index 0000000..5f22008
--- /dev/null
+++ b/project-web/src/views/dataV/components/batchPlan.vue
@@ -0,0 +1,124 @@
+<template>
+  <div v-loading="loading" style="width: 100%; height: 192px; position: relative">
+    <div style="width: 100%; height: 100%" ref="batchPlan"></div>
+    <div class="title-box">
+      <p class="num">100%</p>
+      <p>鎵规璁″垝</p>
+    </div>
+    <div class="tag-box">
+      <div class="item-box" v-for="(item, index) in dataList" :key="index">
+        <div class="example" :style="{ background: item.color }"></div>
+        <div class="name">{{ item.name }}</div>
+        <div class="value">{{ item.value }}%</div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import dataVRequest from '@/api/dataV.js';
+import echarts from 'echarts';
+
+export default {
+  name: 'batch-plan',
+  data() {
+    return {
+      loading: true,
+      dataList: [],
+      colorList: ['#70B1F6', '#077CF2', '#1DD5A5', '#E6C364', '#E56A3D'],
+    };
+  },
+  mounted() {
+    // 鐩戝惉灞忓箷瀹藉害鍙樺寲锛氬綋娴忚鍣ㄥ彂鐢焤esize浜嬩欢鐨勬椂鍊欙紝瑙﹀彂echart鐨剅esize浜嬩欢锛岄噸缁榗anvas
+
+    // 鍩轰簬鍑嗗濂界殑dom锛屽垵濮嬪寲echarts瀹炰緥
+    const batchPlan = echarts.init(this.$refs.batchPlan);
+    window.addEventListener('resize', () => {
+      this.$nextTick(() => {
+        batchPlan.resize();
+      });
+    });
+    // 鏌ヨ鏁版嵁
+    dataVRequest.queryProjectNumByBatch().then((res) => {
+      this.loading = false;
+      this.dataList = res.map((item, index) => ({
+        ...item,
+        value: item.num,
+        name: item.projectBatchName,
+        color: this.colorList[index],
+      }));
+      // 缁樺埗鍥捐〃
+      batchPlan.setOption({
+        color: this.colorList,
+        tooltip: {
+          trigger: 'item',
+        },
+        grid: {
+          right: 200,
+          top: 30,
+        },
+        series: [
+          {
+            type: 'pie',
+            radius: ['60%', '90%'],
+            center: ['160', '95'],
+            avoidLabelOverlap: false,
+            label: {
+              show: false,
+              position: 'center',
+            },
+            labelLine: {
+              show: false,
+            },
+            data: this.dataList,
+          },
+        ],
+      });
+    });
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.title-box {
+  color: #fff;
+  font-size: 16px;
+  position: absolute;
+  left: 127px;
+  top: 75px;
+  text-align: center;
+
+  .num {
+    font-size: 20px;
+    font-weight: bold;
+  }
+}
+.tag-box {
+  position: absolute;
+  right: 60px;
+  top: 50%;
+  transform: translateY(-50%);
+  font-size: 18px;
+
+  .item-box {
+    display: flex;
+    align-items: center;
+    margin-bottom: 15px;
+  }
+
+  .example {
+    width: 10px;
+    height: 10px;
+    margin-right: 10px;
+  }
+
+  .name {
+    margin-right: 25px;
+    color: rgba(255, 255, 255, 0.74);
+  }
+
+  .value {
+    color: #cd963f;
+  }
+}
+</style>
diff --git a/project-web/src/views/dataV/components/cityScore.vue b/project-web/src/views/dataV/components/cityScore.vue
new file mode 100644
index 0000000..1d921d1
--- /dev/null
+++ b/project-web/src/views/dataV/components/cityScore.vue
@@ -0,0 +1,214 @@
+<template>
+  <div class="module-box">
+    <div class="chang-btn"
+      @click="
+        isUp = !isUp;
+        setOption();
+      "
+    >
+      {{ isUp ? '鍗囧簭鈻�' : '闄嶅簭鈻�' }}
+    </div>
+    <div class="city-score" ref="cityScore"></div>
+  </div>
+</template>
+
+<script>
+import echarts from 'echarts';
+let cityChart = null;
+export default {
+  name: 'city-score',
+  data() {
+    return {
+      isUp: true, // 褰撳墠鏄惁涓哄崌搴�
+      // 缂撳瓨涓嬫潵鐨勫紓姝ヨ幏鍙栫殑鏁版嵁鍒楄〃
+      dataList: [
+        {
+          name: '閮戝窞',
+          score: 153,
+        },
+        {
+          name: '娲涢槼',
+          score: 153,
+        },
+        {
+          name: '鍗楅槼',
+          score: 243,
+        },
+        {
+          name: '淇¢槼',
+          score: 53,
+        },
+      ],
+    };
+  },
+  methods: {
+    // 缁樺埗鍥捐〃
+    setOption() {
+      if (!cityChart) {
+        return;
+      }
+      const sortArr = this.dataList.sort((a, b) => (this.isUp ? a.score - b.score : b.score - a.score)); // 鎺掑簭鍚庣殑鏁版嵁鍒楄〃
+      const nameArr = sortArr.map((i) => i.name);
+      const dataArr = sortArr.map((i) => i.score);
+      let maxScore = Math.floor(Math.max(...dataArr) * 1.4); // 涓轰簡瑙嗚闃村奖鏁堟灉  鐣欑偣浣欏湴
+      maxScore = sortArr.map(() => maxScore);
+      cityChart.setOption({
+        tooltip: {
+          trigger: 'axis',
+        },
+        grid: {
+          right: 20,
+          left: 50,
+          top: 30,
+          bottom: 20,
+        },
+        xAxis: [
+          {
+            type: 'category',
+            axisLine: {
+              lineStyle: {
+                color: '#0D496E',
+              },
+            },
+            axisLabel: {
+              show: true,
+              textStyle: {
+                fontSize: 12,
+                color: '#ADB1B4',
+              },
+            },
+            data: nameArr,
+          },
+          // 鐢熸垚鑳屾櫙闃村奖闇�瑕�
+          {
+            type: 'category',
+            show: false,
+            data: nameArr,
+          },
+        ],
+        yAxis: {
+          type: 'value',
+          splitLine: {
+            show: false,
+          },
+          axisLine: {
+            show: false,
+          },
+          axisLabel: {
+            show: true,
+            textStyle: {
+              fontSize: 12,
+              color: '#ADB1B4',
+            },
+          },
+        },
+        series: [
+          {
+            name: '璇勫垎',
+            data: dataArr,
+            type: 'pictorialBar',
+            barWidth: 48,
+            symbol: 'triangle',
+            label: {
+              show: true,
+              position: 'top',
+              textStyle: {
+                fontSize: 16,
+                color: '#fff',
+              },
+            },
+            itemStyle: {
+              color: {
+                type: 'linear',
+                x: 0,
+                y: 0,
+                x2: 0,
+                y2: 1,
+                colorStops: [
+                  {
+                    offset: 0,
+                    color: 'rgba(30, 231, 231, 0.87)', // 0% 澶勭殑棰滆壊
+                  },
+                  {
+                    offset: 1,
+                    color: 'rgba(30, 231, 231, 0)', // 100% 澶勭殑棰滆壊
+                  },
+                ],
+                global: false, // 缂虹渷涓� false
+              },
+            },
+          },
+          // 鍒堕�犺儗鏅槾褰�
+          {
+            tooltip: {
+              show: false,
+            },
+            xAxisIndex: 1,
+            itemStyle: {
+              color: 'rgba(180, 180, 180, 0.2)',
+            },
+            data: maxScore,
+            barWidth: 48,
+            emphasis: {
+              itemStyle: {
+                color: {
+                  type: 'linear',
+                  x: 0,
+                  x2: 0,
+                  y: 0,
+                  y2: 1,
+                  colorStops: [
+                    {
+                      offset: 0,
+                      color: 'rgba(64, 247, 176, 0.25)',
+                    },
+                    {
+                      offset: 1,
+                      color: 'rgba(17, 34, 64, 0.25)',
+                    },
+                  ],
+                },
+              },
+            },
+            type: 'bar',
+          },
+        ],
+      });
+    },
+  },
+  mounted() {
+    // 鐩戝惉灞忓箷瀹藉害鍙樺寲锛氬綋娴忚鍣ㄥ彂鐢焤esize浜嬩欢鐨勬椂鍊欙紝瑙﹀彂echart鐨剅esize浜嬩欢锛岄噸缁榗anvas
+    // 鍩轰簬鍑嗗濂界殑dom锛屽垵濮嬪寲echarts瀹炰緥
+    cityChart = echarts.init(this.$refs.cityScore);
+    window.addEventListener('resize', () => {
+      this.$nextTick(() => {
+        cityChart.resize();
+      });
+    });
+    this.setOption();
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.module-box {
+  width: 100%;
+  height: 100%;
+  position: relative;
+}
+.city-score {
+  width: 100%;
+  height: 100%;
+}
+
+.chang-btn {
+  position: absolute;
+  white-space: nowrap;
+  right: -5px;
+  top: -5px;
+  font-size: 14px;
+  color: #ADB1B4;
+  cursor: pointer;
+  z-index: 9;
+}
+</style>
diff --git a/project-web/src/views/dataV/components/dataProgress.vue b/project-web/src/views/dataV/components/dataProgress.vue
new file mode 100644
index 0000000..5795fae
--- /dev/null
+++ b/project-web/src/views/dataV/components/dataProgress.vue
@@ -0,0 +1,59 @@
+<template>
+  <!-- 杩涘害鏉$粍浠� -->
+  <div class="progress-box" :style="{ height: strokeWidth + 'px' }">
+    <div
+      v-if="showBlock"
+      class="the-block"
+      :style="{ left: percentage + '%', width: strokeWidth + 2 + 'px', height: strokeWidth + 2 + 'px' }"
+    ></div>
+    <div :style="{ background: color, width: percentage + '%' }" class="bar"></div>
+  </div>
+</template>
+
+<script>
+export default {
+  props: {
+    // 杩涘害鏉¢鑹�
+    color: {
+      type: String,
+      default: '#000',
+    },
+    // 褰撳墠杩涘害
+    percentage: {
+      type: Number,
+      default: 100,
+    },
+    // 杩涘害鏉″搴�
+    strokeWidth: {
+      type: Number,
+      default: 10,
+    },
+    // 鏄惁鏄剧ず婊戝潡ui
+    showBlock: {
+      type: Boolean,
+      default: false,
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.progress-box {
+  background-color: rgba(208, 222, 238, 0.1);
+  border-radius: 100px;
+  position: relative;
+  .bar {
+    height: 100%;
+    border-radius: 100px;
+  }
+
+  .the-block {
+    border-radius: 50%;
+    background-color: #ffffff;
+    box-shadow: 0px 0px 4px 0px #efd48e;
+    position: absolute;
+    top: 50%;
+    transform: translate(-5%, -50%);
+  }
+}
+</style>
diff --git a/project-web/src/views/dataV/components/henan.json b/project-web/src/views/dataV/components/henan.json
new file mode 100644
index 0000000..4930666
--- /dev/null
+++ b/project-web/src/views/dataV/components/henan.json
@@ -0,0 +1,26701 @@
+{
+  "type": "FeatureCollection",
+  "features": [
+    {
+      "type": "Feature",
+      "properties": {
+        "adcode": 410100,
+        "name": "閮戝窞甯�",
+        "center": [
+          113.665412,
+          34.757975
+        ],
+        "centroid": [
+          113.477391,
+          34.626256
+        ],
+        "childrenNum": 12,
+        "level": "city",
+        "parent": {
+          "adcode": 410000
+        },
+        "subFeatureIndex": 0,
+        "acroutes": [
+          100000,
+          410000
+        ]
+      },
+      "geometry": {
+        "type": "MultiPolygon",
+        "coordinates": [
+          [
+            [
+              [
+                114.22071,
+                34.919066
+              ],
+              [
+                114.208505,
+                34.926602
+              ],
+              [
+                114.200704,
+                34.939504
+              ],
+              [
+                114.172834,
+                34.931871
+              ],
+              [
+                114.160566,
+                34.933496
+              ],
+              [
+                114.120491,
+                34.956638
+              ],
+              [
+                114.101869,
+                34.954768
+              ],
+              [
+                114.080542,
+                34.944527
+              ],
+              [
+                114.051225,
+                34.944527
+              ],
+              [
+                114.028451,
+                34.959346
+              ],
+              [
+                114.018385,
+                34.958608
+              ],
+              [
+                113.985293,
+                34.928276
+              ],
+              [
+                113.973654,
+                34.910447
+              ],
+              [
+                113.953585,
+                34.898082
+              ],
+              [
+                113.905331,
+                34.901333
+              ],
+              [
+                113.870163,
+                34.885666
+              ],
+              [
+                113.826062,
+                34.877683
+              ],
+              [
+                113.800456,
+                34.87995
+              ],
+              [
+                113.78649,
+                34.890445
+              ],
+              [
+                113.777116,
+                34.905028
+              ],
+              [
+                113.766106,
+                34.91488
+              ],
+              [
+                113.749057,
+                34.919017
+              ],
+              [
+                113.725528,
+                34.917392
+              ],
+              [
+                113.716846,
+                34.913402
+              ],
+              [
+                113.684824,
+                34.906358
+              ],
+              [
+                113.670731,
+                34.910299
+              ],
+              [
+                113.665069,
+                34.918525
+              ],
+              [
+                113.650348,
+                34.928769
+              ],
+              [
+                113.631348,
+                34.929311
+              ],
+              [
+                113.592091,
+                34.933743
+              ],
+              [
+                113.57479,
+                34.950583
+              ],
+              [
+                113.552582,
+                34.965155
+              ],
+              [
+                113.543271,
+                34.96801
+              ],
+              [
+                113.515086,
+                34.965992
+              ],
+              [
+                113.495835,
+                34.959937
+              ],
+              [
+                113.477339,
+                34.957278
+              ],
+              [
+                113.449658,
+                34.960232
+              ],
+              [
+                113.429463,
+                34.964761
+              ],
+              [
+                113.427198,
+                34.983563
+              ],
+              [
+                113.407821,
+                34.989518
+              ],
+              [
+                113.37561,
+                34.98002
+              ],
+              [
+                113.362587,
+                34.970323
+              ],
+              [
+                113.343462,
+                34.950533
+              ],
+              [
+                113.333018,
+                34.944871
+              ],
+              [
+                113.315277,
+                34.942212
+              ],
+              [
+                113.28986,
+                34.952601
+              ],
+              [
+                113.260543,
+                34.953586
+              ],
+              [
+                113.243934,
+                34.946201
+              ],
+              [
+                113.239342,
+                34.939504
+              ],
+              [
+                113.236951,
+                34.925174
+              ],
+              [
+                113.227703,
+                34.908427
+              ],
+              [
+                113.197631,
+                34.900299
+              ],
+              [
+                113.179512,
+                34.893697
+              ],
+              [
+                113.139815,
+                34.884631
+              ],
+              [
+                113.14793,
+                34.856096
+              ],
+              [
+                113.119431,
+                34.853977
+              ],
+              [
+                113.107666,
+                34.844709
+              ],
+              [
+                113.06023,
+                34.83756
+              ],
+              [
+                113.039595,
+                34.841948
+              ],
+              [
+                113.025063,
+                34.854913
+              ],
+              [
+                113.004364,
+                34.864081
+              ],
+              [
+                112.992851,
+                34.863539
+              ],
+              [
+                112.989077,
+                34.856343
+              ],
+              [
+                112.976117,
+                34.847765
+              ],
+              [
+                112.943025,
+                34.831102
+              ],
+              [
+                112.938181,
+                34.831595
+              ],
+              [
+                112.914148,
+                34.84747
+              ],
+              [
+                112.902321,
+                34.852301
+              ],
+              [
+                112.884516,
+                34.853089
+              ],
+              [
+                112.879106,
+                34.849688
+              ],
+              [
+                112.873192,
+                34.832827
+              ],
+              [
+                112.866461,
+                34.829524
+              ],
+              [
+                112.853501,
+                34.810736
+              ],
+              [
+                112.838653,
+                34.812116
+              ],
+              [
+                112.827266,
+                34.819218
+              ],
+              [
+                112.814118,
+                34.811475
+              ],
+              [
+                112.80984,
+                34.7951
+              ],
+              [
+                112.810595,
+                34.784938
+              ],
+              [
+                112.817263,
+                34.778278
+              ],
+              [
+                112.837144,
+                34.782915
+              ],
+              [
+                112.846329,
+                34.780054
+              ],
+              [
+                112.875017,
+                34.779659
+              ],
+              [
+                112.887914,
+                34.782718
+              ],
+              [
+                112.89993,
+                34.780596
+              ],
+              [
+                112.909367,
+                34.771123
+              ],
+              [
+                112.908486,
+                34.757405
+              ],
+              [
+                112.902258,
+                34.753161
+              ],
+              [
+                112.909933,
+                34.737465
+              ],
+              [
+                112.939502,
+                34.72384
+              ],
+              [
+                112.931764,
+                34.711694
+              ],
+              [
+                112.91635,
+                34.710953
+              ],
+              [
+                112.901692,
+                34.693521
+              ],
+              [
+                112.893827,
+                34.694953
+              ],
+              [
+                112.879735,
+                34.705077
+              ],
+              [
+                112.867782,
+                34.708089
+              ],
+              [
+                112.8496,
+                34.699694
+              ],
+              [
+                112.830223,
+                34.694163
+              ],
+              [
+                112.829217,
+                34.683346
+              ],
+              [
+                112.835885,
+                34.667785
+              ],
+              [
+                112.831041,
+                34.656669
+              ],
+              [
+                112.847147,
+                34.640362
+              ],
+              [
+                112.841799,
+                34.628648
+              ],
+              [
+                112.825001,
+                34.628698
+              ],
+              [
+                112.82475,
+                34.625188
+              ],
+              [
+                112.840226,
+                34.623161
+              ],
+              [
+                112.845574,
+                34.609913
+              ],
+              [
+                112.839408,
+                34.596514
+              ],
+              [
+                112.846329,
+                34.58885
+              ],
+              [
+                112.862183,
+                34.590284
+              ],
+              [
+                112.864133,
+                34.580146
+              ],
+              [
+                112.877722,
+                34.567731
+              ],
+              [
+                112.87898,
+                34.560015
+              ],
+              [
+                112.890682,
+                34.547102
+              ],
+              [
+                112.910751,
+                34.545173
+              ],
+              [
+                112.929562,
+                34.547548
+              ],
+              [
+                112.952273,
+                34.547647
+              ],
+              [
+                112.967749,
+                34.541264
+              ],
+              [
+                112.984736,
+                34.539038
+              ],
+              [
+                112.976683,
+                34.53117
+              ],
+              [
+                112.947995,
+                34.531467
+              ],
+              [
+                112.929813,
+                34.526023
+              ],
+              [
+                112.925598,
+                34.509789
+              ],
+              [
+                112.927297,
+                34.499691
+              ],
+              [
+                112.920125,
+                34.482016
+              ],
+              [
+                112.922956,
+                34.47657
+              ],
+              [
+                112.905215,
+                34.468201
+              ],
+              [
+                112.896155,
+                34.475827
+              ],
+              [
+                112.862371,
+                34.473648
+              ],
+              [
+                112.856017,
+                34.478402
+              ],
+              [
+                112.838024,
+                34.477164
+              ],
+              [
+                112.806002,
+                34.479243
+              ],
+              [
+                112.798012,
+                34.487166
+              ],
+              [
+                112.774609,
+                34.500137
+              ],
+              [
+                112.767374,
+                34.49479
+              ],
+              [
+                112.740384,
+                34.491077
+              ],
+              [
+                112.744285,
+                34.4683
+              ],
+              [
+                112.741894,
+                34.433973
+              ],
+              [
+                112.736673,
+                34.422578
+              ],
+              [
+                112.729626,
+                34.416978
+              ],
+              [
+                112.735918,
+                34.404242
+              ],
+              [
+                112.733653,
+                34.39309
+              ],
+              [
+                112.72409,
+                34.388877
+              ],
+              [
+                112.721825,
+                34.380152
+              ],
+              [
+                112.730318,
+                34.377426
+              ],
+              [
+                112.728117,
+                34.361163
+              ],
+              [
+                112.732898,
+                34.350898
+              ],
+              [
+                112.756805,
+                34.357394
+              ],
+              [
+                112.760076,
+                34.346584
+              ],
+              [
+                112.776622,
+                34.345046
+              ],
+              [
+                112.787002,
+                34.343261
+              ],
+              [
+                112.788953,
+                34.331158
+              ],
+              [
+                112.81223,
+                34.340037
+              ],
+              [
+                112.824184,
+                34.33344
+              ],
+              [
+                112.83318,
+                34.333638
+              ],
+              [
+                112.854633,
+                34.316325
+              ],
+              [
+                112.842114,
+                34.311612
+              ],
+              [
+                112.84117,
+                34.297818
+              ],
+              [
+                112.856458,
+                34.302185
+              ],
+              [
+                112.87357,
+                34.298016
+              ],
+              [
+                112.884516,
+                34.30144
+              ],
+              [
+                112.91245,
+                34.293749
+              ],
+              [
+                112.936293,
+                34.295535
+              ],
+              [
+                112.954097,
+                34.302135
+              ],
+              [
+                112.960829,
+                34.297867
+              ],
+              [
+                112.992977,
+                34.296478
+              ],
+              [
+                113.013235,
+                34.300398
+              ],
+              [
+                113.020847,
+                34.290424
+              ],
+              [
+                113.027642,
+                34.289282
+              ],
+              [
+                113.037142,
+                34.280299
+              ],
+              [
+                113.059476,
+                34.280944
+              ],
+              [
+                113.075518,
+                34.276527
+              ],
+              [
+                113.082439,
+                34.26645
+              ],
+              [
+                113.097726,
+                34.26223
+              ],
+              [
+                113.109365,
+                34.263471
+              ],
+              [
+                113.142583,
+                34.272804
+              ],
+              [
+                113.15202,
+                34.266351
+              ],
+              [
+                113.175297,
+                34.281639
+              ],
+              [
+                113.184356,
+                34.290225
+              ],
+              [
+                113.18379,
+                34.295634
+              ],
+              [
+                113.196436,
+                34.312257
+              ],
+              [
+                113.210276,
+                34.312009
+              ],
+              [
+                113.223362,
+                34.325057
+              ],
+              [
+                113.224557,
+                34.33473
+              ],
+              [
+                113.235567,
+                34.339045
+              ],
+              [
+                113.267904,
+                34.337805
+              ],
+              [
+                113.276334,
+                34.342814
+              ],
+              [
+                113.276586,
+                34.351444
+              ],
+              [
+                113.314648,
+                34.352287
+              ],
+              [
+                113.314019,
+                34.373856
+              ],
+              [
+                113.320436,
+                34.383375
+              ],
+              [
+                113.315969,
+                34.391157
+              ],
+              [
+                113.32528,
+                34.404986
+              ],
+              [
+                113.348809,
+                34.404738
+              ],
+              [
+                113.353968,
+                34.396411
+              ],
+              [
+                113.370388,
+                34.389918
+              ],
+              [
+                113.366991,
+                34.379805
+              ],
+              [
+                113.389828,
+                34.375988
+              ],
+              [
+                113.401655,
+                34.377525
+              ],
+              [
+                113.414867,
+                34.374947
+              ],
+              [
+                113.406751,
+                34.355213
+              ],
+              [
+                113.414175,
+                34.349361
+              ],
+              [
+                113.429085,
+                34.350303
+              ],
+              [
+                113.459409,
+                34.334432
+              ],
+              [
+                113.471425,
+                34.330811
+              ],
+              [
+                113.482875,
+                34.342864
+              ],
+              [
+                113.498729,
+                34.338598
+              ],
+              [
+                113.510871,
+                34.342715
+              ],
+              [
+                113.518169,
+                34.335771
+              ],
+              [
+                113.516848,
+                34.328579
+              ],
+              [
+                113.529619,
+                34.317913
+              ],
+              [
+                113.556608,
+                34.311513
+              ],
+              [
+                113.566737,
+                34.318359
+              ],
+              [
+                113.579697,
+                34.319897
+              ],
+              [
+                113.600836,
+                34.313299
+              ],
+              [
+                113.608951,
+                34.3132
+              ],
+              [
+                113.624805,
+                34.303375
+              ],
+              [
+                113.634494,
+                34.290026
+              ],
+              [
+                113.643994,
+                34.288488
+              ],
+              [
+                113.658589,
+                34.275037
+              ],
+              [
+                113.669851,
+                34.275385
+              ],
+              [
+                113.679728,
+                34.282532
+              ],
+              [
+                113.70332,
+                34.276725
+              ],
+              [
+                113.7003,
+                34.289381
+              ],
+              [
+                113.71326,
+                34.29092
+              ],
+              [
+                113.713386,
+                34.301391
+              ],
+              [
+                113.727227,
+                34.305757
+              ],
+              [
+                113.736852,
+                34.317863
+              ],
+              [
+                113.756732,
+                34.313795
+              ],
+              [
+                113.777242,
+                34.314589
+              ],
+              [
+                113.793159,
+                34.328083
+              ],
+              [
+                113.791208,
+                34.331803
+              ],
+              [
+                113.803791,
+                34.33721
+              ],
+              [
+                113.832353,
+                34.32342
+              ],
+              [
+                113.848584,
+                34.322725
+              ],
+              [
+                113.85022,
+                34.32719
+              ],
+              [
+                113.880481,
+                34.32972
+              ],
+              [
+                113.885451,
+                34.327785
+              ],
+              [
+                113.888093,
+                34.348369
+              ],
+              [
+                113.879978,
+                34.356056
+              ],
+              [
+                113.885199,
+                34.370485
+              ],
+              [
+                113.878531,
+                34.394577
+              ],
+              [
+                113.878153,
+                34.411478
+              ],
+              [
+                113.891616,
+                34.437342
+              ],
+              [
+                113.903507,
+                34.454185
+              ],
+              [
+                113.912126,
+                34.452352
+              ],
+              [
+                113.915586,
+                34.444922
+              ],
+              [
+                113.929993,
+                34.443485
+              ],
+              [
+                113.938108,
+                34.454729
+              ],
+              [
+                113.948929,
+                34.452699
+              ],
+              [
+                113.948615,
+                34.435063
+              ],
+              [
+                113.968495,
+                34.439324
+              ],
+              [
+                113.990326,
+                34.435707
+              ],
+              [
+                114.006557,
+                34.439225
+              ],
+              [
+                114.019894,
+                34.445368
+              ],
+              [
+                114.021719,
+                34.458989
+              ],
+              [
+                114.01851,
+                34.46721
+              ],
+              [
+                114.008256,
+                34.470082
+              ],
+              [
+                114.009577,
+                34.480135
+              ],
+              [
+                114.0226,
+                34.488552
+              ],
+              [
+                114.035119,
+                34.503998
+              ],
+              [
+                114.062486,
+                34.490532
+              ],
+              [
+                114.07035,
+                34.481472
+              ],
+              [
+                114.083373,
+                34.480927
+              ],
+              [
+                114.094383,
+                34.492265
+              ],
+              [
+                114.093942,
+                34.50182
+              ],
+              [
+                114.100296,
+                34.535178
+              ],
+              [
+                114.107217,
+                34.557887
+              ],
+              [
+                114.118478,
+                34.570155
+              ],
+              [
+                114.129802,
+                34.575348
+              ],
+              [
+                114.127852,
+                34.584943
+              ],
+              [
+                114.133451,
+                34.591025
+              ],
+              [
+                114.136848,
+                34.605711
+              ],
+              [
+                114.125461,
+                34.607886
+              ],
+              [
+                114.127726,
+                34.61718
+              ],
+              [
+                114.14553,
+                34.61456
+              ],
+              [
+                114.145153,
+                34.604277
+              ],
+              [
+                114.15459,
+                34.60576
+              ],
+              [
+                114.15157,
+                34.618268
+              ],
+              [
+                114.157547,
+                34.625979
+              ],
+              [
+                114.150375,
+                34.656669
+              ],
+              [
+                114.160441,
+                34.665611
+              ],
+              [
+                114.157547,
+                34.686507
+              ],
+              [
+                114.158113,
+                34.704336
+              ],
+              [
+                114.141189,
+                34.7191
+              ],
+              [
+                114.138484,
+                34.73475
+              ],
+              [
+                114.158364,
+                34.759379
+              ],
+              [
+                114.172331,
+                34.768311
+              ],
+              [
+                114.161762,
+                34.781238
+              ],
+              [
+                114.134143,
+                34.802154
+              ],
+              [
+                114.122504,
+                34.81833
+              ],
+              [
+                114.133703,
+                34.825628
+              ],
+              [
+                114.162517,
+                34.828883
+              ],
+              [
+                114.185354,
+                34.825628
+              ],
+              [
+                114.199824,
+                34.832729
+              ],
+              [
+                114.211085,
+                34.860877
+              ],
+              [
+                114.220522,
+                34.906801
+              ],
+              [
+                114.22071,
+                34.919066
+              ]
+            ]
+          ]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "adcode": 410200,
+        "name": "寮�灏佸競",
+        "center": [
+          114.341447,
+          34.797049
+        ],
+        "centroid": [
+          114.541763,
+          34.604497
+        ],
+        "childrenNum": 9,
+        "level": "city",
+        "parent": {
+          "adcode": 410000
+        },
+        "subFeatureIndex": 1,
+        "acroutes": [
+          100000,
+          410000
+        ]
+      },
+      "geometry": {
+        "type": "MultiPolygon",
+        "coordinates": [
+          [
+            [
+              [
+                113.885451,
+                34.327785
+              ],
+              [
+                113.894573,
+                34.323767
+              ],
+              [
+                113.899229,
+                34.315879
+              ],
+              [
+                113.896083,
+                34.303375
+              ],
+              [
+                113.904702,
+                34.294543
+              ],
+              [
+                113.916278,
+                34.301688
+              ],
+              [
+                113.934271,
+                34.304864
+              ],
+              [
+                113.937354,
+                34.298612
+              ],
+              [
+                113.964406,
+                34.292954
+              ],
+              [
+                113.96472,
+                34.283128
+              ],
+              [
+                113.972459,
+                34.283426
+              ],
+              [
+                113.977303,
+                34.275583
+              ],
+              [
+                113.992905,
+                34.27335
+              ],
+              [
+                113.990577,
+                34.261138
+              ],
+              [
+                114.000266,
+                34.263471
+              ],
+              [
+                114.00316,
+                34.252549
+              ],
+              [
+                114.011275,
+                34.242022
+              ],
+              [
+                114.041033,
+                34.237851
+              ],
+              [
+                114.050847,
+                34.247137
+              ],
+              [
+                114.058837,
+                34.244753
+              ],
+              [
+                114.068589,
+                34.250265
+              ],
+              [
+                114.076453,
+                34.239639
+              ],
+              [
+                114.081926,
+                34.24952
+              ],
+              [
+                114.098661,
+                34.241923
+              ],
+              [
+                114.10816,
+                34.228813
+              ],
+              [
+                114.102058,
+                34.224343
+              ],
+              [
+                114.108475,
+                34.218929
+              ],
+              [
+                114.109544,
+                34.206958
+              ],
+              [
+                114.122882,
+                34.204176
+              ],
+              [
+                114.129299,
+                34.198214
+              ],
+              [
+                114.155345,
+                34.202039
+              ],
+              [
+                114.160503,
+                34.213564
+              ],
+              [
+                114.198314,
+                34.217737
+              ],
+              [
+                114.202906,
+                34.234623
+              ],
+              [
+                114.210267,
+                34.241228
+              ],
+              [
+                114.246442,
+                34.240433
+              ],
+              [
+                114.259905,
+                34.251854
+              ],
+              [
+                114.267517,
+                34.256968
+              ],
+              [
+                114.274626,
+                34.274889
+              ],
+              [
+                114.287901,
+                34.276527
+              ],
+              [
+                114.301175,
+                34.26774
+              ],
+              [
+                114.328857,
+                34.267294
+              ],
+              [
+                114.344207,
+                34.251804
+              ],
+              [
+                114.356412,
+                34.247186
+              ],
+              [
+                114.385729,
+                34.24386
+              ],
+              [
+                114.405798,
+                34.248031
+              ],
+              [
+                114.417689,
+                34.265308
+              ],
+              [
+                114.434927,
+                34.267145
+              ],
+              [
+                114.440652,
+                34.270719
+              ],
+              [
+                114.455688,
+                34.294096
+              ],
+              [
+                114.442539,
+                34.300696
+              ],
+              [
+                114.430649,
+                34.302284
+              ],
+              [
+                114.424546,
+                34.309032
+              ],
+              [
+                114.434486,
+                34.313894
+              ],
+              [
+                114.436059,
+                34.330265
+              ],
+              [
+                114.427692,
+                34.333837
+              ],
+              [
+                114.439897,
+                34.336366
+              ],
+              [
+                114.438576,
+                34.328033
+              ],
+              [
+                114.452857,
+                34.319997
+              ],
+              [
+                114.46179,
+                34.319947
+              ],
+              [
+                114.462042,
+                34.330166
+              ],
+              [
+                114.479343,
+                34.32962
+              ],
+              [
+                114.485949,
+                34.325057
+              ],
+              [
+                114.493876,
+                34.31191
+              ],
+              [
+                114.509855,
+                34.309727
+              ],
+              [
+                114.519355,
+                34.313448
+              ],
+              [
+                114.524703,
+                34.306253
+              ],
+              [
+                114.528603,
+                34.282234
+              ],
+              [
+                114.551629,
+                34.284964
+              ],
+              [
+                114.551189,
+                34.272059
+              ],
+              [
+                114.556662,
+                34.267989
+              ],
+              [
+                114.58988,
+                34.273747
+              ],
+              [
+                114.602085,
+                34.271017
+              ],
+              [
+                114.611459,
+                34.261088
+              ],
+              [
+                114.634044,
+                34.261883
+              ],
+              [
+                114.647319,
+                34.250315
+              ],
+              [
+                114.667514,
+                34.250265
+              ],
+              [
+                114.679341,
+                34.244307
+              ],
+              [
+                114.702241,
+                34.244505
+              ],
+              [
+                114.71388,
+                34.241327
+              ],
+              [
+                114.723946,
+                34.228018
+              ],
+              [
+                114.730426,
+                34.225237
+              ],
+              [
+                114.752697,
+                34.23363
+              ],
+              [
+                114.758736,
+                34.238397
+              ],
+              [
+                114.76465,
+                34.254436
+              ],
+              [
+                114.781196,
+                34.255627
+              ],
+              [
+                114.788242,
+                34.261138
+              ],
+              [
+                114.812778,
+                34.259003
+              ],
+              [
+                114.8314,
+                34.268138
+              ],
+              [
+                114.832847,
+                34.281937
+              ],
+              [
+                114.845492,
+                34.280696
+              ],
+              [
+                114.867763,
+                34.271066
+              ],
+              [
+                114.896514,
+                34.265804
+              ],
+              [
+                114.901988,
+                34.284567
+              ],
+              [
+                114.882674,
+                34.301192
+              ],
+              [
+                114.870783,
+                34.305608
+              ],
+              [
+                114.862353,
+                34.329174
+              ],
+              [
+                114.855558,
+                34.33473
+              ],
+              [
+                114.861724,
+                34.367014
+              ],
+              [
+                114.879025,
+                34.370683
+              ],
+              [
+                114.888461,
+                34.383771
+              ],
+              [
+                114.875061,
+                34.390612
+              ],
+              [
+                114.874432,
+                34.396411
+              ],
+              [
+                114.851658,
+                34.399534
+              ],
+              [
+                114.848575,
+                34.409942
+              ],
+              [
+                114.854615,
+                34.410933
+              ],
+              [
+                114.852413,
+                34.42887
+              ],
+              [
+                114.864806,
+                34.433726
+              ],
+              [
+                114.856502,
+                34.436599
+              ],
+              [
+                114.858893,
+                34.451906
+              ],
+              [
+                114.865624,
+                34.462902
+              ],
+              [
+                114.872356,
+                34.454085
+              ],
+              [
+                114.880786,
+                34.450519
+              ],
+              [
+                114.886322,
+                34.461317
+              ],
+              [
+                114.896451,
+                34.46102
+              ],
+              [
+                114.904001,
+                34.467606
+              ],
+              [
+                114.912305,
+                34.483601
+              ],
+              [
+                114.918596,
+                34.484938
+              ],
+              [
+                114.922371,
+                34.498206
+              ],
+              [
+                114.9096,
+                34.495137
+              ],
+              [
+                114.917653,
+                34.511571
+              ],
+              [
+                114.913752,
+                34.518154
+              ],
+              [
+                114.920673,
+                34.531417
+              ],
+              [
+                114.91111,
+                34.534782
+              ],
+              [
+                114.917841,
+                34.541957
+              ],
+              [
+                114.91501,
+                34.548686
+              ],
+              [
+                114.906517,
+                34.547647
+              ],
+              [
+                114.907398,
+                34.573865
+              ],
+              [
+                114.904882,
+                34.586179
+              ],
+              [
+                114.897018,
+                34.602596
+              ],
+              [
+                114.90117,
+                34.613769
+              ],
+              [
+                114.898339,
+                34.631762
+              ],
+              [
+                114.901673,
+                34.645303
+              ],
+              [
+                114.893494,
+                34.652469
+              ],
+              [
+                114.896451,
+                34.661363
+              ],
+              [
+                114.905825,
+                34.666896
+              ],
+              [
+                114.926649,
+                34.668625
+              ],
+              [
+                114.935771,
+                34.672182
+              ],
+              [
+                114.936652,
+                34.681914
+              ],
+              [
+                114.931682,
+                34.686804
+              ],
+              [
+                114.90765,
+                34.697916
+              ],
+              [
+                114.891418,
+                34.698213
+              ],
+              [
+                114.8677,
+                34.688038
+              ],
+              [
+                114.858012,
+                34.692286
+              ],
+              [
+                114.855558,
+                34.710904
+              ],
+              [
+                114.840648,
+                34.715101
+              ],
+              [
+                114.858767,
+                34.734256
+              ],
+              [
+                114.859333,
+                34.740328
+              ],
+              [
+                114.835678,
+                34.746893
+              ],
+              [
+                114.82838,
+                34.755332
+              ],
+              [
+                114.829009,
+                34.764314
+              ],
+              [
+                114.835615,
+                34.767472
+              ],
+              [
+                114.86682,
+                34.769199
+              ],
+              [
+                114.867386,
+                34.775515
+              ],
+              [
+                114.877578,
+                34.775219
+              ],
+              [
+                114.894375,
+                34.762833
+              ],
+              [
+                114.922874,
+                34.748423
+              ],
+              [
+                114.936841,
+                34.747041
+              ],
+              [
+                114.966913,
+                34.761106
+              ],
+              [
+                114.980502,
+                34.760909
+              ],
+              [
+                114.988366,
+                34.76456
+              ],
+              [
+                115.001012,
+                34.760662
+              ],
+              [
+                115.030329,
+                34.772455
+              ],
+              [
+                115.038885,
+                34.773985
+              ],
+              [
+                115.104125,
+                34.772357
+              ],
+              [
+                115.119601,
+                34.788638
+              ],
+              [
+                115.140048,
+                34.793324
+              ],
+              [
+                115.154455,
+                34.78178
+              ],
+              [
+                115.163891,
+                34.783063
+              ],
+              [
+                115.17553,
+                34.790463
+              ],
+              [
+                115.17899,
+                34.800279
+              ],
+              [
+                115.198367,
+                34.795297
+              ],
+              [
+                115.202897,
+                34.805656
+              ],
+              [
+                115.24832,
+                34.798109
+              ],
+              [
+                115.253919,
+                34.805014
+              ],
+              [
+                115.242658,
+                34.813497
+              ],
+              [
+                115.256561,
+                34.81187
+              ],
+              [
+                115.267256,
+                34.831249
+              ],
+              [
+                115.256058,
+                34.845301
+              ],
+              [
+                115.243475,
+                34.850181
+              ],
+              [
+                115.239323,
+                34.874677
+              ],
+              [
+                115.24077,
+                34.883842
+              ],
+              [
+                115.2492,
+                34.894534
+              ],
+              [
+                115.252157,
+                34.906604
+              ],
+              [
+                115.239323,
+                34.911826
+              ],
+              [
+                115.204973,
+                34.914239
+              ],
+              [
+                115.202708,
+                34.925617
+              ],
+              [
+                115.211768,
+                34.943345
+              ],
+              [
+                115.222148,
+                34.945561
+              ],
+              [
+                115.219128,
+                34.960626
+              ],
+              [
+                115.208245,
+                34.958312
+              ],
+              [
+                115.201639,
+                34.950977
+              ],
+              [
+                115.175027,
+                34.962497
+              ],
+              [
+                115.156908,
+                34.958017
+              ],
+              [
+                115.157223,
+                34.966976
+              ],
+              [
+                115.146528,
+                34.980118
+              ],
+              [
+                115.131177,
+                34.983613
+              ],
+              [
+                115.133002,
+                34.999655
+              ],
+              [
+                115.128094,
+                35.004379
+              ],
+              [
+                115.106138,
+                35.000787
+              ],
+              [
+                115.074996,
+                35.000393
+              ],
+              [
+                115.051656,
+                34.985975
+              ],
+              [
+                115.037564,
+                34.981644
+              ],
+              [
+                115.024918,
+                34.971849
+              ],
+              [
+                115.016048,
+                34.977362
+              ],
+              [
+                115.008121,
+                34.988485
+              ],
+              [
+                114.95087,
+                34.989813
+              ],
+              [
+                114.934765,
+                34.980709
+              ],
+              [
+                114.923818,
+                34.968748
+              ],
+              [
+                114.914004,
+                34.977903
+              ],
+              [
+                114.907964,
+                34.98937
+              ],
+              [
+                114.889657,
+                34.993996
+              ],
+              [
+                114.880346,
+                35.003493
+              ],
+              [
+                114.884435,
+                35.021893
+              ],
+              [
+                114.869965,
+                35.024451
+              ],
+              [
+                114.859333,
+                35.002656
+              ],
+              [
+                114.827122,
+                35.010135
+              ],
+              [
+                114.824668,
+                35.0123
+              ],
+              [
+                114.815861,
+                35.014022
+              ],
+              [
+                114.800384,
+                35.006691
+              ],
+              [
+                114.765908,
+                34.977707
+              ],
+              [
+                114.756597,
+                34.97559
+              ],
+              [
+                114.741435,
+                34.960675
+              ],
+              [
+                114.74175,
+                34.948712
+              ],
+              [
+                114.768173,
+                34.927882
+              ],
+              [
+                114.778994,
+                34.916751
+              ],
+              [
+                114.774779,
+                34.901382
+              ],
+              [
+                114.76119,
+                34.89148
+              ],
+              [
+                114.733886,
+                34.888474
+              ],
+              [
+                114.724323,
+                34.885222
+              ],
+              [
+                114.709161,
+                34.89212
+              ],
+              [
+                114.695572,
+                34.894387
+              ],
+              [
+                114.679593,
+                34.909018
+              ],
+              [
+                114.660279,
+                34.898722
+              ],
+              [
+                114.633981,
+                34.905225
+              ],
+              [
+                114.586608,
+                34.912466
+              ],
+              [
+                114.557165,
+                34.905521
+              ],
+              [
+                114.540682,
+                34.899264
+              ],
+              [
+                114.513378,
+                34.895273
+              ],
+              [
+                114.442728,
+                34.914486
+              ],
+              [
+                114.417815,
+                34.930788
+              ],
+              [
+                114.40064,
+                34.939504
+              ],
+              [
+                114.383024,
+                34.936894
+              ],
+              [
+                114.367233,
+                34.918968
+              ],
+              [
+                114.350499,
+                34.908082
+              ],
+              [
+                114.340118,
+                34.907146
+              ],
+              [
+                114.284441,
+                34.90823
+              ],
+              [
+                114.243988,
+                34.905126
+              ],
+              [
+                114.226624,
+                34.913156
+              ],
+              [
+                114.22071,
+                34.919066
+              ],
+              [
+                114.220522,
+                34.906801
+              ],
+              [
+                114.211085,
+                34.860877
+              ],
+              [
+                114.199824,
+                34.832729
+              ],
+              [
+                114.185354,
+                34.825628
+              ],
+              [
+                114.162517,
+                34.828883
+              ],
+              [
+                114.133703,
+                34.825628
+              ],
+              [
+                114.122504,
+                34.81833
+              ],
+              [
+                114.134143,
+                34.802154
+              ],
+              [
+                114.161762,
+                34.781238
+              ],
+              [
+                114.172331,
+                34.768311
+              ],
+              [
+                114.158364,
+                34.759379
+              ],
+              [
+                114.138484,
+                34.73475
+              ],
+              [
+                114.141189,
+                34.7191
+              ],
+              [
+                114.158113,
+                34.704336
+              ],
+              [
+                114.157547,
+                34.686507
+              ],
+              [
+                114.160441,
+                34.665611
+              ],
+              [
+                114.150375,
+                34.656669
+              ],
+              [
+                114.157547,
+                34.625979
+              ],
+              [
+                114.15157,
+                34.618268
+              ],
+              [
+                114.15459,
+                34.60576
+              ],
+              [
+                114.145153,
+                34.604277
+              ],
+              [
+                114.14553,
+                34.61456
+              ],
+              [
+                114.127726,
+                34.61718
+              ],
+              [
+                114.125461,
+                34.607886
+              ],
+              [
+                114.136848,
+                34.605711
+              ],
+              [
+                114.133451,
+                34.591025
+              ],
+              [
+                114.127852,
+                34.584943
+              ],
+              [
+                114.129802,
+                34.575348
+              ],
+              [
+                114.118478,
+                34.570155
+              ],
+              [
+                114.107217,
+                34.557887
+              ],
+              [
+                114.100296,
+                34.535178
+              ],
+              [
+                114.093942,
+                34.50182
+              ],
+              [
+                114.094383,
+                34.492265
+              ],
+              [
+                114.083373,
+                34.480927
+              ],
+              [
+                114.07035,
+                34.481472
+              ],
+              [
+                114.062486,
+                34.490532
+              ],
+              [
+                114.035119,
+                34.503998
+              ],
+              [
+                114.0226,
+                34.488552
+              ],
+              [
+                114.009577,
+                34.480135
+              ],
+              [
+                114.008256,
+                34.470082
+              ],
+              [
+                114.01851,
+                34.46721
+              ],
+              [
+                114.021719,
+                34.458989
+              ],
+              [
+                114.019894,
+                34.445368
+              ],
+              [
+                114.006557,
+                34.439225
+              ],
+              [
+                113.990326,
+                34.435707
+              ],
+              [
+                113.968495,
+                34.439324
+              ],
+              [
+                113.948615,
+                34.435063
+              ],
+              [
+                113.948929,
+                34.452699
+              ],
+              [
+                113.938108,
+                34.454729
+              ],
+              [
+                113.929993,
+                34.443485
+              ],
+              [
+                113.915586,
+                34.444922
+              ],
+              [
+                113.912126,
+                34.452352
+              ],
+              [
+                113.903507,
+                34.454185
+              ],
+              [
+                113.891616,
+                34.437342
+              ],
+              [
+                113.878153,
+                34.411478
+              ],
+              [
+                113.878531,
+                34.394577
+              ],
+              [
+                113.885199,
+                34.370485
+              ],
+              [
+                113.879978,
+                34.356056
+              ],
+              [
+                113.888093,
+                34.348369
+              ],
+              [
+                113.885451,
+                34.327785
+              ]
+            ]
+          ]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "adcode": 410300,
+        "name": "娲涢槼甯�",
+        "center": [
+          112.434468,
+          34.663041
+        ],
+        "centroid": [
+          112.038509,
+          34.293198
+        ],
+        "childrenNum": 14,
+        "level": "city",
+        "parent": {
+          "adcode": 410000
+        },
+        "subFeatureIndex": 2,
+        "acroutes": [
+          100000,
+          410000
+        ]
+      },
+      "geometry": {
+        "type": "MultiPolygon",
+        "coordinates": [
+          [
+            [
+              [
+                111.260813,
+                33.796775
+              ],
+              [
+                111.270816,
+                33.781699
+              ],
+              [
+                111.288558,
+                33.779702
+              ],
+              [
+                111.304223,
+                33.775008
+              ],
+              [
+                111.315044,
+                33.764073
+              ],
+              [
+                111.322467,
+                33.762974
+              ],
+              [
+                111.336245,
+                33.768317
+              ],
+              [
+                111.348387,
+                33.764822
+              ],
+              [
+                111.390035,
+                33.771264
+              ],
+              [
+                111.398906,
+                33.768168
+              ],
+              [
+                111.4342,
+                33.747742
+              ],
+              [
+                111.469808,
+                33.738052
+              ],
+              [
+                111.484529,
+                33.726462
+              ],
+              [
+                111.495476,
+                33.725663
+              ],
+              [
+                111.516048,
+                33.7405
+              ],
+              [
+                111.523975,
+                33.742847
+              ],
+              [
+                111.541402,
+                33.733406
+              ],
+              [
+                111.567699,
+                33.735005
+              ],
+              [
+                111.59148,
+                33.727711
+              ],
+              [
+                111.619476,
+                33.730059
+              ],
+              [
+                111.645207,
+                33.720517
+              ],
+              [
+                111.665151,
+                33.695582
+              ],
+              [
+                111.684968,
+                33.677489
+              ],
+              [
+                111.719003,
+                33.688885
+              ],
+              [
+                111.728629,
+                33.688086
+              ],
+              [
+                111.778078,
+                33.666091
+              ],
+              [
+                111.819411,
+                33.652892
+              ],
+              [
+                111.82759,
+                33.634189
+              ],
+              [
+                111.827716,
+                33.606228
+              ],
+              [
+                111.832749,
+                33.598723
+              ],
+              [
+                111.843444,
+                33.595821
+              ],
+              [
+                111.863953,
+                33.599174
+              ],
+              [
+                111.884526,
+                33.596121
+              ],
+              [
+                111.899184,
+                33.588666
+              ],
+              [
+                111.916359,
+                33.572102
+              ],
+              [
+                111.930137,
+                33.571051
+              ],
+              [
+                111.994182,
+                33.584913
+              ],
+              [
+                112.020353,
+                33.587715
+              ],
+              [
+                112.028343,
+                33.593019
+              ],
+              [
+                112.024191,
+                33.600024
+              ],
+              [
+                112.018655,
+                33.59437
+              ],
+              [
+                112.012301,
+                33.602626
+              ],
+              [
+                112.014943,
+                33.613632
+              ],
+              [
+                112.024757,
+                33.622436
+              ],
+              [
+                112.038535,
+                33.622386
+              ],
+              [
+                112.059044,
+                33.605227
+              ],
+              [
+                112.065713,
+                33.607479
+              ],
+              [
+                112.087481,
+                33.603076
+              ],
+              [
+                112.092199,
+                33.607228
+              ],
+              [
+                112.084146,
+                33.628988
+              ],
+              [
+                112.076345,
+                33.633689
+              ],
+              [
+                112.071312,
+                33.648192
+              ],
+              [
+                112.074018,
+                33.653142
+              ],
+              [
+                112.104719,
+                33.661392
+              ],
+              [
+                112.120573,
+                33.668841
+              ],
+              [
+                112.13089,
+                33.676939
+              ],
+              [
+                112.141774,
+                33.691634
+              ],
+              [
+                112.15033,
+                33.713672
+              ],
+              [
+                112.158509,
+                33.720117
+              ],
+              [
+                112.168638,
+                33.721766
+              ],
+              [
+                112.17776,
+                33.715621
+              ],
+              [
+                112.179207,
+                33.703278
+              ],
+              [
+                112.184995,
+                33.698731
+              ],
+              [
+                112.214752,
+                33.713972
+              ],
+              [
+                112.230103,
+                33.71702
+              ],
+              [
+                112.239917,
+                33.715321
+              ],
+              [
+                112.249354,
+                33.719018
+              ],
+              [
+                112.24797,
+                33.72871
+              ],
+              [
+                112.263446,
+                33.743596
+              ],
+              [
+                112.266907,
+                33.769766
+              ],
+              [
+                112.259168,
+                33.776007
+              ],
+              [
+                112.260049,
+                33.781849
+              ],
+              [
+                112.277413,
+                33.791684
+              ],
+              [
+                112.273953,
+                33.801667
+              ],
+              [
+                112.285906,
+                33.808755
+              ],
+              [
+                112.301383,
+                33.811001
+              ],
+              [
+                112.323402,
+                33.828467
+              ],
+              [
+                112.351461,
+                33.834605
+              ],
+              [
+                112.363854,
+                33.840143
+              ],
+              [
+                112.372222,
+                33.838297
+              ],
+              [
+                112.40978,
+                33.80591
+              ],
+              [
+                112.42381,
+                33.806559
+              ],
+              [
+                112.433687,
+                33.810951
+              ],
+              [
+                112.45665,
+                33.836451
+              ],
+              [
+                112.462312,
+                33.84583
+              ],
+              [
+                112.474643,
+                33.855458
+              ],
+              [
+                112.48559,
+                33.859848
+              ],
+              [
+                112.512768,
+                33.85895
+              ],
+              [
+                112.534095,
+                33.880247
+              ],
+              [
+                112.541393,
+                33.892165
+              ],
+              [
+                112.536423,
+                33.902236
+              ],
+              [
+                112.51497,
+                33.906374
+              ],
+              [
+                112.502576,
+                33.913004
+              ],
+              [
+                112.497858,
+                33.926064
+              ],
+              [
+                112.530761,
+                33.937975
+              ],
+              [
+                112.538121,
+                33.947344
+              ],
+              [
+                112.539065,
+                33.968071
+              ],
+              [
+                112.546803,
+                33.979777
+              ],
+              [
+                112.547118,
+                33.998304
+              ],
+              [
+                112.56964,
+                34.003035
+              ],
+              [
+                112.549383,
+                34.016529
+              ],
+              [
+                112.533718,
+                34.018122
+              ],
+              [
+                112.538625,
+                34.027084
+              ],
+              [
+                112.572346,
+                34.043162
+              ],
+              [
+                112.577253,
+                34.062373
+              ],
+              [
+                112.601222,
+                34.071827
+              ],
+              [
+                112.602544,
+                34.088792
+              ],
+              [
+                112.608206,
+                34.114209
+              ],
+              [
+                112.616196,
+                34.128928
+              ],
+              [
+                112.620285,
+                34.143148
+              ],
+              [
+                112.611666,
+                34.15816
+              ],
+              [
+                112.595623,
+                34.163529
+              ],
+              [
+                112.589395,
+                34.18614
+              ],
+              [
+                112.583544,
+                34.19096
+              ],
+              [
+                112.559763,
+                34.224988
+              ],
+              [
+                112.577819,
+                34.246988
+              ],
+              [
+                112.575617,
+                34.254336
+              ],
+              [
+                112.557876,
+                34.263719
+              ],
+              [
+                112.553724,
+                34.27608
+              ],
+              [
+                112.569703,
+                34.284815
+              ],
+              [
+                112.573226,
+                34.298314
+              ],
+              [
+                112.597133,
+                34.317962
+              ],
+              [
+                112.613994,
+                34.322328
+              ],
+              [
+                112.607262,
+                34.327934
+              ],
+              [
+                112.623682,
+                34.337854
+              ],
+              [
+                112.650168,
+                34.341078
+              ],
+              [
+                112.659605,
+                34.333936
+              ],
+              [
+                112.65734,
+                34.320592
+              ],
+              [
+                112.669294,
+                34.324908
+              ],
+              [
+                112.688356,
+                34.326743
+              ],
+              [
+                112.701001,
+                34.335077
+              ],
+              [
+                112.73057,
+                34.330414
+              ],
+              [
+                112.741265,
+                34.333738
+              ],
+              [
+                112.75693,
+                34.330662
+              ],
+              [
+                112.776622,
+                34.345046
+              ],
+              [
+                112.760076,
+                34.346584
+              ],
+              [
+                112.756805,
+                34.357394
+              ],
+              [
+                112.732898,
+                34.350898
+              ],
+              [
+                112.728117,
+                34.361163
+              ],
+              [
+                112.730318,
+                34.377426
+              ],
+              [
+                112.721825,
+                34.380152
+              ],
+              [
+                112.72409,
+                34.388877
+              ],
+              [
+                112.733653,
+                34.39309
+              ],
+              [
+                112.735918,
+                34.404242
+              ],
+              [
+                112.729626,
+                34.416978
+              ],
+              [
+                112.736673,
+                34.422578
+              ],
+              [
+                112.741894,
+                34.433973
+              ],
+              [
+                112.744285,
+                34.4683
+              ],
+              [
+                112.740384,
+                34.491077
+              ],
+              [
+                112.767374,
+                34.49479
+              ],
+              [
+                112.774609,
+                34.500137
+              ],
+              [
+                112.798012,
+                34.487166
+              ],
+              [
+                112.806002,
+                34.479243
+              ],
+              [
+                112.838024,
+                34.477164
+              ],
+              [
+                112.856017,
+                34.478402
+              ],
+              [
+                112.862371,
+                34.473648
+              ],
+              [
+                112.896155,
+                34.475827
+              ],
+              [
+                112.905215,
+                34.468201
+              ],
+              [
+                112.922956,
+                34.47657
+              ],
+              [
+                112.920125,
+                34.482016
+              ],
+              [
+                112.927297,
+                34.499691
+              ],
+              [
+                112.925598,
+                34.509789
+              ],
+              [
+                112.929813,
+                34.526023
+              ],
+              [
+                112.947995,
+                34.531467
+              ],
+              [
+                112.976683,
+                34.53117
+              ],
+              [
+                112.984736,
+                34.539038
+              ],
+              [
+                112.967749,
+                34.541264
+              ],
+              [
+                112.952273,
+                34.547647
+              ],
+              [
+                112.929562,
+                34.547548
+              ],
+              [
+                112.910751,
+                34.545173
+              ],
+              [
+                112.890682,
+                34.547102
+              ],
+              [
+                112.87898,
+                34.560015
+              ],
+              [
+                112.877722,
+                34.567731
+              ],
+              [
+                112.864133,
+                34.580146
+              ],
+              [
+                112.862183,
+                34.590284
+              ],
+              [
+                112.846329,
+                34.58885
+              ],
+              [
+                112.839408,
+                34.596514
+              ],
+              [
+                112.845574,
+                34.609913
+              ],
+              [
+                112.840226,
+                34.623161
+              ],
+              [
+                112.82475,
+                34.625188
+              ],
+              [
+                112.825001,
+                34.628698
+              ],
+              [
+                112.841799,
+                34.628648
+              ],
+              [
+                112.847147,
+                34.640362
+              ],
+              [
+                112.831041,
+                34.656669
+              ],
+              [
+                112.835885,
+                34.667785
+              ],
+              [
+                112.829217,
+                34.683346
+              ],
+              [
+                112.830223,
+                34.694163
+              ],
+              [
+                112.8496,
+                34.699694
+              ],
+              [
+                112.867782,
+                34.708089
+              ],
+              [
+                112.879735,
+                34.705077
+              ],
+              [
+                112.893827,
+                34.694953
+              ],
+              [
+                112.901692,
+                34.693521
+              ],
+              [
+                112.91635,
+                34.710953
+              ],
+              [
+                112.931764,
+                34.711694
+              ],
+              [
+                112.939502,
+                34.72384
+              ],
+              [
+                112.909933,
+                34.737465
+              ],
+              [
+                112.902258,
+                34.753161
+              ],
+              [
+                112.908486,
+                34.757405
+              ],
+              [
+                112.909367,
+                34.771123
+              ],
+              [
+                112.89993,
+                34.780596
+              ],
+              [
+                112.887914,
+                34.782718
+              ],
+              [
+                112.875017,
+                34.779659
+              ],
+              [
+                112.846329,
+                34.780054
+              ],
+              [
+                112.837144,
+                34.782915
+              ],
+              [
+                112.817263,
+                34.778278
+              ],
+              [
+                112.810595,
+                34.784938
+              ],
+              [
+                112.80984,
+                34.7951
+              ],
+              [
+                112.814118,
+                34.811475
+              ],
+              [
+                112.827266,
+                34.819218
+              ],
+              [
+                112.813363,
+                34.832877
+              ],
+              [
+                112.78782,
+                34.83761
+              ],
+              [
+                112.773288,
+                34.835884
+              ],
+              [
+                112.753281,
+                34.828587
+              ],
+              [
+                112.72214,
+                34.828833
+              ],
+              [
+                112.696723,
+                34.840617
+              ],
+              [
+                112.676088,
+                34.853188
+              ],
+              [
+                112.656648,
+                34.859645
+              ],
+              [
+                112.638215,
+                34.854174
+              ],
+              [
+                112.636328,
+                34.88266
+              ],
+              [
+                112.642115,
+                34.895717
+              ],
+              [
+                112.638152,
+                34.896998
+              ],
+              [
+                112.638404,
+                34.919756
+              ],
+              [
+                112.618209,
+                34.920298
+              ],
+              [
+                112.585369,
+                34.926503
+              ],
+              [
+                112.579329,
+                34.933398
+              ],
+              [
+                112.578134,
+                34.944083
+              ],
+              [
+                112.571654,
+                34.948761
+              ],
+              [
+                112.5692,
+                34.958608
+              ],
+              [
+                112.563853,
+                34.949696
+              ],
+              [
+                112.551207,
+                34.938569
+              ],
+              [
+                112.527867,
+                34.932019
+              ],
+              [
+                112.519436,
+                34.940341
+              ],
+              [
+                112.505155,
+                34.942459
+              ],
+              [
+                112.496914,
+                34.921726
+              ],
+              [
+                112.511447,
+                34.92084
+              ],
+              [
+                112.515976,
+                34.929212
+              ],
+              [
+                112.527426,
+                34.929163
+              ],
+              [
+                112.537304,
+                34.916013
+              ],
+              [
+                112.534221,
+                34.893746
+              ],
+              [
+                112.521072,
+                34.892761
+              ],
+              [
+                112.505659,
+                34.898821
+              ],
+              [
+                112.496536,
+                34.895717
+              ],
+              [
+                112.489616,
+                34.90286
+              ],
+              [
+                112.462501,
+                34.915668
+              ],
+              [
+                112.433247,
+                34.920987
+              ],
+              [
+                112.39097,
+                34.918574
+              ],
+              [
+                112.384993,
+                34.924533
+              ],
+              [
+                112.360268,
+                34.931428
+              ],
+              [
+                112.334537,
+                34.941425
+              ],
+              [
+                112.3212,
+                34.941375
+              ],
+              [
+                112.301068,
+                34.945462
+              ],
+              [
+                112.28188,
+                34.960232
+              ],
+              [
+                112.267284,
+                34.953537
+              ],
+              [
+                112.258099,
+                34.942212
+              ],
+              [
+                112.247844,
+                34.940735
+              ],
+              [
+                112.226831,
+                34.956589
+              ],
+              [
+                112.212047,
+                34.965007
+              ],
+              [
+                112.1877,
+                34.972981
+              ],
+              [
+                112.169896,
+                35.00241
+              ],
+              [
+                112.1514,
+                35.015399
+              ],
+              [
+                112.125857,
+                35.021204
+              ],
+              [
+                112.108242,
+                35.029222
+              ],
+              [
+                112.09352,
+                35.029911
+              ],
+              [
+                112.042436,
+                35.027845
+              ],
+              [
+                112.035075,
+                35.033845
+              ],
+              [
+                112.038912,
+                35.045501
+              ],
+              [
+                112.035264,
+                35.053714
+              ],
+              [
+                112.023814,
+                35.060843
+              ],
+              [
+                112.021171,
+                35.067973
+              ],
+              [
+                112.006009,
+                35.065367
+              ],
+              [
+                111.973358,
+                35.070234
+              ],
+              [
+                111.958699,
+                35.062908
+              ],
+              [
+                111.958573,
+                35.0486
+              ],
+              [
+                111.939511,
+                35.0366
+              ],
+              [
+                111.940203,
+                35.030599
+              ],
+              [
+                111.967067,
+                35.014169
+              ],
+              [
+                111.991917,
+                35.005018
+              ],
+              [
+                111.978139,
+                34.997195
+              ],
+              [
+                111.981033,
+                34.990059
+              ],
+              [
+                111.967192,
+                34.989912
+              ],
+              [
+                111.95763,
+                34.986221
+              ],
+              [
+                111.961153,
+                34.975689
+              ],
+              [
+                111.983235,
+                34.970471
+              ],
+              [
+                111.981914,
+                34.960626
+              ],
+              [
+                111.950835,
+                34.947776
+              ],
+              [
+                111.933975,
+                34.947678
+              ],
+              [
+                111.921707,
+                34.934038
+              ],
+              [
+                111.906168,
+                34.929606
+              ],
+              [
+                111.890062,
+                34.920347
+              ],
+              [
+                111.88396,
+                34.911974
+              ],
+              [
+                111.883267,
+                34.894239
+              ],
+              [
+                111.898744,
+                34.885912
+              ],
+              [
+                111.922336,
+                34.883941
+              ],
+              [
+                111.949829,
+                34.863391
+              ],
+              [
+                111.948948,
+                34.852301
+              ],
+              [
+                111.957944,
+                34.851167
+              ],
+              [
+                111.981411,
+                34.857624
+              ],
+              [
+                111.990722,
+                34.853779
+              ],
+              [
+                111.982858,
+                34.846139
+              ],
+              [
+                111.986003,
+                34.837856
+              ],
+              [
+                112.01444,
+                34.817985
+              ],
+              [
+                112.020731,
+                34.811327
+              ],
+              [
+                112.012804,
+                34.803781
+              ],
+              [
+                112.016327,
+                34.797073
+              ],
+              [
+                112.030105,
+                34.792584
+              ],
+              [
+                112.031992,
+                34.782965
+              ],
+              [
+                112.031174,
+                34.777735
+              ],
+              [
+                112.017459,
+                34.769939
+              ],
+              [
+                112.019347,
+                34.762587
+              ],
+              [
+                112.011042,
+                34.750644
+              ],
+              [
+                111.997831,
+                34.750693
+              ],
+              [
+                112.000536,
+                34.745017
+              ],
+              [
+                111.995692,
+                34.736823
+              ],
+              [
+                112.014125,
+                34.731048
+              ],
+              [
+                112.01488,
+                34.724235
+              ],
+              [
+                111.997642,
+                34.717125
+              ],
+              [
+                111.993238,
+                34.693866
+              ],
+              [
+                111.982921,
+                34.695052
+              ],
+              [
+                111.984997,
+                34.686013
+              ],
+              [
+                111.972855,
+                34.66739
+              ],
+              [
+                111.980089,
+                34.654
+              ],
+              [
+                111.971408,
+                34.65069
+              ],
+              [
+                111.967444,
+                34.64308
+              ],
+              [
+                111.953666,
+                34.639521
+              ],
+              [
+                111.943223,
+                34.629637
+              ],
+              [
+                111.94165,
+                34.620492
+              ],
+              [
+                111.928879,
+                34.600272
+              ],
+              [
+                111.905664,
+                34.6198
+              ],
+              [
+                111.888867,
+                34.61891
+              ],
+              [
+                111.863953,
+                34.647082
+              ],
+              [
+                111.830736,
+                34.649207
+              ],
+              [
+                111.823752,
+                34.646242
+              ],
+              [
+                111.821362,
+                34.634431
+              ],
+              [
+                111.811296,
+                34.633887
+              ],
+              [
+                111.797078,
+                34.626028
+              ],
+              [
+                111.778393,
+                34.608331
+              ],
+              [
+                111.764112,
+                34.609171
+              ],
+              [
+                111.758764,
+                34.597454
+              ],
+              [
+                111.740079,
+                34.600272
+              ],
+              [
+                111.702835,
+                34.584943
+              ],
+              [
+                111.696292,
+                34.575744
+              ],
+              [
+                111.687044,
+                34.571886
+              ],
+              [
+                111.672008,
+                34.572232
+              ],
+              [
+                111.681445,
+                34.547647
+              ],
+              [
+                111.692643,
+                34.535673
+              ],
+              [
+                111.683584,
+                34.533298
+              ],
+              [
+                111.670058,
+                34.540571
+              ],
+              [
+                111.619099,
+                34.55576
+              ],
+              [
+                111.608089,
+                34.56229
+              ],
+              [
+                111.594437,
+                34.565308
+              ],
+              [
+                111.584434,
+                34.556057
+              ],
+              [
+                111.574305,
+                34.564467
+              ],
+              [
+                111.562037,
+                34.558728
+              ],
+              [
+                111.544736,
+                34.544925
+              ],
+              [
+                111.538634,
+                34.543342
+              ],
+              [
+                111.525045,
+                34.54829
+              ],
+              [
+                111.5029,
+                34.545074
+              ],
+              [
+                111.489437,
+                34.533842
+              ],
+              [
+                111.484655,
+                34.525528
+              ],
+              [
+                111.45754,
+                34.512561
+              ],
+              [
+                111.451689,
+                34.505928
+              ],
+              [
+                111.418346,
+                34.490829
+              ],
+              [
+                111.394816,
+                34.482016
+              ],
+              [
+                111.385065,
+                34.473103
+              ],
+              [
+                111.370595,
+                34.473301
+              ],
+              [
+                111.358642,
+                34.480333
+              ],
+              [
+                111.344424,
+                34.472955
+              ],
+              [
+                111.324732,
+                34.471717
+              ],
+              [
+                111.306676,
+                34.474193
+              ],
+              [
+                111.300008,
+                34.488948
+              ],
+              [
+                111.289313,
+                34.485581
+              ],
+              [
+                111.271383,
+                34.470677
+              ],
+              [
+                111.272012,
+                34.447547
+              ],
+              [
+                111.244708,
+                34.453788
+              ],
+              [
+                111.227533,
+                34.459732
+              ],
+              [
+                111.220235,
+                34.457949
+              ],
+              [
+                111.213252,
+                34.437441
+              ],
+              [
+                111.21344,
+                34.429812
+              ],
+              [
+                111.197712,
+                34.418762
+              ],
+              [
+                111.191232,
+                34.41792
+              ],
+              [
+                111.188967,
+                34.399286
+              ],
+              [
+                111.171415,
+                34.394974
+              ],
+              [
+                111.156819,
+                34.394677
+              ],
+              [
+                111.147949,
+                34.38853
+              ],
+              [
+                111.141217,
+                34.373113
+              ],
+              [
+                111.138449,
+                34.35675
+              ],
+              [
+                111.141217,
+                34.353031
+              ],
+              [
+                111.159839,
+                34.350799
+              ],
+              [
+                111.166634,
+                34.344798
+              ],
+              [
+                111.16915,
+                34.334878
+              ],
+              [
+                111.185444,
+                34.31697
+              ],
+              [
+                111.191547,
+                34.301837
+              ],
+              [
+                111.181921,
+                34.27876
+              ],
+              [
+                111.182488,
+                34.256421
+              ],
+              [
+                111.187772,
+                34.250265
+              ],
+              [
+                111.180915,
+                34.230203
+              ],
+              [
+                111.166571,
+                34.228962
+              ],
+              [
+                111.158958,
+                34.223101
+              ],
+              [
+                111.175819,
+                34.209541
+              ],
+              [
+                111.207401,
+                34.197419
+              ],
+              [
+                111.214699,
+                34.181221
+              ],
+              [
+                111.234516,
+                34.178537
+              ],
+              [
+                111.248671,
+                34.162882
+              ],
+              [
+                111.253201,
+                34.15309
+              ],
+              [
+                111.267922,
+                34.146528
+              ],
+              [
+                111.276856,
+                34.148318
+              ],
+              [
+                111.281889,
+                34.138524
+              ],
+              [
+                111.296925,
+                34.145137
+              ],
+              [
+                111.305292,
+                34.140165
+              ],
+              [
+                111.306362,
+                34.125149
+              ],
+              [
+                111.313408,
+                34.116546
+              ],
+              [
+                111.334735,
+                34.115601
+              ],
+              [
+                111.344738,
+                34.109037
+              ],
+              [
+                111.358768,
+                34.108788
+              ],
+              [
+                111.367198,
+                34.092473
+              ],
+              [
+                111.354301,
+                34.084464
+              ],
+              [
+                111.342096,
+                34.056053
+              ],
+              [
+                111.342285,
+                34.037936
+              ],
+              [
+                111.355119,
+                34.015185
+              ],
+              [
+                111.353609,
+                33.996263
+              ],
+              [
+                111.356,
+                33.984509
+              ],
+              [
+                111.344109,
+                33.973351
+              ],
+              [
+                111.324795,
+                33.963039
+              ],
+              [
+                111.305921,
+                33.941364
+              ],
+              [
+                111.303342,
+                33.928207
+              ],
+              [
+                111.29013,
+                33.926662
+              ],
+              [
+                111.276793,
+                33.935533
+              ],
+              [
+                111.259366,
+                33.929852
+              ],
+              [
+                111.239989,
+                33.933141
+              ],
+              [
+                111.230049,
+                33.924768
+              ],
+              [
+                111.226652,
+                33.913104
+              ],
+              [
+                111.234768,
+                33.901738
+              ],
+              [
+                111.234516,
+                33.894857
+              ],
+              [
+                111.212811,
+                33.884087
+              ],
+              [
+                111.206017,
+                33.891616
+              ],
+              [
+                111.203689,
+                33.883438
+              ],
+              [
+                111.21948,
+                33.872766
+              ],
+              [
+                111.216397,
+                33.865135
+              ],
+              [
+                111.232062,
+                33.856805
+              ],
+              [
+                111.240304,
+                33.842488
+              ],
+              [
+                111.261568,
+                33.822878
+              ],
+              [
+                111.260813,
+                33.796775
+              ]
+            ]
+          ],
+          [
+            [
+              [
+                112.028784,
+                34.778968
+              ],
+              [
+                112.030231,
+                34.782668
+              ],
+              [
+                112.018466,
+                34.785678
+              ],
+              [
+                112.021171,
+                34.777537
+              ],
+              [
+                112.028784,
+                34.778968
+              ]
+            ]
+          ]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "adcode": 410400,
+        "name": "骞抽《灞卞競",
+        "center": [
+          113.307718,
+          33.735241
+        ],
+        "centroid": [
+          113.016514,
+          33.795715
+        ],
+        "childrenNum": 10,
+        "level": "city",
+        "parent": {
+          "adcode": 410000
+        },
+        "subFeatureIndex": 3,
+        "acroutes": [
+          100000,
+          410000
+        ]
+      },
+      "geometry": {
+        "type": "MultiPolygon",
+        "coordinates": [
+          [
+            [
+              [
+                113.585485,
+                33.711024
+              ],
+              [
+                113.580767,
+                33.715171
+              ],
+              [
+                113.58775,
+                33.727062
+              ],
+              [
+                113.576552,
+                33.736304
+              ],
+              [
+                113.573091,
+                33.752137
+              ],
+              [
+                113.549373,
+                33.750489
+              ],
+              [
+                113.544341,
+                33.757131
+              ],
+              [
+                113.51798,
+                33.750439
+              ],
+              [
+                113.504014,
+                33.751238
+              ],
+              [
+                113.489481,
+                33.746094
+              ],
+              [
+                113.451042,
+                33.739301
+              ],
+              [
+                113.448211,
+                33.75868
+              ],
+              [
+                113.434873,
+                33.765371
+              ],
+              [
+                113.425814,
+                33.762175
+              ],
+              [
+                113.372401,
+                33.785593
+              ],
+              [
+                113.393351,
+                33.797873
+              ],
+              [
+                113.386053,
+                33.801817
+              ],
+              [
+                113.38102,
+                33.815542
+              ],
+              [
+                113.385802,
+                33.834854
+              ],
+              [
+                113.384669,
+                33.843286
+              ],
+              [
+                113.36762,
+                33.862691
+              ],
+              [
+                113.360762,
+                33.879997
+              ],
+              [
+                113.365481,
+                33.890519
+              ],
+              [
+                113.381586,
+                33.912007
+              ],
+              [
+                113.386116,
+                33.927808
+              ],
+              [
+                113.410715,
+                33.943308
+              ],
+              [
+                113.412665,
+                33.952028
+              ],
+              [
+                113.41342,
+                33.987049
+              ],
+              [
+                113.402222,
+                34.002687
+              ],
+              [
+                113.395742,
+                34.031315
+              ],
+              [
+                113.386368,
+                34.039827
+              ],
+              [
+                113.368626,
+                34.039877
+              ],
+              [
+                113.35466,
+                34.043112
+              ],
+              [
+                113.346104,
+                34.03928
+              ],
+              [
+                113.345034,
+                34.029075
+              ],
+              [
+                113.334528,
+                34.027183
+              ],
+              [
+                113.320687,
+                34.054858
+              ],
+              [
+                113.331949,
+                34.063268
+              ],
+              [
+                113.30043,
+                34.082623
+              ],
+              [
+                113.283129,
+                34.086802
+              ],
+              [
+                113.278914,
+                34.100134
+              ],
+              [
+                113.264381,
+                34.098542
+              ],
+              [
+                113.257398,
+                34.112319
+              ],
+              [
+                113.252113,
+                34.114308
+              ],
+              [
+                113.240097,
+                34.108539
+              ],
+              [
+                113.241166,
+                34.097945
+              ],
+              [
+                113.235064,
+                34.091926
+              ],
+              [
+                113.227137,
+                34.092523
+              ],
+              [
+                113.222355,
+                34.102422
+              ],
+              [
+                113.210654,
+                34.107445
+              ],
+              [
+                113.177876,
+                34.101228
+              ],
+              [
+                113.157493,
+                34.103118
+              ],
+              [
+                113.150384,
+                34.108141
+              ],
+              [
+                113.146483,
+                34.117939
+              ],
+              [
+                113.130629,
+                34.124105
+              ],
+              [
+                113.126477,
+                34.134696
+              ],
+              [
+                113.129811,
+                34.145733
+              ],
+              [
+                113.118047,
+                34.156818
+              ],
+              [
+                113.103011,
+                34.176798
+              ],
+              [
+                113.101941,
+                34.18778
+              ],
+              [
+                113.106094,
+                34.198115
+              ],
+              [
+                113.103892,
+                34.205418
+              ],
+              [
+                113.094203,
+                34.21118
+              ],
+              [
+                113.075392,
+                34.215502
+              ],
+              [
+                113.066962,
+                34.223647
+              ],
+              [
+                113.070171,
+                34.247186
+              ],
+              [
+                113.077343,
+                34.262677
+              ],
+              [
+                113.082439,
+                34.26645
+              ],
+              [
+                113.075518,
+                34.276527
+              ],
+              [
+                113.059476,
+                34.280944
+              ],
+              [
+                113.037142,
+                34.280299
+              ],
+              [
+                113.027642,
+                34.289282
+              ],
+              [
+                113.020847,
+                34.290424
+              ],
+              [
+                113.013235,
+                34.300398
+              ],
+              [
+                112.992977,
+                34.296478
+              ],
+              [
+                112.960829,
+                34.297867
+              ],
+              [
+                112.954097,
+                34.302135
+              ],
+              [
+                112.936293,
+                34.295535
+              ],
+              [
+                112.91245,
+                34.293749
+              ],
+              [
+                112.884516,
+                34.30144
+              ],
+              [
+                112.87357,
+                34.298016
+              ],
+              [
+                112.856458,
+                34.302185
+              ],
+              [
+                112.84117,
+                34.297818
+              ],
+              [
+                112.842114,
+                34.311612
+              ],
+              [
+                112.854633,
+                34.316325
+              ],
+              [
+                112.83318,
+                34.333638
+              ],
+              [
+                112.824184,
+                34.33344
+              ],
+              [
+                112.81223,
+                34.340037
+              ],
+              [
+                112.788953,
+                34.331158
+              ],
+              [
+                112.787002,
+                34.343261
+              ],
+              [
+                112.776622,
+                34.345046
+              ],
+              [
+                112.75693,
+                34.330662
+              ],
+              [
+                112.741265,
+                34.333738
+              ],
+              [
+                112.73057,
+                34.330414
+              ],
+              [
+                112.701001,
+                34.335077
+              ],
+              [
+                112.688356,
+                34.326743
+              ],
+              [
+                112.669294,
+                34.324908
+              ],
+              [
+                112.65734,
+                34.320592
+              ],
+              [
+                112.659605,
+                34.333936
+              ],
+              [
+                112.650168,
+                34.341078
+              ],
+              [
+                112.623682,
+                34.337854
+              ],
+              [
+                112.607262,
+                34.327934
+              ],
+              [
+                112.613994,
+                34.322328
+              ],
+              [
+                112.597133,
+                34.317962
+              ],
+              [
+                112.573226,
+                34.298314
+              ],
+              [
+                112.569703,
+                34.284815
+              ],
+              [
+                112.553724,
+                34.27608
+              ],
+              [
+                112.557876,
+                34.263719
+              ],
+              [
+                112.575617,
+                34.254336
+              ],
+              [
+                112.577819,
+                34.246988
+              ],
+              [
+                112.559763,
+                34.224988
+              ],
+              [
+                112.583544,
+                34.19096
+              ],
+              [
+                112.589395,
+                34.18614
+              ],
+              [
+                112.595623,
+                34.163529
+              ],
+              [
+                112.611666,
+                34.15816
+              ],
+              [
+                112.620285,
+                34.143148
+              ],
+              [
+                112.616196,
+                34.128928
+              ],
+              [
+                112.608206,
+                34.114209
+              ],
+              [
+                112.602544,
+                34.088792
+              ],
+              [
+                112.601222,
+                34.071827
+              ],
+              [
+                112.577253,
+                34.062373
+              ],
+              [
+                112.572346,
+                34.043162
+              ],
+              [
+                112.538625,
+                34.027084
+              ],
+              [
+                112.533718,
+                34.018122
+              ],
+              [
+                112.549383,
+                34.016529
+              ],
+              [
+                112.56964,
+                34.003035
+              ],
+              [
+                112.547118,
+                33.998304
+              ],
+              [
+                112.546803,
+                33.979777
+              ],
+              [
+                112.539065,
+                33.968071
+              ],
+              [
+                112.538121,
+                33.947344
+              ],
+              [
+                112.530761,
+                33.937975
+              ],
+              [
+                112.497858,
+                33.926064
+              ],
+              [
+                112.502576,
+                33.913004
+              ],
+              [
+                112.51497,
+                33.906374
+              ],
+              [
+                112.536423,
+                33.902236
+              ],
+              [
+                112.541393,
+                33.892165
+              ],
+              [
+                112.534095,
+                33.880247
+              ],
+              [
+                112.512768,
+                33.85895
+              ],
+              [
+                112.48559,
+                33.859848
+              ],
+              [
+                112.474643,
+                33.855458
+              ],
+              [
+                112.462312,
+                33.84583
+              ],
+              [
+                112.45665,
+                33.836451
+              ],
+              [
+                112.433687,
+                33.810951
+              ],
+              [
+                112.42381,
+                33.806559
+              ],
+              [
+                112.40978,
+                33.80591
+              ],
+              [
+                112.372222,
+                33.838297
+              ],
+              [
+                112.363854,
+                33.840143
+              ],
+              [
+                112.351461,
+                33.834605
+              ],
+              [
+                112.323402,
+                33.828467
+              ],
+              [
+                112.301383,
+                33.811001
+              ],
+              [
+                112.285906,
+                33.808755
+              ],
+              [
+                112.273953,
+                33.801667
+              ],
+              [
+                112.277413,
+                33.791684
+              ],
+              [
+                112.260049,
+                33.781849
+              ],
+              [
+                112.259168,
+                33.776007
+              ],
+              [
+                112.266907,
+                33.769766
+              ],
+              [
+                112.263446,
+                33.743596
+              ],
+              [
+                112.24797,
+                33.72871
+              ],
+              [
+                112.249354,
+                33.719018
+              ],
+              [
+                112.258854,
+                33.710624
+              ],
+              [
+                112.278168,
+                33.712373
+              ],
+              [
+                112.306541,
+                33.69978
+              ],
+              [
+                112.312455,
+                33.684887
+              ],
+              [
+                112.332839,
+                33.668391
+              ],
+              [
+                112.353285,
+                33.669941
+              ],
+              [
+                112.361086,
+                33.661242
+              ],
+              [
+                112.375116,
+                33.666891
+              ],
+              [
+                112.392479,
+                33.666991
+              ],
+              [
+                112.408019,
+                33.675439
+              ],
+              [
+                112.420727,
+                33.676389
+              ],
+              [
+                112.453756,
+                33.645291
+              ],
+              [
+                112.461683,
+                33.63994
+              ],
+              [
+                112.477159,
+                33.63764
+              ],
+              [
+                112.493202,
+                33.63899
+              ],
+              [
+                112.503394,
+                33.622185
+              ],
+              [
+                112.524721,
+                33.603826
+              ],
+              [
+                112.522771,
+                33.595521
+              ],
+              [
+                112.529943,
+                33.587915
+              ],
+              [
+                112.548502,
+                33.59367
+              ],
+              [
+                112.556869,
+                33.588166
+              ],
+              [
+                112.575995,
+                33.602275
+              ],
+              [
+                112.588388,
+                33.616883
+              ],
+              [
+                112.599775,
+                33.618084
+              ],
+              [
+                112.610785,
+                33.611431
+              ],
+              [
+                112.611351,
+                33.601875
+              ],
+              [
+                112.617705,
+                33.597272
+              ],
+              [
+                112.63444,
+                33.594821
+              ],
+              [
+                112.646205,
+                33.602876
+              ],
+              [
+                112.660234,
+                33.605377
+              ],
+              [
+                112.664386,
+                33.597673
+              ],
+              [
+                112.683889,
+                33.591718
+              ],
+              [
+                112.689174,
+                33.587165
+              ],
+              [
+                112.70572,
+                33.585263
+              ],
+              [
+                112.725411,
+                33.586765
+              ],
+              [
+                112.743215,
+                33.578858
+              ],
+              [
+                112.750387,
+                33.571151
+              ],
+              [
+                112.760076,
+                33.571751
+              ],
+              [
+                112.773413,
+                33.56079
+              ],
+              [
+                112.783668,
+                33.567747
+              ],
+              [
+                112.81179,
+                33.580309
+              ],
+              [
+                112.82022,
+                33.574804
+              ],
+              [
+                112.845637,
+                33.578107
+              ],
+              [
+                112.85262,
+                33.584413
+              ],
+              [
+                112.854822,
+                33.603626
+              ],
+              [
+                112.869669,
+                33.611531
+              ],
+              [
+                112.887914,
+                33.608329
+              ],
+              [
+                112.893513,
+                33.616133
+              ],
+              [
+                112.917545,
+                33.605627
+              ],
+              [
+                112.94271,
+                33.607629
+              ],
+              [
+                112.950134,
+                33.590968
+              ],
+              [
+                112.963597,
+                33.583662
+              ],
+              [
+                112.972908,
+                33.584613
+              ],
+              [
+                112.986497,
+                33.575805
+              ],
+              [
+                112.990775,
+                33.567797
+              ],
+              [
+                112.997255,
+                33.569399
+              ],
+              [
+                113.022861,
+                33.56119
+              ],
+              [
+                113.027642,
+                33.546874
+              ],
+              [
+                113.036701,
+                33.546974
+              ],
+              [
+                113.036261,
+                33.539865
+              ],
+              [
+                113.047333,
+                33.532204
+              ],
+              [
+                113.04381,
+                33.517532
+              ],
+              [
+                113.048214,
+                33.508317
+              ],
+              [
+                113.049221,
+                33.492087
+              ],
+              [
+                113.053373,
+                33.485725
+              ],
+              [
+                113.041168,
+                33.473701
+              ],
+              [
+                113.037897,
+                33.464331
+              ],
+              [
+                113.041357,
+                33.44659
+              ],
+              [
+                113.045698,
+                33.439472
+              ],
+              [
+                113.074826,
+                33.448444
+              ],
+              [
+                113.110309,
+                33.446138
+              ],
+              [
+                113.125659,
+                33.439723
+              ],
+              [
+                113.128742,
+                33.427642
+              ],
+              [
+                113.141765,
+                33.425987
+              ],
+              [
+                113.156109,
+                33.433607
+              ],
+              [
+                113.176052,
+                33.435713
+              ],
+              [
+                113.192975,
+                33.429797
+              ],
+              [
+                113.198134,
+                33.420523
+              ],
+              [
+                113.216316,
+                33.398861
+              ],
+              [
+                113.230912,
+                33.38848
+              ],
+              [
+                113.230534,
+                33.374937
+              ],
+              [
+                113.241418,
+                33.373733
+              ],
+              [
+                113.245004,
+                33.365356
+              ],
+              [
+                113.257964,
+                33.366158
+              ],
+              [
+                113.270609,
+                33.358834
+              ],
+              [
+                113.277089,
+                33.350254
+              ],
+              [
+                113.289923,
+                33.351709
+              ],
+              [
+                113.302632,
+                33.348999
+              ],
+              [
+                113.312194,
+                33.341121
+              ],
+              [
+                113.335472,
+                33.35201
+              ],
+              [
+                113.363908,
+                33.342476
+              ],
+              [
+                113.400397,
+                33.335852
+              ],
+              [
+                113.40738,
+                33.323004
+              ],
+              [
+                113.400838,
+                33.314722
+              ],
+              [
+                113.403857,
+                33.302724
+              ],
+              [
+                113.388318,
+                33.299059
+              ],
+              [
+                113.384732,
+                33.29203
+              ],
+              [
+                113.400146,
+                33.261044
+              ],
+              [
+                113.402851,
+                33.235224
+              ],
+              [
+                113.391212,
+                33.225928
+              ],
+              [
+                113.384103,
+                33.206128
+              ],
+              [
+                113.384417,
+                33.196679
+              ],
+              [
+                113.377875,
+                33.184313
+              ],
+              [
+                113.370136,
+                33.182855
+              ],
+              [
+                113.385802,
+                33.169381
+              ],
+              [
+                113.382467,
+                33.156156
+              ],
+              [
+                113.385424,
+                33.145595
+              ],
+              [
+                113.379888,
+                33.135485
+              ],
+              [
+                113.388821,
+                33.128393
+              ],
+              [
+                113.397881,
+                33.14997
+              ],
+              [
+                113.413105,
+                33.156659
+              ],
+              [
+                113.432545,
+                33.15681
+              ],
+              [
+                113.449217,
+                33.160581
+              ],
+              [
+                113.46029,
+                33.156458
+              ],
+              [
+                113.499987,
+                33.156206
+              ],
+              [
+                113.514772,
+                33.162492
+              ],
+              [
+                113.521378,
+                33.154698
+              ],
+              [
+                113.532324,
+                33.152736
+              ],
+              [
+                113.541321,
+                33.14308
+              ],
+              [
+                113.550254,
+                33.140113
+              ],
+              [
+                113.561201,
+                33.161134
+              ],
+              [
+                113.573846,
+                33.15691
+              ],
+              [
+                113.593601,
+                33.157715
+              ],
+              [
+                113.600144,
+                33.163146
+              ],
+              [
+                113.617004,
+                33.147255
+              ],
+              [
+                113.626001,
+                33.150423
+              ],
+              [
+                113.63506,
+                33.160833
+              ],
+              [
+                113.64846,
+                33.182402
+              ],
+              [
+                113.644623,
+                33.186575
+              ],
+              [
+                113.627511,
+                33.186475
+              ],
+              [
+                113.613796,
+                33.211506
+              ],
+              [
+                113.606875,
+                33.237786
+              ],
+              [
+                113.613167,
+                33.261798
+              ],
+              [
+                113.618766,
+                33.291477
+              ],
+              [
+                113.627448,
+                33.312212
+              ],
+              [
+                113.640282,
+                33.325162
+              ],
+              [
+                113.642106,
+                33.34905
+              ],
+              [
+                113.639149,
+                33.355221
+              ],
+              [
+                113.655003,
+                33.371175
+              ],
+              [
+                113.676897,
+                33.378298
+              ],
+              [
+                113.688347,
+                33.407737
+              ],
+              [
+                113.683125,
+                33.41952
+              ],
+              [
+                113.659407,
+                33.424283
+              ],
+              [
+                113.651669,
+                33.418417
+              ],
+              [
+                113.645252,
+                33.421776
+              ],
+              [
+                113.620842,
+                33.410946
+              ],
+              [
+                113.596809,
+                33.41215
+              ],
+              [
+                113.589008,
+                33.404728
+              ],
+              [
+                113.574727,
+                33.407537
+              ],
+              [
+                113.54736,
+                33.406433
+              ],
+              [
+                113.539811,
+                33.419019
+              ],
+              [
+                113.526662,
+                33.419269
+              ],
+              [
+                113.51754,
+                33.407186
+              ],
+              [
+                113.506341,
+                33.414607
+              ],
+              [
+                113.483945,
+                33.421124
+              ],
+              [
+                113.468846,
+                33.422077
+              ],
+              [
+                113.466518,
+                33.437367
+              ],
+              [
+                113.473501,
+                33.443683
+              ],
+              [
+                113.471803,
+                33.463378
+              ],
+              [
+                113.484322,
+                33.483721
+              ],
+              [
+                113.478597,
+                33.50431
+              ],
+              [
+                113.483001,
+                33.500152
+              ],
+              [
+                113.50307,
+                33.500252
+              ],
+              [
+                113.510808,
+                33.505011
+              ],
+              [
+                113.525278,
+                33.505061
+              ],
+              [
+                113.532073,
+                33.497347
+              ],
+              [
+                113.537609,
+                33.498499
+              ],
+              [
+                113.533708,
+                33.514978
+              ],
+              [
+                113.537672,
+                33.51633
+              ],
+              [
+                113.545536,
+                33.548626
+              ],
+              [
+                113.557363,
+                33.553582
+              ],
+              [
+                113.563151,
+                33.57055
+              ],
+              [
+                113.554281,
+                33.5706
+              ],
+              [
+                113.552267,
+                33.586715
+              ],
+              [
+                113.576803,
+                33.592619
+              ],
+              [
+                113.579383,
+                33.597222
+              ],
+              [
+                113.604673,
+                33.613131
+              ],
+              [
+                113.621534,
+                33.619885
+              ],
+              [
+                113.628203,
+                33.629038
+              ],
+              [
+                113.619143,
+                33.63799
+              ],
+              [
+                113.596746,
+                33.651892
+              ],
+              [
+                113.587624,
+                33.654642
+              ],
+              [
+                113.580515,
+                33.681738
+              ],
+              [
+                113.584101,
+                33.698131
+              ],
+              [
+                113.576677,
+                33.706327
+              ],
+              [
+                113.585485,
+                33.711024
+              ]
+            ]
+          ]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "adcode": 410500,
+        "name": "瀹夐槼甯�",
+        "center": [
+          114.352482,
+          36.103442
+        ],
+        "centroid": [
+          114.358257,
+          35.878529
+        ],
+        "childrenNum": 9,
+        "level": "city",
+        "parent": {
+          "adcode": 410000
+        },
+        "subFeatureIndex": 4,
+        "acroutes": [
+          100000,
+          410000
+        ]
+      },
+      "geometry": {
+        "type": "MultiPolygon",
+        "coordinates": [
+          [
+            [
+              [
+                114.419073,
+                35.474181
+              ],
+              [
+                114.428573,
+                35.468947
+              ],
+              [
+                114.429139,
+                35.449523
+              ],
+              [
+                114.412027,
+                35.43582
+              ],
+              [
+                114.405043,
+                35.426325
+              ],
+              [
+                114.407686,
+                35.418004
+              ],
+              [
+                114.415172,
+                35.413255
+              ],
+              [
+                114.423666,
+                35.380155
+              ],
+              [
+                114.413474,
+                35.370163
+              ],
+              [
+                114.411083,
+                35.358064
+              ],
+              [
+                114.429076,
+                35.342876
+              ],
+              [
+                114.423414,
+                35.324842
+              ],
+              [
+                114.404226,
+                35.326313
+              ],
+              [
+                114.403659,
+                35.316805
+              ],
+              [
+                114.412782,
+                35.313521
+              ],
+              [
+                114.416493,
+                35.302785
+              ],
+              [
+                114.408189,
+                35.29249
+              ],
+              [
+                114.395732,
+                35.293078
+              ],
+              [
+                114.407497,
+                35.269738
+              ],
+              [
+                114.395481,
+                35.26449
+              ],
+              [
+                114.391266,
+                35.258114
+              ],
+              [
+                114.396299,
+                35.241828
+              ],
+              [
+                114.407497,
+                35.236627
+              ],
+              [
+                114.392146,
+                35.226912
+              ],
+              [
+                114.394348,
+                35.219797
+              ],
+              [
+                114.399696,
+                35.225097
+              ],
+              [
+                114.415298,
+                35.228188
+              ],
+              [
+                114.431404,
+                35.222055
+              ],
+              [
+                114.431781,
+                35.208755
+              ],
+              [
+                114.442602,
+                35.205958
+              ],
+              [
+                114.4499,
+                35.214448
+              ],
+              [
+                114.465376,
+                35.216706
+              ],
+              [
+                114.487836,
+                35.206645
+              ],
+              [
+                114.494756,
+                35.220141
+              ],
+              [
+                114.50413,
+                35.228286
+              ],
+              [
+                114.527093,
+                35.235646
+              ],
+              [
+                114.541437,
+                35.242809
+              ],
+              [
+                114.549364,
+                35.261891
+              ],
+              [
+                114.562198,
+                35.276064
+              ],
+              [
+                114.5968,
+                35.286116
+              ],
+              [
+                114.607495,
+                35.292686
+              ],
+              [
+                114.627313,
+                35.298275
+              ],
+              [
+                114.642915,
+                35.297148
+              ],
+              [
+                114.663173,
+                35.291559
+              ],
+              [
+                114.679907,
+                35.291166
+              ],
+              [
+                114.688715,
+                35.295138
+              ],
+              [
+                114.698341,
+                35.306756
+              ],
+              [
+                114.701675,
+                35.329008
+              ],
+              [
+                114.697397,
+                35.337486
+              ],
+              [
+                114.718598,
+                35.343611
+              ],
+              [
+                114.73722,
+                35.344689
+              ],
+              [
+                114.754521,
+                35.341308
+              ],
+              [
+                114.76163,
+                35.345228
+              ],
+              [
+                114.783964,
+                35.343023
+              ],
+              [
+                114.808877,
+                35.346942
+              ],
+              [
+                114.809632,
+                35.354242
+              ],
+              [
+                114.856942,
+                35.387794
+              ],
+              [
+                114.879339,
+                35.387452
+              ],
+              [
+                114.898087,
+                35.390781
+              ],
+              [
+                114.951248,
+                35.380791
+              ],
+              [
+                114.967605,
+                35.399204
+              ],
+              [
+                114.985787,
+                35.414332
+              ],
+              [
+                114.981509,
+                35.434107
+              ],
+              [
+                114.96383,
+                35.440665
+              ],
+              [
+                114.96188,
+                35.446146
+              ],
+              [
+                114.967668,
+                35.456716
+              ],
+              [
+                114.970751,
+                35.480785
+              ],
+              [
+                114.947347,
+                35.478144
+              ],
+              [
+                114.93942,
+                35.481225
+              ],
+              [
+                114.940616,
+                35.491448
+              ],
+              [
+                114.953324,
+                35.501815
+              ],
+              [
+                114.964334,
+                35.504749
+              ],
+              [
+                114.969492,
+                35.518
+              ],
+              [
+                114.968423,
+                35.537554
+              ],
+              [
+                114.962006,
+                35.571421
+              ],
+              [
+                114.952884,
+                35.581094
+              ],
+              [
+                114.90853,
+                35.585979
+              ],
+              [
+                114.884813,
+                35.599852
+              ],
+              [
+                114.883051,
+                35.616065
+              ],
+              [
+                114.874432,
+                35.623878
+              ],
+              [
+                114.875502,
+                35.628907
+              ],
+              [
+                114.890034,
+                35.646823
+              ],
+              [
+                114.905888,
+                35.649606
+              ],
+              [
+                114.911047,
+                35.660685
+              ],
+              [
+                114.919226,
+                35.664785
+              ],
+              [
+                114.918408,
+                35.687962
+              ],
+              [
+                114.910544,
+                35.700939
+              ],
+              [
+                114.915514,
+                35.706743
+              ],
+              [
+                114.907776,
+                35.722594
+              ],
+              [
+                114.889594,
+                35.738978
+              ],
+              [
+                114.887832,
+                35.753506
+              ],
+              [
+                114.893746,
+                35.764132
+              ],
+              [
+                114.908405,
+                35.765741
+              ],
+              [
+                114.921365,
+                35.780118
+              ],
+              [
+                114.943573,
+                35.799754
+              ],
+              [
+                114.948669,
+                35.819629
+              ],
+              [
+                114.94546,
+                35.82523
+              ],
+              [
+                114.93401,
+                35.828055
+              ],
+              [
+                114.933003,
+                35.84505
+              ],
+              [
+                114.935646,
+                35.853814
+              ],
+              [
+                114.953009,
+                35.85766
+              ],
+              [
+                114.959112,
+                35.862723
+              ],
+              [
+                114.969996,
+                35.881366
+              ],
+              [
+                114.970814,
+                35.890223
+              ],
+              [
+                114.97786,
+                35.904723
+              ],
+              [
+                114.972324,
+                35.923259
+              ],
+              [
+                114.98025,
+                35.949814
+              ],
+              [
+                114.988366,
+                35.964741
+              ],
+              [
+                114.983333,
+                35.982922
+              ],
+              [
+                114.986164,
+                35.991865
+              ],
+              [
+                114.980376,
+                36.003334
+              ],
+              [
+                114.974274,
+                35.999009
+              ],
+              [
+                114.974211,
+                36.012226
+              ],
+              [
+                114.983396,
+                36.019417
+              ],
+              [
+                114.983962,
+                36.02583
+              ],
+              [
+                114.968926,
+                36.032971
+              ],
+              [
+                114.94244,
+                36.03812
+              ],
+              [
+                114.920798,
+                36.048319
+              ],
+              [
+                114.914696,
+                36.05201
+              ],
+              [
+                114.92646,
+                36.089444
+              ],
+              [
+                114.922057,
+                36.103132
+              ],
+              [
+                114.913249,
+                36.107645
+              ],
+              [
+                114.907083,
+                36.119971
+              ],
+              [
+                114.912431,
+                36.140444
+              ],
+              [
+                114.893432,
+                36.140056
+              ],
+              [
+                114.89211,
+                36.143792
+              ],
+              [
+                114.868518,
+                36.146653
+              ],
+              [
+                114.858641,
+                36.144325
+              ],
+              [
+                114.857509,
+                36.127734
+              ],
+              [
+                114.841655,
+                36.131712
+              ],
+              [
+                114.831589,
+                36.130354
+              ],
+              [
+                114.825172,
+                36.123707
+              ],
+              [
+                114.802775,
+                36.130936
+              ],
+              [
+                114.790885,
+                36.130014
+              ],
+              [
+                114.778617,
+                36.133168
+              ],
+              [
+                114.777987,
+                36.128025
+              ],
+              [
+                114.76421,
+                36.125551
+              ],
+              [
+                114.762889,
+                36.134914
+              ],
+              [
+                114.751564,
+                36.138698
+              ],
+              [
+                114.751564,
+                36.146605
+              ],
+              [
+                114.734389,
+                36.155772
+              ],
+              [
+                114.720674,
+                36.140056
+              ],
+              [
+                114.711678,
+                36.145441
+              ],
+              [
+                114.692364,
+                36.146217
+              ],
+              [
+                114.691106,
+                36.138407
+              ],
+              [
+                114.655183,
+                36.14025
+              ],
+              [
+                114.63719,
+                36.135642
+              ],
+              [
+                114.630395,
+                36.124241
+              ],
+              [
+                114.619449,
+                36.123513
+              ],
+              [
+                114.61083,
+                36.128316
+              ],
+              [
+                114.604664,
+                36.121426
+              ],
+              [
+                114.582582,
+                36.121329
+              ],
+              [
+                114.58686,
+                36.14093
+              ],
+              [
+                114.575473,
+                36.143258
+              ],
+              [
+                114.568049,
+                36.152328
+              ],
+              [
+                114.558046,
+                36.150776
+              ],
+              [
+                114.543639,
+                36.161786
+              ],
+              [
+                114.531686,
+                36.161931
+              ],
+              [
+                114.532881,
+                36.171533
+              ],
+              [
+                114.504948,
+                36.172406
+              ],
+              [
+                114.505577,
+                36.177497
+              ],
+              [
+                114.489598,
+                36.178467
+              ],
+              [
+                114.483873,
+                36.183848
+              ],
+              [
+                114.480287,
+                36.177788
+              ],
+              [
+                114.466194,
+                36.197713
+              ],
+              [
+                114.452291,
+                36.202367
+              ],
+              [
+                114.431152,
+                36.202609
+              ],
+              [
+                114.4175,
+                36.205905
+              ],
+              [
+                114.408441,
+                36.224563
+              ],
+              [
+                114.392335,
+                36.221123
+              ],
+              [
+                114.367548,
+                36.225533
+              ],
+              [
+                114.356098,
+                36.23033
+              ],
+              [
+                114.353833,
+                36.242636
+              ],
+              [
+                114.346787,
+                36.245494
+              ],
+              [
+                114.345151,
+                36.255812
+              ],
+              [
+                114.329234,
+                36.255909
+              ],
+              [
+                114.328353,
+                36.248159
+              ],
+              [
+                114.312814,
+                36.251646
+              ],
+              [
+                114.309983,
+                36.246754
+              ],
+              [
+                114.298973,
+                36.24593
+              ],
+              [
+                114.273871,
+                36.254747
+              ],
+              [
+                114.256445,
+                36.263998
+              ],
+              [
+                114.241031,
+                36.251356
+              ],
+              [
+                114.235558,
+                36.252761
+              ],
+              [
+                114.22373,
+                36.270875
+              ],
+              [
+                114.210645,
+                36.272764
+              ],
+              [
+                114.203095,
+                36.245736
+              ],
+              [
+                114.185165,
+                36.248449
+              ],
+              [
+                114.181139,
+                36.243314
+              ],
+              [
+                114.168871,
+                36.243411
+              ],
+              [
+                114.176672,
+                36.263126
+              ],
+              [
+                114.164844,
+                36.269567
+              ],
+              [
+                114.162831,
+                36.26516
+              ],
+              [
+                114.131438,
+                36.281674
+              ],
+              [
+                114.121435,
+                36.272715
+              ],
+              [
+                114.097528,
+                36.275233
+              ],
+              [
+                114.092621,
+                36.2778
+              ],
+              [
+                114.085386,
+                36.2701
+              ],
+              [
+                114.060536,
+                36.276493
+              ],
+              [
+                114.058271,
+                36.285354
+              ],
+              [
+                114.042606,
+                36.297313
+              ],
+              [
+                114.047953,
+                36.310334
+              ],
+              [
+                114.061542,
+                36.317982
+              ],
+              [
+                114.055692,
+                36.329984
+              ],
+              [
+                114.045185,
+                36.325919
+              ],
+              [
+                114.029017,
+                36.326548
+              ],
+              [
+                114.025997,
+                36.330516
+              ],
+              [
+                114.03254,
+                36.339904
+              ],
+              [
+                114.030841,
+                36.350742
+              ],
+              [
+                114.024676,
+                36.354854
+              ],
+              [
+                114.015176,
+                36.352967
+              ],
+              [
+                114.008507,
+                36.342517
+              ],
+              [
+                113.985859,
+                36.357563
+              ],
+              [
+                113.977932,
+                36.358579
+              ],
+              [
+                113.979819,
+                36.344113
+              ],
+              [
+                113.994478,
+                36.34421
+              ],
+              [
+                113.994352,
+                36.337049
+              ],
+              [
+                114.001964,
+                36.331339
+              ],
+              [
+                113.991647,
+                36.326839
+              ],
+              [
+                113.993849,
+                36.314594
+              ],
+              [
+                113.98221,
+                36.317692
+              ],
+              [
+                113.977869,
+                36.329258
+              ],
+              [
+                113.968495,
+                36.33971
+              ],
+              [
+                113.964217,
+                36.35258
+              ],
+              [
+                113.953207,
+                36.358192
+              ],
+              [
+                113.946727,
+                36.354805
+              ],
+              [
+                113.948804,
+                36.346097
+              ],
+              [
+                113.960317,
+                36.344742
+              ],
+              [
+                113.956101,
+                36.335597
+              ],
+              [
+                113.93446,
+                36.33613
+              ],
+              [
+                113.931629,
+                36.319482
+              ],
+              [
+                113.911182,
+                36.314788
+              ],
+              [
+                113.901116,
+                36.337001
+              ],
+              [
+                113.881487,
+                36.353886
+              ],
+              [
+                113.853617,
+                36.350113
+              ],
+              [
+                113.849339,
+                36.346823
+              ],
+              [
+                113.853995,
+                36.329742
+              ],
+              [
+                113.834177,
+                36.334339
+              ],
+              [
+                113.818261,
+                36.331146
+              ],
+              [
+                113.801274,
+                36.338355
+              ],
+              [
+                113.796808,
+                36.347548
+              ],
+              [
+                113.777431,
+                36.349822
+              ],
+              [
+                113.778626,
+                36.359788
+              ],
+              [
+                113.763401,
+                36.356015
+              ],
+              [
+                113.75516,
+                36.365931
+              ],
+              [
+                113.7422,
+                36.364432
+              ],
+              [
+                113.743269,
+                36.357563
+              ],
+              [
+                113.73314,
+                36.357079
+              ],
+              [
+                113.731442,
+                36.363367
+              ],
+              [
+                113.728736,
+                36.341452
+              ],
+              [
+                113.736412,
+                36.324709
+              ],
+              [
+                113.723326,
+                36.304865
+              ],
+              [
+                113.709045,
+                36.299733
+              ],
+              [
+                113.716217,
+                36.262593
+              ],
+              [
+                113.709108,
+                36.261528
+              ],
+              [
+                113.700552,
+                36.252276
+              ],
+              [
+                113.703886,
+                36.23784
+              ],
+              [
+                113.695204,
+                36.228779
+              ],
+              [
+                113.677274,
+                36.222528
+              ],
+              [
+                113.672178,
+                36.211963
+              ],
+              [
+                113.682055,
+                36.216277
+              ],
+              [
+                113.698476,
+                36.21429
+              ],
+              [
+                113.705396,
+                36.20067
+              ],
+              [
+                113.691492,
+                36.20193
+              ],
+              [
+                113.686334,
+                36.195483
+              ],
+              [
+                113.697909,
+                36.181861
+              ],
+              [
+                113.672304,
+                36.175606
+              ],
+              [
+                113.664503,
+                36.177449
+              ],
+              [
+                113.651669,
+                36.172212
+              ],
+              [
+                113.659973,
+                36.164162
+              ],
+              [
+                113.679287,
+                36.159943
+              ],
+              [
+                113.681363,
+                36.150728
+              ],
+              [
+                113.695582,
+                36.153201
+              ],
+              [
+                113.706843,
+                36.147381
+              ],
+              [
+                113.702628,
+                36.143209
+              ],
+              [
+                113.705648,
+                36.134138
+              ],
+              [
+                113.713763,
+                36.132974
+              ],
+              [
+                113.693191,
+                36.124192
+              ],
+              [
+                113.673499,
+                36.125357
+              ],
+              [
+                113.668529,
+                36.129675
+              ],
+              [
+                113.655507,
+                36.125114
+              ],
+              [
+                113.673814,
+                36.111625
+              ],
+              [
+                113.669284,
+                36.104005
+              ],
+              [
+                113.679539,
+                36.094007
+              ],
+              [
+                113.684069,
+                36.078328
+              ],
+              [
+                113.68237,
+                36.066821
+              ],
+              [
+                113.685767,
+                36.055992
+              ],
+              [
+                113.668655,
+                36.049096
+              ],
+              [
+                113.66142,
+                36.04288
+              ],
+              [
+                113.660414,
+                36.034671
+              ],
+              [
+                113.670165,
+                36.029522
+              ],
+              [
+                113.695141,
+                36.026753
+              ],
+              [
+                113.695204,
+                36.018202
+              ],
+              [
+                113.680734,
+                36.014801
+              ],
+              [
+                113.695896,
+                35.999884
+              ],
+              [
+                113.686459,
+                35.986421
+              ],
+              [
+                113.678784,
+                35.98579
+              ],
+              [
+                113.648901,
+                35.994149
+              ],
+              [
+                113.637828,
+                35.988463
+              ],
+              [
+                113.636884,
+                35.975874
+              ],
+              [
+                113.647831,
+                35.967123
+              ],
+              [
+                113.653997,
+                35.93143
+              ],
+              [
+                113.654437,
+                35.917227
+              ],
+              [
+                113.648712,
+                35.908518
+              ],
+              [
+                113.637388,
+                35.869928
+              ],
+              [
+                113.644056,
+                35.854885
+              ],
+              [
+                113.658212,
+                35.853911
+              ],
+              [
+                113.661043,
+                35.837259
+              ],
+              [
+                113.700552,
+                35.837308
+              ],
+              [
+                113.709108,
+                35.833655
+              ],
+              [
+                113.705962,
+                35.826594
+              ],
+              [
+                113.711813,
+                35.81807
+              ],
+              [
+                113.726786,
+                35.823185
+              ],
+              [
+                113.731819,
+                35.818752
+              ],
+              [
+                113.742892,
+                35.819093
+              ],
+              [
+                113.756229,
+                35.793713
+              ],
+              [
+                113.751888,
+                35.788304
+              ],
+              [
+                113.757865,
+                35.782798
+              ],
+              [
+                113.759752,
+                35.767398
+              ],
+              [
+                113.778563,
+                35.763206
+              ],
+              [
+                113.776613,
+                35.759404
+              ],
+              [
+                113.800205,
+                35.740782
+              ],
+              [
+                113.808006,
+                35.742488
+              ],
+              [
+                113.801652,
+                35.733517
+              ],
+              [
+                113.799953,
+                35.713572
+              ],
+              [
+                113.794228,
+                35.695329
+              ],
+              [
+                113.777556,
+                35.684644
+              ],
+              [
+                113.785546,
+                35.674447
+              ],
+              [
+                113.806244,
+                35.672983
+              ],
+              [
+                113.811529,
+                35.676838
+              ],
+              [
+                113.843677,
+                35.677814
+              ],
+              [
+                113.859216,
+                35.682351
+              ],
+              [
+                113.868402,
+                35.680741
+              ],
+              [
+                113.886332,
+                35.684401
+              ],
+              [
+                113.901619,
+                35.677423
+              ],
+              [
+                113.923072,
+                35.681815
+              ],
+              [
+                113.927476,
+                35.686011
+              ],
+              [
+                113.931691,
+                35.703963
+              ],
+              [
+                113.949055,
+                35.70089
+              ],
+              [
+                113.956227,
+                35.691426
+              ],
+              [
+                113.969565,
+                35.689572
+              ],
+              [
+                113.98523,
+                35.700743
+              ],
+              [
+                113.995988,
+                35.704792
+              ],
+              [
+                113.998316,
+                35.719814
+              ],
+              [
+                114.002468,
+                35.724788
+              ],
+              [
+                114.017567,
+                35.72591
+              ],
+              [
+                114.032854,
+                35.737028
+              ],
+              [
+                114.042983,
+                35.748095
+              ],
+              [
+                114.055377,
+                35.749216
+              ],
+              [
+                114.067267,
+                35.759112
+              ],
+              [
+                114.066575,
+                35.775391
+              ],
+              [
+                114.071357,
+                35.779679
+              ],
+              [
+                114.078151,
+                35.803018
+              ],
+              [
+                114.069155,
+                35.805259
+              ],
+              [
+                114.051414,
+                35.797513
+              ],
+              [
+                114.037132,
+                35.80331
+              ],
+              [
+                114.025179,
+                35.797074
+              ],
+              [
+                114.022537,
+                35.804285
+              ],
+              [
+                114.035685,
+                35.818411
+              ],
+              [
+                114.035937,
+                35.824548
+              ],
+              [
+                114.025619,
+                35.829419
+              ],
+              [
+                114.014987,
+                35.845001
+              ],
+              [
+                114.013981,
+                35.852548
+              ],
+              [
+                114.019957,
+                35.858634
+              ],
+              [
+                114.038642,
+                35.859461
+              ],
+              [
+                114.056698,
+                35.870268
+              ],
+              [
+                114.070287,
+                35.873189
+              ],
+              [
+                114.075131,
+                35.880928
+              ],
+              [
+                114.07488,
+                35.904383
+              ],
+              [
+                114.081611,
+                35.915086
+              ],
+              [
+                114.052735,
+                35.93109
+              ],
+              [
+                114.040467,
+                35.935662
+              ],
+              [
+                114.038768,
+                35.944319
+              ],
+              [
+                114.028828,
+                35.950494
+              ],
+              [
+                114.030464,
+                35.97179
+              ],
+              [
+                114.044619,
+                35.972276
+              ],
+              [
+                114.065506,
+                35.964109
+              ],
+              [
+                114.073055,
+                35.974512
+              ],
+              [
+                114.084002,
+                35.974415
+              ],
+              [
+                114.094571,
+                35.981075
+              ],
+              [
+                114.108035,
+                35.981852
+              ],
+              [
+                114.103505,
+                35.995267
+              ],
+              [
+                114.111306,
+                36.017085
+              ],
+              [
+                114.121687,
+                36.027044
+              ],
+              [
+                114.135716,
+                36.031562
+              ],
+              [
+                114.158931,
+                36.047299
+              ],
+              [
+                114.175225,
+                36.052107
+              ],
+              [
+                114.179251,
+                36.039431
+              ],
+              [
+                114.174847,
+                36.031319
+              ],
+              [
+                114.178245,
+                36.013198
+              ],
+              [
+                114.169877,
+                36.000856
+              ],
+              [
+                114.174847,
+                35.988803
+              ],
+              [
+                114.181768,
+                35.982873
+              ],
+              [
+                114.191771,
+                35.981415
+              ],
+              [
+                114.197559,
+                35.990115
+              ],
+              [
+                114.205045,
+                35.988657
+              ],
+              [
+                114.218005,
+                35.997648
+              ],
+              [
+                114.223604,
+                35.981707
+              ],
+              [
+                114.251412,
+                35.971936
+              ],
+              [
+                114.279974,
+                35.972811
+              ],
+              [
+                114.279974,
+                35.947382
+              ],
+              [
+                114.296897,
+                35.957885
+              ],
+              [
+                114.309291,
+                35.952731
+              ],
+              [
+                114.293626,
+                35.938288
+              ],
+              [
+                114.303,
+                35.930604
+              ],
+              [
+                114.295576,
+                35.924621
+              ],
+              [
+                114.290166,
+                35.928853
+              ],
+              [
+                114.277206,
+                35.924475
+              ],
+              [
+                114.270789,
+                35.899858
+              ],
+              [
+                114.280855,
+                35.892315
+              ],
+              [
+                114.274626,
+                35.882242
+              ],
+              [
+                114.250908,
+                35.876791
+              ],
+              [
+                114.244303,
+                35.871875
+              ],
+              [
+                114.243044,
+                35.863259
+              ],
+              [
+                114.234425,
+                35.855956
+              ],
+              [
+                114.229204,
+                35.841057
+              ],
+              [
+                114.237005,
+                35.809156
+              ],
+              [
+                114.241786,
+                35.806526
+              ],
+              [
+                114.24317,
+                35.793079
+              ],
+              [
+                114.250845,
+                35.793566
+              ],
+              [
+                114.263365,
+                35.774416
+              ],
+              [
+                114.25569,
+                35.774416
+              ],
+              [
+                114.255249,
+                35.767349
+              ],
+              [
+                114.270411,
+                35.76072
+              ],
+              [
+                114.284315,
+                35.783285
+              ],
+              [
+                114.294632,
+                35.794346
+              ],
+              [
+                114.328353,
+                35.802141
+              ],
+              [
+                114.350373,
+                35.816025
+              ],
+              [
+                114.364717,
+                35.818947
+              ],
+              [
+                114.396802,
+                35.816804
+              ],
+              [
+                114.408441,
+                35.820749
+              ],
+              [
+                114.43845,
+                35.817437
+              ],
+              [
+                114.445811,
+                35.819191
+              ],
+              [
+                114.451347,
+                35.828737
+              ],
+              [
+                114.47085,
+                35.827471
+              ],
+              [
+                114.478273,
+                35.834824
+              ],
+              [
+                114.509478,
+                35.836723
+              ],
+              [
+                114.55295,
+                35.828201
+              ],
+              [
+                114.566476,
+                35.843735
+              ],
+              [
+                114.57044,
+                35.835993
+              ],
+              [
+                114.587552,
+                35.840083
+              ],
+              [
+                114.597618,
+                35.825181
+              ],
+              [
+                114.611647,
+                35.82221
+              ],
+              [
+                114.613849,
+                35.808085
+              ],
+              [
+                114.636561,
+                35.794054
+              ],
+              [
+                114.658706,
+                35.791471
+              ],
+              [
+                114.675252,
+                35.782067
+              ],
+              [
+                114.695572,
+                35.78733
+              ],
+              [
+                114.709224,
+                35.787427
+              ],
+              [
+                114.719857,
+                35.778363
+              ],
+              [
+                114.751439,
+                35.763352
+              ],
+              [
+                114.753389,
+                35.753018
+              ],
+              [
+                114.751439,
+                35.737661
+              ],
+              [
+                114.735648,
+                35.708645
+              ],
+              [
+                114.727029,
+                35.697865
+              ],
+              [
+                114.707903,
+                35.694304
+              ],
+              [
+                114.705638,
+                35.689523
+              ],
+              [
+                114.687897,
+                35.684157
+              ],
+              [
+                114.677454,
+                35.671031
+              ],
+              [
+                114.672924,
+                35.65395
+              ],
+              [
+                114.660719,
+                35.651119
+              ],
+              [
+                114.645243,
+                35.654828
+              ],
+              [
+                114.618694,
+                35.647458
+              ],
+              [
+                114.615611,
+                35.636572
+              ],
+              [
+                114.591704,
+                35.629054
+              ],
+              [
+                114.576857,
+                35.616798
+              ],
+              [
+                114.558361,
+                35.613477
+              ],
+              [
+                114.549301,
+                35.614796
+              ],
+              [
+                114.54345,
+                35.602635
+              ],
+              [
+                114.502558,
+                35.609277
+              ],
+              [
+                114.495008,
+                35.600047
+              ],
+              [
+                114.500167,
+                35.593404
+              ],
+              [
+                114.497587,
+                35.584123
+              ],
+              [
+                114.482677,
+                35.584416
+              ],
+              [
+                114.486137,
+                35.573033
+              ],
+              [
+                114.476071,
+                35.565215
+              ],
+              [
+                114.455499,
+                35.557641
+              ],
+              [
+                114.426182,
+                35.54425
+              ],
+              [
+                114.416871,
+                35.533839
+              ],
+              [
+                114.402275,
+                35.526018
+              ],
+              [
+                114.39504,
+                35.508857
+              ],
+              [
+                114.409259,
+                35.489149
+              ],
+              [
+                114.420394,
+                35.483769
+              ],
+              [
+                114.419073,
+                35.474181
+              ]
+            ]
+          ]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "adcode": 410600,
+        "name": "楣ゅ甯�",
+        "center": [
+          114.295444,
+          35.748236
+        ],
+        "centroid": [
+          114.31602,
+          35.721499
+        ],
+        "childrenNum": 5,
+        "level": "city",
+        "parent": {
+          "adcode": 410000
+        },
+        "subFeatureIndex": 5,
+        "acroutes": [
+          100000,
+          410000
+        ]
+      },
+      "geometry": {
+        "type": "MultiPolygon",
+        "coordinates": [
+          [
+            [
+              [
+                113.995988,
+                35.704792
+              ],
+              [
+                114.019769,
+                35.695621
+              ],
+              [
+                114.026815,
+                35.683766
+              ],
+              [
+                114.039838,
+                35.681522
+              ],
+              [
+                114.050218,
+                35.675667
+              ],
+              [
+                114.059026,
+                35.657366
+              ],
+              [
+                114.064311,
+                35.637793
+              ],
+              [
+                114.058523,
+                35.62671
+              ],
+              [
+                114.060284,
+                35.611377
+              ],
+              [
+                114.056195,
+                35.594528
+              ],
+              [
+                114.072804,
+                35.579629
+              ],
+              [
+                114.080102,
+                35.567316
+              ],
+              [
+                114.104889,
+                35.554269
+              ],
+              [
+                114.120114,
+                35.551142
+              ],
+              [
+                114.139176,
+                35.538336
+              ],
+              [
+                114.17145,
+                35.523965
+              ],
+              [
+                114.19196,
+                35.521862
+              ],
+              [
+                114.202214,
+                35.524845
+              ],
+              [
+                114.215615,
+                35.51756
+              ],
+              [
+                114.224863,
+                35.516533
+              ],
+              [
+                114.259842,
+                35.504945
+              ],
+              [
+                114.276325,
+                35.501277
+              ],
+              [
+                114.289914,
+                35.501815
+              ],
+              [
+                114.283686,
+                35.492181
+              ],
+              [
+                114.275822,
+                35.490176
+              ],
+              [
+                114.27255,
+                35.476187
+              ],
+              [
+                114.275444,
+                35.465376
+              ],
+              [
+                114.29803,
+                35.458722
+              ],
+              [
+                114.312374,
+                35.446978
+              ],
+              [
+                114.324012,
+                35.444531
+              ],
+              [
+                114.339426,
+                35.450648
+              ],
+              [
+                114.343704,
+                35.462147
+              ],
+              [
+                114.360439,
+                35.4688
+              ],
+              [
+                114.370001,
+                35.461755
+              ],
+              [
+                114.382018,
+                35.46655
+              ],
+              [
+                114.38466,
+                35.475355
+              ],
+              [
+                114.39504,
+                35.478192
+              ],
+              [
+                114.409699,
+                35.469191
+              ],
+              [
+                114.419073,
+                35.474181
+              ],
+              [
+                114.420394,
+                35.483769
+              ],
+              [
+                114.409259,
+                35.489149
+              ],
+              [
+                114.39504,
+                35.508857
+              ],
+              [
+                114.402275,
+                35.526018
+              ],
+              [
+                114.416871,
+                35.533839
+              ],
+              [
+                114.426182,
+                35.54425
+              ],
+              [
+                114.455499,
+                35.557641
+              ],
+              [
+                114.476071,
+                35.565215
+              ],
+              [
+                114.486137,
+                35.573033
+              ],
+              [
+                114.482677,
+                35.584416
+              ],
+              [
+                114.497587,
+                35.584123
+              ],
+              [
+                114.500167,
+                35.593404
+              ],
+              [
+                114.495008,
+                35.600047
+              ],
+              [
+                114.502558,
+                35.609277
+              ],
+              [
+                114.54345,
+                35.602635
+              ],
+              [
+                114.549301,
+                35.614796
+              ],
+              [
+                114.558361,
+                35.613477
+              ],
+              [
+                114.576857,
+                35.616798
+              ],
+              [
+                114.591704,
+                35.629054
+              ],
+              [
+                114.615611,
+                35.636572
+              ],
+              [
+                114.618694,
+                35.647458
+              ],
+              [
+                114.645243,
+                35.654828
+              ],
+              [
+                114.660719,
+                35.651119
+              ],
+              [
+                114.672924,
+                35.65395
+              ],
+              [
+                114.677454,
+                35.671031
+              ],
+              [
+                114.687897,
+                35.684157
+              ],
+              [
+                114.705638,
+                35.689523
+              ],
+              [
+                114.707903,
+                35.694304
+              ],
+              [
+                114.727029,
+                35.697865
+              ],
+              [
+                114.735648,
+                35.708645
+              ],
+              [
+                114.751439,
+                35.737661
+              ],
+              [
+                114.753389,
+                35.753018
+              ],
+              [
+                114.751439,
+                35.763352
+              ],
+              [
+                114.719857,
+                35.778363
+              ],
+              [
+                114.709224,
+                35.787427
+              ],
+              [
+                114.695572,
+                35.78733
+              ],
+              [
+                114.675252,
+                35.782067
+              ],
+              [
+                114.658706,
+                35.791471
+              ],
+              [
+                114.636561,
+                35.794054
+              ],
+              [
+                114.613849,
+                35.808085
+              ],
+              [
+                114.611647,
+                35.82221
+              ],
+              [
+                114.597618,
+                35.825181
+              ],
+              [
+                114.587552,
+                35.840083
+              ],
+              [
+                114.57044,
+                35.835993
+              ],
+              [
+                114.566476,
+                35.843735
+              ],
+              [
+                114.55295,
+                35.828201
+              ],
+              [
+                114.509478,
+                35.836723
+              ],
+              [
+                114.478273,
+                35.834824
+              ],
+              [
+                114.47085,
+                35.827471
+              ],
+              [
+                114.451347,
+                35.828737
+              ],
+              [
+                114.445811,
+                35.819191
+              ],
+              [
+                114.43845,
+                35.817437
+              ],
+              [
+                114.408441,
+                35.820749
+              ],
+              [
+                114.396802,
+                35.816804
+              ],
+              [
+                114.364717,
+                35.818947
+              ],
+              [
+                114.350373,
+                35.816025
+              ],
+              [
+                114.328353,
+                35.802141
+              ],
+              [
+                114.294632,
+                35.794346
+              ],
+              [
+                114.284315,
+                35.783285
+              ],
+              [
+                114.270411,
+                35.76072
+              ],
+              [
+                114.255249,
+                35.767349
+              ],
+              [
+                114.25569,
+                35.774416
+              ],
+              [
+                114.263365,
+                35.774416
+              ],
+              [
+                114.250845,
+                35.793566
+              ],
+              [
+                114.24317,
+                35.793079
+              ],
+              [
+                114.241786,
+                35.806526
+              ],
+              [
+                114.237005,
+                35.809156
+              ],
+              [
+                114.229204,
+                35.841057
+              ],
+              [
+                114.234425,
+                35.855956
+              ],
+              [
+                114.243044,
+                35.863259
+              ],
+              [
+                114.244303,
+                35.871875
+              ],
+              [
+                114.250908,
+                35.876791
+              ],
+              [
+                114.274626,
+                35.882242
+              ],
+              [
+                114.280855,
+                35.892315
+              ],
+              [
+                114.270789,
+                35.899858
+              ],
+              [
+                114.277206,
+                35.924475
+              ],
+              [
+                114.290166,
+                35.928853
+              ],
+              [
+                114.295576,
+                35.924621
+              ],
+              [
+                114.303,
+                35.930604
+              ],
+              [
+                114.293626,
+                35.938288
+              ],
+              [
+                114.309291,
+                35.952731
+              ],
+              [
+                114.296897,
+                35.957885
+              ],
+              [
+                114.279974,
+                35.947382
+              ],
+              [
+                114.279974,
+                35.972811
+              ],
+              [
+                114.251412,
+                35.971936
+              ],
+              [
+                114.223604,
+                35.981707
+              ],
+              [
+                114.218005,
+                35.997648
+              ],
+              [
+                114.205045,
+                35.988657
+              ],
+              [
+                114.197559,
+                35.990115
+              ],
+              [
+                114.191771,
+                35.981415
+              ],
+              [
+                114.181768,
+                35.982873
+              ],
+              [
+                114.174847,
+                35.988803
+              ],
+              [
+                114.169877,
+                36.000856
+              ],
+              [
+                114.178245,
+                36.013198
+              ],
+              [
+                114.174847,
+                36.031319
+              ],
+              [
+                114.179251,
+                36.039431
+              ],
+              [
+                114.175225,
+                36.052107
+              ],
+              [
+                114.158931,
+                36.047299
+              ],
+              [
+                114.135716,
+                36.031562
+              ],
+              [
+                114.121687,
+                36.027044
+              ],
+              [
+                114.111306,
+                36.017085
+              ],
+              [
+                114.103505,
+                35.995267
+              ],
+              [
+                114.108035,
+                35.981852
+              ],
+              [
+                114.094571,
+                35.981075
+              ],
+              [
+                114.084002,
+                35.974415
+              ],
+              [
+                114.073055,
+                35.974512
+              ],
+              [
+                114.065506,
+                35.964109
+              ],
+              [
+                114.044619,
+                35.972276
+              ],
+              [
+                114.030464,
+                35.97179
+              ],
+              [
+                114.028828,
+                35.950494
+              ],
+              [
+                114.038768,
+                35.944319
+              ],
+              [
+                114.040467,
+                35.935662
+              ],
+              [
+                114.052735,
+                35.93109
+              ],
+              [
+                114.081611,
+                35.915086
+              ],
+              [
+                114.07488,
+                35.904383
+              ],
+              [
+                114.075131,
+                35.880928
+              ],
+              [
+                114.070287,
+                35.873189
+              ],
+              [
+                114.056698,
+                35.870268
+              ],
+              [
+                114.038642,
+                35.859461
+              ],
+              [
+                114.019957,
+                35.858634
+              ],
+              [
+                114.013981,
+                35.852548
+              ],
+              [
+                114.014987,
+                35.845001
+              ],
+              [
+                114.025619,
+                35.829419
+              ],
+              [
+                114.035937,
+                35.824548
+              ],
+              [
+                114.035685,
+                35.818411
+              ],
+              [
+                114.022537,
+                35.804285
+              ],
+              [
+                114.025179,
+                35.797074
+              ],
+              [
+                114.037132,
+                35.80331
+              ],
+              [
+                114.051414,
+                35.797513
+              ],
+              [
+                114.069155,
+                35.805259
+              ],
+              [
+                114.078151,
+                35.803018
+              ],
+              [
+                114.071357,
+                35.779679
+              ],
+              [
+                114.066575,
+                35.775391
+              ],
+              [
+                114.067267,
+                35.759112
+              ],
+              [
+                114.055377,
+                35.749216
+              ],
+              [
+                114.042983,
+                35.748095
+              ],
+              [
+                114.032854,
+                35.737028
+              ],
+              [
+                114.017567,
+                35.72591
+              ],
+              [
+                114.002468,
+                35.724788
+              ],
+              [
+                113.998316,
+                35.719814
+              ],
+              [
+                113.995988,
+                35.704792
+              ]
+            ]
+          ]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "adcode": 410700,
+        "name": "鏂颁埂甯�",
+        "center": [
+          113.883991,
+          35.302616
+        ],
+        "centroid": [
+          114.095247,
+          35.263966
+        ],
+        "childrenNum": 12,
+        "level": "city",
+        "parent": {
+          "adcode": 410000
+        },
+        "subFeatureIndex": 6,
+        "acroutes": [
+          100000,
+          410000
+        ]
+      },
+      "geometry": {
+        "type": "MultiPolygon",
+        "coordinates": [
+          [
+            [
+              [
+                114.951248,
+                35.380791
+              ],
+              [
+                114.898087,
+                35.390781
+              ],
+              [
+                114.879339,
+                35.387452
+              ],
+              [
+                114.856942,
+                35.387794
+              ],
+              [
+                114.809632,
+                35.354242
+              ],
+              [
+                114.808877,
+                35.346942
+              ],
+              [
+                114.783964,
+                35.343023
+              ],
+              [
+                114.76163,
+                35.345228
+              ],
+              [
+                114.754521,
+                35.341308
+              ],
+              [
+                114.73722,
+                35.344689
+              ],
+              [
+                114.718598,
+                35.343611
+              ],
+              [
+                114.697397,
+                35.337486
+              ],
+              [
+                114.701675,
+                35.329008
+              ],
+              [
+                114.698341,
+                35.306756
+              ],
+              [
+                114.688715,
+                35.295138
+              ],
+              [
+                114.679907,
+                35.291166
+              ],
+              [
+                114.663173,
+                35.291559
+              ],
+              [
+                114.642915,
+                35.297148
+              ],
+              [
+                114.627313,
+                35.298275
+              ],
+              [
+                114.607495,
+                35.292686
+              ],
+              [
+                114.5968,
+                35.286116
+              ],
+              [
+                114.562198,
+                35.276064
+              ],
+              [
+                114.549364,
+                35.261891
+              ],
+              [
+                114.541437,
+                35.242809
+              ],
+              [
+                114.527093,
+                35.235646
+              ],
+              [
+                114.50413,
+                35.228286
+              ],
+              [
+                114.494756,
+                35.220141
+              ],
+              [
+                114.487836,
+                35.206645
+              ],
+              [
+                114.465376,
+                35.216706
+              ],
+              [
+                114.4499,
+                35.214448
+              ],
+              [
+                114.442602,
+                35.205958
+              ],
+              [
+                114.431781,
+                35.208755
+              ],
+              [
+                114.431404,
+                35.222055
+              ],
+              [
+                114.415298,
+                35.228188
+              ],
+              [
+                114.399696,
+                35.225097
+              ],
+              [
+                114.394348,
+                35.219797
+              ],
+              [
+                114.392146,
+                35.226912
+              ],
+              [
+                114.407497,
+                35.236627
+              ],
+              [
+                114.396299,
+                35.241828
+              ],
+              [
+                114.391266,
+                35.258114
+              ],
+              [
+                114.395481,
+                35.26449
+              ],
+              [
+                114.407497,
+                35.269738
+              ],
+              [
+                114.395732,
+                35.293078
+              ],
+              [
+                114.408189,
+                35.29249
+              ],
+              [
+                114.416493,
+                35.302785
+              ],
+              [
+                114.412782,
+                35.313521
+              ],
+              [
+                114.403659,
+                35.316805
+              ],
+              [
+                114.404226,
+                35.326313
+              ],
+              [
+                114.423414,
+                35.324842
+              ],
+              [
+                114.429076,
+                35.342876
+              ],
+              [
+                114.411083,
+                35.358064
+              ],
+              [
+                114.413474,
+                35.370163
+              ],
+              [
+                114.423666,
+                35.380155
+              ],
+              [
+                114.415172,
+                35.413255
+              ],
+              [
+                114.407686,
+                35.418004
+              ],
+              [
+                114.405043,
+                35.426325
+              ],
+              [
+                114.412027,
+                35.43582
+              ],
+              [
+                114.429139,
+                35.449523
+              ],
+              [
+                114.428573,
+                35.468947
+              ],
+              [
+                114.419073,
+                35.474181
+              ],
+              [
+                114.409699,
+                35.469191
+              ],
+              [
+                114.39504,
+                35.478192
+              ],
+              [
+                114.38466,
+                35.475355
+              ],
+              [
+                114.382018,
+                35.46655
+              ],
+              [
+                114.370001,
+                35.461755
+              ],
+              [
+                114.360439,
+                35.4688
+              ],
+              [
+                114.343704,
+                35.462147
+              ],
+              [
+                114.339426,
+                35.450648
+              ],
+              [
+                114.324012,
+                35.444531
+              ],
+              [
+                114.312374,
+                35.446978
+              ],
+              [
+                114.29803,
+                35.458722
+              ],
+              [
+                114.275444,
+                35.465376
+              ],
+              [
+                114.27255,
+                35.476187
+              ],
+              [
+                114.275822,
+                35.490176
+              ],
+              [
+                114.283686,
+                35.492181
+              ],
+              [
+                114.289914,
+                35.501815
+              ],
+              [
+                114.276325,
+                35.501277
+              ],
+              [
+                114.259842,
+                35.504945
+              ],
+              [
+                114.224863,
+                35.516533
+              ],
+              [
+                114.215615,
+                35.51756
+              ],
+              [
+                114.202214,
+                35.524845
+              ],
+              [
+                114.19196,
+                35.521862
+              ],
+              [
+                114.17145,
+                35.523965
+              ],
+              [
+                114.139176,
+                35.538336
+              ],
+              [
+                114.120114,
+                35.551142
+              ],
+              [
+                114.104889,
+                35.554269
+              ],
+              [
+                114.080102,
+                35.567316
+              ],
+              [
+                114.072804,
+                35.579629
+              ],
+              [
+                114.056195,
+                35.594528
+              ],
+              [
+                114.060284,
+                35.611377
+              ],
+              [
+                114.058523,
+                35.62671
+              ],
+              [
+                114.064311,
+                35.637793
+              ],
+              [
+                114.059026,
+                35.657366
+              ],
+              [
+                114.050218,
+                35.675667
+              ],
+              [
+                114.039838,
+                35.681522
+              ],
+              [
+                114.026815,
+                35.683766
+              ],
+              [
+                114.019769,
+                35.695621
+              ],
+              [
+                113.995988,
+                35.704792
+              ],
+              [
+                113.98523,
+                35.700743
+              ],
+              [
+                113.969565,
+                35.689572
+              ],
+              [
+                113.956227,
+                35.691426
+              ],
+              [
+                113.949055,
+                35.70089
+              ],
+              [
+                113.931691,
+                35.703963
+              ],
+              [
+                113.927476,
+                35.686011
+              ],
+              [
+                113.923072,
+                35.681815
+              ],
+              [
+                113.901619,
+                35.677423
+              ],
+              [
+                113.886332,
+                35.684401
+              ],
+              [
+                113.868402,
+                35.680741
+              ],
+              [
+                113.859216,
+                35.682351
+              ],
+              [
+                113.843677,
+                35.677814
+              ],
+              [
+                113.811529,
+                35.676838
+              ],
+              [
+                113.806244,
+                35.672983
+              ],
+              [
+                113.785546,
+                35.674447
+              ],
+              [
+                113.777556,
+                35.684644
+              ],
+              [
+                113.794228,
+                35.695329
+              ],
+              [
+                113.799953,
+                35.713572
+              ],
+              [
+                113.801652,
+                35.733517
+              ],
+              [
+                113.808006,
+                35.742488
+              ],
+              [
+                113.800205,
+                35.740782
+              ],
+              [
+                113.776613,
+                35.759404
+              ],
+              [
+                113.778563,
+                35.763206
+              ],
+              [
+                113.759752,
+                35.767398
+              ],
+              [
+                113.757865,
+                35.782798
+              ],
+              [
+                113.751888,
+                35.788304
+              ],
+              [
+                113.756229,
+                35.793713
+              ],
+              [
+                113.742892,
+                35.819093
+              ],
+              [
+                113.731819,
+                35.818752
+              ],
+              [
+                113.726786,
+                35.823185
+              ],
+              [
+                113.711813,
+                35.81807
+              ],
+              [
+                113.705962,
+                35.826594
+              ],
+              [
+                113.709108,
+                35.833655
+              ],
+              [
+                113.700552,
+                35.837308
+              ],
+              [
+                113.661043,
+                35.837259
+              ],
+              [
+                113.650285,
+                35.826594
+              ],
+              [
+                113.641225,
+                35.822503
+              ],
+              [
+                113.623799,
+                35.831513
+              ],
+              [
+                113.606057,
+                35.82372
+              ],
+              [
+                113.585296,
+                35.825766
+              ],
+              [
+                113.582906,
+                35.818314
+              ],
+              [
+                113.588945,
+                35.813443
+              ],
+              [
+                113.586177,
+                35.806136
+              ],
+              [
+                113.604988,
+                35.800095
+              ],
+              [
+                113.583472,
+                35.794249
+              ],
+              [
+                113.583157,
+                35.786794
+              ],
+              [
+                113.592972,
+                35.789669
+              ],
+              [
+                113.599137,
+                35.775098
+              ],
+              [
+                113.595929,
+                35.759063
+              ],
+              [
+                113.586806,
+                35.744048
+              ],
+              [
+                113.591147,
+                35.727958
+              ],
+              [
+                113.601968,
+                35.706402
+              ],
+              [
+                113.59316,
+                35.691426
+              ],
+              [
+                113.614928,
+                35.682986
+              ],
+              [
+                113.623484,
+                35.671665
+              ],
+              [
+                113.61908,
+                35.667225
+              ],
+              [
+                113.624994,
+                35.652388
+              ],
+              [
+                113.624868,
+                35.632032
+              ],
+              [
+                113.591965,
+                35.631543
+              ],
+              [
+                113.578565,
+                35.633545
+              ],
+              [
+                113.572966,
+                35.646775
+              ],
+              [
+                113.565416,
+                35.64492
+              ],
+              [
+                113.560069,
+                35.660441
+              ],
+              [
+                113.547989,
+                35.657562
+              ],
+              [
+                113.547423,
+                35.648629
+              ],
+              [
+                113.553337,
+                35.63872
+              ],
+              [
+                113.556671,
+                35.619776
+              ],
+              [
+                113.547172,
+                35.616847
+              ],
+              [
+                113.542453,
+                35.596774
+              ],
+              [
+                113.533016,
+                35.594039
+              ],
+              [
+                113.529556,
+                35.587787
+              ],
+              [
+                113.506719,
+                35.565997
+              ],
+              [
+                113.506593,
+                35.5486
+              ],
+              [
+                113.49854,
+                35.532373
+              ],
+              [
+                113.508669,
+                35.523427
+              ],
+              [
+                113.506593,
+                35.516484
+              ],
+              [
+                113.491997,
+                35.516484
+              ],
+              [
+                113.485392,
+                35.520738
+              ],
+              [
+                113.462555,
+                35.515555
+              ],
+              [
+                113.440535,
+                35.507879
+              ],
+              [
+                113.416629,
+                35.516191
+              ],
+              [
+                113.401404,
+                35.50695
+              ],
+              [
+                113.391778,
+                35.506852
+              ],
+              [
+                113.383159,
+                35.495067
+              ],
+              [
+                113.390772,
+                35.485774
+              ],
+              [
+                113.392093,
+                35.472225
+              ],
+              [
+                113.404046,
+                35.46151
+              ],
+              [
+                113.427638,
+                35.448887
+              ],
+              [
+                113.447707,
+                35.432443
+              ],
+              [
+                113.458843,
+                35.413304
+              ],
+              [
+                113.462366,
+                35.396853
+              ],
+              [
+                113.482246,
+                35.369967
+              ],
+              [
+                113.476207,
+                35.363942
+              ],
+              [
+                113.465952,
+                35.363844
+              ],
+              [
+                113.469978,
+                35.353214
+              ],
+              [
+                113.466581,
+                35.349686
+              ],
+              [
+                113.480044,
+                35.33974
+              ],
+              [
+                113.478157,
+                35.327195
+              ],
+              [
+                113.485014,
+                35.316265
+              ],
+              [
+                113.486461,
+                35.294108
+              ],
+              [
+                113.511878,
+                35.293961
+              ],
+              [
+                113.518798,
+                35.288813
+              ],
+              [
+                113.523265,
+                35.263656
+              ],
+              [
+                113.538804,
+                35.243201
+              ],
+              [
+                113.54044,
+                35.228384
+              ],
+              [
+                113.528172,
+                35.220141
+              ],
+              [
+                113.52144,
+                35.211504
+              ],
+              [
+                113.521063,
+                35.192901
+              ],
+              [
+                113.532828,
+                35.164572
+              ],
+              [
+                113.534967,
+                35.151803
+              ],
+              [
+                113.542642,
+                35.144632
+              ],
+              [
+                113.565102,
+                35.137461
+              ],
+              [
+                113.564598,
+                35.127685
+              ],
+              [
+                113.593852,
+                35.131173
+              ],
+              [
+                113.60027,
+                35.120709
+              ],
+              [
+                113.607064,
+                35.099284
+              ],
+              [
+                113.620464,
+                35.068513
+              ],
+              [
+                113.645503,
+                35.038075
+              ],
+              [
+                113.645503,
+                35.019236
+              ],
+              [
+                113.629964,
+                35.016777
+              ],
+              [
+                113.634431,
+                35.008167
+              ],
+              [
+                113.644371,
+                35.004379
+              ],
+              [
+                113.634494,
+                34.997687
+              ],
+              [
+                113.617696,
+                34.992175
+              ],
+              [
+                113.60763,
+                34.982382
+              ],
+              [
+                113.595299,
+                34.961857
+              ],
+              [
+                113.592091,
+                34.933743
+              ],
+              [
+                113.631348,
+                34.929311
+              ],
+              [
+                113.650348,
+                34.928769
+              ],
+              [
+                113.665069,
+                34.918525
+              ],
+              [
+                113.670731,
+                34.910299
+              ],
+              [
+                113.684824,
+                34.906358
+              ],
+              [
+                113.716846,
+                34.913402
+              ],
+              [
+                113.725528,
+                34.917392
+              ],
+              [
+                113.749057,
+                34.919017
+              ],
+              [
+                113.766106,
+                34.91488
+              ],
+              [
+                113.777116,
+                34.905028
+              ],
+              [
+                113.78649,
+                34.890445
+              ],
+              [
+                113.800456,
+                34.87995
+              ],
+              [
+                113.826062,
+                34.877683
+              ],
+              [
+                113.870163,
+                34.885666
+              ],
+              [
+                113.905331,
+                34.901333
+              ],
+              [
+                113.953585,
+                34.898082
+              ],
+              [
+                113.973654,
+                34.910447
+              ],
+              [
+                113.985293,
+                34.928276
+              ],
+              [
+                114.018385,
+                34.958608
+              ],
+              [
+                114.028451,
+                34.959346
+              ],
+              [
+                114.051225,
+                34.944527
+              ],
+              [
+                114.080542,
+                34.944527
+              ],
+              [
+                114.101869,
+                34.954768
+              ],
+              [
+                114.120491,
+                34.956638
+              ],
+              [
+                114.160566,
+                34.933496
+              ],
+              [
+                114.172834,
+                34.931871
+              ],
+              [
+                114.200704,
+                34.939504
+              ],
+              [
+                114.208505,
+                34.926602
+              ],
+              [
+                114.22071,
+                34.919066
+              ],
+              [
+                114.226624,
+                34.913156
+              ],
+              [
+                114.243988,
+                34.905126
+              ],
+              [
+                114.284441,
+                34.90823
+              ],
+              [
+                114.340118,
+                34.907146
+              ],
+              [
+                114.350499,
+                34.908082
+              ],
+              [
+                114.367233,
+                34.918968
+              ],
+              [
+                114.383024,
+                34.936894
+              ],
+              [
+                114.40064,
+                34.939504
+              ],
+              [
+                114.417815,
+                34.930788
+              ],
+              [
+                114.442728,
+                34.914486
+              ],
+              [
+                114.513378,
+                34.895273
+              ],
+              [
+                114.540682,
+                34.899264
+              ],
+              [
+                114.557165,
+                34.905521
+              ],
+              [
+                114.586608,
+                34.912466
+              ],
+              [
+                114.633981,
+                34.905225
+              ],
+              [
+                114.660279,
+                34.898722
+              ],
+              [
+                114.679593,
+                34.909018
+              ],
+              [
+                114.695572,
+                34.894387
+              ],
+              [
+                114.709161,
+                34.89212
+              ],
+              [
+                114.724323,
+                34.885222
+              ],
+              [
+                114.733886,
+                34.888474
+              ],
+              [
+                114.76119,
+                34.89148
+              ],
+              [
+                114.774779,
+                34.901382
+              ],
+              [
+                114.778994,
+                34.916751
+              ],
+              [
+                114.768173,
+                34.927882
+              ],
+              [
+                114.74175,
+                34.948712
+              ],
+              [
+                114.741435,
+                34.960675
+              ],
+              [
+                114.756597,
+                34.97559
+              ],
+              [
+                114.765908,
+                34.977707
+              ],
+              [
+                114.800384,
+                35.006691
+              ],
+              [
+                114.815861,
+                35.014022
+              ],
+              [
+                114.824668,
+                35.0123
+              ],
+              [
+                114.838635,
+                35.018154
+              ],
+              [
+                114.852664,
+                35.029124
+              ],
+              [
+                114.850903,
+                35.041911
+              ],
+              [
+                114.833979,
+                35.042157
+              ],
+              [
+                114.819258,
+                35.051796
+              ],
+              [
+                114.83184,
+                35.074167
+              ],
+              [
+                114.861158,
+                35.082966
+              ],
+              [
+                114.876256,
+                35.091126
+              ],
+              [
+                114.882925,
+                35.098743
+              ],
+              [
+                114.883554,
+                35.109653
+              ],
+              [
+                114.872545,
+                35.126015
+              ],
+              [
+                114.860654,
+                35.137412
+              ],
+              [
+                114.841718,
+                35.151165
+              ],
+              [
+                114.841026,
+                35.159219
+              ],
+              [
+                114.850274,
+                35.172625
+              ],
+              [
+                114.861661,
+                35.182395
+              ],
+              [
+                114.876571,
+                35.189023
+              ],
+              [
+                114.909348,
+                35.194521
+              ],
+              [
+                114.928285,
+                35.194766
+              ],
+              [
+                114.9325,
+                35.198644
+              ],
+              [
+                114.929732,
+                35.248205
+              ],
+              [
+                114.954645,
+                35.255465
+              ],
+              [
+                114.957728,
+                35.261155
+              ],
+              [
+                114.975595,
+                35.261547
+              ],
+              [
+                114.975784,
+                35.270277
+              ],
+              [
+                114.963579,
+                35.273759
+              ],
+              [
+                114.98025,
+                35.294696
+              ],
+              [
+                115.003151,
+                35.316363
+              ],
+              [
+                115.014538,
+                35.318128
+              ],
+              [
+                115.017243,
+                35.337437
+              ],
+              [
+                114.976979,
+                35.352381
+              ],
+              [
+                114.968171,
+                35.354389
+              ],
+              [
+                114.960873,
+                35.369722
+              ],
+              [
+                114.951248,
+                35.380791
+              ]
+            ]
+          ]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "adcode": 410800,
+        "name": "鐒︿綔甯�",
+        "center": [
+          113.238266,
+          35.23904
+        ],
+        "centroid": [
+          113.137719,
+          35.114644
+        ],
+        "childrenNum": 10,
+        "level": "city",
+        "parent": {
+          "adcode": 410000
+        },
+        "subFeatureIndex": 7,
+        "acroutes": [
+          100000,
+          410000
+        ]
+      },
+      "geometry": {
+        "type": "MultiPolygon",
+        "coordinates": [
+          [
+            [
+              [
+                112.827266,
+                34.819218
+              ],
+              [
+                112.838653,
+                34.812116
+              ],
+              [
+                112.853501,
+                34.810736
+              ],
+              [
+                112.866461,
+                34.829524
+              ],
+              [
+                112.873192,
+                34.832827
+              ],
+              [
+                112.879106,
+                34.849688
+              ],
+              [
+                112.884516,
+                34.853089
+              ],
+              [
+                112.902321,
+                34.852301
+              ],
+              [
+                112.914148,
+                34.84747
+              ],
+              [
+                112.938181,
+                34.831595
+              ],
+              [
+                112.943025,
+                34.831102
+              ],
+              [
+                112.976117,
+                34.847765
+              ],
+              [
+                112.989077,
+                34.856343
+              ],
+              [
+                112.992851,
+                34.863539
+              ],
+              [
+                113.004364,
+                34.864081
+              ],
+              [
+                113.025063,
+                34.854913
+              ],
+              [
+                113.039595,
+                34.841948
+              ],
+              [
+                113.06023,
+                34.83756
+              ],
+              [
+                113.107666,
+                34.844709
+              ],
+              [
+                113.119431,
+                34.853977
+              ],
+              [
+                113.14793,
+                34.856096
+              ],
+              [
+                113.139815,
+                34.884631
+              ],
+              [
+                113.179512,
+                34.893697
+              ],
+              [
+                113.197631,
+                34.900299
+              ],
+              [
+                113.227703,
+                34.908427
+              ],
+              [
+                113.236951,
+                34.925174
+              ],
+              [
+                113.239342,
+                34.939504
+              ],
+              [
+                113.243934,
+                34.946201
+              ],
+              [
+                113.260543,
+                34.953586
+              ],
+              [
+                113.28986,
+                34.952601
+              ],
+              [
+                113.315277,
+                34.942212
+              ],
+              [
+                113.333018,
+                34.944871
+              ],
+              [
+                113.343462,
+                34.950533
+              ],
+              [
+                113.362587,
+                34.970323
+              ],
+              [
+                113.37561,
+                34.98002
+              ],
+              [
+                113.407821,
+                34.989518
+              ],
+              [
+                113.427198,
+                34.983563
+              ],
+              [
+                113.429463,
+                34.964761
+              ],
+              [
+                113.449658,
+                34.960232
+              ],
+              [
+                113.477339,
+                34.957278
+              ],
+              [
+                113.495835,
+                34.959937
+              ],
+              [
+                113.515086,
+                34.965992
+              ],
+              [
+                113.543271,
+                34.96801
+              ],
+              [
+                113.552582,
+                34.965155
+              ],
+              [
+                113.57479,
+                34.950583
+              ],
+              [
+                113.592091,
+                34.933743
+              ],
+              [
+                113.595299,
+                34.961857
+              ],
+              [
+                113.60763,
+                34.982382
+              ],
+              [
+                113.617696,
+                34.992175
+              ],
+              [
+                113.634494,
+                34.997687
+              ],
+              [
+                113.644371,
+                35.004379
+              ],
+              [
+                113.634431,
+                35.008167
+              ],
+              [
+                113.629964,
+                35.016777
+              ],
+              [
+                113.645503,
+                35.019236
+              ],
+              [
+                113.645503,
+                35.038075
+              ],
+              [
+                113.620464,
+                35.068513
+              ],
+              [
+                113.607064,
+                35.099284
+              ],
+              [
+                113.60027,
+                35.120709
+              ],
+              [
+                113.593852,
+                35.131173
+              ],
+              [
+                113.564598,
+                35.127685
+              ],
+              [
+                113.565102,
+                35.137461
+              ],
+              [
+                113.542642,
+                35.144632
+              ],
+              [
+                113.534967,
+                35.151803
+              ],
+              [
+                113.532828,
+                35.164572
+              ],
+              [
+                113.521063,
+                35.192901
+              ],
+              [
+                113.52144,
+                35.211504
+              ],
+              [
+                113.528172,
+                35.220141
+              ],
+              [
+                113.54044,
+                35.228384
+              ],
+              [
+                113.538804,
+                35.243201
+              ],
+              [
+                113.523265,
+                35.263656
+              ],
+              [
+                113.518798,
+                35.288813
+              ],
+              [
+                113.511878,
+                35.293961
+              ],
+              [
+                113.486461,
+                35.294108
+              ],
+              [
+                113.485014,
+                35.316265
+              ],
+              [
+                113.478157,
+                35.327195
+              ],
+              [
+                113.480044,
+                35.33974
+              ],
+              [
+                113.466581,
+                35.349686
+              ],
+              [
+                113.469978,
+                35.353214
+              ],
+              [
+                113.465952,
+                35.363844
+              ],
+              [
+                113.476207,
+                35.363942
+              ],
+              [
+                113.482246,
+                35.369967
+              ],
+              [
+                113.462366,
+                35.396853
+              ],
+              [
+                113.458843,
+                35.413304
+              ],
+              [
+                113.447707,
+                35.432443
+              ],
+              [
+                113.427638,
+                35.448887
+              ],
+              [
+                113.404046,
+                35.46151
+              ],
+              [
+                113.392093,
+                35.472225
+              ],
+              [
+                113.390772,
+                35.485774
+              ],
+              [
+                113.383159,
+                35.495067
+              ],
+              [
+                113.370766,
+                35.4801
+              ],
+              [
+                113.357743,
+                35.479415
+              ],
+              [
+                113.34818,
+                35.46836
+              ],
+              [
+                113.325909,
+                35.469289
+              ],
+              [
+                113.31232,
+                35.481274
+              ],
+              [
+                113.295522,
+                35.47154
+              ],
+              [
+                113.294705,
+                35.467284
+              ],
+              [
+                113.309426,
+                35.466158
+              ],
+              [
+                113.322197,
+                35.461559
+              ],
+              [
+                113.323959,
+                35.453339
+              ],
+              [
+                113.315151,
+                35.451871
+              ],
+              [
+                113.306406,
+                35.460777
+              ],
+              [
+                113.299486,
+                35.450208
+              ],
+              [
+                113.297347,
+                35.438512
+              ],
+              [
+                113.304393,
+                35.42701
+              ],
+              [
+                113.27841,
+                35.435135
+              ],
+              [
+                113.265387,
+                35.434597
+              ],
+              [
+                113.262116,
+                35.440763
+              ],
+              [
+                113.253497,
+                35.440274
+              ],
+              [
+                113.244815,
+                35.448446
+              ],
+              [
+                113.230031,
+                35.453242
+              ],
+              [
+                113.208515,
+                35.447272
+              ],
+              [
+                113.190019,
+                35.449082
+              ],
+              [
+                113.190962,
+                35.434107
+              ],
+              [
+                113.184482,
+                35.424759
+              ],
+              [
+                113.188572,
+                35.415654
+              ],
+              [
+                113.185237,
+                35.409045
+              ],
+              [
+                113.175737,
+                35.414528
+              ],
+              [
+                113.164224,
+                35.408555
+              ],
+              [
+                113.167056,
+                35.400232
+              ],
+              [
+                113.177247,
+                35.397833
+              ],
+              [
+                113.170138,
+                35.386717
+              ],
+              [
+                113.154662,
+                35.380889
+              ],
+              [
+                113.154159,
+                35.36933
+              ],
+              [
+                113.148748,
+                35.370163
+              ],
+              [
+                113.148874,
+                35.351205
+              ],
+              [
+                113.136669,
+                35.347334
+              ],
+              [
+                113.13799,
+                35.336261
+              ],
+              [
+                113.12654,
+                35.332242
+              ],
+              [
+                113.107603,
+                35.340818
+              ],
+              [
+                113.096216,
+                35.337388
+              ],
+              [
+                113.084074,
+                35.340524
+              ],
+              [
+                113.067151,
+                35.353557
+              ],
+              [
+                113.060608,
+                35.352283
+              ],
+              [
+                113.039658,
+                35.360219
+              ],
+              [
+                113.020218,
+                35.356006
+              ],
+              [
+                112.998199,
+                35.362472
+              ],
+              [
+                112.990838,
+                35.355712
+              ],
+              [
+                112.994047,
+                35.345424
+              ],
+              [
+                112.985302,
+                35.338123
+              ],
+              [
+                112.986309,
+                35.316608
+              ],
+              [
+                112.99153,
+                35.302344
+              ],
+              [
+                112.988951,
+                35.28999
+              ],
+              [
+                112.982785,
+                35.287244
+              ],
+              [
+                112.964667,
+                35.293127
+              ],
+              [
+                112.948184,
+                35.285969
+              ],
+              [
+                112.936042,
+                35.2844
+              ],
+              [
+                112.936671,
+                35.271895
+              ],
+              [
+                112.929687,
+                35.256888
+              ],
+              [
+                112.907102,
+                35.245801
+              ],
+              [
+                112.893639,
+                35.248647
+              ],
+              [
+                112.884705,
+                35.244232
+              ],
+              [
+                112.868096,
+                35.243888
+              ],
+              [
+                112.857087,
+                35.247371
+              ],
+              [
+                112.855136,
+                35.253307
+              ],
+              [
+                112.822233,
+                35.258114
+              ],
+              [
+                112.798264,
+                35.238688
+              ],
+              [
+                112.784423,
+                35.234567
+              ],
+              [
+                112.784926,
+                35.222938
+              ],
+              [
+                112.767248,
+                35.204093
+              ],
+              [
+                112.758,
+                35.204436
+              ],
+              [
+                112.76687,
+                35.182985
+              ],
+              [
+                112.761963,
+                35.158041
+              ],
+              [
+                112.766304,
+                35.107196
+              ],
+              [
+                112.754288,
+                35.098891
+              ],
+              [
+                112.753219,
+                35.08508
+              ],
+              [
+                112.743341,
+                35.06458
+              ],
+              [
+                112.736043,
+                35.060008
+              ],
+              [
+                112.735289,
+                35.043338
+              ],
+              [
+                112.72711,
+                35.035026
+              ],
+              [
+                112.698988,
+                35.023221
+              ],
+              [
+                112.684581,
+                35.012497
+              ],
+              [
+                112.675962,
+                34.993504
+              ],
+              [
+                112.666462,
+                34.9875
+              ],
+              [
+                112.653062,
+                34.988681
+              ],
+              [
+                112.644695,
+                34.978888
+              ],
+              [
+                112.624752,
+                34.977903
+              ],
+              [
+                112.614182,
+                34.98002
+              ],
+              [
+                112.596001,
+                34.971013
+              ],
+              [
+                112.579392,
+                34.971751
+              ],
+              [
+                112.5692,
+                34.958608
+              ],
+              [
+                112.571654,
+                34.948761
+              ],
+              [
+                112.578134,
+                34.944083
+              ],
+              [
+                112.579329,
+                34.933398
+              ],
+              [
+                112.585369,
+                34.926503
+              ],
+              [
+                112.618209,
+                34.920298
+              ],
+              [
+                112.638404,
+                34.919756
+              ],
+              [
+                112.638152,
+                34.896998
+              ],
+              [
+                112.642115,
+                34.895717
+              ],
+              [
+                112.636328,
+                34.88266
+              ],
+              [
+                112.638215,
+                34.854174
+              ],
+              [
+                112.656648,
+                34.859645
+              ],
+              [
+                112.676088,
+                34.853188
+              ],
+              [
+                112.696723,
+                34.840617
+              ],
+              [
+                112.72214,
+                34.828833
+              ],
+              [
+                112.753281,
+                34.828587
+              ],
+              [
+                112.773288,
+                34.835884
+              ],
+              [
+                112.78782,
+                34.83761
+              ],
+              [
+                112.813363,
+                34.832877
+              ],
+              [
+                112.827266,
+                34.819218
+              ]
+            ]
+          ]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "adcode": 410900,
+        "name": "婵槼甯�",
+        "center": [
+          115.041299,
+          35.768234
+        ],
+        "centroid": [
+          115.287416,
+          35.809288
+        ],
+        "childrenNum": 6,
+        "level": "city",
+        "parent": {
+          "adcode": 410000
+        },
+        "subFeatureIndex": 8,
+        "acroutes": [
+          100000,
+          410000
+        ]
+      },
+      "geometry": {
+        "type": "MultiPolygon",
+        "coordinates": [
+          [
+            [
+              [
+                115.017243,
+                35.337437
+              ],
+              [
+                115.025359,
+                35.346354
+              ],
+              [
+                115.03511,
+                35.368302
+              ],
+              [
+                115.043226,
+                35.376971
+              ],
+              [
+                115.057758,
+                35.378489
+              ],
+              [
+                115.075437,
+                35.375159
+              ],
+              [
+                115.088648,
+                35.392985
+              ],
+              [
+                115.084811,
+                35.410073
+              ],
+              [
+                115.091605,
+                35.416045
+              ],
+              [
+                115.105886,
+                35.403953
+              ],
+              [
+                115.11482,
+                35.4041
+              ],
+              [
+                115.118343,
+                35.416388
+              ],
+              [
+                115.11784,
+                35.400134
+              ],
+              [
+                115.126584,
+                35.408751
+              ],
+              [
+                115.126459,
+                35.418053
+              ],
+              [
+                115.136902,
+                35.421528
+              ],
+              [
+                115.167666,
+                35.426129
+              ],
+              [
+                115.189497,
+                35.42515
+              ],
+              [
+                115.197927,
+                35.420696
+              ],
+              [
+                115.209817,
+                35.423094
+              ],
+              [
+                115.237373,
+                35.423094
+              ],
+              [
+                115.257505,
+                35.435576
+              ],
+              [
+                115.272604,
+                35.448299
+              ],
+              [
+                115.270842,
+                35.456813
+              ],
+              [
+                115.286696,
+                35.464495
+              ],
+              [
+                115.307143,
+                35.480002
+              ],
+              [
+                115.339102,
+                35.490665
+              ],
+              [
+                115.355774,
+                35.490127
+              ],
+              [
+                115.357976,
+                35.506559
+              ],
+              [
+                115.350301,
+                35.52944
+              ],
+              [
+                115.353509,
+                35.540585
+              ],
+              [
+                115.360492,
+                35.543273
+              ],
+              [
+                115.34596,
+                35.546987
+              ],
+              [
+                115.345079,
+                35.553634
+              ],
+              [
+                115.357976,
+                35.554709
+              ],
+              [
+                115.359234,
+                35.56546
+              ],
+              [
+                115.369489,
+                35.559743
+              ],
+              [
+                115.370747,
+                35.57103
+              ],
+              [
+                115.383267,
+                35.56888
+              ],
+              [
+                115.38377,
+                35.577674
+              ],
+              [
+                115.389747,
+                35.577332
+              ],
+              [
+                115.394465,
+                35.586907
+              ],
+              [
+                115.411892,
+                35.603612
+              ],
+              [
+                115.416233,
+                35.624025
+              ],
+              [
+                115.439384,
+                35.643455
+              ],
+              [
+                115.45247,
+                35.660734
+              ],
+              [
+                115.461467,
+                35.680839
+              ],
+              [
+                115.485939,
+                35.710157
+              ],
+              [
+                115.511545,
+                35.727129
+              ],
+              [
+                115.524127,
+                35.726349
+              ],
+              [
+                115.533249,
+                35.734151
+              ],
+              [
+                115.552815,
+                35.730347
+              ],
+              [
+                115.562504,
+                35.738637
+              ],
+              [
+                115.583076,
+                35.730591
+              ],
+              [
+                115.588927,
+                35.738539
+              ],
+              [
+                115.619502,
+                35.739222
+              ],
+              [
+                115.665114,
+                35.751069
+              ],
+              [
+                115.69355,
+                35.754091
+              ],
+              [
+                115.698268,
+                35.768421
+              ],
+              [
+                115.696255,
+                35.788889
+              ],
+              [
+                115.704434,
+                35.788938
+              ],
+              [
+                115.706384,
+                35.8056
+              ],
+              [
+                115.717394,
+                35.802726
+              ],
+              [
+                115.720288,
+                35.817096
+              ],
+              [
+                115.7279,
+                35.815635
+              ],
+              [
+                115.73482,
+                35.832925
+              ],
+              [
+                115.753128,
+                35.832925
+              ],
+              [
+                115.752876,
+                35.838379
+              ],
+              [
+                115.76376,
+                35.838379
+              ],
+              [
+                115.773386,
+                35.854155
+              ],
+              [
+                115.816795,
+                35.844271
+              ],
+              [
+                115.821325,
+                35.852694
+              ],
+              [
+                115.841331,
+                35.850016
+              ],
+              [
+                115.840891,
+                35.857173
+              ],
+              [
+                115.863099,
+                35.855518
+              ],
+              [
+                115.865489,
+                35.868613
+              ],
+              [
+                115.872598,
+                35.872799
+              ],
+              [
+                115.871403,
+                35.858342
+              ],
+              [
+                115.875115,
+                35.859218
+              ],
+              [
+                115.876058,
+                35.875038
+              ],
+              [
+                115.882853,
+                35.879857
+              ],
+              [
+                115.88323,
+                35.895381
+              ],
+              [
+                115.889081,
+                35.897522
+              ],
+              [
+                115.88474,
+                35.909102
+              ],
+              [
+                115.87241,
+                35.909346
+              ],
+              [
+                115.875115,
+                35.920194
+              ],
+              [
+                115.907829,
+                35.926858
+              ],
+              [
+                115.909968,
+                35.935759
+              ],
+              [
+                115.906319,
+                35.945388
+              ],
+              [
+                115.911856,
+                35.960268
+              ],
+              [
+                115.957656,
+                35.967998
+              ],
+              [
+                115.985148,
+                35.974123
+              ],
+              [
+                116.008489,
+                35.973103
+              ],
+              [
+                116.038561,
+                35.963428
+              ],
+              [
+                116.04869,
+                35.970283
+              ],
+              [
+                116.05259,
+                35.999155
+              ],
+              [
+                116.062845,
+                36.02889
+              ],
+              [
+                116.073666,
+                36.026121
+              ],
+              [
+                116.079517,
+                36.042637
+              ],
+              [
+                116.076057,
+                36.056915
+              ],
+              [
+                116.087129,
+                36.071385
+              ],
+              [
+                116.087758,
+                36.080949
+              ],
+              [
+                116.096881,
+                36.092163
+              ],
+              [
+                116.099334,
+                36.112061
+              ],
+              [
+                116.057435,
+                36.104927
+              ],
+              [
+                116.02881,
+                36.072308
+              ],
+              [
+                116.016416,
+                36.061383
+              ],
+              [
+                115.989804,
+                36.045454
+              ],
+              [
+                115.964073,
+                36.041617
+              ],
+              [
+                115.935888,
+                36.031416
+              ],
+              [
+                115.922928,
+                36.021555
+              ],
+              [
+                115.913806,
+                36.020243
+              ],
+              [
+                115.896002,
+                36.026219
+              ],
+              [
+                115.872221,
+                36.016696
+              ],
+              [
+                115.859701,
+                36.003723
+              ],
+              [
+                115.846238,
+                36.004986
+              ],
+              [
+                115.837493,
+                36.011012
+              ],
+              [
+                115.817298,
+                36.012761
+              ],
+              [
+                115.797481,
+                36.006978
+              ],
+              [
+                115.779866,
+                35.99376
+              ],
+              [
+                115.786723,
+                35.991233
+              ],
+              [
+                115.774518,
+                35.981901
+              ],
+              [
+                115.774707,
+                35.974512
+              ],
+              [
+                115.764326,
+                35.970964
+              ],
+              [
+                115.736016,
+                35.966929
+              ],
+              [
+                115.717897,
+                35.971401
+              ],
+              [
+                115.698709,
+                35.966053
+              ],
+              [
+                115.687007,
+                35.955211
+              ],
+              [
+                115.68405,
+                35.944367
+              ],
+              [
+                115.651776,
+                35.928901
+              ],
+              [
+                115.642402,
+                35.920048
+              ],
+              [
+                115.607297,
+                35.925837
+              ],
+              [
+                115.583768,
+                35.921702
+              ],
+              [
+                115.548223,
+                35.898009
+              ],
+              [
+                115.503429,
+                35.888714
+              ],
+              [
+                115.460082,
+                35.867737
+              ],
+              [
+                115.433848,
+                35.839061
+              ],
+              [
+                115.432841,
+                35.83385
+              ],
+              [
+                115.417931,
+                35.824987
+              ],
+              [
+                115.407614,
+                35.808669
+              ],
+              [
+                115.370936,
+                35.78884
+              ],
+              [
+                115.363512,
+                35.779923
+              ],
+              [
+                115.335013,
+                35.796733
+              ],
+              [
+                115.335705,
+                35.81432
+              ],
+              [
+                115.344072,
+                35.83872
+              ],
+              [
+                115.349608,
+                35.860971
+              ],
+              [
+                115.338158,
+                35.864719
+              ],
+              [
+                115.343632,
+                35.872118
+              ],
+              [
+                115.356906,
+                35.87022
+              ],
+              [
+                115.364267,
+                35.894019
+              ],
+              [
+                115.367413,
+                35.92034
+              ],
+              [
+                115.364141,
+                35.929485
+              ],
+              [
+                115.354138,
+                35.93751
+              ],
+              [
+                115.356529,
+                35.954628
+              ],
+              [
+                115.363135,
+                35.972033
+              ],
+              [
+                115.386286,
+                35.974464
+              ],
+              [
+                115.395975,
+                35.991671
+              ],
+              [
+                115.419693,
+                36.004743
+              ],
+              [
+                115.443096,
+                36.008874
+              ],
+              [
+                115.447752,
+                36.012664
+              ],
+              [
+                115.448884,
+                36.047397
+              ],
+              [
+                115.441586,
+                36.05575
+              ],
+              [
+                115.459579,
+                36.063374
+              ],
+              [
+                115.455112,
+                36.071288
+              ],
+              [
+                115.459768,
+                36.080415
+              ],
+              [
+                115.466374,
+                36.079687
+              ],
+              [
+                115.484241,
+                36.125842
+              ],
+              [
+                115.483549,
+                36.148982
+              ],
+              [
+                115.46996,
+                36.152862
+              ],
+              [
+                115.46392,
+                36.17129
+              ],
+              [
+                115.451275,
+                36.169739
+              ],
+              [
+                115.449639,
+                36.150146
+              ],
+              [
+                115.431332,
+                36.149176
+              ],
+              [
+                115.423656,
+                36.140347
+              ],
+              [
+                115.407802,
+                36.139571
+              ],
+              [
+                115.404594,
+                36.155626
+              ],
+              [
+                115.400127,
+                36.14025
+              ],
+              [
+                115.392641,
+                36.129189
+              ],
+              [
+                115.377919,
+                36.12851
+              ],
+              [
+                115.369237,
+                36.102695
+              ],
+              [
+                115.3598,
+                36.095318
+              ],
+              [
+                115.341367,
+                36.0876
+              ],
+              [
+                115.333251,
+                36.090609
+              ],
+              [
+                115.323248,
+                36.086775
+              ],
+              [
+                115.307961,
+                36.090706
+              ],
+              [
+                115.297517,
+                36.104491
+              ],
+              [
+                115.301166,
+                36.130111
+              ],
+              [
+                115.279335,
+                36.137825
+              ],
+              [
+                115.264111,
+                36.158827
+              ],
+              [
+                115.260399,
+                36.171581
+              ],
+              [
+                115.242091,
+                36.191218
+              ],
+              [
+                115.21334,
+                36.203482
+              ],
+              [
+                115.20296,
+                36.204063
+              ],
+              [
+                115.201765,
+                36.212739
+              ],
+              [
+                115.189245,
+                36.19558
+              ],
+              [
+                115.170686,
+                36.190975
+              ],
+              [
+                115.156845,
+                36.194708
+              ],
+              [
+                115.156657,
+                36.201882
+              ],
+              [
+                115.142879,
+                36.209686
+              ],
+              [
+                115.124949,
+                36.209976
+              ],
+              [
+                115.110416,
+                36.19941
+              ],
+              [
+                115.104565,
+                36.172212
+              ],
+              [
+                115.099469,
+                36.171678
+              ],
+              [
+                115.069523,
+                36.179436
+              ],
+              [
+                115.062728,
+                36.178224
+              ],
+              [
+                115.048447,
+                36.162028
+              ],
+              [
+                115.049391,
+                36.147284
+              ],
+              [
+                115.044987,
+                36.130839
+              ],
+              [
+                115.045931,
+                36.112207
+              ],
+              [
+                115.038381,
+                36.106675
+              ],
+              [
+                114.998432,
+                36.069734
+              ],
+              [
+                114.98931,
+                36.065898
+              ],
+              [
+                114.968675,
+                36.070414
+              ],
+              [
+                114.954582,
+                36.067792
+              ],
+              [
+                114.933381,
+                36.054876
+              ],
+              [
+                114.932123,
+                36.050068
+              ],
+              [
+                114.920798,
+                36.048319
+              ],
+              [
+                114.94244,
+                36.03812
+              ],
+              [
+                114.968926,
+                36.032971
+              ],
+              [
+                114.983962,
+                36.02583
+              ],
+              [
+                114.983396,
+                36.019417
+              ],
+              [
+                114.974211,
+                36.012226
+              ],
+              [
+                114.974274,
+                35.999009
+              ],
+              [
+                114.980376,
+                36.003334
+              ],
+              [
+                114.986164,
+                35.991865
+              ],
+              [
+                114.983333,
+                35.982922
+              ],
+              [
+                114.988366,
+                35.964741
+              ],
+              [
+                114.98025,
+                35.949814
+              ],
+              [
+                114.972324,
+                35.923259
+              ],
+              [
+                114.97786,
+                35.904723
+              ],
+              [
+                114.970814,
+                35.890223
+              ],
+              [
+                114.969996,
+                35.881366
+              ],
+              [
+                114.959112,
+                35.862723
+              ],
+              [
+                114.953009,
+                35.85766
+              ],
+              [
+                114.935646,
+                35.853814
+              ],
+              [
+                114.933003,
+                35.84505
+              ],
+              [
+                114.93401,
+                35.828055
+              ],
+              [
+                114.94546,
+                35.82523
+              ],
+              [
+                114.948669,
+                35.819629
+              ],
+              [
+                114.943573,
+                35.799754
+              ],
+              [
+                114.921365,
+                35.780118
+              ],
+              [
+                114.908405,
+                35.765741
+              ],
+              [
+                114.893746,
+                35.764132
+              ],
+              [
+                114.887832,
+                35.753506
+              ],
+              [
+                114.889594,
+                35.738978
+              ],
+              [
+                114.907776,
+                35.722594
+              ],
+              [
+                114.915514,
+                35.706743
+              ],
+              [
+                114.910544,
+                35.700939
+              ],
+              [
+                114.918408,
+                35.687962
+              ],
+              [
+                114.919226,
+                35.664785
+              ],
+              [
+                114.911047,
+                35.660685
+              ],
+              [
+                114.905888,
+                35.649606
+              ],
+              [
+                114.890034,
+                35.646823
+              ],
+              [
+                114.875502,
+                35.628907
+              ],
+              [
+                114.874432,
+                35.623878
+              ],
+              [
+                114.883051,
+                35.616065
+              ],
+              [
+                114.884813,
+                35.599852
+              ],
+              [
+                114.90853,
+                35.585979
+              ],
+              [
+                114.952884,
+                35.581094
+              ],
+              [
+                114.962006,
+                35.571421
+              ],
+              [
+                114.968423,
+                35.537554
+              ],
+              [
+                114.969492,
+                35.518
+              ],
+              [
+                114.964334,
+                35.504749
+              ],
+              [
+                114.953324,
+                35.501815
+              ],
+              [
+                114.940616,
+                35.491448
+              ],
+              [
+                114.93942,
+                35.481225
+              ],
+              [
+                114.947347,
+                35.478144
+              ],
+              [
+                114.970751,
+                35.480785
+              ],
+              [
+                114.967668,
+                35.456716
+              ],
+              [
+                114.96188,
+                35.446146
+              ],
+              [
+                114.96383,
+                35.440665
+              ],
+              [
+                114.981509,
+                35.434107
+              ],
+              [
+                114.985787,
+                35.414332
+              ],
+              [
+                114.967605,
+                35.399204
+              ],
+              [
+                114.951248,
+                35.380791
+              ],
+              [
+                114.960873,
+                35.369722
+              ],
+              [
+                114.968171,
+                35.354389
+              ],
+              [
+                114.976979,
+                35.352381
+              ],
+              [
+                115.017243,
+                35.337437
+              ]
+            ]
+          ],
+          [
+            [
+              [
+                115.504939,
+                35.899079
+              ],
+              [
+                115.51079,
+                35.907983
+              ],
+              [
+                115.505442,
+                35.914405
+              ],
+              [
+                115.490721,
+                35.908372
+              ],
+              [
+                115.490343,
+                35.899858
+              ],
+              [
+                115.497264,
+                35.895041
+              ],
+              [
+                115.504939,
+                35.899079
+              ]
+            ]
+          ]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "adcode": 411000,
+        "name": "璁告槍甯�",
+        "center": [
+          113.826063,
+          34.022956
+        ],
+        "centroid": [
+          113.715606,
+          34.071457
+        ],
+        "childrenNum": 6,
+        "level": "city",
+        "parent": {
+          "adcode": 410000
+        },
+        "subFeatureIndex": 9,
+        "acroutes": [
+          100000,
+          410000
+        ]
+      },
+      "geometry": {
+        "type": "MultiPolygon",
+        "coordinates": [
+          [
+            [
+              [
+                114.259905,
+                34.251854
+              ],
+              [
+                114.246442,
+                34.240433
+              ],
+              [
+                114.210267,
+                34.241228
+              ],
+              [
+                114.202906,
+                34.234623
+              ],
+              [
+                114.198314,
+                34.217737
+              ],
+              [
+                114.160503,
+                34.213564
+              ],
+              [
+                114.155345,
+                34.202039
+              ],
+              [
+                114.129299,
+                34.198214
+              ],
+              [
+                114.122882,
+                34.204176
+              ],
+              [
+                114.109544,
+                34.206958
+              ],
+              [
+                114.108475,
+                34.218929
+              ],
+              [
+                114.102058,
+                34.224343
+              ],
+              [
+                114.10816,
+                34.228813
+              ],
+              [
+                114.098661,
+                34.241923
+              ],
+              [
+                114.081926,
+                34.24952
+              ],
+              [
+                114.076453,
+                34.239639
+              ],
+              [
+                114.068589,
+                34.250265
+              ],
+              [
+                114.058837,
+                34.244753
+              ],
+              [
+                114.050847,
+                34.247137
+              ],
+              [
+                114.041033,
+                34.237851
+              ],
+              [
+                114.011275,
+                34.242022
+              ],
+              [
+                114.00316,
+                34.252549
+              ],
+              [
+                114.000266,
+                34.263471
+              ],
+              [
+                113.990577,
+                34.261138
+              ],
+              [
+                113.992905,
+                34.27335
+              ],
+              [
+                113.977303,
+                34.275583
+              ],
+              [
+                113.972459,
+                34.283426
+              ],
+              [
+                113.96472,
+                34.283128
+              ],
+              [
+                113.964406,
+                34.292954
+              ],
+              [
+                113.937354,
+                34.298612
+              ],
+              [
+                113.934271,
+                34.304864
+              ],
+              [
+                113.916278,
+                34.301688
+              ],
+              [
+                113.904702,
+                34.294543
+              ],
+              [
+                113.896083,
+                34.303375
+              ],
+              [
+                113.899229,
+                34.315879
+              ],
+              [
+                113.894573,
+                34.323767
+              ],
+              [
+                113.885451,
+                34.327785
+              ],
+              [
+                113.880481,
+                34.32972
+              ],
+              [
+                113.85022,
+                34.32719
+              ],
+              [
+                113.848584,
+                34.322725
+              ],
+              [
+                113.832353,
+                34.32342
+              ],
+              [
+                113.803791,
+                34.33721
+              ],
+              [
+                113.791208,
+                34.331803
+              ],
+              [
+                113.793159,
+                34.328083
+              ],
+              [
+                113.777242,
+                34.314589
+              ],
+              [
+                113.756732,
+                34.313795
+              ],
+              [
+                113.736852,
+                34.317863
+              ],
+              [
+                113.727227,
+                34.305757
+              ],
+              [
+                113.713386,
+                34.301391
+              ],
+              [
+                113.71326,
+                34.29092
+              ],
+              [
+                113.7003,
+                34.289381
+              ],
+              [
+                113.70332,
+                34.276725
+              ],
+              [
+                113.679728,
+                34.282532
+              ],
+              [
+                113.669851,
+                34.275385
+              ],
+              [
+                113.658589,
+                34.275037
+              ],
+              [
+                113.643994,
+                34.288488
+              ],
+              [
+                113.634494,
+                34.290026
+              ],
+              [
+                113.624805,
+                34.303375
+              ],
+              [
+                113.608951,
+                34.3132
+              ],
+              [
+                113.600836,
+                34.313299
+              ],
+              [
+                113.579697,
+                34.319897
+              ],
+              [
+                113.566737,
+                34.318359
+              ],
+              [
+                113.556608,
+                34.311513
+              ],
+              [
+                113.529619,
+                34.317913
+              ],
+              [
+                113.516848,
+                34.328579
+              ],
+              [
+                113.518169,
+                34.335771
+              ],
+              [
+                113.510871,
+                34.342715
+              ],
+              [
+                113.498729,
+                34.338598
+              ],
+              [
+                113.482875,
+                34.342864
+              ],
+              [
+                113.471425,
+                34.330811
+              ],
+              [
+                113.459409,
+                34.334432
+              ],
+              [
+                113.429085,
+                34.350303
+              ],
+              [
+                113.414175,
+                34.349361
+              ],
+              [
+                113.406751,
+                34.355213
+              ],
+              [
+                113.414867,
+                34.374947
+              ],
+              [
+                113.401655,
+                34.377525
+              ],
+              [
+                113.389828,
+                34.375988
+              ],
+              [
+                113.366991,
+                34.379805
+              ],
+              [
+                113.370388,
+                34.389918
+              ],
+              [
+                113.353968,
+                34.396411
+              ],
+              [
+                113.348809,
+                34.404738
+              ],
+              [
+                113.32528,
+                34.404986
+              ],
+              [
+                113.315969,
+                34.391157
+              ],
+              [
+                113.320436,
+                34.383375
+              ],
+              [
+                113.314019,
+                34.373856
+              ],
+              [
+                113.314648,
+                34.352287
+              ],
+              [
+                113.276586,
+                34.351444
+              ],
+              [
+                113.276334,
+                34.342814
+              ],
+              [
+                113.267904,
+                34.337805
+              ],
+              [
+                113.235567,
+                34.339045
+              ],
+              [
+                113.224557,
+                34.33473
+              ],
+              [
+                113.223362,
+                34.325057
+              ],
+              [
+                113.210276,
+                34.312009
+              ],
+              [
+                113.196436,
+                34.312257
+              ],
+              [
+                113.18379,
+                34.295634
+              ],
+              [
+                113.184356,
+                34.290225
+              ],
+              [
+                113.175297,
+                34.281639
+              ],
+              [
+                113.15202,
+                34.266351
+              ],
+              [
+                113.142583,
+                34.272804
+              ],
+              [
+                113.109365,
+                34.263471
+              ],
+              [
+                113.097726,
+                34.26223
+              ],
+              [
+                113.082439,
+                34.26645
+              ],
+              [
+                113.077343,
+                34.262677
+              ],
+              [
+                113.070171,
+                34.247186
+              ],
+              [
+                113.066962,
+                34.223647
+              ],
+              [
+                113.075392,
+                34.215502
+              ],
+              [
+                113.094203,
+                34.21118
+              ],
+              [
+                113.103892,
+                34.205418
+              ],
+              [
+                113.106094,
+                34.198115
+              ],
+              [
+                113.101941,
+                34.18778
+              ],
+              [
+                113.103011,
+                34.176798
+              ],
+              [
+                113.118047,
+                34.156818
+              ],
+              [
+                113.129811,
+                34.145733
+              ],
+              [
+                113.126477,
+                34.134696
+              ],
+              [
+                113.130629,
+                34.124105
+              ],
+              [
+                113.146483,
+                34.117939
+              ],
+              [
+                113.150384,
+                34.108141
+              ],
+              [
+                113.157493,
+                34.103118
+              ],
+              [
+                113.177876,
+                34.101228
+              ],
+              [
+                113.210654,
+                34.107445
+              ],
+              [
+                113.222355,
+                34.102422
+              ],
+              [
+                113.227137,
+                34.092523
+              ],
+              [
+                113.235064,
+                34.091926
+              ],
+              [
+                113.241166,
+                34.097945
+              ],
+              [
+                113.240097,
+                34.108539
+              ],
+              [
+                113.252113,
+                34.114308
+              ],
+              [
+                113.257398,
+                34.112319
+              ],
+              [
+                113.264381,
+                34.098542
+              ],
+              [
+                113.278914,
+                34.100134
+              ],
+              [
+                113.283129,
+                34.086802
+              ],
+              [
+                113.30043,
+                34.082623
+              ],
+              [
+                113.331949,
+                34.063268
+              ],
+              [
+                113.320687,
+                34.054858
+              ],
+              [
+                113.334528,
+                34.027183
+              ],
+              [
+                113.345034,
+                34.029075
+              ],
+              [
+                113.346104,
+                34.03928
+              ],
+              [
+                113.35466,
+                34.043112
+              ],
+              [
+                113.368626,
+                34.039877
+              ],
+              [
+                113.386368,
+                34.039827
+              ],
+              [
+                113.395742,
+                34.031315
+              ],
+              [
+                113.402222,
+                34.002687
+              ],
+              [
+                113.41342,
+                33.987049
+              ],
+              [
+                113.412665,
+                33.952028
+              ],
+              [
+                113.410715,
+                33.943308
+              ],
+              [
+                113.386116,
+                33.927808
+              ],
+              [
+                113.381586,
+                33.912007
+              ],
+              [
+                113.365481,
+                33.890519
+              ],
+              [
+                113.360762,
+                33.879997
+              ],
+              [
+                113.36762,
+                33.862691
+              ],
+              [
+                113.384669,
+                33.843286
+              ],
+              [
+                113.385802,
+                33.834854
+              ],
+              [
+                113.38102,
+                33.815542
+              ],
+              [
+                113.386053,
+                33.801817
+              ],
+              [
+                113.393351,
+                33.797873
+              ],
+              [
+                113.372401,
+                33.785593
+              ],
+              [
+                113.425814,
+                33.762175
+              ],
+              [
+                113.434873,
+                33.765371
+              ],
+              [
+                113.448211,
+                33.75868
+              ],
+              [
+                113.451042,
+                33.739301
+              ],
+              [
+                113.489481,
+                33.746094
+              ],
+              [
+                113.504014,
+                33.751238
+              ],
+              [
+                113.51798,
+                33.750439
+              ],
+              [
+                113.544341,
+                33.757131
+              ],
+              [
+                113.549373,
+                33.750489
+              ],
+              [
+                113.573091,
+                33.752137
+              ],
+              [
+                113.576552,
+                33.736304
+              ],
+              [
+                113.58775,
+                33.727062
+              ],
+              [
+                113.580767,
+                33.715171
+              ],
+              [
+                113.585485,
+                33.711024
+              ],
+              [
+                113.6087,
+                33.709175
+              ],
+              [
+                113.596746,
+                33.698081
+              ],
+              [
+                113.598256,
+                33.687536
+              ],
+              [
+                113.612475,
+                33.695732
+              ],
+              [
+                113.629335,
+                33.688885
+              ],
+              [
+                113.637954,
+                33.695532
+              ],
+              [
+                113.637388,
+                33.702679
+              ],
+              [
+                113.645063,
+                33.695932
+              ],
+              [
+                113.670983,
+                33.699081
+              ],
+              [
+                113.684257,
+                33.693833
+              ],
+              [
+                113.701936,
+                33.691234
+              ],
+              [
+                113.70678,
+                33.693683
+              ],
+              [
+                113.710303,
+                33.707876
+              ],
+              [
+                113.716406,
+                33.710624
+              ],
+              [
+                113.724018,
+                33.695632
+              ],
+              [
+                113.741822,
+                33.702329
+              ],
+              [
+                113.74371,
+                33.713422
+              ],
+              [
+                113.75906,
+                33.717519
+              ],
+              [
+                113.762206,
+                33.731808
+              ],
+              [
+                113.750378,
+                33.7398
+              ],
+              [
+                113.737167,
+                33.741948
+              ],
+              [
+                113.734399,
+                33.752337
+              ],
+              [
+                113.742703,
+                33.76672
+              ],
+              [
+                113.752895,
+                33.771463
+              ],
+              [
+                113.752958,
+                33.791484
+              ],
+              [
+                113.761262,
+                33.807756
+              ],
+              [
+                113.759312,
+                33.827918
+              ],
+              [
+                113.731127,
+                33.835652
+              ],
+              [
+                113.729554,
+                33.845032
+              ],
+              [
+                113.722445,
+                33.848624
+              ],
+              [
+                113.725528,
+                33.856406
+              ],
+              [
+                113.735908,
+                33.859199
+              ],
+              [
+                113.738802,
+                33.868627
+              ],
+              [
+                113.760318,
+                33.868477
+              ],
+              [
+                113.773719,
+                33.877654
+              ],
+              [
+                113.76554,
+                33.883638
+              ],
+              [
+                113.77806,
+                33.884934
+              ],
+              [
+                113.78303,
+                33.880945
+              ],
+              [
+                113.797814,
+                33.883887
+              ],
+              [
+                113.806936,
+                33.880995
+              ],
+              [
+                113.811969,
+                33.885782
+              ],
+              [
+                113.813353,
+                33.88638
+              ],
+              [
+                113.818009,
+                33.88663
+              ],
+              [
+                113.820148,
+                33.890669
+              ],
+              [
+                113.824363,
+                33.89022
+              ],
+              [
+                113.826565,
+                33.875808
+              ],
+              [
+                113.853051,
+                33.873315
+              ],
+              [
+                113.861481,
+                33.884486
+              ],
+              [
+                113.860097,
+                33.907222
+              ],
+              [
+                113.871296,
+                33.909615
+              ],
+              [
+                113.857455,
+                33.939769
+              ],
+              [
+                113.859783,
+                33.94859
+              ],
+              [
+                113.870226,
+                33.945401
+              ],
+              [
+                113.885765,
+                33.948988
+              ],
+              [
+                113.88803,
+                33.943407
+              ],
+              [
+                113.90055,
+                33.943009
+              ],
+              [
+                113.901305,
+                33.94849
+              ],
+              [
+                113.916341,
+                33.945849
+              ],
+              [
+                113.922066,
+                33.957409
+              ],
+              [
+                113.951949,
+                33.97365
+              ],
+              [
+                113.977492,
+                33.98152
+              ],
+              [
+                113.99907,
+                33.981819
+              ],
+              [
+                114.021971,
+                33.987248
+              ],
+              [
+                114.037762,
+                33.986053
+              ],
+              [
+                114.053867,
+                33.978781
+              ],
+              [
+                114.059152,
+                33.96538
+              ],
+              [
+                114.057453,
+                33.952875
+              ],
+              [
+                114.064877,
+                33.949237
+              ],
+              [
+                114.076704,
+                33.952676
+              ],
+              [
+                114.087336,
+                33.934686
+              ],
+              [
+                114.103882,
+                33.934736
+              ],
+              [
+                114.103757,
+                33.925815
+              ],
+              [
+                114.114515,
+                33.928058
+              ],
+              [
+                114.125902,
+                33.915547
+              ],
+              [
+                114.128418,
+                33.885433
+              ],
+              [
+                114.116465,
+                33.872068
+              ],
+              [
+                114.115081,
+                33.863788
+              ],
+              [
+                114.132445,
+                33.853613
+              ],
+              [
+                114.145971,
+                33.841939
+              ],
+              [
+                114.159623,
+                33.816191
+              ],
+              [
+                114.15503,
+                33.809304
+              ],
+              [
+                114.161447,
+                33.79982
+              ],
+              [
+                114.178308,
+                33.806409
+              ],
+              [
+                114.179503,
+                33.799321
+              ],
+              [
+                114.190638,
+                33.801917
+              ],
+              [
+                114.19888,
+                33.797374
+              ],
+              [
+                114.211525,
+                33.798123
+              ],
+              [
+                114.217565,
+                33.793131
+              ],
+              [
+                114.242604,
+                33.790785
+              ],
+              [
+                114.249776,
+                33.779252
+              ],
+              [
+                114.290354,
+                33.771813
+              ],
+              [
+                114.309983,
+                33.781349
+              ],
+              [
+                114.313066,
+                33.80012
+              ],
+              [
+                114.325082,
+                33.818337
+              ],
+              [
+                114.323383,
+                33.832908
+              ],
+              [
+                114.316085,
+                33.833207
+              ],
+              [
+                114.310738,
+                33.842637
+              ],
+              [
+                114.301301,
+                33.842188
+              ],
+              [
+                114.301112,
+                33.852365
+              ],
+              [
+                114.312122,
+                33.853263
+              ],
+              [
+                114.315834,
+                33.865734
+              ],
+              [
+                114.311304,
+                33.87142
+              ],
+              [
+                114.3164,
+                33.880446
+              ],
+              [
+                114.305642,
+                33.889572
+              ],
+              [
+                114.299917,
+                33.953024
+              ],
+              [
+                114.31036,
+                33.96
+              ],
+              [
+                114.307026,
+                33.978233
+              ],
+              [
+                114.312248,
+                33.98162
+              ],
+              [
+                114.311745,
+                34.001492
+              ],
+              [
+                114.295324,
+                34.007467
+              ],
+              [
+                114.287523,
+                34.022902
+              ],
+              [
+                114.281987,
+                34.046597
+              ],
+              [
+                114.271103,
+                34.053813
+              ],
+              [
+                114.270411,
+                34.063219
+              ],
+              [
+                114.262107,
+                34.095856
+              ],
+              [
+                114.273431,
+                34.102571
+              ],
+              [
+                114.273808,
+                34.107545
+              ],
+              [
+                114.285133,
+                34.120873
+              ],
+              [
+                114.28746,
+                34.137033
+              ],
+              [
+                114.275255,
+                34.174661
+              ],
+              [
+                114.276199,
+                34.190811
+              ],
+              [
+                114.287649,
+                34.206958
+              ],
+              [
+                114.286013,
+                34.218234
+              ],
+              [
+                114.273053,
+                34.227869
+              ],
+              [
+                114.272676,
+                34.24237
+              ],
+              [
+                114.259905,
+                34.251854
+              ]
+            ]
+          ],
+          [
+            [
+              [
+                113.813353,
+                33.88638
+              ],
+              [
+                113.811969,
+                33.885782
+              ],
+              [
+                113.811718,
+                33.879449
+              ],
+              [
+                113.826565,
+                33.875808
+              ],
+              [
+                113.824363,
+                33.89022
+              ],
+              [
+                113.820148,
+                33.890669
+              ],
+              [
+                113.818009,
+                33.88663
+              ],
+              [
+                113.813353,
+                33.88638
+              ]
+            ]
+          ]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "adcode": 411100,
+        "name": "婕渤甯�",
+        "center": [
+          114.026405,
+          33.575855
+        ],
+        "centroid": [
+          113.905678,
+          33.65448
+        ],
+        "childrenNum": 5,
+        "level": "city",
+        "parent": {
+          "adcode": 410000
+        },
+        "subFeatureIndex": 10,
+        "acroutes": [
+          100000,
+          410000
+        ]
+      },
+      "geometry": {
+        "type": "MultiPolygon",
+        "coordinates": [
+          [
+            [
+              [
+                113.688347,
+                33.407737
+              ],
+              [
+                113.693065,
+                33.418216
+              ],
+              [
+                113.710429,
+                33.417013
+              ],
+              [
+                113.713197,
+                33.430249
+              ],
+              [
+                113.721187,
+                33.432705
+              ],
+              [
+                113.766861,
+                33.432154
+              ],
+              [
+                113.771139,
+                33.435713
+              ],
+              [
+                113.799513,
+                33.43481
+              ],
+              [
+                113.805804,
+                33.446189
+              ],
+              [
+                113.825999,
+                33.460723
+              ],
+              [
+                113.847515,
+                33.466836
+              ],
+              [
+                113.856134,
+                33.47796
+              ],
+              [
+                113.865508,
+                33.479362
+              ],
+              [
+                113.914139,
+                33.478511
+              ],
+              [
+                113.933768,
+                33.465884
+              ],
+              [
+                113.94528,
+                33.465633
+              ],
+              [
+                113.95434,
+                33.473901
+              ],
+              [
+                113.967929,
+                33.477408
+              ],
+              [
+                113.9712,
+                33.482619
+              ],
+              [
+                113.981329,
+                33.482268
+              ],
+              [
+                113.998693,
+                33.500904
+              ],
+              [
+                114.001084,
+                33.510671
+              ],
+              [
+                114.01354,
+                33.511071
+              ],
+              [
+                114.014924,
+                33.522039
+              ],
+              [
+                114.033735,
+                33.523892
+              ],
+              [
+                114.038579,
+                33.5296
+              ],
+              [
+                114.052168,
+                33.528999
+              ],
+              [
+                114.055692,
+                33.523942
+              ],
+              [
+                114.075572,
+                33.517782
+              ],
+              [
+                114.099101,
+                33.503108
+              ],
+              [
+                114.116276,
+                33.51027
+              ],
+              [
+                114.118101,
+                33.502406
+              ],
+              [
+                114.104071,
+                33.499351
+              ],
+              [
+                114.103505,
+                33.491586
+              ],
+              [
+                114.115836,
+                33.488631
+              ],
+              [
+                114.130683,
+                33.495093
+              ],
+              [
+                114.131501,
+                33.472298
+              ],
+              [
+                114.151507,
+                33.468139
+              ],
+              [
+                114.150312,
+                33.460372
+              ],
+              [
+                114.159937,
+                33.456713
+              ],
+              [
+                114.171639,
+                33.459019
+              ],
+              [
+                114.180384,
+                33.453656
+              ],
+              [
+                114.171324,
+                33.440926
+              ],
+              [
+                114.190575,
+                33.426489
+              ],
+              [
+                114.195294,
+                33.447692
+              ],
+              [
+                114.211399,
+                33.453757
+              ],
+              [
+                114.230714,
+                33.451551
+              ],
+              [
+                114.247574,
+                33.45967
+              ],
+              [
+                114.266636,
+                33.461625
+              ],
+              [
+                114.284629,
+                33.472548
+              ],
+              [
+                114.279785,
+                33.489282
+              ],
+              [
+                114.283371,
+                33.500353
+              ],
+              [
+                114.281106,
+                33.513976
+              ],
+              [
+                114.289348,
+                33.522089
+              ],
+              [
+                114.295324,
+                33.553782
+              ],
+              [
+                114.282868,
+                33.558688
+              ],
+              [
+                114.278653,
+                33.57015
+              ],
+              [
+                114.265378,
+                33.593219
+              ],
+              [
+                114.265881,
+                33.597923
+              ],
+              [
+                114.279659,
+                33.604427
+              ],
+              [
+                114.277332,
+                33.621735
+              ],
+              [
+                114.264938,
+                33.635239
+              ],
+              [
+                114.264183,
+                33.654742
+              ],
+              [
+                114.260849,
+                33.661942
+              ],
+              [
+                114.259842,
+                33.680588
+              ],
+              [
+                114.250783,
+                33.693233
+              ],
+              [
+                114.249084,
+                33.704328
+              ],
+              [
+                114.214231,
+                33.691334
+              ],
+              [
+                114.196489,
+                33.690934
+              ],
+              [
+                114.186549,
+                33.682538
+              ],
+              [
+                114.186235,
+                33.67219
+              ],
+              [
+                114.169563,
+                33.664791
+              ],
+              [
+                114.162265,
+                33.669941
+              ],
+              [
+                114.152639,
+                33.662242
+              ],
+              [
+                114.149745,
+                33.650442
+              ],
+              [
+                114.125398,
+                33.652842
+              ],
+              [
+                114.116402,
+                33.651392
+              ],
+              [
+                114.118226,
+                33.67159
+              ],
+              [
+                114.115836,
+                33.684587
+              ],
+              [
+                114.097717,
+                33.683187
+              ],
+              [
+                114.091489,
+                33.71642
+              ],
+              [
+                114.095263,
+                33.728061
+              ],
+              [
+                114.106839,
+                33.739051
+              ],
+              [
+                114.10319,
+                33.756832
+              ],
+              [
+                114.098032,
+                33.765072
+              ],
+              [
+                114.133262,
+                33.768118
+              ],
+              [
+                114.142007,
+                33.765921
+              ],
+              [
+                114.139931,
+                33.783097
+              ],
+              [
+                114.133703,
+                33.791484
+              ],
+              [
+                114.134772,
+                33.806409
+              ],
+              [
+                114.145404,
+                33.810551
+              ],
+              [
+                114.15503,
+                33.809304
+              ],
+              [
+                114.159623,
+                33.816191
+              ],
+              [
+                114.145971,
+                33.841939
+              ],
+              [
+                114.132445,
+                33.853613
+              ],
+              [
+                114.115081,
+                33.863788
+              ],
+              [
+                114.116465,
+                33.872068
+              ],
+              [
+                114.128418,
+                33.885433
+              ],
+              [
+                114.125902,
+                33.915547
+              ],
+              [
+                114.114515,
+                33.928058
+              ],
+              [
+                114.103757,
+                33.925815
+              ],
+              [
+                114.103882,
+                33.934736
+              ],
+              [
+                114.087336,
+                33.934686
+              ],
+              [
+                114.076704,
+                33.952676
+              ],
+              [
+                114.064877,
+                33.949237
+              ],
+              [
+                114.057453,
+                33.952875
+              ],
+              [
+                114.059152,
+                33.96538
+              ],
+              [
+                114.053867,
+                33.978781
+              ],
+              [
+                114.037762,
+                33.986053
+              ],
+              [
+                114.021971,
+                33.987248
+              ],
+              [
+                113.99907,
+                33.981819
+              ],
+              [
+                113.977492,
+                33.98152
+              ],
+              [
+                113.951949,
+                33.97365
+              ],
+              [
+                113.922066,
+                33.957409
+              ],
+              [
+                113.916341,
+                33.945849
+              ],
+              [
+                113.901305,
+                33.94849
+              ],
+              [
+                113.90055,
+                33.943009
+              ],
+              [
+                113.88803,
+                33.943407
+              ],
+              [
+                113.885765,
+                33.948988
+              ],
+              [
+                113.870226,
+                33.945401
+              ],
+              [
+                113.859783,
+                33.94859
+              ],
+              [
+                113.857455,
+                33.939769
+              ],
+              [
+                113.871296,
+                33.909615
+              ],
+              [
+                113.860097,
+                33.907222
+              ],
+              [
+                113.861481,
+                33.884486
+              ],
+              [
+                113.853051,
+                33.873315
+              ],
+              [
+                113.826565,
+                33.875808
+              ],
+              [
+                113.811718,
+                33.879449
+              ],
+              [
+                113.811969,
+                33.885782
+              ],
+              [
+                113.806936,
+                33.880995
+              ],
+              [
+                113.797814,
+                33.883887
+              ],
+              [
+                113.78303,
+                33.880945
+              ],
+              [
+                113.77806,
+                33.884934
+              ],
+              [
+                113.76554,
+                33.883638
+              ],
+              [
+                113.773719,
+                33.877654
+              ],
+              [
+                113.760318,
+                33.868477
+              ],
+              [
+                113.738802,
+                33.868627
+              ],
+              [
+                113.735908,
+                33.859199
+              ],
+              [
+                113.725528,
+                33.856406
+              ],
+              [
+                113.722445,
+                33.848624
+              ],
+              [
+                113.729554,
+                33.845032
+              ],
+              [
+                113.731127,
+                33.835652
+              ],
+              [
+                113.759312,
+                33.827918
+              ],
+              [
+                113.761262,
+                33.807756
+              ],
+              [
+                113.752958,
+                33.791484
+              ],
+              [
+                113.752895,
+                33.771463
+              ],
+              [
+                113.742703,
+                33.76672
+              ],
+              [
+                113.734399,
+                33.752337
+              ],
+              [
+                113.737167,
+                33.741948
+              ],
+              [
+                113.750378,
+                33.7398
+              ],
+              [
+                113.762206,
+                33.731808
+              ],
+              [
+                113.75906,
+                33.717519
+              ],
+              [
+                113.74371,
+                33.713422
+              ],
+              [
+                113.741822,
+                33.702329
+              ],
+              [
+                113.724018,
+                33.695632
+              ],
+              [
+                113.716406,
+                33.710624
+              ],
+              [
+                113.710303,
+                33.707876
+              ],
+              [
+                113.70678,
+                33.693683
+              ],
+              [
+                113.701936,
+                33.691234
+              ],
+              [
+                113.684257,
+                33.693833
+              ],
+              [
+                113.670983,
+                33.699081
+              ],
+              [
+                113.645063,
+                33.695932
+              ],
+              [
+                113.637388,
+                33.702679
+              ],
+              [
+                113.637954,
+                33.695532
+              ],
+              [
+                113.629335,
+                33.688885
+              ],
+              [
+                113.612475,
+                33.695732
+              ],
+              [
+                113.598256,
+                33.687536
+              ],
+              [
+                113.596746,
+                33.698081
+              ],
+              [
+                113.6087,
+                33.709175
+              ],
+              [
+                113.585485,
+                33.711024
+              ],
+              [
+                113.576677,
+                33.706327
+              ],
+              [
+                113.584101,
+                33.698131
+              ],
+              [
+                113.580515,
+                33.681738
+              ],
+              [
+                113.587624,
+                33.654642
+              ],
+              [
+                113.596746,
+                33.651892
+              ],
+              [
+                113.619143,
+                33.63799
+              ],
+              [
+                113.628203,
+                33.629038
+              ],
+              [
+                113.621534,
+                33.619885
+              ],
+              [
+                113.604673,
+                33.613131
+              ],
+              [
+                113.579383,
+                33.597222
+              ],
+              [
+                113.576803,
+                33.592619
+              ],
+              [
+                113.552267,
+                33.586715
+              ],
+              [
+                113.554281,
+                33.5706
+              ],
+              [
+                113.563151,
+                33.57055
+              ],
+              [
+                113.557363,
+                33.553582
+              ],
+              [
+                113.545536,
+                33.548626
+              ],
+              [
+                113.537672,
+                33.51633
+              ],
+              [
+                113.533708,
+                33.514978
+              ],
+              [
+                113.537609,
+                33.498499
+              ],
+              [
+                113.532073,
+                33.497347
+              ],
+              [
+                113.525278,
+                33.505061
+              ],
+              [
+                113.510808,
+                33.505011
+              ],
+              [
+                113.50307,
+                33.500252
+              ],
+              [
+                113.483001,
+                33.500152
+              ],
+              [
+                113.478597,
+                33.50431
+              ],
+              [
+                113.484322,
+                33.483721
+              ],
+              [
+                113.471803,
+                33.463378
+              ],
+              [
+                113.473501,
+                33.443683
+              ],
+              [
+                113.466518,
+                33.437367
+              ],
+              [
+                113.468846,
+                33.422077
+              ],
+              [
+                113.483945,
+                33.421124
+              ],
+              [
+                113.506341,
+                33.414607
+              ],
+              [
+                113.51754,
+                33.407186
+              ],
+              [
+                113.526662,
+                33.419269
+              ],
+              [
+                113.539811,
+                33.419019
+              ],
+              [
+                113.54736,
+                33.406433
+              ],
+              [
+                113.574727,
+                33.407537
+              ],
+              [
+                113.589008,
+                33.404728
+              ],
+              [
+                113.596809,
+                33.41215
+              ],
+              [
+                113.620842,
+                33.410946
+              ],
+              [
+                113.645252,
+                33.421776
+              ],
+              [
+                113.651669,
+                33.418417
+              ],
+              [
+                113.659407,
+                33.424283
+              ],
+              [
+                113.683125,
+                33.41952
+              ],
+              [
+                113.688347,
+                33.407737
+              ]
+            ]
+          ]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "adcode": 411200,
+        "name": "涓夐棬宄″競",
+        "center": [
+          111.194099,
+          34.777338
+        ],
+        "centroid": [
+          111.112608,
+          34.36205
+        ],
+        "childrenNum": 6,
+        "level": "city",
+        "parent": {
+          "adcode": 410000
+        },
+        "subFeatureIndex": 11,
+        "acroutes": [
+          100000,
+          410000
+        ]
+      },
+      "geometry": {
+        "type": "MultiPolygon",
+        "coordinates": [
+          [
+            [
+              [
+                111.973358,
+                35.070234
+              ],
+              [
+                111.963166,
+                35.079329
+              ],
+              [
+                111.952156,
+                35.082131
+              ],
+              [
+                111.928376,
+                35.082032
+              ],
+              [
+                111.917618,
+                35.071119
+              ],
+              [
+                111.900065,
+                35.07982
+              ],
+              [
+                111.885595,
+                35.069988
+              ],
+              [
+                111.86452,
+                35.076772
+              ],
+              [
+                111.8615,
+                35.074757
+              ],
+              [
+                111.818405,
+                35.068464
+              ],
+              [
+                111.8101,
+                35.06222
+              ],
+              [
+                111.812051,
+                35.04855
+              ],
+              [
+                111.809534,
+                35.036846
+              ],
+              [
+                111.793555,
+                35.026664
+              ],
+              [
+                111.782419,
+                35.030058
+              ],
+              [
+                111.768578,
+                35.01535
+              ],
+              [
+                111.749138,
+                35.016383
+              ],
+              [
+                111.739324,
+                35.004231
+              ],
+              [
+                111.711769,
+                35.003641
+              ],
+              [
+                111.69711,
+                34.998966
+              ],
+              [
+                111.687107,
+                34.988485
+              ],
+              [
+                111.669617,
+                34.988189
+              ],
+              [
+                111.665528,
+                34.980955
+              ],
+              [
+                111.67572,
+                34.971406
+              ],
+              [
+                111.681697,
+                34.950927
+              ],
+              [
+                111.66169,
+                34.938815
+              ],
+              [
+                111.645082,
+                34.93783
+              ],
+              [
+                111.621552,
+                34.916308
+              ],
+              [
+                111.617652,
+                34.89483
+              ],
+              [
+                111.605824,
+                34.892367
+              ],
+              [
+                111.591858,
+                34.881625
+              ],
+              [
+                111.589404,
+                34.861863
+              ],
+              [
+                111.58305,
+                34.852794
+              ],
+              [
+                111.570782,
+                34.843329
+              ],
+              [
+                111.561031,
+                34.845251
+              ],
+              [
+                111.554488,
+                34.852202
+              ],
+              [
+                111.543982,
+                34.853286
+              ],
+              [
+                111.527813,
+                34.850132
+              ],
+              [
+                111.515356,
+                34.840173
+              ],
+              [
+                111.508688,
+                34.839187
+              ],
+              [
+                111.502648,
+                34.829968
+              ],
+              [
+                111.480126,
+                34.826023
+              ],
+              [
+                111.464649,
+                34.82691
+              ],
+              [
+                111.45062,
+                34.836624
+              ],
+              [
+                111.439358,
+                34.838152
+              ],
+              [
+                111.430991,
+                34.829277
+              ],
+              [
+                111.415389,
+                34.827453
+              ],
+              [
+                111.39532,
+                34.814878
+              ],
+              [
+                111.35537,
+                34.823064
+              ],
+              [
+                111.3504,
+                34.829376
+              ],
+              [
+                111.340334,
+                34.831299
+              ],
+              [
+                111.322656,
+                34.819711
+              ],
+              [
+                111.30611,
+                34.815223
+              ],
+              [
+                111.294157,
+                34.807678
+              ],
+              [
+                111.282141,
+                34.809453
+              ],
+              [
+                111.268048,
+                34.817936
+              ],
+              [
+                111.255214,
+                34.819563
+              ],
+              [
+                111.249112,
+                34.81404
+              ],
+              [
+                111.239864,
+                34.793571
+              ],
+              [
+                111.223443,
+                34.789427
+              ],
+              [
+                111.209414,
+                34.80097
+              ],
+              [
+                111.177769,
+                34.803979
+              ],
+              [
+                111.168144,
+                34.813201
+              ],
+              [
+                111.16072,
+                34.814582
+              ],
+              [
+                111.148515,
+                34.80748
+              ],
+              [
+                111.129767,
+                34.779955
+              ],
+              [
+                111.124419,
+                34.761698
+              ],
+              [
+                111.118254,
+                34.756566
+              ],
+              [
+                111.066414,
+                34.751581
+              ],
+              [
+                111.035336,
+                34.740871
+              ],
+              [
+                111.018475,
+                34.732282
+              ],
+              [
+                110.976324,
+                34.70646
+              ],
+              [
+                110.963993,
+                34.70641
+              ],
+              [
+                110.952354,
+                34.720581
+              ],
+              [
+                110.935494,
+                34.730505
+              ],
+              [
+                110.919766,
+                34.730258
+              ],
+              [
+                110.915739,
+                34.723247
+              ],
+              [
+                110.917438,
+                34.71357
+              ],
+              [
+                110.903723,
+                34.668823
+              ],
+              [
+                110.893469,
+                34.651629
+              ],
+              [
+                110.883717,
+                34.644117
+              ],
+              [
+                110.861572,
+                34.639719
+              ],
+              [
+                110.853205,
+                34.635271
+              ],
+              [
+                110.83452,
+                34.617526
+              ],
+              [
+                110.824328,
+                34.615845
+              ],
+              [
+                110.816023,
+                34.622618
+              ],
+              [
+                110.808222,
+                34.6371
+              ],
+              [
+                110.791865,
+                34.649751
+              ],
+              [
+                110.76129,
+                34.653506
+              ],
+              [
+                110.749148,
+                34.652271
+              ],
+              [
+                110.741158,
+                34.639225
+              ],
+              [
+                110.732728,
+                34.633195
+              ],
+              [
+                110.712659,
+                34.607837
+              ],
+              [
+                110.706367,
+                34.60398
+              ],
+              [
+                110.653521,
+                34.608034
+              ],
+              [
+                110.610992,
+                34.607293
+              ],
+              [
+                110.594509,
+                34.60314
+              ],
+              [
+                110.547388,
+                34.583558
+              ],
+              [
+                110.53317,
+                34.583459
+              ],
+              [
+                110.488502,
+                34.610753
+              ],
+              [
+                110.475857,
+                34.610457
+              ],
+              [
+                110.465602,
+                34.605463
+              ],
+              [
+                110.437732,
+                34.597849
+              ],
+              [
+                110.424835,
+                34.588454
+              ],
+              [
+                110.407723,
+                34.589245
+              ],
+              [
+                110.379161,
+                34.600519
+              ],
+              [
+                110.367207,
+                34.566792
+              ],
+              [
+                110.376141,
+                34.563082
+              ],
+              [
+                110.399355,
+                34.562834
+              ],
+              [
+                110.404514,
+                34.557591
+              ],
+              [
+                110.372744,
+                34.544332
+              ],
+              [
+                110.362048,
+                34.526419
+              ],
+              [
+                110.360476,
+                34.51761
+              ],
+              [
+                110.368843,
+                34.493206
+              ],
+              [
+                110.378217,
+                34.486423
+              ],
+              [
+                110.379727,
+                34.478501
+              ],
+              [
+                110.393442,
+                34.464833
+              ],
+              [
+                110.395266,
+                34.453937
+              ],
+              [
+                110.401998,
+                34.447101
+              ],
+              [
+                110.402941,
+                34.433478
+              ],
+              [
+                110.40961,
+                34.429069
+              ],
+              [
+                110.409484,
+                34.421587
+              ],
+              [
+                110.431,
+                34.409446
+              ],
+              [
+                110.458178,
+                34.402409
+              ],
+              [
+                110.467427,
+                34.409743
+              ],
+              [
+                110.47592,
+                34.409149
+              ],
+              [
+                110.473718,
+                34.393239
+              ],
+              [
+                110.489446,
+                34.355312
+              ],
+              [
+                110.50272,
+                34.345195
+              ],
+              [
+                110.503287,
+                34.334283
+              ],
+              [
+                110.498128,
+                34.320096
+              ],
+              [
+                110.473844,
+                34.322973
+              ],
+              [
+                110.465854,
+                34.305906
+              ],
+              [
+                110.449308,
+                34.291466
+              ],
+              [
+                110.431315,
+                34.290374
+              ],
+              [
+                110.426471,
+                34.27608
+              ],
+              [
+                110.432573,
+                34.272903
+              ],
+              [
+                110.442513,
+                34.253989
+              ],
+              [
+                110.439682,
+                34.243413
+              ],
+              [
+                110.48976,
+                34.232339
+              ],
+              [
+                110.507879,
+                34.217588
+              ],
+              [
+                110.52411,
+                34.219674
+              ],
+              [
+                110.551414,
+                34.212819
+              ],
+              [
+                110.557139,
+                34.193395
+              ],
+              [
+                110.589099,
+                34.190264
+              ],
+              [
+                110.587715,
+                34.178687
+              ],
+              [
+                110.62175,
+                34.177444
+              ],
+              [
+                110.634144,
+                34.169791
+              ],
+              [
+                110.641945,
+                34.160894
+              ],
+              [
+                110.639114,
+                34.150903
+              ],
+              [
+                110.624204,
+                34.137331
+              ],
+              [
+                110.628545,
+                34.133055
+              ],
+              [
+                110.618164,
+                34.124055
+              ],
+              [
+                110.614012,
+                34.113712
+              ],
+              [
+                110.591804,
+                34.101676
+              ],
+              [
+                110.595138,
+                34.064761
+              ],
+              [
+                110.58847,
+                34.061676
+              ],
+              [
+                110.589728,
+                34.038583
+              ],
+              [
+                110.586645,
+                34.023997
+              ],
+              [
+                110.612062,
+                34.024246
+              ],
+              [
+                110.619486,
+                34.035646
+              ],
+              [
+                110.631502,
+                34.025541
+              ],
+              [
+                110.628104,
+                34.019019
+              ],
+              [
+                110.634459,
+                34.01633
+              ],
+              [
+                110.638925,
+                34.004977
+              ],
+              [
+                110.649558,
+                33.992278
+              ],
+              [
+                110.65176,
+                33.969665
+              ],
+              [
+                110.670948,
+                33.966427
+              ],
+              [
+                110.675603,
+                33.946596
+              ],
+              [
+                110.669564,
+                33.939271
+              ],
+              [
+                110.650501,
+                33.93673
+              ],
+              [
+                110.626028,
+                33.924619
+              ],
+              [
+                110.62584,
+                33.90782
+              ],
+              [
+                110.61181,
+                33.908069
+              ],
+              [
+                110.592182,
+                33.900591
+              ],
+              [
+                110.587274,
+                33.887727
+              ],
+              [
+                110.600612,
+                33.87127
+              ],
+              [
+                110.612943,
+                33.867429
+              ],
+              [
+                110.612125,
+                33.852515
+              ],
+              [
+                110.627664,
+                33.84573
+              ],
+              [
+                110.649495,
+                33.84598
+              ],
+              [
+                110.667928,
+                33.852166
+              ],
+              [
+                110.684914,
+                33.838796
+              ],
+              [
+                110.712596,
+                33.833607
+              ],
+              [
+                110.722725,
+                33.818886
+              ],
+              [
+                110.725996,
+                33.807707
+              ],
+              [
+                110.741347,
+                33.798822
+              ],
+              [
+                110.753677,
+                33.799471
+              ],
+              [
+                110.765568,
+                33.795028
+              ],
+              [
+                110.782177,
+                33.796076
+              ],
+              [
+                110.78419,
+                33.782398
+              ],
+              [
+                110.7991,
+                33.775508
+              ],
+              [
+                110.80753,
+                33.757281
+              ],
+              [
+                110.815898,
+                33.753036
+              ],
+              [
+                110.816841,
+                33.737353
+              ],
+              [
+                110.832192,
+                33.712823
+              ],
+              [
+                110.823195,
+                33.692834
+              ],
+              [
+                110.825397,
+                33.684137
+              ],
+              [
+                110.833199,
+                33.677789
+              ],
+              [
+                110.841818,
+                33.663241
+              ],
+              [
+                110.857734,
+                33.657792
+              ],
+              [
+                110.87881,
+                33.634639
+              ],
+              [
+                110.89976,
+                33.632989
+              ],
+              [
+                110.90473,
+                33.628638
+              ],
+              [
+                110.940841,
+                33.620035
+              ],
+              [
+                110.951411,
+                33.609029
+              ],
+              [
+                110.966573,
+                33.609179
+              ],
+              [
+                110.979658,
+                33.595871
+              ],
+              [
+                111.003691,
+                33.578658
+              ],
+              [
+                111.009982,
+                33.56054
+              ],
+              [
+                111.025144,
+                33.550578
+              ],
+              [
+                111.058425,
+                33.555534
+              ],
+              [
+                111.070063,
+                33.566346
+              ],
+              [
+                111.089126,
+                33.563743
+              ],
+              [
+                111.102903,
+                33.573903
+              ],
+              [
+                111.114542,
+                33.578758
+              ],
+              [
+                111.123224,
+                33.598623
+              ],
+              [
+                111.133982,
+                33.612381
+              ],
+              [
+                111.134674,
+                33.627437
+              ],
+              [
+                111.143922,
+                33.633189
+              ],
+              [
+                111.152101,
+                33.645441
+              ],
+              [
+                111.146439,
+                33.658592
+              ],
+              [
+                111.140273,
+                33.661292
+              ],
+              [
+                111.133164,
+                33.678939
+              ],
+              [
+                111.141406,
+                33.678739
+              ],
+              [
+                111.151598,
+                33.684787
+              ],
+              [
+                111.170471,
+                33.682138
+              ],
+              [
+                111.181292,
+                33.686886
+              ],
+              [
+                111.186199,
+                33.704128
+              ],
+              [
+                111.195196,
+                33.713272
+              ],
+              [
+                111.197209,
+                33.732207
+              ],
+              [
+                111.194441,
+                33.745494
+              ],
+              [
+                111.196077,
+                33.757731
+              ],
+              [
+                111.208533,
+                33.781948
+              ],
+              [
+                111.222437,
+                33.797574
+              ],
+              [
+                111.234831,
+                33.801268
+              ],
+              [
+                111.240367,
+                33.796925
+              ],
+              [
+                111.260813,
+                33.796775
+              ],
+              [
+                111.261568,
+                33.822878
+              ],
+              [
+                111.240304,
+                33.842488
+              ],
+              [
+                111.232062,
+                33.856805
+              ],
+              [
+                111.216397,
+                33.865135
+              ],
+              [
+                111.21948,
+                33.872766
+              ],
+              [
+                111.203689,
+                33.883438
+              ],
+              [
+                111.206017,
+                33.891616
+              ],
+              [
+                111.212811,
+                33.884087
+              ],
+              [
+                111.234516,
+                33.894857
+              ],
+              [
+                111.234768,
+                33.901738
+              ],
+              [
+                111.226652,
+                33.913104
+              ],
+              [
+                111.230049,
+                33.924768
+              ],
+              [
+                111.239989,
+                33.933141
+              ],
+              [
+                111.259366,
+                33.929852
+              ],
+              [
+                111.276793,
+                33.935533
+              ],
+              [
+                111.29013,
+                33.926662
+              ],
+              [
+                111.303342,
+                33.928207
+              ],
+              [
+                111.305921,
+                33.941364
+              ],
+              [
+                111.324795,
+                33.963039
+              ],
+              [
+                111.344109,
+                33.973351
+              ],
+              [
+                111.356,
+                33.984509
+              ],
+              [
+                111.353609,
+                33.996263
+              ],
+              [
+                111.355119,
+                34.015185
+              ],
+              [
+                111.342285,
+                34.037936
+              ],
+              [
+                111.342096,
+                34.056053
+              ],
+              [
+                111.354301,
+                34.084464
+              ],
+              [
+                111.367198,
+                34.092473
+              ],
+              [
+                111.358768,
+                34.108788
+              ],
+              [
+                111.344738,
+                34.109037
+              ],
+              [
+                111.334735,
+                34.115601
+              ],
+              [
+                111.313408,
+                34.116546
+              ],
+              [
+                111.306362,
+                34.125149
+              ],
+              [
+                111.305292,
+                34.140165
+              ],
+              [
+                111.296925,
+                34.145137
+              ],
+              [
+                111.281889,
+                34.138524
+              ],
+              [
+                111.276856,
+                34.148318
+              ],
+              [
+                111.267922,
+                34.146528
+              ],
+              [
+                111.253201,
+                34.15309
+              ],
+              [
+                111.248671,
+                34.162882
+              ],
+              [
+                111.234516,
+                34.178537
+              ],
+              [
+                111.214699,
+                34.181221
+              ],
+              [
+                111.207401,
+                34.197419
+              ],
+              [
+                111.175819,
+                34.209541
+              ],
+              [
+                111.158958,
+                34.223101
+              ],
+              [
+                111.166571,
+                34.228962
+              ],
+              [
+                111.180915,
+                34.230203
+              ],
+              [
+                111.187772,
+                34.250265
+              ],
+              [
+                111.182488,
+                34.256421
+              ],
+              [
+                111.181921,
+                34.27876
+              ],
+              [
+                111.191547,
+                34.301837
+              ],
+              [
+                111.185444,
+                34.31697
+              ],
+              [
+                111.16915,
+                34.334878
+              ],
+              [
+                111.166634,
+                34.344798
+              ],
+              [
+                111.159839,
+                34.350799
+              ],
+              [
+                111.141217,
+                34.353031
+              ],
+              [
+                111.138449,
+                34.35675
+              ],
+              [
+                111.141217,
+                34.373113
+              ],
+              [
+                111.147949,
+                34.38853
+              ],
+              [
+                111.156819,
+                34.394677
+              ],
+              [
+                111.171415,
+                34.394974
+              ],
+              [
+                111.188967,
+                34.399286
+              ],
+              [
+                111.191232,
+                34.41792
+              ],
+              [
+                111.197712,
+                34.418762
+              ],
+              [
+                111.21344,
+                34.429812
+              ],
+              [
+                111.213252,
+                34.437441
+              ],
+              [
+                111.220235,
+                34.457949
+              ],
+              [
+                111.227533,
+                34.459732
+              ],
+              [
+                111.244708,
+                34.453788
+              ],
+              [
+                111.272012,
+                34.447547
+              ],
+              [
+                111.271383,
+                34.470677
+              ],
+              [
+                111.289313,
+                34.485581
+              ],
+              [
+                111.300008,
+                34.488948
+              ],
+              [
+                111.306676,
+                34.474193
+              ],
+              [
+                111.324732,
+                34.471717
+              ],
+              [
+                111.344424,
+                34.472955
+              ],
+              [
+                111.358642,
+                34.480333
+              ],
+              [
+                111.370595,
+                34.473301
+              ],
+              [
+                111.385065,
+                34.473103
+              ],
+              [
+                111.394816,
+                34.482016
+              ],
+              [
+                111.418346,
+                34.490829
+              ],
+              [
+                111.451689,
+                34.505928
+              ],
+              [
+                111.45754,
+                34.512561
+              ],
+              [
+                111.484655,
+                34.525528
+              ],
+              [
+                111.489437,
+                34.533842
+              ],
+              [
+                111.5029,
+                34.545074
+              ],
+              [
+                111.525045,
+                34.54829
+              ],
+              [
+                111.538634,
+                34.543342
+              ],
+              [
+                111.544736,
+                34.544925
+              ],
+              [
+                111.562037,
+                34.558728
+              ],
+              [
+                111.574305,
+                34.564467
+              ],
+              [
+                111.584434,
+                34.556057
+              ],
+              [
+                111.594437,
+                34.565308
+              ],
+              [
+                111.608089,
+                34.56229
+              ],
+              [
+                111.619099,
+                34.55576
+              ],
+              [
+                111.670058,
+                34.540571
+              ],
+              [
+                111.683584,
+                34.533298
+              ],
+              [
+                111.692643,
+                34.535673
+              ],
+              [
+                111.681445,
+                34.547647
+              ],
+              [
+                111.672008,
+                34.572232
+              ],
+              [
+                111.687044,
+                34.571886
+              ],
+              [
+                111.696292,
+                34.575744
+              ],
+              [
+                111.702835,
+                34.584943
+              ],
+              [
+                111.740079,
+                34.600272
+              ],
+              [
+                111.758764,
+                34.597454
+              ],
+              [
+                111.764112,
+                34.609171
+              ],
+              [
+                111.778393,
+                34.608331
+              ],
+              [
+                111.797078,
+                34.626028
+              ],
+              [
+                111.811296,
+                34.633887
+              ],
+              [
+                111.821362,
+                34.634431
+              ],
+              [
+                111.823752,
+                34.646242
+              ],
+              [
+                111.830736,
+                34.649207
+              ],
+              [
+                111.863953,
+                34.647082
+              ],
+              [
+                111.888867,
+                34.61891
+              ],
+              [
+                111.905664,
+                34.6198
+              ],
+              [
+                111.928879,
+                34.600272
+              ],
+              [
+                111.94165,
+                34.620492
+              ],
+              [
+                111.943223,
+                34.629637
+              ],
+              [
+                111.953666,
+                34.639521
+              ],
+              [
+                111.967444,
+                34.64308
+              ],
+              [
+                111.971408,
+                34.65069
+              ],
+              [
+                111.980089,
+                34.654
+              ],
+              [
+                111.972855,
+                34.66739
+              ],
+              [
+                111.984997,
+                34.686013
+              ],
+              [
+                111.982921,
+                34.695052
+              ],
+              [
+                111.993238,
+                34.693866
+              ],
+              [
+                111.997642,
+                34.717125
+              ],
+              [
+                112.01488,
+                34.724235
+              ],
+              [
+                112.014125,
+                34.731048
+              ],
+              [
+                111.995692,
+                34.736823
+              ],
+              [
+                112.000536,
+                34.745017
+              ],
+              [
+                111.997831,
+                34.750693
+              ],
+              [
+                112.011042,
+                34.750644
+              ],
+              [
+                112.019347,
+                34.762587
+              ],
+              [
+                112.017459,
+                34.769939
+              ],
+              [
+                112.031174,
+                34.777735
+              ],
+              [
+                112.028784,
+                34.778968
+              ],
+              [
+                112.021171,
+                34.777537
+              ],
+              [
+                112.018466,
+                34.785678
+              ],
+              [
+                112.030231,
+                34.782668
+              ],
+              [
+                112.031992,
+                34.782965
+              ],
+              [
+                112.030105,
+                34.792584
+              ],
+              [
+                112.016327,
+                34.797073
+              ],
+              [
+                112.012804,
+                34.803781
+              ],
+              [
+                112.020731,
+                34.811327
+              ],
+              [
+                112.01444,
+                34.817985
+              ],
+              [
+                111.986003,
+                34.837856
+              ],
+              [
+                111.982858,
+                34.846139
+              ],
+              [
+                111.990722,
+                34.853779
+              ],
+              [
+                111.981411,
+                34.857624
+              ],
+              [
+                111.957944,
+                34.851167
+              ],
+              [
+                111.948948,
+                34.852301
+              ],
+              [
+                111.949829,
+                34.863391
+              ],
+              [
+                111.922336,
+                34.883941
+              ],
+              [
+                111.898744,
+                34.885912
+              ],
+              [
+                111.883267,
+                34.894239
+              ],
+              [
+                111.88396,
+                34.911974
+              ],
+              [
+                111.890062,
+                34.920347
+              ],
+              [
+                111.906168,
+                34.929606
+              ],
+              [
+                111.921707,
+                34.934038
+              ],
+              [
+                111.933975,
+                34.947678
+              ],
+              [
+                111.950835,
+                34.947776
+              ],
+              [
+                111.981914,
+                34.960626
+              ],
+              [
+                111.983235,
+                34.970471
+              ],
+              [
+                111.961153,
+                34.975689
+              ],
+              [
+                111.95763,
+                34.986221
+              ],
+              [
+                111.967192,
+                34.989912
+              ],
+              [
+                111.981033,
+                34.990059
+              ],
+              [
+                111.978139,
+                34.997195
+              ],
+              [
+                111.991917,
+                35.005018
+              ],
+              [
+                111.967067,
+                35.014169
+              ],
+              [
+                111.940203,
+                35.030599
+              ],
+              [
+                111.939511,
+                35.0366
+              ],
+              [
+                111.958573,
+                35.0486
+              ],
+              [
+                111.958699,
+                35.062908
+              ],
+              [
+                111.973358,
+                35.070234
+              ]
+            ]
+          ],
+          [
+            [
+              [
+                112.031992,
+                34.782965
+              ],
+              [
+                112.030231,
+                34.782668
+              ],
+              [
+                112.028784,
+                34.778968
+              ],
+              [
+                112.031174,
+                34.777735
+              ],
+              [
+                112.031992,
+                34.782965
+              ]
+            ]
+          ]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "adcode": 411300,
+        "name": "鍗楅槼甯�",
+        "center": [
+          112.540918,
+          32.999082
+        ],
+        "centroid": [
+          112.288385,
+          33.044723
+        ],
+        "childrenNum": 13,
+        "level": "city",
+        "parent": {
+          "adcode": 410000
+        },
+        "subFeatureIndex": 12,
+        "acroutes": [
+          100000,
+          410000
+        ]
+      },
+      "geometry": {
+        "type": "MultiPolygon",
+        "coordinates": [
+          [
+            [
+              [
+                111.009982,
+                33.56054
+              ],
+              [
+                111.003691,
+                33.548075
+              ],
+              [
+                111.003565,
+                33.533105
+              ],
+              [
+                111.019482,
+                33.520837
+              ],
+              [
+                111.027346,
+                33.493139
+              ],
+              [
+                111.027346,
+                33.469542
+              ],
+              [
+                111.020866,
+                33.45085
+              ],
+              [
+                110.996708,
+                33.435963
+              ],
+              [
+                111.011429,
+                33.407336
+              ],
+              [
+                111.011052,
+                33.398861
+              ],
+              [
+                111.017406,
+                33.385019
+              ],
+              [
+                111.026151,
+                33.375338
+              ],
+              [
+                111.02722,
+                33.365506
+              ],
+              [
+                111.023005,
+                33.35487
+              ],
+              [
+                111.029988,
+                33.339415
+              ],
+              [
+                111.026025,
+                33.330382
+              ],
+              [
+                111.000356,
+                33.323957
+              ],
+              [
+                110.999476,
+                33.313416
+              ],
+              [
+                111.007969,
+                33.303678
+              ],
+              [
+                110.998469,
+                33.301418
+              ],
+              [
+                110.997903,
+                33.290975
+              ],
+              [
+                110.991297,
+                33.276112
+              ],
+              [
+                110.982867,
+                33.270085
+              ],
+              [
+                110.997022,
+                33.254766
+              ],
+              [
+                110.985006,
+                33.255419
+              ],
+              [
+                110.997274,
+                33.238941
+              ],
+              [
+                111.01231,
+                33.233113
+              ],
+              [
+                111.016714,
+                33.223968
+              ],
+              [
+                111.030366,
+                33.214571
+              ],
+              [
+                111.032442,
+                33.209345
+              ],
+              [
+                111.051441,
+                33.20065
+              ],
+              [
+                111.057858,
+                33.183609
+              ],
+              [
+                111.037223,
+                33.160984
+              ],
+              [
+                111.045527,
+                33.158168
+              ],
+              [
+                111.061885,
+                33.174006
+              ],
+              [
+                111.073272,
+                33.180643
+              ],
+              [
+                111.088811,
+                33.182051
+              ],
+              [
+                111.0985,
+                33.176923
+              ],
+              [
+                111.106678,
+                33.164453
+              ],
+              [
+                111.128257,
+                33.154547
+              ],
+              [
+                111.132032,
+                33.137749
+              ],
+              [
+                111.139267,
+                33.134379
+              ],
+              [
+                111.146313,
+                33.123815
+              ],
+              [
+                111.162544,
+                33.124268
+              ],
+              [
+                111.179531,
+                33.115463
+              ],
+              [
+                111.177014,
+                33.101174
+              ],
+              [
+                111.190918,
+                33.086731
+              ],
+              [
+                111.192868,
+                33.071631
+              ],
+              [
+                111.167829,
+                33.06398
+              ],
+              [
+                111.15078,
+                33.053206
+              ],
+              [
+                111.148263,
+                33.042381
+              ],
+              [
+                111.152982,
+                33.039712
+              ],
+              [
+                111.179845,
+                33.043942
+              ],
+              [
+                111.189345,
+                33.038655
+              ],
+              [
+                111.221682,
+                33.042633
+              ],
+              [
+                111.24043,
+                33.037194
+              ],
+              [
+                111.240556,
+                33.019971
+              ],
+              [
+                111.2588,
+                33.006472
+              ],
+              [
+                111.269495,
+                32.987831
+              ],
+              [
+                111.273647,
+                32.971858
+              ],
+              [
+                111.267797,
+                32.963744
+              ],
+              [
+                111.253138,
+                32.955781
+              ],
+              [
+                111.245526,
+                32.944188
+              ],
+              [
+                111.24282,
+                32.930627
+              ],
+              [
+                111.24993,
+                32.91424
+              ],
+              [
+                111.246344,
+                32.888518
+              ],
+              [
+                111.2549,
+                32.884029
+              ],
+              [
+                111.269621,
+                32.898455
+              ],
+              [
+                111.280127,
+                32.904355
+              ],
+              [
+                111.290697,
+                32.892554
+              ],
+              [
+                111.289879,
+                32.86506
+              ],
+              [
+                111.293528,
+                32.859409
+              ],
+              [
+                111.316365,
+                32.85078
+              ],
+              [
+                111.331275,
+                32.841142
+              ],
+              [
+                111.358642,
+                32.837003
+              ],
+              [
+                111.380032,
+                32.828827
+              ],
+              [
+                111.385065,
+                32.821305
+              ],
+              [
+                111.396138,
+                32.794547
+              ],
+              [
+                111.405637,
+                32.782529
+              ],
+              [
+                111.404128,
+                32.77561
+              ],
+              [
+                111.41023,
+                32.769347
+              ],
+              [
+                111.413564,
+                32.757174
+              ],
+              [
+                111.422938,
+                32.751011
+              ],
+              [
+                111.437597,
+                32.750253
+              ],
+              [
+                111.447285,
+                32.754951
+              ],
+              [
+                111.448229,
+                32.761467
+              ],
+              [
+                111.46295,
+                32.764296
+              ],
+              [
+                111.461063,
+                32.771671
+              ],
+              [
+                111.468172,
+                32.770862
+              ],
+              [
+                111.475659,
+                32.758437
+              ],
+              [
+                111.469808,
+                32.753638
+              ],
+              [
+                111.46899,
+                32.738633
+              ],
+              [
+                111.456974,
+                32.72696
+              ],
+              [
+                111.444391,
+                32.736713
+              ],
+              [
+                111.441749,
+                32.726758
+              ],
+              [
+                111.431494,
+                32.735045
+              ],
+              [
+                111.425455,
+                32.73267
+              ],
+              [
+                111.44112,
+                32.722816
+              ],
+              [
+                111.464649,
+                32.722362
+              ],
+              [
+                111.472639,
+                32.717763
+              ],
+              [
+                111.467858,
+                32.707351
+              ],
+              [
+                111.479874,
+                32.694664
+              ],
+              [
+                111.513029,
+                32.673986
+              ],
+              [
+                111.526555,
+                32.654163
+              ],
+              [
+                111.524793,
+                32.647285
+              ],
+              [
+                111.530267,
+                32.628316
+              ],
+              [
+                111.55908,
+                32.601095
+              ],
+              [
+                111.57764,
+                32.593505
+              ],
+              [
+                111.603685,
+                32.610254
+              ],
+              [
+                111.618344,
+                32.627608
+              ],
+              [
+                111.634009,
+                32.635145
+              ],
+              [
+                111.640804,
+                32.634741
+              ],
+              [
+                111.640804,
+                32.617338
+              ],
+              [
+                111.646403,
+                32.606206
+              ],
+              [
+                111.673015,
+                32.61496
+              ],
+              [
+                111.69214,
+                32.605953
+              ],
+              [
+                111.713593,
+                32.60656
+              ],
+              [
+                111.729258,
+                32.594011
+              ],
+              [
+                111.740331,
+                32.589253
+              ],
+              [
+                111.747377,
+                32.577612
+              ],
+              [
+                111.766817,
+                32.56521
+              ],
+              [
+                111.785061,
+                32.557312
+              ],
+              [
+                111.809157,
+                32.536704
+              ],
+              [
+                111.827024,
+                32.538071
+              ],
+              [
+                111.828219,
+                32.531285
+              ],
+              [
+                111.858291,
+                32.528702
+              ],
+              [
+                111.862758,
+                32.513609
+              ],
+              [
+                111.870245,
+                32.506315
+              ],
+              [
+                111.889936,
+                32.503174
+              ],
+              [
+                111.915353,
+                32.507733
+              ],
+              [
+                111.932339,
+                32.51523
+              ],
+              [
+                111.948696,
+                32.517003
+              ],
+              [
+                111.956434,
+                32.512292
+              ],
+              [
+                111.966815,
+                32.494916
+              ],
+              [
+                111.977384,
+                32.471151
+              ],
+              [
+                111.992861,
+                32.467351
+              ],
+              [
+                111.990407,
+                32.457468
+              ],
+              [
+                112.001102,
+                32.459444
+              ],
+              [
+                112.007079,
+                32.45103
+              ],
+              [
+                112.014377,
+                32.450321
+              ],
+              [
+                112.032495,
+                32.462435
+              ],
+              [
+                112.038095,
+                32.470087
+              ],
+              [
+                112.047972,
+                32.473736
+              ],
+              [
+                112.064014,
+                32.474243
+              ],
+              [
+                112.069865,
+                32.460002
+              ],
+              [
+                112.065965,
+                32.444643
+              ],
+              [
+                112.07515,
+                32.436887
+              ],
+              [
+                112.086034,
+                32.435316
+              ],
+              [
+                112.081315,
+                32.425682
+              ],
+              [
+                112.084398,
+                32.419699
+              ],
+              [
+                112.093646,
+                32.418888
+              ],
+              [
+                112.108431,
+                32.40474
+              ],
+              [
+                112.12441,
+                32.398755
+              ],
+              [
+                112.130261,
+                32.403117
+              ],
+              [
+                112.13737,
+                32.390589
+              ],
+              [
+                112.156873,
+                32.377096
+              ],
+              [
+                112.164485,
+                32.385314
+              ],
+              [
+                112.150645,
+                32.384198
+              ],
+              [
+                112.161717,
+                32.399313
+              ],
+              [
+                112.146555,
+                32.403117
+              ],
+              [
+                112.150204,
+                32.411637
+              ],
+              [
+                112.164674,
+                32.411282
+              ],
+              [
+                112.172475,
+                32.405906
+              ],
+              [
+                112.172161,
+                32.39835
+              ],
+              [
+                112.178829,
+                32.392111
+              ],
+              [
+                112.17279,
+                32.385162
+              ],
+              [
+                112.205882,
+                32.392973
+              ],
+              [
+                112.229033,
+                32.385365
+              ],
+              [
+                112.230921,
+                32.377451
+              ],
+              [
+                112.251619,
+                32.368116
+              ],
+              [
+                112.255394,
+                32.359745
+              ],
+              [
+                112.261999,
+                32.358882
+              ],
+              [
+                112.288297,
+                32.345587
+              ],
+              [
+                112.299495,
+                32.334929
+              ],
+              [
+                112.32812,
+                32.321682
+              ],
+              [
+                112.329819,
+                32.338178
+              ],
+              [
+                112.338627,
+                32.34853
+              ],
+              [
+                112.351146,
+                32.350459
+              ],
+              [
+                112.360017,
+                32.36563
+              ],
+              [
+                112.368195,
+                32.367913
+              ],
+              [
+                112.38795,
+                32.363702
+              ],
+              [
+                112.39097,
+                32.37116
+              ],
+              [
+                112.414184,
+                32.363195
+              ],
+              [
+                112.417519,
+                32.357005
+              ],
+              [
+                112.450422,
+                32.342847
+              ],
+              [
+                112.445515,
+                32.355584
+              ],
+              [
+                112.460236,
+                32.368269
+              ],
+              [
+                112.472756,
+                32.371769
+              ],
+              [
+                112.477222,
+                32.380799
+              ],
+              [
+                112.495656,
+                32.374915
+              ],
+              [
+                112.506539,
+                32.380749
+              ],
+              [
+                112.521638,
+                32.383082
+              ],
+              [
+                112.531201,
+                32.377147
+              ],
+              [
+                112.544727,
+                32.395509
+              ],
+              [
+                112.545231,
+                32.403878
+              ],
+              [
+                112.561714,
+                32.398907
+              ],
+              [
+                112.577819,
+                32.387952
+              ],
+              [
+                112.57719,
+                32.382524
+              ],
+              [
+                112.58908,
+                32.381307
+              ],
+              [
+                112.59663,
+                32.385568
+              ],
+              [
+                112.61198,
+                32.387039
+              ],
+              [
+                112.630477,
+                32.379937
+              ],
+              [
+                112.645513,
+                32.368472
+              ],
+              [
+                112.672062,
+                32.368116
+              ],
+              [
+                112.685651,
+                32.357715
+              ],
+              [
+                112.713647,
+                32.35259
+              ],
+              [
+                112.719183,
+                32.361774
+              ],
+              [
+                112.73359,
+                32.366239
+              ],
+              [
+                112.734911,
+                32.351677
+              ],
+              [
+                112.754099,
+                32.342847
+              ],
+              [
+                112.767877,
+                32.344166
+              ],
+              [
+                112.77637,
+                32.358375
+              ],
+              [
+                112.804052,
+                32.372277
+              ],
+              [
+                112.835634,
+                32.381611
+              ],
+              [
+                112.860736,
+                32.395814
+              ],
+              [
+                112.870487,
+                32.397842
+              ],
+              [
+                112.878603,
+                32.392567
+              ],
+              [
+                112.877219,
+                32.379531
+              ],
+              [
+                112.888857,
+                32.376792
+              ],
+              [
+                112.902384,
+                32.388662
+              ],
+              [
+                112.911883,
+                32.390741
+              ],
+              [
+                112.948184,
+                32.388256
+              ],
+              [
+                112.960389,
+                32.385314
+              ],
+              [
+                112.969888,
+                32.37116
+              ],
+              [
+                112.98807,
+                32.372327
+              ],
+              [
+                112.991908,
+                32.378314
+              ],
+              [
+                112.988636,
+                32.399567
+              ],
+              [
+                113.00059,
+                32.416758
+              ],
+              [
+                113.012543,
+                32.417164
+              ],
+              [
+                113.025314,
+                32.424618
+              ],
+              [
+                113.05029,
+                32.417925
+              ],
+              [
+                113.058846,
+                32.404638
+              ],
+              [
+                113.078915,
+                32.394393
+              ],
+              [
+                113.107981,
+                32.398502
+              ],
+              [
+                113.118739,
+                32.375828
+              ],
+              [
+                113.150258,
+                32.376284
+              ],
+              [
+                113.155606,
+                32.380749
+              ],
+              [
+                113.159695,
+                32.400784
+              ],
+              [
+                113.159129,
+                32.410673
+              ],
+              [
+                113.172718,
+                32.42117
+              ],
+              [
+                113.185678,
+                32.42188
+              ],
+              [
+                113.211786,
+                32.431969
+              ],
+              [
+                113.226508,
+                32.42548
+              ],
+              [
+                113.236322,
+                32.406971
+              ],
+              [
+                113.259537,
+                32.390589
+              ],
+              [
+                113.273189,
+                32.384756
+              ],
+              [
+                113.295397,
+                32.367406
+              ],
+              [
+                113.298731,
+                32.35396
+              ],
+              [
+                113.325217,
+                32.346602
+              ],
+              [
+                113.333333,
+                32.335945
+              ],
+              [
+                113.31773,
+                32.327012
+              ],
+              [
+                113.31836,
+                32.319042
+              ],
+              [
+                113.332074,
+                32.316098
+              ],
+              [
+                113.347677,
+                32.298633
+              ],
+              [
+                113.365166,
+                32.294774
+              ],
+              [
+                113.376679,
+                32.298379
+              ],
+              [
+                113.394106,
+                32.288072
+              ],
+              [
+                113.397944,
+                32.279286
+              ],
+              [
+                113.410023,
+                32.278017
+              ],
+              [
+                113.420466,
+                32.269535
+              ],
+              [
+                113.428834,
+                32.270551
+              ],
+              [
+                113.471048,
+                32.299141
+              ],
+              [
+                113.480296,
+                32.298989
+              ],
+              [
+                113.500239,
+                32.312697
+              ],
+              [
+                113.511689,
+                32.316809
+              ],
+              [
+                113.528738,
+                32.330362
+              ],
+              [
+                113.542013,
+                32.326809
+              ],
+              [
+                113.550066,
+                32.328737
+              ],
+              [
+                113.547675,
+                32.316047
+              ],
+              [
+                113.55082,
+                32.302543
+              ],
+              [
+                113.561516,
+                32.307366
+              ],
+              [
+                113.556608,
+                32.324169
+              ],
+              [
+                113.551261,
+                32.329245
+              ],
+              [
+                113.565227,
+                32.340208
+              ],
+              [
+                113.583032,
+                32.34305
+              ],
+              [
+                113.579194,
+                32.355229
+              ],
+              [
+                113.589637,
+                32.349495
+              ],
+              [
+                113.605617,
+                32.35056
+              ],
+              [
+                113.593286,
+                32.358578
+              ],
+              [
+                113.593727,
+                32.365275
+              ],
+              [
+                113.604233,
+                32.365174
+              ],
+              [
+                113.611845,
+                32.35873
+              ],
+              [
+                113.624994,
+                32.363601
+              ],
+              [
+                113.624617,
+                32.37948
+              ],
+              [
+                113.63657,
+                32.385923
+              ],
+              [
+                113.643302,
+                32.402559
+              ],
+              [
+                113.651228,
+                32.413412
+              ],
+              [
+                113.662741,
+                32.410115
+              ],
+              [
+                113.665006,
+                32.422235
+              ],
+              [
+                113.67199,
+                32.41762
+              ],
+              [
+                113.683817,
+                32.420206
+              ],
+              [
+                113.6908,
+                32.415846
+              ],
+              [
+                113.702187,
+                32.420206
+              ],
+              [
+                113.70785,
+                32.410318
+              ],
+              [
+                113.718608,
+                32.417215
+              ],
+              [
+                113.710555,
+                32.421221
+              ],
+              [
+                113.725339,
+                32.436025
+              ],
+              [
+                113.730875,
+                32.449307
+              ],
+              [
+                113.730498,
+                32.46061
+              ],
+              [
+                113.73767,
+                32.453362
+              ],
+              [
+                113.741319,
+                32.465374
+              ],
+              [
+                113.753398,
+                32.465425
+              ],
+              [
+                113.761828,
+                32.470645
+              ],
+              [
+                113.764219,
+                32.489951
+              ],
+              [
+                113.759375,
+                32.508797
+              ],
+              [
+                113.768245,
+                32.534425
+              ],
+              [
+                113.774285,
+                32.537362
+              ],
+              [
+                113.763212,
+                32.547895
+              ],
+              [
+                113.769126,
+                32.559287
+              ],
+              [
+                113.782023,
+                32.566172
+              ],
+              [
+                113.789698,
+                32.586368
+              ],
+              [
+                113.805301,
+                32.597705
+              ],
+              [
+                113.814423,
+                32.600842
+              ],
+              [
+                113.809264,
+                32.603828
+              ],
+              [
+                113.799072,
+                32.620879
+              ],
+              [
+                113.785169,
+                32.631402
+              ],
+              [
+                113.791963,
+                32.642075
+              ],
+              [
+                113.781079,
+                32.652595
+              ],
+              [
+                113.771894,
+                32.655276
+              ],
+              [
+                113.761199,
+                32.652697
+              ],
+              [
+                113.729114,
+                32.669688
+              ],
+              [
+                113.717727,
+                32.683694
+              ],
+              [
+                113.696274,
+                32.695624
+              ],
+              [
+                113.668404,
+                32.692389
+              ],
+              [
+                113.649089,
+                32.708261
+              ],
+              [
+                113.642987,
+                32.703106
+              ],
+              [
+                113.623358,
+                32.706138
+              ],
+              [
+                113.614676,
+                32.711344
+              ],
+              [
+                113.609832,
+                32.696484
+              ],
+              [
+                113.616941,
+                32.69158
+              ],
+              [
+                113.619332,
+                32.667362
+              ],
+              [
+                113.594041,
+                32.661092
+              ],
+              [
+                113.596243,
+                32.649763
+              ],
+              [
+                113.588882,
+                32.650421
+              ],
+              [
+                113.583535,
+                32.633577
+              ],
+              [
+                113.571582,
+                32.624775
+              ],
+              [
+                113.565416,
+                32.602715
+              ],
+              [
+                113.542264,
+                32.589152
+              ],
+              [
+                113.524397,
+                32.593505
+              ],
+              [
+                113.513513,
+                32.579384
+              ],
+              [
+                113.512759,
+                32.571538
+              ],
+              [
+                113.492752,
+                32.567741
+              ],
+              [
+                113.472621,
+                32.578574
+              ],
+              [
+                113.458843,
+                32.575689
+              ],
+              [
+                113.458528,
+                32.585508
+              ],
+              [
+                113.447393,
+                32.584698
+              ],
+              [
+                113.437893,
+                32.589203
+              ],
+              [
+                113.422354,
+                32.605245
+              ],
+              [
+                113.400712,
+                32.61324
+              ],
+              [
+                113.382216,
+                32.593353
+              ],
+              [
+                113.372024,
+                32.576245
+              ],
+              [
+                113.364537,
+                32.569462
+              ],
+              [
+                113.351577,
+                32.573664
+              ],
+              [
+                113.342832,
+                32.567893
+              ],
+              [
+                113.326349,
+                32.577561
+              ],
+              [
+                113.321631,
+                32.58733
+              ],
+              [
+                113.315717,
+                32.587988
+              ],
+              [
+                113.31037,
+                32.579536
+              ],
+              [
+                113.303135,
+                32.586723
+              ],
+              [
+                113.282311,
+                32.591986
+              ],
+              [
+                113.280486,
+                32.595984
+              ],
+              [
+                113.249785,
+                32.593555
+              ],
+              [
+                113.243871,
+                32.578827
+              ],
+              [
+                113.221286,
+                32.570424
+              ],
+              [
+                113.205432,
+                32.569969
+              ],
+              [
+                113.198575,
+                32.579536
+              ],
+              [
+                113.200651,
+                32.585103
+              ],
+              [
+                113.196121,
+                32.606156
+              ],
+              [
+                113.201783,
+                32.614504
+              ],
+              [
+                113.20279,
+                32.632262
+              ],
+              [
+                113.19222,
+                32.635398
+              ],
+              [
+                113.186181,
+                32.646476
+              ],
+              [
+                113.18788,
+                32.652241
+              ],
+              [
+                113.20172,
+                32.660333
+              ],
+              [
+                113.210276,
+                32.678941
+              ],
+              [
+                113.220594,
+                32.684452
+              ],
+              [
+                113.236196,
+                32.679143
+              ],
+              [
+                113.243305,
+                32.66984
+              ],
+              [
+                113.252679,
+                32.666907
+              ],
+              [
+                113.258467,
+                32.653961
+              ],
+              [
+                113.269351,
+                32.662053
+              ],
+              [
+                113.259914,
+                32.677778
+              ],
+              [
+                113.236259,
+                32.682581
+              ],
+              [
+                113.241103,
+                32.691429
+              ],
+              [
+                113.231226,
+                32.701488
+              ],
+              [
+                113.213736,
+                32.703055
+              ],
+              [
+                113.207697,
+                32.717257
+              ],
+              [
+                113.191528,
+                32.717712
+              ],
+              [
+                113.193982,
+                32.733378
+              ],
+              [
+                113.201343,
+                32.738835
+              ],
+              [
+                113.199959,
+                32.750253
+              ],
+              [
+                113.177247,
+                32.775307
+              ],
+              [
+                113.185237,
+                32.788286
+              ],
+              [
+                113.184294,
+                32.801364
+              ],
+              [
+                113.17838,
+                32.806665
+              ],
+              [
+                113.187062,
+                32.819943
+              ],
+              [
+                113.175737,
+                32.83241
+              ],
+              [
+                113.165797,
+                32.838063
+              ],
+              [
+                113.167999,
+                32.847046
+              ],
+              [
+                113.177059,
+                32.852446
+              ],
+              [
+                113.187062,
+                32.866422
+              ],
+              [
+                113.195681,
+                32.871871
+              ],
+              [
+                113.205558,
+                32.884937
+              ],
+              [
+                113.201154,
+                32.888821
+              ],
+              [
+                113.208137,
+                32.916408
+              ],
+              [
+                113.199015,
+                32.920291
+              ],
+              [
+                113.181714,
+                32.920644
+              ],
+              [
+                113.161897,
+                32.92745
+              ],
+              [
+                113.15592,
+                32.936122
+              ],
+              [
+                113.145854,
+                32.940306
+              ],
+              [
+                113.140129,
+                32.930627
+              ],
+              [
+                113.11553,
+                32.932996
+              ],
+              [
+                113.109805,
+                32.94202
+              ],
+              [
+                113.097789,
+                32.946406
+              ],
+              [
+                113.108799,
+                32.97332
+              ],
+              [
+                113.116097,
+                32.986421
+              ],
+              [
+                113.120312,
+                33.001182
+              ],
+              [
+                113.127358,
+                33.010552
+              ],
+              [
+                113.142016,
+                33.016647
+              ],
+              [
+                113.161456,
+                33.038906
+              ],
+              [
+                113.165546,
+                33.048977
+              ],
+              [
+                113.18574,
+                33.056932
+              ],
+              [
+                113.190019,
+                33.067202
+              ],
+              [
+                113.206124,
+                33.070826
+              ],
+              [
+                113.219273,
+                33.064584
+              ],
+              [
+                113.237077,
+                33.077017
+              ],
+              [
+                113.250477,
+                33.077822
+              ],
+              [
+                113.257335,
+                33.083409
+              ],
+              [
+                113.271427,
+                33.08049
+              ],
+              [
+                113.301436,
+                33.080138
+              ],
+              [
+                113.313138,
+                33.075608
+              ],
+              [
+                113.325469,
+                33.079181
+              ],
+              [
+                113.333836,
+                33.085976
+              ],
+              [
+                113.357239,
+                33.091613
+              ],
+              [
+                113.386619,
+                33.113451
+              ],
+              [
+                113.388821,
+                33.128393
+              ],
+              [
+                113.379888,
+                33.135485
+              ],
+              [
+                113.385424,
+                33.145595
+              ],
+              [
+                113.382467,
+                33.156156
+              ],
+              [
+                113.385802,
+                33.169381
+              ],
+              [
+                113.370136,
+                33.182855
+              ],
+              [
+                113.377875,
+                33.184313
+              ],
+              [
+                113.384417,
+                33.196679
+              ],
+              [
+                113.384103,
+                33.206128
+              ],
+              [
+                113.391212,
+                33.225928
+              ],
+              [
+                113.402851,
+                33.235224
+              ],
+              [
+                113.400146,
+                33.261044
+              ],
+              [
+                113.384732,
+                33.29203
+              ],
+              [
+                113.388318,
+                33.299059
+              ],
+              [
+                113.403857,
+                33.302724
+              ],
+              [
+                113.400838,
+                33.314722
+              ],
+              [
+                113.40738,
+                33.323004
+              ],
+              [
+                113.400397,
+                33.335852
+              ],
+              [
+                113.363908,
+                33.342476
+              ],
+              [
+                113.335472,
+                33.35201
+              ],
+              [
+                113.312194,
+                33.341121
+              ],
+              [
+                113.302632,
+                33.348999
+              ],
+              [
+                113.289923,
+                33.351709
+              ],
+              [
+                113.277089,
+                33.350254
+              ],
+              [
+                113.270609,
+                33.358834
+              ],
+              [
+                113.257964,
+                33.366158
+              ],
+              [
+                113.245004,
+                33.365356
+              ],
+              [
+                113.241418,
+                33.373733
+              ],
+              [
+                113.230534,
+                33.374937
+              ],
+              [
+                113.230912,
+                33.38848
+              ],
+              [
+                113.216316,
+                33.398861
+              ],
+              [
+                113.198134,
+                33.420523
+              ],
+              [
+                113.192975,
+                33.429797
+              ],
+              [
+                113.176052,
+                33.435713
+              ],
+              [
+                113.156109,
+                33.433607
+              ],
+              [
+                113.141765,
+                33.425987
+              ],
+              [
+                113.128742,
+                33.427642
+              ],
+              [
+                113.125659,
+                33.439723
+              ],
+              [
+                113.110309,
+                33.446138
+              ],
+              [
+                113.074826,
+                33.448444
+              ],
+              [
+                113.045698,
+                33.439472
+              ],
+              [
+                113.041357,
+                33.44659
+              ],
+              [
+                113.037897,
+                33.464331
+              ],
+              [
+                113.041168,
+                33.473701
+              ],
+              [
+                113.053373,
+                33.485725
+              ],
+              [
+                113.049221,
+                33.492087
+              ],
+              [
+                113.048214,
+                33.508317
+              ],
+              [
+                113.04381,
+                33.517532
+              ],
+              [
+                113.047333,
+                33.532204
+              ],
+              [
+                113.036261,
+                33.539865
+              ],
+              [
+                113.036701,
+                33.546974
+              ],
+              [
+                113.027642,
+                33.546874
+              ],
+              [
+                113.022861,
+                33.56119
+              ],
+              [
+                112.997255,
+                33.569399
+              ],
+              [
+                112.990775,
+                33.567797
+              ],
+              [
+                112.986497,
+                33.575805
+              ],
+              [
+                112.972908,
+                33.584613
+              ],
+              [
+                112.963597,
+                33.583662
+              ],
+              [
+                112.950134,
+                33.590968
+              ],
+              [
+                112.94271,
+                33.607629
+              ],
+              [
+                112.917545,
+                33.605627
+              ],
+              [
+                112.893513,
+                33.616133
+              ],
+              [
+                112.887914,
+                33.608329
+              ],
+              [
+                112.869669,
+                33.611531
+              ],
+              [
+                112.854822,
+                33.603626
+              ],
+              [
+                112.85262,
+                33.584413
+              ],
+              [
+                112.845637,
+                33.578107
+              ],
+              [
+                112.82022,
+                33.574804
+              ],
+              [
+                112.81179,
+                33.580309
+              ],
+              [
+                112.783668,
+                33.567747
+              ],
+              [
+                112.773413,
+                33.56079
+              ],
+              [
+                112.760076,
+                33.571751
+              ],
+              [
+                112.750387,
+                33.571151
+              ],
+              [
+                112.743215,
+                33.578858
+              ],
+              [
+                112.725411,
+                33.586765
+              ],
+              [
+                112.70572,
+                33.585263
+              ],
+              [
+                112.689174,
+                33.587165
+              ],
+              [
+                112.683889,
+                33.591718
+              ],
+              [
+                112.664386,
+                33.597673
+              ],
+              [
+                112.660234,
+                33.605377
+              ],
+              [
+                112.646205,
+                33.602876
+              ],
+              [
+                112.63444,
+                33.594821
+              ],
+              [
+                112.617705,
+                33.597272
+              ],
+              [
+                112.611351,
+                33.601875
+              ],
+              [
+                112.610785,
+                33.611431
+              ],
+              [
+                112.599775,
+                33.618084
+              ],
+              [
+                112.588388,
+                33.616883
+              ],
+              [
+                112.575995,
+                33.602275
+              ],
+              [
+                112.556869,
+                33.588166
+              ],
+              [
+                112.548502,
+                33.59367
+              ],
+              [
+                112.529943,
+                33.587915
+              ],
+              [
+                112.522771,
+                33.595521
+              ],
+              [
+                112.524721,
+                33.603826
+              ],
+              [
+                112.503394,
+                33.622185
+              ],
+              [
+                112.493202,
+                33.63899
+              ],
+              [
+                112.477159,
+                33.63764
+              ],
+              [
+                112.461683,
+                33.63994
+              ],
+              [
+                112.453756,
+                33.645291
+              ],
+              [
+                112.420727,
+                33.676389
+              ],
+              [
+                112.408019,
+                33.675439
+              ],
+              [
+                112.392479,
+                33.666991
+              ],
+              [
+                112.375116,
+                33.666891
+              ],
+              [
+                112.361086,
+                33.661242
+              ],
+              [
+                112.353285,
+                33.669941
+              ],
+              [
+                112.332839,
+                33.668391
+              ],
+              [
+                112.312455,
+                33.684887
+              ],
+              [
+                112.306541,
+                33.69978
+              ],
+              [
+                112.278168,
+                33.712373
+              ],
+              [
+                112.258854,
+                33.710624
+              ],
+              [
+                112.249354,
+                33.719018
+              ],
+              [
+                112.239917,
+                33.715321
+              ],
+              [
+                112.230103,
+                33.71702
+              ],
+              [
+                112.214752,
+                33.713972
+              ],
+              [
+                112.184995,
+                33.698731
+              ],
+              [
+                112.179207,
+                33.703278
+              ],
+              [
+                112.17776,
+                33.715621
+              ],
+              [
+                112.168638,
+                33.721766
+              ],
+              [
+                112.158509,
+                33.720117
+              ],
+              [
+                112.15033,
+                33.713672
+              ],
+              [
+                112.141774,
+                33.691634
+              ],
+              [
+                112.13089,
+                33.676939
+              ],
+              [
+                112.120573,
+                33.668841
+              ],
+              [
+                112.104719,
+                33.661392
+              ],
+              [
+                112.074018,
+                33.653142
+              ],
+              [
+                112.071312,
+                33.648192
+              ],
+              [
+                112.076345,
+                33.633689
+              ],
+              [
+                112.084146,
+                33.628988
+              ],
+              [
+                112.092199,
+                33.607228
+              ],
+              [
+                112.087481,
+                33.603076
+              ],
+              [
+                112.065713,
+                33.607479
+              ],
+              [
+                112.059044,
+                33.605227
+              ],
+              [
+                112.038535,
+                33.622386
+              ],
+              [
+                112.024757,
+                33.622436
+              ],
+              [
+                112.014943,
+                33.613632
+              ],
+              [
+                112.012301,
+                33.602626
+              ],
+              [
+                112.018655,
+                33.59437
+              ],
+              [
+                112.024191,
+                33.600024
+              ],
+              [
+                112.028343,
+                33.593019
+              ],
+              [
+                112.020353,
+                33.587715
+              ],
+              [
+                111.994182,
+                33.584913
+              ],
+              [
+                111.930137,
+                33.571051
+              ],
+              [
+                111.916359,
+                33.572102
+              ],
+              [
+                111.899184,
+                33.588666
+              ],
+              [
+                111.884526,
+                33.596121
+              ],
+              [
+                111.863953,
+                33.599174
+              ],
+              [
+                111.843444,
+                33.595821
+              ],
+              [
+                111.832749,
+                33.598723
+              ],
+              [
+                111.827716,
+                33.606228
+              ],
+              [
+                111.82759,
+                33.634189
+              ],
+              [
+                111.819411,
+                33.652892
+              ],
+              [
+                111.778078,
+                33.666091
+              ],
+              [
+                111.728629,
+                33.688086
+              ],
+              [
+                111.719003,
+                33.688885
+              ],
+              [
+                111.684968,
+                33.677489
+              ],
+              [
+                111.665151,
+                33.695582
+              ],
+              [
+                111.645207,
+                33.720517
+              ],
+              [
+                111.619476,
+                33.730059
+              ],
+              [
+                111.59148,
+                33.727711
+              ],
+              [
+                111.567699,
+                33.735005
+              ],
+              [
+                111.541402,
+                33.733406
+              ],
+              [
+                111.523975,
+                33.742847
+              ],
+              [
+                111.516048,
+                33.7405
+              ],
+              [
+                111.495476,
+                33.725663
+              ],
+              [
+                111.484529,
+                33.726462
+              ],
+              [
+                111.469808,
+                33.738052
+              ],
+              [
+                111.4342,
+                33.747742
+              ],
+              [
+                111.398906,
+                33.768168
+              ],
+              [
+                111.390035,
+                33.771264
+              ],
+              [
+                111.348387,
+                33.764822
+              ],
+              [
+                111.336245,
+                33.768317
+              ],
+              [
+                111.322467,
+                33.762974
+              ],
+              [
+                111.315044,
+                33.764073
+              ],
+              [
+                111.304223,
+                33.775008
+              ],
+              [
+                111.288558,
+                33.779702
+              ],
+              [
+                111.270816,
+                33.781699
+              ],
+              [
+                111.260813,
+                33.796775
+              ],
+              [
+                111.240367,
+                33.796925
+              ],
+              [
+                111.234831,
+                33.801268
+              ],
+              [
+                111.222437,
+                33.797574
+              ],
+              [
+                111.208533,
+                33.781948
+              ],
+              [
+                111.196077,
+                33.757731
+              ],
+              [
+                111.194441,
+                33.745494
+              ],
+              [
+                111.197209,
+                33.732207
+              ],
+              [
+                111.195196,
+                33.713272
+              ],
+              [
+                111.186199,
+                33.704128
+              ],
+              [
+                111.181292,
+                33.686886
+              ],
+              [
+                111.170471,
+                33.682138
+              ],
+              [
+                111.151598,
+                33.684787
+              ],
+              [
+                111.141406,
+                33.678739
+              ],
+              [
+                111.133164,
+                33.678939
+              ],
+              [
+                111.140273,
+                33.661292
+              ],
+              [
+                111.146439,
+                33.658592
+              ],
+              [
+                111.152101,
+                33.645441
+              ],
+              [
+                111.143922,
+                33.633189
+              ],
+              [
+                111.134674,
+                33.627437
+              ],
+              [
+                111.133982,
+                33.612381
+              ],
+              [
+                111.123224,
+                33.598623
+              ],
+              [
+                111.114542,
+                33.578758
+              ],
+              [
+                111.102903,
+                33.573903
+              ],
+              [
+                111.089126,
+                33.563743
+              ],
+              [
+                111.070063,
+                33.566346
+              ],
+              [
+                111.058425,
+                33.555534
+              ],
+              [
+                111.025144,
+                33.550578
+              ],
+              [
+                111.009982,
+                33.56054
+              ]
+            ]
+          ],
+          [
+            [
+              [
+                111.033889,
+                33.178029
+              ],
+              [
+                111.037789,
+                33.184816
+              ],
+              [
+                111.032064,
+                33.188686
+              ],
+              [
+                111.015833,
+                33.174057
+              ],
+              [
+                111.033889,
+                33.178029
+              ]
+            ]
+          ],
+          [
+            [
+              [
+                112.734093,
+                32.356751
+              ],
+              [
+                112.730885,
+                32.363144
+              ],
+              [
+                112.723021,
+                32.360962
+              ],
+              [
+                112.734093,
+                32.356751
+              ]
+            ]
+          ]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "adcode": 411400,
+        "name": "鍟嗕笜甯�",
+        "center": [
+          115.650497,
+          34.437054
+        ],
+        "centroid": [
+          115.702245,
+          34.28898
+        ],
+        "childrenNum": 9,
+        "level": "city",
+        "parent": {
+          "adcode": 410000
+        },
+        "subFeatureIndex": 13,
+        "acroutes": [
+          100000,
+          410000
+        ]
+      },
+      "geometry": {
+        "type": "MultiPolygon",
+        "coordinates": [
+          [
+            [
+              [
+                115.653601,
+                34.060084
+              ],
+              [
+                115.66914,
+                34.0567
+              ],
+              [
+                115.681848,
+                34.065508
+              ],
+              [
+                115.698205,
+                34.066403
+              ],
+              [
+                115.706007,
+                34.059835
+              ],
+              [
+                115.735827,
+                34.076852
+              ],
+              [
+                115.768856,
+                34.062174
+              ],
+              [
+                115.781438,
+                34.062223
+              ],
+              [
+                115.780243,
+                34.073121
+              ],
+              [
+                115.793455,
+                34.063666
+              ],
+              [
+                115.80912,
+                34.062472
+              ],
+              [
+                115.815537,
+                34.052867
+              ],
+              [
+                115.832209,
+                34.038533
+              ],
+              [
+                115.845231,
+                34.030867
+              ],
+              [
+                115.845483,
+                34.012048
+              ],
+              [
+                115.852718,
+                34.003832
+              ],
+              [
+                115.877065,
+                34.003135
+              ],
+              [
+                115.876751,
+                34.028826
+              ],
+              [
+                115.887257,
+                34.032759
+              ],
+              [
+                115.89531,
+                34.028727
+              ],
+              [
+                115.899336,
+                34.014737
+              ],
+              [
+                115.904369,
+                34.009957
+              ],
+              [
+                115.919783,
+                34.010803
+              ],
+              [
+                115.926703,
+                34.007865
+              ],
+              [
+                115.957593,
+                34.007716
+              ],
+              [
+                115.967596,
+                34.002089
+              ],
+              [
+                115.984016,
+                33.987846
+              ],
+              [
+                115.994963,
+                33.975095
+              ],
+              [
+                116.00031,
+                33.963238
+              ],
+              [
+                115.995529,
+                33.947593
+              ],
+              [
+                115.982695,
+                33.917192
+              ],
+              [
+                115.987036,
+                33.901189
+              ],
+              [
+                115.999178,
+                33.901937
+              ],
+              [
+                116.012515,
+                33.8974
+              ],
+              [
+                116.013459,
+                33.885732
+              ],
+              [
+                116.034535,
+                33.880047
+              ],
+              [
+                116.059196,
+                33.860945
+              ],
+              [
+                116.056743,
+                33.850919
+              ],
+              [
+                116.06511,
+                33.847477
+              ],
+              [
+                116.063474,
+                33.826222
+              ],
+              [
+                116.045922,
+                33.829016
+              ],
+              [
+                116.045418,
+                33.822978
+              ],
+              [
+                116.058064,
+                33.821381
+              ],
+              [
+                116.062342,
+                33.814494
+              ],
+              [
+                116.055421,
+                33.804812
+              ],
+              [
+                116.073351,
+                33.79403
+              ],
+              [
+                116.074421,
+                33.781549
+              ],
+              [
+                116.099083,
+                33.783097
+              ],
+              [
+                116.098894,
+                33.774859
+              ],
+              [
+                116.109274,
+                33.75818
+              ],
+              [
+                116.131671,
+                33.752237
+              ],
+              [
+                116.155389,
+                33.709924
+              ],
+              [
+                116.174074,
+                33.709025
+              ],
+              [
+                116.197289,
+                33.725363
+              ],
+              [
+                116.204964,
+                33.726812
+              ],
+              [
+                116.226669,
+                33.722466
+              ],
+              [
+                116.230192,
+                33.734855
+              ],
+              [
+                116.246046,
+                33.72871
+              ],
+              [
+                116.263598,
+                33.730059
+              ],
+              [
+                116.284674,
+                33.75009
+              ],
+              [
+                116.30814,
+                33.757581
+              ],
+              [
+                116.316822,
+                33.771313
+              ],
+              [
+                116.328712,
+                33.76637
+              ],
+              [
+                116.330663,
+                33.77386
+              ],
+              [
+                116.348718,
+                33.778753
+              ],
+              [
+                116.361049,
+                33.776307
+              ],
+              [
+                116.372499,
+                33.780251
+              ],
+              [
+                116.393701,
+                33.783097
+              ],
+              [
+                116.408234,
+                33.80551
+              ],
+              [
+                116.42176,
+                33.796076
+              ],
+              [
+                116.432581,
+                33.795328
+              ],
+              [
+                116.436984,
+                33.803065
+              ],
+              [
+                116.43365,
+                33.812099
+              ],
+              [
+                116.437362,
+                33.846529
+              ],
+              [
+                116.453027,
+                33.846928
+              ],
+              [
+                116.460199,
+                33.859948
+              ],
+              [
+                116.473977,
+                33.861294
+              ],
+              [
+                116.484861,
+                33.869774
+              ],
+              [
+                116.50191,
+                33.864686
+              ],
+              [
+                116.505307,
+                33.872317
+              ],
+              [
+                116.521224,
+                33.87107
+              ],
+              [
+                116.525187,
+                33.880496
+              ],
+              [
+                116.536889,
+                33.882291
+              ],
+              [
+                116.53928,
+                33.874212
+              ],
+              [
+                116.546641,
+                33.882541
+              ],
+              [
+                116.558405,
+                33.881493
+              ],
+              [
+                116.555071,
+                33.888275
+              ],
+              [
+                116.558342,
+                33.901688
+              ],
+              [
+                116.567024,
+                33.908219
+              ],
+              [
+                116.58162,
+                33.908318
+              ],
+              [
+                116.597096,
+                33.904131
+              ],
+              [
+                116.611818,
+                33.894658
+              ],
+              [
+                116.627294,
+                33.888624
+              ],
+              [
+                116.642708,
+                33.892464
+              ],
+              [
+                116.638492,
+                33.917192
+              ],
+              [
+                116.64579,
+                33.929902
+              ],
+              [
+                116.640002,
+                33.948889
+              ],
+              [
+                116.65032,
+                33.959103
+              ],
+              [
+                116.648055,
+                33.973351
+              ],
+              [
+                116.633522,
+                33.977087
+              ],
+              [
+                116.629936,
+                33.98406
+              ],
+              [
+                116.607225,
+                33.999898
+              ],
+              [
+                116.607414,
+                34.007119
+              ],
+              [
+                116.600431,
+                34.011749
+              ],
+              [
+                116.604079,
+                34.023201
+              ],
+              [
+                116.596593,
+                34.038583
+              ],
+              [
+                116.587408,
+                34.04575
+              ],
+              [
+                116.57061,
+                34.070981
+              ],
+              [
+                116.566898,
+                34.083768
+              ],
+              [
+                116.557965,
+                34.097796
+              ],
+              [
+                116.539657,
+                34.103466
+              ],
+              [
+                116.541482,
+                34.109932
+              ],
+              [
+                116.528018,
+                34.122862
+              ],
+              [
+                116.534624,
+                34.126591
+              ],
+              [
+                116.536008,
+                34.151002
+              ],
+              [
+                116.545886,
+                34.161043
+              ],
+              [
+                116.565514,
+                34.169542
+              ],
+              [
+                116.5596,
+                34.186488
+              ],
+              [
+                116.546263,
+                34.194686
+              ],
+              [
+                116.542677,
+                34.218879
+              ],
+              [
+                116.547144,
+                34.228167
+              ],
+              [
+                116.543621,
+                34.239539
+              ],
+              [
+                116.553938,
+                34.241923
+              ],
+              [
+                116.567653,
+                34.251258
+              ],
+              [
+                116.582312,
+                34.266499
+              ],
+              [
+                116.582438,
+                34.275236
+              ],
+              [
+                116.566458,
+                34.284369
+              ],
+              [
+                116.51185,
+                34.296478
+              ],
+              [
+                116.490145,
+                34.29092
+              ],
+              [
+                116.466302,
+                34.271166
+              ],
+              [
+                116.456865,
+                34.26913
+              ],
+              [
+                116.448623,
+                34.280348
+              ],
+              [
+                116.452775,
+                34.286552
+              ],
+              [
+                116.445792,
+                34.288141
+              ],
+              [
+                116.430693,
+                34.278065
+              ],
+              [
+                116.43321,
+                34.270123
+              ],
+              [
+                116.416223,
+                34.268237
+              ],
+              [
+                116.406094,
+                34.276527
+              ],
+              [
+                116.393952,
+                34.276129
+              ],
+              [
+                116.37596,
+                34.271315
+              ],
+              [
+                116.372248,
+                34.266102
+              ],
+              [
+                116.363251,
+                34.276229
+              ],
+              [
+                116.37338,
+                34.293947
+              ],
+              [
+                116.365013,
+                34.312406
+              ],
+              [
+                116.357652,
+                34.319798
+              ],
+              [
+                116.329656,
+                34.32972
+              ],
+              [
+                116.301597,
+                34.34212
+              ],
+              [
+                116.288826,
+                34.358932
+              ],
+              [
+                116.276747,
+                34.360419
+              ],
+              [
+                116.270833,
+                34.370733
+              ],
+              [
+                116.255608,
+                34.376484
+              ],
+              [
+                116.23988,
+                34.37455
+              ],
+              [
+                116.213583,
+                34.382235
+              ],
+              [
+                116.209934,
+                34.390216
+              ],
+              [
+                116.217043,
+                34.395569
+              ],
+              [
+                116.215911,
+                34.40335
+              ],
+              [
+                116.205278,
+                34.41569
+              ],
+              [
+                116.179233,
+                34.430505
+              ],
+              [
+                116.174955,
+                34.444674
+              ],
+              [
+                116.162058,
+                34.459385
+              ],
+              [
+                116.178855,
+                34.483551
+              ],
+              [
+                116.178604,
+                34.496028
+              ],
+              [
+                116.189487,
+                34.497067
+              ],
+              [
+                116.203957,
+                34.508651
+              ],
+              [
+                116.203831,
+                34.518748
+              ],
+              [
+                116.190997,
+                34.535673
+              ],
+              [
+                116.196345,
+                34.555661
+              ],
+              [
+                116.197037,
+                34.575942
+              ],
+              [
+                116.190117,
+                34.570501
+              ],
+              [
+                116.156647,
+                34.553732
+              ],
+              [
+                116.146896,
+                34.553188
+              ],
+              [
+                116.134565,
+                34.559718
+              ],
+              [
+                116.124814,
+                34.572331
+              ],
+              [
+                116.117893,
+                34.58974
+              ],
+              [
+                116.101284,
+                34.60581
+              ],
+              [
+                116.082662,
+                34.608331
+              ],
+              [
+                116.055107,
+                34.595426
+              ],
+              [
+                116.037554,
+                34.593053
+              ],
+              [
+                116.023902,
+                34.601953
+              ],
+              [
+                116.010187,
+                34.615845
+              ],
+              [
+                116.001568,
+                34.619009
+              ],
+              [
+                115.991377,
+                34.615351
+              ],
+              [
+                115.984771,
+                34.607243
+              ],
+              [
+                115.984016,
+                34.589295
+              ],
+              [
+                115.969987,
+                34.582619
+              ],
+              [
+                115.946206,
+                34.581629
+              ],
+              [
+                115.858317,
+                34.569957
+              ],
+              [
+                115.849698,
+                34.565604
+              ],
+              [
+                115.838122,
+                34.567781
+              ],
+              [
+                115.838814,
+                34.560559
+              ],
+              [
+                115.827427,
+                34.558283
+              ],
+              [
+                115.795971,
+                34.578464
+              ],
+              [
+                115.762061,
+                34.587712
+              ],
+              [
+                115.724503,
+                34.589196
+              ],
+              [
+                115.71148,
+                34.59869
+              ],
+              [
+                115.699086,
+                34.598838
+              ],
+              [
+                115.697325,
+                34.569017
+              ],
+              [
+                115.684428,
+                34.555612
+              ],
+              [
+                115.669455,
+                34.556948
+              ],
+              [
+                115.643598,
+                34.567731
+              ],
+              [
+                115.639508,
+                34.57154
+              ],
+              [
+                115.621893,
+                34.574755
+              ],
+              [
+                115.61038,
+                34.572084
+              ],
+              [
+                115.585215,
+                34.570996
+              ],
+              [
+                115.561183,
+                34.572232
+              ],
+              [
+                115.554765,
+                34.569067
+              ],
+              [
+                115.535137,
+                34.573321
+              ],
+              [
+                115.515634,
+                34.582619
+              ],
+              [
+                115.491602,
+                34.606996
+              ],
+              [
+                115.479019,
+                34.62588
+              ],
+              [
+                115.461404,
+                34.637248
+              ],
+              [
+                115.458132,
+                34.656175
+              ],
+              [
+                115.444732,
+                34.674504
+              ],
+              [
+                115.44706,
+                34.698608
+              ],
+              [
+                115.444921,
+                34.710311
+              ],
+              [
+                115.433848,
+                34.725074
+              ],
+              [
+                115.437308,
+                34.734306
+              ],
+              [
+                115.449324,
+                34.744277
+              ],
+              [
+                115.436553,
+                34.776797
+              ],
+              [
+                115.436113,
+                34.785037
+              ],
+              [
+                115.426802,
+                34.805409
+              ],
+              [
+                115.413842,
+                34.807826
+              ],
+              [
+                115.41617,
+                34.8133
+              ],
+              [
+                115.408557,
+                34.825924
+              ],
+              [
+                115.394025,
+                34.831792
+              ],
+              [
+                115.37924,
+                34.828784
+              ],
+              [
+                115.356969,
+                34.837314
+              ],
+              [
+                115.346022,
+                34.846188
+              ],
+              [
+                115.329602,
+                34.851463
+              ],
+              [
+                115.317146,
+                34.859201
+              ],
+              [
+                115.302361,
+                34.858807
+              ],
+              [
+                115.28959,
+                34.85161
+              ],
+              [
+                115.267445,
+                34.853533
+              ],
+              [
+                115.256058,
+                34.845301
+              ],
+              [
+                115.267256,
+                34.831249
+              ],
+              [
+                115.256561,
+                34.81187
+              ],
+              [
+                115.242658,
+                34.813497
+              ],
+              [
+                115.253919,
+                34.805014
+              ],
+              [
+                115.24832,
+                34.798109
+              ],
+              [
+                115.202897,
+                34.805656
+              ],
+              [
+                115.198367,
+                34.795297
+              ],
+              [
+                115.17899,
+                34.800279
+              ],
+              [
+                115.17553,
+                34.790463
+              ],
+              [
+                115.163891,
+                34.783063
+              ],
+              [
+                115.154455,
+                34.78178
+              ],
+              [
+                115.140048,
+                34.793324
+              ],
+              [
+                115.119601,
+                34.788638
+              ],
+              [
+                115.104125,
+                34.772357
+              ],
+              [
+                115.038885,
+                34.773985
+              ],
+              [
+                115.030329,
+                34.772455
+              ],
+              [
+                115.001012,
+                34.760662
+              ],
+              [
+                114.988366,
+                34.76456
+              ],
+              [
+                114.980502,
+                34.760909
+              ],
+              [
+                114.966913,
+                34.761106
+              ],
+              [
+                114.936841,
+                34.747041
+              ],
+              [
+                114.922874,
+                34.748423
+              ],
+              [
+                114.894375,
+                34.762833
+              ],
+              [
+                114.877578,
+                34.775219
+              ],
+              [
+                114.867386,
+                34.775515
+              ],
+              [
+                114.86682,
+                34.769199
+              ],
+              [
+                114.835615,
+                34.767472
+              ],
+              [
+                114.829009,
+                34.764314
+              ],
+              [
+                114.82838,
+                34.755332
+              ],
+              [
+                114.835678,
+                34.746893
+              ],
+              [
+                114.859333,
+                34.740328
+              ],
+              [
+                114.858767,
+                34.734256
+              ],
+              [
+                114.840648,
+                34.715101
+              ],
+              [
+                114.855558,
+                34.710904
+              ],
+              [
+                114.858012,
+                34.692286
+              ],
+              [
+                114.8677,
+                34.688038
+              ],
+              [
+                114.891418,
+                34.698213
+              ],
+              [
+                114.90765,
+                34.697916
+              ],
+              [
+                114.931682,
+                34.686804
+              ],
+              [
+                114.936652,
+                34.681914
+              ],
+              [
+                114.935771,
+                34.672182
+              ],
+              [
+                114.926649,
+                34.668625
+              ],
+              [
+                114.905825,
+                34.666896
+              ],
+              [
+                114.896451,
+                34.661363
+              ],
+              [
+                114.893494,
+                34.652469
+              ],
+              [
+                114.901673,
+                34.645303
+              ],
+              [
+                114.898339,
+                34.631762
+              ],
+              [
+                114.90117,
+                34.613769
+              ],
+              [
+                114.897018,
+                34.602596
+              ],
+              [
+                114.904882,
+                34.586179
+              ],
+              [
+                114.907398,
+                34.573865
+              ],
+              [
+                114.906517,
+                34.547647
+              ],
+              [
+                114.91501,
+                34.548686
+              ],
+              [
+                114.917841,
+                34.541957
+              ],
+              [
+                114.91111,
+                34.534782
+              ],
+              [
+                114.920673,
+                34.531417
+              ],
+              [
+                114.913752,
+                34.518154
+              ],
+              [
+                114.917653,
+                34.511571
+              ],
+              [
+                114.9096,
+                34.495137
+              ],
+              [
+                114.922371,
+                34.498206
+              ],
+              [
+                114.918596,
+                34.484938
+              ],
+              [
+                114.912305,
+                34.483601
+              ],
+              [
+                114.904001,
+                34.467606
+              ],
+              [
+                114.896451,
+                34.46102
+              ],
+              [
+                114.886322,
+                34.461317
+              ],
+              [
+                114.880786,
+                34.450519
+              ],
+              [
+                114.872356,
+                34.454085
+              ],
+              [
+                114.865624,
+                34.462902
+              ],
+              [
+                114.858893,
+                34.451906
+              ],
+              [
+                114.856502,
+                34.436599
+              ],
+              [
+                114.864806,
+                34.433726
+              ],
+              [
+                114.852413,
+                34.42887
+              ],
+              [
+                114.854615,
+                34.410933
+              ],
+              [
+                114.848575,
+                34.409942
+              ],
+              [
+                114.851658,
+                34.399534
+              ],
+              [
+                114.874432,
+                34.396411
+              ],
+              [
+                114.875061,
+                34.390612
+              ],
+              [
+                114.888461,
+                34.383771
+              ],
+              [
+                114.879025,
+                34.370683
+              ],
+              [
+                114.861724,
+                34.367014
+              ],
+              [
+                114.855558,
+                34.33473
+              ],
+              [
+                114.862353,
+                34.329174
+              ],
+              [
+                114.870783,
+                34.305608
+              ],
+              [
+                114.882674,
+                34.301192
+              ],
+              [
+                114.901988,
+                34.284567
+              ],
+              [
+                114.912179,
+                34.281837
+              ],
+              [
+                114.933695,
+                34.282135
+              ],
+              [
+                114.940804,
+                34.274243
+              ],
+              [
+                114.962258,
+                34.261883
+              ],
+              [
+                114.98088,
+                34.262975
+              ],
+              [
+                114.986605,
+                34.253393
+              ],
+              [
+                114.998558,
+                34.250116
+              ],
+              [
+                115.012965,
+                34.253393
+              ],
+              [
+                115.041087,
+                34.246342
+              ],
+              [
+                115.052474,
+                34.224641
+              ],
+              [
+                115.082609,
+                34.222555
+              ],
+              [
+                115.093556,
+                34.219277
+              ],
+              [
+                115.107207,
+                34.208845
+              ],
+              [
+                115.12627,
+                34.209441
+              ],
+              [
+                115.11872,
+                34.189966
+              ],
+              [
+                115.133127,
+                34.170835
+              ],
+              [
+                115.133442,
+                34.154234
+              ],
+              [
+                115.127906,
+                34.146777
+              ],
+              [
+                115.12671,
+                34.133652
+              ],
+              [
+                115.119538,
+                34.120475
+              ],
+              [
+                115.126144,
+                34.105207
+              ],
+              [
+                115.118217,
+                34.098642
+              ],
+              [
+                115.120608,
+                34.078196
+              ],
+              [
+                115.116707,
+                34.066353
+              ],
+              [
+                115.128661,
+                34.064164
+              ],
+              [
+                115.140048,
+                34.055854
+              ],
+              [
+                115.13967,
+                34.050628
+              ],
+              [
+                115.121363,
+                34.02569
+              ],
+              [
+                115.107962,
+                34.022703
+              ],
+              [
+                115.083364,
+                34.024893
+              ],
+              [
+                115.074241,
+                34.022802
+              ],
+              [
+                115.074871,
+                34.014438
+              ],
+              [
+                115.083238,
+                34.003185
+              ],
+              [
+                115.070089,
+                33.990635
+              ],
+              [
+                115.062351,
+                33.979329
+              ],
+              [
+                115.065748,
+                33.97355
+              ],
+              [
+                115.05801,
+                33.95721
+              ],
+              [
+                115.049957,
+                33.950035
+              ],
+              [
+                115.050398,
+                33.941962
+              ],
+              [
+                115.070026,
+                33.935583
+              ],
+              [
+                115.085251,
+                33.93354
+              ],
+              [
+                115.107207,
+                33.936331
+              ],
+              [
+                115.106453,
+                33.94844
+              ],
+              [
+                115.115009,
+                33.961096
+              ],
+              [
+                115.124257,
+                33.963089
+              ],
+              [
+                115.142375,
+                33.958306
+              ],
+              [
+                115.148541,
+                33.950184
+              ],
+              [
+                115.176474,
+                33.950732
+              ],
+              [
+                115.189497,
+                33.958106
+              ],
+              [
+                115.204722,
+                33.974447
+              ],
+              [
+                115.195473,
+                33.987398
+              ],
+              [
+                115.203778,
+                33.988942
+              ],
+              [
+                115.23039,
+                33.974148
+              ],
+              [
+                115.240959,
+                33.975144
+              ],
+              [
+                115.252283,
+                33.982467
+              ],
+              [
+                115.254548,
+                33.995117
+              ],
+              [
+                115.252975,
+                34.008861
+              ],
+              [
+                115.258449,
+                34.015334
+              ],
+              [
+                115.288395,
+                34.019516
+              ],
+              [
+                115.295441,
+                34.018172
+              ],
+              [
+                115.28959,
+                34.003981
+              ],
+              [
+                115.292484,
+                33.996163
+              ],
+              [
+                115.312742,
+                33.995715
+              ],
+              [
+                115.32092,
+                34.004828
+              ],
+              [
+                115.33539,
+                34.006969
+              ],
+              [
+                115.349042,
+                34.018222
+              ],
+              [
+                115.361813,
+                34.01628
+              ],
+              [
+                115.375403,
+                34.00677
+              ],
+              [
+                115.402581,
+                33.993374
+              ],
+              [
+                115.439573,
+                33.986053
+              ],
+              [
+                115.458824,
+                33.987099
+              ],
+              [
+                115.462599,
+                34.006023
+              ],
+              [
+                115.489274,
+                34.017575
+              ],
+              [
+                115.502989,
+                34.015434
+              ],
+              [
+                115.513369,
+                34.019367
+              ],
+              [
+                115.53023,
+                34.018819
+              ],
+              [
+                115.53564,
+                34.021757
+              ],
+              [
+                115.547782,
+                34.037737
+              ],
+              [
+                115.549921,
+                34.047542
+              ],
+              [
+                115.547593,
+                34.074414
+              ],
+              [
+                115.543693,
+                34.084564
+              ],
+              [
+                115.573702,
+                34.086404
+              ],
+              [
+                115.619754,
+                34.083171
+              ],
+              [
+                115.627555,
+                34.087499
+              ],
+              [
+                115.641962,
+                34.084166
+              ],
+              [
+                115.653601,
+                34.060084
+              ]
+            ]
+          ]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "adcode": 411500,
+        "name": "淇¢槼甯�",
+        "center": [
+          114.075031,
+          32.123274
+        ],
+        "centroid": [
+          114.889128,
+          32.080437
+        ],
+        "childrenNum": 10,
+        "level": "city",
+        "parent": {
+          "adcode": 410000
+        },
+        "subFeatureIndex": 14,
+        "acroutes": [
+          100000,
+          410000
+        ]
+      },
+      "geometry": {
+        "type": "MultiPolygon",
+        "coordinates": [
+          [
+            [
+              [
+                113.749057,
+                32.272684
+              ],
+              [
+                113.749812,
+                32.260291
+              ],
+              [
+                113.739369,
+                32.257598
+              ],
+              [
+                113.740438,
+                32.242815
+              ],
+              [
+                113.748365,
+                32.234788
+              ],
+              [
+                113.752643,
+                32.216189
+              ],
+              [
+                113.764659,
+                32.204195
+              ],
+              [
+                113.777934,
+                32.207956
+              ],
+              [
+                113.783344,
+                32.189657
+              ],
+              [
+                113.763716,
+                32.161694
+              ],
+              [
+                113.766169,
+                32.13835
+              ],
+              [
+                113.750315,
+                32.116324
+              ],
+              [
+                113.739872,
+                32.113067
+              ],
+              [
+                113.736978,
+                32.121564
+              ],
+              [
+                113.722445,
+                32.12426
+              ],
+              [
+                113.728359,
+                32.09938
+              ],
+              [
+                113.728485,
+                32.083197
+              ],
+              [
+                113.744905,
+                32.076784
+              ],
+              [
+                113.747421,
+                32.06976
+              ],
+              [
+                113.763779,
+                32.054743
+              ],
+              [
+                113.781331,
+                32.048786
+              ],
+              [
+                113.791271,
+                32.036006
+              ],
+              [
+                113.779255,
+                32.018895
+              ],
+              [
+                113.769881,
+                32.01701
+              ],
+              [
+                113.758934,
+                32.000915
+              ],
+              [
+                113.759438,
+                31.986447
+              ],
+              [
+                113.768623,
+                31.979466
+              ],
+              [
+                113.776109,
+                31.980434
+              ],
+              [
+                113.788189,
+                31.974014
+              ],
+              [
+                113.798506,
+                31.974116
+              ],
+              [
+                113.816247,
+                31.96688
+              ],
+              [
+                113.807314,
+                31.94889
+              ],
+              [
+                113.805112,
+                31.931508
+              ],
+              [
+                113.81631,
+                31.923249
+              ],
+              [
+                113.832479,
+                31.91866
+              ],
+              [
+                113.835876,
+                31.910961
+              ],
+              [
+                113.83531,
+                31.892858
+              ],
+              [
+                113.831221,
+                31.878985
+              ],
+              [
+                113.838204,
+                31.868681
+              ],
+              [
+                113.838644,
+                31.854702
+              ],
+              [
+                113.858902,
+                31.841078
+              ],
+              [
+                113.867206,
+                31.845058
+              ],
+              [
+                113.872931,
+                31.84067
+              ],
+              [
+                113.896398,
+                31.849344
+              ],
+              [
+                113.906589,
+                31.868528
+              ],
+              [
+                113.914957,
+                31.876995
+              ],
+              [
+                113.93144,
+                31.880974
+              ],
+              [
+                113.933516,
+                31.869395
+              ],
+              [
+                113.954906,
+                31.856334
+              ],
+              [
+                113.956416,
+                31.840262
+              ],
+              [
+                113.946979,
+                31.826483
+              ],
+              [
+                113.953019,
+                31.813518
+              ],
+              [
+                113.952578,
+                31.793864
+              ],
+              [
+                113.96535,
+                31.785644
+              ],
+              [
+                113.972333,
+                31.771653
+              ],
+              [
+                113.972459,
+                31.763124
+              ],
+              [
+                113.978939,
+                31.753778
+              ],
+              [
+                113.988753,
+                31.750202
+              ],
+              [
+                114.015805,
+                31.770274
+              ],
+              [
+                114.038328,
+                31.768844
+              ],
+              [
+                114.048079,
+                31.773389
+              ],
+              [
+                114.059089,
+                31.772266
+              ],
+              [
+                114.063744,
+                31.781917
+              ],
+              [
+                114.0723,
+                31.784878
+              ],
+              [
+                114.086644,
+                31.782223
+              ],
+              [
+                114.089853,
+                31.794834
+              ],
+              [
+                114.099164,
+                31.803411
+              ],
+              [
+                114.119233,
+                31.805759
+              ],
+              [
+                114.127915,
+                31.82633
+              ],
+              [
+                114.12716,
+                31.835363
+              ],
+              [
+                114.13408,
+                31.842813
+              ],
+              [
+                114.15006,
+                31.839241
+              ],
+              [
+                114.162768,
+                31.841078
+              ],
+              [
+                114.166983,
+                31.851028
+              ],
+              [
+                114.180258,
+                31.854039
+              ],
+              [
+                114.194979,
+                31.850161
+              ],
+              [
+                114.208883,
+                31.842762
+              ],
+              [
+                114.221277,
+                31.832403
+              ],
+              [
+                114.236439,
+                31.841895
+              ],
+              [
+                114.235432,
+                31.833372
+              ],
+              [
+                114.248518,
+                31.810507
+              ],
+              [
+                114.262044,
+                31.796315
+              ],
+              [
+                114.264372,
+                31.788503
+              ],
+              [
+                114.287523,
+                31.762052
+              ],
+              [
+                114.292808,
+                31.752296
+              ],
+              [
+                114.313946,
+                31.75199
+              ],
+              [
+                114.321496,
+                31.755106
+              ],
+              [
+                114.350373,
+                31.755412
+              ],
+              [
+                114.373839,
+                31.744277
+              ],
+              [
+                114.390007,
+                31.741007
+              ],
+              [
+                114.399822,
+                31.746933
+              ],
+              [
+                114.416305,
+                31.74208
+              ],
+              [
+                114.419136,
+                31.73314
+              ],
+              [
+                114.4309,
+                31.734928
+              ],
+              [
+                114.446566,
+                31.728031
+              ],
+              [
+                114.450844,
+                31.737636
+              ],
+              [
+                114.46135,
+                31.733242
+              ],
+              [
+                114.471982,
+                31.740956
+              ],
+              [
+                114.488843,
+                31.735694
+              ],
+              [
+                114.50866,
+                31.740701
+              ],
+              [
+                114.504319,
+                31.756433
+              ],
+              [
+                114.509667,
+                31.766852
+              ],
+              [
+                114.521305,
+                31.766903
+              ],
+              [
+                114.530679,
+                31.742897
+              ],
+              [
+                114.545275,
+                31.746167
+              ],
+              [
+                114.550308,
+                31.753165
+              ],
+              [
+                114.54949,
+                31.765422
+              ],
+              [
+                114.554963,
+                31.768538
+              ],
+              [
+                114.572768,
+                31.762562
+              ],
+              [
+                114.582519,
+                31.764758
+              ],
+              [
+                114.587615,
+                31.754033
+              ],
+              [
+                114.581575,
+                31.74254
+              ],
+              [
+                114.584092,
+                31.731863
+              ],
+              [
+                114.579751,
+                31.724659
+              ],
+              [
+                114.579122,
+                31.708154
+              ],
+              [
+                114.59139,
+                31.700335
+              ],
+              [
+                114.586168,
+                31.692567
+              ],
+              [
+                114.574215,
+                31.689142
+              ],
+              [
+                114.570817,
+                31.660106
+              ],
+              [
+                114.559179,
+                31.656067
+              ],
+              [
+                114.549679,
+                31.642465
+              ],
+              [
+                114.55295,
+                31.635203
+              ],
+              [
+                114.548295,
+                31.625127
+              ],
+              [
+                114.548924,
+                31.609782
+              ],
+              [
+                114.561066,
+                31.560966
+              ],
+              [
+                114.572453,
+                31.554056
+              ],
+              [
+                114.57497,
+                31.559533
+              ],
+              [
+                114.587363,
+                31.560607
+              ],
+              [
+                114.595605,
+                31.576319
+              ],
+              [
+                114.612025,
+                31.578469
+              ],
+              [
+                114.616743,
+                31.585326
+              ],
+              [
+                114.641719,
+                31.582153
+              ],
+              [
+                114.644425,
+                31.574682
+              ],
+              [
+                114.653044,
+                31.572686
+              ],
+              [
+                114.656944,
+                31.562859
+              ],
+              [
+                114.670093,
+                31.547043
+              ],
+              [
+                114.678523,
+                31.544023
+              ],
+              [
+                114.69985,
+                31.546121
+              ],
+              [
+                114.696579,
+                31.525847
+              ],
+              [
+                114.717214,
+                31.527947
+              ],
+              [
+                114.723317,
+                31.520625
+              ],
+              [
+                114.739485,
+                31.527179
+              ],
+              [
+                114.747223,
+                31.524004
+              ],
+              [
+                114.757038,
+                31.52723
+              ],
+              [
+                114.771004,
+                31.520522
+              ],
+              [
+                114.778868,
+                31.520727
+              ],
+              [
+                114.774024,
+                31.512431
+              ],
+              [
+                114.774653,
+                31.500909
+              ],
+              [
+                114.783083,
+                31.494814
+              ],
+              [
+                114.78302,
+                31.48462
+              ],
+              [
+                114.789438,
+                31.480522
+              ],
+              [
+                114.81303,
+                31.478832
+              ],
+              [
+                114.824165,
+                31.469969
+              ],
+              [
+                114.829827,
+                31.458902
+              ],
+              [
+                114.841529,
+                31.461976
+              ],
+              [
+                114.850651,
+                31.476168
+              ],
+              [
+                114.875313,
+                31.478268
+              ],
+              [
+                114.87676,
+                31.470584
+              ],
+              [
+                114.8867,
+                31.469457
+              ],
+              [
+                114.896388,
+                31.474375
+              ],
+              [
+                114.925265,
+                31.480471
+              ],
+              [
+                114.936464,
+                31.469764
+              ],
+              [
+                114.939924,
+                31.477141
+              ],
+              [
+                114.964019,
+                31.495377
+              ],
+              [
+                114.976098,
+                31.495889
+              ],
+              [
+                114.985346,
+                31.477705
+              ],
+              [
+                114.998306,
+                31.471608
+              ],
+              [
+                115.002018,
+                31.485286
+              ],
+              [
+                115.010826,
+                31.488206
+              ],
+              [
+                115.001704,
+                31.499987
+              ],
+              [
+                115.010008,
+                31.504903
+              ],
+              [
+                115.023094,
+                31.527588
+              ],
+              [
+                115.030329,
+                31.527691
+              ],
+              [
+                115.038444,
+                31.51704
+              ],
+              [
+                115.048951,
+                31.517552
+              ],
+              [
+                115.066314,
+                31.510537
+              ],
+              [
+                115.096198,
+                31.508437
+              ],
+              [
+                115.092801,
+                31.519088
+              ],
+              [
+                115.102112,
+                31.520573
+              ],
+              [
+                115.113373,
+                31.528971
+              ],
+              [
+                115.105949,
+                31.540029
+              ],
+              [
+                115.110479,
+                31.55078
+              ],
+              [
+                115.103055,
+                31.555745
+              ],
+              [
+                115.106767,
+                31.567466
+              ],
+              [
+                115.127276,
+                31.579083
+              ],
+              [
+                115.125389,
+                31.599089
+              ],
+              [
+                115.134826,
+                31.602415
+              ],
+              [
+                115.164395,
+                31.604564
+              ],
+              [
+                115.176851,
+                31.598834
+              ],
+              [
+                115.180374,
+                31.577752
+              ],
+              [
+                115.192831,
+                31.569564
+              ],
+              [
+                115.192957,
+                31.564037
+              ],
+              [
+                115.207238,
+                31.564241
+              ],
+              [
+                115.212586,
+                31.55554
+              ],
+              [
+                115.235611,
+                31.556206
+              ],
+              [
+                115.230578,
+                31.538238
+              ],
+              [
+                115.218248,
+                31.515299
+              ],
+              [
+                115.219506,
+                31.506901
+              ],
+              [
+                115.212334,
+                31.490101
+              ],
+              [
+                115.216926,
+                31.481598
+              ],
+              [
+                115.217052,
+                31.462898
+              ],
+              [
+                115.210509,
+                31.445476
+              ],
+              [
+                115.220512,
+                31.426718
+              ],
+              [
+                115.232969,
+                31.427077
+              ],
+              [
+                115.252598,
+                31.421695
+              ],
+              [
+                115.260273,
+                31.41216
+              ],
+              [
+                115.250459,
+                31.391755
+              ],
+              [
+                115.260399,
+                31.387396
+              ],
+              [
+                115.281349,
+                31.399856
+              ],
+              [
+                115.294057,
+                31.395036
+              ],
+              [
+                115.301103,
+                31.384063
+              ],
+              [
+                115.31356,
+                31.383448
+              ],
+              [
+                115.327212,
+                31.391139
+              ],
+              [
+                115.335957,
+                31.403394
+              ],
+              [
+                115.355271,
+                31.399958
+              ],
+              [
+                115.373641,
+                31.405752
+              ],
+              [
+                115.383392,
+                31.418671
+              ],
+              [
+                115.385657,
+                31.443324
+              ],
+              [
+                115.389809,
+                31.450293
+              ],
+              [
+                115.377667,
+                31.470532
+              ],
+              [
+                115.371565,
+                31.495838
+              ],
+              [
+                115.377164,
+                31.502957
+              ],
+              [
+                115.389621,
+                31.507566
+              ],
+              [
+                115.398366,
+                31.516067
+              ],
+              [
+                115.415918,
+                31.52595
+              ],
+              [
+                115.428563,
+                31.547196
+              ],
+              [
+                115.431583,
+                31.559021
+              ],
+              [
+                115.428249,
+                31.563371
+              ],
+              [
+                115.438881,
+                31.579953
+              ],
+              [
+                115.440013,
+                31.588703
+              ],
+              [
+                115.47537,
+                31.606712
+              ],
+              [
+                115.486569,
+                31.610089
+              ],
+              [
+                115.490658,
+                31.623593
+              ],
+              [
+                115.477132,
+                31.645431
+              ],
+              [
+                115.484241,
+                31.649061
+              ],
+              [
+                115.486128,
+                31.66118
+              ],
+              [
+                115.495376,
+                31.672938
+              ],
+              [
+                115.515068,
+                31.682855
+              ],
+              [
+                115.531865,
+                31.698547
+              ],
+              [
+                115.553507,
+                31.695276
+              ],
+              [
+                115.564894,
+                31.709023
+              ],
+              [
+                115.582636,
+                31.713929
+              ],
+              [
+                115.586977,
+                31.721696
+              ],
+              [
+                115.601446,
+                31.731659
+              ],
+              [
+                115.619125,
+                31.738351
+              ],
+              [
+                115.637243,
+                31.755616
+              ],
+              [
+                115.65964,
+                31.760213
+              ],
+              [
+                115.676564,
+                31.778393
+              ],
+              [
+                115.689775,
+                31.776555
+              ],
+              [
+                115.697136,
+                31.76864
+              ],
+              [
+                115.710851,
+                31.770887
+              ],
+              [
+                115.719407,
+                31.76578
+              ],
+              [
+                115.736456,
+                31.763277
+              ],
+              [
+                115.734254,
+                31.776044
+              ],
+              [
+                115.741992,
+                31.782121
+              ],
+              [
+                115.762691,
+                31.782325
+              ],
+              [
+                115.767912,
+                31.78784
+              ],
+              [
+                115.787226,
+                31.780436
+              ],
+              [
+                115.793769,
+                31.773593
+              ],
+              [
+                115.808428,
+                31.772572
+              ],
+              [
+                115.815348,
+                31.762358
+              ],
+              [
+                115.831013,
+                31.777576
+              ],
+              [
+                115.837493,
+                31.773593
+              ],
+              [
+                115.850264,
+                31.786767
+              ],
+              [
+                115.858317,
+                31.773695
+              ],
+              [
+                115.885244,
+                31.776096
+              ],
+              [
+                115.900783,
+                31.792026
+              ],
+              [
+                115.91022,
+                31.792333
+              ],
+              [
+                115.915001,
+                31.811885
+              ],
+              [
+                115.913114,
+                31.820103
+              ],
+              [
+                115.904054,
+                31.829392
+              ],
+              [
+                115.892982,
+                31.83327
+              ],
+              [
+                115.895687,
+                31.867507
+              ],
+              [
+                115.898329,
+                31.88026
+              ],
+              [
+                115.910597,
+                31.894949
+              ],
+              [
+                115.92016,
+                31.920445
+              ],
+              [
+                115.916134,
+                31.935994
+              ],
+              [
+                115.909025,
+                31.943232
+              ],
+              [
+                115.911352,
+                31.958013
+              ],
+              [
+                115.92318,
+                31.985479
+              ],
+              [
+                115.924564,
+                31.995617
+              ],
+              [
+                115.931107,
+                31.994496
+              ],
+              [
+                115.927835,
+                32.02358
+              ],
+              [
+                115.919531,
+                32.027858
+              ],
+              [
+                115.927709,
+                32.036311
+              ],
+              [
+                115.922236,
+                32.049652
+              ],
+              [
+                115.925382,
+                32.057543
+              ],
+              [
+                115.9396,
+                32.065841
+              ],
+              [
+                115.942557,
+                32.07765
+              ],
+              [
+                115.932491,
+                32.084266
+              ],
+              [
+                115.926577,
+                32.105283
+              ],
+              [
+                115.93916,
+                32.138961
+              ],
+              [
+                115.937901,
+                32.151777
+              ],
+              [
+                115.94155,
+                32.166423
+              ],
+              [
+                115.933686,
+                32.180456
+              ],
+              [
+                115.923369,
+                32.191691
+              ],
+              [
+                115.922865,
+                32.203636
+              ],
+              [
+                115.912736,
+                32.227623
+              ],
+              [
+                115.914687,
+                32.254855
+              ],
+              [
+                115.921481,
+                32.268519
+              ],
+              [
+                115.911038,
+                32.284161
+              ],
+              [
+                115.90827,
+                32.299243
+              ],
+              [
+                115.90028,
+                32.301426
+              ],
+              [
+                115.906948,
+                32.31158
+              ],
+              [
+                115.904558,
+                32.34102
+              ],
+              [
+                115.89921,
+                32.344978
+              ],
+              [
+                115.897889,
+                32.373596
+              ],
+              [
+                115.899084,
+                32.390792
+              ],
+              [
+                115.88927,
+                32.413462
+              ],
+              [
+                115.889396,
+                32.424263
+              ],
+              [
+                115.87933,
+                32.432324
+              ],
+              [
+                115.883356,
+                32.438814
+              ],
+              [
+                115.882727,
+                32.456099
+              ],
+              [
+                115.864231,
+                32.458937
+              ],
+              [
+                115.873479,
+                32.470594
+              ],
+              [
+                115.88128,
+                32.472469
+              ],
+              [
+                115.883545,
+                32.489241
+              ],
+              [
+                115.874486,
+                32.497804
+              ],
+              [
+                115.873165,
+                32.504694
+              ],
+              [
+                115.853033,
+                32.50444
+              ],
+              [
+                115.845735,
+                32.501806
+              ],
+              [
+                115.84737,
+                32.509557
+              ],
+              [
+                115.856996,
+                32.517965
+              ],
+              [
+                115.873039,
+                32.525816
+              ],
+              [
+                115.87587,
+                32.542477
+              ],
+              [
+                115.899399,
+                32.556198
+              ],
+              [
+                115.91022,
+                32.566982
+              ],
+              [
+                115.929282,
+                32.567235
+              ],
+              [
+                115.911856,
+                32.577561
+              ],
+              [
+                115.891535,
+                32.576245
+              ],
+              [
+                115.887571,
+                32.56764
+              ],
+              [
+                115.8614,
+                32.537413
+              ],
+              [
+                115.845986,
+                32.53164
+              ],
+              [
+                115.839947,
+                32.524803
+              ],
+              [
+                115.841457,
+                32.501198
+              ],
+              [
+                115.823841,
+                32.502262
+              ],
+              [
+                115.80415,
+                32.485441
+              ],
+              [
+                115.788736,
+                32.468922
+              ],
+              [
+                115.781313,
+                32.468466
+              ],
+              [
+                115.787415,
+                32.480121
+              ],
+              [
+                115.785654,
+                32.489393
+              ],
+              [
+                115.771498,
+                32.505301
+              ],
+              [
+                115.760237,
+                32.481996
+              ],
+              [
+                115.741992,
+                32.476371
+              ],
+              [
+                115.719344,
+                32.485644
+              ],
+              [
+                115.701225,
+                32.495321
+              ],
+              [
+                115.692103,
+                32.487519
+              ],
+              [
+                115.692229,
+                32.480628
+              ],
+              [
+                115.700785,
+                32.472874
+              ],
+              [
+                115.698772,
+                32.468212
+              ],
+              [
+                115.675872,
+                32.466438
+              ],
+              [
+                115.68166,
+                32.450473
+              ],
+              [
+                115.68059,
+                32.43998
+              ],
+              [
+                115.674425,
+                32.430854
+              ],
+              [
+                115.666938,
+                32.409405
+              ],
+              [
+                115.656306,
+                32.408746
+              ],
+              [
+                115.657816,
+                32.428826
+              ],
+              [
+                115.645611,
+                32.417519
+              ],
+              [
+                115.627115,
+                32.40545
+              ],
+              [
+                115.604529,
+                32.425936
+              ],
+              [
+                115.586096,
+                32.419243
+              ],
+              [
+                115.563888,
+                32.403015
+              ],
+              [
+                115.553633,
+                32.407478
+              ],
+              [
+                115.569109,
+                32.414629
+              ],
+              [
+                115.5676,
+                32.421626
+              ],
+              [
+                115.547279,
+                32.424719
+              ],
+              [
+                115.537465,
+                32.438966
+              ],
+              [
+                115.523183,
+                32.442007
+              ],
+              [
+                115.524127,
+                32.447837
+              ],
+              [
+                115.515571,
+                32.450625
+              ],
+              [
+                115.502863,
+                32.48306
+              ],
+              [
+                115.497515,
+                32.492535
+              ],
+              [
+                115.484996,
+                32.503934
+              ],
+              [
+                115.485059,
+                32.512292
+              ],
+              [
+                115.477635,
+                32.511836
+              ],
+              [
+                115.477761,
+                32.51989
+              ],
+              [
+                115.465745,
+                32.520143
+              ],
+              [
+                115.438944,
+                32.532551
+              ],
+              [
+                115.443725,
+                32.543287
+              ],
+              [
+                115.434666,
+                32.545211
+              ],
+              [
+                115.431646,
+                32.5523
+              ],
+              [
+                115.418057,
+                32.552958
+              ],
+              [
+                115.410004,
+                32.548097
+              ],
+              [
+                115.412772,
+                32.559793
+              ],
+              [
+                115.411577,
+                32.574777
+              ],
+              [
+                115.403273,
+                32.576701
+              ],
+              [
+                115.391948,
+                32.566324
+              ],
+              [
+                115.38767,
+                32.57088
+              ],
+              [
+                115.329602,
+                32.561211
+              ],
+              [
+                115.32048,
+                32.562628
+              ],
+              [
+                115.324003,
+                32.554831
+              ],
+              [
+                115.304186,
+                32.553768
+              ],
+              [
+                115.296511,
+                32.562729
+              ],
+              [
+                115.300348,
+                32.568399
+              ],
+              [
+                115.310855,
+                32.570576
+              ],
+              [
+                115.297769,
+                32.576347
+              ],
+              [
+                115.30557,
+                32.58318
+              ],
+              [
+                115.299404,
+                32.58814
+              ],
+              [
+                115.294812,
+                32.581054
+              ],
+              [
+                115.289213,
+                32.589861
+              ],
+              [
+                115.267193,
+                32.578068
+              ],
+              [
+                115.254737,
+                32.585002
+              ],
+              [
+                115.26128,
+                32.591683
+              ],
+              [
+                115.2548,
+                32.595225
+              ],
+              [
+                115.243538,
+                32.593505
+              ],
+              [
+                115.227118,
+                32.578624
+              ],
+              [
+                115.229509,
+                32.590569
+              ],
+              [
+                115.212145,
+                32.588494
+              ],
+              [
+                115.201136,
+                32.591834
+              ],
+              [
+                115.192013,
+                32.603018
+              ],
+              [
+                115.175341,
+                32.605346
+              ],
+              [
+                115.152127,
+                32.590012
+              ],
+              [
+                115.145647,
+                32.580143
+              ],
+              [
+                115.137028,
+                32.587026
+              ],
+              [
+                115.140362,
+                32.599223
+              ],
+              [
+                115.12476,
+                32.607573
+              ],
+              [
+                115.111548,
+                32.607421
+              ],
+              [
+                115.099532,
+                32.619868
+              ],
+              [
+                115.098022,
+                32.63378
+              ],
+              [
+                115.090599,
+                32.637017
+              ],
+              [
+                115.065182,
+                32.629075
+              ],
+              [
+                115.05002,
+                32.640153
+              ],
+              [
+                115.030077,
+                32.6486
+              ],
+              [
+                114.985472,
+                32.659322
+              ],
+              [
+                114.957791,
+                32.659979
+              ],
+              [
+                114.93357,
+                32.649308
+              ],
+              [
+                114.919351,
+                32.648903
+              ],
+              [
+                114.911047,
+                32.653405
+              ],
+              [
+                114.901296,
+                32.648954
+              ],
+              [
+                114.901799,
+                32.634741
+              ],
+              [
+                114.89167,
+                32.61749
+              ],
+              [
+                114.884875,
+                32.616225
+              ],
+              [
+                114.862856,
+                32.624117
+              ],
+              [
+                114.856565,
+                32.61926
+              ],
+              [
+                114.822404,
+                32.622853
+              ],
+              [
+                114.813785,
+                32.611165
+              ],
+              [
+                114.806172,
+                32.609495
+              ],
+              [
+                114.79403,
+                32.613695
+              ],
+              [
+                114.788997,
+                32.607168
+              ],
+              [
+                114.791325,
+                32.584141
+              ],
+              [
+                114.802649,
+                32.583433
+              ],
+              [
+                114.810136,
+                32.569007
+              ],
+              [
+                114.808877,
+                32.558882
+              ],
+              [
+                114.785789,
+                32.545616
+              ],
+              [
+                114.781133,
+                32.535539
+              ],
+              [
+                114.786858,
+                32.52384
+              ],
+              [
+                114.793527,
+                32.521764
+              ],
+              [
+                114.789689,
+                32.50824
+              ],
+              [
+                114.774024,
+                32.508696
+              ],
+              [
+                114.752319,
+                32.523942
+              ],
+              [
+                114.736088,
+                32.516901
+              ],
+              [
+                114.729545,
+                32.519333
+              ],
+              [
+                114.724512,
+                32.541464
+              ],
+              [
+                114.713062,
+                32.543743
+              ],
+              [
+                114.702115,
+                32.535134
+              ],
+              [
+                114.701927,
+                32.517357
+              ],
+              [
+                114.676699,
+                32.514977
+              ],
+              [
+                114.666067,
+                32.527183
+              ],
+              [
+                114.650338,
+                32.527842
+              ],
+              [
+                114.615737,
+                32.509911
+              ],
+              [
+                114.606866,
+                32.512697
+              ],
+              [
+                114.582393,
+                32.51371
+              ],
+              [
+                114.571258,
+                32.508088
+              ],
+              [
+                114.569559,
+                32.495119
+              ],
+              [
+                114.574781,
+                32.486353
+              ],
+              [
+                114.571509,
+                32.466793
+              ],
+              [
+                114.585665,
+                32.455136
+              ],
+              [
+                114.582142,
+                32.445657
+              ],
+              [
+                114.570125,
+                32.435721
+              ],
+              [
+                114.576542,
+                32.425733
+              ],
+              [
+                114.603595,
+                32.41833
+              ],
+              [
+                114.634673,
+                32.39982
+              ],
+              [
+                114.647759,
+                32.387597
+              ],
+              [
+                114.644551,
+                32.375879
+              ],
+              [
+                114.623727,
+                32.370602
+              ],
+              [
+                114.620141,
+                32.363398
+              ],
+              [
+                114.623349,
+                32.352539
+              ],
+              [
+                114.610767,
+                32.350002
+              ],
+              [
+                114.607998,
+                32.33701
+              ],
+              [
+                114.5929,
+                32.321326
+              ],
+              [
+                114.575976,
+                32.316402
+              ],
+              [
+                114.582519,
+                32.308432
+              ],
+              [
+                114.563645,
+                32.306401
+              ],
+              [
+                114.550685,
+                32.289036
+              ],
+              [
+                114.535083,
+                32.286091
+              ],
+              [
+                114.521934,
+                32.298684
+              ],
+              [
+                114.498342,
+                32.301527
+              ],
+              [
+                114.492177,
+                32.299953
+              ],
+              [
+                114.490856,
+                32.28665
+              ],
+              [
+                114.483621,
+                32.285177
+              ],
+              [
+                114.468333,
+                32.294165
+              ],
+              [
+                114.452479,
+                32.281368
+              ],
+              [
+                114.438324,
+                32.288478
+              ],
+              [
+                114.429328,
+                32.289341
+              ],
+              [
+                114.421589,
+                32.279134
+              ],
+              [
+                114.397054,
+                32.293353
+              ],
+              [
+                114.376607,
+                32.292032
+              ],
+              [
+                114.369813,
+                32.298735
+              ],
+              [
+                114.368177,
+                32.313407
+              ],
+              [
+                114.349303,
+                32.323002
+              ],
+              [
+                114.348422,
+                32.347566
+              ],
+              [
+                114.34276,
+                32.365021
+              ],
+              [
+                114.315142,
+                32.37324
+              ],
+              [
+                114.293877,
+                32.36492
+              ],
+              [
+                114.286894,
+                32.369892
+              ],
+              [
+                114.28098,
+                32.407428
+              ],
+              [
+                114.288467,
+                32.418939
+              ],
+              [
+                114.277961,
+                32.418888
+              ],
+              [
+                114.269027,
+                32.409253
+              ],
+              [
+                114.254117,
+                32.424516
+              ],
+              [
+                114.247511,
+                32.436583
+              ],
+              [
+                114.249084,
+                32.450625
+              ],
+              [
+                114.243485,
+                32.458583
+              ],
+              [
+                114.226876,
+                32.454122
+              ],
+              [
+                114.221214,
+                32.445961
+              ],
+              [
+                114.204479,
+                32.445252
+              ],
+              [
+                114.201522,
+                32.453514
+              ],
+              [
+                114.210078,
+                32.45838
+              ],
+              [
+                114.209135,
+                32.468719
+              ],
+              [
+                114.198314,
+                32.46877
+              ],
+              [
+                114.197433,
+                32.486353
+              ],
+              [
+                114.192274,
+                32.492585
+              ],
+              [
+                114.167675,
+                32.487012
+              ],
+              [
+                114.163397,
+                32.469986
+              ],
+              [
+                114.16497,
+                32.461877
+              ],
+              [
+                114.157421,
+                32.458279
+              ],
+              [
+                114.136723,
+                32.461978
+              ],
+              [
+                114.112564,
+                32.447786
+              ],
+              [
+                114.097654,
+                32.451639
+              ],
+              [
+                114.085512,
+                32.450777
+              ],
+              [
+                114.080731,
+                32.454832
+              ],
+              [
+                114.078529,
+                32.479614
+              ],
+              [
+                114.087336,
+                32.481236
+              ],
+              [
+                114.07639,
+                32.493548
+              ],
+              [
+                114.071357,
+                32.505909
+              ],
+              [
+                114.072992,
+                32.517205
+              ],
+              [
+                114.066638,
+                32.527031
+              ],
+              [
+                114.067204,
+                32.534881
+              ],
+              [
+                114.056258,
+                32.539033
+              ],
+              [
+                114.053867,
+                32.523233
+              ],
+              [
+                114.014861,
+                32.51599
+              ],
+              [
+                114.007375,
+                32.507784
+              ],
+              [
+                113.982147,
+                32.503579
+              ],
+              [
+                113.962204,
+                32.505403
+              ],
+              [
+                113.95434,
+                32.514268
+              ],
+              [
+                113.953837,
+                32.526575
+              ],
+              [
+                113.938046,
+                32.555996
+              ],
+              [
+                113.940373,
+                32.576195
+              ],
+              [
+                113.932824,
+                32.578219
+              ],
+              [
+                113.92238,
+                32.59396
+              ],
+              [
+                113.919738,
+                32.605295
+              ],
+              [
+                113.911811,
+                32.607775
+              ],
+              [
+                113.893315,
+                32.604891
+              ],
+              [
+                113.886646,
+                32.607016
+              ],
+              [
+                113.87268,
+                32.622751
+              ],
+              [
+                113.86513,
+                32.623814
+              ],
+              [
+                113.850409,
+                32.617338
+              ],
+              [
+                113.843614,
+                32.622245
+              ],
+              [
+                113.826691,
+                32.622397
+              ],
+              [
+                113.820337,
+                32.619109
+              ],
+              [
+                113.820211,
+                32.601804
+              ],
+              [
+                113.814423,
+                32.600842
+              ],
+              [
+                113.805301,
+                32.597705
+              ],
+              [
+                113.789698,
+                32.586368
+              ],
+              [
+                113.782023,
+                32.566172
+              ],
+              [
+                113.769126,
+                32.559287
+              ],
+              [
+                113.763212,
+                32.547895
+              ],
+              [
+                113.774285,
+                32.537362
+              ],
+              [
+                113.768245,
+                32.534425
+              ],
+              [
+                113.759375,
+                32.508797
+              ],
+              [
+                113.764219,
+                32.489951
+              ],
+              [
+                113.761828,
+                32.470645
+              ],
+              [
+                113.753398,
+                32.465425
+              ],
+              [
+                113.741319,
+                32.465374
+              ],
+              [
+                113.73767,
+                32.453362
+              ],
+              [
+                113.730498,
+                32.46061
+              ],
+              [
+                113.730875,
+                32.449307
+              ],
+              [
+                113.725339,
+                32.436025
+              ],
+              [
+                113.710555,
+                32.421221
+              ],
+              [
+                113.718608,
+                32.417215
+              ],
+              [
+                113.735279,
+                32.410876
+              ],
+              [
+                113.740753,
+                32.393125
+              ],
+              [
+                113.751699,
+                32.390031
+              ],
+              [
+                113.753209,
+                32.38435
+              ],
+              [
+                113.743835,
+                32.369435
+              ],
+              [
+                113.751448,
+                32.36081
+              ],
+              [
+                113.760381,
+                32.369182
+              ],
+              [
+                113.768874,
+                32.369486
+              ],
+              [
+                113.770699,
+                32.358628
+              ],
+              [
+                113.758494,
+                32.352235
+              ],
+              [
+                113.753838,
+                32.342085
+              ],
+              [
+                113.753838,
+                32.32823
+              ],
+              [
+                113.7651,
+                32.319448
+              ],
+              [
+                113.773907,
+                32.306147
+              ],
+              [
+                113.769063,
+                32.301324
+              ],
+              [
+                113.768182,
+                32.28406
+              ],
+              [
+                113.769944,
+                32.275985
+              ],
+              [
+                113.758305,
+                32.276747
+              ],
+              [
+                113.749057,
+                32.272684
+              ]
+            ]
+          ],
+          [
+            [
+              [
+                113.768182,
+                32.28406
+              ],
+              [
+                113.769063,
+                32.301324
+              ],
+              [
+                113.748491,
+                32.291931
+              ],
+              [
+                113.743898,
+                32.283603
+              ],
+              [
+                113.749057,
+                32.272684
+              ],
+              [
+                113.758305,
+                32.276747
+              ],
+              [
+                113.754027,
+                32.288275
+              ],
+              [
+                113.758494,
+                32.291931
+              ],
+              [
+                113.768182,
+                32.28406
+              ]
+            ]
+          ]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "adcode": 411600,
+        "name": "鍛ㄥ彛甯�",
+        "center": [
+          114.649653,
+          33.620357
+        ],
+        "centroid": [
+          114.883192,
+          33.721762
+        ],
+        "childrenNum": 10,
+        "level": "city",
+        "parent": {
+          "adcode": 410000
+        },
+        "subFeatureIndex": 15,
+        "acroutes": [
+          100000,
+          410000
+        ]
+      },
+      "geometry": {
+        "type": "MultiPolygon",
+        "coordinates": [
+          [
+            [
+              [
+                114.897269,
+                33.08658
+              ],
+              [
+                114.897206,
+                33.093676
+              ],
+              [
+                114.906266,
+                33.11657
+              ],
+              [
+                114.902931,
+                33.12955
+              ],
+              [
+                114.910229,
+                33.136592
+              ],
+              [
+                114.926649,
+                33.138503
+              ],
+              [
+                114.93445,
+                33.15329
+              ],
+              [
+                114.966095,
+                33.147104
+              ],
+              [
+                114.968863,
+                33.133674
+              ],
+              [
+                114.981446,
+                33.129097
+              ],
+              [
+                114.99233,
+                33.120947
+              ],
+              [
+                114.990505,
+                33.102885
+              ],
+              [
+                115.012021,
+                33.097651
+              ],
+              [
+                115.023345,
+                33.090757
+              ],
+              [
+                115.041275,
+                33.08663
+              ],
+              [
+                115.05153,
+                33.092468
+              ],
+              [
+                115.057444,
+                33.083762
+              ],
+              [
+                115.067636,
+                33.086228
+              ],
+              [
+                115.111108,
+                33.082956
+              ],
+              [
+                115.153259,
+                33.084416
+              ],
+              [
+                115.167918,
+                33.088744
+              ],
+              [
+                115.172448,
+                33.108067
+              ],
+              [
+                115.197109,
+                33.12145
+              ],
+              [
+                115.209817,
+                33.113501
+              ],
+              [
+                115.22435,
+                33.126229
+              ],
+              [
+                115.236996,
+                33.126733
+              ],
+              [
+                115.246307,
+                33.136391
+              ],
+              [
+                115.266501,
+                33.132719
+              ],
+              [
+                115.269584,
+                33.137849
+              ],
+              [
+                115.290345,
+                33.132417
+              ],
+              [
+                115.292862,
+                33.143382
+              ],
+              [
+                115.301481,
+                33.141622
+              ],
+              [
+                115.300159,
+                33.162995
+              ],
+              [
+                115.294372,
+                33.177878
+              ],
+              [
+                115.296762,
+                33.201303
+              ],
+              [
+                115.326394,
+                33.211355
+              ],
+              [
+                115.316265,
+                33.218391
+              ],
+              [
+                115.316328,
+                33.223818
+              ],
+              [
+                115.331741,
+                33.235625
+              ],
+              [
+                115.329728,
+                33.250546
+              ],
+              [
+                115.340109,
+                33.261145
+              ],
+              [
+                115.340927,
+                33.271391
+              ],
+              [
+                115.333818,
+                33.284749
+              ],
+              [
+                115.335013,
+                33.298055
+              ],
+              [
+                115.346966,
+                33.301017
+              ],
+              [
+                115.360178,
+                33.298105
+              ],
+              [
+                115.358794,
+                33.311459
+              ],
+              [
+                115.365022,
+                33.336003
+              ],
+              [
+                115.34835,
+                33.338963
+              ],
+              [
+                115.34684,
+                33.358683
+              ],
+              [
+                115.338536,
+                33.362998
+              ],
+              [
+                115.341619,
+                33.371175
+              ],
+              [
+                115.316139,
+                33.370974
+              ],
+              [
+                115.313245,
+                33.377094
+              ],
+              [
+                115.329414,
+                33.40167
+              ],
+              [
+                115.317334,
+                33.418216
+              ],
+              [
+                115.315636,
+                33.431452
+              ],
+              [
+                115.319033,
+                33.441477
+              ],
+              [
+                115.316391,
+                33.448895
+              ],
+              [
+                115.323877,
+                33.449045
+              ],
+              [
+                115.324569,
+                33.457615
+              ],
+              [
+                115.335957,
+                33.447291
+              ],
+              [
+                115.345771,
+                33.449747
+              ],
+              [
+                115.348854,
+                33.478962
+              ],
+              [
+                115.343821,
+                33.480866
+              ],
+              [
+                115.351244,
+                33.490384
+              ],
+              [
+                115.345393,
+                33.502707
+              ],
+              [
+                115.366595,
+                33.523441
+              ],
+              [
+                115.395094,
+                33.506463
+              ],
+              [
+                115.396793,
+                33.502006
+              ],
+              [
+                115.405349,
+                33.51668
+              ],
+              [
+                115.401763,
+                33.524342
+              ],
+              [
+                115.41466,
+                33.541617
+              ],
+              [
+                115.421958,
+                33.556786
+              ],
+              [
+                115.463731,
+                33.567197
+              ],
+              [
+                115.47191,
+                33.558037
+              ],
+              [
+                115.484933,
+                33.558638
+              ],
+              [
+                115.500598,
+                33.564794
+              ],
+              [
+                115.511293,
+                33.553331
+              ],
+              [
+                115.528594,
+                33.562692
+              ],
+              [
+                115.552752,
+                33.565545
+              ],
+              [
+                115.559358,
+                33.561941
+              ],
+              [
+                115.56609,
+                33.576356
+              ],
+              [
+                115.601132,
+                33.578157
+              ],
+              [
+                115.63976,
+                33.585113
+              ],
+              [
+                115.625038,
+                33.625637
+              ],
+              [
+                115.6173,
+                33.633189
+              ],
+              [
+                115.601635,
+                33.657692
+              ],
+              [
+                115.602516,
+                33.67259
+              ],
+              [
+                115.599622,
+                33.688285
+              ],
+              [
+                115.607171,
+                33.689035
+              ],
+              [
+                115.596288,
+                33.70033
+              ],
+              [
+                115.601572,
+                33.71692
+              ],
+              [
+                115.595281,
+                33.732957
+              ],
+              [
+                115.583516,
+                33.747243
+              ],
+              [
+                115.574834,
+                33.752237
+              ],
+              [
+                115.56999,
+                33.765321
+              ],
+              [
+                115.563133,
+                33.771663
+              ],
+              [
+                115.565209,
+                33.780201
+              ],
+              [
+                115.582258,
+                33.788738
+              ],
+              [
+                115.590563,
+                33.783696
+              ],
+              [
+                115.614218,
+                33.775658
+              ],
+              [
+                115.621201,
+                33.796775
+              ],
+              [
+                115.62334,
+                33.811949
+              ],
+              [
+                115.616608,
+                33.820034
+              ],
+              [
+                115.625605,
+                33.823627
+              ],
+              [
+                115.626297,
+                33.836201
+              ],
+              [
+                115.636111,
+                33.84119
+              ],
+              [
+                115.633532,
+                33.86733
+              ],
+              [
+                115.620886,
+                33.876108
+              ],
+              [
+                115.605724,
+                33.867429
+              ],
+              [
+                115.591632,
+                33.868327
+              ],
+              [
+                115.579553,
+                33.877005
+              ],
+              [
+                115.564202,
+                33.87132
+              ],
+              [
+                115.557974,
+                33.876108
+              ],
+              [
+                115.546146,
+                33.875509
+              ],
+              [
+                115.546587,
+                33.888425
+              ],
+              [
+                115.555332,
+                33.888574
+              ],
+              [
+                115.55464,
+                33.900342
+              ],
+              [
+                115.568543,
+                33.910013
+              ],
+              [
+                115.559798,
+                33.91455
+              ],
+              [
+                115.562629,
+                33.92721
+              ],
+              [
+                115.56999,
+                33.932842
+              ],
+              [
+                115.569172,
+                33.9455
+              ],
+              [
+                115.57754,
+                33.950134
+              ],
+              [
+                115.57905,
+                33.973949
+              ],
+              [
+                115.588361,
+                33.976987
+              ],
+              [
+                115.591066,
+                33.986202
+              ],
+              [
+                115.584083,
+                33.988643
+              ],
+              [
+                115.592702,
+                34.009857
+              ],
+              [
+                115.606605,
+                34.013243
+              ],
+              [
+                115.600943,
+                34.023798
+              ],
+              [
+                115.615035,
+                34.033356
+              ],
+              [
+                115.62139,
+                34.030121
+              ],
+              [
+                115.642214,
+                34.032261
+              ],
+              [
+                115.649889,
+                34.036194
+              ],
+              [
+                115.648001,
+                34.046298
+              ],
+              [
+                115.653601,
+                34.060084
+              ],
+              [
+                115.641962,
+                34.084166
+              ],
+              [
+                115.627555,
+                34.087499
+              ],
+              [
+                115.619754,
+                34.083171
+              ],
+              [
+                115.573702,
+                34.086404
+              ],
+              [
+                115.543693,
+                34.084564
+              ],
+              [
+                115.547593,
+                34.074414
+              ],
+              [
+                115.549921,
+                34.047542
+              ],
+              [
+                115.547782,
+                34.037737
+              ],
+              [
+                115.53564,
+                34.021757
+              ],
+              [
+                115.53023,
+                34.018819
+              ],
+              [
+                115.513369,
+                34.019367
+              ],
+              [
+                115.502989,
+                34.015434
+              ],
+              [
+                115.489274,
+                34.017575
+              ],
+              [
+                115.462599,
+                34.006023
+              ],
+              [
+                115.458824,
+                33.987099
+              ],
+              [
+                115.439573,
+                33.986053
+              ],
+              [
+                115.402581,
+                33.993374
+              ],
+              [
+                115.375403,
+                34.00677
+              ],
+              [
+                115.361813,
+                34.01628
+              ],
+              [
+                115.349042,
+                34.018222
+              ],
+              [
+                115.33539,
+                34.006969
+              ],
+              [
+                115.32092,
+                34.004828
+              ],
+              [
+                115.312742,
+                33.995715
+              ],
+              [
+                115.292484,
+                33.996163
+              ],
+              [
+                115.28959,
+                34.003981
+              ],
+              [
+                115.295441,
+                34.018172
+              ],
+              [
+                115.288395,
+                34.019516
+              ],
+              [
+                115.258449,
+                34.015334
+              ],
+              [
+                115.252975,
+                34.008861
+              ],
+              [
+                115.254548,
+                33.995117
+              ],
+              [
+                115.252283,
+                33.982467
+              ],
+              [
+                115.240959,
+                33.975144
+              ],
+              [
+                115.23039,
+                33.974148
+              ],
+              [
+                115.203778,
+                33.988942
+              ],
+              [
+                115.195473,
+                33.987398
+              ],
+              [
+                115.204722,
+                33.974447
+              ],
+              [
+                115.189497,
+                33.958106
+              ],
+              [
+                115.176474,
+                33.950732
+              ],
+              [
+                115.148541,
+                33.950184
+              ],
+              [
+                115.142375,
+                33.958306
+              ],
+              [
+                115.124257,
+                33.963089
+              ],
+              [
+                115.115009,
+                33.961096
+              ],
+              [
+                115.106453,
+                33.94844
+              ],
+              [
+                115.107207,
+                33.936331
+              ],
+              [
+                115.085251,
+                33.93354
+              ],
+              [
+                115.070026,
+                33.935583
+              ],
+              [
+                115.050398,
+                33.941962
+              ],
+              [
+                115.049957,
+                33.950035
+              ],
+              [
+                115.05801,
+                33.95721
+              ],
+              [
+                115.065748,
+                33.97355
+              ],
+              [
+                115.062351,
+                33.979329
+              ],
+              [
+                115.070089,
+                33.990635
+              ],
+              [
+                115.083238,
+                34.003185
+              ],
+              [
+                115.074871,
+                34.014438
+              ],
+              [
+                115.074241,
+                34.022802
+              ],
+              [
+                115.083364,
+                34.024893
+              ],
+              [
+                115.107962,
+                34.022703
+              ],
+              [
+                115.121363,
+                34.02569
+              ],
+              [
+                115.13967,
+                34.050628
+              ],
+              [
+                115.140048,
+                34.055854
+              ],
+              [
+                115.128661,
+                34.064164
+              ],
+              [
+                115.116707,
+                34.066353
+              ],
+              [
+                115.120608,
+                34.078196
+              ],
+              [
+                115.118217,
+                34.098642
+              ],
+              [
+                115.126144,
+                34.105207
+              ],
+              [
+                115.119538,
+                34.120475
+              ],
+              [
+                115.12671,
+                34.133652
+              ],
+              [
+                115.127906,
+                34.146777
+              ],
+              [
+                115.133442,
+                34.154234
+              ],
+              [
+                115.133127,
+                34.170835
+              ],
+              [
+                115.11872,
+                34.189966
+              ],
+              [
+                115.12627,
+                34.209441
+              ],
+              [
+                115.107207,
+                34.208845
+              ],
+              [
+                115.093556,
+                34.219277
+              ],
+              [
+                115.082609,
+                34.222555
+              ],
+              [
+                115.052474,
+                34.224641
+              ],
+              [
+                115.041087,
+                34.246342
+              ],
+              [
+                115.012965,
+                34.253393
+              ],
+              [
+                114.998558,
+                34.250116
+              ],
+              [
+                114.986605,
+                34.253393
+              ],
+              [
+                114.98088,
+                34.262975
+              ],
+              [
+                114.962258,
+                34.261883
+              ],
+              [
+                114.940804,
+                34.274243
+              ],
+              [
+                114.933695,
+                34.282135
+              ],
+              [
+                114.912179,
+                34.281837
+              ],
+              [
+                114.901988,
+                34.284567
+              ],
+              [
+                114.896514,
+                34.265804
+              ],
+              [
+                114.867763,
+                34.271066
+              ],
+              [
+                114.845492,
+                34.280696
+              ],
+              [
+                114.832847,
+                34.281937
+              ],
+              [
+                114.8314,
+                34.268138
+              ],
+              [
+                114.812778,
+                34.259003
+              ],
+              [
+                114.788242,
+                34.261138
+              ],
+              [
+                114.781196,
+                34.255627
+              ],
+              [
+                114.76465,
+                34.254436
+              ],
+              [
+                114.758736,
+                34.238397
+              ],
+              [
+                114.752697,
+                34.23363
+              ],
+              [
+                114.730426,
+                34.225237
+              ],
+              [
+                114.723946,
+                34.228018
+              ],
+              [
+                114.71388,
+                34.241327
+              ],
+              [
+                114.702241,
+                34.244505
+              ],
+              [
+                114.679341,
+                34.244307
+              ],
+              [
+                114.667514,
+                34.250265
+              ],
+              [
+                114.647319,
+                34.250315
+              ],
+              [
+                114.634044,
+                34.261883
+              ],
+              [
+                114.611459,
+                34.261088
+              ],
+              [
+                114.602085,
+                34.271017
+              ],
+              [
+                114.58988,
+                34.273747
+              ],
+              [
+                114.556662,
+                34.267989
+              ],
+              [
+                114.551189,
+                34.272059
+              ],
+              [
+                114.551629,
+                34.284964
+              ],
+              [
+                114.528603,
+                34.282234
+              ],
+              [
+                114.524703,
+                34.306253
+              ],
+              [
+                114.519355,
+                34.313448
+              ],
+              [
+                114.509855,
+                34.309727
+              ],
+              [
+                114.493876,
+                34.31191
+              ],
+              [
+                114.485949,
+                34.325057
+              ],
+              [
+                114.479343,
+                34.32962
+              ],
+              [
+                114.462042,
+                34.330166
+              ],
+              [
+                114.46179,
+                34.319947
+              ],
+              [
+                114.452857,
+                34.319997
+              ],
+              [
+                114.438576,
+                34.328033
+              ],
+              [
+                114.439897,
+                34.336366
+              ],
+              [
+                114.427692,
+                34.333837
+              ],
+              [
+                114.436059,
+                34.330265
+              ],
+              [
+                114.434486,
+                34.313894
+              ],
+              [
+                114.424546,
+                34.309032
+              ],
+              [
+                114.430649,
+                34.302284
+              ],
+              [
+                114.442539,
+                34.300696
+              ],
+              [
+                114.455688,
+                34.294096
+              ],
+              [
+                114.440652,
+                34.270719
+              ],
+              [
+                114.434927,
+                34.267145
+              ],
+              [
+                114.417689,
+                34.265308
+              ],
+              [
+                114.405798,
+                34.248031
+              ],
+              [
+                114.385729,
+                34.24386
+              ],
+              [
+                114.356412,
+                34.247186
+              ],
+              [
+                114.344207,
+                34.251804
+              ],
+              [
+                114.328857,
+                34.267294
+              ],
+              [
+                114.301175,
+                34.26774
+              ],
+              [
+                114.287901,
+                34.276527
+              ],
+              [
+                114.274626,
+                34.274889
+              ],
+              [
+                114.267517,
+                34.256968
+              ],
+              [
+                114.259905,
+                34.251854
+              ],
+              [
+                114.272676,
+                34.24237
+              ],
+              [
+                114.273053,
+                34.227869
+              ],
+              [
+                114.286013,
+                34.218234
+              ],
+              [
+                114.287649,
+                34.206958
+              ],
+              [
+                114.276199,
+                34.190811
+              ],
+              [
+                114.275255,
+                34.174661
+              ],
+              [
+                114.28746,
+                34.137033
+              ],
+              [
+                114.285133,
+                34.120873
+              ],
+              [
+                114.273808,
+                34.107545
+              ],
+              [
+                114.273431,
+                34.102571
+              ],
+              [
+                114.262107,
+                34.095856
+              ],
+              [
+                114.270411,
+                34.063219
+              ],
+              [
+                114.271103,
+                34.053813
+              ],
+              [
+                114.281987,
+                34.046597
+              ],
+              [
+                114.287523,
+                34.022902
+              ],
+              [
+                114.295324,
+                34.007467
+              ],
+              [
+                114.311745,
+                34.001492
+              ],
+              [
+                114.312248,
+                33.98162
+              ],
+              [
+                114.307026,
+                33.978233
+              ],
+              [
+                114.31036,
+                33.96
+              ],
+              [
+                114.299917,
+                33.953024
+              ],
+              [
+                114.305642,
+                33.889572
+              ],
+              [
+                114.3164,
+                33.880446
+              ],
+              [
+                114.311304,
+                33.87142
+              ],
+              [
+                114.315834,
+                33.865734
+              ],
+              [
+                114.312122,
+                33.853263
+              ],
+              [
+                114.301112,
+                33.852365
+              ],
+              [
+                114.301301,
+                33.842188
+              ],
+              [
+                114.310738,
+                33.842637
+              ],
+              [
+                114.316085,
+                33.833207
+              ],
+              [
+                114.323383,
+                33.832908
+              ],
+              [
+                114.325082,
+                33.818337
+              ],
+              [
+                114.313066,
+                33.80012
+              ],
+              [
+                114.309983,
+                33.781349
+              ],
+              [
+                114.290354,
+                33.771813
+              ],
+              [
+                114.249776,
+                33.779252
+              ],
+              [
+                114.242604,
+                33.790785
+              ],
+              [
+                114.217565,
+                33.793131
+              ],
+              [
+                114.211525,
+                33.798123
+              ],
+              [
+                114.19888,
+                33.797374
+              ],
+              [
+                114.190638,
+                33.801917
+              ],
+              [
+                114.179503,
+                33.799321
+              ],
+              [
+                114.178308,
+                33.806409
+              ],
+              [
+                114.161447,
+                33.79982
+              ],
+              [
+                114.15503,
+                33.809304
+              ],
+              [
+                114.145404,
+                33.810551
+              ],
+              [
+                114.134772,
+                33.806409
+              ],
+              [
+                114.133703,
+                33.791484
+              ],
+              [
+                114.139931,
+                33.783097
+              ],
+              [
+                114.142007,
+                33.765921
+              ],
+              [
+                114.133262,
+                33.768118
+              ],
+              [
+                114.098032,
+                33.765072
+              ],
+              [
+                114.10319,
+                33.756832
+              ],
+              [
+                114.106839,
+                33.739051
+              ],
+              [
+                114.095263,
+                33.728061
+              ],
+              [
+                114.091489,
+                33.71642
+              ],
+              [
+                114.097717,
+                33.683187
+              ],
+              [
+                114.115836,
+                33.684587
+              ],
+              [
+                114.118226,
+                33.67159
+              ],
+              [
+                114.116402,
+                33.651392
+              ],
+              [
+                114.125398,
+                33.652842
+              ],
+              [
+                114.149745,
+                33.650442
+              ],
+              [
+                114.152639,
+                33.662242
+              ],
+              [
+                114.162265,
+                33.669941
+              ],
+              [
+                114.169563,
+                33.664791
+              ],
+              [
+                114.186235,
+                33.67219
+              ],
+              [
+                114.186549,
+                33.682538
+              ],
+              [
+                114.196489,
+                33.690934
+              ],
+              [
+                114.214231,
+                33.691334
+              ],
+              [
+                114.249084,
+                33.704328
+              ],
+              [
+                114.250783,
+                33.693233
+              ],
+              [
+                114.259842,
+                33.680588
+              ],
+              [
+                114.260849,
+                33.661942
+              ],
+              [
+                114.264183,
+                33.654742
+              ],
+              [
+                114.264938,
+                33.635239
+              ],
+              [
+                114.277332,
+                33.621735
+              ],
+              [
+                114.279659,
+                33.604427
+              ],
+              [
+                114.265881,
+                33.597923
+              ],
+              [
+                114.265378,
+                33.593219
+              ],
+              [
+                114.278653,
+                33.57015
+              ],
+              [
+                114.282868,
+                33.558688
+              ],
+              [
+                114.295324,
+                33.553782
+              ],
+              [
+                114.289348,
+                33.522089
+              ],
+              [
+                114.281106,
+                33.513976
+              ],
+              [
+                114.283371,
+                33.500353
+              ],
+              [
+                114.279785,
+                33.489282
+              ],
+              [
+                114.284629,
+                33.472548
+              ],
+              [
+                114.307907,
+                33.481316
+              ],
+              [
+                114.347227,
+                33.462376
+              ],
+              [
+                114.349429,
+                33.452604
+              ],
+              [
+                114.362137,
+                33.454057
+              ],
+              [
+                114.368932,
+                33.44659
+              ],
+              [
+                114.382143,
+                33.454508
+              ],
+              [
+                114.402967,
+                33.457064
+              ],
+              [
+                114.407937,
+                33.460873
+              ],
+              [
+                114.446628,
+                33.464581
+              ],
+              [
+                114.459777,
+                33.454458
+              ],
+              [
+                114.464118,
+                33.437467
+              ],
+              [
+                114.480098,
+                33.443131
+              ],
+              [
+                114.490415,
+                33.43481
+              ],
+              [
+                114.488654,
+                33.417565
+              ],
+              [
+                114.52313,
+                33.418969
+              ],
+              [
+                114.537663,
+                33.426589
+              ],
+              [
+                114.554146,
+                33.42714
+              ],
+              [
+                114.563016,
+                33.42333
+              ],
+              [
+                114.57239,
+                33.406835
+              ],
+              [
+                114.572013,
+                33.396053
+              ],
+              [
+                114.577423,
+                33.390035
+              ],
+              [
+                114.575536,
+                33.376392
+              ],
+              [
+                114.585728,
+                33.374837
+              ],
+              [
+                114.589314,
+                33.362847
+              ],
+              [
+                114.605293,
+                33.35778
+              ],
+              [
+                114.615925,
+                33.344383
+              ],
+              [
+                114.623664,
+                33.341723
+              ],
+              [
+                114.645557,
+                33.34624
+              ],
+              [
+                114.654491,
+                33.341924
+              ],
+              [
+                114.662481,
+                33.322954
+              ],
+              [
+                114.669715,
+                33.31944
+              ],
+              [
+                114.665563,
+                33.313416
+              ],
+              [
+                114.684122,
+                33.314671
+              ],
+              [
+                114.685255,
+                33.298205
+              ],
+              [
+                114.705764,
+                33.302171
+              ],
+              [
+                114.722373,
+                33.301117
+              ],
+              [
+                114.728853,
+                33.289368
+              ],
+              [
+                114.73074,
+                33.261597
+              ],
+              [
+                114.717529,
+                33.221808
+              ],
+              [
+                114.69897,
+                33.208139
+              ],
+              [
+                114.697648,
+                33.197081
+              ],
+              [
+                114.681354,
+                33.170487
+              ],
+              [
+                114.704003,
+                33.160531
+              ],
+              [
+                114.705764,
+                33.14821
+              ],
+              [
+                114.717592,
+                33.144036
+              ],
+              [
+                114.720863,
+                33.125626
+              ],
+              [
+                114.731621,
+                33.120746
+              ],
+              [
+                114.742757,
+                33.106709
+              ],
+              [
+                114.761756,
+                33.10535
+              ],
+              [
+                114.765845,
+                33.090858
+              ],
+              [
+                114.77069,
+                33.087184
+              ],
+              [
+                114.77157,
+                33.069517
+              ],
+              [
+                114.7951,
+                33.068561
+              ],
+              [
+                114.800447,
+                33.05819
+              ],
+              [
+                114.817937,
+                33.060456
+              ],
+              [
+                114.833917,
+                33.059449
+              ],
+              [
+                114.850022,
+                33.052753
+              ],
+              [
+                114.854552,
+                33.055421
+              ],
+              [
+                114.857446,
+                33.075306
+              ],
+              [
+                114.897206,
+                33.080591
+              ],
+              [
+                114.897269,
+                33.08658
+              ]
+            ]
+          ]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "adcode": 411700,
+        "name": "椹婚┈搴楀競",
+        "center": [
+          114.024736,
+          32.980169
+        ],
+        "centroid": [
+          114.156353,
+          32.922684
+        ],
+        "childrenNum": 10,
+        "level": "city",
+        "parent": {
+          "adcode": 410000
+        },
+        "subFeatureIndex": 16,
+        "acroutes": [
+          100000,
+          410000
+        ]
+      },
+      "geometry": {
+        "type": "MultiPolygon",
+        "coordinates": [
+          [
+            [
+              [
+                113.814423,
+                32.600842
+              ],
+              [
+                113.820211,
+                32.601804
+              ],
+              [
+                113.820337,
+                32.619109
+              ],
+              [
+                113.826691,
+                32.622397
+              ],
+              [
+                113.843614,
+                32.622245
+              ],
+              [
+                113.850409,
+                32.617338
+              ],
+              [
+                113.86513,
+                32.623814
+              ],
+              [
+                113.87268,
+                32.622751
+              ],
+              [
+                113.886646,
+                32.607016
+              ],
+              [
+                113.893315,
+                32.604891
+              ],
+              [
+                113.911811,
+                32.607775
+              ],
+              [
+                113.919738,
+                32.605295
+              ],
+              [
+                113.92238,
+                32.59396
+              ],
+              [
+                113.932824,
+                32.578219
+              ],
+              [
+                113.940373,
+                32.576195
+              ],
+              [
+                113.938046,
+                32.555996
+              ],
+              [
+                113.953837,
+                32.526575
+              ],
+              [
+                113.95434,
+                32.514268
+              ],
+              [
+                113.962204,
+                32.505403
+              ],
+              [
+                113.982147,
+                32.503579
+              ],
+              [
+                114.007375,
+                32.507784
+              ],
+              [
+                114.014861,
+                32.51599
+              ],
+              [
+                114.053867,
+                32.523233
+              ],
+              [
+                114.056258,
+                32.539033
+              ],
+              [
+                114.067204,
+                32.534881
+              ],
+              [
+                114.066638,
+                32.527031
+              ],
+              [
+                114.072992,
+                32.517205
+              ],
+              [
+                114.071357,
+                32.505909
+              ],
+              [
+                114.07639,
+                32.493548
+              ],
+              [
+                114.087336,
+                32.481236
+              ],
+              [
+                114.078529,
+                32.479614
+              ],
+              [
+                114.080731,
+                32.454832
+              ],
+              [
+                114.085512,
+                32.450777
+              ],
+              [
+                114.097654,
+                32.451639
+              ],
+              [
+                114.112564,
+                32.447786
+              ],
+              [
+                114.136723,
+                32.461978
+              ],
+              [
+                114.157421,
+                32.458279
+              ],
+              [
+                114.16497,
+                32.461877
+              ],
+              [
+                114.163397,
+                32.469986
+              ],
+              [
+                114.167675,
+                32.487012
+              ],
+              [
+                114.192274,
+                32.492585
+              ],
+              [
+                114.197433,
+                32.486353
+              ],
+              [
+                114.198314,
+                32.46877
+              ],
+              [
+                114.209135,
+                32.468719
+              ],
+              [
+                114.210078,
+                32.45838
+              ],
+              [
+                114.201522,
+                32.453514
+              ],
+              [
+                114.204479,
+                32.445252
+              ],
+              [
+                114.221214,
+                32.445961
+              ],
+              [
+                114.226876,
+                32.454122
+              ],
+              [
+                114.243485,
+                32.458583
+              ],
+              [
+                114.249084,
+                32.450625
+              ],
+              [
+                114.247511,
+                32.436583
+              ],
+              [
+                114.254117,
+                32.424516
+              ],
+              [
+                114.269027,
+                32.409253
+              ],
+              [
+                114.277961,
+                32.418888
+              ],
+              [
+                114.288467,
+                32.418939
+              ],
+              [
+                114.28098,
+                32.407428
+              ],
+              [
+                114.286894,
+                32.369892
+              ],
+              [
+                114.293877,
+                32.36492
+              ],
+              [
+                114.315142,
+                32.37324
+              ],
+              [
+                114.34276,
+                32.365021
+              ],
+              [
+                114.348422,
+                32.347566
+              ],
+              [
+                114.349303,
+                32.323002
+              ],
+              [
+                114.368177,
+                32.313407
+              ],
+              [
+                114.369813,
+                32.298735
+              ],
+              [
+                114.376607,
+                32.292032
+              ],
+              [
+                114.397054,
+                32.293353
+              ],
+              [
+                114.421589,
+                32.279134
+              ],
+              [
+                114.429328,
+                32.289341
+              ],
+              [
+                114.438324,
+                32.288478
+              ],
+              [
+                114.452479,
+                32.281368
+              ],
+              [
+                114.468333,
+                32.294165
+              ],
+              [
+                114.483621,
+                32.285177
+              ],
+              [
+                114.490856,
+                32.28665
+              ],
+              [
+                114.492177,
+                32.299953
+              ],
+              [
+                114.498342,
+                32.301527
+              ],
+              [
+                114.521934,
+                32.298684
+              ],
+              [
+                114.535083,
+                32.286091
+              ],
+              [
+                114.550685,
+                32.289036
+              ],
+              [
+                114.563645,
+                32.306401
+              ],
+              [
+                114.582519,
+                32.308432
+              ],
+              [
+                114.575976,
+                32.316402
+              ],
+              [
+                114.5929,
+                32.321326
+              ],
+              [
+                114.607998,
+                32.33701
+              ],
+              [
+                114.610767,
+                32.350002
+              ],
+              [
+                114.623349,
+                32.352539
+              ],
+              [
+                114.620141,
+                32.363398
+              ],
+              [
+                114.623727,
+                32.370602
+              ],
+              [
+                114.644551,
+                32.375879
+              ],
+              [
+                114.647759,
+                32.387597
+              ],
+              [
+                114.634673,
+                32.39982
+              ],
+              [
+                114.603595,
+                32.41833
+              ],
+              [
+                114.576542,
+                32.425733
+              ],
+              [
+                114.570125,
+                32.435721
+              ],
+              [
+                114.582142,
+                32.445657
+              ],
+              [
+                114.585665,
+                32.455136
+              ],
+              [
+                114.571509,
+                32.466793
+              ],
+              [
+                114.574781,
+                32.486353
+              ],
+              [
+                114.569559,
+                32.495119
+              ],
+              [
+                114.571258,
+                32.508088
+              ],
+              [
+                114.582393,
+                32.51371
+              ],
+              [
+                114.606866,
+                32.512697
+              ],
+              [
+                114.615737,
+                32.509911
+              ],
+              [
+                114.650338,
+                32.527842
+              ],
+              [
+                114.666067,
+                32.527183
+              ],
+              [
+                114.676699,
+                32.514977
+              ],
+              [
+                114.701927,
+                32.517357
+              ],
+              [
+                114.702115,
+                32.535134
+              ],
+              [
+                114.713062,
+                32.543743
+              ],
+              [
+                114.724512,
+                32.541464
+              ],
+              [
+                114.729545,
+                32.519333
+              ],
+              [
+                114.736088,
+                32.516901
+              ],
+              [
+                114.752319,
+                32.523942
+              ],
+              [
+                114.774024,
+                32.508696
+              ],
+              [
+                114.789689,
+                32.50824
+              ],
+              [
+                114.793527,
+                32.521764
+              ],
+              [
+                114.786858,
+                32.52384
+              ],
+              [
+                114.781133,
+                32.535539
+              ],
+              [
+                114.785789,
+                32.545616
+              ],
+              [
+                114.808877,
+                32.558882
+              ],
+              [
+                114.810136,
+                32.569007
+              ],
+              [
+                114.802649,
+                32.583433
+              ],
+              [
+                114.791325,
+                32.584141
+              ],
+              [
+                114.788997,
+                32.607168
+              ],
+              [
+                114.79403,
+                32.613695
+              ],
+              [
+                114.806172,
+                32.609495
+              ],
+              [
+                114.813785,
+                32.611165
+              ],
+              [
+                114.822404,
+                32.622853
+              ],
+              [
+                114.856565,
+                32.61926
+              ],
+              [
+                114.862856,
+                32.624117
+              ],
+              [
+                114.884875,
+                32.616225
+              ],
+              [
+                114.89167,
+                32.61749
+              ],
+              [
+                114.901799,
+                32.634741
+              ],
+              [
+                114.901296,
+                32.648954
+              ],
+              [
+                114.911047,
+                32.653405
+              ],
+              [
+                114.919351,
+                32.648903
+              ],
+              [
+                114.93357,
+                32.649308
+              ],
+              [
+                114.957791,
+                32.659979
+              ],
+              [
+                114.985472,
+                32.659322
+              ],
+              [
+                115.030077,
+                32.6486
+              ],
+              [
+                115.05002,
+                32.640153
+              ],
+              [
+                115.065182,
+                32.629075
+              ],
+              [
+                115.090599,
+                32.637017
+              ],
+              [
+                115.098022,
+                32.63378
+              ],
+              [
+                115.099532,
+                32.619868
+              ],
+              [
+                115.111548,
+                32.607421
+              ],
+              [
+                115.12476,
+                32.607573
+              ],
+              [
+                115.140362,
+                32.599223
+              ],
+              [
+                115.137028,
+                32.587026
+              ],
+              [
+                115.145647,
+                32.580143
+              ],
+              [
+                115.152127,
+                32.590012
+              ],
+              [
+                115.175341,
+                32.605346
+              ],
+              [
+                115.192013,
+                32.603018
+              ],
+              [
+                115.204029,
+                32.606662
+              ],
+              [
+                115.209125,
+                32.612936
+              ],
+              [
+                115.199437,
+                32.619665
+              ],
+              [
+                115.202079,
+                32.632464
+              ],
+              [
+                115.19453,
+                32.63125
+              ],
+              [
+                115.194907,
+                32.642379
+              ],
+              [
+                115.202708,
+                32.645515
+              ],
+              [
+                115.209503,
+                32.636714
+              ],
+              [
+                115.208874,
+                32.649864
+              ],
+              [
+                115.219443,
+                32.659221
+              ],
+              [
+                115.203967,
+                32.65391
+              ],
+              [
+                115.205162,
+                32.672924
+              ],
+              [
+                115.193649,
+                32.682885
+              ],
+              [
+                115.189434,
+                32.678789
+              ],
+              [
+                115.19692,
+                32.672722
+              ],
+              [
+                115.182954,
+                32.666755
+              ],
+              [
+                115.18459,
+                32.678284
+              ],
+              [
+                115.178487,
+                32.682885
+              ],
+              [
+                115.182702,
+                32.694512
+              ],
+              [
+                115.179116,
+                32.701943
+              ],
+              [
+                115.184338,
+                32.720391
+              ],
+              [
+                115.179368,
+                32.726354
+              ],
+              [
+                115.189623,
+                32.770913
+              ],
+              [
+                115.183583,
+                32.776923
+              ],
+              [
+                115.182073,
+                32.787326
+              ],
+              [
+                115.19107,
+                32.790053
+              ],
+              [
+                115.206923,
+                32.785306
+              ],
+              [
+                115.212334,
+                32.787175
+              ],
+              [
+                115.206357,
+                32.797678
+              ],
+              [
+                115.19692,
+                32.802121
+              ],
+              [
+                115.189937,
+                32.812522
+              ],
+              [
+                115.195599,
+                32.828877
+              ],
+              [
+                115.188868,
+                32.840435
+              ],
+              [
+                115.202645,
+                32.843514
+              ],
+              [
+                115.198619,
+                32.854363
+              ],
+              [
+                115.191132,
+                32.857492
+              ],
+              [
+                115.176222,
+                32.856281
+              ],
+              [
+                115.159802,
+                32.862285
+              ],
+              [
+                115.154958,
+                32.877269
+              ],
+              [
+                115.142501,
+                32.884332
+              ],
+              [
+                115.140551,
+                32.897496
+              ],
+              [
+                115.116141,
+                32.90022
+              ],
+              [
+                115.102426,
+                32.894268
+              ],
+              [
+                115.086258,
+                32.903246
+              ],
+              [
+                115.067321,
+                32.903246
+              ],
+              [
+                115.029762,
+                32.906827
+              ],
+              [
+                115.027435,
+                32.91434
+              ],
+              [
+                115.036746,
+                32.916307
+              ],
+              [
+                115.035425,
+                32.932341
+              ],
+              [
+                115.023975,
+                32.933702
+              ],
+              [
+                115.009253,
+                32.940155
+              ],
+              [
+                114.978803,
+                32.941314
+              ],
+              [
+                114.959993,
+                32.9395
+              ],
+              [
+                114.943573,
+                32.935013
+              ],
+              [
+                114.936023,
+                32.952152
+              ],
+              [
+                114.924133,
+                32.958956
+              ],
+              [
+                114.91608,
+                32.971304
+              ],
+              [
+                114.893809,
+                32.972664
+              ],
+              [
+                114.886071,
+                32.978611
+              ],
+              [
+                114.882799,
+                32.990351
+              ],
+              [
+                114.901547,
+                33.000326
+              ],
+              [
+                114.891922,
+                33.020525
+              ],
+              [
+                114.915388,
+                33.016093
+              ],
+              [
+                114.924321,
+                33.016697
+              ],
+              [
+                114.936967,
+                33.025511
+              ],
+              [
+                114.923,
+                33.036087
+              ],
+              [
+                114.922497,
+                33.048322
+              ],
+              [
+                114.91501,
+                33.059801
+              ],
+              [
+                114.91954,
+                33.068812
+              ],
+              [
+                114.914004,
+                33.082805
+              ],
+              [
+                114.897269,
+                33.08658
+              ],
+              [
+                114.897206,
+                33.080591
+              ],
+              [
+                114.857446,
+                33.075306
+              ],
+              [
+                114.854552,
+                33.055421
+              ],
+              [
+                114.850022,
+                33.052753
+              ],
+              [
+                114.833917,
+                33.059449
+              ],
+              [
+                114.817937,
+                33.060456
+              ],
+              [
+                114.800447,
+                33.05819
+              ],
+              [
+                114.7951,
+                33.068561
+              ],
+              [
+                114.77157,
+                33.069517
+              ],
+              [
+                114.77069,
+                33.087184
+              ],
+              [
+                114.765845,
+                33.090858
+              ],
+              [
+                114.761756,
+                33.10535
+              ],
+              [
+                114.742757,
+                33.106709
+              ],
+              [
+                114.731621,
+                33.120746
+              ],
+              [
+                114.720863,
+                33.125626
+              ],
+              [
+                114.717592,
+                33.144036
+              ],
+              [
+                114.705764,
+                33.14821
+              ],
+              [
+                114.704003,
+                33.160531
+              ],
+              [
+                114.681354,
+                33.170487
+              ],
+              [
+                114.697648,
+                33.197081
+              ],
+              [
+                114.69897,
+                33.208139
+              ],
+              [
+                114.717529,
+                33.221808
+              ],
+              [
+                114.73074,
+                33.261597
+              ],
+              [
+                114.728853,
+                33.289368
+              ],
+              [
+                114.722373,
+                33.301117
+              ],
+              [
+                114.705764,
+                33.302171
+              ],
+              [
+                114.685255,
+                33.298205
+              ],
+              [
+                114.684122,
+                33.314671
+              ],
+              [
+                114.665563,
+                33.313416
+              ],
+              [
+                114.669715,
+                33.31944
+              ],
+              [
+                114.662481,
+                33.322954
+              ],
+              [
+                114.654491,
+                33.341924
+              ],
+              [
+                114.645557,
+                33.34624
+              ],
+              [
+                114.623664,
+                33.341723
+              ],
+              [
+                114.615925,
+                33.344383
+              ],
+              [
+                114.605293,
+                33.35778
+              ],
+              [
+                114.589314,
+                33.362847
+              ],
+              [
+                114.585728,
+                33.374837
+              ],
+              [
+                114.575536,
+                33.376392
+              ],
+              [
+                114.577423,
+                33.390035
+              ],
+              [
+                114.572013,
+                33.396053
+              ],
+              [
+                114.57239,
+                33.406835
+              ],
+              [
+                114.563016,
+                33.42333
+              ],
+              [
+                114.554146,
+                33.42714
+              ],
+              [
+                114.537663,
+                33.426589
+              ],
+              [
+                114.52313,
+                33.418969
+              ],
+              [
+                114.488654,
+                33.417565
+              ],
+              [
+                114.490415,
+                33.43481
+              ],
+              [
+                114.480098,
+                33.443131
+              ],
+              [
+                114.464118,
+                33.437467
+              ],
+              [
+                114.459777,
+                33.454458
+              ],
+              [
+                114.446628,
+                33.464581
+              ],
+              [
+                114.407937,
+                33.460873
+              ],
+              [
+                114.402967,
+                33.457064
+              ],
+              [
+                114.382143,
+                33.454508
+              ],
+              [
+                114.368932,
+                33.44659
+              ],
+              [
+                114.362137,
+                33.454057
+              ],
+              [
+                114.349429,
+                33.452604
+              ],
+              [
+                114.347227,
+                33.462376
+              ],
+              [
+                114.307907,
+                33.481316
+              ],
+              [
+                114.284629,
+                33.472548
+              ],
+              [
+                114.266636,
+                33.461625
+              ],
+              [
+                114.247574,
+                33.45967
+              ],
+              [
+                114.230714,
+                33.451551
+              ],
+              [
+                114.211399,
+                33.453757
+              ],
+              [
+                114.195294,
+                33.447692
+              ],
+              [
+                114.190575,
+                33.426489
+              ],
+              [
+                114.171324,
+                33.440926
+              ],
+              [
+                114.180384,
+                33.453656
+              ],
+              [
+                114.171639,
+                33.459019
+              ],
+              [
+                114.159937,
+                33.456713
+              ],
+              [
+                114.150312,
+                33.460372
+              ],
+              [
+                114.151507,
+                33.468139
+              ],
+              [
+                114.131501,
+                33.472298
+              ],
+              [
+                114.130683,
+                33.495093
+              ],
+              [
+                114.115836,
+                33.488631
+              ],
+              [
+                114.103505,
+                33.491586
+              ],
+              [
+                114.104071,
+                33.499351
+              ],
+              [
+                114.118101,
+                33.502406
+              ],
+              [
+                114.116276,
+                33.51027
+              ],
+              [
+                114.099101,
+                33.503108
+              ],
+              [
+                114.075572,
+                33.517782
+              ],
+              [
+                114.055692,
+                33.523942
+              ],
+              [
+                114.052168,
+                33.528999
+              ],
+              [
+                114.038579,
+                33.5296
+              ],
+              [
+                114.033735,
+                33.523892
+              ],
+              [
+                114.014924,
+                33.522039
+              ],
+              [
+                114.01354,
+                33.511071
+              ],
+              [
+                114.001084,
+                33.510671
+              ],
+              [
+                113.998693,
+                33.500904
+              ],
+              [
+                113.981329,
+                33.482268
+              ],
+              [
+                113.9712,
+                33.482619
+              ],
+              [
+                113.967929,
+                33.477408
+              ],
+              [
+                113.95434,
+                33.473901
+              ],
+              [
+                113.94528,
+                33.465633
+              ],
+              [
+                113.933768,
+                33.465884
+              ],
+              [
+                113.914139,
+                33.478511
+              ],
+              [
+                113.865508,
+                33.479362
+              ],
+              [
+                113.856134,
+                33.47796
+              ],
+              [
+                113.847515,
+                33.466836
+              ],
+              [
+                113.825999,
+                33.460723
+              ],
+              [
+                113.805804,
+                33.446189
+              ],
+              [
+                113.799513,
+                33.43481
+              ],
+              [
+                113.771139,
+                33.435713
+              ],
+              [
+                113.766861,
+                33.432154
+              ],
+              [
+                113.721187,
+                33.432705
+              ],
+              [
+                113.713197,
+                33.430249
+              ],
+              [
+                113.710429,
+                33.417013
+              ],
+              [
+                113.693065,
+                33.418216
+              ],
+              [
+                113.688347,
+                33.407737
+              ],
+              [
+                113.676897,
+                33.378298
+              ],
+              [
+                113.655003,
+                33.371175
+              ],
+              [
+                113.639149,
+                33.355221
+              ],
+              [
+                113.642106,
+                33.34905
+              ],
+              [
+                113.640282,
+                33.325162
+              ],
+              [
+                113.627448,
+                33.312212
+              ],
+              [
+                113.618766,
+                33.291477
+              ],
+              [
+                113.613167,
+                33.261798
+              ],
+              [
+                113.606875,
+                33.237786
+              ],
+              [
+                113.613796,
+                33.211506
+              ],
+              [
+                113.627511,
+                33.186475
+              ],
+              [
+                113.644623,
+                33.186575
+              ],
+              [
+                113.64846,
+                33.182402
+              ],
+              [
+                113.63506,
+                33.160833
+              ],
+              [
+                113.626001,
+                33.150423
+              ],
+              [
+                113.617004,
+                33.147255
+              ],
+              [
+                113.600144,
+                33.163146
+              ],
+              [
+                113.593601,
+                33.157715
+              ],
+              [
+                113.573846,
+                33.15691
+              ],
+              [
+                113.561201,
+                33.161134
+              ],
+              [
+                113.550254,
+                33.140113
+              ],
+              [
+                113.541321,
+                33.14308
+              ],
+              [
+                113.532324,
+                33.152736
+              ],
+              [
+                113.521378,
+                33.154698
+              ],
+              [
+                113.514772,
+                33.162492
+              ],
+              [
+                113.499987,
+                33.156206
+              ],
+              [
+                113.46029,
+                33.156458
+              ],
+              [
+                113.449217,
+                33.160581
+              ],
+              [
+                113.432545,
+                33.15681
+              ],
+              [
+                113.413105,
+                33.156659
+              ],
+              [
+                113.397881,
+                33.14997
+              ],
+              [
+                113.388821,
+                33.128393
+              ],
+              [
+                113.386619,
+                33.113451
+              ],
+              [
+                113.357239,
+                33.091613
+              ],
+              [
+                113.333836,
+                33.085976
+              ],
+              [
+                113.325469,
+                33.079181
+              ],
+              [
+                113.313138,
+                33.075608
+              ],
+              [
+                113.301436,
+                33.080138
+              ],
+              [
+                113.271427,
+                33.08049
+              ],
+              [
+                113.257335,
+                33.083409
+              ],
+              [
+                113.250477,
+                33.077822
+              ],
+              [
+                113.237077,
+                33.077017
+              ],
+              [
+                113.219273,
+                33.064584
+              ],
+              [
+                113.206124,
+                33.070826
+              ],
+              [
+                113.190019,
+                33.067202
+              ],
+              [
+                113.18574,
+                33.056932
+              ],
+              [
+                113.165546,
+                33.048977
+              ],
+              [
+                113.161456,
+                33.038906
+              ],
+              [
+                113.142016,
+                33.016647
+              ],
+              [
+                113.127358,
+                33.010552
+              ],
+              [
+                113.120312,
+                33.001182
+              ],
+              [
+                113.116097,
+                32.986421
+              ],
+              [
+                113.108799,
+                32.97332
+              ],
+              [
+                113.097789,
+                32.946406
+              ],
+              [
+                113.109805,
+                32.94202
+              ],
+              [
+                113.11553,
+                32.932996
+              ],
+              [
+                113.140129,
+                32.930627
+              ],
+              [
+                113.145854,
+                32.940306
+              ],
+              [
+                113.15592,
+                32.936122
+              ],
+              [
+                113.161897,
+                32.92745
+              ],
+              [
+                113.181714,
+                32.920644
+              ],
+              [
+                113.199015,
+                32.920291
+              ],
+              [
+                113.208137,
+                32.916408
+              ],
+              [
+                113.201154,
+                32.888821
+              ],
+              [
+                113.205558,
+                32.884937
+              ],
+              [
+                113.195681,
+                32.871871
+              ],
+              [
+                113.187062,
+                32.866422
+              ],
+              [
+                113.177059,
+                32.852446
+              ],
+              [
+                113.167999,
+                32.847046
+              ],
+              [
+                113.165797,
+                32.838063
+              ],
+              [
+                113.175737,
+                32.83241
+              ],
+              [
+                113.187062,
+                32.819943
+              ],
+              [
+                113.17838,
+                32.806665
+              ],
+              [
+                113.184294,
+                32.801364
+              ],
+              [
+                113.185237,
+                32.788286
+              ],
+              [
+                113.177247,
+                32.775307
+              ],
+              [
+                113.199959,
+                32.750253
+              ],
+              [
+                113.201343,
+                32.738835
+              ],
+              [
+                113.193982,
+                32.733378
+              ],
+              [
+                113.191528,
+                32.717712
+              ],
+              [
+                113.207697,
+                32.717257
+              ],
+              [
+                113.213736,
+                32.703055
+              ],
+              [
+                113.231226,
+                32.701488
+              ],
+              [
+                113.241103,
+                32.691429
+              ],
+              [
+                113.236259,
+                32.682581
+              ],
+              [
+                113.259914,
+                32.677778
+              ],
+              [
+                113.269351,
+                32.662053
+              ],
+              [
+                113.258467,
+                32.653961
+              ],
+              [
+                113.252679,
+                32.666907
+              ],
+              [
+                113.243305,
+                32.66984
+              ],
+              [
+                113.236196,
+                32.679143
+              ],
+              [
+                113.220594,
+                32.684452
+              ],
+              [
+                113.210276,
+                32.678941
+              ],
+              [
+                113.20172,
+                32.660333
+              ],
+              [
+                113.18788,
+                32.652241
+              ],
+              [
+                113.186181,
+                32.646476
+              ],
+              [
+                113.19222,
+                32.635398
+              ],
+              [
+                113.20279,
+                32.632262
+              ],
+              [
+                113.201783,
+                32.614504
+              ],
+              [
+                113.196121,
+                32.606156
+              ],
+              [
+                113.200651,
+                32.585103
+              ],
+              [
+                113.198575,
+                32.579536
+              ],
+              [
+                113.205432,
+                32.569969
+              ],
+              [
+                113.221286,
+                32.570424
+              ],
+              [
+                113.243871,
+                32.578827
+              ],
+              [
+                113.249785,
+                32.593555
+              ],
+              [
+                113.280486,
+                32.595984
+              ],
+              [
+                113.282311,
+                32.591986
+              ],
+              [
+                113.303135,
+                32.586723
+              ],
+              [
+                113.31037,
+                32.579536
+              ],
+              [
+                113.315717,
+                32.587988
+              ],
+              [
+                113.321631,
+                32.58733
+              ],
+              [
+                113.326349,
+                32.577561
+              ],
+              [
+                113.342832,
+                32.567893
+              ],
+              [
+                113.351577,
+                32.573664
+              ],
+              [
+                113.364537,
+                32.569462
+              ],
+              [
+                113.372024,
+                32.576245
+              ],
+              [
+                113.382216,
+                32.593353
+              ],
+              [
+                113.400712,
+                32.61324
+              ],
+              [
+                113.422354,
+                32.605245
+              ],
+              [
+                113.437893,
+                32.589203
+              ],
+              [
+                113.447393,
+                32.584698
+              ],
+              [
+                113.458528,
+                32.585508
+              ],
+              [
+                113.458843,
+                32.575689
+              ],
+              [
+                113.472621,
+                32.578574
+              ],
+              [
+                113.492752,
+                32.567741
+              ],
+              [
+                113.512759,
+                32.571538
+              ],
+              [
+                113.513513,
+                32.579384
+              ],
+              [
+                113.524397,
+                32.593505
+              ],
+              [
+                113.542264,
+                32.589152
+              ],
+              [
+                113.565416,
+                32.602715
+              ],
+              [
+                113.571582,
+                32.624775
+              ],
+              [
+                113.583535,
+                32.633577
+              ],
+              [
+                113.588882,
+                32.650421
+              ],
+              [
+                113.596243,
+                32.649763
+              ],
+              [
+                113.594041,
+                32.661092
+              ],
+              [
+                113.619332,
+                32.667362
+              ],
+              [
+                113.616941,
+                32.69158
+              ],
+              [
+                113.609832,
+                32.696484
+              ],
+              [
+                113.614676,
+                32.711344
+              ],
+              [
+                113.623358,
+                32.706138
+              ],
+              [
+                113.642987,
+                32.703106
+              ],
+              [
+                113.649089,
+                32.708261
+              ],
+              [
+                113.668404,
+                32.692389
+              ],
+              [
+                113.696274,
+                32.695624
+              ],
+              [
+                113.717727,
+                32.683694
+              ],
+              [
+                113.729114,
+                32.669688
+              ],
+              [
+                113.761199,
+                32.652697
+              ],
+              [
+                113.771894,
+                32.655276
+              ],
+              [
+                113.781079,
+                32.652595
+              ],
+              [
+                113.791963,
+                32.642075
+              ],
+              [
+                113.785169,
+                32.631402
+              ],
+              [
+                113.799072,
+                32.620879
+              ],
+              [
+                113.809264,
+                32.603828
+              ],
+              [
+                113.814423,
+                32.600842
+              ]
+            ]
+          ]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "adcode": 419001,
+        "name": "娴庢簮甯�",
+        "center": [
+          112.590047,
+          35.090378
+        ],
+        "centroid": [
+          112.398673,
+          35.099131
+        ],
+        "childrenNum": 0,
+        "level": "city",
+        "parent": {
+          "adcode": 410000
+        },
+        "subFeatureIndex": 17,
+        "acroutes": [
+          100000,
+          410000
+        ]
+      },
+      "geometry": {
+        "type": "MultiPolygon",
+        "coordinates": [
+          [
+            [
+              [
+                112.758,
+                35.204436
+              ],
+              [
+                112.744662,
+                35.205123
+              ],
+              [
+                112.735351,
+                35.210424
+              ],
+              [
+                112.720315,
+                35.206448
+              ],
+              [
+                112.71264,
+                35.18701
+              ],
+              [
+                112.703077,
+                35.20154
+              ],
+              [
+                112.707418,
+                35.216951
+              ],
+              [
+                112.695339,
+                35.218718
+              ],
+              [
+                112.684267,
+                35.227256
+              ],
+              [
+                112.682694,
+                35.233733
+              ],
+              [
+                112.67288,
+                35.234272
+              ],
+              [
+                112.655012,
+                35.244232
+              ],
+              [
+                112.651426,
+                35.259242
+              ],
+              [
+                112.645009,
+                35.260566
+              ],
+              [
+                112.639159,
+                35.247862
+              ],
+              [
+                112.633056,
+                35.265569
+              ],
+              [
+                112.618335,
+                35.254043
+              ],
+              [
+                112.617643,
+                35.244575
+              ],
+              [
+                112.634188,
+                35.239326
+              ],
+              [
+                112.637208,
+                35.225686
+              ],
+              [
+                112.619027,
+                35.220043
+              ],
+              [
+                112.602544,
+                35.22284
+              ],
+              [
+                112.574988,
+                35.221122
+              ],
+              [
+                112.567879,
+                35.211749
+              ],
+              [
+                112.559071,
+                35.21278
+              ],
+              [
+                112.536234,
+                35.223429
+              ],
+              [
+                112.513523,
+                35.21857
+              ],
+              [
+                112.489805,
+                35.229955
+              ],
+              [
+                112.482444,
+                35.224655
+              ],
+              [
+                112.472378,
+                35.230298
+              ],
+              [
+                112.45772,
+                35.226373
+              ],
+              [
+                112.423999,
+                35.23805
+              ],
+              [
+                112.401413,
+                35.241877
+              ],
+              [
+                112.390718,
+                35.238786
+              ],
+              [
+                112.376751,
+                35.224115
+              ],
+              [
+                112.367315,
+                35.22019
+              ],
+              [
+                112.320697,
+                35.21911
+              ],
+              [
+                112.306667,
+                35.220975
+              ],
+              [
+                112.288548,
+                35.21754
+              ],
+              [
+                112.304465,
+                35.251884
+              ],
+              [
+                112.294462,
+                35.252816
+              ],
+              [
+                112.282823,
+                35.242024
+              ],
+              [
+                112.261307,
+                35.24119
+              ],
+              [
+                112.242748,
+                35.234812
+              ],
+              [
+                112.21664,
+                35.240209
+              ],
+              [
+                112.220792,
+                35.247028
+              ],
+              [
+                112.217269,
+                35.253258
+              ],
+              [
+                112.191097,
+                35.256348
+              ],
+              [
+                112.173545,
+                35.263803
+              ],
+              [
+                112.134287,
+                35.271258
+              ],
+              [
+                112.120006,
+                35.265275
+              ],
+              [
+                112.110947,
+                35.27013
+              ],
+              [
+                112.115665,
+                35.273072
+              ],
+              [
+                112.093961,
+                35.279202
+              ],
+              [
+                112.075842,
+                35.277143
+              ],
+              [
+                112.058793,
+                35.279889
+              ],
+              [
+                112.055018,
+                35.271454
+              ],
+              [
+                112.067978,
+                35.265275
+              ],
+              [
+                112.079617,
+                35.242367
+              ],
+              [
+                112.08119,
+                35.221613
+              ],
+              [
+                112.058919,
+                35.206301
+              ],
+              [
+                112.042058,
+                35.200264
+              ],
+              [
+                112.041492,
+                35.189808
+              ],
+              [
+                112.051935,
+                35.177044
+              ],
+              [
+                112.066279,
+                35.153522
+              ],
+              [
+                112.060177,
+                35.140752
+              ],
+              [
+                112.067223,
+                35.136233
+              ],
+              [
+                112.056276,
+                35.098449
+              ],
+              [
+                112.056591,
+                35.089061
+              ],
+              [
+                112.062756,
+                35.078591
+              ],
+              [
+                112.062127,
+                35.055779
+              ],
+              [
+                112.053571,
+                35.044223
+              ],
+              [
+                112.038912,
+                35.045501
+              ],
+              [
+                112.035075,
+                35.033845
+              ],
+              [
+                112.042436,
+                35.027845
+              ],
+              [
+                112.09352,
+                35.029911
+              ],
+              [
+                112.108242,
+                35.029222
+              ],
+              [
+                112.125857,
+                35.021204
+              ],
+              [
+                112.1514,
+                35.015399
+              ],
+              [
+                112.169896,
+                35.00241
+              ],
+              [
+                112.1877,
+                34.972981
+              ],
+              [
+                112.212047,
+                34.965007
+              ],
+              [
+                112.226831,
+                34.956589
+              ],
+              [
+                112.247844,
+                34.940735
+              ],
+              [
+                112.258099,
+                34.942212
+              ],
+              [
+                112.267284,
+                34.953537
+              ],
+              [
+                112.28188,
+                34.960232
+              ],
+              [
+                112.301068,
+                34.945462
+              ],
+              [
+                112.3212,
+                34.941375
+              ],
+              [
+                112.334537,
+                34.941425
+              ],
+              [
+                112.360268,
+                34.931428
+              ],
+              [
+                112.384993,
+                34.924533
+              ],
+              [
+                112.39097,
+                34.918574
+              ],
+              [
+                112.433247,
+                34.920987
+              ],
+              [
+                112.462501,
+                34.915668
+              ],
+              [
+                112.489616,
+                34.90286
+              ],
+              [
+                112.496536,
+                34.895717
+              ],
+              [
+                112.505659,
+                34.898821
+              ],
+              [
+                112.521072,
+                34.892761
+              ],
+              [
+                112.534221,
+                34.893746
+              ],
+              [
+                112.537304,
+                34.916013
+              ],
+              [
+                112.527426,
+                34.929163
+              ],
+              [
+                112.515976,
+                34.929212
+              ],
+              [
+                112.511447,
+                34.92084
+              ],
+              [
+                112.496914,
+                34.921726
+              ],
+              [
+                112.505155,
+                34.942459
+              ],
+              [
+                112.519436,
+                34.940341
+              ],
+              [
+                112.527867,
+                34.932019
+              ],
+              [
+                112.551207,
+                34.938569
+              ],
+              [
+                112.563853,
+                34.949696
+              ],
+              [
+                112.5692,
+                34.958608
+              ],
+              [
+                112.579392,
+                34.971751
+              ],
+              [
+                112.596001,
+                34.971013
+              ],
+              [
+                112.614182,
+                34.98002
+              ],
+              [
+                112.624752,
+                34.977903
+              ],
+              [
+                112.644695,
+                34.978888
+              ],
+              [
+                112.653062,
+                34.988681
+              ],
+              [
+                112.666462,
+                34.9875
+              ],
+              [
+                112.675962,
+                34.993504
+              ],
+              [
+                112.684581,
+                35.012497
+              ],
+              [
+                112.698988,
+                35.023221
+              ],
+              [
+                112.72711,
+                35.035026
+              ],
+              [
+                112.735289,
+                35.043338
+              ],
+              [
+                112.736043,
+                35.060008
+              ],
+              [
+                112.743341,
+                35.06458
+              ],
+              [
+                112.753219,
+                35.08508
+              ],
+              [
+                112.754288,
+                35.098891
+              ],
+              [
+                112.766304,
+                35.107196
+              ],
+              [
+                112.761963,
+                35.158041
+              ],
+              [
+                112.76687,
+                35.182985
+              ],
+              [
+                112.758,
+                35.204436
+              ]
+            ]
+          ]
+        ]
+      }
+    }
+  ]
+}
diff --git a/project-web/src/views/dataV/components/map.vue b/project-web/src/views/dataV/components/map.vue
new file mode 100644
index 0000000..4508969
--- /dev/null
+++ b/project-web/src/views/dataV/components/map.vue
@@ -0,0 +1,318 @@
+<template>
+  <div ref="dataMap" style="width: 100%; height: 100%"></div>
+</template>
+
+<script>
+import henan from './henan.json';
+import echarts from 'echarts';
+import dataVRequest from '@/api/dataV.js';
+
+echarts.registerMap('娌冲崡', henan); //鍔犺浇json鏁版嵁锛屽苟娉ㄥ唽鍒癳chars涓�
+export default {
+  name: 'data-map',
+  async mounted() {
+    const myChart5 = echarts.init(this.$refs.dataMap);
+    const resData = await dataVRequest.queryProjectMap();
+    console.log('resData',resData);
+    const option = {
+      backgroundColor: 'rgba(21, 21, 21, 0.2)', //鍦板浘鑳屾櫙鑹�
+      //鏄剧ず鎮诞绐楀彛--鏍囩
+      tooltip: {
+        trigger: 'item',
+        confine: true,
+        backgroundColor: 'rgba(21, 21, 21, 0.82)', //鏍囩鑳屾櫙鑹�
+        borderColor: '#FFFFCC',
+        showDelay: 0,
+        hideDelay: 0,
+        enterable: true, //榧犳爣鏄惁鍙繘鍏ユ彁绀烘娴眰涓紝榛樿涓篺alse锛屽闇�璇︽儏鍐呬氦浜掞紝濡傛坊鍔犻摼鎺ワ紝鎸夐挳锛屽彲璁剧疆涓� true
+        transitionDuration: 0, //鎻愮ず妗嗘诞灞傜殑绉诲姩鍔ㄧ敾杩囨浮鏃堕棿锛屽崟浣嶆槸 s锛岃缃负 0 鐨勬椂鍊欎細绱ц窡鐫�榧犳爣绉诲姩
+        extraCssText: 'z-index:100;', //淇敼鏍囩澶у皬鏍峰紡绛�
+        //   鐐瑰嚮浜嬩欢锛岀偣鍑诲渾鐐癸紝璺宠浆
+        formatter: function (params, ticket, callback) {
+          //鏍规嵁涓氬姟鑷繁鎷撳睍瑕佹樉绀虹殑鍐呭
+          // ing:杩涜涓�
+          // wait:鏈紑宸�
+          // name: 鍩庡競鍚�;
+          // end: 宸插畬宸�;
+          // close: 宸插叧闂�
+          // expired: 宸茶秴鏈�
+          // planMoney: 璁″垝鎬绘姇璧�
+          // payMoney: 宸蹭笅杈炬姇璧�
+          let res = '';
+          res = `
+            <div style="position: absolute;top: 0;left: 0;background-color: rgba(17, 66, 138,0.7);z-index: 1000;width: 150px; padding: 8px; border: 1px solid #A5EBFF;color: #fff;">
+              <div style="font-size: 16px;font-weight: bold;line-height: 20px;margin-bottom: 8px;">${params.name}</div>
+              <div style="display: flex;justify-content: space-between;align-items: center;">
+                <p style="font-size: 12px;">杩涜涓�</p>
+                <p style="font-size: 16px;">${params.value}涓�</p>
+              </div>
+              <div style="display: flex;justify-content: space-between;align-items: center;">
+                <p style="font-size: 12px;">鏈紑宸�</p>
+                <p style="font-size: 16px;">${params.data.ywtd}涓�</p>
+              </div>
+              <div style="display: flex;justify-content: space-between;align-items: center;">
+                <p style="font-size: 12px;">宸插畬宸�</p>
+                <p style="font-size: 16px;">416涓�</p>
+              </div>
+              <div style="display: flex;justify-content: space-between;align-items: center;">
+                <p style="font-size: 12px;">宸插叧闂�</p>
+                <p style="font-size: 16px;">416涓�</p>
+              </div>
+              <div style="display: flex;justify-content: space-between;align-items: center;">
+                <p style="font-size: 12px;">宸茶秴鏈�</p>
+                <p style="font-size: 16px;">416涓�</p>
+              </div>
+              <div style="display: flex;justify-content: space-between;align-items: center;">
+                <p style="font-size: 12px;">璁″垝鎬绘姇璧�</p>
+                <p style="font-size: 16px;">416涓�</p>
+              </div>
+              <div style="display: flex;justify-content: space-between;align-items: center;">
+                <p style="font-size: 12px;">宸蹭笅杈炬姇璧�</p>
+                <p style="font-size: 16px;">416涓�</p>
+              </div>
+            </div>`;
+          return res;
+        },
+      },
+      geo: {
+        map: '娌冲崡', // 鍙�� china  world  鐪佷唤锛堟渤鍗楃渷锛�
+        // 鍏充簬map鐨勫�硷細涓浗銆佷笘鐣屽湴鍥炬槸鑻辨枃锛岀渷浠芥槸涓枃銆傛瘮濡� 鈥榗hina鈥� 锛�'娴欐睙鈥欑瓑锛岃嫢濉啓'zhejiang'鏄壘涓嶅埌鐨勩�傚紩鐢ㄤ箣鍓嶅彲浠ユ煡鐪嬩竴涓媕s鏂囦欢鍟︺�備竴瀹氳寮曞
+        zoom: 1.2, //
+        //   center: [113.625351,34.746303, 10],//鍧愭爣瀹氫綅鍜宭eft top  bottom  right鍐茬獊锛屼娇鐢ㄤ竴涓氨鍙互鍟�
+        left: 'center', //宸﹀彸灞呬腑
+        top: 'middle', //姘村钩灞呬腑
+        label: {
+          //  鏄惁鏄剧ず甯傚尯鍚嶅瓧
+          normal: {
+            show: true,
+            color: '#fff',
+            fontSize: 16,
+          },
+          //   hover楂樹寒鐨勬椂鍊欐樉绀哄競鍖哄悕瀛�
+          emphasis: {
+            show: true, //鍦板浘涓悕绉扮殑鏄剧ず涓庡惁
+            color: '#fff',
+          },
+        },
+        roam: true, //鏄惁鍏佽缂╂斁
+        scaleLimit: {
+          //鎵�灞炵粍浠剁殑z鍒嗗眰锛寊鍊煎皬鐨勫浘褰細琚珃鍊煎ぇ鐨勫浘褰㈣鐩�
+          min: 1, //鏈�灏忕殑缂╂斁鍊�
+          max: 40, //鏈�澶х殑缂╂斁鍊�
+        },
+        //   鍦板浘澶栬瀹氬埗
+        itemStyle: {
+          //   姝e父鏄剧ず鐨勬牱寮�
+          normal: {
+            shadowColor: 'rgba(0, 0, 0, 0.5)',
+            shadowBlur: 10,
+            shadowOffsetX: -5,
+            shadowOffsetY: -5,
+            areaColor: {
+              type: 'linear',
+              x: 1,
+              y: 0,
+              x2: 0.5,
+              y2: 1,
+              colorStops: [
+                {
+                  offset: 0,
+                  color: '#5E9BBE', // 0% 澶勭殑棰滆壊
+                },
+                {
+                  offset: 1,
+                  color: '#2972D6', // 100% 澶勭殑棰滆壊
+                },
+              ],
+              global: false, // 缂虹渷涓� false
+            },
+            borderColor: '#8ACFEE', //鐪佸競杈圭晫绾�00fcff 516a89
+            borderWidth: 1,
+          },
+          // 榧犳爣鎮诞涓嬫牱寮�
+          emphasis: {
+            areaColor: {
+              type: 'linear',
+              x: 1,
+              y: 0,
+              x2: 0.5,
+              y2: 1,
+              colorStops: [
+                {
+                  offset: 0,
+                  color: '#F9D746', // 0% 澶勭殑棰滆壊
+                },
+                {
+                  offset: 1,
+                  color: '#D88B10', // 100% 澶勭殑棰滆壊
+                },
+              ],
+              global: false, // 缂虹渷涓� false
+            },
+          },
+        },
+      },
+      series: [
+        // 閰嶇疆鏁版嵁鐨勬樉绀�
+        {
+          type: 'map', // 绫诲瀷map
+          map: '娌冲崡',
+          label: {
+            show: true,
+          },
+          geoIndex: 0, // 鎸囧畾geo灞炴�у悗锛宻eries-map.map 灞炴�э紝浠ュ強 series-map.itemStyle 绛夋牱寮忛厤缃笉鍐嶈捣浣滅敤锛岃�屾槸閲囩敤 geo 涓殑鐩稿簲灞炴�с��
+          data: [
+            {
+              name: '閮戝窞甯�',
+              value: 123344,
+              ywtd: 998,
+              gdzs: 9802,
+              jxz: 863,
+              zsk: 233,
+            },
+            {
+              name: '鐒︿綔甯�',
+              value: 123344,
+              ywtd: 998,
+              gdzs: 9802,
+              jxz: 863,
+              zsk: 233,
+            },
+            {
+              name: '鏂颁埂甯�',
+              value: 123344,
+              ywtd: 998,
+              gdzs: 9802,
+              jxz: 863,
+              zsk: 233,
+            },
+            {
+              name: '鍟嗕笜甯�',
+              value: 123344,
+              ywtd: 998,
+              gdzs: 9802,
+              jxz: 863,
+              zsk: 233,
+            },
+            {
+              name: '淇¢槼甯�',
+              value: 123344,
+              ywtd: 998,
+              gdzs: 9802,
+              jxz: 863,
+              zsk: 233,
+            },
+            {
+              name: '鍛ㄥ彛甯�',
+              value: 123344,
+              ywtd: 998,
+              gdzs: 9802,
+              jxz: 863,
+              zsk: 233,
+            },
+            {
+              name: '寮�灏佸競',
+              value: 123344,
+              ywtd: 998,
+              gdzs: 9802,
+              jxz: 863,
+              zsk: 233,
+            },
+            {
+              name: '椹婚┈搴楀競',
+              value: 123344,
+              ywtd: 998,
+              gdzs: 9802,
+              jxz: 863,
+              zsk: 233,
+            },
+            {
+              name: '鍗楅槼甯�',
+              value: 123344,
+              ywtd: 998,
+              gdzs: 9802,
+              jxz: 863,
+              zsk: 233,
+            },
+            {
+              name: '璁告槍甯�',
+              value: 123344,
+              ywtd: 998,
+              gdzs: 9802,
+              jxz: 863,
+              zsk: 233,
+            },
+            {
+              name: '婕渤甯�',
+              value: 123344,
+              ywtd: 998,
+              gdzs: 9802,
+              jxz: 863,
+              zsk: 233,
+            },
+            {
+              name: '骞抽《灞卞競',
+              value: 123344,
+              ywtd: 998,
+              gdzs: 9802,
+              jxz: 863,
+              zsk: 233,
+            },
+            {
+              name: '瀹夐槼甯�',
+              value: 123344,
+              ywtd: 998,
+              gdzs: 9802,
+              jxz: 863,
+              zsk: 233,
+            },
+            {
+              name: '楣ゅ甯�',
+              value: 123344,
+              ywtd: 998,
+              gdzs: 9802,
+              jxz: 863,
+              zsk: 233,
+            },
+            {
+              name: '婵槼甯�',
+              value: 123344,
+              ywtd: 998,
+              gdzs: 9802,
+              jxz: 863,
+              zsk: 233,
+            },
+            {
+              name: '娴庢簮甯�',
+              value: 123344,
+              ywtd: 998,
+              gdzs: 9802,
+              jxz: 863,
+              zsk: 233,
+            },
+            {
+              name: '娲涢槼甯�',
+              value: 123344,
+              ywtd: 998,
+              gdzs: 9802,
+              jxz: 863,
+              zsk: 233,
+            },
+            {
+              name: '涓夐棬宄″競',
+              value: 123344,
+              ywtd: 998,
+              gdzs: 9802,
+              jxz: 863,
+              zsk: 233,
+            },
+          ],
+        },
+      ],
+    };
+    option && myChart5.setOption(option);
+  },
+};
+</script>
+
+<style scoped></style>
diff --git a/project-web/src/views/dataV/components/projectList.vue b/project-web/src/views/dataV/components/projectList.vue
new file mode 100644
index 0000000..1e91e48
--- /dev/null
+++ b/project-web/src/views/dataV/components/projectList.vue
@@ -0,0 +1,115 @@
+<template>
+  <el-table v-loading="loading" :data="tableData" height="100%" :stripe="true" class="the-table">
+    <el-table-column prop="projectName" label="椤圭洰鍚嶇О" width="200"> </el-table-column>
+    <el-table-column prop="time1" label="鎵瑰鏃堕棿" width="80" align="center"> </el-table-column>
+    <el-table-column prop="unit" label="寤鸿鍗曚綅"> </el-table-column>
+    <el-table-column prop="time2" label="椤圭洰寮�宸�" width="95" align="center"> </el-table-column>
+    <el-table-column prop="time3" label="鍒濇楠屾敹" width="95" align="center"> </el-table-column>
+    <el-table-column prop="time4" label="绔e伐楠屾敹" width="95" align="center"> </el-table-column>
+    <el-table-column prop="time5" label="鍐崇畻鎵瑰" width="95" align="center"> </el-table-column>
+    <el-table-column prop="time6" label="棰勮瀹屽伐" width="95" align="center"> </el-table-column>
+    <el-table-column prop="unit" label="杩涘害鐜扮姸" align="center" width="95"></el-table-column>
+  </el-table>
+</template>
+
+<script>
+import dataVRequest from '@/api/dataV.js';
+
+export default {
+  data() {
+    return {
+      loading: true,
+      tableData: [
+        {
+          projectName: '娲涢槼閭欢澶勭悊涓績宸ョ▼',
+          time1: '2022',
+          unit: '閮戝窞',
+          time2: '2021.08.30',
+          time3: '2021.08.30',
+          time4: '2021.08.30',
+          time5: '2021.08.30',
+          time6: '2021.08.30',
+        },
+      ],
+    };
+  },
+  created() {
+    dataVRequest.queryProjectList().then(res=> {
+      console.log('aaa',res);
+      this.loading = false;
+    })
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.the-table {
+  width: 100%;
+  height: 100%;
+  background-color: #091959;
+  font-size: 14px;
+  border: 2px solid #0C5EB5;
+
+  ::v-deep {
+    tr {
+      background-color: #091959;
+    }
+    th {
+      border: 0;
+      color: #66a6ff;
+      background: linear-gradient(360deg, #293b89 0%, rgba(13, 25, 79, 0) 50%);
+    }
+    tr.hover-row > td.el-table__cell {
+      background-color: #091959;
+    }
+    .el-table__body tr.el-table__row--striped td.el-table__cell {
+      background: linear-gradient(360deg, #293b89 0%, rgba(13, 25, 79, 0) 50%);
+    }
+    th.el-table__cell.is-leaf,
+    .el-table td.el-table__cell {
+      border: 0;
+    }
+
+    td {
+      border: 0;
+      color: #E6F8FF;
+      padding: 5px 0;
+    }
+    .el-table__fixed-right-patch {
+      width: 10px;
+      background: linear-gradient(360deg, #293b89 0%, rgba(13, 25, 79, 0) 50%) #091959;
+    }
+    .el-table__body-wrapper::-webkit-scrollbar {
+      background-color: #091959;
+      width: 10px;
+    }
+
+    .el-table__fixed-right {
+      right: 9px !important;
+    }
+
+    .el-table__body-wrapper::-webkit-scrollbar-thumb {
+      background-color: #08519e; // 婊戝潡棰滆壊
+      border-radius: 100px; // 婊戝潡鍦嗚
+    }
+    .el-table__fixed::before,
+    .el-table__fixed-right::before {
+      display: none;
+    }
+    .el-table__body-wrapper::-webkit-scrollbar-corner {
+      background-color: #091959; // 婊戝潡棰滆壊
+    }
+
+    .el-button--small {
+      font-size: 14px;
+    }
+
+    .el-table__body tr:hover>td.el-table__cell {
+      background-color: #091959;
+    }
+    .cell {
+      line-height: 18px;
+    }
+  }
+}
+</style>
diff --git a/project-web/src/views/dataV/components/projectType.vue b/project-web/src/views/dataV/components/projectType.vue
new file mode 100644
index 0000000..510b471
--- /dev/null
+++ b/project-web/src/views/dataV/components/projectType.vue
@@ -0,0 +1,86 @@
+<template>
+  <div v-loading="loading" style="height: 100%; width: 100%">
+    <swiper :options="swiperOptions" style="height: 100%">
+      <swiper-slide v-for="(item, index) in serializeList" :key="index">
+        <div class="title-box">
+          <p class="name">{{ item.projectCategoryName }}</p>
+          <p>
+            <span class="num">{{ item.num }}%</span>
+          </p>
+        </div>
+        <DataProgress :stroke-width="6" :color="item.color" :percentage="item.num" />
+      </swiper-slide>
+    </swiper>
+  </div>
+</template>
+
+<script>
+import dataVRequest from '@/api/dataV.js';
+
+import DataProgress from './dataProgress.vue';
+
+export default {
+  name: 'project-type',
+  components: {
+    DataProgress,
+  },
+  data() {
+    return {
+      loading: true,
+      // 杞挱鍥鹃厤缃�
+      swiperOptions: {
+        direction: 'vertical',
+        autoplay: {
+          delay: 2000,
+          disableOnInteraction: false,
+        }, // 鑷姩杞挱
+        slidesPerView: 5,
+        loop: true,
+      },
+      colorList: [
+        'linear-gradient(270deg, #FFD15C 0%, rgba(200,172,36,0.4) 100%)',
+        'linear-gradient(270deg, #5CE4FF 0%, rgba(36,145,200,0.4) 100%)',
+        'linear-gradient(270deg, #20E6A4 0%, rgba(32,230,164,0.34) 100%)',
+        'linear-gradient(270deg, #FF5C5C 0%, rgba(200,36,36,0.4) 100%)',
+        'linear-gradient(270deg, #3E9EFF 0%, rgba(7,124,242,0.79) 100%)',
+      ],
+      list: [],
+    };
+  },
+  computed: {
+    serializeList() {
+      return this.list.map((item, index) => {
+        return {
+          ...item,
+          color: this.colorList[index % this.colorList.length],
+        };
+      });
+    },
+  },
+  created() {
+    dataVRequest.queryProjectNumByType().then((res) => {
+      this.list = res;
+      this.loading = false;
+    });
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.title-box {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  font-size: 12px;
+  color: #fff;
+  line-height: 22px;
+
+  .name {
+    opacity: 0.74;
+  }
+
+  .num {
+    margin-left: 10px;
+  }
+}
+</style>
diff --git a/project-web/src/views/dataV/components/projectYear.vue b/project-web/src/views/dataV/components/projectYear.vue
new file mode 100644
index 0000000..8d9cabb
--- /dev/null
+++ b/project-web/src/views/dataV/components/projectYear.vue
@@ -0,0 +1,179 @@
+<template>
+  <div v-loading="loading" style="width: 100%; height: 100%" ref="projectYear"></div>
+</template>
+
+<script>
+import echarts from 'echarts';
+import dataVRequest from '@/api/dataV.js';
+
+export default {
+  name: 'project-year',
+  data() {
+    return {
+      loading: true,
+    };
+  },
+  mounted() {
+    // 鐩戝惉灞忓箷瀹藉害鍙樺寲锛氬綋娴忚鍣ㄥ彂鐢焤esize浜嬩欢鐨勬椂鍊欙紝瑙﹀彂echart鐨剅esize浜嬩欢锛岄噸缁榗anvas
+    // 鍩轰簬鍑嗗濂界殑dom锛屽垵濮嬪寲echarts瀹炰緥
+    const projectYear = echarts.init(this.$refs.projectYear);
+    window.addEventListener('resize', () => {
+      this.$nextTick(() => {
+        projectYear.resize();
+      });
+    });
+    dataVRequest.queryProjectYear().then((res) => {
+      console.log('resqueryProjectYear', res);
+      this.loading = false;
+    });
+    // 缁樺埗鍥捐〃
+    projectYear.setOption({
+      tooltip: {
+        trigger: 'axis',
+      },
+      grid: {
+        right: 20,
+        left: 50,
+        top: 30,
+        bottom: 20,
+      },
+      legend: {
+        right: 0,
+        top: 0,
+        textStyle: {
+          color: '#ADB1B4',
+          fontSize: 13,
+        },
+      },
+      xAxis: [
+        {
+          type: 'category',
+          axisLine: {
+            lineStyle: {
+              color: '#0D496E',
+            },
+          },
+          axisLabel: {
+            show: true,
+            textStyle: {
+              fontSize: 12,
+              color: '#ADB1B4',
+            },
+          },
+          data: ['2017骞�', '2018骞�', '2018骞�', '2019骞�'],
+        },
+        // 鐢熸垚鑳屾櫙闃村奖闇�瑕�
+        {
+          type: 'category',
+          show: false,
+          data: ['2017骞�', '2018骞�', '2018骞�', '2019骞�'],
+        },
+      ],
+      yAxis: {
+        type: 'value',
+        splitLine: {
+          show: false,
+        },
+        axisLine: {
+          show: false,
+        },
+        axisLabel: {
+          show: true,
+          textStyle: {
+            fontSize: 12,
+            color: '#ADB1B4',
+          },
+        },
+      },
+      series: [
+        {
+          name: '瀹屽伐椤圭洰',
+          data: [256, 856, 354, 26],
+          type: 'bar',
+          barWidth: 10,
+          itemStyle: {
+            color: {
+              type: 'linear',
+              x: 0,
+              y: 0,
+              x2: 0,
+              y2: 1,
+              colorStops: [
+                {
+                  offset: 0,
+                  color: '#E8B351', // 0% 澶勭殑棰滆壊
+                },
+                {
+                  offset: 1,
+                  color: '#DBA33A', // 100% 澶勭殑棰滆壊
+                },
+              ],
+              global: false, // 缂虹渷涓� false
+            },
+          },
+        },
+        {
+          name: '鏂板椤圭洰',
+          data: [56, 856, 54, 26],
+          type: 'bar',
+          barWidth: 10,
+          itemStyle: {
+            color: {
+              type: 'linear',
+              x: 0,
+              y: 0,
+              x2: 0,
+              y2: 1,
+              colorStops: [
+                {
+                  offset: 0,
+                  color: '#00F0FF', // 0% 澶勭殑棰滆壊
+                },
+                {
+                  offset: 1,
+                  color: '#23ACE6', // 100% 澶勭殑棰滆壊
+                },
+              ],
+              global: false, // 缂虹渷涓� false
+            },
+          },
+        },
+        // 鍒堕�犺儗鏅槾褰�
+        {
+          tooltip: {
+            show: false,
+          },
+          xAxisIndex: 1,
+          itemStyle: {
+            color: 'rgba(180, 180, 180, 0.2)',
+          },
+          data: [1000, 1000, 1000, 1000],
+          barWidth: 48,
+          emphasis: {
+            itemStyle: {
+              color: {
+                type: 'linear',
+                x: 0,
+                x2: 0,
+                y: 0,
+                y2: 1,
+                colorStops: [
+                  {
+                    offset: 0,
+                    color: 'rgba(64, 247, 176, 0.25)',
+                  },
+                  {
+                    offset: 1,
+                    color: 'rgba(17, 34, 64, 0.25)',
+                  },
+                ],
+              },
+            },
+          },
+          type: 'bar',
+        },
+      ],
+    });
+  },
+};
+</script>
diff --git a/project-web/src/views/dataV/static.vue b/project-web/src/views/dataV/static.vue
new file mode 100644
index 0000000..1e9747a
--- /dev/null
+++ b/project-web/src/views/dataV/static.vue
@@ -0,0 +1,722 @@
+<template>
+  <div class="container">
+    <div class="box" :style="style">
+      <div class="header">
+        <div class="timeBox">
+          <span class="hms">{{ time }}</span>
+          <span class="hms">{{ hms }}</span>
+          <span class="hms">{{ weekNum }}</span>
+        </div>
+      </div>
+      <el-row :gutter="10">
+        <el-col :span="7">
+          <div class="col-box">
+            <p class="col-box__title">
+              <span class="tit">缁煎悎鏁版嵁鍒嗘瀽</span><span class="eng-title">COMPREHENSIVE DATA ANALYSIS</span>
+            </p>
+            <div
+              class="col-box__content e-flex flex-wrap justify-between"
+              style="height: 232px"
+              v-loading="comprehensiveLoading"
+            >
+              <div class="item-box item1">
+                <div>
+                  <span class="num">{{ comprehensive.sum }}</span
+                  >涓�
+                </div>
+                <div>椤圭洰鎬绘暟</div>
+              </div>
+              <div class="item-box item2">
+                <div>
+                  <span class="num">{{ comprehensive.ongoing }}</span
+                  >涓�
+                </div>
+                <div>杩涜涓�</div>
+              </div>
+              <div class="item-box item3">
+                <div>
+                  <span class="num">{{ comprehensive.notBegin }}</span
+                  >涓�
+                </div>
+                <div>鏈紑宸�</div>
+              </div>
+              <div class="item-box item4">
+                <div>
+                  <span class="num">{{ comprehensive.end }}</span
+                  >涓�
+                </div>
+                <div>宸插畬宸�</div>
+              </div>
+              <div class="item-box item5">
+                <div>
+                  <span class="num">{{ comprehensive.close }}</span
+                  >涓�
+                </div>
+                <div>宸插叧闂�</div>
+              </div>
+              <div class="item-box item6">
+                <div>
+                  <span class="num">{{ comprehensive.overdue }}</span
+                  >涓�
+                </div>
+                <div>宸茶秴鏈�</div>
+              </div>
+            </div>
+          </div>
+          <div class="col-box">
+            <p class="col-box__title">
+              <span class="tit">璁″垝鎶曡祫鏁版嵁鍒嗘瀽</span><span class="eng-title">PLAN INVESTMENT DATA ANALYSIS</span>
+            </p>
+            <div v-loading="planLoading" class="col-box__content e-flex justify-between plan-box">
+              <swiper :options="swiperOptions">
+                <swiper-slide v-for="(item1, index1) in planArrList" :key="index1">
+                  <div class="plan-flex-box">
+                    <div v-for="(item2, index2) in item1" :key="index1 + '' + index2" class="content-wrap">
+                      <div class="e-flex justify-between msg-wrap">
+                        <div class="city-name" :class="'name' + (index1 * 4 + index2 + 1)">
+                          <template v-if="index1 === 0 && index2 < 3">
+                            <img v-if="index2 === 0" style="margin-right: 5px" src="@/assets/dataV/g1.png" alt="1" />
+                            <img v-if="index2 === 1" style="margin-right: 5px" src="@/assets/dataV/g2.png" alt="2" />
+                            <img v-if="index2 === 2" style="margin-right: 5px" src="@/assets/dataV/g3.png" alt="3" />
+                          </template>
+                          <span v-else class="city-rank">{{ index1 * 4 + index2 + 1 }}</span>
+                          <span class="name-txt" :title="item2.orgName">{{ item2.orgName }}</span>
+                        </div>
+                        <div class="desc">
+                          璁″垝<span class="num" :title="item2.sumMoney">{{ item2.sumMoney }}</span
+                          >涓� 宸蹭笅杈�<span class="num end" :title="item2.curMoney">{{ item2.curMoney }}</span
+                          >涓�
+                        </div>
+                      </div>
+                      <DataProgress
+                        :stroke-width="8"
+                        :show-block="true"
+                        :color="progressColor(index1, index2)"
+                        :percentage="60"
+                      />
+                    </div></div
+                ></swiper-slide>
+              </swiper>
+            </div>
+          </div>
+          <div class="col-box">
+            <p class="col-box__title">
+              <span class="tit">鍘嗗勾椤圭洰鏁版嵁鍒嗘瀽</span
+              ><span class="eng-title">PROJECT DATA ANALYSIS OVER THE YEARS</span>
+            </p>
+            <div class="col-box__content e-flex justify-between" style="height: 232px">
+              <ProjectYear />
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="10" style="position: relative">
+          <div class="middle-top-box">
+            <div class="type-name">椤圭洰鎬绘暟</div>
+            <div class="num-box">
+              <span v-for="(i, index) in numToStrArr(comprehensive.sum)" :key="index" :class="{ nothing: i === '' }">{{
+                i === '' ? '-' : i
+              }}</span>
+            </div>
+            <div class="type-name">宸蹭笅杈炬姇璧勶紙涓囧厓锛�</div>
+            <div class="num-box">
+              <span
+                v-for="(i, index) in numToStrArr(comprehensive.curMoney)"
+                :key="index"
+                class="orange"
+                :class="{ nothing: i === '' }"
+                >{{ i === '' ? '-' : i }}</span
+              >
+            </div>
+          </div>
+          <div class="middle-box">
+            <MyMap />
+          </div>
+          <div class="middle-bottom-box">
+            <ProjectList />
+          </div>
+        </el-col>
+        <el-col :span="7">
+          <div class="col-box">
+            <p class="col-box__title">
+              <span class="tit">椤圭洰绫诲瀷鍗犳瘮鍒嗘瀽</span><span class="eng-title">ANALYSIS OF THE PROPORTION</span>
+            </p>
+            <div class="col-box__content" style="height: 231px">
+              <ProjectType />
+            </div>
+          </div>
+          <div class="col-box">
+            <p class="col-box__title">
+              <span class="tit">鎵规璁″垝鏁版嵁鍒嗘瀽</span><span class="eng-title">BATCH PLAN DATA ANALYSIS</span>
+            </p>
+            <div class="col-box__content">
+              <BatchPlan />
+            </div>
+          </div>
+          <div class="col-box">
+            <p class="col-box__title">
+              <span class="tit">鍦板競鑰冩牳璇勫垎鍒嗘瀽</span><span class="eng-title">CITY ASSESSMENT SCORE ANALYSIS</span>
+            </p>
+            <div class="col-box__content" style="height: 230px">
+              <CityScore />
+            </div>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+  </div>
+</template>
+
+<script>
+import MyMap from '@/views/dataV/components/map';
+import { formatDate } from '@/utils/DateFormatter';
+import ProjectYear from './components/projectYear.vue';
+import ProjectType from './components/projectType.vue';
+import BatchPlan from './components/batchPlan.vue';
+import ProjectList from './components/projectList.vue';
+import CityScore from './components/cityScore.vue';
+import DataProgress from './components/dataProgress.vue';
+
+import dataVRequest from '@/api/dataV.js';
+
+export default {
+  name: 'static',
+  components: {
+    MyMap,
+    ProjectType,
+    ProjectYear,
+    BatchPlan,
+    ProjectList,
+    CityScore,
+    DataProgress,
+  },
+  data() {
+    return {
+      weekDays: ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�'],
+      hms: '',
+      ymd: '',
+      time: '',
+      weekNum: '',
+      timer: null,
+      style: {
+        width: `1920px`,
+        height: `1080px`,
+        transform: 'scale(1) translate(-50%, -50%)', // 榛樿涓嶇缉鏀撅紝鍨傜洿姘村钩灞呬腑
+      },
+      // 杞挱鍥鹃厤缃�
+      swiperOptions: {
+        autoplay: {
+          delay: 2000,
+          disableOnInteraction: false,
+        }, // 鑷姩杞挱
+        slidesPerView: 2,
+        loop: true,
+      },
+      comprehensiveLoading: true,
+      //缁煎悎鏁版嵁鍒嗘瀽妯″潡鏁版嵁
+      comprehensive: {
+        sum: 0, // 鎬绘暟閲�
+        notBegin: 0, // 鏈紑宸�
+        ongoing: 0, //杩涜涓�
+        end: 0, // 宸插畬宸�
+        close: 0, //宸插叧闂�
+        overdue: 0, //宸茶秴鏈�
+        sumMoney: 0, //璁″垝鎬绘姇璧勶紙鏆傛椂娌$敤鍒帮級
+        curMoney: 0, //宸蹭笅杈炬�绘姇璧�
+      },
+      planLoading: true,
+      // 璁″垝鎶曡祫鏁版嵁鍒嗘瀽鍒楄〃
+      planList: [],
+    };
+  },
+  computed: {
+    // 搴忓垪鍖栫殑浠�4涓负涓�缁勭殑浜岀淮鏁版嵁鍒楄〃
+    planArrList() {
+      const newArr = [];
+      let cacheArr = [];
+      this.planList.forEach((item, index) => {
+        cacheArr.push(item);
+        if ((index + 1) % 4 === 0) {
+          newArr.push(cacheArr);
+          cacheArr = [];
+        }
+      });
+      // 濡傛灉鏈�鍚庣紦瀛樼殑鏁扮粍涓湁鍊硷紝琛ㄧず鍙兘鏈�鍚庝竴缁勪笉婊�4涓湭琚坊鍔�
+      if (cacheArr.length) {
+        newArr.push(cacheArr);
+      }
+
+      return newArr;
+    },
+    // 杩涘害鏉¢鑹茬殑鍒ゆ柇閫昏緫
+    progressColor() {
+      return (index1, index2) => {
+        if (index1 === 0 && index2 < 3) {
+          if (index2 === 0) {
+            return 'linear-gradient(270deg, #FFD15C 0%, rgba(200,172,36,0.4) 100%)';
+          }
+          if (index2 === 1) {
+            return 'linear-gradient(270deg, #5CE4FF 0%, rgba(36,145,200,0.4) 100%)';
+          }
+          return 'linear-gradient(270deg, #20E6A4 0%, rgba(32,230,164,0.34) 100%)';
+        } else {
+          return 'linear-gradient(270deg, #42A3FF 0%, rgba(30,30,30,0) 100%)';
+        }
+      };
+    },
+  },
+  methods: {
+    // 闃叉姈
+    debounce(fn, t) {
+      const delay = t || 500;
+      let timer;
+      return function () {
+        const args = arguments;
+        if (timer) {
+          clearTimeout(timer);
+        }
+        const context = this;
+        timer = setTimeout(() => {
+          timer = null;
+          fn.apply(context, args);
+        }, delay);
+      };
+    },
+    // 鑾峰彇缂╂斁姣斾緥
+    getScale() {
+      const w = window.innerWidth / 1920;
+      const h = window.innerHeight / 1080;
+      return w < h ? w : h;
+    },
+    // 璁剧疆缂╂斁姣斾緥
+    setScale() {
+      this.style.transform = `scale(${this.getScale()}) translate(-50%, -50%)`;
+    },
+    // 鎶婃暟鍊煎簭鍒楀寲鎴愪竴涓暟缁勶紝鐢ㄤ簬ui灞曠ず
+    numToStrArr(num) {
+      if (!Number(num)) {
+        return ['', '', '', '', '', '', ''];
+      }
+      let arr = String(num).split('');
+      let length = arr.length; // 鎶婃暟鎹繚瀛樹笅鏉� 鍦ㄥ惊鐜腑姝ゅ�间細鍙�
+      if (length < 7) {
+        for (let index = 0; index < 7 - length; index++) {
+          arr.unshift('');
+        }
+      }
+
+      return arr;
+    },
+  },
+  created() {
+    // 鏌ヨ缁煎悎缁熻鍒嗘瀽
+    dataVRequest.queryBoardTotalData().then((res) => {
+      this.comprehensive = res;
+      this.comprehensiveLoading = false;
+    });
+    // 鏌ヨ璁″垝鎶曡祫鏁版嵁鍒嗘瀽
+    dataVRequest.queryPlanMoney().then((res) => {
+      this.planList = res;
+      this.planLoading = false;
+    });
+  },
+  mounted() {
+    this.setScale();
+    this.onresize = this.debounce(() => this.setScale(), 100);
+    window.addEventListener('resize', this.onresize);
+    this.weekNum = this.weekDays[new Date().getDay()];
+    const vm = this;
+    this.timer = function () {
+      const time = formatDate(new Date());
+      vm.time = time.split(' ')[0];
+      vm.hms = time.slice(11);
+      vm.ymd = time.slice(0, 11).replaceAll('-', '.');
+      vm.$forceUpdate();
+    };
+
+    setInterval(this.timer, 1000);
+  },
+  beforeDestroy() {
+    window.removeEventListener('resize', this.onresize);
+  },
+  destroyed() {
+    clearInterval(this.timer);
+    this.timer = null;
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+body {
+  margin: 0;
+  padding: 0;
+}
+* {
+  box-sizing: border-box;
+}
+.e-flex {
+  display: flex;
+  align-items: center;
+}
+.e-flex-col {
+  display: flex;
+  flex-direction: column;
+}
+.c-ad {
+  color: #adb1b4;
+}
+.c-08 {
+  color: #08d2fa;
+}
+.c-20 {
+  color: #20e6a4;
+}
+.c-ff {
+  color: #ffd15c;
+}
+.c-f9 {
+  color: #f99806;
+}
+.c-75 {
+  color: #75f9fc;
+}
+.c-7c {
+  color: #7cbfff;
+}
+.c-fff {
+  color: #fff;
+}
+.flex-1 {
+  flex-grow: 1;
+}
+.justify-center {
+  justify-content: center;
+}
+.justify-around {
+  justify-content: space-around;
+}
+.justify-start {
+  justify-content: flex-start;
+}
+.align-center {
+  align-items: center;
+}
+.align-end {
+  align-items: flex-end;
+}
+.justify-between {
+  justify-content: space-between;
+}
+.flex-wrap {
+  flex-wrap: wrap;
+}
+.container {
+  background-image: url('../../assets/dataV/bg.png');
+  background-repeat: no-repeat;
+  width: 100vw;
+  min-height: 100%;
+  max-height: 100vh;
+  overflow: hidden;
+}
+.box {
+  transform-origin: 0 0;
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  padding: 0 20px 20px;
+  overflow: hidden;
+  z-index: 10;
+}
+.header {
+  width: 100%;
+  height: 90px;
+  background-repeat: no-repeat;
+  background-image: url(../../assets/dataV/header.png);
+  background-size: 100% 100%;
+}
+.timeBox {
+  position: absolute;
+  top: 0;
+  left: 39px;
+  padding-top: 20px;
+}
+.hms {
+  letter-spacing: -1px;
+  font-size: 16px;
+  margin-right: 1px;
+  color: #fff;
+}
+.ymd {
+  font-size: 14px;
+}
+.col-box {
+  background-image: url(../../assets/dataV/boxBG.png);
+  background-size: 100% 100%;
+  background-repeat: no-repeat;
+  height: 308px;
+  width: 100%;
+  margin-bottom: 20px;
+  overflow: hidden;
+  color: #fff;
+  .col-box__title {
+    font-size: 26px;
+    color: #fff;
+    font-weight: 600;
+    margin-top: 24px;
+    margin-left: 35px;
+
+    .tit {
+      text-shadow: 0 0 2px #fff;
+    }
+    .eng-title {
+      font-size: 12px;
+      margin-left: 10px;
+      vertical-align: middle;
+      color: #215a8e;
+    }
+  }
+  .item-box {
+    width: 156px;
+    height: 76px;
+    padding-left: 79px;
+    padding-top: 19px;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    border: 1px solid #2b2e34;
+    border-radius: 5px;
+    margin-top: 15px;
+    font-size: 12px;
+    color: #adb1b4;
+    -webkit-box-shadow: inset 0 5px 20px 1px #2b2e34;
+    box-shadow: inset 0 5px 20px 1px #2b2e34;
+    background-repeat: no-repeat;
+    background-size: 100% 100%;
+    line-height: 17px;
+
+    @for $i from 1 through 6 {
+      &.item#{$i} {
+        background-image: url('../../assets/dataV/comprehensive-ico#{$i}.png');
+      }
+    }
+
+    .num {
+      font-weight: bold;
+      font-size: 24px;
+      color: #fff;
+    }
+  }
+  //  鎶曡瘔绫诲瀷
+  .tslx-img {
+    width: 90px;
+    height: 220px;
+  }
+  .tslx {
+    width: 100%;
+    position: absolute;
+    top: 40%;
+    left: 50%;
+    z-index: 1;
+    transform: translate(-50%);
+    display: flex;
+    align-items: center;
+    flex-direction: column;
+  }
+}
+.rela {
+  position: relative;
+}
+.level-box {
+  width: 100%;
+  img {
+    width: 100%;
+    height: 160px;
+  }
+  .level {
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    transform: translate(-50%);
+    font-size: 18px;
+    color: #75f9fc;
+  }
+}
+
+.f-18 {
+  font-size: 18px;
+}
+.f-16 {
+  font-size: 16px;
+}
+.f-14 {
+  font-size: 14px;
+}
+.f-20 {
+  font-size: 20px;
+}
+.f-26 {
+  font-size: 26px;
+}
+.f-12 {
+  font-size: 12px;
+}
+.middle-top-box {
+  width: 300px;
+  height: 125px;
+  position: absolute;
+  left: 35px;
+  top: 10px;
+  z-index: 99;
+  color: #fff;
+
+  .type-name {
+    color: #fff;
+    opacity: 0.74;
+    font-size: 14px;
+    line-height: 20px;
+  }
+
+  .num-box {
+    margin: 5px 0 20px;
+    display: flex;
+    align-items: center;
+    span {
+      width: 20px;
+      height: 34px;
+      line-height: 34px;
+      margin-right: 5px;
+      font-size: 24px;
+      border: 1px solid #00a0ff;
+      border-radius: 2px;
+      text-align: center;
+      color: #62d0ff;
+
+      &.orange {
+        color: #ffc303;
+      }
+
+      &.nothing {
+        color: rgba(255, 255, 255, 0.2);
+      }
+    }
+  }
+}
+.middle-box {
+  width: 100%;
+  height: 672px;
+  margin-bottom: 20px;
+}
+.middle-bottom-box {
+  width: 100%;
+  height: 275px;
+  overflow: hidden;
+}
+.col-box__content {
+  background-color: rgba(7, 19, 72, 0.5);
+  padding: 20px;
+  margin-top: 20px;
+}
+
+.plan-box {
+  height: 231px;
+  padding: 0 10px;
+  overflow: hidden;
+}
+
+.plan-flex-box {
+  box-sizing: border-box;
+  width: 260px;
+  height: 204px;
+  padding: 0 10px;
+  position: relative;
+
+  &::after {
+    content: '';
+    width: 0;
+    height: 204px;
+    border-right: 1px dashed #0e9cff;
+    position: absolute;
+    right: 0;
+    top: 50%;
+    transform: translateY(-50%);
+  }
+
+  .content-wrap {
+    margin-bottom: 7px;
+  }
+
+  .msg-wrap {
+    margin-bottom: 9px;
+    line-height: 24px;
+  }
+
+  .city-name {
+    display: flex;
+    align-items: center;
+    font-size: 16px;
+    color: #fff;
+    .name-txt {
+      max-width: 70px;
+      overflow: hidden;
+      text-overflow: ellipsis;
+      white-space: nowrap;
+    }
+
+    &.name1 {
+      color: #ffd15c;
+    }
+
+    &.name2 {
+      color: #07d1fa;
+    }
+
+    &.name3 {
+      color: #20e6a4;
+    }
+  }
+
+  .city-rank {
+    font-size: 16px;
+    font-weight: bold;
+    padding: 0 5px;
+  }
+
+  .desc {
+    font-size: 12px;
+    color: #c6d1db;
+    display: flex;
+    align-items: center;
+    white-space: nowrap;
+
+    .num {
+      padding: 0 2px;
+      font-size: 16px;
+      color: #fff;
+      max-width: 30px;
+      overflow: hidden;
+      text-overflow: ellipsis;
+
+      &.end {
+        color: #e6c364;
+      }
+    }
+  }
+}
+.myd {
+  width: 28%;
+  height: 200px;
+  display: flex;
+  align-items: center;
+  flex-direction: column;
+  border-radius: 6px;
+  border: 1px solid #4192d9;
+  box-shadow: inset 0 5px 20px 1px #2b2e34;
+  img {
+    margin-top: -30px;
+    width: 60px;
+    height: 60px;
+  }
+}
+
+::v-deep .el-loading-mask {
+  background-color: rgba(8, 21, 69, 0.9);
+}
+</style>
diff --git a/project-web/src/views/error-log/components/ErrorTestA.vue b/project-web/src/views/error-log/components/ErrorTestA.vue
new file mode 100644
index 0000000..bc5c185
--- /dev/null
+++ b/project-web/src/views/error-log/components/ErrorTestA.vue
@@ -0,0 +1,22 @@
+<template>
+  <div>
+    <!--error code-->
+    {{ a.a }}
+    <!--error code-->
+  </div>
+</template>
+
+<script>
+// +---------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +---------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +---------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +---------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +---------------------------------------------------------------------
+export default {
+  name: 'ErrorTestA',
+};
+</script>
diff --git a/project-web/src/views/error-log/components/ErrorTestB.vue b/project-web/src/views/error-log/components/ErrorTestB.vue
new file mode 100644
index 0000000..b8f9447
--- /dev/null
+++ b/project-web/src/views/error-log/components/ErrorTestB.vue
@@ -0,0 +1,20 @@
+<template>
+  <div />
+</template>
+
+<script>
+// +---------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +---------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +---------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +---------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +---------------------------------------------------------------------
+export default {
+  created() {
+    this.b = b; // eslint-disable-line
+  },
+};
+</script>
diff --git a/project-web/src/views/error-log/index.vue b/project-web/src/views/error-log/index.vue
new file mode 100644
index 0000000..ac9ced8
--- /dev/null
+++ b/project-web/src/views/error-log/index.vue
@@ -0,0 +1,47 @@
+<template>
+  <div class="errPage-container">
+    <ErrorA />
+    <ErrorB />
+    <h3>Please click the bug icon in the upper right corner</h3>
+    <aside>
+      Now the management system are basically the form of the spa, it enhances the user experience, but it also
+      increases the possibility of page problems, a small negligence may lead to the entire page deadlock. Fortunately
+      Vue provides a way to catch handling exceptions, where you can handle errors or report exceptions.
+      <a
+        target="_blank"
+        class="link-type"
+        href="https://panjiachen.github.io/vue-element-admin-site/guide/advanced/error.html"
+      >
+        Document introduction
+      </a>
+    </aside>
+    <a href="#">
+      <img src="https://wpimg.wallstcn.com/360e4842-4db5-42d0-b078-f9a84a825546.gif" />
+    </a>
+  </div>
+</template>
+
+<script>
+// +---------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +---------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +---------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +---------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +---------------------------------------------------------------------
+import ErrorA from './components/ErrorTestA';
+import ErrorB from './components/ErrorTestB';
+
+export default {
+  name: 'ErrorLog',
+  components: { ErrorA, ErrorB },
+};
+</script>
+
+<style scoped>
+.errPage-container {
+  padding: 30px;
+}
+</style>
diff --git a/project-web/src/views/error-page/401.vue b/project-web/src/views/error-page/401.vue
new file mode 100644
index 0000000..bf736bc
--- /dev/null
+++ b/project-web/src/views/error-page/401.vue
@@ -0,0 +1,102 @@
+<template>
+  <div class="errPage-container">
+    <el-button size="mini" icon="el-icon-arrow-left" class="pan-back-btn" @click="back"> 杩斿洖 </el-button>
+    <el-row>
+      <el-col :span="12">
+        <h1 class="text-jumbo text-ginormous">Oops!</h1>
+        gif鏉ユ簮<a href="https://zh.airbnb.com/" target="_blank">airbnb</a> 椤甸潰
+        <h2>浣犳病鏈夋潈闄愬幓璇ラ〉闈�</h2>
+        <h6>濡傛湁涓嶆弧璇疯仈绯讳綘棰嗗</h6>
+        <ul class="list-unstyled">
+          <li>鎴栬�呬綘鍙互鍘�:</li>
+          <li class="link-type">
+            <router-link to="/dashboard"> 鍥為椤� </router-link>
+          </li>
+          <li class="link-type">
+            <a href="https://www.crmeb.com/">闅忎究鐪嬬湅</a>
+          </li>
+          <li><a href="#" @click.prevent="dialogVisible = true">鐐规垜鐪嬪浘</a></li>
+        </ul>
+      </el-col>
+      <el-col :span="12">
+        <img :src="errGif" width="313" height="428" alt="Girl has dropped her ice cream." />
+      </el-col>
+    </el-row>
+    <el-dialog :visible.sync="dialogVisible" title="闅忎究鐪�">
+      <img :src="ewizardClap" class="pan-img" />
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+// +---------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +---------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +---------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +---------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +---------------------------------------------------------------------
+import errGif from '@/assets/401_images/401.gif';
+
+export default {
+  name: 'Page401',
+  data() {
+    return {
+      errGif: errGif + '?' + +new Date(),
+      ewizardClap: 'https://wpimg.wallstcn.com/007ef517-bafd-4066-aae4-6883632d9646',
+      dialogVisible: false,
+    };
+  },
+  methods: {
+    back() {
+      if (this.$route.query.noGoBack) {
+        this.$router.push({ path: '/dashboard' });
+      } else {
+        this.$router.go(-1);
+      }
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.errPage-container {
+  width: 800px;
+  max-width: 100%;
+  margin: 100px auto;
+  .pan-back-btn {
+    background: #008489;
+    color: #fff;
+    border: none !important;
+  }
+  .pan-gif {
+    margin: 0 auto;
+    display: block;
+  }
+  .pan-img {
+    display: block;
+    margin: 0 auto;
+    width: 100%;
+  }
+  .text-jumbo {
+    font-size: 60px;
+    font-weight: 700;
+    color: #484848;
+  }
+  .list-unstyled {
+    font-size: 14px;
+    li {
+      padding-bottom: 5px;
+    }
+    a {
+      color: #008489;
+      text-decoration: none;
+      &:hover {
+        text-decoration: underline;
+      }
+    }
+  }
+}
+</style>
diff --git a/project-web/src/views/error-page/404.vue b/project-web/src/views/error-page/404.vue
new file mode 100644
index 0000000..0c31195
--- /dev/null
+++ b/project-web/src/views/error-page/404.vue
@@ -0,0 +1,240 @@
+<template>
+  <div class="wscn-http404-container">
+    <div class="wscn-http404">
+      <div class="pic-404">
+        <img class="pic-404__parent" src="@/assets/404_images/404.png" alt="404" />
+        <img class="pic-404__child left" src="@/assets/404_images/404_cloud.png" alt="404" />
+        <img class="pic-404__child mid" src="@/assets/404_images/404_cloud.png" alt="404" />
+        <img class="pic-404__child right" src="@/assets/404_images/404_cloud.png" alt="404" />
+      </div>
+      <div class="bullshit">
+        <div class="bullshit__oops">OOPS!</div>
+        <div class="bullshit__headline">{{ message }}</div>
+        <div class="bullshit__info">璇锋鏌ユ偍杈撳叆鐨刄RL鏄惁姝g‘锛屾垨鍗曞嚮涓嬮潰鐨勬寜閽繑鍥炰富椤�.</div>
+        <router-link :to="{ path: '/dashboard' }">
+          <span class="bullshit__return-home">杩斿洖鎺у埗鍙�</span>
+        </router-link>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+// +---------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +---------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +---------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +---------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +---------------------------------------------------------------------
+export default {
+  name: 'Page404',
+
+  data() {
+    return {};
+  },
+  computed: {
+    message() {
+      return '浣犱笉鑳借繘鍏ヨ繖涓〉闈�...';
+    },
+  },
+  methods: {},
+};
+</script>
+
+<style lang="scss" scoped>
+.wscn-http404-container {
+  transform: translate(-50%, -50%);
+  position: absolute;
+  top: 40%;
+  left: 50%;
+}
+.wscn-http404 {
+  position: relative;
+  width: 1200px;
+  padding: 0 50px;
+  overflow: hidden;
+  .pic-404 {
+    position: relative;
+    float: left;
+    width: 600px;
+    overflow: hidden;
+    &__parent {
+      width: 100%;
+    }
+    &__child {
+      position: absolute;
+      &.left {
+        width: 80px;
+        top: 17px;
+        left: 220px;
+        opacity: 0;
+        animation-name: cloudLeft;
+        animation-duration: 2s;
+        animation-timing-function: linear;
+        animation-fill-mode: forwards;
+        animation-delay: 1s;
+      }
+      &.mid {
+        width: 46px;
+        top: 10px;
+        left: 420px;
+        opacity: 0;
+        animation-name: cloudMid;
+        animation-duration: 2s;
+        animation-timing-function: linear;
+        animation-fill-mode: forwards;
+        animation-delay: 1.2s;
+      }
+      &.right {
+        width: 62px;
+        top: 100px;
+        left: 500px;
+        opacity: 0;
+        animation-name: cloudRight;
+        animation-duration: 2s;
+        animation-timing-function: linear;
+        animation-fill-mode: forwards;
+        animation-delay: 1s;
+      }
+      @keyframes cloudLeft {
+        0% {
+          top: 17px;
+          left: 220px;
+          opacity: 0;
+        }
+        20% {
+          top: 33px;
+          left: 188px;
+          opacity: 1;
+        }
+        80% {
+          top: 81px;
+          left: 92px;
+          opacity: 1;
+        }
+        100% {
+          top: 97px;
+          left: 60px;
+          opacity: 0;
+        }
+      }
+      @keyframes cloudMid {
+        0% {
+          top: 10px;
+          left: 420px;
+          opacity: 0;
+        }
+        20% {
+          top: 40px;
+          left: 360px;
+          opacity: 1;
+        }
+        70% {
+          top: 130px;
+          left: 180px;
+          opacity: 1;
+        }
+        100% {
+          top: 160px;
+          left: 120px;
+          opacity: 0;
+        }
+      }
+      @keyframes cloudRight {
+        0% {
+          top: 100px;
+          left: 500px;
+          opacity: 0;
+        }
+        20% {
+          top: 120px;
+          left: 460px;
+          opacity: 1;
+        }
+        80% {
+          top: 180px;
+          left: 340px;
+          opacity: 1;
+        }
+        100% {
+          top: 200px;
+          left: 300px;
+          opacity: 0;
+        }
+      }
+    }
+  }
+  .bullshit {
+    position: relative;
+    float: left;
+    width: 300px;
+    padding: 30px 0;
+    overflow: hidden;
+    &__oops {
+      font-size: 32px;
+      font-weight: bold;
+      line-height: 40px;
+      color: #1482f0;
+      opacity: 0;
+      margin-bottom: 20px;
+      animation-name: slideUp;
+      animation-duration: 0.5s;
+      animation-fill-mode: forwards;
+    }
+    &__headline {
+      font-size: 20px;
+      line-height: 24px;
+      color: #222;
+      font-weight: bold;
+      opacity: 0;
+      margin-bottom: 10px;
+      animation-name: slideUp;
+      animation-duration: 0.5s;
+      animation-delay: 0.1s;
+      animation-fill-mode: forwards;
+    }
+    &__info {
+      font-size: 13px;
+      line-height: 21px;
+      color: grey;
+      opacity: 0;
+      margin-bottom: 30px;
+      animation-name: slideUp;
+      animation-duration: 0.5s;
+      animation-delay: 0.2s;
+      animation-fill-mode: forwards;
+    }
+    &__return-home {
+      display: block;
+      float: left;
+      width: 110px;
+      height: 36px;
+      background: #1482f0;
+      border-radius: 100px;
+      text-align: center;
+      color: #ffffff;
+      opacity: 0;
+      font-size: 14px;
+      line-height: 36px;
+      cursor: pointer;
+      animation-name: slideUp;
+      animation-duration: 0.5s;
+      animation-delay: 0.3s;
+      animation-fill-mode: forwards;
+    }
+    @keyframes slideUp {
+      0% {
+        transform: translateY(60px);
+        opacity: 0;
+      }
+      100% {
+        transform: translateY(0);
+        opacity: 1;
+      }
+    }
+  }
+}
+</style>
diff --git a/project-web/src/views/home/index.vue b/project-web/src/views/home/index.vue
new file mode 100644
index 0000000..4d0395e
--- /dev/null
+++ b/project-web/src/views/home/index.vue
@@ -0,0 +1,241 @@
+<template>
+  <div>
+    <el-container>
+      <!--宸︿笂瑙掓暟鎹� -->
+      <div class="total-main f-r f-r-top">
+        <img src="@/assets/images/map/close-total.png" alt="鍏抽棴" v-if="totalShow" @click="totalShow = false" class="open-icon">
+        <img src="@/assets/images/map/open-total.png" alt="灞曞紑" v-if="!totalShow" @click="totalShow = true" class="open-icon">
+        <transition name="el-zoom-in-left">
+          <div class="total-box" v-show="totalShow">
+            <div class="font-18 color-333 font-bold">褰撳墠鑼冨洿锛歿{ cityName }}</div>
+            <div class="f-r total-list">
+              <div class="total-item f-r f-r-top" v-for="(t,index) in totalList" :key="index">
+                <img :src="typeIcon(t.type)" class="t-icon"/>
+                <div>
+                  <div class="font-13 color-333">{{t.name}}</div>
+                  <div class="font-20 color-333 font-bold">{{t.num}}</div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </transition>
+      </div>
+      <div style="position: relative; z-index: 0; width: 100%; height: 100%">
+        <div id="home"></div>
+      </div>
+      <!-- 鍙充晶鍒楄〃 -->
+      <div class="toggle-box" :class="projectShow ? 'toggle-box-right' : ''" @click="showProject">
+        <i style="font-size: 16px" class="el-icon-arrow-left"/>
+      </div>
+      <project-lists v-if="projectShow" @close="projectShow=false"></project-lists>
+    </el-container>
+  </div>
+</template>
+
+<script>
+import projectLists from "@/views/home/projectList";
+
+export default {
+  name: "index",
+  components: {projectLists},
+  data() {
+    return {
+      projectShow: false,
+      loading: false,
+      totalShow: false, // 鏄惁鏄剧ず宸︿笂瑙掓�昏
+      map: null,
+      windowHeight: document.documentElement.clientHeight, // 瀹炴椂灞忓箷楂樺害
+      cityName: "閮戝窞甯�",
+      centerLatLng: '',
+      zoom: 8,
+      cur: null, // 褰撴湡閫変腑鍦板尯涓嬫爣
+      infoWindow: {
+        show: false,
+        data: "", // 寮圭獥淇℃伅
+        img: '', // 寮圭獥鍥炬爣
+        lat: '',
+        lng: '',
+      },
+      markerArr:[],
+      totalList: [
+        {id: 1, type: 1, num: 6,name:'缁煎悎涓氬姟妤�'},
+        {id: 2, type: 2, num: 7,name:'鐪佽涓績'},
+        {id: 3, type: 3, num: 8,name:'甯傚鐞嗕腑蹇�'},
+        {id: 4, type: 4, num: 9,name:'鍘夸粨閰嶄腑蹇�'},
+        {id: 5, type: 5, num: 10,name:'璐疆'},
+        {id: 6, type: 6, num: 11,name:'鏀瑰缓'},
+        {id: 7, type: 7, num: 12,name:'淇℃伅鍖�'},
+        {id: 8, type: 8, num: 13,name:'宸ヨ壓鏀归��'},
+        {id: 9, type: 9, num: 14,name:'鍏朵粬'},
+        {id: 10, type: 10, num: 15,name:'涓夊啘'},
+        {id: 11, type: 11, num: 16,name:'涓夌骇鐗╂祦浣撶郴'},
+      ],
+      projectList: [], // 椤圭洰缁熻鍒楄〃
+      cityList: [] // 鍩庡競鍒楄〃
+    }
+  },
+  mounted() {
+    setTimeout(() => {
+      try {
+        this.initMap();// 娓叉煋鍦板浘
+      } catch (e) {
+        console.log(e)
+      }
+    }, 50);
+  },
+  methods: {
+    initMap() {
+      var center = new TMap.LatLng(39.984120, 116.307484)
+      //瀹氫箟map鍙橀噺锛岃皟鐢� TMap.Map() 鏋勯�犲嚱鏁板垱寤哄湴鍥�
+      this.map = new TMap.Map(document.getElementById('home'), {
+        center: center,//璁剧疆鍦板浘涓績鐐瑰潗鏍�
+        zoom: this.zoom,   //璁剧疆鍦板浘缂╂斁绾у埆
+      });
+      this.map.removeControl(TMap.constants.DEFAULT_CONTROL_ID.SCALE);//绉婚櫎鑵捐鍦板浘姣斾緥灏�
+      this.map.removeControl(TMap.constants.DEFAULT_CONTROL_ID.ROTATION);//绉婚櫎鑵捐鍦板浘鏃嬭浆鎺т欢
+    },
+    initMarkerObj() {
+      var that = this
+      this.marker = new TMap.MultiMarker({
+        id: 'marker_s',
+        map: this.map, // 鏄剧ずMarker鍥惧眰鐨勫簳鍥�
+        styles: {
+          markerStyle: new TMap.MarkerStyle({  //  markerStyle鏄懠鍚哥偣鏍峰紡鍚嶇О
+            // 鐐规爣娉ㄧ殑鐩稿叧鏍峰紡
+            width: 78, // 瀹藉害
+            height: 100, // 楂樺害
+            anchor: { x: 39, y: 50 }, // 鏍囨敞鐐瑰浘鐗囩殑閿氱偣浣嶇疆
+            src: require("@/assets/images/map/icon-gj.png"), // 鏍囨敞鐐瑰浘鐗噓rl鎴朾ase64鍦板潃
+            color: '#fff', // 鏍囨敞鐐规枃鏈鑹�
+            size: 18, // 鏍囨敞鐐规枃鏈枃瀛楀ぇ灏�
+            direction: 'top', // 鏍囨敞鐐规枃鏈枃瀛楃浉瀵逛簬鏍囨敞鐐瑰浘鐗囩殑鏂逛綅
+            offset: { x: 0, y: 10 }, // 鏍囨敞鐐规枃鏈枃瀛楀熀浜巇irection鏂逛綅鐨勫亸绉诲睘鎬�
+            strokeColor: '#fff', // 鏍囨敞鐐规枃鏈弿杈归鑹�
+            strokeWidth: 0.5, // 鏍囨敞鐐规枃鏈弿杈瑰搴�
+          })
+        },
+        enableCollision: true, // 寮�鍚鎾�
+        geometries: that.markerArr,//浣嶇偣鏁扮粍
+      })
+    },
+    showProject(){
+      this.projectShow = !this.projectShow
+    },
+    // 宸︿笂瑙掑睍绀轰笉鍚屽浘鏍�
+    typeIcon(type) {
+      // type 1缁煎悎涓氬姟妤� 2 鐪佽涓績 3 甯傚鐞嗕腑蹇� 4鍘夸粨閰嶄腑蹇� 5璐疆 6鏀瑰缓 7淇℃伅鍖� 8 宸ヨ壓鏀归�� 9鍏朵粬 10涓夊啘 11 榛樿
+      let src = require('@/assets/images/map/icon-other.png')
+      switch (type) {
+        case 1:
+          src = require("@/assets/images/map/icon-zhywl.png")
+          break
+        case 2:
+          src = require("@/assets/images/map/icon-sjzx.png")
+          break
+        case 3:
+          src = require("@/assets/images/map/icon-sclzx.png")
+          break
+        case 4:
+          src = require("@/assets/images/map/icon-xcpzx.png")
+          break
+        case 5:
+          src = require("@/assets/images/map/icon-gz.png")
+          break
+        case 6:
+          src = require("@/assets/images/map/icon-gj.png")
+          break
+        case 7:
+          src = require("@/assets/images/map/icon-xxh.png")
+          break
+        case 8:
+          src = require("@/assets/images/map/icon-gygz.png")
+          break
+        case 9:
+          src = require("@/assets/images/map/icon-qt.png")
+          break
+        case 10:
+          src = require("@/assets/images/map/icon-sn.png")
+          break
+        default:
+          src = require("@/assets/images/map/icon-other.png")
+          break
+      }
+      return src
+    },
+    // 闅忔満棰滆壊
+    ranDombg() {
+      var r = Math.floor((Math.random() + 0.3) * 256);
+      var g = Math.floor((Math.random() + 0.3) * 256);
+      var b = Math.floor((Math.random() + 0.3) * 256);
+      return "rgb(" + r + "," + g + "," + b + ")";
+    }
+  }
+}
+</script>
+
+<style scoped lang="scss">
+.total-main {
+  position: absolute;
+  top: 0;
+  left: 0;
+  padding: 15px;
+  z-index: 10;
+}
+.total-box{
+  width: 530px;
+  margin-left: 15px;
+  background-color: #FFFFFF;
+  border-radius: 8px;
+  padding: 15px 30px;
+}
+.total-list {
+  margin-top: 5px;
+  flex-wrap: wrap;
+}
+
+.total-item {
+  width: 25%;
+  margin:10px 0;
+}
+
+.t-icon {
+  width: 28px;
+  height: 28px;
+  margin-right: 8px;
+}
+.open-icon{
+  cursor: pointer;
+}
+.font-20{
+  font-size: 20px;
+}
+.toggle-box {
+  cursor: pointer;
+  width: 23px;
+  height: 97px;
+  border-radius: 31px 0 0 31px;
+  border: 1px solid #eeeeee;
+  box-sizing: border-box;
+  background: #0D997C;
+  position: absolute;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  font-size: 24px;
+  top: 50%;
+  right: 0;
+  z-index: 2;
+  transform: rotate(0);
+  transform: translateY(-50%);
+  i {
+    color: #fff;
+  }
+}
+.toggle-box-right {
+  right: 400px;
+  i {
+    transform: rotate(180deg);
+    transition-delay: 0.2s;
+  }
+}
+</style>
diff --git a/project-web/src/views/home/projectList.vue b/project-web/src/views/home/projectList.vue
new file mode 100644
index 0000000..a022e23
--- /dev/null
+++ b/project-web/src/views/home/projectList.vue
@@ -0,0 +1,172 @@
+<template>
+  <div>
+    <transition name="el-zoom-in-right">
+      <div class="project-main">
+        <div>
+          <div class="f-r f-r-between project-top">
+            <div class="font-14 search-switch" @click="formShow=true">
+              鏉′欢绛涢�� <i style="font-size: 16px" class="el-icon-arrow-down"></i>
+            </div>
+            <div class="font-14 color-333">鍏ㄩ儴{{total}}鏉$粨鏋�</div>
+          </div>
+          <!-- 鍒楄〃 -->
+          <div class="com-c-box" :loading="loading">
+            <div class="info-main">
+              <div class="p-item f-r f-r-top" v-for="(t,index) in projectLists" :key="index">
+                <img :src="typeIcon(t.type)" class="t-icon"/>
+                <div class="f-1">
+                  <div class="font-18 project-name font-bold">{{t.projectName}}</div>
+                  <div style="color:#235686" class="font-12">{{t.projectCategoryName}}</div>
+                  <div class="f-r f-r-between">
+                    <div class="font-14 color-999">寤鸿鍗曚綅</div>
+                    <div class="font-14 color-333">{{t.buildOrgName}}</div>
+                  </div>
+                  <div class="f-r f-r-between">
+                    <div class="font-14 color-999">寤鸿璧锋骞撮檺</div>
+                    <div class="font-14 color-333">{{t.buildYearStart}}-{{t.buildYearEnd}}</div>
+                  </div>
+                  <div class="f-r f-r-between">
+                    <div class="font-14 color-999">涓昏寤鸿鍐呭</div>
+                    <div class="font-14 color-333">{{t.detail}}</div>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="f-r f-r-center btn-bot">
+            <!-- 鍒嗛〉-->
+            <el-pagination
+              small
+              :current-page="page.pageNum"
+              :page-size="page.pageSize"
+              layout="prev, pager, next"
+              :total="total"
+              @size-change="handleSizeChange"
+              @current-change="handleCurrentChange">
+            </el-pagination>
+          </div>
+        </div>
+      </div>
+    </transition>
+    <searchForm v-if="formShow" @close="formShow=false"></searchForm>
+  </div>
+</template>
+
+<script>
+import searchForm from "@/views/home/searchForm";
+export default {
+  name: "projectList",
+  components:{ searchForm },
+  data(){
+    return {
+      loading:false, // 鍒楄〃鍔犺浇
+      formShow:false, // 鍙充晶琛ㄥ崟
+      total:23,
+      page:{
+        pageNum:1,
+        pageSize:10
+      },
+      projectLists:[
+        { projectName:'xxxxx鍥哄畾璧勪骇椤圭洰涓�',projectCategoryName:'缁煎悎涓氬姟妤�',buildOrgName:'璁告槍灏夋皬鍘垮垎鍏徃',buildYearStart:2023,buildYearEnd:2025,detail:'寤鸿瑙勬ā5200骞虫硶绫�'},
+        { projectName:'xxxxx鍥哄畾璧勪骇椤圭洰涓�',projectCategoryName:'缁煎悎涓氬姟妤�',buildOrgName:'璁告槍灏夋皬鍘垮垎鍏徃',buildYearStart:2023,buildYearEnd:2025,detail:'寤鸿瑙勬ā5200骞虫硶绫�'},
+        { projectName:'xxxxx鍥哄畾璧勪骇椤圭洰涓�',projectCategoryName:'缁煎悎涓氬姟妤�',buildOrgName:'璁告槍灏夋皬鍘垮垎鍏徃',buildYearStart:2023,buildYearEnd:2025,detail:'寤鸿瑙勬ā5200骞虫硶绫�'},
+        { projectName:'xxxxx鍥哄畾璧勪骇椤圭洰涓�',projectCategoryName:'缁煎悎涓氬姟妤�',buildOrgName:'璁告槍灏夋皬鍘垮垎鍏徃',buildYearStart:2023,buildYearEnd:2025,detail:'寤鸿瑙勬ā5200骞虫硶绫�'},
+        { projectName:'xxxxx鍥哄畾璧勪骇椤圭洰涓�',projectCategoryName:'缁煎悎涓氬姟妤�',buildOrgName:'璁告槍灏夋皬鍘垮垎鍏徃',buildYearStart:2023,buildYearEnd:2025,detail:'寤鸿瑙勬ā5200骞虫硶绫�'},
+        { projectName:'xxxxx鍥哄畾璧勪骇椤圭洰涓�',projectCategoryName:'缁煎悎涓氬姟妤�',buildOrgName:'璁告槍灏夋皬鍘垮垎鍏徃',buildYearStart:2023,buildYearEnd:2025,detail:'寤鸿瑙勬ā5200骞虫硶绫�'},
+        { projectName:'xxxxx鍥哄畾璧勪骇椤圭洰涓�',projectCategoryName:'缁煎悎涓氬姟妤�',buildOrgName:'璁告槍灏夋皬鍘垮垎鍏徃',buildYearStart:2023,buildYearEnd:2025,detail:'寤鸿瑙勬ā5200骞虫硶绫�'},
+      ]
+    }
+  },
+  methods:{
+    close(){
+      this.$emit('close')
+    },
+    // 灞曠ず涓嶅悓鍥炬爣
+    typeIcon(type) {
+      // type 1 鏈繘琛� 2宸插畬鎴� 3杩涜涓� 4宸插彇娑�
+      let src = require('@/assets/images/map/wait.png')
+      switch (type) {
+        case 1:
+          src = require("@/assets/images/map/wait.png")
+          break
+        case 2:
+          src = require("@/assets/images/map/end.png")
+          break
+        case 3:
+          src = require("@/assets/images/map/ing.png")
+          break
+        default:
+          src = require("@/assets/images/map/cancel.png")
+          break
+      }
+      return src
+    },
+    search(pageNum){
+      if(pageNum){
+        this.page.pageNum = pageNum
+      }
+      this.loading = true
+    },
+    //鍒嗛〉
+    handleSizeChange(pageSize) {
+      this.page.pageSize = pageSize;
+      this.search(1);
+    },
+    handleCurrentChange(pageNum) {
+      this.page.pageNum = pageNum;
+      this.search(1);
+    },
+  }
+}
+</script>
+
+<style scoped>
+.project-main{
+  position: absolute;
+  top:0;
+  right: 0;
+  bottom: 0;
+  width: 400px;
+  background-color: #FFFFFF;
+}
+.project-top{
+  padding:15px;
+}
+.search-switch{
+  width: 100px;
+  line-height: 32px;
+  border-radius: 4px;
+  text-align: center;
+  cursor: pointer;
+  border: 1px solid #c8ced5;
+}
+.com-c-box{
+  overflow-y: auto;
+  max-height: calc(100vh - 240px);
+}
+>>>.com-c-box::-webkit-scrollbar {
+  display: none;
+}
+.info-main{
+  padding: 15px;
+  position: relative;
+}
+.t-icon{
+  min-width: 40px;
+  max-width: 40px;
+  height: 40px;
+  margin-right: 10px;
+}
+.p-item{
+  line-height: 24px;
+  padding:15px 0;
+  border-top: 1px solid #eeeeee;
+}
+.project-name{
+  color: #333333;
+}
+.project-name:hover{
+  color: #0D997C;
+  cursor: pointer;
+}
+</style>
diff --git a/project-web/src/views/home/searchForm.vue b/project-web/src/views/home/searchForm.vue
new file mode 100644
index 0000000..299dda6
--- /dev/null
+++ b/project-web/src/views/home/searchForm.vue
@@ -0,0 +1,222 @@
+<template>
+  <div>
+    <transition name="el-zoom-in-top">
+      <div class="search-main">
+        <div class="info-main">
+          <div class="f-r f-r-between topic-title">
+            <div class="font-16 color-333">鏉′欢绛涢��</div>
+            <i class="el-icon-close font-18 pointer" @click="close"></i>
+          </div>
+          <div class="com-c-box">
+            <el-form ref="dataForm" :model="formData" label-width="90px">
+              <el-form-item label="閫夋嫨鍖哄煙">
+                <el-cascader
+                  :options="orgOptions"
+                  :show-all-levels="false"
+                  :props="{ value: 'id',label:'label' }"
+                  v-model="formData.orgId"
+                  style="width:100%"></el-cascader>
+              </el-form-item>
+              <el-form-item label="椤圭洰鐘舵��">
+                <el-checkbox-group v-model="formData.status" size="small">
+                  <el-checkbox-button v-for="(c,j) in statusList" :label="c.value" :key="c.value">{{c.name}}</el-checkbox-button>
+                </el-checkbox-group>
+              </el-form-item>
+              <el-form-item label="椤圭洰鍒嗙被">
+                <el-cascader
+                  :options="categoryOptions"
+                  :show-all-levels="false"
+                  :props="{ value: 'id',label:'label' }"
+                  v-model="formData.projectCategoryId"
+                  style="width:100%"></el-cascader>
+              </el-form-item>
+              <el-form-item label="鐩磋惀鍗曚綅">
+                <el-cascader
+                  :options="orgZsOptions"
+                  :props="{ value: 'dict_code',label:'dict_label' }"
+                  v-model="formData.directUnitCode"
+                  style="width:100%"></el-cascader>
+              </el-form-item>
+              <el-form-item label="寤鸿鍗曚綅">
+                <el-cascader
+                  :options="buildOrgOptions"
+                  :props="{ value: 'id',label:'label', checkStrictly: true }"
+                  v-model="formData.buildOrgId"
+                  style="width:100%"></el-cascader>
+              </el-form-item>
+              <div class="f-r f-r-between">
+                <el-form-item label="寤鸿骞撮檺">
+                  <el-date-picker
+                    style="width:100%"
+                    v-model="buildDate"
+                    type="daterange"
+                    range-separator="鑷�"
+                    start-placeholder="寮�濮嬫棩鏈�"
+                    end-placeholder="缁撴潫鏃ユ湡">
+                  </el-date-picker>
+                </el-form-item>
+              </div>
+              <el-form-item label="椤圭洰鎵规">
+                <el-select v-model="formData.projectBatchCode" placeholder="璇烽�夋嫨" style="width:100%">
+                  <el-option
+                    v-for="item in batchOptions"
+                    :label="item.dict_label"
+                    :value="item.dict_code">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="鎶曡祫涓撲笟">
+                <el-select v-model="formData.investMajorCode" placeholder="璇烽�夋嫨" style="width:100%">
+                  <el-option
+                    v-for="item in investOptions"
+                    :key="item.dict_code"
+                    :label="item.dict_label"
+                    :value="item.dict_code">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-form>
+          </div>
+          <div class="f-r f-r-center btn-bot">
+            <my-button name="纭畾" site="form" @click="save"/>
+            <my-button name="閲嶇疆" site="form" @click="reset"/>
+          </div>
+        </div>
+      </div>
+    </transition>
+  </div>
+</template>
+
+<script>
+import * as finsystenant from "@/api/baseSetting/finsystenant";
+import * as classify from "@/api/projectManage/classify";
+import * as system from "@/api/system/dict/data";
+import myButton from '@/components/myButton/myButton'
+export default {
+  name: "searchForm",
+  components:{ myButton },
+  data(){
+    return {
+      formShow:true,
+      orgOptions:[], // 閫夋嫨鍖哄煙
+      categoryOptions:[], // 椤圭洰鍒嗙被
+      orgZsOptions:[], // 鐩磋惀鍗曚綅
+      buildOrgOptions:[], // 寤鸿鍗曚綅
+      batchOptions:[], // 椤圭洰鎵规
+      investOptions:[], // 鎶曡祫涓撲笟
+      statusList:[
+        {name:'鏈紑濮�',value:1},
+        {name:'杩涜涓�',value:2},
+        {name:'宸插畬宸�',value:3},
+        {name:'宸插彇娑�',value:4},
+        // {name:'宸查�炬湡',value:5},
+      ],
+      formData: {
+        projectCategoryId: '',
+        planTypeCode: '',
+        projectName: '',
+        projectCode: '',
+        status:[],
+        directUnitCode: '',
+        buildOrgId:'',
+        buildYearStart:'',
+        buildYearEnd:'',
+        projectBatchCode:'',
+        investMajorCode:'',
+      },
+      buildDate:[]
+    }
+  },
+  created() {
+    this.getProjectClass() // 鑾峰彇椤圭洰鍒嗙被
+    this.getProjectBatch() // 鑾峰彇椤圭洰鎵规
+    this.getProjectInvest() // 鑾峰彇鎶曢�掍笓涓�
+    this.getProjectDirect() // 鑾峰彇鐩磋惀鍗曚綅
+    this.getOrg() // 鑾峰彇寤鸿鍗曚綅
+  },
+  methods:{
+    // 鑾峰彇椤圭洰鍒嗙被
+    getProjectClass(){
+      classify.classifyTree().then(res => {
+        const content = res || []
+        this.categoryOptions = content
+      })
+    },
+    // 鑾峰彇椤圭洰鎵规
+    getProjectBatch(){
+      system.getDicts('project_batch').then(res=>{
+        this.batchOptions = res
+      })
+    },
+    // 鑾峰彇鎶曢�掍笓涓�
+    getProjectInvest(){
+      system.getDicts('INVEST_MAJOR').then(res=>{
+        this.investOptions = res
+      })
+    },
+    // 鑾峰彇鐩磋惀鍗曚綅
+    getProjectDirect(){
+      system.getDicts('DIRECT_UNIT').then(res=>{
+        this.orgZsOptions = res
+      })
+    },
+    // 鑾峰彇寤鸿鍗曚綅
+    getOrg() {
+      finsystenant.getTree().then(res => {
+        if (res) {
+          this.buildOrgOptions = res
+        } else {
+          this.buildOrgOptions = []
+        }
+        this.$forceUpdate()
+      })
+    },
+    // 纭畾
+    save(){},
+    // 閲嶇疆
+    reset(){},
+    close(){
+      this.$emit('close')
+    }
+  }
+}
+</script>
+
+<style scoped>
+.search-main{
+  position: absolute;
+  top:0;
+  right: 0;
+  bottom: 0;
+  width: 400px;
+  z-index: 101;
+  background-color: #FFFFFF;
+  box-sizing: border-box;
+}
+.com-c-box{
+  padding-right:15px;
+  overflow-y: auto;
+  max-height: calc(100vh - 240px);
+}
+>>>.com-c-box::-webkit-scrollbar {
+  display: none;
+}
+.topic-title{
+  padding: 0 20px 20px 20px;
+}
+.pointer{
+  cursor: pointer;
+}
+.info-main{
+  box-sizing: border-box;
+  padding:20px 0;
+  position: relative;
+}
+.btn-bot{
+  width: 100%;
+  padding:15px 0;
+  background-color: #FFFFFF;
+  border-top:1px solid #eeeeee;
+  z-index: 11;
+}
+</style>
diff --git a/project-web/src/views/login/auth-redirect.vue b/project-web/src/views/login/auth-redirect.vue
new file mode 100644
index 0000000..ed3a92a
--- /dev/null
+++ b/project-web/src/views/login/auth-redirect.vue
@@ -0,0 +1,16 @@
+<template></template>
+<script>
+export default {
+  name: 'AuthRedirect',
+  created() {
+    const hash = window.location.search.slice(1);
+    if (window.localStorage) {
+      window.localStorage.setItem('x-admin-oauth-code', hash);
+      window.close();
+    }
+  },
+  render: function (h) {
+    return h(); // avoid warning message
+  },
+};
+</script>
diff --git a/project-web/src/views/login/bak-index.vue b/project-web/src/views/login/bak-index.vue
new file mode 100644
index 0000000..90f9eb9
--- /dev/null
+++ b/project-web/src/views/login/bak-index.vue
@@ -0,0 +1,594 @@
+<template>
+  <div class="login-bg">
+    <img src="@/assets/imgs/login-name.png" alt="涓�浣撳寲杩愮淮鏈嶅姟鏀拺骞冲彴" class="logo-name"/>
+    <div class="index_from">
+      <div class="page-account-top">
+        娆㈣繋鐧诲綍
+      </div>
+      <el-form
+        ref="loginForm"
+        :model="loginForm"
+        :rules="loginRules"
+        class="login-form"
+        autocomplete="on"
+        label-position="left"
+        @keyup.enter="handleLogin"
+      >
+        <el-form-item prop="account">
+          <el-input
+            v-model.trim="loginForm.account"
+            prefix-icon="el-icon-user"
+            placeholder="鐢ㄦ埛鍚�"
+            type="text"
+            tabindex="1"
+            autocomplete="off"
+          />
+        </el-form-item>
+
+        <el-form-item prop="password">
+          <el-input
+            :key="passwordType"
+            v-model.trim="loginForm.password"
+            prefix-icon="el-icon-lock"
+            :type="passwordType"
+            placeholder="瀵嗙爜"
+            tabindex="2"
+            auto-complete="off"
+          />
+          <span class="show-pwd" @click="showPwd">
+              <svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'"/>
+            </span>
+        </el-form-item>
+
+        <el-form-item prop="code" class="captcha" v-if="loginForm.verifyType==='code' && captchaEnabled">
+          <div class="captcha">
+            <el-input
+              v-model.trim="loginForm.code"
+              style="width: 218px"
+              prefix-icon="el-icon-message"
+              placeholder="楠岃瘉鐮�"
+              type="text"
+              tabindex="3"
+              autocomplete="off"
+            />
+            <div class="imgs" @click="getCode()">
+              <!--                <img :src="captchatImg" />-->
+              <img :src="codeUrl"/>
+              <span v-show="showCaptchatImg">宸插け鏁�</span>
+            </div>
+          </div>
+        </el-form-item>
+
+        <div class="acea-row">
+          <el-button
+            :loading="loading"
+            type="primary"
+            style="width: 100%; margin-bottom: 80px"
+            @click.native.prevent="handleLogin"
+            :disabled="disabled"
+          >鐧诲綍
+          </el-button>
+        </div>
+      </el-form>
+
+    </div>
+  </div>
+</template>
+
+<script>
+import {validUsername} from '@/utils/validate';
+import {getCodeImg, getCodeNone} from '@/api/user';
+
+export default {
+  name: 'Login',
+  data() {
+    const validateUsername = (rule, value, callback) => {
+      if (!validUsername(value)) {
+        callback(new Error('Please enter the correct user name'));
+      } else {
+        callback();
+      }
+    };
+    const validatePassword = (rule, value, callback) => {
+      if (value.length < 6 || value.length > 12) {
+        callback(new Error('瀵嗙爜浣嶆暟涓�6-12浣�'));
+      } else {
+        callback();
+      }
+    };
+    return {
+      verify: false,  // 婊戝姩鏍¢獙
+      showCaptchatImg: false,
+      // captchatImg: '',
+      codeUrl: "",
+      fullWidth: document.body.clientWidth,
+      swiperOption: {
+        pagination: {
+          el: '.pagination',
+        },
+        autoplay: {
+          enabled: false,
+          disableOnInteraction: false,
+          delay: 3000,
+        },
+      },
+      loginForm: {
+        account: 'supervisor', // admin
+        password: '123456',
+        // key: '',
+        uuid: '',
+        code: '',
+        loginType: 'user_pass',  // 鐢ㄦ埛鍚嶃�佸瘑鐮佹柟寮忕櫥褰�
+        verifyType: 'code'     //  'code': 楠岃瘉鐮�  'slide':婊戝潡  'jigsaw':鎷煎浘
+        // captcha: {
+        //   captchaVerification: '',
+        //   secretKey: '',
+        //   token: '',
+        // },
+      },
+      loginRules: {
+        account: [{required: true, trigger: 'blur', message: '璇疯緭鍏ョ敤鎴峰悕'}], // validator: validateUsername
+        password: [{required: true, trigger: 'blur', message: '璇疯緭鍏ュ瘑鐮�'}],
+        code: [{required: true, message: '璇疯緭鍏ユ纭殑楠岃瘉鐮�', trigger: 'blur'}],
+      },
+      passwordType: 'password',
+      capsTooltip: false,
+      loading: false,
+      showDialog: false,
+      redirect: undefined,
+      otherQuery: {},
+      disabled: false,
+      isWeixin: this.$wechat.isWeixin(),
+      // 楠岃瘉鐮佸紑鍏�
+      captchaEnabled: true
+    };
+  },
+  components: {},
+  watch: {
+    fullWidth(val) {
+      // 涓轰簡閬垮厤棰戠箒瑙﹀彂resize鍑芥暟瀵艰嚧椤甸潰鍗¢】锛屼娇鐢ㄥ畾鏃跺櫒
+      if (!this.timer) {
+        // 涓�鏃︾洃鍚埌鐨剆creenWidth鍊兼敼鍙橈紝灏卞皢鍏堕噸鏂拌祴缁檇ata閲岀殑screenWidth
+        this.screenWidth = val;
+        this.timer = true;
+        const that = this;
+        setTimeout(function () {
+          // 鎵撳嵃screenWidth鍙樺寲鐨勫��
+          that.timer = false;
+        }, 400);
+      }
+    },
+    $route: {
+      handler: function (route) {
+        const query = route.query;
+        if (query) {
+          this.redirect = query.redirect;
+          this.otherQuery = this.getOtherQuery(query);
+        }
+      },
+      immediate: true,
+    },
+  },
+  created() {
+    const _this = this;
+    document.onkeydown = function (e) {
+      if (_this.$route.path.indexOf('login') !== -1) {
+        const key = window.event.keyCode;
+        if (key === 13) {
+          _this.handleLogin();
+        }
+      }
+    };
+    window.addEventListener('resize', this.handleResize);
+  },
+  mounted() {
+    if (this.loginForm.account === '') {
+      this.$refs.account.focus();
+    } else if (this.loginForm.pwd === '') {
+      this.$refs.password.focus();
+    }
+    this.getCode();
+  },
+  methods: {
+    verifyTrue() {
+      this.verify = true
+    },
+    verifyFalse() {
+      this.verify = false
+    },
+
+    checkCapslock(e) {
+      const {key} = e;
+      this.capsTooltip = key && key.length === 1 && key >= 'A' && key <= 'Z';
+    },
+    showPwd() {
+      if (this.passwordType === 'password') {
+        this.passwordType = '';
+      } else {
+        this.passwordType = 'password';
+      }
+      this.$nextTick(() => {
+        this.$refs.pwd.focus();
+      });
+    },
+    handleLogin() {
+      this.$refs.loginForm.validate((valid) => {
+        if (valid) {
+          this.success(null);
+        } else {
+          return false;
+        }
+      });
+    },
+    success(params) {
+      this.loginForm.captcha = this.$store.state.user.captcha;
+      const loading = this.$loading({
+        lock: true,
+        text: '姝e湪鐧诲綍涓�.',
+      });
+      this.$store
+        .dispatch('user/login', this.loginForm)
+        .then(() => {
+          this.$store.dispatch('user/getInfo').then(res => {
+            this.$router.push({path: this.redirect || '/dashboard', query: this.otherQuery});
+            loading.close();
+            this.disabled = true;
+          }).catch((err) => {
+            loading.close();
+            this.disabled = false;
+            if (this.$wechat.isPhone()) this.$dialog.error(err.message);
+            this.loginForm.code = null;
+            this.getCode();
+          })
+        })
+        .catch((err) => {
+          loading.close();
+          this.disabled = false;
+          if (this.$wechat.isPhone()) this.$dialog.error(err.message);
+          this.loginForm.code = null;
+          this.getCode();
+        });
+    },
+
+    getCode() {
+      if (this.loginForm.verifyType === 'code') {
+        getCodeImg().then(data => {
+          this.captchaEnabled = data.captchaEnabled === undefined ? true : data.captchaEnabled;
+          if (this.captchaEnabled) {
+            this.codeUrl = "data:image/jpeg;base64," + data.img;
+          }
+          // 鏈夋病鏈夐獙璇佺爜锛岄兘闇�瑕乽uid浣滀负鍞竴鏍囪瘑锛�2022-12-01
+          this.loginForm.uuid = data.uuid;
+
+          // 2023-05-12 鎸夋柊鏂规硶锛屽け璐ヤ細鏄剧ず楠岃瘉鐮佹棤鏁�
+          this.showCaptchatImg = false;
+          setTimeout(() => {
+            this.showCaptchatImg = true;
+          }, 270000);
+
+        }).catch(err => {
+          console.log(err);
+        });
+
+      } else if (this.loginForm.verifyType === 'jigsaw') {
+        // 鎷煎浘鏂瑰紡锛岀湅闇�瑕佸暐鍙傛暟锛屾殏鏈疄鐜�
+        this.loginForm.code = 'jigsaw'; // 濉厖code榛樿鍊硷紝鍚﹀垯楠岃瘉涓嶉�氳繃銆�2023-04-06
+        this.loginForm.uuid = '';       // 娓呯┖楠岃瘉鐮侊紝涓轰笅娆¢噸鏂伴獙璇佸噯澶囥��2023-04-16
+
+      } else if (this.loginForm.verifyType === 'slide' || this.loginForm.verifyType === 'sms') {
+        // 涓嶉渶瑕侀獙璇佺爜锛屼絾浠嶉渶瑕佽姹傛帴鍙h幏鍙杣uid
+        getCodeNone().then(data => {
+          this.loginForm.uuid = data.uuid;
+        }).catch(err => {
+          console.error(err);
+        });
+
+      } else {
+        this.$message.error('涓嶆敮鎸佺殑楠岃瘉鐮佺被鍨�:' + this.loginForm.verifyType);
+      }
+    },
+    getOtherQuery(query) {
+      return Object.keys(query).reduce((acc, cur) => {
+        if (cur !== 'redirect') {
+          acc[cur] = query[cur];
+        }
+        return acc;
+      }, {});
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+$screen-md: 768px;
+$font-size-base: 14px;
+$animation-time: 0.3s;
+$animation-time-quick: 0.15s;
+$transition-time: 0.2s;
+$ease-in-out: ease-in-out;
+$subsidiary-color: #808695;
+.login-bg {
+  min-width: 1200px;
+  margin: 0 auto;
+  height: 100%;
+  background: url("../../assets/imgs/login-bg.png") center no-repeat;
+  background-size: 1920px 1080px;
+}
+
+.logo-name {
+  position: absolute;
+  top: 20px;
+  left: 20px;
+}
+
+.wechat {
+  width: 26px;
+  height: 26px;
+
+  img {
+    width: 100%;
+    height: 100%;
+  }
+}
+
+.page-account {
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+  height: 100vh;
+  overflow: auto;
+
+  &-container {
+    flex: 1;
+    padding: 32px 0;
+    text-align: center;
+    width: 384px;
+    margin: 0 auto;
+
+    &-result {
+      width: 100%;
+    }
+  }
+
+  &-tabs {
+    .ivu-tabs-bar {
+      border-bottom: none;
+    }
+
+    .ivu-tabs-nav-scroll {
+      text-align: center;
+    }
+
+    .ivu-tabs-nav {
+      display: inline-block;
+      float: none;
+    }
+  }
+
+  &-top {
+    padding: 32px 0;
+
+    &-logo {
+      img {
+        max-height: 75px;
+      }
+    }
+
+    &-desc {
+      font-size: $font-size-base;
+      color: $subsidiary-color;
+    }
+  }
+
+  &-auto-login {
+    margin-bottom: 24px;
+    text-align: left;
+
+    a {
+      float: right;
+    }
+  }
+
+  &-other {
+    margin: 24px 0;
+    text-align: left;
+
+    span {
+      font-size: $font-size-base;
+    }
+
+    img {
+      width: 24px;
+      margin-left: 16px;
+      cursor: pointer;
+      vertical-align: middle;
+      opacity: 0.7;
+      transition: all $transition-time $ease-in-out;
+
+      &:hover {
+        opacity: 1;
+      }
+    }
+  }
+
+  .ivu-poptip,
+  .ivu-poptip-rel {
+    display: block;
+  }
+
+  &-register {
+    float: right;
+
+    &-tip {
+      text-align: left;
+
+      &-title {
+        font-size: $font-size-base;
+      }
+
+      &-desc {
+        white-space: initial;
+        font-size: $font-size-base;
+        margin-top: 6px;
+      }
+    }
+  }
+
+  &-to-login {
+    text-align: center;
+    margin-top: 16px;
+  }
+
+  &-header {
+    text-align: right;
+    position: fixed;
+    top: 16px;
+    right: 24px;
+  }
+}
+
+@media (min-width: $screen-md) {
+  .page-account {
+    background-repeat: no-repeat;
+    background-position: center;
+    background-size: cover;
+  }
+}
+
+.page-account {
+  display: flex;
+}
+
+.page-account .code {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.page-account .code .pictrue {
+  height: 40px;
+}
+
+.swiperPross {
+  border-radius: 6px 0px 0px 6px;
+  overflow: hidden;
+}
+
+.swiperPross,
+.swiperPic,
+.swiperPic img {
+  width: 286px;
+  height: 100%;
+}
+
+.swiperPic img {
+  width: 100%;
+  height: 100%;
+}
+
+.container {
+  padding: 0 !important;
+  z-index: 1;
+  display: flex;
+}
+
+.index_from {
+  width: 400px;
+  position: absolute;
+  top: 30%;
+  right: 24%;
+  margin: 0 auto;
+  padding: 30px 50px;
+  border-radius: 16px;
+  background: #FFFFFF;
+}
+
+.page-account-top {
+  padding: 20px 0 !important;
+  font-size: 18px;
+  font-weight: bold;
+  text-align: center;
+  margin-bottom: 20px;
+}
+
+.btn {
+  background: linear-gradient(90deg, rgba(25, 180, 241, 1) 0%, rgba(14, 115, 232, 1) 100%) !important;
+}
+</style>
+
+<style lang="scss" scoped>
+.captcha {
+  display: flex;
+  align-items: flex-start;
+}
+
+$bg: #2d3a4b;
+$dark_gray: #889aa4;
+$light_gray: #eee;
+.imgs {
+  position: relative;
+  height: 36px;
+  cursor: pointer;
+
+  img {
+    height: 100%;
+  }
+
+  span {
+    width: 84px;
+    line-height: 36px;
+    display: inline-block;
+    background: rgba(0, 0, 0, 0.4);
+    position: absolute;
+    left: 0;
+    color: #fff;
+  }
+}
+
+.login-form {
+  box-sizing: border-box;
+  border-radius: 8px;
+  overflow: hidden;
+}
+
+.tips {
+  font-size: 14px;
+  color: #fff;
+  margin-bottom: 10px;
+
+  span {
+    &:first-of-type {
+      margin-right: 16px;
+    }
+  }
+}
+
+.svg-container {
+  padding: 6px 5px 6px 15px;
+  color: $dark_gray;
+  vertical-align: middle;
+  width: 30px;
+  display: inline-block;
+}
+
+.show-pwd {
+  position: absolute;
+  right: 10px;
+  top: 3px;
+  font-size: 16px;
+  color: $dark_gray;
+  cursor: pointer;
+  user-select: none;
+
+  ::v-deepsvg-icon {
+    vertical-align: 0.3em;
+  }
+}
+
+.thirdparty-button {
+  position: absolute;
+  right: 0;
+  bottom: 6px;
+}
+</style>
diff --git a/project-web/src/views/login/index.vue b/project-web/src/views/login/index.vue
new file mode 100644
index 0000000..7320b30
--- /dev/null
+++ b/project-web/src/views/login/index.vue
@@ -0,0 +1,462 @@
+<template>
+  <div class="login-container">
+    <img src="@/assets/images/login-name.png" alt="鍥哄畾璧勪骇椤圭洰寤鸿杩涘害" class="logo-name"/>
+    <el-row
+      type="flex"
+      justify="center"
+      align="center"
+      class="flex-1 min-1200"
+      :gutter="20"
+    >
+      <el-col>
+        <div class="form-main w1050">
+          <el-row>
+            <el-col :span="12"><img src="@/assets/images/form-lf.png" alt="鐧诲綍" class="logo-lf"/></el-col>
+            <el-col :span="12">
+              <div class="login-box">
+                <el-form
+                  id="loginForm"
+                  ref="loginForm"
+                  :model="loginForm"
+                  :rules="loginRules">
+                  <h3 class="title">娆㈣繋鐧诲綍</h3>
+                  <div class="f-lable">璐﹀彿</div>
+                  <el-form-item prop="account">
+                    <el-input
+                      id="input-b"
+                      ref="account"
+                      v-model="loginForm.account"
+                      placeholder="璇疯緭鍏ヨ处鍙�"
+                      name="account"
+                      type="text"
+                      auto-complete="on"
+                    />
+                  </el-form-item>
+                  <div class="f-lable">瀵嗙爜</div>
+                  <el-form-item prop="password">
+                    <el-input
+                      id="input-block"
+                      :key="passwordType"
+                      ref="pwd"
+                      v-model="loginForm.password"
+                      :type="passwordType"
+                      placeholder="璇疯緭鍏ュ瘑鐮�"
+                      name="password"
+                      auto-complete="on"
+                      @keyup.enter.native="handleLogin"
+                    />
+                    <span
+                      class="show-pwd"
+                      @click="showPwd"
+                    ><svg-icon
+                      :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'"
+                    /></span>
+                  </el-form-item>
+<!--                  <el-form-item prop="code" class="captcha" v-if="loginForm.verifyType==='code' && captchaEnabled">-->
+<!--                    <div class="captcha">-->
+<!--                      <el-input-->
+<!--                        v-model.trim="loginForm.code"-->
+<!--                        style="width: 218px"-->
+<!--                        prefix-icon="el-icon-message"-->
+<!--                        placeholder="楠岃瘉鐮�"-->
+<!--                        type="text"-->
+<!--                        tabindex="3"-->
+<!--                        autocomplete="off"-->
+<!--                      />-->
+<!--                      <div class="imgs" @click="getCode()">-->
+<!--                        &lt;!&ndash;                <img :src="captchatImg" />&ndash;&gt;-->
+<!--                        <img :src="codeUrl"/>-->
+<!--                        <span v-show="showCaptchatImg">宸插け鏁�</span>-->
+<!--                      </div>-->
+<!--                    </div>-->
+<!--                  </el-form-item>-->
+                  <el-button
+                    id="loginBtn"
+                    :loading="loading"
+                    class="login-btn"
+                    :disabled="disabled"
+                    @click.native.prevent="handleLogin"
+                  >鐧诲綍
+                  </el-button>
+                </el-form>
+              </div>
+            </el-col>
+          </el-row>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import {validUsername} from '@/utils/validate';
+import {getCodeImg, getCodeNone} from '@/api/user';
+import router from "@/router";
+
+export default {
+  name: 'Login',
+  data() {
+    const validateUsername = (rule, value, callback) => {
+      if (!validUsername(value)) {
+        callback(new Error('Please enter the correct user name'));
+      } else {
+        callback();
+      }
+    };
+    const validatePassword = (rule, value, callback) => {
+      if (value.length < 6 || value.length > 12) {
+        callback(new Error('瀵嗙爜浣嶆暟涓�6-12浣�'));
+      } else {
+        callback();
+      }
+    };
+    return {
+      verify: false,  // 婊戝姩鏍¢獙
+      showCaptchatImg: false,
+      // captchatImg: '',
+      codeUrl: "",
+      fullWidth: document.body.clientWidth,
+      swiperOption: {
+        pagination: {
+          el: '.pagination',
+        },
+        autoplay: {
+          enabled: false,
+          disableOnInteraction: false,
+          delay: 3000,
+        },
+      },
+      loginForm: {
+        account: '', // admin
+        password: '',
+        // key: '',
+        uuid: '',
+        code: '',
+        loginType: 'user_pass',  // 鐢ㄦ埛鍚嶃�佸瘑鐮佹柟寮忕櫥褰�
+        verifyType: 'code'     //  'code': 楠岃瘉鐮�  'slide':婊戝潡  'jigsaw':鎷煎浘
+        // captcha: {
+        //   captchaVerification: '',
+        //   secretKey: '',
+        //   token: '',
+        // },
+      },
+      loginRules: {
+        account: [{required: true, trigger: 'blur', message: '璇疯緭鍏ョ敤鎴峰悕'}], // validator: validateUsername
+        password: [{required: true, trigger: 'blur', message: '璇疯緭鍏ュ瘑鐮�'}],
+        code: [{required: true, message: '璇疯緭鍏ユ纭殑楠岃瘉鐮�', trigger: 'blur'}],
+      },
+      passwordType: 'password',
+      capsTooltip: false,
+      loading: false,
+      showDialog: false,
+      redirect: undefined,
+      otherQuery: {},
+      disabled: false,
+      isWeixin: this.$wechat.isWeixin(),
+      // 楠岃瘉鐮佸紑鍏�
+      captchaEnabled: true
+    };
+  },
+  components: {},
+  watch: {
+    fullWidth(val) {
+      // 涓轰簡閬垮厤棰戠箒瑙﹀彂resize鍑芥暟瀵艰嚧椤甸潰鍗¢】锛屼娇鐢ㄥ畾鏃跺櫒
+      if (!this.timer) {
+        // 涓�鏃︾洃鍚埌鐨剆creenWidth鍊兼敼鍙橈紝灏卞皢鍏堕噸鏂拌祴缁檇ata閲岀殑screenWidth
+        this.screenWidth = val;
+        this.timer = true;
+        const that = this;
+        setTimeout(function () {
+          // 鎵撳嵃screenWidth鍙樺寲鐨勫��
+          that.timer = false;
+        }, 400);
+      }
+    },
+    $route: {
+      handler: function (route) {
+        const query = route.query;
+        if (query) {
+          this.redirect = query.redirect;
+          this.otherQuery = this.getOtherQuery(query);
+        }
+      },
+      immediate: true,
+    },
+  },
+  created() {
+    const _this = this;
+    document.onkeydown = function (e) {
+      if (_this.$route.path.indexOf('login') !== -1) {
+        const key = window.event.keyCode;
+        if (key === 13) {
+          _this.handleLogin();
+        }
+      }
+    };
+    window.addEventListener('resize', this.handleResize);
+  },
+  mounted() {
+    if (this.loginForm.account === '') {
+      this.$refs.account.focus();
+    } else if (this.loginForm.pwd === '') {
+      this.$refs.password.focus();
+    }
+    this.getCode();
+  },
+  methods: {
+    verifyTrue() {
+      this.verify = true
+    },
+    verifyFalse() {
+      this.verify = false
+    },
+    checkCapslock(e) {
+      const {key} = e;
+      this.capsTooltip = key && key.length === 1 && key >= 'A' && key <= 'Z';
+    },
+    showPwd() {
+      if (this.passwordType === 'password') {
+        this.passwordType = '';
+      } else {
+        this.passwordType = 'password';
+      }
+      this.$nextTick(() => {
+        this.$refs.pwd.focus();
+      });
+    },
+    handleLogin() {
+      this.$refs.loginForm.validate((valid) => {
+        if (valid) {
+          this.success(null);
+        } else {
+          return false;
+        }
+      });
+    },
+    success(params) {
+      this.loginForm.captcha = this.$store.state.user.captcha;
+      const loading = this.$loading({
+        lock: true,
+        text: '姝e湪鐧诲綍涓�.',
+      });
+      this.$store
+        .dispatch('user/login', this.loginForm)
+        .then(() => {
+          this.$store.dispatch('user/getInfo').then(res => {
+            // 鑾峰彇璺敱鏉冮檺
+            this.$store.dispatch('permission/generateRoutes', res.roles).then(res => {
+              router.options.routes = res // 鍔ㄦ�佹坊鍔犲彲璁块棶璺敱琛�
+              router.addRoutes(res);
+              this.$router.push({path: this.redirect || '/dashboard', query: this.otherQuery});
+              loading.close();
+              this.disabled = true;
+            })
+          }).catch((err) => {
+            loading.close();
+            this.disabled = false;
+            if (this.$wechat.isPhone()) this.$dialog.error(err.message);
+            this.loginForm.code = null;
+            this.getCode();
+          })
+        })
+        .catch((err) => {
+          loading.close();
+          this.disabled = false;
+          if (this.$wechat.isPhone()) this.$dialog.error(err.message);
+          this.loginForm.code = null;
+          this.getCode();
+        });
+    },
+
+    getCode() {
+      if (this.loginForm.verifyType === 'code') {
+        getCodeImg().then(data => {
+          this.captchaEnabled = data.captchaEnabled === undefined ? true : data.captchaEnabled;
+          console.log("captchaEnabled = " + this.captchaEnabled);
+          if (this.captchaEnabled) {
+            this.codeUrl = "data:image/jpeg;base64," + data.img;
+          }
+          // 鏈夋病鏈夐獙璇佺爜锛岄兘闇�瑕乽uid浣滀负鍞竴鏍囪瘑锛�2022-12-01
+          this.loginForm.uuid = data.uuid;
+
+          // 2023-05-12 鎸夋柊鏂规硶锛屽け璐ヤ細鏄剧ず楠岃瘉鐮佹棤鏁�
+          this.showCaptchatImg = false;
+          setTimeout(() => {
+            this.showCaptchatImg = true;
+          }, 270000);
+
+        }).catch(err => {
+          console.log(err);
+        });
+
+      } else if (this.loginForm.verifyType === 'jigsaw') {
+        // 鎷煎浘鏂瑰紡锛岀湅闇�瑕佸暐鍙傛暟锛屾殏鏈疄鐜�
+        this.loginForm.code = 'jigsaw'; // 濉厖code榛樿鍊硷紝鍚﹀垯楠岃瘉涓嶉�氳繃銆�2023-04-06
+        this.loginForm.uuid = '';       // 娓呯┖楠岃瘉鐮侊紝涓轰笅娆¢噸鏂伴獙璇佸噯澶囥��2023-04-16
+
+      } else if (this.loginForm.verifyType === 'slide' || this.loginForm.verifyType === 'sms') {
+        // 涓嶉渶瑕侀獙璇佺爜锛屼絾浠嶉渶瑕佽姹傛帴鍙h幏鍙杣uid
+        getCodeNone().then(data => {
+          this.loginForm.uuid = data.uuid;
+        }).catch(err => {
+          console.error(err);
+        });
+
+      } else {
+        this.$message.error('涓嶆敮鎸佺殑楠岃瘉鐮佺被鍨�:' + this.loginForm.verifyType);
+      }
+    },
+    getOtherQuery(query) {
+      return Object.keys(query).reduce((acc, cur) => {
+        if (cur !== 'redirect') {
+          acc[cur] = query[cur];
+        }
+        return acc;
+      }, {});
+    }
+  }
+};
+</script>
+
+<style lang="scss">
+$bg: #283443;
+$light_gray: #fff;
+$cursor: #fff;
+
+@supports (-webkit-mask: none) and (not (cater-color: $cursor)) {
+  .login-container .el-input input {
+    color: $cursor;
+  }
+}
+.flex-1 {
+  flex: 1;
+}
+.min-1200 {
+  min-width: 1200px;
+}
+/* reset element-ui css */
+.login-container {
+  padding:50px;
+  line-height: 54px;
+  .el-form-item__content {
+    display: flex;
+    flex: 1;
+    line-height: 45px;
+    align-items: center;
+    border: 1px solid #eeeeee;
+    background-color: #F1F3F5;
+    border-radius: 4px;
+  }
+  .el-input {
+    flex: 1;
+    margin-left: 6px;
+    position: relative;
+    background-color: #F1F3F5;
+    top: 3px;
+    input {
+      border: none;
+      padding: 0;
+      font-size: 16px;
+      line-height: 54px;
+      background: #F1F3F5;
+      color: #333333;
+    }
+  }
+}
+</style>
+
+<style lang="scss" scoped>
+$bg: #2d3a4b;
+$dark_gray: #889aa4;
+$light_gray: #eee;
+.login-container {
+  height: 100%;
+  width: 100%;
+  background-image: url("../../assets/images/login_img.png");
+  overflow: hidden;
+  background-size: cover;
+  position: relative;
+}
+.school-logo{
+  position: absolute;
+  top:30px;
+  left: 40px;
+}
+.form-main{
+  background-color: #FFFFFF;
+  overflow: hidden;
+  border-radius: 8px;
+}
+>>>.el-button{
+  font-size: 16px;
+}
+.logo-name{
+  margin-bottom: 30px;
+}
+.logo-lf{
+  width:100%;
+}
+.login-box{
+  padding:100px;
+  .title{
+    font-size: 22px;
+    font-weight: bold;
+  }
+  .f-lable{
+    line-height: 20px;
+    margin-bottom: 10px;
+    font-size: 14px;
+    color: #333333;
+  }
+}
+.w1050 {
+  width: 1050px;
+  margin: 0 auto;
+  overflow: hidden;
+}
+.login-btn {
+  width: 100%;
+  height: 45px;
+  margin: 0 auto;
+  display: block;
+  color: #FFFFFF;
+  background-color: #0d997c;
+}
+.logo-txt {
+  position: absolute;
+  top: 5%;
+  left: 2%;
+}
+.txtBox {
+  color: #fff;
+  opacity: 0.7;
+  font-size: 12px;
+  position: absolute;
+  left: 50%;
+  transform: translateX(-50%);
+  bottom: 20px;
+  text-align: center;
+  line-height: 30px;
+  width: 610px;
+}
+.show-pwd{
+  position: relative;
+  top:5px;
+  right: 5px;
+  cursor: pointer;
+}
+.td-outer-wrapper {
+  width: 1200px !important;
+  margin: 0 auto !important;
+}
+@media screen and(max-width: 1400px) {
+  .w1050 {
+    width: 850px;
+    margin: 0 auto;
+    overflow: hidden;
+  }
+  .login-box{
+    padding:40px;
+  }
+}
+</style>
diff --git a/project-web/src/views/login/mixins.js b/project-web/src/views/login/mixins.js
new file mode 100644
index 0000000..11918f0
--- /dev/null
+++ b/project-web/src/views/login/mixins.js
@@ -0,0 +1,19 @@
+// +---------------------------------------------------------------------
+// | CRMEB [ CRMEB璧嬭兘寮�鍙戣�咃紝鍔╁姏浼佷笟鍙戝睍 ]
+// +---------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +---------------------------------------------------------------------
+// | Licensed CRMEB骞朵笉鏄嚜鐢辫蒋浠讹紝鏈粡璁稿彲涓嶈兘鍘绘帀CRMEB鐩稿叧鐗堟潈
+// +---------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +---------------------------------------------------------------------
+
+// import iHeaderI18n from '@/layouts/basic-layout/header-i18n';
+import { mapState } from 'vuex';
+
+export default {
+  // components: { iHeaderI18n },
+  computed: {
+    ...mapState('admin/layout', ['showI18n']),
+  },
+};
diff --git a/project-web/src/views/login/resetPassword.vue b/project-web/src/views/login/resetPassword.vue
new file mode 100644
index 0000000..05491d1
--- /dev/null
+++ b/project-web/src/views/login/resetPassword.vue
@@ -0,0 +1,172 @@
+<template>
+  <div class="page-main">
+    <div class="form-box">
+      <div class="top-title">璇峰厛淇敼鍒濆瀵嗙爜</div>
+      <el-form :rules="loginRules" :model="formData" ref="loginForm">
+        <el-form-item prop="password" label="鏂板瘑鐮侊細" style="position: relative">
+          <el-input
+            v-model.trim="formData.oldPassword"
+            prefix-icon="el-icon-lock"
+            :type="passwordNewType"
+            placeholder="璇峰~鍐欐柊瀵嗙爜"
+            auto-complete="off"
+            ref="newPwd"
+            maxlength="15"
+            class="h-60"
+          />
+          <span class="show-pwd" @click="showNewPwd">
+              <svg-icon :icon-class="passwordNewType === 'password' ? 'eye' : 'eye-open'"/>
+            </span>
+          <div style="font-size: 12px;color: #999"><span style="color: red;margin-right: 4px">*</span>瀵嗙爜闀垮害鍦� 8 鍒� 12 涓瓧绗﹂棿,蹇呴』鍖呭惈鏁板瓧銆佸ぇ灏忓啓瀛楁瘝銆佺壒娈婂瓧绗�</div>
+        </el-form-item>
+
+        <el-form-item prop="password" label="纭鏂板瘑鐮侊細" style="position: relative">
+          <el-input
+            v-model.trim="formData.newPassword"
+            prefix-icon="el-icon-lock"
+            :type="passwordType"
+            placeholder="璇风‘璁ゆ柊瀵嗙爜"
+            auto-complete="off"
+            ref="subimtPwd"
+            maxlength="15"
+            class="h-60"
+          />
+          <span class="show-pwd" @click="showPwd">
+              <svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'"/>
+            </span>
+        </el-form-item>
+      </el-form>
+      <div class="f-r f-r-center m-b-20">
+        <el-button type="primary" class="sub-btn" @click="updatePassword">鎻愪氦</el-button>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import {encrypt} from '@/utils/jsencrypt'
+import {getChangePass} from '@/api/user'
+
+export default {
+  name: "resetPassword",
+  data() {
+    return {
+      formData: {
+        oldPassword: '',
+        newPassword: ''
+      },
+      passwordNewType: 'password',
+      passwordType: 'password',
+      loginRules: {
+        oldPassword: [
+          {required: true, trigger: 'blur', message: '璇疯緭鍏ュ瘑鐮�'},
+          {min: 6, message: '闀垮害涓嶅皬浜�6瀛楃', trigger: 'blur'}
+        ],
+        newPassword: [
+          {required: true, trigger: 'blur', message: '璇疯緭鍏ョ‘璁ゅ瘑鐮�'},
+          {min: 6, message: '闀垮害涓嶅皬浜�6瀛楃', trigger: 'blur'}
+        ]
+      },
+    }
+  },
+  methods: {
+    showPwd() {
+      if (this.passwordType === 'password') {
+        this.passwordType = '';
+      } else {
+        this.passwordType = 'password';
+      }
+      this.$nextTick(() => {
+        this.$refs.subimtPwd.focus();
+      });
+    },
+    showNewPwd() {
+      if (this.passwordNewType === 'password') {
+        this.passwordNewType = '';
+      } else {
+        this.passwordNewType = 'password';
+      }
+      this.$nextTick(() => {
+        this.$refs.newPwd.focus();
+      });
+    },
+    updatePassword() {
+      this.$refs.loginForm.validate((valid) => {
+        if (valid) {
+          if (this.formData.oldPassword !== this.formData.newPassword) {
+            this.$message.error('涓ゆ杈撳叆瀵嗙爜涓嶄竴鑷�')
+            return
+          }
+          let formData = {
+            encryptPassword: encrypt(this.formData.newPassword)
+          }
+          getChangePass(formData).then(res => {
+            this.$message.success('淇敼瀵嗙爜鎴愬姛~璺宠浆棣栭〉')
+            // 鏇存柊鐢ㄦ埛淇℃伅锛岃烦杞富椤甸潰
+            this.$store.dispatch('user/getInfo').then(res => {
+              this.$store.commit('user/SET_ROLES',[])
+              this.$router.push({path: this.redirect || '/dashboard', query: this.otherQuery});
+            }).catch((err) => {
+
+            })
+          })
+        } else {
+          return false;
+        }
+      });
+    }
+  }
+}
+</script>
+
+<style scoped lang="scss">
+.page-main {
+  width: 100vw;
+  height: 100vh;
+  display: flex;
+  align-items: flex-start;
+}
+
+.form-box {
+  width: 500px;
+  margin: 100px auto;
+  padding: 30px 50px;
+  border-radius: 16px;
+  background: #FFFFFF;
+}
+
+.top-title {
+  padding: 20px 0 !important;
+  font-size: 18px;
+  font-weight: bold;
+  text-align: center;
+  margin-bottom: 20px;
+}
+
+.show-pwd {
+  position: absolute;
+  right: 10px;
+  top: 40px;
+  font-size: 16px;
+  color: #333;
+  cursor: pointer;
+  user-select: none;
+
+  ::v-deepsvg-icon {
+    vertical-align: 0.3em;
+  }
+}
+
+.h-60 > > > .el-input__inner {
+  height: 40px;
+}
+
+.sub-btn {
+  width: 80%;
+  height: 40px;
+}
+
+.m-b-20 {
+  margin-bottom: 20px;
+}
+</style>
diff --git a/project-web/src/views/projectConfig/buildPlan/detail.vue b/project-web/src/views/projectConfig/buildPlan/detail.vue
new file mode 100644
index 0000000..e215bb9
--- /dev/null
+++ b/project-web/src/views/projectConfig/buildPlan/detail.vue
@@ -0,0 +1,142 @@
+<template>
+  <win-lg :title="setting.title" @close="close" :width="'800px'">
+    <el-table
+      v-loading="loading"
+      border
+      height="calc(100vh - 400px)"
+      :span-method="spanMethod"
+      :data="tableData"
+      style="width: 100%">
+      <el-table-column
+        prop="stageName"
+        align="center"
+        label="闃舵"/>
+      <el-table-column
+        prop="nodeName"
+        align="center"
+        label="鑺傜偣"/>
+      <el-table-column
+        prop="nodeTimeStart"
+        align="center"
+        label="鑷」鐩紑濮嬬n澶�"
+        width="130"/>
+      <el-table-column
+        prop="nodeTimeDays"
+        align="center"
+        label="鎸佺画澶╂暟"
+        width="80"/>
+      <el-table-column
+        align="center"
+        label="瀹屾垚鍚庢彁閱�"
+        width="95">
+        <template slot-scope="{row}">
+          {{ row.completeNotifyStatus === 1 ? '鏄�' : '鍚�' }}
+        </template>
+      </el-table-column>
+      <el-table-column
+        align="center"
+        label="鎻愰啋鑺傜偣"
+        width="240">
+        <template slot-scope="{row,$index}">
+          <div>闃舵锛歿{ row.notifyStage.join("銆�") }}</div>
+          <div>鑺傜偣锛歿{ row.notifyNode.join("銆�") }}</div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        align="center"
+        label="涓存湡棰勮"
+        width="80">
+        <template slot-scope="{row}">
+          {{ row.warnNeed === 1 ? '鏄�' : '鍚�' }}
+        </template>
+      </el-table-column>
+      <el-table-column
+        align="center"
+        label="闄勪欢蹇呬紶"
+        width="80">
+        <template slot-scope="{row}">
+          {{ row.fileNeed === 1 ? '鏄�' : '鍚�' }}
+        </template>
+      </el-table-column>
+    </el-table>
+    <div slot="footer" align="center" class="dialog-footer">
+      <my-button name="鍙栨秷" site="form" @click="close"/>
+    </div>
+  </win-lg>
+</template>
+
+<script>
+import winLg from '@/components/win/win-lg'
+import {getStageNode} from "@/api/projectConfig/buildPlanNode";
+import myButton from "@/components/myButton/myButton";
+
+export default {
+  name: 'detail',
+  components: {winLg, myButton},
+  props: {
+    // setting 涓』鑷冲皯鍖呭惈鎺у埗dialog鏄剧ず鎴栭殣钘忕殑灞炴��,鍏朵綑灞炴�у彲鎷撳睍
+    // 灏嗘坊鍔�/淇敼鐨勫ぇ閲忔暟鎹強閫昏緫浠庡垪琛ㄩ〉闈腑鍒嗙鍑烘潵,閬垮厤鍒楄〃椤甸潰浠g爜杩囧,瀹℃煡鍥伴毦
+    // 鑻ユ椤甸潰椤诲洖浼犳暟鎹嚦鐖堕〉闈�,鍙湪寮曠敤缁勪欢鏃舵坊鍔犱簨浠�,鏈〉闈娇鐢╰his.$emit('浜嬩欢鍚�',鍙傛暟1,鍙傛暟2...)鍥炰紶鏁版嵁
+    setting: {
+      type: Object,
+      default: () => {
+      }
+    }
+  },
+  data() {
+    return {
+      loading: false,
+      tableData: [],
+      spanArr: [],
+      pos: 0
+    }
+  },
+  mounted() {
+    this.loading = true
+    getStageNode({id: this.setting.id}).then(res => {
+      this.loading = false
+      this.tableData = res
+      this.getSpanArr(res)
+    }).catch(() => {
+      this.loading = false
+    })
+  },
+  methods: {
+    close() {
+      this.$emit('close')
+    },
+    spanMethod({row, column, rowIndex, columnIndex}) {
+      if (columnIndex === 0) {
+        const rowspan = this.spanArr[rowIndex]
+        const colspan = rowspan > 0 ? 1 : 0
+        return {
+          rowspan, //琛�
+          colspan //鍒�
+        };
+      }
+    },
+    getSpanArr(data) {
+      this.spanArr = [];
+      for (let i = 0; i < data.length; i++) {
+        if (i === 0) {
+          this.spanArr.push(1);
+          this.pos = 0;
+        } else {
+          // 鍒ゆ柇褰撳墠鍏冪礌涓庝笂涓�涓厓绱犳槸鍚︾浉鍚�
+          if (data[i].id === data[i - 1].id && data[i].id) {
+            this.spanArr[this.pos] += 1;
+            this.spanArr.push(0);
+          } else {
+            this.spanArr.push(1);
+            this.pos = i;
+          }
+        }
+      }
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/project-web/src/views/projectConfig/buildPlan/edit.vue b/project-web/src/views/projectConfig/buildPlan/edit.vue
new file mode 100644
index 0000000..6087c95
--- /dev/null
+++ b/project-web/src/views/projectConfig/buildPlan/edit.vue
@@ -0,0 +1,143 @@
+<template>
+  <win-sm :title="setting.title" @close="close" :width="'800px'">
+    <el-form v-loading="loading" ref="ruleForm" :model="formData" :rules="rules" class="demo-ruleForm" label-width="100px">
+      <el-form-item label="璁″垝绫诲瀷" prop="planTypeCode">
+        <el-select v-model="formData.planTypeCode" placeholder="" clearable style="width: 100%">
+          <el-option
+            v-for="item in options"
+            :key="item.dict_code"
+            :label="item.dict_label"
+            :value="item.dict_code">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="璁″垝鍚嶇О" prop="projectName">
+        <el-input v-model="formData.projectName" placeholder="" clearable maxlength="32" show-word-limit style="width: 100%"/>
+      </el-form-item>
+      <el-form-item label="缂栧彿" prop="projectCode">
+        <el-input v-model="formData.projectCode" placeholder="" clearable maxlength="32" show-word-limit style="width: 100%"/>
+      </el-form-item>
+      <el-form-item label="鐘舵��" prop="status">
+        <el-radio-group v-model="formData.status">
+          <el-radio :label="1" border>鍚敤</el-radio>
+          <el-radio :label="0" border>绂佺敤</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="remark">
+        <el-input
+          v-model="formData.remark"
+          type="textarea"
+          :rows="3"
+          maxlength="200"
+          show-word-limit
+        />
+      </el-form-item>
+    </el-form>
+    <div slot="footer" align="center" class="dialog-footer">
+      <my-button name="鍙栨秷" site="form" @click="close"/>
+      <my-button name="淇濆瓨" site="form" @click="save"/>
+    </div>
+  </win-sm>
+</template>
+
+<script>
+import winSm from '@/components/win/win-sm'
+import myButton from '@/components/myButton/myButton'
+import * as api from "@/api/projectConfig/buildPlan";
+import {getDicts} from "@/api/system/dict/data";
+
+export default {
+  name: 'edit',
+  components: {winSm, myButton},
+  props: {
+    // setting 涓』鑷冲皯鍖呭惈鎺у埗dialog鏄剧ず鎴栭殣钘忕殑灞炴��,鍏朵綑灞炴�у彲鎷撳睍
+    // 灏嗘坊鍔�/淇敼鐨勫ぇ閲忔暟鎹強閫昏緫浠庡垪琛ㄩ〉闈腑鍒嗙鍑烘潵,閬垮厤鍒楄〃椤甸潰浠g爜杩囧,瀹℃煡鍥伴毦
+    // 鑻ユ椤甸潰椤诲洖浼犳暟鎹嚦鐖堕〉闈�,鍙湪寮曠敤缁勪欢鏃舵坊鍔犱簨浠�,鏈〉闈娇鐢╰his.$emit('浜嬩欢鍚�',鍙傛暟1,鍙傛暟2...)鍥炰紶鏁版嵁
+    setting: {
+      type: Object,
+      default: () => {
+      }
+    }
+  },
+  data() {
+    return {
+      loading: false,
+      options: [],
+      formData: {
+        planTypeCode: '',
+        projectName: '',
+        projectCode: '',
+        status: 1,
+        remark: '',
+      },
+      rules: {
+        planTypeCode: [
+          {required: true, message: '璇烽�夋嫨璁″垝绫诲瀷', trigger: 'blur'},
+        ],
+        projectName: [
+          {required: true, message: '璇疯緭鍏ヨ鍒掑悕绉�', trigger: 'blur'},
+        ],
+        projectCode: [
+          {required: true, message: '璇疯緭鍏ョ紪鍙�', trigger: 'blur'},
+        ]
+      }
+    }
+  },
+  created() {
+    this.loading = true
+    this.getInfo()
+    this.getPlanType()
+  },
+  methods: {
+    getPlanType() {
+      getDicts('PLAN_TYPE').then(res => {
+        this.options = res
+      })
+    },
+    getInfo() {
+      this.title = this.setting.title
+      if (this.setting.id != null) {
+        // 鏌ヨ鏁版嵁
+        api.getDetail({id: this.setting.id}).then(res => {
+          this.loading = false
+          this.formData = Object.assign(this.formData, res)
+        })
+      }else{
+        this.loading = false
+      }
+    },
+    close() {
+      this.formData = {
+        planTypeCode: '',
+        projectName: '',
+        projectCode: '',
+        status: 1,
+        remark: '',
+      }
+      this.$emit('close')
+    },
+    save() {
+      this.$refs.ruleForm.validate((valid) => {
+        if (valid) {
+          const params = Object.assign({}, this.formData)
+          this.loading = true
+          api[params.id?'upd':'add'](params).then(res => {
+            this.loading = false
+            if (res) {
+              this.$message.success('淇濆瓨鎴愬姛锛�')
+              this.close()
+              this.$emit('search')
+            } else {
+              this.$message.error('淇濆瓨澶辫触')
+            }
+          }).catch(()=>{
+            this.loading = false
+          })
+        } else {
+          this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��')
+        }
+      })
+    }
+  }
+}
+</script>
diff --git a/project-web/src/views/projectConfig/buildPlan/index.vue b/project-web/src/views/projectConfig/buildPlan/index.vue
new file mode 100644
index 0000000..31c9c5d
--- /dev/null
+++ b/project-web/src/views/projectConfig/buildPlan/index.vue
@@ -0,0 +1,210 @@
+<template>
+  <div class="app-container">
+    <el-card class="box-card" shadow="never">
+      <div class="filter-container" style="margin-bottom: 10px">
+        <my-search ref="searchBar" :items="items" @search="filterForm"></my-search>
+      </div>
+      <!--鍒楄〃-->
+      <my-table-v2 ref="myTable" :filter="filterFrom" :table="table"/>
+    </el-card>
+    <edit v-if="editSetting.show" :setting="editSetting" @close="editSetting.show = false" @search="search"></edit>
+    <detail v-if="detailSetting.show" :setting="detailSetting" @close="detailSetting.show = false" @search="search"></detail>
+    <nodeChoose v-if="nodeSetting.show" :setting="nodeSetting" @close="nodeSetting.show = false" @search="search"></nodeChoose>
+  </div>
+</template>
+
+<script>
+import MyTableV2 from '@/components/myTable/myTableV2';
+import SettingIplatform from '@/utils/settingIplatform';
+import items from './items';
+import edit from './edit'
+import detail from "@/views/projectConfig/buildPlan/detail";
+import nodeChoose from './nodeChoose/index'
+import {del, updStatus} from "@/api/projectConfig/buildPlan";
+
+export default {
+  components: {MyTableV2, edit,detail,nodeChoose},
+  data() {
+    return {
+      // 鎼滅储鏉′欢
+      items: items,
+      filterFrom: {
+        projectName: '',
+        projectCode: '',
+        planTypeCode: '',
+        status: '1',
+      },
+      //鏂板缂栬緫
+      editSetting: {
+        title: '',
+        id: '',
+        show: false,
+      },
+      //璇︽儏
+      detailSetting: {
+        title: '闃舵鑺傜偣棰勮',
+        id: '',
+        show: false,
+      },
+      //鑺傜偣璁剧疆
+      nodeSetting: {
+        title: '鑺傜偣閫夋嫨',
+        stageId: '',
+        show: false,
+      },
+      // 琛ㄦ牸鏁版嵁
+      table: {
+        showIndex: true, // 鏄惁鏄剧ず搴忓彿
+        expand: false, // 鏄惁鏄剧ず璇︽儏鏁版嵁
+        url: SettingIplatform.apiBaseURL + '/pc/p/temp/project/list', // 璇锋眰鍦板潃
+        // 宸ュ叿鏉�
+        tools: {
+          columnsCtrl: {
+            // 鍒楁帶鍒舵寜閽�
+            show: false,
+          },
+          generalExport: {
+            // 閫氱敤瀵煎嚭鎸夐挳
+            show: false,
+          },
+          // 鑷畾涔夊伐鍏锋潯鎸夐挳
+          custom: [
+            {
+              name: '鏂板',
+              click: () => {
+                this.showAdd(null);
+              },
+            },
+          ],
+        },
+        // 鍒椾俊鎭�
+        columns: [
+          {
+            title: '妯℃澘鍚嶇О', field: 'projectName', align: 'left',
+            formatter: (row) => {
+                return {
+                  value: row.projectName,
+                  type: 'primary',
+                  click: () => {
+                    // 鐐瑰嚮浜嬩欢
+                    this.shoDetail(row.id);
+                  },
+                }
+            }
+          },
+          {title: '缂栧彿', field: 'projectCode', align: 'left', width: 200},
+          {title: '璁″垝绫诲瀷', field: 'planTypeName', align: 'left', width: 300},
+          {
+            field: 'status',
+            title: '鐘舵��',
+            align: 'center',
+            width: 80,
+            switch: (row) => {
+              return {
+                value: row.status === 1, // 寮�
+                label: row.status === 1 ? '鍚敤' : '绂佺敤', // 寮�鐨勬弿杩�
+                click: () => {
+                  // 鐐瑰嚮浜嬩欢
+                  this.updState(row);
+                },
+              };
+            },
+          },
+        ],
+        // 鎿嶄綔淇℃伅
+        operation: {
+          show: true, // 鏄剧ず鎿嶄綔鍒�
+          width: '200', // 鍒楀
+          attr: [
+            {
+              title: '缂栬緫',
+              events: (row) => {
+                this.showAdd(row.id);
+              },
+            },
+            {
+              title: '鑺傜偣閫夋嫨',
+              type: 'success',
+              events: (row) => {
+                this.showNode(row.id);
+              },
+            },
+          ],
+        },
+        paging: {
+          show: false, // 鏄剧ず鍒嗛〉
+          // 鍒嗛〉淇℃伅
+          page: {
+            small: false,
+            pageNum: 1,
+            pageSize: 10,
+            total: 0,
+          },
+        },
+      },
+    };
+  },
+  mounted() {
+  },
+  methods: {
+    // 鏌ヨtable鍒楄〃
+    search(pageNum) {
+      if (pageNum != undefined) {
+        this.$refs.myTable.search(pageNum);
+      } else {
+        this.$refs.myTable.search();
+      }
+    },
+    filterForm(params) {
+      this.filterFrom = Object.assign(this.filterFrom, params);
+      this.search();
+    },
+    //娣诲姞銆佺紪杈�
+    showAdd(id) {
+      let title = '娣诲姞';
+      if (id != null) {
+        title = '缂栬緫';
+      }
+      this.editSetting.id = id;
+      this.editSetting.title = title;
+      this.editSetting.show = true;
+    },
+    updState(row) {
+      let text = row.status === 0 ? "鍚敤" : "绂佺敤";
+      this.$modal.confirm('纭瑕�' + text + '"' + row.projectName + '"鍚楋紵').then(() => {
+        let status = row.status === 1 ? 0 : 1
+        updStatus({
+          id: row.id,
+          status
+        }).then(res => {
+          if (res) {
+            row.status = row.status === 1 ? 0 : 1
+            this.$modal.msgSuccess(text + "鎴愬姛");
+          }
+        })
+      })
+    },
+    showNode(id) {
+      this.nodeSetting.stageId = id;
+      this.nodeSetting.show = true;
+    },
+    shoDetail(id) {
+      this.detailSetting.id = id;
+      this.detailSetting.show = true;
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      this.$confirm('鏄惁纭鍒犻櫎"' + row.stageName + '"闃舵锛�', {
+        type: 'warning'
+      }).then(() => {
+        del({id: row.id}).then(res => {
+          this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+          this.search()
+        })
+      })
+    },
+  },
+};
+</script>
+
+<style scoped></style>
diff --git a/project-web/src/views/projectConfig/buildPlan/items.js b/project-web/src/views/projectConfig/buildPlan/items.js
new file mode 100644
index 0000000..2b060c9
--- /dev/null
+++ b/project-web/src/views/projectConfig/buildPlan/items.js
@@ -0,0 +1,48 @@
+import SettingIplatform from "@/utils/settingIplatform";
+
+export default [
+  {
+    type: 'text',
+    dataIndex: 'projectName',
+    label: '妯℃澘鍚嶇О',
+    placeholder: '璇疯緭鍏�',
+    defaultValue: ''
+  },
+  {
+    type: 'text',
+    dataIndex: 'projectCode',
+    label: '妯℃澘缂栧彿',
+    placeholder: '璇疯緭鍏�',
+    defaultValue: ''
+  },
+  {
+    type: 'select',
+    dataIndex: 'planTypeCode',
+    label: '璁″垝绫诲瀷',
+    placeholder: '璇烽�夋嫨',
+    defaultValue: '',
+    options: [],
+    optionsConfig: {
+      label: 'dict_label',
+      value: 'dict_code',
+      url: SettingIplatform.apiBaseURL + '/permit/dict/data/type/PLAN_TYPE'
+    }
+  },
+  {
+    type: 'select',
+    dataIndex: 'status',
+    label: '鐘舵��',
+    placeholder: '璇烽�夋嫨',
+    defaultValue: '1',
+    options: [
+      {
+        label: '鍚敤',
+        value: '1'
+      },
+      {
+        label: '绂佺敤',
+        value: '0'
+      }
+    ]
+  }
+]
diff --git a/project-web/src/views/projectConfig/buildPlan/nodeChoose/edit.vue b/project-web/src/views/projectConfig/buildPlan/nodeChoose/edit.vue
new file mode 100644
index 0000000..836143c
--- /dev/null
+++ b/project-web/src/views/projectConfig/buildPlan/nodeChoose/edit.vue
@@ -0,0 +1,117 @@
+<template>
+  <win-sm :title="setting.title" @close="close" :width="'800px'">
+    <el-form v-loading="loading" ref="ruleForm" :model="formData" :rules="rules" class="demo-ruleForm" label-width="100px">
+      <el-form-item label="闃舵鍚嶇О" prop="nodeName">
+        <el-input v-model="formData.nodeName" clearable maxlength="32" show-word-limit style="width: 100%"/>
+      </el-form-item>
+      <el-form-item label="灞曠ず椤哄簭" prop="sort">
+        <el-input-number v-model="formData.sort" clearable :min="1"/>
+      </el-form-item>
+      <el-form-item label="鐘舵��" prop="status">
+        <el-radio-group v-model="formData.status">
+          <el-radio :label="1" border>鍚敤</el-radio>
+          <el-radio :label="0" border>绂佺敤</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="remark">
+        <el-input
+          v-model="formData.remark"
+          type="textarea"
+          :rows="3"
+          maxlength="200"
+          show-word-limit
+        />
+      </el-form-item>
+    </el-form>
+    <div slot="footer" align="center" class="dialog-footer">
+      <my-button name="鍙栨秷" site="form" @click="close"/>
+      <my-button name="淇濆瓨" site="form" @click="save"/>
+    </div>
+  </win-sm>
+</template>
+
+<script>
+import winSm from '@/components/win/win-sm'
+import myButton from '@/components/myButton/myButton'
+import * as node from "@/api/projectConfig/stageNode";
+
+export default {
+  name: 'edit',
+  components: {winSm, myButton},
+  props: {
+    // setting 涓』鑷冲皯鍖呭惈鎺у埗dialog鏄剧ず鎴栭殣钘忕殑灞炴��,鍏朵綑灞炴�у彲鎷撳睍
+    // 灏嗘坊鍔�/淇敼鐨勫ぇ閲忔暟鎹強閫昏緫浠庡垪琛ㄩ〉闈腑鍒嗙鍑烘潵,閬垮厤鍒楄〃椤甸潰浠g爜杩囧,瀹℃煡鍥伴毦
+    // 鑻ユ椤甸潰椤诲洖浼犳暟鎹嚦鐖堕〉闈�,鍙湪寮曠敤缁勪欢鏃舵坊鍔犱簨浠�,鏈〉闈娇鐢╰his.$emit('浜嬩欢鍚�',鍙傛暟1,鍙傛暟2...)鍥炰紶鏁版嵁
+    setting: {
+      type: Object,
+      default: () => {
+      }
+    }
+  },
+  data() {
+    return {
+      loading: false,
+      formData: {
+        nodeName: '',
+        sort: 1,
+        status: 1,
+        remark: '',
+      },
+      rules: {
+        nodeName: [
+          {required: true, message: '璇疯緭鍏ヨ妭鐐瑰悕绉�', trigger: 'blur'}
+        ],
+      }
+    }
+  },
+  created() {
+    this.loading = true
+    this.getInfo()
+  },
+  methods: {
+    getInfo() {
+      this.title = this.setting.title
+      if (this.setting.id != null) {
+        // 鏌ヨ鏁版嵁
+        node.getDetail({id: this.setting.id}).then(res => {
+          this.loading = false
+          this.formData = Object.assign(this.formData, res)
+        })
+      }else{
+        this.loading = false
+      }
+    },
+    close() {
+      this.formData = {
+        nodeName: '',
+        sort: 1,
+        status: 1,
+        remark: '',
+      }
+      this.$emit('close')
+    },
+    save() {
+      this.$refs.ruleForm.validate((valid) => {
+        if (valid) {
+          const params = Object.assign({}, this.formData)
+          this.loading = true
+          node[params.id?'upd':'add'](params).then(res => {
+            this.loading = false
+            if (res) {
+              this.$message.success('淇濆瓨鎴愬姛锛�')
+              this.close()
+              this.$emit('search')
+            } else {
+              this.$message.error('淇濆瓨澶辫触')
+            }
+          }).catch(()=>{
+            this.loading = false
+          })
+        } else {
+          this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��')
+        }
+      })
+    }
+  }
+}
+</script>
diff --git a/project-web/src/views/projectConfig/buildPlan/nodeChoose/index.vue b/project-web/src/views/projectConfig/buildPlan/nodeChoose/index.vue
new file mode 100644
index 0000000..ef976e8
--- /dev/null
+++ b/project-web/src/views/projectConfig/buildPlan/nodeChoose/index.vue
@@ -0,0 +1,106 @@
+<template>
+  <win-lg :title="setting.title" @close="close" :width="'800px'">
+    <el-tabs v-loading="loading" v-model="activeName" :before-leave="beforeLeave">
+      <el-tab-pane label="閫夋嫨鑺傜偣" name="first">
+        <div class="box">
+          <stageNode :tempProjectId="setting.stageId" ref="stageNode"></stageNode>
+        </div>
+      </el-tab-pane>
+      <el-tab-pane label="鑺傜偣鍛ㄦ湡璁剧疆" name="second">
+        <div class="box">
+          <nodeCycle ref="nodeCycle"/>
+        </div>
+      </el-tab-pane>
+      <el-tab-pane label="棰勮" name="third">
+        <div class="box">
+          <preview ref="preview" :tempProjectStages="tempProjectStages"/>
+        </div>
+      </el-tab-pane>
+    </el-tabs>
+    <div slot="footer" align="center" class="dialog-footer">
+      <my-button name="鍙栨秷" site="form" @click="close"/>
+      <template v-if="activeName === 'first'">
+        <my-button key="4" name="涓嬩竴姝�" type="primary" site="form" @click="activeName = 'second'"/>
+      </template>
+      <my-button v-if="activeName === 'second'" key="1" name="涓婁竴姝�" type="primary" site="form" @click="activeName = 'first'"/>
+      <my-button v-if="activeName === 'second'" key="2" name="淇濆瓨" site="form" @click="doSave" />
+      <my-button @click="activeName='third'" v-if="activeName === 'second'" key="3" name="棰勮" type="warning" site="form"/>
+      <my-button v-if="activeName === 'third'" name="杩斿洖" site="form" @click="activeName='second'"/>
+    </div>
+  </win-lg>
+</template>
+
+<script>
+import winLg from '@/components/win/win-lg'
+import myButton from '@/components/myButton/myButton'
+import stageNode from "@/views/projectConfig/buildPlan/nodeChoose/stageNode";
+import nodeCycle from "@/views/projectConfig/buildPlan/nodeChoose/nodeCycle";
+import preview from "@/views/projectConfig/buildPlan/nodeChoose/preview";
+import {updPStageNode} from '@/api/projectConfig/buildPlanNode'
+export default {
+  name: 'nodeChoose',
+  components: {winLg, myButton,stageNode,nodeCycle,preview},
+  props: {
+    // setting 涓』鑷冲皯鍖呭惈鎺у埗dialog鏄剧ず鎴栭殣钘忕殑灞炴��,鍏朵綑灞炴�у彲鎷撳睍
+    // 灏嗘坊鍔�/淇敼鐨勫ぇ閲忔暟鎹強閫昏緫浠庡垪琛ㄩ〉闈腑鍒嗙鍑烘潵,閬垮厤鍒楄〃椤甸潰浠g爜杩囧,瀹℃煡鍥伴毦
+    // 鑻ユ椤甸潰椤诲洖浼犳暟鎹嚦鐖堕〉闈�,鍙湪寮曠敤缁勪欢鏃舵坊鍔犱簨浠�,鏈〉闈娇鐢╰his.$emit('浜嬩欢鍚�',鍙傛暟1,鍙傛暟2...)鍥炰紶鏁版嵁
+    setting: {
+      type: Object,
+      default: () => {
+      }
+    }
+  },
+  data() {
+    return {
+      loading: false,
+      activeName: 'first',
+      tempProjectStages: []
+    };
+  },
+  mounted() {
+  },
+  methods: {
+    doSave(){
+      console.log(this.$refs.nodeCycle.getSelectTree())
+      this.loading = true
+      updPStageNode({
+        tempProjectId:this.setting.stageId,
+        tempProjectStages:this.$refs.nodeCycle.getSelectTree()
+      }).then(res=>{
+        this.loading = false
+        this.$message.success('淇濆瓨鎴愬姛锛�')
+        this.close()
+        this.$emit('search')
+      }).catch(()=>{
+        this.loading = false
+      })
+    },
+    close() {
+      this.$emit('close')
+    },
+    beforeLeave(activeName, oldActiveName) {
+      let checked = this.$refs.stageNode.tree.some(item=>item.checked)
+      if(activeName==='second'&&checked){
+        this.$refs.stageNode.setNodeCycleData()
+      }
+      if(activeName==='third'&&checked){
+        this.$EventBus.$emit('clearData')
+        this.tempProjectStages = this.$refs.nodeCycle.getSelectTree()
+      }
+      if(activeName!=='first'&&!checked){
+        this.$modal.msgError('璇峰厛閫夋嫨闃舵鑺傜偣')
+        this.activeName = oldActiveName
+      }
+      return checked
+      // return false
+    },
+  },
+};
+</script>
+
+<style scoped>
+.box {
+  height: calc(100vh - 450px);
+  overflow-y: auto;
+}
+</style>
diff --git a/project-web/src/views/projectConfig/buildPlan/nodeChoose/items.js b/project-web/src/views/projectConfig/buildPlan/nodeChoose/items.js
new file mode 100644
index 0000000..cd07526
--- /dev/null
+++ b/project-web/src/views/projectConfig/buildPlan/nodeChoose/items.js
@@ -0,0 +1,26 @@
+export default [
+  {
+    type: 'text',
+    dataIndex: 'nodeName',
+    label: '鑺傜偣鍚嶇О',
+    placeholder: '鑺傜偣鍚嶇О',
+    defaultValue: ''
+  },
+  {
+    type: 'select',
+    dataIndex: 'status',
+    label: '鐘舵��',
+    placeholder: '璇烽�夋嫨',
+    defaultValue: '',
+    options: [
+      {
+        label: '鍚敤',
+        value: '1'
+      },
+      {
+        label: '绂佺敤',
+        value: '0'
+      }
+    ]
+  }
+]
diff --git a/project-web/src/views/projectConfig/buildPlan/nodeChoose/nodeCycle.vue b/project-web/src/views/projectConfig/buildPlan/nodeChoose/nodeCycle.vue
new file mode 100644
index 0000000..601d0fe
--- /dev/null
+++ b/project-web/src/views/projectConfig/buildPlan/nodeChoose/nodeCycle.vue
@@ -0,0 +1,215 @@
+<template>
+  <div>
+    <el-tabs tab-position="left" style="">
+      <template v-for="(stage,i) in tree">
+        <el-tab-pane v-if="stage.checked" :key="i" :label="stage.name">
+          <el-form :model="{tableData: tree}" ref="ruleForm" label-width="120px" class="demo-dynamic">
+            <el-form-item label="闃舵鎬诲懆鏈�(澶�)">
+              <el-input-number v-model="stage.stageTimeDays" :controls="false" :min="1" :step="1" step-strictly style="width: 400px;text-align: left"></el-input-number>
+            </el-form-item>
+            <el-table
+              border
+              height="calc(100vh - 501px)"
+              :data="stage.children.filter(item=>item.checked)"
+              style="width: 100%">
+              <el-table-column
+                prop="name"
+                align="center"
+                label="鑺傜偣"/>
+              <el-table-column
+                align="center"
+                label="鑷」鐩紑濮嬬n澶�"
+                width="180">
+                <template slot-scope="{row}">
+                  <el-input-number v-model="row.nodeTimeStart" :controls="false" :min="getStageStart(i)" :max="getStageEnd(i)" :step="1" step-strictly style="width: 100%;text-align: left"></el-input-number>
+                </template>
+              </el-table-column>
+              <el-table-column
+                align="center"
+                label="鎸佺画澶╂暟"
+                width="180">
+                <template slot-scope="{row}">
+                  <el-input-number v-model="row.nodeTimeDays" :controls="false" :min="1" :max="stage.stageTimeDays||Infinity" :step="1" step-strictly style="width: 100%;text-align: left"></el-input-number>
+                </template>
+              </el-table-column>
+              <el-table-column
+                align="center"
+                label="瀹屾垚鍚庢彁閱�"
+                width="95">
+                <template slot-scope="{row}">
+                  <el-switch
+                    @change="notifyChange($event,row)"
+                    v-model="row.completeNotifyStatus"
+                    active-color="#13ce66"
+                    :active-value="1"
+                    :inactive-value="0">
+                  </el-switch>
+                </template>
+              </el-table-column>
+              <el-table-column
+                align="center"
+                label="鎻愰啋鑺傜偣"
+                width="180">
+                <template slot-scope="{row,$index}">
+                  <el-cascader
+                    v-model="row.notifyTempStageNodeId"
+                    :ref="'cascade'+i+$index"
+                    :disabled="row.completeNotifyStatus===0"
+                    @change="cascadeChange($event,row,'cascade'+i+$index)"
+                    :options="options"
+                    :show-all-levels="false"
+                    :props="{ multiple: true, checkStrictly: true, emitPath: false }"
+                    clearable></el-cascader>
+                </template>
+              </el-table-column>
+              <el-table-column
+                align="center"
+                label="涓存湡棰勮"
+                width="80">
+                <template slot-scope="{row}">
+                  <el-switch
+                    v-model="row.warnNeed"
+                    active-color="#13ce66"
+                    :active-value="1"
+                    :inactive-value="0">
+                  </el-switch>
+                </template>
+              </el-table-column>
+              <el-table-column
+                align="center"
+                label="闄勪欢蹇呬紶"
+                width="80">
+                <template slot-scope="{row}">
+                  <el-switch
+                    v-model="row.fileNeed"
+                    active-color="#13ce66"
+                    :active-value="1"
+                    :inactive-value="0">
+                  </el-switch>
+                </template>
+              </el-table-column>
+            </el-table>
+          </el-form>
+        </el-tab-pane>
+      </template>
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      options: [],
+      tree: []
+    }
+  },
+  mounted() {
+    this.$EventBus.$on('setTree', data => {
+      this.tree = data
+      let arr = []
+      data.map(item => {
+        if (item.checked) {
+          let stage = {
+            value: item.id,
+            label: item.name,
+            notifyTempType: 0, // 0闃舵 1鑺傜偣
+            children: []
+          }
+          item.children.map(node => {
+            if (node.checked) {
+              stage.children.push({
+                value: node.id,
+                label: node.name,
+                notifyTempType: 1, // 0闃舵 1鑺傜偣
+              })
+            }
+          })
+          arr.push(stage)
+        }
+      })
+      this.options = arr //鍙�夋嫨涓烘彁閱掕妭鐐圭殑鍒楄〃
+    })
+  },
+  computed:{
+    getStageStart(){
+      return (i)=>{
+        let num = 0
+        this.tree.map((item,idx)=>{
+          if(idx<i){
+            num+=(item.stageTimeDays||0)
+          }
+        })
+        return num+1
+      }
+
+    },
+    getStageEnd(){
+      return (i)=>{
+        let num = 0
+        this.tree.map((item,idx)=>{
+          if(idx<i+1){
+            num+=(item.stageTimeDays||0)
+          }
+        })
+        return num+1
+      }
+
+    }
+  },
+  beforeDestroy() {
+    this.$EventBus.$off('setTree')
+  },
+  methods: {
+    getSelectTree(){
+      let arr = []
+      this.tree.map(item => {
+        if (item.checked) {
+          let stage = JSON.parse(JSON.stringify(item))
+          delete stage.checked
+          delete stage.checkedList
+          delete stage.name
+          let children =[]
+          stage.children.map(node => {
+            if (node.checked) {
+              let item = JSON.parse(JSON.stringify(node))
+              delete item.checked
+              delete item.notifyTempStageNodeId
+              delete item.name
+              children.push(item)
+            }
+          })
+          stage.children = children
+          arr.push(stage)
+        }
+      })
+      return arr
+    },
+    notifyChange(e,row){
+      row.notify = []
+      row.notifyStageNodes = []
+    },
+    cascadeChange(e, row, ref) {
+      let nodes = this.$refs[ref][0].getCheckedNodes(false)
+      let arr = []
+      nodes.map(item => {
+        if (item.checked) {
+          arr.push({
+            tempStageNodeId: row.id,
+            notifyTempType: item.level - 1,
+            notifyTempStageNodeId: item.value
+          })
+        }
+      })
+      row.notify = arr
+    }
+  }
+}
+</script>
+
+<style scoped>
+.tab-content {
+  height: calc(100vh - 450px);
+  overflow-y: auto;
+}
+</style>
diff --git a/project-web/src/views/projectConfig/buildPlan/nodeChoose/preview.vue b/project-web/src/views/projectConfig/buildPlan/nodeChoose/preview.vue
new file mode 100644
index 0000000..3018bc8
--- /dev/null
+++ b/project-web/src/views/projectConfig/buildPlan/nodeChoose/preview.vue
@@ -0,0 +1,205 @@
+<template>
+  <div class="box">
+    <div class="f-r">
+      <div>璁剧疆寮�濮嬫椂闂�</div>
+      <el-date-picker
+        style="margin: 0 10px"
+        v-model="startTime"
+        type="date"
+        value-format="yyyyMMddHHmmss"
+        placeholder="閫夋嫨鏃ユ湡">
+      </el-date-picker>
+      <my-button @click="doPreview" name="鐢熸垚棰勮" type="warning" site="form"/>
+    </div>
+    <el-table
+      v-loading="loading"
+      border
+      height="calc(100vh - 505px)"
+      :data="tableData"
+      :span-method="spanMethod"
+      style="width: 100%;margin-top: 15px">
+      <el-table-column
+        prop="stageName"
+        align="center"
+        width="130"
+        label="闃舵"/>
+      <el-table-column
+        prop="nodeName"
+        align="center"
+        width="110"
+        label="鑺傜偣"/>
+      <el-table-column
+        prop="startDate"
+        align="center"
+        label="寮�濮嬫椂闂�"
+        width="110">
+        <template slot-scope="scope">
+          <span>{{ longToDate(scope.row.startDate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="endDate"
+        align="center"
+        label="鎴鏃堕棿"
+        width="110">
+        <template slot-scope="scope">
+          <span>{{ longToDate(scope.row.endDate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column :width="dates.length*100+2" class-name="my-col">
+        <template slot="header" slot-scope="scope">
+          <span v-for="(item,i) in dates" :key="i" class="item">{{ longToDate(item) }}</span>
+        </template>
+        <template slot-scope="{row,$index}">
+          <!--          <span v-for="(item,i) in dates" :key="i" class="progress" :class="(dates.indexOf(row.startDate)<=i)&&(dates.indexOf(row.endDate)>=i)?'act':''"><span class="act"></span></span>-->
+          <span v-for="(item,i) in dates" :key="i" class="progress">
+            <span v-if="(dates.indexOf(row.startDate)<=i)&&(dates.indexOf(row.endDate)>=i)" class="act"></span>
+          </span>
+        </template>
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script>
+import {getPreview} from "@/api/projectConfig/buildPlanNode";
+import myButton from '@/components/myButton/myButton'
+import * as DateFormatter from '@/utils/DateFormatter';
+
+export default {
+  name: 'preview',
+  components: {myButton},
+  props: ['tempProjectStages'],
+  data() {
+    return {
+      loading: false,
+      startTime: '',
+      tableData: [],
+      spanArr: [],
+      pos: 0,
+      dates: []
+    }
+  },
+  mounted() {
+    this.$EventBus.$on('clearData', data => {
+      this.startTime = ''
+      this.tableData = []
+      this.spanArr = []
+      this.pos = 0
+      this.dates = []
+    })
+  },
+  methods: {
+    doPreview() {
+      this.loading = true
+      getPreview({
+        startDate: this.startTime,
+        tempProjectStages: this.tempProjectStages
+      }).then(res => {
+        let arr = []
+        res.map(item => {
+          arr.push(item.startDate)
+          arr.push(item.endDate)
+        })
+        let newArr = arr.filter((value, index, self) => {
+          return self.indexOf(value) === index;
+        });
+        this.dates = newArr.sort()
+        this.tableData = res
+        this.getSpanArr(res)
+        this.loading = false
+      }).catch(() => {
+        this.loading = false
+      })
+    },
+    spanMethod({row, column, rowIndex, columnIndex}) {
+      if (columnIndex === 0) {
+        const rowspan = this.spanArr[rowIndex]
+        const colspan = rowspan > 0 ? 1 : 0
+        return {
+          rowspan, //琛�
+          colspan //鍒�
+        };
+      }
+    },
+    getSpanArr(data) {
+      this.spanArr = [];
+      for (let i = 0; i < data.length; i++) {
+        if (i === 0) {
+          this.spanArr.push(1);
+          this.pos = 0;
+        } else {
+          // 鍒ゆ柇褰撳墠鍏冪礌涓庝笂涓�涓厓绱犳槸鍚︾浉鍚�
+          if (data[i].id === data[i - 1].id && data[i].id) {
+            this.spanArr[this.pos] += 1;
+            this.spanArr.push(0);
+          } else {
+            this.spanArr.push(1);
+            this.pos = i;
+          }
+        }
+      }
+    },
+    longToDate(long) {
+      return DateFormatter.LongToDate(long)
+    }
+  }
+}
+</script>
+<style>
+.my-col {
+  padding: 0 !important;
+}
+
+.my-col .cell {
+  padding: 0 !important;
+}
+
+.el-table__row .my-col {
+  border: none !important;
+}
+</style>
+<style scoped lang="scss">
+.item {
+  display: inline-block;
+  text-align: center;
+  width: 100px;
+}
+
+.progress {
+  position: relative;
+  //left: -50px;
+  display: inline-block;
+  width: 100px;
+  height: 24px;
+  margin-top: 8px;
+
+  &::after {
+    content: '';
+    position: absolute;
+    width: 1px;
+    height: 40px;
+    left: 100px;
+    top: -8px;
+    border-right: 1px dashed #dfe6ec;
+  }
+}
+
+.act {
+  position: absolute;
+  display: inline-block;
+  width: 100px;
+  height: 24px;
+  background-color: #0c8aff;
+  //left: -50px;
+}
+
+.rt {
+  //left: -50px;
+}
+
+.lt {
+
+}
+
+</style>
diff --git a/project-web/src/views/projectConfig/buildPlan/nodeChoose/stageNode.vue b/project-web/src/views/projectConfig/buildPlan/nodeChoose/stageNode.vue
new file mode 100644
index 0000000..3c289fd
--- /dev/null
+++ b/project-web/src/views/projectConfig/buildPlan/nodeChoose/stageNode.vue
@@ -0,0 +1,85 @@
+<template>
+  <div class="box" v-loading="loading">
+    <div v-for="(stage,i) in tree" :key="i">
+      <el-checkbox @change="stageChange($event,stage)" v-model="stage.checked">{{ stage.name }}</el-checkbox>
+      <div style="margin: 15px 0;"></div>
+      <div style="margin: 15px 0 15px 20px">
+        <el-checkbox-group @change="nodesChange($event,stage)" v-model="stage.checkedList">
+          <el-checkbox @change="nodeChange($event,stage,node)" v-for="(node,k) in stage.children" :label="node.id" :key="k">{{ node.name }}</el-checkbox>
+        </el-checkbox-group>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import {getPStageNode} from "@/api/projectConfig/buildPlanNode";
+
+export default {
+  props: ['tempProjectId'],
+  name: 'stageNode',
+  data() {
+    return {
+      loading: true,
+      tree: [],
+      checkAll: false,
+      checkedCities: [],
+    }
+  },
+  mounted() {
+    this.getTree()
+  },
+  methods: {
+    setNodeCycleData() {
+      this.$EventBus.$emit('setTree', this.tree)
+    },
+    setPreviewData() {
+      this.$EventBus.$emit('setPreviewData', this.tree)
+    },
+    stageChange(e, stage) {
+      if (e) {
+        stage.checkedList = stage.children.map(item => {
+          item.checked = true
+          return item.id
+        })
+      } else {
+        stage.checkedList = []
+      }
+    },
+    nodesChange(e, stage) {
+      stage.checked = e.length > 0
+    },
+    nodeChange(e, stage, node) {
+      node.checked = e
+    },
+    getTree() {
+      getPStageNode({tempProjectId: this.tempProjectId}).then(res => {
+        this.loading = false
+        res.map((stage, i) => {
+          stage.checked = stage.children.some(item => item.isDelete === 0)
+          stage.stageTimeDays = stage.stageTimeDays || undefined
+          let checkedList = []
+          stage.children.map(node => {
+            if (node.isDelete === 0) {
+              checkedList.push(node.id)
+            }
+            node.checked = node.isDelete === 0
+            node.nodeTimeStart = node.nodeTimeStart || undefined //鑷」鐩紑濮嬬N澶�
+            node.nodeTimeDays = node.nodeTimeDays || undefined //鎸佺画澶╂暟
+            if(node.notify){
+              node.notifyTempStageNodeId = node.notify.map(n=>n.notifyTempStageNodeId)
+            }
+
+          })
+          stage.checkedList = checkedList
+        })
+        this.tree = res
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/project-web/src/views/projectConfig/kanbanConfig/edit.vue b/project-web/src/views/projectConfig/kanbanConfig/edit.vue
new file mode 100644
index 0000000..c8d1761
--- /dev/null
+++ b/project-web/src/views/projectConfig/kanbanConfig/edit.vue
@@ -0,0 +1,115 @@
+<template>
+  <win-sm :title="setting.title" @close="close" :width="'800px'">
+    <el-form v-loading="loading" ref="ruleForm" :model="formData" :rules="rules" class="demo-ruleForm" label-width="120px">
+      <el-form-item label="鍏抽敭鑺傜偣鍚嶇О" prop="boardName">
+        <el-input v-model="formData.boardName" placeholder="璇疯緭鍏ュ叧閿妭鐐瑰悕绉�" clearable maxlength="32" show-word-limit style="width: 100%"/>
+      </el-form-item>
+<!--      <el-form-item label="缂栧彿" prop="boardCode">
+        <el-input v-model="formData.boardCode" placeholder="璇疯緭鍏ョ紪鍙�" clearable maxlength="32" show-word-limit style="width: 100%"/>
+      </el-form-item>-->
+      <el-form-item label="灞曠ず椤哄簭" prop="sort">
+        <el-input-number v-model="formData.sort" clearable :min="1"/>
+      </el-form-item>
+      <el-form-item label="鐘舵��" prop="status">
+        <el-radio-group v-model="formData.status">
+          <el-radio :label="1" border>鍚敤</el-radio>
+          <el-radio :label="0" border>绂佺敤</el-radio>
+        </el-radio-group>
+      </el-form-item>
+    </el-form>
+    <div slot="footer" align="center" class="dialog-footer">
+      <my-button name="鍙栨秷" site="form" @click="close"/>
+      <my-button name="淇濆瓨" site="form" @click="save"/>
+    </div>
+  </win-sm>
+</template>
+
+<script>
+import winSm from '@/components/win/win-sm'
+import myButton from '@/components/myButton/myButton'
+import * as api from "@/api/projectConfig/kanbanConfig";
+
+export default {
+  name: 'edit',
+  components: {winSm, myButton},
+  props: {
+    // setting 涓』鑷冲皯鍖呭惈鎺у埗dialog鏄剧ず鎴栭殣钘忕殑灞炴��,鍏朵綑灞炴�у彲鎷撳睍
+    // 灏嗘坊鍔�/淇敼鐨勫ぇ閲忔暟鎹強閫昏緫浠庡垪琛ㄩ〉闈腑鍒嗙鍑烘潵,閬垮厤鍒楄〃椤甸潰浠g爜杩囧,瀹℃煡鍥伴毦
+    // 鑻ユ椤甸潰椤诲洖浼犳暟鎹嚦鐖堕〉闈�,鍙湪寮曠敤缁勪欢鏃舵坊鍔犱簨浠�,鏈〉闈娇鐢╰his.$emit('浜嬩欢鍚�',鍙傛暟1,鍙傛暟2...)鍥炰紶鏁版嵁
+    setting: {
+      type: Object,
+      default: () => {
+      }
+    }
+  },
+  data() {
+    return {
+      loading: false,
+      formData: {
+        boardName: '',
+        boardCode: '',
+        sort: '',
+        status: 1
+      },
+      rules: {
+        boardName: [
+          {required: true, message: '璇疯緭鍏ュ叧閿妭鐐瑰悕绉�', trigger: 'blur'},
+        ],
+        boardCode: [
+          {required: true, message: '璇疯緭鍏ョ紪鍙�', trigger: 'blur'},
+        ]
+      }
+    }
+  },
+  created() {
+    this.loading = true
+    this.getInfo()
+  },
+  methods: {
+    getInfo() {
+      this.title = this.setting.title
+      if (this.setting.id != null) {
+        // 鏌ヨ鏁版嵁
+        api.getDetail({id: this.setting.id}).then(res => {
+          this.loading = false
+          this.formData = Object.assign(this.formData, res)
+        })
+      }else{
+        this.loading = false
+      }
+    },
+    close() {
+      this.formData = {
+        planTypeCode: '',
+        projectName: '',
+        projectCode: '',
+        status: 1,
+        remark: '',
+      }
+      this.$emit('close')
+    },
+    save() {
+      this.$refs.ruleForm.validate((valid) => {
+        if (valid) {
+          const params = Object.assign({}, this.formData)
+          this.loading = true
+          api[params.id?'upd':'add'](params).then(res => {
+            this.loading = false
+            if (res) {
+              this.$message.success('淇濆瓨鎴愬姛锛�')
+              this.close()
+              this.$emit('search')
+            } else {
+              this.$message.error('淇濆瓨澶辫触')
+            }
+          }).catch(()=>{
+            this.loading = false
+          })
+        } else {
+          this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��')
+        }
+      })
+    }
+  }
+}
+</script>
diff --git a/project-web/src/views/projectConfig/kanbanConfig/index.vue b/project-web/src/views/projectConfig/kanbanConfig/index.vue
new file mode 100644
index 0000000..89ad20c
--- /dev/null
+++ b/project-web/src/views/projectConfig/kanbanConfig/index.vue
@@ -0,0 +1,166 @@
+<template>
+  <div class="app-container">
+    <el-card class="box-card" shadow="never">
+      <div class="filter-container" style="margin-bottom: 10px">
+        <my-search ref="searchBar" :items="items" @search="filterForm"></my-search>
+      </div>
+      <!--鍒楄〃-->
+      <my-table-v2 ref="myTable" :filter="filterFrom" :table="table"/>
+    </el-card>
+    <edit v-if="editSetting.show" :setting="editSetting" @close="editSetting.show = false" @search="search"></edit>
+    <nodeChoose v-if="nodeSetting.show" :setting="nodeSetting" @close="nodeSetting.show = false" @search="search"></nodeChoose>
+  </div>
+</template>
+
+<script>
+import MyTableV2 from '@/components/myTable/myTableV2';
+import SettingIplatform from '@/utils/settingIplatform';
+import items from './items';
+import edit from './edit'
+import nodeChoose from "@/views/projectConfig/kanbanConfig/nodeChoose";
+import {updStatus} from "@/api/projectConfig/kanbanConfig";
+
+export default {
+  components: {MyTableV2, edit,nodeChoose},
+  data() {
+    return {
+      // 鎼滅储鏉′欢
+      items: items,
+      filterFrom: {
+        boardName: '',
+        status: '1',
+      },
+      //鏂板缂栬緫
+      editSetting: {
+        title: '',
+        id: '',
+        show: false,
+      },
+      //鑺傜偣璁剧疆
+      nodeSetting: {
+        title: '妯℃澘鑺傜偣璁剧疆',
+        stageId: '',
+        show: false,
+      },
+      // 琛ㄦ牸鏁版嵁
+      table: {
+        showIndex: true, // 鏄惁鏄剧ず搴忓彿
+        expand: false, // 鏄惁鏄剧ず璇︽儏鏁版嵁
+        url: SettingIplatform.apiBaseURL + '/pc/p/temp/project/board/list', // 璇锋眰鍦板潃
+        // 宸ュ叿鏉�
+        tools: {
+          columnsCtrl: {
+            // 鍒楁帶鍒舵寜閽�
+            show: false,
+          },
+          generalExport: {
+            // 閫氱敤瀵煎嚭鎸夐挳
+            show: false,
+          },
+          // 鑷畾涔夊伐鍏锋潯鎸夐挳
+          custom: [],
+        },
+        // 鍒椾俊鎭�
+        columns: [
+          {title: '鍏抽敭鑺傜偣鍚嶇О', field: 'boardName', align: 'left'},
+          // {title: '缂栧彿', field: 'boardCode', align: 'center'},
+          {title: '椤哄簭鍙�', field: 'sort', align: 'left'},
+          {
+            field: 'status',
+            title: '鐘舵��',
+            align: 'center',
+            width: 80,
+            switch: (row) => {
+              return {
+                value: row.status === 1, // 寮�
+                label: row.status === 1 ? '鍚敤' : '绂佺敤', // 寮�鐨勬弿杩�
+                click: () => {
+                  // 鐐瑰嚮浜嬩欢
+                  this.updState(row);
+                },
+              };
+            },
+          },
+        ],
+        // 鎿嶄綔淇℃伅
+        operation: {
+          show: true, // 鏄剧ず鎿嶄綔鍒�
+          width: '250', // 鍒楀
+          attr: [
+            {
+              title: '缂栬緫',
+              events: (row) => {
+                this.showAdd(row.id);
+              },
+            },
+            {
+              title: '妯℃澘鑺傜偣璁剧疆',
+              type: 'success',
+              events: (row) => {
+                this.showNode(row.id);
+              },
+            },
+          ],
+        },
+        paging: {
+          show: false, // 鏄剧ず鍒嗛〉
+          // 鍒嗛〉淇℃伅
+          page: {
+            small: false,
+            pageNum: 1,
+            pageSize: 10,
+            total: 0,
+          },
+        },
+      },
+    };
+  },
+  mounted() {
+  },
+  methods: {
+    // 鏌ヨtable鍒楄〃
+    search(pageNum) {
+      if (pageNum != undefined) {
+        this.$refs.myTable.search(pageNum);
+      } else {
+        this.$refs.myTable.search();
+      }
+    },
+    filterForm(params) {
+      this.filterFrom = Object.assign(this.filterFrom, params);
+      this.search();
+    },
+    //娣诲姞銆佺紪杈�
+    showAdd(id) {
+      let title = '娣诲姞';
+      if (id != null) {
+        title = '缂栬緫';
+      }
+      this.editSetting.id = id;
+      this.editSetting.title = title;
+      this.editSetting.show = true;
+    },
+    updState(row) {
+      let text = row.status === 0 ? "鍚敤" : "绂佺敤";
+      this.$modal.confirm('纭瑕�' + text + '"' + row.boardName + '"鑺傜偣鍚楋紵').then(() => {
+        let status = row.status === 1 ? 0 : 1
+        updStatus({
+          id: row.id,
+          status
+        }).then(res => {
+          if (res) {
+            row.status = row.status === 1 ? 0 : 1
+            this.$modal.msgSuccess(text + "鎴愬姛");
+          }
+        })
+      })
+    },
+    showNode(id) {
+      this.nodeSetting.id = id;
+      this.nodeSetting.show = true;
+    },
+  },
+};
+</script>
+
+<style scoped></style>
diff --git a/project-web/src/views/projectConfig/kanbanConfig/items.js b/project-web/src/views/projectConfig/kanbanConfig/items.js
new file mode 100644
index 0000000..bebbf01
--- /dev/null
+++ b/project-web/src/views/projectConfig/kanbanConfig/items.js
@@ -0,0 +1,33 @@
+export default [
+  {
+    type: 'text',
+    dataIndex: 'boardName',
+    label: '鍏抽敭鑺傜偣鍚嶇О',
+    placeholder: '璇疯緭鍏�',
+    defaultValue: ''
+  },
+  /*{
+    type: 'text',
+    dataIndex: 'boardCode',
+    label: '妯℃澘缂栧彿',
+    placeholder: '妯℃澘缂栧彿',
+    defaultValue: ''
+  },*/
+  {
+    type: 'select',
+    dataIndex: 'status',
+    label: '鐘舵��',
+    placeholder: '璇烽�夋嫨',
+    defaultValue: '1',
+    options: [
+      {
+        label: '鍚敤',
+        value: '1'
+      },
+      {
+        label: '绂佺敤',
+        value: '0'
+      }
+    ]
+  }
+]
diff --git a/project-web/src/views/projectConfig/kanbanConfig/nodeChoose.vue b/project-web/src/views/projectConfig/kanbanConfig/nodeChoose.vue
new file mode 100644
index 0000000..054bfa3
--- /dev/null
+++ b/project-web/src/views/projectConfig/kanbanConfig/nodeChoose.vue
@@ -0,0 +1,129 @@
+<template>
+  <win-md :title="setting.title" @close="close" :width="'800px'">
+    <div style="min-height: 300px">
+      <el-table
+        v-loading="loading"
+        border
+        :data="tableData"
+        style="width: 100%;margin-top: 15px">
+        <el-table-column
+          prop="tempProjectName"
+          align="center"
+          width="200"
+          label="妯℃澘"/>
+        <el-table-column
+          align="center"
+          label="閫夋嫨鑺傜偣">
+          <template slot-scope="{row,$index}">
+            <el-cascader
+              :key="$index"
+              style="width: 100%;"
+              v-model="row.tempStageNodeIds"
+              :options="row.options"
+              :show-all-levels="false"
+              :props="{ multiple: true, emitPath: false,value:'id', label:'name'}"
+              clearable></el-cascader>
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+
+    <div slot="footer" align="center" class="dialog-footer">
+      <my-button name="鍙栨秷" site="form" @click="close"/>
+      <my-button name="淇濆瓨" site="form" @click="save"/>
+    </div>
+  </win-md>
+</template>
+
+<script>
+import winMd from '@/components/win/win-md'
+import myButton from '@/components/myButton/myButton'
+import {getList, getTree, upd} from "@/api/projectConfig/kanbanNode";
+
+export default {
+  name: 'nodeChoose',
+  components: {winMd, myButton},
+  props: {
+    // setting 涓』鑷冲皯鍖呭惈鎺у埗dialog鏄剧ず鎴栭殣钘忕殑灞炴��,鍏朵綑灞炴�у彲鎷撳睍
+    // 灏嗘坊鍔�/淇敼鐨勫ぇ閲忔暟鎹強閫昏緫浠庡垪琛ㄩ〉闈腑鍒嗙鍑烘潵,閬垮厤鍒楄〃椤甸潰浠g爜杩囧,瀹℃煡鍥伴毦
+    // 鑻ユ椤甸潰椤诲洖浼犳暟鎹嚦鐖堕〉闈�,鍙湪寮曠敤缁勪欢鏃舵坊鍔犱簨浠�,鏈〉闈娇鐢╰his.$emit('浜嬩欢鍚�',鍙傛暟1,鍙傛暟2...)鍥炰紶鏁版嵁
+    setting: {
+      type: Object,
+      default: () => {
+      }
+    }
+  },
+  data() {
+    return {
+      loading: false,
+      options: [],
+      tableData: []
+    }
+  },
+  mounted() {
+  },
+  created() {
+    this.getList()
+  },
+  methods: {
+    getList() {
+      this.loading = true
+      getList({id: this.setting.id}).then(res => {
+        let count = res.length
+        res.map((item) => {
+          getTree({tempProjectId: item.id}).then(ret => {
+            item.options = ret
+            count--
+            if (count < 1) {
+              this.tableData = res
+              this.loading = false
+            }
+          })
+        })
+      })
+    },
+    close() {
+      this.loading = false
+      this.tableData = []
+      this.$emit('close')
+    },
+    save() {
+      let arr = []
+      if (this.tableData.every(item => item.tempStageNodeIds.length === 0)) {
+        this.$modal.msgError('璇烽�夋嫨鑺傜偣')
+        return;
+      }
+      for (let i = 0; i < this.tableData.length; i++) {
+        const item = this.tableData[i]
+        item.tempStageNodeIds.map(node => {
+          item.tempStageNodeId = node
+          arr.push({...item})
+        })
+      }
+      arr.map(item => {
+        item.tempProjectId = item.id
+        delete item.tempStageNodeIds
+        delete item.id
+        delete item.options
+        delete item.tempProjectName
+      })
+      this.loading = true
+      upd({
+        id: this.setting.id,
+        tempProjectBoardNode: arr
+      }).then(res => {
+        this.loading = false
+        if (res) {
+          this.$message.success('淇濆瓨鎴愬姛锛�')
+          this.close()
+          this.$emit('search')
+        } else {
+          this.$message.error('淇濆瓨澶辫触')
+        }
+      }).catch(() => {
+        this.loading = false
+      })
+    }
+  }
+}
+</script>
diff --git a/project-web/src/views/projectConfig/stageConfig/edit.vue b/project-web/src/views/projectConfig/stageConfig/edit.vue
new file mode 100644
index 0000000..c99c81b
--- /dev/null
+++ b/project-web/src/views/projectConfig/stageConfig/edit.vue
@@ -0,0 +1,116 @@
+<template>
+  <win-sm :title="setting.title" @close="close" :width="'800px'">
+    <el-form v-loading="loading" ref="ruleForm" :model="formData" :rules="rules" class="demo-ruleForm" label-width="100px">
+      <el-form-item label="闃舵鍚嶇О" prop="stageName">
+        <el-input v-model="formData.stageName" clearable maxlength="32" show-word-limit style="width: 100%"/>
+      </el-form-item>
+      <el-form-item label="灞曠ず椤哄簭" prop="sort">
+        <el-input-number v-model="formData.sort" clearable :min="1"/>
+      </el-form-item>
+      <el-form-item label="鐘舵��" prop="status">
+        <el-radio-group v-model="formData.status">
+          <el-radio :label="1" border>鍚敤</el-radio>
+          <el-radio :label="0" border>绂佺敤</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="remark">
+        <el-input
+          v-model="formData.remark"
+          type="textarea"
+          :rows="3"
+          maxlength="200"
+          show-word-limit
+        />
+      </el-form-item>
+    </el-form>
+    <div slot="footer" align="center" class="dialog-footer">
+      <my-button name="鍙栨秷" site="form" @click="close"/>
+      <my-button name="淇濆瓨" site="form" @click="save"/>
+    </div>
+  </win-sm>
+</template>
+
+<script>
+import winSm from '@/components/win/win-sm'
+import myButton from '@/components/myButton/myButton'
+import * as stage from "@/api/projectConfig/stageConfig";
+
+export default {
+  name: 'edit',
+  components: {winSm, myButton},
+  props: {
+    // setting 涓』鑷冲皯鍖呭惈鎺у埗dialog鏄剧ず鎴栭殣钘忕殑灞炴��,鍏朵綑灞炴�у彲鎷撳睍
+    // 灏嗘坊鍔�/淇敼鐨勫ぇ閲忔暟鎹強閫昏緫浠庡垪琛ㄩ〉闈腑鍒嗙鍑烘潵,閬垮厤鍒楄〃椤甸潰浠g爜杩囧,瀹℃煡鍥伴毦
+    // 鑻ユ椤甸潰椤诲洖浼犳暟鎹嚦鐖堕〉闈�,鍙湪寮曠敤缁勪欢鏃舵坊鍔犱簨浠�,鏈〉闈娇鐢╰his.$emit('浜嬩欢鍚�',鍙傛暟1,鍙傛暟2...)鍥炰紶鏁版嵁
+    setting: {
+      type: Object,
+      default: () => {
+      }
+    }
+  },
+  data() {
+    return {
+      loading: false,
+      formData: {
+        stageName: '',
+        sort: 1,
+        status: 1,
+        remark: '',
+      },
+      rules: {
+        stageName: [
+          {required: true, message: '璇疯緭鍏ラ樁娈靛悕绉�', trigger: 'blur'}
+        ],
+      }
+    }
+  },
+  created() {
+    this.loading = true
+    this.getInfo()
+  },
+  methods: {
+    getInfo() {
+      if (this.setting.id != null) {
+        // 鏌ヨ鏁版嵁
+        stage.getDetail({id: this.setting.id}).then(res => {
+          this.loading = false
+          this.formData = Object.assign(this.formData, res)
+        })
+      }else{
+        this.loading = false
+      }
+    },
+    close() {
+      this.formData = {
+        stageName: '',
+        sort: 1,
+        status: 1,
+        remark: '',
+      }
+      this.$emit('close')
+    },
+    save() {
+      this.$refs.ruleForm.validate((valid) => {
+        if (valid) {
+          const params = Object.assign({}, this.formData)
+          this.loading = true
+          stage[params.id?'upd':'add'](params).then(res => {
+            this.loading = false
+            if (res) {
+              this.$message.success('淇濆瓨鎴愬姛锛�')
+              this.close()
+              this.$emit('search')
+            } else {
+              this.$message.error('淇濆瓨澶辫触')
+            }
+          }).catch(()=>{
+            this.loading = false
+          })
+        } else {
+          this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��')
+        }
+      })
+    }
+  }
+}
+</script>
diff --git a/project-web/src/views/projectConfig/stageConfig/index.vue b/project-web/src/views/projectConfig/stageConfig/index.vue
new file mode 100644
index 0000000..8440bb1
--- /dev/null
+++ b/project-web/src/views/projectConfig/stageConfig/index.vue
@@ -0,0 +1,191 @@
+<template>
+  <div class="app-container">
+    <el-card class="box-card" shadow="never">
+      <div class="filter-container" style="margin-bottom: 10px">
+        <my-search ref="searchBar" :items="items" @search="filterForm"></my-search>
+      </div>
+      <!--鍒楄〃-->
+      <my-table-v2 ref="myTable" :filter="filterFrom" :table="table"/>
+    </el-card>
+    <edit v-if="editSetting.show" :setting="editSetting" @close="editSetting.show = false" @search="search"></edit>
+    <nodeConfig v-if="nodeSetting.show" :setting="nodeSetting" @close="nodeSetting.show = false" @search="search"></nodeConfig>
+  </div>
+</template>
+
+<script>
+import MyTableV2 from '@/components/myTable/myTableV2';
+import SettingIplatform from '@/utils/settingIplatform';
+import items from './items';
+import edit from './edit'
+import nodeConfig from './node/node'
+import {del, updStatus} from "@/api/projectConfig/stageConfig";
+
+export default {
+  components: {MyTableV2, edit, nodeConfig},
+  data() {
+    return {
+      // 鎼滅储鏉′欢
+      items: items,
+      filterFrom: {
+        stageName: '',
+        status: '1',
+      },
+      //鏂板缂栬緫
+      editSetting: {
+        title: '',
+        id: '',
+        show: false,
+      },
+      //鑺傜偣璁剧疆
+      nodeSetting: {
+        title: '鑺傜偣璁剧疆',
+        stageId: '',
+        show: false,
+      },
+      // 琛ㄦ牸鏁版嵁
+      table: {
+        showIndex: true, // 鏄惁鏄剧ず搴忓彿
+        expand: false, // 鏄惁鏄剧ず璇︽儏鏁版嵁
+        url: SettingIplatform.apiBaseURL + '/pc/p/temp/stage/list', // 璇锋眰鍦板潃
+        // 宸ュ叿鏉�
+        tools: {
+          columnsCtrl: {
+            // 鍒楁帶鍒舵寜閽�
+            show: false,
+          },
+          generalExport: {
+            // 閫氱敤瀵煎嚭鎸夐挳
+            show: false,
+          },
+          // 鑷畾涔夊伐鍏锋潯鎸夐挳
+          custom: [
+            {
+              name: '鏂板',
+              click: () => {
+                this.showAdd(null);
+              },
+            },
+          ],
+        },
+        // 鍒椾俊鎭�
+        columns: [
+          {title: '闃舵鍚嶇О', field: 'stageName', align: 'left', width: '200px'},
+          {title: '椤哄簭鍙�', field: 'sort', align: 'center', width: '80px'},
+          {title: '鍖呭惈鑺傜偣', field: 'nodeName', align: 'left'},
+          {
+            field: 'status',
+            title: '鐘舵��',
+            align: 'center',
+            width: 80,
+            switch: (row) => {
+              return {
+                value: row.status === 1, // 寮�
+                label: row.status === 1 ? '鍚敤' : '绂佺敤', // 寮�鐨勬弿杩�
+                click: () => {
+                  // 鐐瑰嚮浜嬩欢
+                  this.updState(row);
+                },
+              };
+            },
+          },
+        ],
+        // 鎿嶄綔淇℃伅
+        operation: {
+          show: true, // 鏄剧ず鎿嶄綔鍒�
+          width: '250', // 鍒楀
+          attr: [
+            {
+              title: '缂栬緫',
+              events: (row) => {
+                this.showAdd(row.id);
+              },
+            },
+            {
+              title: '鑺傜偣璁剧疆',
+              type: 'warning',
+              events: (row) => {
+                this.showNode(row.id);
+              },
+            },
+            {
+              title: '鍒犻櫎',
+              events: (row) => {
+                this.handleDelete(row);
+              },
+            },
+          ],
+        },
+        paging: {
+          show: true, // 鏄剧ず鍒嗛〉
+          // 鍒嗛〉淇℃伅
+          page: {
+            small: false,
+            pageNum: 1,
+            pageSize: 10,
+            total: 0,
+          },
+        },
+      },
+    };
+  },
+  mounted() {
+  },
+  methods: {
+    // 鏌ヨtable鍒楄〃
+    search(pageNum) {
+      if (pageNum != undefined) {
+        this.$refs.myTable.search(pageNum);
+      } else {
+        this.$refs.myTable.search();
+      }
+    },
+    filterForm(params) {
+      this.filterFrom = Object.assign(this.filterFrom, params);
+      this.search();
+    },
+    //娣诲姞銆佺紪杈�
+    showAdd(id) {
+      let title = '娣诲姞';
+      if (id != null) {
+        title = '缂栬緫';
+      }
+      this.editSetting.id = id;
+      this.editSetting.title = title;
+      this.editSetting.show = true;
+    },
+    updState(row) {
+      let text = row.status === 0 ? "鍚敤" : "绂佺敤";
+      this.$modal.confirm('纭瑕�' + text + '"' + row.stageName + '"鍚楋紵').then(() => {
+        let status = row.status === 1 ? 0 : 1
+        updStatus({
+          id: row.id,
+          status
+        }).then(res => {
+          if (res) {
+            row.status = row.status === 1 ? 0 : 1
+            this.$modal.msgSuccess(text + "鎴愬姛");
+            this.search()
+          }
+        })
+      })
+    },
+    showNode(id) {
+      this.nodeSetting.stageId = id;
+      this.nodeSetting.show = true;
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      this.$confirm('鏄惁纭鍒犻櫎"' + row.stageName + '"闃舵锛�', {
+        type: 'warning'
+      }).then(() => {
+        del({id: row.id}).then(res => {
+          this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+          this.search()
+        })
+      })
+    },
+  },
+};
+</script>
+
+<style scoped></style>
diff --git a/project-web/src/views/projectConfig/stageConfig/items.js b/project-web/src/views/projectConfig/stageConfig/items.js
new file mode 100644
index 0000000..acdebae
--- /dev/null
+++ b/project-web/src/views/projectConfig/stageConfig/items.js
@@ -0,0 +1,26 @@
+export default [
+  {
+    type: 'text',
+    dataIndex: 'stageName',
+    label: '闃舵鍚嶇О',
+    placeholder: '璇疯緭鍏�',
+    defaultValue: ''
+  },
+  {
+    type: 'select',
+    dataIndex: 'status',
+    label: '鐘舵��',
+    placeholder: '璇烽�夋嫨',
+    defaultValue: '1',
+    options: [
+      {
+        label: '鍚敤',
+        value: '1'
+      },
+      {
+        label: '绂佺敤',
+        value: '0'
+      }
+    ]
+  }
+]
diff --git a/project-web/src/views/projectConfig/stageConfig/node/edit.vue b/project-web/src/views/projectConfig/stageConfig/node/edit.vue
new file mode 100644
index 0000000..d8624c2
--- /dev/null
+++ b/project-web/src/views/projectConfig/stageConfig/node/edit.vue
@@ -0,0 +1,118 @@
+<template>
+  <win-sm :title="setting.title" @close="close" :width="'800px'">
+    <el-form v-loading="loading" ref="ruleForm" :model="formData" :rules="rules" class="demo-ruleForm" label-width="100px">
+      <el-form-item label="鑺傜偣鍚嶇О" prop="nodeName">
+        <el-input v-model="formData.nodeName" clearable maxlength="32" show-word-limit style="width: 100%"/>
+      </el-form-item>
+      <el-form-item label="灞曠ず椤哄簭" prop="sort">
+        <el-input-number v-model="formData.sort" clearable :min="1"/>
+      </el-form-item>
+      <el-form-item label="鐘舵��" prop="status">
+        <el-radio-group v-model="formData.status">
+          <el-radio :label="1" border>鍚敤</el-radio>
+          <el-radio :label="0" border>绂佺敤</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="remark">
+        <el-input
+          v-model="formData.remark"
+          type="textarea"
+          :rows="3"
+          maxlength="200"
+          show-word-limit
+        />
+      </el-form-item>
+    </el-form>
+    <div slot="footer" align="center" class="dialog-footer">
+      <my-button name="鍙栨秷" site="form" @click="close"/>
+      <my-button name="淇濆瓨" site="form" @click="save"/>
+    </div>
+  </win-sm>
+</template>
+
+<script>
+import winSm from '@/components/win/win-sm'
+import myButton from '@/components/myButton/myButton'
+import * as node from "@/api/projectConfig/stageNode";
+
+export default {
+  name: 'edit',
+  components: {winSm, myButton},
+  props: {
+    // setting 涓』鑷冲皯鍖呭惈鎺у埗dialog鏄剧ず鎴栭殣钘忕殑灞炴��,鍏朵綑灞炴�у彲鎷撳睍
+    // 灏嗘坊鍔�/淇敼鐨勫ぇ閲忔暟鎹強閫昏緫浠庡垪琛ㄩ〉闈腑鍒嗙鍑烘潵,閬垮厤鍒楄〃椤甸潰浠g爜杩囧,瀹℃煡鍥伴毦
+    // 鑻ユ椤甸潰椤诲洖浼犳暟鎹嚦鐖堕〉闈�,鍙湪寮曠敤缁勪欢鏃舵坊鍔犱簨浠�,鏈〉闈娇鐢╰his.$emit('浜嬩欢鍚�',鍙傛暟1,鍙傛暟2...)鍥炰紶鏁版嵁
+    setting: {
+      type: Object,
+      default: () => {
+      }
+    }
+  },
+  data() {
+    return {
+      loading: false,
+      formData: {
+        nodeName: '',
+        sort: 1,
+        status: 1,
+        remark: '',
+      },
+      rules: {
+        nodeName: [
+          {required: true, message: '璇疯緭鍏ヨ妭鐐瑰悕绉�', trigger: 'blur'}
+        ],
+      }
+    }
+  },
+  created() {
+    this.loading = true
+    this.getInfo()
+  },
+  methods: {
+    getInfo() {
+      this.title = this.setting.title
+      if (this.setting.id != null) {
+        // 鏌ヨ鏁版嵁
+        node.getDetail({id: this.setting.id}).then(res => {
+          this.loading = false
+          this.formData = Object.assign(this.formData, res)
+        })
+      }else{
+        this.loading = false
+      }
+    },
+    close() {
+      this.formData = {
+        nodeName: '',
+        sort: 1,
+        status: 1,
+        remark: '',
+      }
+      this.$emit('close')
+    },
+    save() {
+      this.$refs.ruleForm.validate((valid) => {
+        if (valid) {
+          const params = Object.assign({}, this.formData)
+          params.stageId = this.setting.stageId
+          this.loading = true
+          node[params.id?'upd':'add'](params).then(res => {
+            this.loading = false
+            if (res) {
+              this.$message.success('淇濆瓨鎴愬姛锛�')
+              this.close()
+              this.$emit('search')
+            } else {
+              this.$message.error('淇濆瓨澶辫触')
+            }
+          }).catch(()=>{
+            this.loading = false
+          })
+        } else {
+          this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��')
+        }
+      })
+    }
+  }
+}
+</script>
diff --git a/project-web/src/views/projectConfig/stageConfig/node/items.js b/project-web/src/views/projectConfig/stageConfig/node/items.js
new file mode 100644
index 0000000..3b75f44
--- /dev/null
+++ b/project-web/src/views/projectConfig/stageConfig/node/items.js
@@ -0,0 +1,26 @@
+export default [
+  {
+    type: 'text',
+    dataIndex: 'nodeName',
+    label: '鑺傜偣鍚嶇О',
+    placeholder: '璇疯緭鍏�',
+    defaultValue: ''
+  },
+  {
+    type: 'select',
+    dataIndex: 'status',
+    label: '鐘舵��',
+    placeholder: '璇烽�夋嫨',
+    defaultValue: '1',
+    options: [
+      {
+        label: '鍚敤',
+        value: '1'
+      },
+      {
+        label: '绂佺敤',
+        value: '0'
+      }
+    ]
+  }
+]
diff --git a/project-web/src/views/projectConfig/stageConfig/node/node.vue b/project-web/src/views/projectConfig/stageConfig/node/node.vue
new file mode 100644
index 0000000..75a2212
--- /dev/null
+++ b/project-web/src/views/projectConfig/stageConfig/node/node.vue
@@ -0,0 +1,192 @@
+<template>
+  <win-lg :title="setting.title" @close="close" :width="'800px'">
+    <el-card class="box-card" shadow="never">
+      <div class="filter-container" style="margin-bottom: 10px">
+        <my-search ref="searchBar" :items="items" @search="filterForm"></my-search>
+      </div>
+      <!--鍒楄〃-->
+      <my-table-v2 ref="myTable" :filter="filterFrom" :table="table"/>
+    </el-card>
+    <edit v-if="editSetting.show" :setting="editSetting" @close="closeNode" @search="search"></edit>
+  </win-lg>
+</template>
+
+<script>
+import MyTableV2 from '@/components/myTable/myTableV2';
+import winLg from '@/components/win/win-lg'
+import SettingIplatform from '@/utils/settingIplatform';
+import items from './items';
+import edit from './edit'
+import {del, updStatus} from "@/api/projectConfig/stageNode";
+
+export default {
+  name: 'nodeConfig',
+  components: {MyTableV2, winLg, edit},
+  props: {
+    // setting 涓』鑷冲皯鍖呭惈鎺у埗dialog鏄剧ず鎴栭殣钘忕殑灞炴��,鍏朵綑灞炴�у彲鎷撳睍
+    // 灏嗘坊鍔�/淇敼鐨勫ぇ閲忔暟鎹強閫昏緫浠庡垪琛ㄩ〉闈腑鍒嗙鍑烘潵,閬垮厤鍒楄〃椤甸潰浠g爜杩囧,瀹℃煡鍥伴毦
+    // 鑻ユ椤甸潰椤诲洖浼犳暟鎹嚦鐖堕〉闈�,鍙湪寮曠敤缁勪欢鏃舵坊鍔犱簨浠�,鏈〉闈娇鐢╰his.$emit('浜嬩欢鍚�',鍙傛暟1,鍙傛暟2...)鍥炰紶鏁版嵁
+    setting: {
+      type: Object,
+      default: () => {
+      }
+    }
+  },
+  data() {
+    return {
+      // 鎼滅储鏉′欢
+      items: items,
+      filterFrom: {
+        nodeName: '',
+        status: '1',
+      },
+      //鏂板缂栬緫
+      editSetting: {
+        title: '',
+        id: '',
+        show: false,
+      },
+      // 琛ㄦ牸鏁版嵁
+      table: {
+        showIndex: true, // 鏄惁鏄剧ず搴忓彿
+        expand: false, // 鏄惁鏄剧ず璇︽儏鏁版嵁
+        url: SettingIplatform.apiBaseURL + '/pc/p/temp/stage/node/list?stageId='+this.setting.stageId, // 璇锋眰鍦板潃
+        // 宸ュ叿鏉�
+        tools: {
+          columnsCtrl: {
+            // 鍒楁帶鍒舵寜閽�
+            show: false,
+          },
+          generalExport: {
+            // 閫氱敤瀵煎嚭鎸夐挳
+            show: false,
+          },
+          // 鑷畾涔夊伐鍏锋潯鎸夐挳
+          custom: [
+            {
+              name: '鏂板',
+              click: () => {
+                this.showAdd(null);
+              },
+            },
+          ],
+        },
+        // 鍒椾俊鎭�
+        columns: [
+          {title: '鑺傜偣鍚嶇О', field: 'nodeName', align: 'center'},
+          {title: '椤哄簭鍙�', field: 'sort', align: 'center'},
+          {title: '璇存槑', field: 'remark', align: 'center'},
+          {
+            field: 'status',
+            title: '鐘舵��',
+            align: 'center',
+            width: 80,
+            switch: (row) => {
+              return {
+                value: row.status === 1, // 寮�
+                label: row.status === 1 ? '鍚敤' : '绂佺敤', // 寮�鐨勬弿杩�
+                click: () => {
+                  // 鐐瑰嚮浜嬩欢
+                  this.updState(row);
+                },
+              };
+            },
+          },
+        ],
+        // 鎿嶄綔淇℃伅
+        operation: {
+          show: true, // 鏄剧ず鎿嶄綔鍒�
+          width: '200', // 鍒楀
+          attr: [
+            {
+              title: '缂栬緫',
+              events: (row) => {
+                this.showAdd(row.id);
+              },
+            },
+            {
+              title: '鍒犻櫎',
+              events: (row) => {
+                this.handleDelete(row);
+              },
+            },
+          ],
+        },
+        paging: {
+          show: true, // 鏄剧ず鍒嗛〉
+          // 鍒嗛〉淇℃伅
+          page: {
+            small: false,
+            pageNum: 1,
+            pageSize: 10,
+            total: 0,
+          },
+        },
+      },
+    };
+  },
+  mounted() {
+  },
+  methods: {
+    close() {
+      this.$emit('close')
+    },
+    closeNode() {
+      this.editSetting.show = false
+      this.$emit('search')
+    },
+    // 鏌ヨtable鍒楄〃
+    search(pageNum) {
+      if (pageNum != undefined) {
+        this.$refs.myTable.search(pageNum);
+      } else {
+        this.$refs.myTable.search();
+      }
+    },
+    filterForm(params) {
+      this.filterFrom = Object.assign(this.filterFrom, params);
+      this.search();
+    },
+    //娣诲姞銆佺紪杈�
+    showAdd(id) {
+      let title = '娣诲姞';
+      if (id != null) {
+        title = '缂栬緫';
+      }
+      this.editSetting.id = id||this.setting.id;
+      this.editSetting.stageId = this.setting.stageId;
+      this.editSetting.title = title;
+      this.editSetting.show = true;
+    },
+    updState(row) {
+      let text = row.status === 0 ? "鍚敤" : "绂佺敤";
+      this.$modal.confirm('纭瑕�' + text + '"' + row.nodeName + '"鍚楋紵').then(() => {
+        let status = row.status === 1 ? 0 : 1
+        updStatus({
+          id: row.id,
+          status
+        }).then(res => {
+          if (res) {
+            row.status = row.status === 1 ? 0 : 1
+            this.$modal.msgSuccess(text + "鎴愬姛");
+            this.search()
+          }
+        })
+      })
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      this.$confirm('鏄惁纭鍒犻櫎"' + row.nodeName + '"闃舵锛�', {
+        type: 'warning'
+      }).then(() => {
+        del({id:row.id}).then(res=>{
+          this.$modal.msgSuccess( "鍒犻櫎鎴愬姛");
+          this.search()
+        })
+      })
+    },
+  },
+};
+</script>
+
+<style scoped></style>
diff --git a/project-web/src/views/projectConfig/warningConfig/chooseItems.js b/project-web/src/views/projectConfig/warningConfig/chooseItems.js
new file mode 100644
index 0000000..e478dfd
--- /dev/null
+++ b/project-web/src/views/projectConfig/warningConfig/chooseItems.js
@@ -0,0 +1,16 @@
+export default [
+  {
+    type: 'text',
+    dataIndex: 'userName',
+    label: '浜哄憳濮撳悕',
+    placeholder: "璇疯緭鍏�",
+    defaultValue: ''
+  },
+  {
+    type: 'text',
+    dataIndex: 'userPhone',
+    label: '鎵嬫満鍙�',
+    placeholder: "璇疯緭鍏�",
+    defaultValue: ''
+  }
+]
diff --git a/project-web/src/views/projectConfig/warningConfig/chooseUser.vue b/project-web/src/views/projectConfig/warningConfig/chooseUser.vue
new file mode 100644
index 0000000..6e0140f
--- /dev/null
+++ b/project-web/src/views/projectConfig/warningConfig/chooseUser.vue
@@ -0,0 +1,206 @@
+<template>
+  <win-md :title="setting.title" @close="close" width="1000px">
+    <el-row :gutter="15">
+      <!--宸︿晶鏍戝舰寮�濮�-->
+      <el-col :span="6">
+        <el-card style="height: calc(100vh - 400px);overflow-y: auto" shadow="never">
+          <my-tree ref="searchTree" :tree-list="treeDataList" @setNode="nodeClick" @search="search"></my-tree>
+        </el-card>
+      </el-col>
+      <!--宸︿晶鏍戝舰缁撴潫-->
+      <!--鍙充晶鍒楄〃寮�濮�-->
+      <el-col :span="18">
+        <el-card class="box-card" shadow="never">
+          <!--鎼滅储鏉′欢-->
+          <div class="filter-container">
+            <my-search ref="searchBar" :items="chooseItems" @search="fifterForm"></my-search>
+          </div>
+          <el-row style="margin-top: 15px">
+            <el-col>
+              <!--鍒楄〃-->
+              <my-table ref="myTable" :parentSelectionsObject="setting.selections" :filter="filterFrom" :table="table"/>
+            </el-col>
+          </el-row>
+        </el-card>
+      </el-col>
+    </el-row>
+    <div slot="footer" align="center" class="dialog-footer">
+      <my-button name="鍙栨秷" site="form" @click="close"/>
+      <my-button name="淇濆瓨" site="form" @click="save"/>
+    </div>
+  </win-md>
+</template>
+
+<script>
+import winMd from '@/components/win/win-md'
+import myButton from '@/components/myButton/myButton'
+import myTree from '@/components/myTree/index';
+import MyTable from '@/components/myTable/myTable';
+import SettingIplatform from "@/utils/settingIplatform";
+import * as DateFormatter from "@/utils/DateFormatter";
+import {getTree} from "@/api/baseSetting/finsystenant";
+import chooseItems from './chooseItems'
+
+export default {
+  name: "chooseUser",
+  components: {winMd, myButton, MyTable, myTree},
+  props: {
+    // setting 涓』鑷冲皯鍖呭惈鎺у埗dialog鏄剧ず鎴栭殣钘忕殑灞炴��,鍏朵綑灞炴�у彲鎷撳睍
+    // 灏嗘坊鍔�/淇敼鐨勫ぇ閲忔暟鎹強閫昏緫浠庡垪琛ㄩ〉闈腑鍒嗙鍑烘潵,閬垮厤鍒楄〃椤甸潰浠g爜杩囧,瀹℃煡鍥伴毦
+    // 鑻ユ椤甸潰椤诲洖浼犳暟鎹嚦鐖堕〉闈�,鍙湪寮曠敤缁勪欢鏃舵坊鍔犱簨浠�,鏈〉闈娇鐢╰his.$emit('浜嬩欢鍚�',鍙傛暟1,鍙傛暟2...)鍥炰紶鏁版嵁
+    setting: {
+      type: Object,
+      default: () => {
+      }
+    }
+  },
+  data() {
+    return {
+      chooseItems: chooseItems,
+      // 鏍戞暟鎹�
+      treeDataList: [],
+      // 鎼滅储鏉′欢
+      filterFrom: {
+        tenantCode: 0,
+        trnantId: 0,
+        userName: null,
+        userPhone: null,
+      },
+      // 琛ㄦ牸鏁版嵁
+      table: {
+        showIndex: true, // 鏄惁鏄剧ず搴忓彿
+        showCheckBox: true,
+        expand: false, // 鏄惁鏄剧ず璇︽儏鏁版嵁
+        url: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/user/select/list?status=1', // 璇锋眰鍦板潃
+        // 宸ュ叿鏉�
+        tools: {
+          columnsCtrl: {
+            // 鍒楁帶鍒舵寜閽�
+            show: false,
+          },
+          generalExport: {
+            // 閫氱敤瀵煎嚭鎸夐挳
+            show: false,
+          },
+          // 鑷畾涔夊伐鍏锋潯鎸夐挳
+          custom: [
+            {
+              name: '鏂板',
+              click: () => {
+                this.showAdd(null);
+              },
+            },
+          ],
+        },
+        // 鍒椾俊鎭�
+        columns: [
+          {title: '浜哄憳濮撳悕', field: 'userName', align: 'left'},
+          {title: '鍛樺伐缂栧彿', field: 'userCode', align: 'left'},
+          {title: '鎵嬫満鍙�', field: 'userPhone', align: 'center', width: 120},
+          {
+            title: '鍒涘缓鏃堕棿',
+            field: 'createTime',
+            align: 'center',
+            width: 160,
+            formatter: (row) => {
+              return {value: DateFormatter.LongToDateTime(row.createTime)};
+            },
+          },
+        ],
+        // 鎿嶄綔淇℃伅
+        operation: {
+          show: false, // 鏄剧ず鎿嶄綔鍒�
+        },
+        paging: {
+          show: true, // 鏄剧ず鍒嗛〉
+          // 鍒嗛〉淇℃伅
+          page: {
+            small: false,
+            pageNum: 1,
+            pageSize: 10,
+            total: 0,
+          },
+        },
+      },
+    }
+  },
+  created() {
+    // 鑾峰彇鏈烘瀯鏍�
+    this.initTreeData();
+  },
+  mounted() {
+  },
+  methods: {
+    close() {
+      this.$emit('close')
+    },
+    save() {
+      let checkUsers = this.$refs.myTable.getChedkObject()
+      if (checkUsers.length === 0) {
+        this.$message.error('璇烽�夋嫨浜哄憳')
+        return false
+      }
+      this.$emit('checkUsers', checkUsers.map(item => {
+        return {
+          id: item.id,
+          userName: item.userName
+        }
+      }))
+    },
+    // 宸︿晶鏍戝垵濮嬪寲
+    initTreeData() {
+      getTree().then((res) => {
+        const content = res || [];
+        this.treeDataList.splice(0, this.treeDataList.length);
+        this.treeDataList = content;
+        if (this.treeDataList && this.treeDataList.length > 0) {
+          this.tenantId = this.treeDataList[0].id;
+          this.tenantCode = this.treeDataList[0].code;
+        }
+      });
+    },
+    nodeClick(param) {
+      param = param || {};
+      this.p = Object.assign(
+        {},
+        {
+          id: param.id,
+          name: param.name,
+          code: param.code,
+        },
+      );
+      if (this.p.code != undefined && this.p.code != null) {
+        this.filterFrom.tenantCode = this.p.code;
+        this.tenantId = this.p.id;
+      } else {
+        this.filterFrom.tenantCode = 0;
+      }
+      this.table.paging.page.pageNum = 1;
+      this.search(1);
+    },
+    // 鏌ヨtable鍒楄〃
+    search(pageNum) {
+      if (pageNum != undefined) {
+        this.$refs.myTable.search(pageNum);
+      } else {
+        this.$refs.myTable.search();
+      }
+    },
+    // 閲嶇疆
+    reset() {
+      this.filterFrom.tenantCode = null;
+      this.filterFrom.userName = null;
+      this.filterFrom.userPhone = null;
+      this.search(1);
+    },
+    fifterForm(params) {
+      this.filterFrom = Object.assign(this.filterFrom, params);
+      this.search();
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/project-web/src/views/projectConfig/warningConfig/edit.vue b/project-web/src/views/projectConfig/warningConfig/edit.vue
new file mode 100644
index 0000000..6d0dcc8
--- /dev/null
+++ b/project-web/src/views/projectConfig/warningConfig/edit.vue
@@ -0,0 +1,330 @@
+<template>
+  <win-md :title="setting.title" @close="close" :width="'800px'">
+    <el-form v-loading="loading" ref="ruleForm" :model="formData" :rules="rules" class="demo-ruleForm" label-width="100px">
+      <el-form-item label="妯℃澘鍚嶇О" prop="tempExpirationNotifyName">
+        <el-input v-model="formData.tempExpirationNotifyName" placeholder="" clearable maxlength="32" show-word-limit style="width: 400px"/>
+      </el-form-item>
+      <h1>涓存湡鍓嶉璀�</h1>
+      <el-form-item label="涓存湡鍓�" prop="expireBefore1">
+        <el-input-number v-model="formData.expireBefore1" :controls="false" :min="1" :max="10" :step="1" step-strictly style="width: 100px"></el-input-number>
+        <span style="margin-right: 10px">澶�</span>
+        <el-checkbox v-model="formData.beforeManagerNotify1" :true-label="1" :false-label="0">閫氱煡椤圭洰缁忕悊</el-checkbox>
+      </el-form-item>
+      <el-form-item label="閫氱煡浜哄憳" prop="beforeManagerNotifyUser1">
+        <el-button @click="chooseUser('beforeManagerNotifyUser1')" type="primary" plain>閫夋嫨浜哄憳</el-button>
+        <el-tag
+          v-for="(item,i) in formData.beforeManagerNotifyUser1"
+          :key="item.id"
+          type="danger"
+          closable
+          @close="closeUser('beforeManagerNotifyUser1',i)"
+          effect="plain">
+          {{ item.userName }}
+        </el-tag>
+      </el-form-item>
+      <el-form-item label="涓存湡鍓�" prop="expireBefore2">
+        <el-input-number v-model="formData.expireBefore2" :controls="false" :min="1" :max="10" :step="1" step-strictly style="width: 100px"></el-input-number>
+        <span style="margin-right: 10px">澶�</span>
+        <el-checkbox v-model="formData.beforeManagerNotify2" :true-label="1" :false-label="0">閫氱煡椤圭洰缁忕悊</el-checkbox>
+      </el-form-item>
+      <el-form-item label="閫氱煡浜哄憳" prop="beforeManagerNotifyUser2">
+        <el-button @click="chooseUser('beforeManagerNotifyUser2')" type="primary" plain>閫夋嫨浜哄憳</el-button>
+        <el-tag
+          v-for="(item,i) in formData.beforeManagerNotifyUser2"
+          :key="item.id"
+          type="danger"
+          closable
+          @close="closeUser('beforeManagerNotifyUser2',i)"
+          effect="plain">
+          {{ item.userName }}
+        </el-tag>
+      </el-form-item>
+      <el-form-item label="涓存湡鍓�" prop="expireBefore3">
+        <el-input-number v-model="formData.expireBefore3" :controls="false" :min="1" :max="10" :step="1" step-strictly style="width: 100px"></el-input-number>
+        <span style="margin-right: 10px">澶�</span>
+        <el-checkbox v-model="formData.beforeManagerNotify3" :true-label="1" :false-label="0">閫氱煡椤圭洰缁忕悊</el-checkbox>
+      </el-form-item>
+      <el-form-item label="閫氱煡浜哄憳" prop="beforeManagerNotifyUser3">
+        <el-button @click="chooseUser('beforeManagerNotifyUser3')" type="primary" plain>閫夋嫨浜哄憳</el-button>
+        <el-tag
+          v-for="(item,i) in formData.beforeManagerNotifyUser3"
+          :key="item.id"
+          type="danger"
+          closable
+          @close="closeUser('beforeManagerNotifyUser3',i)"
+          effect="plain">
+          {{ item.userName }}
+        </el-tag>
+      </el-form-item>
+      <h1>瓒呮湡鍚庨璀�</h1>
+      <el-form-item label="瓒呮湡鍚�" prop="expireAfter1">
+        <el-input-number v-model="formData.expireAfter1" :controls="false" :min="1" :max="10" :step="1" step-strictly style="width: 100px"></el-input-number>
+        <span style="margin-right: 10px">澶�</span>
+        <el-checkbox v-model="formData.afterManagerNotify1" :true-label="1" :false-label="0">閫氱煡椤圭洰缁忕悊</el-checkbox>
+      </el-form-item>
+      <el-form-item label="閫氱煡浜哄憳" prop="afterManagerNotifyUser1">
+        <el-button @click="chooseUser('afterManagerNotifyUser1')" type="primary" plain>閫夋嫨浜哄憳</el-button>
+        <el-tag
+          v-for="(item,i) in formData.afterManagerNotifyUser1"
+          :key="item.id"
+          type="danger"
+          closable
+          @close="closeUser('afterManagerNotifyUser1',i)"
+          effect="plain">
+          {{ item.userName }}
+        </el-tag>
+      </el-form-item>
+      <el-form-item label="瓒呮湡鍚�" prop="expireAfter2">
+        <el-input-number v-model="formData.expireAfter2" :controls="false" :min="1" :max="10" :step="1" step-strictly style="width: 100px"></el-input-number>
+        <span style="margin-right: 10px">澶�</span>
+        <el-checkbox v-model="formData.afterManagerNotify2" :true-label="1" :false-label="0">閫氱煡椤圭洰缁忕悊</el-checkbox>
+      </el-form-item>
+      <el-form-item label="閫氱煡浜哄憳" prop="afterManagerNotifyUser2">
+        <el-button @click="chooseUser('afterManagerNotifyUser2')" type="primary" plain>閫夋嫨浜哄憳</el-button>
+        <el-tag
+          v-for="(item,i) in formData.afterManagerNotifyUser2"
+          :key="item.id"
+          type="danger"
+          closable
+          @close="closeUser('afterManagerNotifyUser2',i)"
+          effect="plain">
+          {{ item.userName }}
+        </el-tag>
+      </el-form-item>
+      <el-form-item label="瓒呮湡鍚�" prop="expireAfter3">
+        <el-input-number v-model="formData.expireAfter3" :controls="false" :min="1" :max="10" :step="1" step-strictly style="width: 100px"></el-input-number>
+        <span style="margin-right: 10px">澶�</span>
+        <el-checkbox v-model="formData.afterManagerNotify3" :true-label="1" :false-label="0">閫氱煡椤圭洰缁忕悊</el-checkbox>
+      </el-form-item>
+      <el-form-item label="閫氱煡浜哄憳" prop="afterManagerNotifyUser3">
+        <el-button @click="chooseUser('afterManagerNotifyUser3')" type="primary" plain>閫夋嫨浜哄憳</el-button>
+        <el-tag
+          v-for="(item,i) in formData.afterManagerNotifyUser3"
+          :key="item.id"
+          type="danger"
+          closable
+          @close="closeUser('afterManagerNotifyUser3',i)"
+          effect="plain">
+          {{ item.userName }}
+        </el-tag>
+      </el-form-item>
+      <h1>棰勮鏂瑰紡</h1>
+      <div style="margin-left: 50px;margin-bottom: 20px">
+        <el-checkbox v-model="formData.notifyWx" :true-label="1" :false-label="0">寰俊娑堟伅</el-checkbox>
+        <div style="margin-top: 20px">
+          <el-checkbox v-model="formData.notifyMobMsg" :true-label="1" :false-label="0">鐭俊</el-checkbox>
+          <el-radio v-model="formData.notifyMobMsgWay" :label="0">鑷姩鍙戦��</el-radio>
+          <el-radio v-model="formData.notifyMobMsgWay" :label="1">鎵嬪姩鍙戦��</el-radio>
+        </div>
+      </div>
+      <template v-if="formData.notifyMobMsg===1">
+        <el-form-item label="鎵嬫満鍙�" prop="notifyMob">
+          <el-input
+            v-model="formData.notifyMob"
+            type="textarea"
+            :rows="3"
+            maxlength="1024"
+            show-word-limit
+          />
+        </el-form-item>
+      </template>
+      <el-form-item label="鍙戦�佹椂闂�" prop="notifyTime">
+        <el-select v-model="formData.notifyTime" placeholder="">
+          <el-option
+            v-for="i in 24"
+            :key="i"
+            :label="(i-1)+'鐐�'"
+            :value="i-1">
+          </el-option>
+        </el-select>
+      </el-form-item>
+
+    </el-form>
+    <div slot="footer" align="center" class="dialog-footer">
+      <my-button name="鍙栨秷" site="form" @click="close"/>
+      <my-button name="淇濆瓨" site="form" @click="save"/>
+    </div>
+    <chooseUser v-if="chooseSetting.show" :setting="chooseSetting" @close="chooseSetting.show = false" @checkUsers="checkUsers"></chooseUser>
+  </win-md>
+</template>
+
+<script>
+import winMd from '@/components/win/win-md'
+import myButton from '@/components/myButton/myButton'
+import chooseUser from "@/views/projectConfig/warningConfig/chooseUser";
+import * as api from "@/api/projectConfig/warningConfig";
+
+export default {
+  name: 'edit',
+  components: {winMd, myButton, chooseUser},
+  props: {
+    // setting 涓』鑷冲皯鍖呭惈鎺у埗dialog鏄剧ず鎴栭殣钘忕殑灞炴��,鍏朵綑灞炴�у彲鎷撳睍
+    // 灏嗘坊鍔�/淇敼鐨勫ぇ閲忔暟鎹強閫昏緫浠庡垪琛ㄩ〉闈腑鍒嗙鍑烘潵,閬垮厤鍒楄〃椤甸潰浠g爜杩囧,瀹℃煡鍥伴毦
+    // 鑻ユ椤甸潰椤诲洖浼犳暟鎹嚦鐖堕〉闈�,鍙湪寮曠敤缁勪欢鏃舵坊鍔犱簨浠�,鏈〉闈娇鐢╰his.$emit('浜嬩欢鍚�',鍙傛暟1,鍙傛暟2...)鍥炰紶鏁版嵁
+    setting: {
+      type: Object,
+      default: () => {
+      }
+    }
+  },
+  data() {
+    return {
+      chooseSetting: {
+        title: '閫夋嫨浜哄憳',
+        setting: [],
+        show: false
+      },
+      loading: false,
+      formData: {
+        tempExpirationNotifyName: '',
+        expireBefore1: undefined,
+        beforeManagerNotify1: '',
+        beforeManagerNotifyUser1: [],
+        expireBefore2: undefined,
+        beforeManagerNotify2: '',
+        beforeManagerNotifyUser2: [],
+        expireBefore3: undefined,
+        beforeManagerNotify3: '',
+        beforeManagerNotifyUser3: [],
+        expireAfter1: undefined,
+        afterManagerNotify1: '',
+        afterManagerNotifyUser1: [],
+        expireAfter2: undefined,
+        afterManagerNotify2: '',
+        afterManagerNotifyUser2: [],
+        expireAfter3: undefined,
+        afterManagerNotify3: '',
+        afterManagerNotifyUser3: [],
+        notifyWx: 0,
+        notifyMobMsg: 0,
+        notifyMobMsgWay: '',
+        notifyMob: '',
+        notifyTime: ''
+      },
+      rules: {
+        tempExpirationNotifyName: [
+          {required: true, message: '璇疯緭鍏ユā鏉垮悕绉�', trigger: 'blur'},
+        ],
+        notifyTime: [
+          {required: true, message: '璇烽�夋嫨鍙戦�佹椂闂�', trigger: 'blur'},
+        ]
+      },
+      cur: ''
+    }
+  },
+  created() {
+    this.loading = true
+    this.getInfo()
+  },
+  methods: {
+    chooseUser(cur) {
+      this.cur = cur
+      this.chooseSetting.selections = this.formData[cur]
+      this.chooseSetting.show = true
+    },
+    closeUser(key, i) {
+      this.formData[key].splice(i, 1)
+    },
+    checkUsers(users) {
+      console.log(users)
+      this.formData[this.cur] = users
+      this.chooseSetting.show = false
+      this.cur = ''
+    },
+    getInfo() {
+      this.title = this.setting.title
+      if (this.setting.id != null) {
+        // 鏌ヨ鏁版嵁
+        api.getDetail({id: this.setting.id}).then(res => {
+          this.loading = false
+          this.formData = Object.assign(this.formData, res)
+        })
+      } else {
+        this.loading = false
+      }
+    },
+    close() {
+      this.formData = {
+        tempExpirationNotifyName: '',
+        expireBefore1: undefined,
+        beforeManagerNotify1: '',
+        beforeManagerNotifyUser1: [],
+        expireBefore2: undefined,
+        beforeManagerNotify2: '',
+        beforeManagerNotifyUser2: [],
+        expireBefore3: undefined,
+        beforeManagerNotify3: '',
+        beforeManagerNotifyUser3: [],
+        expireAfter1: undefined,
+        afterManagerNotify1: '',
+        afterManagerNotifyUser1: [],
+        expireAfter2: undefined,
+        afterManagerNotify2: '',
+        afterManagerNotifyUser2: [],
+        expireAfter3: undefined,
+        afterManagerNotify3: '',
+        afterManagerNotifyUser3: [],
+        notifyWx: 0,
+        notifyMobMsg: 0,
+        notifyMobMsgWay: '',
+        notifyMob: '',
+        notifyTime: ''
+      }
+      this.$emit('close')
+    },
+    save() {
+      this.$refs.ruleForm.validate((valid) => {
+        if (valid) {
+          const params = Object.assign({}, this.formData)
+          let check1 = ['expireBefore1','expireBefore2','expireBefore3','expireAfter1','expireAfter2','expireAfter3']
+          let check2 = ['beforeManagerNotifyUser1','beforeManagerNotifyUser2','beforeManagerNotifyUser3','afterManagerNotifyUser1','afterManagerNotifyUser2','afterManagerNotifyUser3']
+          if(!check1.some(key=>params[key])){
+            this.$message.error('璇峰~鍐欓璀︽椂闂�')
+            return
+          }
+          if(params.notifyWx===0&&params.notifyMobMsg===0){
+            this.$message.error('璇疯缃璀︽柟寮�')
+            return
+          }
+          if(params.notifyMobMsg===1&&!check2.some(key=>params[key].length>0)&&params.notifyMob===''){
+            this.$message.error('璇疯缃�氱煡浜哄憳')
+            return
+          }
+          if(params.notifyMobMsg===0&&!check2.some(key=>params[key].length>0)){
+            this.$message.error('璇疯缃�氱煡浜哄憳')
+            return
+          }
+          if(params.notifyMobMsg===1&&params.notifyMobMsgWay===''){
+            this.$message.error('璇疯缃煭淇″彂閫佹柟寮�')
+            return
+          }
+          this.loading = true
+          api[params.id ? 'upd' : 'add'](params).then(res => {
+            this.loading = false
+            if (res) {
+              this.$message.success('淇濆瓨鎴愬姛锛�')
+              this.close()
+              this.$emit('search')
+            } else {
+              this.$message.error('淇濆瓨澶辫触')
+            }
+          }).catch(() => {
+            this.loading = false
+          })
+        } else {
+          this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��')
+        }
+      })
+    }
+  }
+}
+</script>
+<style scoped lang="scss">
+h1 {
+  font-size: 18px;
+  color: #000;
+  font-weight: bold;
+  margin-bottom: 20px;
+  padding-left: 20px;
+}
+</style>
diff --git a/project-web/src/views/projectConfig/warningConfig/index.vue b/project-web/src/views/projectConfig/warningConfig/index.vue
new file mode 100644
index 0000000..2363542
--- /dev/null
+++ b/project-web/src/views/projectConfig/warningConfig/index.vue
@@ -0,0 +1,209 @@
+<template>
+  <div class="app-container">
+    <el-card class="box-card" shadow="never">
+      <div class="filter-container" style="margin-bottom: 10px">
+        <my-search ref="searchBar" :items="items" @search="filterForm"></my-search>
+      </div>
+      <!--鍒楄〃-->
+      <my-table-v2 ref="myTable" :filter="filterFrom" :table="table"/>
+    </el-card>
+    <edit v-if="editSetting.show" :setting="editSetting" @close="editSetting.show = false" @search="search"></edit>
+  </div>
+</template>
+
+<script>
+import MyTableV2 from '@/components/myTable/myTableV2';
+import SettingIplatform from '@/utils/settingIplatform';
+import items from './items';
+import edit from './edit'
+import {del, updStatus} from "@/api/projectConfig/warningConfig";
+
+export default {
+  components: {MyTableV2, edit},
+  data() {
+    return {
+      // 鎼滅储鏉′欢
+      items: items,
+      filterFrom: {
+        projectName: '',
+        projectCode: '',
+        planTypeCode: '',
+        status: '1',
+      },
+      //鏂板缂栬緫
+      editSetting: {
+        title: '',
+        id: '',
+        show: false,
+      },
+      //鑺傜偣璁剧疆
+      nodeSetting: {
+        title: '鑺傜偣璁剧疆',
+        stageId: '',
+        show: false,
+      },
+      // 琛ㄦ牸鏁版嵁
+      table: {
+        showIndex: true, // 鏄惁鏄剧ず搴忓彿
+        expand: false, // 鏄惁鏄剧ず璇︽儏鏁版嵁
+        url: SettingIplatform.apiBaseURL + '/pc/p/temp/expiration/notify/list', // 璇锋眰鍦板潃
+        // 宸ュ叿鏉�
+        tools: {
+          columnsCtrl: {
+            // 鍒楁帶鍒舵寜閽�
+            show: false,
+          },
+          generalExport: {
+            // 閫氱敤瀵煎嚭鎸夐挳
+            show: false,
+          },
+          // 鑷畾涔夊伐鍏锋潯鎸夐挳
+          custom: [
+            {
+              name: '鏂板',
+              click: () => {
+                this.showAdd(null);
+              },
+            },
+          ],
+        },
+        // 鍒椾俊鎭�
+        columns: [
+          {
+            title: '妯℃澘鍚嶇О', field: 'tempExpirationNotifyName', align: 'left',
+            /*formatter: (row) => {
+              return {
+                value: row.projectName,
+                type: 'primary',
+                click: () => {
+                  // 鐐瑰嚮浜嬩欢
+                  this.updState(row);
+                },
+              }
+            }*/
+          },
+          {title: '缂栧彿', field: 'tempExpirationNotifyCode', align: 'center'},
+          {title: '鎵�灞炴満鏋�', field: 'createOrgName', align: 'left'},
+          {
+            title: '寰俊娑堟伅', field: 'notifyWx', align: 'center',width: 80,
+            formatter: (row) => {
+              return {
+                value: row.notifyWx === 1 ? '寮�' : '鍏�'
+              }
+            }
+          },
+          {
+            title: '鐭俊', field: 'notifyMobMsg', align: 'center',width: 80,
+            formatter: (row) => {
+              return {
+                value: row.notifyMobMsg === 1 ? row.notifyMobMsgWay === 1 ? '鎵嬪姩' : '鑷姩' : '鍏�',
+              }
+            }
+          },
+          {
+            field: 'status',
+            title: '鐘舵��',
+            align: 'center',
+            width: 80,
+            switch: (row) => {
+              return {
+                value: row.status === 1, // 寮�
+                label: row.status === 1 ? '鍚敤' : '绂佺敤', // 寮�鐨勬弿杩�
+                click: () => {
+                  // 鐐瑰嚮浜嬩欢
+                  this.updState(row);
+                },
+              };
+            },
+          },
+        ],
+        // 鎿嶄綔淇℃伅
+        operation: {
+          show: true, // 鏄剧ず鎿嶄綔鍒�
+          width: 180, // 鍒楀
+          attr: [
+            {
+              title: '缂栬緫',
+              events: (row) => {
+                this.showAdd(row.id);
+              },
+            },
+            {
+              title: '鍒犻櫎',
+              events: (row) => {
+                this.handleDelete(row);
+              },
+            },
+          ],
+        },
+        paging: {
+          show: false, // 鏄剧ず鍒嗛〉
+          // 鍒嗛〉淇℃伅
+          page: {
+            small: false,
+            pageNum: 1,
+            pageSize: 10,
+            total: 0,
+          },
+        },
+      },
+    };
+  },
+  mounted() {
+  },
+  methods: {
+    // 鏌ヨtable鍒楄〃
+    search(pageNum) {
+      if (pageNum != undefined) {
+        this.$refs.myTable.search(pageNum);
+      } else {
+        this.$refs.myTable.search();
+      }
+    },
+    /*鎼滅储*/
+    filterForm(params) {
+      this.filterFrom = Object.assign(this.filterFrom, params);
+      this.search();
+    },
+    //娣诲姞銆佺紪杈�
+    showAdd(id) {
+      let title = '娣诲姞';
+      if (id != null) {
+        title = '缂栬緫';
+      }
+      this.editSetting.id = id;
+      this.editSetting.title = title;
+      this.editSetting.show = true;
+    },
+    /*寮�鍚叧闂�*/
+    updState(row) {
+      let text = row.status === 0 ? "鍚敤" : "绂佺敤";
+      this.$modal.confirm('纭瑕�' + text + '"' + row.tempExpirationNotifyName + '"妯℃澘鍚楋紵').then(() => {
+        let status = row.status === 1 ? 0 : 1
+        updStatus({
+          id: row.id,
+          status
+        }).then(res => {
+          if (res) {
+            row.status = row.status === 1 ? 0 : 1
+            this.$modal.msgSuccess(text + "鎴愬姛");
+          }
+        })
+      })
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      this.$confirm('鏄惁纭鍒犻櫎"' + row.tempExpirationNotifyName + '"妯$増锛�', {
+        type: 'warning'
+      }).then(() => {
+        del({id: row.id}).then(res => {
+          this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+          this.search()
+        })
+      })
+    },
+  },
+};
+</script>
+
+<style scoped></style>
diff --git a/project-web/src/views/projectConfig/warningConfig/items.js b/project-web/src/views/projectConfig/warningConfig/items.js
new file mode 100644
index 0000000..c2f2b21
--- /dev/null
+++ b/project-web/src/views/projectConfig/warningConfig/items.js
@@ -0,0 +1,45 @@
+
+import SettingIplatform from '@/utils/settingIplatform';
+export default [
+  {
+    type: 'text',
+    dataIndex: 'projectName',
+    label: '妯℃澘鍚嶇О',
+    placeholder: '璇疯緭鍏�',
+    defaultValue: ''
+  },
+  {
+    type: 'text',
+    dataIndex: 'projectCode',
+    label: '妯℃澘缂栧彿',
+    placeholder: '璇疯緭鍏�',
+    defaultValue: ''
+  },
+  {
+    type: 'cascader',
+    dataIndex: 'planTypeCode',
+    label: '鎵�灞炴満鏋�',
+    placeholder: '璇烽�夋嫨',
+    options: [],
+    optionsConfig: {
+      url: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/select/tree_fin_tenant'
+    }
+  },
+  {
+    type: 'select',
+    dataIndex: 'status',
+    label: '鐘舵��',
+    placeholder: '璇烽�夋嫨',
+    defaultValue: '1',
+    options: [
+      {
+        label: '鍚敤',
+        value: '1'
+      },
+      {
+        label: '绂佺敤',
+        value: '0'
+      }
+    ]
+  }
+]
diff --git a/project-web/src/views/projectManage/audit/audit.vue b/project-web/src/views/projectManage/audit/audit.vue
new file mode 100644
index 0000000..1a05b2a
--- /dev/null
+++ b/project-web/src/views/projectManage/audit/audit.vue
@@ -0,0 +1,80 @@
+<template>
+  <win-sm :title="setting.title" @close="close">
+    <el-form ref="ruleForm" :model="formData" :rules="rules" class="demo-ruleForm" label-width="100px">
+      <el-form-item label="瀹℃牳缁撴灉" prop="auditStatus">
+        <el-radio-group v-model="formData.auditStatus">
+          <el-radio :label="2" border>閫氳繃</el-radio>
+          <el-radio :label="1" border>涓嶉�氳繃</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="auditReason">
+        <el-input
+          v-model="formData.auditReason"
+          type="textarea"
+          :rows="3"
+          maxlength="200"
+          show-word-limit
+        />
+      </el-form-item>
+    </el-form>
+    <div slot="footer" align="center" class="dialog-footer">
+      <my-button name="鍙栨秷" site="form" @click="close"/>
+      <my-button name="鎻愪氦" site="form" @click="save"/>
+    </div>
+  </win-sm>
+</template>
+
+<script>
+import winSm from '@/components/win/win-sm'
+import myButton from '@/components/myButton/myButton'
+import * as audit from '@/api/projectManage/audit'
+export default {
+  name: 'edit',
+  components: { winSm, myButton },
+  props: {
+    setting: {
+      type: Object,
+      default: () => {
+      }
+    }
+  },
+  data() {
+    return {
+      formData: {
+        id: null,
+        sourceStatus: null,
+        auditStatus: 2,
+        auditReason: '',
+      },
+      rules: {
+        auditStatus: [
+          {required: true, message: '璇烽�夋嫨瀹℃牳缁撴灉', trigger: 'change'}
+        ],
+      }
+    }
+  },
+  created() {
+    this.formData.id = this.setting.id
+    this.formData.sourceStatus = this.setting.sourceStatus
+  },
+  methods: {
+    close() {
+      this.$emit('close')
+    },
+    save() {
+      this.$refs.ruleForm.validate((valid) => {
+        if (valid) {
+          const params = this.formData
+          audit.auditUpd(params).then(res=>{
+            this.$message.success('鎻愪氦鎴愬姛')
+            this.close()
+            this.$emit('search')
+          })
+        } else {
+          this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��')
+        }
+      })
+    }
+  }
+}
+</script>
diff --git a/project-web/src/views/projectManage/audit/chooseUser.vue b/project-web/src/views/projectManage/audit/chooseUser.vue
new file mode 100644
index 0000000..319df26
--- /dev/null
+++ b/project-web/src/views/projectManage/audit/chooseUser.vue
@@ -0,0 +1,157 @@
+<template>
+  <div>
+    <win-md :title="'椤圭洰鎴愬憳'" @close="close">
+      <table class="myTable" bordercolor="#E5E6ED" border="1" cellpadding="0" cellspacing="0">
+        <tr v-for="(org,i) in dataList" :key="i">
+          <td class="bg-f6f">
+            <el-checkbox @change="checkAllChange($event,i)" v-model="org.checked">{{ org.orgName }}</el-checkbox>
+          </td>
+          <td>
+            <div v-if="org.userList.length>0">
+              <el-checkbox-group v-model="org.checkUsers" @change="checkedUsersChange(i)">
+                <el-checkbox v-for="(r,rIndex) in org.userList" :label="JSON.stringify(r)" :key="r.id">{{r.userName}}</el-checkbox>
+              </el-checkbox-group>
+            </div>
+          </td>
+        </tr>
+      </table>
+      <el-form ref="form" :model="formData" :rules="rules" label-width="80px" v-if="manageList.length>0" style="margin-top: 15px">
+        <el-form-item label="椤圭洰缁忕悊" prop="managerId">
+          <el-select v-model="formData.managerId" placeholder="璇烽�夋嫨椤圭洰缁忕悊">
+            <el-option v-for="user in manageList" :label="user.userName" :value="user.id"></el-option>
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" align="center" class="dialog-footer">
+        <my-button name="鍙栨秷" site="form" @click="close"/>
+        <my-button name="淇濆瓨" site="form" @click="save"/>
+      </div>
+    </win-md>
+  </div>
+</template>
+
+<script>
+import winMd from '@/components/win/win-md'
+import myButton from '@/components/myButton/myButton'
+import * as finsystenant from '@/api/baseSetting/finsystenant'
+export default {
+  name: "chooseUser",
+  components: { winMd, myButton },
+  props: {
+    orgId: {
+      type: String,
+      default: ''
+    },
+    // 琚�変腑鐨勯」鐩粡鐞唅d
+    projectManager: {
+      type: String,
+      default: ''
+    },
+    // 琚�変腑鐨勪汉鍛榠d
+    checkIds: {
+      type: Array,
+      default: []
+    },
+  },
+  computed:{
+    manageList(){
+      let arr = []
+      this.dataList.map((c,j)=>{
+        c.checkUsers.map((x,i)=>{
+          arr.push(JSON.parse(x))
+        })
+      })
+      return arr
+    }
+  },
+  data() {
+    return {
+      formData:{
+        managerId:'' // 椤圭洰缁忕悊id
+      },
+      dataList:[],
+      rules: {
+        managerId: [
+          {required: true, message: '璇烽�夋嫨椤圭洰缁忕悊', trigger: 'change'}
+        ],
+      }
+    }
+  },
+  created() {
+    if(this.projectManager){
+      this.formData.managerId = this.projectManager
+    }
+    this.getTableInfo(this.orgId)
+  },
+  methods:{
+    // 鑾峰彇浜哄憳
+    getTableInfo(orgId){
+      finsystenant.getUserByOrgId({orgId: orgId}).then(res => {
+        if (res) {
+          res.map(i=>{
+            i.checkUsers = []
+            i.checked = false
+          })
+          if(this.checkIds.length>0 ){
+            res.map((c,j)=>{
+              c.checkUsers = this.checkIds[j]
+              c.checked = this.checkIds[j].length===c.userList.length
+            })
+          }
+          this.dataList = res.reverse()
+        }
+      })
+    },
+    // 宸︿晶鍏ㄩ��
+    checkAllChange(val,index){
+      this.dataList[index].checkUsers = []
+      if(val){
+        this.dataList[index].userList.map(x=>{
+          this.dataList[index].checkUsers.push(JSON.stringify(x))
+        })
+      }
+    },
+    // 鍙充晶閫夋嫨鍗曠嫭椤�
+    checkedUsersChange(index){
+      let val = this.dataList[index].checkUsers.length===this.dataList[index].userList.length
+        this.$set(this.dataList[index],'checked',val)
+        this.$forceUpdate()
+    },
+    // 淇濆瓨鎴愬憳
+    save(){
+      if(!this.manageList.length > 0){
+        this.$message.error('璇烽�夋嫨椤圭洰鎴愬憳')
+        return
+      }
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          let params = Object.assign({},this.formData)
+          params.checkUsers = []
+          this.dataList.map(x=>{
+            params.checkUsers.push(x.checkUsers)
+          })
+          this.$emit('save',params)
+          this.close()
+        }
+      })
+    },
+    close(){
+      this.$emit('close')
+    }
+  }
+}
+</script>
+
+<style scoped>
+.myTable {
+  width: 100%;
+}
+.bg-f6f {
+  background-color: #F6F8FC;
+}
+.myTable td, .myTable th {
+  min-width: 100px;
+  padding: 15px 10px;
+  font-size: 14px;
+}
+</style>
diff --git a/project-web/src/views/projectManage/audit/detail.vue b/project-web/src/views/projectManage/audit/detail.vue
new file mode 100644
index 0000000..1ea2e19
--- /dev/null
+++ b/project-web/src/views/projectManage/audit/detail.vue
@@ -0,0 +1,362 @@
+<template>
+  <win2 :title="setting.title" @close="close">
+    <div class="app-container" v-loading="loading">
+      <el-row :gutter="15">
+        <el-col :span="7">
+          <el-card shadow="never" class="com-box">
+            <div>
+              <div class="f-r">
+                <div class="img-box f-r f-r-center">
+                  <img src="@/assets/images/project/icon-gj-lv.png" alt="" class="type-img"/>
+                </div>
+                <div>
+                  <div class="font-18 font-bold color-333">{{info.projectName}}</div>
+                  <el-progress :percentage="info.progressRate" style="width: 100%;margin-top: 5px"
+                               :show-text="false"></el-progress>
+                  <div class="m-t-10 f-r f-r-between">
+                    <el-tag :type="getStatusText(info.status).type">{{ getStatusText(info.status).text }}</el-tag>
+                    <div class="font-13 color-999">
+                      褰撳墠杩涘害
+                      <span class="color-red">{{ info.progressRate }}%</span>
+                    </div>
+                  </div>
+                </div>
+              </div>
+              <div class="cont-box">
+                <div class="font-14 color-666">涓昏寤鸿鍐呭</div>
+                <div class="font-14 color-333 m-t-5 line-24">
+                  {{info.detail}}
+                </div>
+              </div>
+              <div class="e-p-v-15">
+                <el-form label-width="80px" label-position="left">
+                  <el-form-item label="寤鸿鍦板潃">
+                    <div class="font-14 color-333 line-24">{{info.addr}}</div>
+                  </el-form-item>
+                  <el-form-item label="椤圭洰缂栧彿">
+                    <div class="font-14 color-333 line-24">{{info.projectCode}}</div>
+                  </el-form-item>
+                  <el-form-item label="椤圭洰鍒嗙被">
+                    <div class="font-14 color-333 line-24" style="color: #235686">{{info.projectCategoryName}}</div>
+                  </el-form-item>
+                  <el-form-item label="寤鸿鍗曚綅">
+                    <div class="font-14 color-333 line-24">{{info.buildOrgName}}</div>
+                  </el-form-item>
+                  <el-form-item label="椤圭洰缁忕悊">
+                    <div class="font-14 color-333 line-24">{{info.projectManager}}</div>
+                  </el-form-item>
+                  <el-form-item label="璧锋骞撮檺">
+                    <div class="font-14 color-333 line-24">{{info.buildYearStart}}-{{info.buildYearEnd}}</div>
+                  </el-form-item>
+                  <el-form-item label="椤圭洰鎵规">
+                    <div class="font-14 color-333 line-24">{{info.projectBatchName}}</div>
+                  </el-form-item>
+                  <el-form-item label="鎵瑰鏃堕棿">
+                    <div class="font-14 color-333 line-24">{{info.approvalDate}}</div>
+                  </el-form-item>
+                  <el-form-item label="鍒涘缓鏃堕棿">
+                    <div class="font-14 color-333 line-24">{{info.createTime}}</div>
+                  </el-form-item>
+                  <el-form-item label="鎶曡祫涓撲笟">
+                    <div class="font-14 color-333 line-24">{{info.investMajorName}}</div>
+                  </el-form-item>
+                  <el-form-item label="椤圭洰鎶曡祫">
+                    <div class="font-14 color-333 line-24">鎬昏祫浜{info.totalInvest}}涓囧厓 / 宸蹭笅杈�<span class="color-red">{{info.totalReleaseInvest}}</span>涓囧厓</div>
+                    <div v-for="(item, i) in info.pReleaseInvestInfoList"
+                         :key="item.id"
+                         class="font-14 color-333 line-24">
+                      绗瑊{i + 1}}娆′笅杈�<span class="color-red">{{item.releaseInvest}}</span>涓囧厓
+                    </div>
+                  </el-form-item>
+                </el-form>
+              </div>
+            </div>
+          </el-card>
+        </el-col>
+        <el-col :span="14" class="com-box">
+          <el-card shadow="never">
+            <div class="font-18 color-333 font-bold m-b-15">鑺傜偣杩涘害</div>
+            <div class="f-r f-r-between f-r-top">
+              <!--宸︿晶-->
+              <div class="com-c-box">
+                <div v-for="(c,j) in projectStage" :key="j" class="jd-item" :class="{'jd-active':c.pstageId===curId}" @click="changeJd(c,j)">
+                  {{ c.pstageName }}
+                </div>
+              </div>
+              <!--鍙充晶-->
+              <div class="f-1 node-list com-c-box">
+                <el-timeline>
+                  <el-timeline-item
+                    v-for="(node, index) in nodeList"
+                    :key="index"
+                    icon="el-icon-check"
+                    type="success"
+                    size="large"
+                    :hide-timestamp="false">
+                    <div class="node-item f-r f-r-between">
+                      <div>
+                        <div class="font-16 color-333">{{ node.nodeName }}</div>
+                        <div class="m-t-5 font-14 color-333">{{ formatterDate(node.nodeStart) }}鑷硔{ formatterDate(node.nodeEnd) }}</div>
+                      </div>
+                      <div>
+<!--                        <div class="font-12 color-999">{{ node.nodeCompleteDate }}</div>-->
+<!--                        <el-button type="primary" size="mini" class="m-t-5 float-right" @click="lookNode(node.nodeId)">鏌ョ湅</el-button>-->
+                      </div>
+                    </div>
+                  </el-timeline-item>
+                </el-timeline>
+              </div>
+            </div>
+          </el-card>
+        </el-col>
+      </el-row>
+    </div>
+  </win2>
+</template>
+
+<script>
+import win2 from '@/components/win2/index'
+import {getDownUrl} from '@/utils/base';
+import * as info from '@/api/projectManage/info'
+import * as DateFormatter from '@/utils/DateFormatter';
+export default {
+  name: "detail",
+  components: {win2},
+  props: {
+    setting: {
+      type: Object,
+      default: () => {
+      }
+    }
+  },
+  data() {
+    return {
+      info: {},
+      projectStage: [], // 鑺傜偣鍒楄〃
+      curId: null, // 褰撳墠閫変腑闃舵id
+      nodeId: null, // 褰撳墠閫変腑鑺傜偣id
+      nodeList: [],
+      loading:false
+    }
+  },
+  created() {
+    if (this.setting.id) {
+      this.getInfo(this.setting.id)
+    }
+  },
+  methods: {
+    formatterDate(time){
+      return DateFormatter.LongToDate(time)
+    },
+    getInfo(id) {
+      this.loading = true
+      info.getInfo({id: id}).then(res => {
+        if (res) {
+          this.info = res
+          this.info.approvalDate = DateFormatter.LongToDate(this.info.approvalDate)
+          this.info.createTime = DateFormatter.LongToDateTime(this.info.createTime)
+          this.projectStage = res.pTempStageResults
+          if(this.projectStage && this.projectStage.length>0){
+            this.curId = this.projectStage[0].pstageId
+            this.nodeList = this.projectStage[0].pStageNodeResults
+          }
+          this.loading = false
+        }
+      })
+    },
+    // 鏌ョ湅鑺傜偣杩涘害
+    lookNode(nodeId){
+      this.nodeId = nodeId
+      this.nodeShow = true
+    },
+    // 鍒囨崲鑺傜偣
+    changeJd(c,index){
+      this.curId = c.pstageId
+      this.nodeList = this.projectStage[index].pStageNodeResults
+      this.$forceUpdate()
+    },
+    getStatusText(state) {
+      // 0 鏈紑宸� 1 杩涜涓� 2 宸插畬鎴� 3 宸插彇娑� 4 宸插欢鏈�
+      let obj = {
+        text: '',
+        type: 'success'
+      }
+      switch (state) {
+        case 0:
+          obj.text = '鏈紑宸�'
+          obj.type = 'info'
+          break
+        case 1:
+          obj.text = '杩涜涓�'
+          obj.type = 'primary'
+          break
+        case 2:
+          obj.text = '宸插畬鎴�'
+          obj.type = 'success'
+          break
+        case 3:
+          obj.text = '宸插彇娑�'
+          obj.type = 'warning'
+          break
+        case 4:
+          obj.text = '宸插欢鏈�'
+          obj.type = 'danger'
+          break
+      }
+      return obj
+    },
+    close() {
+      this.$emit('close')
+    }
+  },
+}
+</script>
+
+<style scoped>
+.com-box {
+  overflow-y: auto;
+  max-height: calc(100vh - 256px);
+}
+
+.com-c-box {
+  overflow-y: auto;
+  max-height: calc(100vh - 310px);
+}
+
+.com-c-box::-webkit-scrollbar {
+  display: none;
+}
+
+.com-box::-webkit-scrollbar {
+  width: 4px;
+}
+
+.com-box::-webkit-scrollbar-thumb {
+  box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
+}
+
+.m-t-10 {
+  margin-top: 10px;
+}
+
+.m-t-5 {
+  margin-top: 5px;
+}
+
+.m-b-15 {
+  margin-bottom: 15px;
+}
+
+.img-box {
+  min-width: 56px;
+  max-width: 56px;
+  height: 56px;
+  border-radius: 4px;
+  border: 1px solid #eeeeee;
+  margin-right: 5px;
+}
+
+.type-img {
+  width: 38px;
+  height: 38px;
+}
+
+.cont-box {
+  padding: 15px 0;
+  border-bottom: 1px solid #f5f5f5;
+}
+
+.line-24 {
+  line-height: 24px;
+}
+
+>>> .el-form-item__label {
+  line-height: 24px;
+}
+
+>>> .el-form-item {
+  margin-bottom: 10px;
+}
+
+.e-p-v-15 {
+  padding: 15px 0;
+}
+
+.jd-item {
+  width: 150px;
+  height: 45px;
+  line-height: 45px;
+  text-align: center;
+  border-radius: 4px;
+  font-size: 16px;
+  border: 1px solid #e6e6e6;
+  cursor: pointer;
+  margin-bottom: 15px;
+}
+
+.jd-item:hover {
+  color: #FFFFFF;
+  background-color: #0d997c;
+}
+
+.jd-active {
+  color: #FFFFFF;
+  background-color: #0d997c;
+}
+
+.node-list {
+  padding-left: 25px;
+}
+
+.node-item {
+  padding-top: 5px;
+}
+
+.float-right {
+  float: right;
+}
+
+.color-0D9 {
+  color: #0D997C;
+}
+
+.info-item {
+  padding-top: 5px;
+}
+
+.info-box {
+  padding: 8px;
+  border-radius: 4px;
+  background: #f8faf9;
+}
+
+.info-img {
+  width: 92px;
+  height: 92px;
+  border-radius: 4px;
+  margin-right: 10px;
+}
+
+.file-item {
+  padding: 10px 0;
+}
+.file-icon{
+  width: 16px;
+  height: 16px;
+  margin-right: 5px;
+}
+.file-name{
+  font-size: 14px;
+  color: #333333;
+}
+.file-name:hover{
+  cursor: pointer;
+  color: #0d997c;
+}
+.down-enter{
+  cursor: pointer;
+  color: #1890ff;
+  font-size: 14px;
+  text-decoration: underline;
+}
+</style>
diff --git a/project-web/src/views/projectManage/audit/edit.vue b/project-web/src/views/projectManage/audit/edit.vue
new file mode 100644
index 0000000..9a846ec
--- /dev/null
+++ b/project-web/src/views/projectManage/audit/edit.vue
@@ -0,0 +1,393 @@
+<template>
+  <win-sm :title="setting.title" @close="close">
+    <el-form ref="dataForm" :model="formData" :rules="rules" class="demo-ruleForm" label-width="110px">
+      <el-form-item label="椤圭洰鍒嗙被" prop="projectCategoryId">
+        <el-cascader
+          :options="categoryOptions"
+          :show-all-levels="false"
+          :props="{ value: 'id',label:'label' }"
+          v-model="formData.projectCategoryId"
+          style="width: 100%"></el-cascader>
+      </el-form-item>
+      <el-form-item label="璁″垝绫诲瀷" prop="planTypeCode">
+        <el-cascader
+          :options="planTypeOptions"
+          :show-all-levels="false"
+          :props="{ value: 'dict_code',label:'dict_label' }"
+          v-model="formData.planTypeCode"
+          @change="getTemp()"
+          style="width: 100%"></el-cascader>
+      </el-form-item>
+      <el-form-item label="璁″垝妯℃澘" prop="tempProjectId">
+        <el-select v-model="formData.tempProjectId" placeholder="" style="width: 100%">
+          <el-option
+            v-for="item in tempOptions"
+            :key="item.id"
+            :label="item.projectName"
+            :value="item.id">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="椤圭洰鍚嶇О" prop="projectName">
+        <el-input v-model="formData.projectName" maxlength="50"></el-input>
+      </el-form-item>
+      <el-form-item label="椤圭洰缂栧彿" prop="projectCode">
+        <el-input v-model="formData.projectCode"></el-input>
+      </el-form-item>
+      <el-form-item label="鐩磋惀鍗曚綅" prop="directUnitCode">
+        <el-cascader
+          :options="orgZsOptions"
+          :props="{ value: 'dict_code',label:'dict_label' }"
+          v-model="formData.directUnitCode"
+          style="width: 100%"></el-cascader>
+      </el-form-item>
+      <el-form-item label="寤鸿鍗曚綅" prop="buildOrgId">
+        <el-cascader
+          :options="buildOrgOptions"
+          :props="{ value: 'id',label:'label', checkStrictly: true }"
+          v-model="formData.buildOrgId"
+          style="width: 100%"
+         @change="changeBuildOrg"></el-cascader>
+      </el-form-item>
+      <el-form-item label="椤圭洰鎴愬憳" prop="projectUsersName">
+        <div style="position: relative;">
+          <div @click="chooseUsers" class="mask-div"></div>
+          <el-input v-model="formData.projectUsersName" readonly></el-input>
+        </div>
+      </el-form-item>
+      <el-form-item label="椤圭洰鍦板潃" prop="addr">
+        <div class="f-r">
+          <el-input v-model="formData.addr"></el-input>
+          <el-button size="small" type="primary" style="margin-left: 15px">鍧愭爣鎷惧彇</el-button>
+        </div>
+      </el-form-item>
+      <div class="f-r f-r-between">
+        <el-form-item label="寤鸿璧锋骞撮檺" prop="buildYearStart" style="width: 49%">
+          <el-input v-model="formData.buildYearStart" type="number">
+            <template slot="append">骞�</template>
+          </el-input>
+        </el-form-item>
+        <div class="font-14 color-333 pos-year">鑷�</div>
+        <el-form-item label="" prop="buildYearEnd" style="width: 49%">
+          <el-input v-model="formData.buildYearEnd" type="number">
+            <template slot="append">骞�</template>
+          </el-input>
+        </el-form-item>
+      </div>
+      <el-form-item label="椤圭洰鎵规" prop="projectBatchCode">
+        <el-select v-model="formData.projectBatchCode" placeholder="" style="width: 100%">
+          <el-option
+            v-for="item in batchOptions"
+            :label="item.dict_label"
+            :value="item.dict_code">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鎵瑰鏃堕棿" prop="approvalDate">
+        <el-date-picker
+          v-model="formData.approvalDate"
+          type="date"
+          placeholder=""
+          value-format="yyyy-MM-dd"
+          format="yyyy-MM-dd"
+          style="width: 100%">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="鎬绘姇璧�" prop="totalInvest">
+        <el-input v-model="formData.totalInvest" type="number" >
+          <template slot="append">涓囧厓</template>
+        </el-input>
+      </el-form-item>
+      <el-form-item label="宸蹭笅杈炬姇璧�" prop="totalReleaseInvest">
+        <el-input v-model="formData.totalReleaseInvest" type="number">
+          <template slot="append">涓囧厓</template>
+        </el-input>
+      </el-form-item>
+      <el-form-item label="鎶曡祫涓撲笟" prop="investMajorCode">
+        <el-select v-model="formData.investMajorCode" placeholder="" style="width: 100%">
+          <el-option
+            v-for="item in investOptions"
+            :key="item.dict_code"
+            :label="item.dict_label"
+            :value="item.dict_code">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="涓昏寤鸿鍐呭" prop="detail">
+        <el-input
+          v-model="formData.detail"
+          type="textarea"
+          :rows="2"
+          maxlength="120"
+          show-word-limit
+        />
+      </el-form-item>
+    </el-form>
+    <div slot="footer" align="center" class="dialog-footer">
+      <my-button name="鍙栨秷" site="form" @click="close"/>
+      <my-button name="鎻愪氦" site="form" @click="save"/>
+    </div>
+    <chooseUser v-if="userShow" :projectManager="projectManager" :checkIds="checkIds" :orgId="tarOrgId" @close="userShow=false" @save="getUsers"></chooseUser>
+  </win-sm>
+</template>
+
+<script>
+import winSm from '@/components/win/win-sm'
+import myButton from '@/components/myButton/myButton'
+import * as system from '@/api/system/dict/data'
+import * as buildPlan from "@/api/projectConfig/buildPlan";
+import * as finsystenant from '@/api/baseSetting/finsystenant'
+import * as DateFormatter from '@/utils/DateFormatter';
+import * as info from '@/api/projectManage/info'
+import chooseUser from './chooseUser'
+import * as classify from "@/api/projectManage/classify";
+export default {
+  name: 'edit',
+  components: { winSm, myButton,chooseUser },
+  props: {
+    setting: {
+      type: Object,
+      default: () => {
+      }
+    }
+  },
+  data() {
+    return {
+      tarOrgId: '', // 閫夋嫨鐨勬満鏋処D
+      planTypeOptions: [], // 妯℃澘鍒嗙被
+      categoryOptions:[], // 椤圭洰鍒嗙被
+      tempOptions:[], // 椤圭洰妯℃澘
+      orgZsOptions:[], // 鐩磋惀鍗曚綅
+      buildOrgOptions:[], // 寤鸿鍗曚綅
+      batchOptions:[], // 椤圭洰鎵规
+      investOptions:[], // 鎶曡祫涓撲笟
+      formData: {
+        projectCategoryId: '',
+        planTypeCode: '',
+        tempProjectId: '',
+        projectName: '',
+        projectCode: '',
+        directUnitCode: '',
+        buildOrgId:'',
+        projectUsersName:'',
+        projectUsersIds:'',
+        addr:'',
+        buildYearStart:'',
+        buildYearEnd:'',
+        projectBatchCode:'',
+        approvalDate:'',
+        totalInvest:'',
+        totalReleaseInvest:'',
+        investMajorCode:'',
+        detail:'',
+      },
+      rules: {
+        projectCategoryId: [
+          {required: true, message: '璇烽�夋嫨椤圭洰鍒嗙被', trigger: 'change'}
+        ],
+        planTypeCode: [
+          {required: true, message: '璇烽�夋嫨璁″垝绫诲瀷', trigger: 'change'}
+        ],
+        tempProjectId: [
+          {required: true, message: '璇烽�夎鍒掓ā鏉�', trigger: 'change'}
+        ],
+        projectName: [
+          {required: true, message: '璇疯緭鍏ラ」鐩悕绉�', trigger: 'blur'}
+        ],
+        projectCode: [
+          {required: true, message: '璇疯緭鍏ラ」鐩紪鍙�', trigger: 'blur'}
+        ],
+        directUnitCode: [
+          {required: true, message: '璇烽�夋嫨鐩磋惀鍗曚綅', trigger: 'change'}
+        ],
+        buildOrgId: [
+          {required: true, message: '璇烽�夋嫨寤鸿鍗曚綅', trigger: 'change'}
+        ],
+        projectUsersIds: [
+          {required: true, message: '璇烽�夋嫨椤圭洰浜哄憳', trigger: 'change'}
+        ],
+        addr: [
+          {required: true, message: '璇烽�夋嫨椤圭洰鍦板潃', trigger: 'change'}
+        ],
+        buildYearStart: [
+          {required: true, message: '璇疯緭鍏ュ紑濮嬫椂闂�', trigger: 'blur'}
+        ],
+        buildYearEnd: [
+          {required: true, message: '璇疯緭鍏ョ粨鏉熸椂闂�', trigger: 'blur'}
+        ],
+        projectBatchCode: [
+          {required: true, message: '璇烽�夋嫨椤圭洰鎵规', trigger: 'change'}
+        ],
+        approvalDate: [
+          {required: true, message: '璇烽�夋嫨鎵瑰鏃堕棿', trigger: 'change'}
+        ],
+        totalInvest: [
+          {required: true, message: '璇疯緭鍏ユ�绘姇璧勯噾棰�', trigger: 'blur'}
+        ],
+        totalReleaseInvest: [
+          {required: true, message: '璇疯緭鍏ュ凡涓嬭揪鎶曡祫閲戦', trigger: 'blur'}
+        ],
+        investMajorCode: [
+          {required: true, message: '璇烽�夋嫨鎶曡祫涓撲笟', trigger: 'change'}
+        ]
+
+      },
+      userShow:false,
+      checkIds:[], // 琚�変腑鐨勪汉鍛樺悕鍗� 闇�瑕侀亶鍘嗭紝鏄釜鏁扮粍
+      projectManager:'', // 琚�変腑鐨勯」鐩粡鐞唅d
+    }
+  },
+  created() {
+    this.getProjectType() // 鑾峰彇妯℃澘鍒嗙被
+    this.getProjectClass() // 鑾峰彇椤圭洰鍒嗙被
+    this.getProjectBatch() // 鑾峰彇椤圭洰鎵规
+    this.getProjectInvest() // 鑾峰彇鎶曢�掍笓涓�
+    this.getProjectDirect() // 鑾峰彇鐩磋惀鍗曚綅
+    this.getOrg() // 鑾峰彇寤鸿鍗曚綅
+  },
+  methods: {
+    // 閫夋嫨椤圭洰鎴愬憳
+    chooseUsers(){
+      if (this.formData.buildOrgId) {
+        this.tarOrgId = this.formData.buildOrgId[this.formData.buildOrgId.length - 1].toString()
+        this.userShow = true
+      } else {
+        this.userShow = false
+        this.$message.warning('璇峰厛閫夋嫨寤鸿鍗曚綅锛�')
+      }
+    },
+    // 鑾峰彇閫夋嫨鐨勬垚鍛�
+    getUsers(info){
+      let userNames = []
+      let userIds = []
+      info.checkUsers.map(x=>{
+        x.map(j=>{
+          let item = JSON.parse(j)
+          userNames.push(item.userName)
+          userIds.push(item.id)
+        })
+      })
+      this.formData.projectUsersIds = userIds.join(',')
+      this.formData.projectUsersName = userNames.join(',')
+      this.checkIds = info.checkUsers
+      this.projectManager = info.managerId
+    },
+    // 鑾峰彇寤鸿鍗曚綅
+    getOrg() {
+      finsystenant.getTree().then(res => {
+        if (res) {
+          this.buildOrgOptions = res
+        } else {
+          this.buildOrgOptions = []
+        }
+        this.$forceUpdate()
+      })
+    },
+    // 淇敼寤鸿鍗曚綅 娓呯┖ 椤圭洰浜哄憳
+    changeBuildOrg(){
+      this.formData.projectUsersIds = ''
+      this.formData.projectUsersName = ''
+      this.checkIds = []
+      this.projectManager = ''
+    },
+    close() {
+      this.$emit('close')
+    },
+    getProjectType () {
+      buildPlan.getPlanType().then(res => {
+        if (res) {
+          this.planTypeOptions = res
+        } else {
+          this.planTypeOptions = []
+        }
+        this.$forceUpdate()
+      })
+    },
+    // 鑾峰彇璁″垝妯℃澘
+    getTemp() {
+      if (this.formData.planTypeCode) {
+        buildPlan.getList({planTypeCode: this.formData.planTypeCode, status: 1}).then(res => {
+          if (res) {
+            this.tempOptions = res
+          } else {
+            this.tempOptions = []
+          }
+        })
+      } else {
+        this.tempOptions = []
+      }
+      this.$forceUpdate()
+    },
+    // 鑾峰彇椤圭洰鍒嗙被
+    getProjectClass(){
+      classify.classifyTree().then(res => {
+        const content = res || []
+        this.categoryOptions = content
+      })
+    },
+    // 鑾峰彇椤圭洰鎵规
+    getProjectBatch(){
+      system.getDicts('project_batch').then(res=>{
+        this.batchOptions = res
+      })
+    },
+    // 鑾峰彇鎶曢�掍笓涓�
+    getProjectInvest(){
+      system.getDicts('INVEST_MAJOR').then(res=>{
+        this.investOptions = res
+      })
+    },
+    // 鑾峰彇鐩磋惀鍗曚綅
+    getProjectDirect(){
+      system.getDicts('DIRECT_UNIT').then(res=>{
+        this.orgZsOptions = res
+      })
+    },
+    save() {
+      this.$refs.dataForm.validate((valid) => {
+        if (valid) {
+          const params = this.formData
+          if (params.buildOrgId.length > 0) {
+            params.buildOrgId = this.formData.buildOrgId[this.formData.buildOrgId.length - 1].toString()
+          }
+          if (params.planTypeCode.length > 0) {
+            params.planTypeCode = this.formData.planTypeCode[this.formData.planTypeCode.length - 1].toString()
+          }
+          if (params.projectCategoryId.length > 0) {
+            params.projectCategoryId = this.formData.projectCategoryId[this.formData.projectCategoryId.length - 1].toString()
+          }
+          if (params.directUnitCode.length > 0) {
+            params.directUnitCode = this.formData.directUnitCode[this.formData.directUnitCode.length - 1].toString()
+          }
+          if (params.approvalDate) {
+            params.approvalDate = DateFormatter.DateToLong(params.approvalDate)
+          }
+          params.projectManager = this.projectManager
+          info.add(params).then(res=>{
+            this.$message.success('鎻愪氦鎴愬姛')
+            this.close()
+            this.$emit('search')
+          })
+        } else {
+          this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��')
+        }
+      })
+    }
+  }
+}
+</script>
+<style scoped lang="scss">
+.pos-year{
+  margin-bottom: 18px;
+  position: relative;
+  left:55px;
+}
+.mask-div{
+  position: absolute;
+  top:0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  z-index: 10;
+}
+</style>
diff --git a/project-web/src/views/projectManage/audit/index.vue b/project-web/src/views/projectManage/audit/index.vue
new file mode 100644
index 0000000..cdce267
--- /dev/null
+++ b/project-web/src/views/projectManage/audit/index.vue
@@ -0,0 +1,229 @@
+<template>
+  <div class="app-container">
+    <el-card class="box-card" style="width: 100%;margin-top: 15px" shadow="never">
+      <!--鎼滅储鏉′欢-->
+      <div class="filter-container">
+        <my-search ref="searchBar" :items="items" @search="fifterForm"></my-search>
+      </div>
+      <el-row style="margin-top: 8px">
+        <el-col>
+          <!--鍒楄〃-->
+          <my-table ref="myTable" :filter="filterFrom" :table="table"/>
+        </el-col>
+      </el-row>
+    </el-card>
+    <!-- 瀹℃牳-->
+    <audit v-if="auditShow" :setting="setting" @close="auditShow=false" @search="search"/>
+    <!-- 鏂板-->
+    <edit v-if="editShow" :setting="setting" @close="editShow=false" @search="search"/>
+    <!-- 璇︽儏 -->
+    <detail v-if="detailShow" :setting="setting" @close="detailShow=false"></detail>
+  </div>
+</template>
+
+<script>
+import MyTable from "@/components/myTable/myTable";
+import SettingIplatform from '@/utils/settingIplatform';
+import detail from  '@/views/projectManage/audit/detail'
+import * as DateFormatter from '@/utils/DateFormatter';
+import items from './items'
+import audit from './audit'
+import edit from './edit'
+export default {
+  name: "index",
+  components: { MyTable,audit, edit,detail },
+  data() {
+    return {
+      // 鎼滅储妗�
+      items: items,
+      // 鎼滅储鏉′欢
+      filterFrom: {
+        projectName: null,  // 椤圭洰鎬绘暟
+        projectCode: null, // 椤圭洰缂栧彿
+        projectCategoryId: null, // 鍒嗙被
+        buildOrgId: null, // 寤鸿鍗曚綅
+        auditStatus: null, // 鐘舵��  0鏈鏍� 1涓嶉�氳繃 2閫氳繃
+        sourceStatus: null, // 绫诲瀷  0褰掓。 1鏂板
+        approvalDate: null, // 鎵瑰鏃堕棿
+        createTime: null // 鍒涘缓鏃堕棿
+      },
+      auditShow:false,
+      editShow:false,
+      detailShow:false,
+      setting:{
+        id:null,
+        title:'瀹℃牳'
+      },
+      // 琛ㄦ牸鏁版嵁
+      table: {
+        showIndex: true, // 鏄惁鏄剧ず搴忓彿
+        expand: false, // 鏄惁鏄剧ず璇︽儏鏁版嵁
+        url: SettingIplatform.apiBaseURL + '/pc/p/project/info/audit/list', // 璇锋眰鍦板潃
+        // 宸ュ叿鏉�
+        tools: {
+          columnsCtrl: {// 鍒楁帶鍒舵寜閽�
+            show: false
+          },
+          generalExport: {// 閫氱敤瀵煎嚭鎸夐挳
+            show: false
+          },
+          // 鑷畾涔夊伐鍏锋潯鎸夐挳
+          custom: [
+            {
+              name: '鏂板',
+              click: () => {
+                this.showAdd(null)
+              }
+            },
+            {
+              name: '椤圭洰瀵煎叆',
+              click: () => {
+
+              }
+            },
+            {
+              name: '瀵煎叆璁板綍',
+              click: () => {
+
+              }
+            }
+          ]
+        },
+        // 鍒椾俊鎭�
+        columns: [
+          {title: '椤圭洰鍚嶇О', field: 'projectName', align: 'left', width: '240px'},
+          {title: '缂栧彿', field: 'projectCode', align: 'center', width: '180px'},
+          {title: '鍒嗙被', field: 'projectCategoryName', align: 'center', width: '150px'},
+          {title: '寤鸿鍗曚綅', field: 'buildOrgName', align: 'center', width: '200px'},
+          {title: '鎵瑰鏃堕棿', field: 'approvalDate', align: 'center', width: '180px',
+            formatter: row => {
+              return { value: DateFormatter.LongToDate(row.approvalDate) }
+            }
+          },
+          {title: '鍒涘缓鏃堕棿', field: 'createTime', align: 'center', width: '180px',
+            formatter: row => {
+              return { value: DateFormatter.LongToDateTime(row.createTime) }
+            }
+          },
+          {
+            title: '绫诲瀷', field: 'sourceStatus', align: 'center', width: '120px',
+            formatter: row => {
+              return {value: row.sourceStatus == 0 ? '褰掓。' : '鏂板'}
+            }
+          },
+          {
+            title: '鐘舵��', field: 'auditStatus', align: 'center', width: '120px',
+            formatter: row => {
+              let value = ''
+              if (row.sourceStatus == 0) {
+                // 褰掓。
+                if (row.archiveStatus == 0) {
+                  value = '鏈鏍�'
+                } else if (row.archiveStatus == 1) {
+                  value = '涓嶉�氳繃'
+                } else if (row.archiveStatus == 2) {
+                  value = '閫氳繃'
+                } else {
+                  value = ''
+                }
+              }
+              if (row.sourceStatus == 1) {
+                // 鏂板
+                if (row.auditStatus == 0) {
+                  value = '鏈鏍�'
+                } else if (row.auditStatus == 1) {
+                  value = '涓嶉�氳繃'
+                } else if (row.auditStatus == 2) {
+                  value = '閫氳繃'
+                } else {
+                  value = ''
+                }
+              }
+              return {value: value}
+            }
+          },
+        ],
+        // 鎿嶄綔淇℃伅
+        operation: {
+          width: 180,
+          align:'center',
+          show: true, // 鏄剧ず鎿嶄綔鍒�
+          attr: [
+            {
+              title: '瀹℃牳',
+              events: row => {
+                this.showAudit(row)
+              },
+              hidden:(row) => {
+                if (row.sourceStatus == 0 && row.archiveStatus !== 0) {
+                  return true
+                }
+                if (row.sourceStatus == 1 && row.auditStatus !== 0) {
+                  return true
+                }
+              }
+            },
+            {
+              title: '璇︽儏',
+              events: row => {
+                this.showDetail(row.id)
+              }
+            }
+          ]
+        },
+        paging: {
+          show: true, // 鏄剧ず鍒嗛〉
+          // 鍒嗛〉淇℃伅
+          page: {
+            small: false,
+            pageNum: 1,
+            pageSize: 10,
+            total: 0
+          }
+        }
+      },
+    }
+  },
+  methods:{
+    // 鏂板
+    showAdd(){
+      this.setting = {
+        title:'鏂板椤圭洰',
+        id:null
+      }
+      this.editShow = true
+    },
+    showAudit(row){
+      this.setting = {
+        title:'瀹℃牳',
+        id: row.id,
+        sourceStatus: row.sourceStatus
+      }
+      this.auditShow = true
+    },
+    showDetail(id){
+      this.setting = {
+        id: id,
+        title:'椤圭洰璇︽儏'
+      }
+      this.detailShow = true
+    },
+    // 鏌ヨtable鍒楄〃
+    search(pageNum) {
+      if (pageNum != undefined) {
+        this.$refs.myTable.search(pageNum)
+      } else {
+        this.$refs.myTable.search()
+      }
+    },
+    fifterForm(params) {
+      this.filterFrom = Object.assign(this.filterFrom, params)
+      this.search(1)
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/project-web/src/views/projectManage/audit/items.js b/project-web/src/views/projectManage/audit/items.js
new file mode 100644
index 0000000..dd37b9e
--- /dev/null
+++ b/project-web/src/views/projectManage/audit/items.js
@@ -0,0 +1,90 @@
+export default [
+  {
+    type: 'text',
+    dataIndex: 'projectName',
+    label: '椤圭洰鍚嶇О',
+    defaultValue: '',
+    placeholder: '璇疯緭鍏�'
+  },
+  {
+    type: 'text',
+    dataIndex: 'projectCode',
+    label: '椤圭洰缂栧彿',
+    defaultValue: '',
+    placeholder: '璇疯緭鍏�'
+  },
+  {
+    type: 'cascader',
+    dataIndex: 'projectCategoryId',
+    label: '鍒嗙被',
+    placeholder: '璇烽�夋嫨',
+    optionsConfig: {
+      url: '/pc/p/project/category/tree',
+      props:{checkStrictly: false,value: 'id'}
+    },
+    options: []
+  },
+  {
+    type: 'cascader',
+    dataIndex: 'buildOrgId',
+    label: '寤鸿鍗曚綅',
+    placeholder: '璇烽�夋嫨',
+    optionsConfig: {
+      url: '/pc/fin/sys/tenant/select/tree_fin_tenant'
+    },
+    options: []
+  },
+  {
+    type: 'select',
+    dataIndex: 'sourceStatus',
+    label: '绫诲瀷',
+    placeholder: '璇烽�夋嫨',
+    defaultValue: '',
+    options: [
+      {
+        value: 0,
+        label: '褰掓。'
+      },
+      {
+        value: 1,
+        label: '鏂板'
+      }
+    ]
+  },
+  {
+    type: 'select',
+    dataIndex: 'auditStatus',
+    label: '鐘舵��',
+    placeholder: '璇烽�夋嫨',
+    defaultValue: '',
+    options: [
+      {
+        value: 0,
+        label: '鏈鏍�'
+      },
+      {
+        value: 1,
+        label: '涓嶉�氳繃'
+      },
+      {
+        value: 2,
+        label: '閫氳繃'
+      }
+    ]
+  },
+  {
+    type: 'datetimerange-picker',
+    dataIndex: 'approvalDate',
+    placeholder: '璇烽�夋嫨',
+    label: '鎵瑰鏃堕棿',
+    defaultValue: '',
+    format:'yyyy-MM-dd'
+  },
+  {
+    type: 'datetimerange-picker',
+    dataIndex: 'createTime',
+    placeholder: '璇烽�夋嫨',
+    label: '鍒涘缓鏃堕棿',
+    defaultValue: '',
+  },
+]
diff --git a/project-web/src/views/projectManage/cancel/index.vue b/project-web/src/views/projectManage/cancel/index.vue
new file mode 100644
index 0000000..94ee98f
--- /dev/null
+++ b/project-web/src/views/projectManage/cancel/index.vue
@@ -0,0 +1,164 @@
+<template>
+  <div class="app-container">
+    <el-card class="box-card" style="width: 100%;margin-top: 15px" shadow="never">
+      <!--鎼滅储鏉′欢-->
+      <div class="filter-container">
+        <my-search ref="searchBar" :items="items" @search="fifterForm"></my-search>
+      </div>
+      <el-row style="margin-top: 8px">
+        <el-col>
+          <!--鍒楄〃-->
+          <my-table ref="myTable" :filter="filterFrom" :table="table"/>
+        </el-col>
+      </el-row>
+    </el-card>
+    <!-- 璇︽儏 -->
+    <detail v-if="detailShow" :setting="setting" @close="detailShow=false"></detail>
+  </div>
+</template>
+
+<script>
+import MyTable from "@/components/myTable/myTable";
+import SettingIplatform from '@/utils/settingIplatform';
+import items from './items'
+import detail from  '@/views/projectManage/information/detail'
+import * as cancel from '@/api/projectManage/cancel'
+import * as DateFormatter from "@/utils/DateFormatter";
+export default {
+  name: "index",
+  components: { MyTable,detail },
+  data() {
+    return {
+      // 鎼滅储妗�
+      items: items,
+      // 鎼滅储鏉′欢
+      filterFrom: {
+        projectName: null,  // 椤圭洰鎬绘暟
+        projectCode: null, // 椤圭洰缂栧彿
+        projectCategoryId: null, // 鍒嗙被
+        buildOrgId: null, // 寤鸿鍗曚綅
+        archiveStatus: null, // 绫诲瀷  0 鏈綊妗� 1 瀹℃牳涓� 2 宸插綊妗�
+        approvalDate: null, // 鎵瑰鏃堕棿
+        createTime: null // 鍒涘缓鏃堕棿
+      },
+      setting:{
+        id:null,
+        title:'璇︽儏'
+      },
+      detailShow:false,// 璇︽儏
+      // 琛ㄦ牸鏁版嵁
+      table: {
+        showIndex: true, // 鏄惁鏄剧ず搴忓彿
+        expand: false, // 鏄惁鏄剧ず璇︽儏鏁版嵁
+        url: SettingIplatform.apiBaseURL + '/pc/p/project/info/cancel/list', // 璇锋眰鍦板潃
+        // 宸ュ叿鏉�
+        tools: {
+          columnsCtrl: {// 鍒楁帶鍒舵寜閽�
+            show: false
+          },
+          generalExport: {// 閫氱敤瀵煎嚭鎸夐挳
+            show: false
+          },
+          // 鑷畾涔夊伐鍏锋潯鎸夐挳
+          custom: []
+        },
+        // 鍒椾俊鎭�
+        columns: [
+          {title: '椤圭洰鍚嶇О', field: 'projectName', align: 'left',width: '240px'},
+          {title: '缂栧彿', field: 'projectCode', align: 'center', width: '180px'},
+          {title: '鍒嗙被', field: 'projectCategoryName', align: 'center', width: '150px'},
+          {title: '寤鸿鍗曚綅', field: 'buildOrgName', align: 'center', width: '200px'},
+          {title: '鎵瑰鏃堕棿', field: 'approvalDate', align: 'center', width: '180px',
+            formatter: row => {
+              return { value: DateFormatter.LongToDate(row.approvalDate) }
+            }
+          },
+          {title: '鍒涘缓鏃堕棿', field: 'createTime', align: 'center', width: '180px',
+            formatter: row => {
+              return { value: DateFormatter.LongToDateTime(row.createTime) }
+            }
+          },
+          {
+            title: '鐘舵��', field: 'cancelStatus', align: 'center', width: '120px',
+            formatter: row => {
+              return {value: row.cancelStatus === 0 ? '鏈彇娑�' :'宸插彇娑�'}
+            }
+          },
+        ],
+        // 鎿嶄綔淇℃伅
+        operation: {
+          width: 180,
+          align:'center',
+          show: true, // 鏄剧ず鎿嶄綔鍒�
+          attr: [
+            {
+              title: '鍙栨秷',
+              events: row => {
+                this.$confirm('纭瑕佸彇娑堝悧锛�', {
+                  type: 'warning'
+                }).then(() => {
+                  this.$message.success('鍙栨秷鎴愬姛')
+                  this.qx(row.id)
+                  this.search()
+                })
+              },
+              hidden:(row) => {
+                return row.cancelStatus !== 0
+              }
+            },
+            {
+              title: '璇︽儏',
+              events: row => {
+                this.showDetail(row.id)
+              }
+            }
+          ]
+        },
+        paging: {
+          show: true, // 鏄剧ず鍒嗛〉
+          // 鍒嗛〉淇℃伅
+          page: {
+            small: false,
+            pageNum: 1,
+            pageSize: 10,
+            total: 0
+          }
+        }
+      },
+    }
+  },
+  methods:{
+    showDetail(id){
+      this.setting = {
+        id,
+        title:'椤圭洰璇︽儏'
+      }
+      this.detailShow = true
+    },
+    // 鏌ヨtable鍒楄〃
+    search(pageNum) {
+      if (pageNum != undefined) {
+        this.$refs.myTable.search(pageNum)
+      } else {
+        this.$refs.myTable.search()
+      }
+    },
+    fifterForm(params) {
+      this.filterFrom = Object.assign(this.filterFrom, params)
+      this.search(1)
+    },
+    // 鍙栨秷
+    qx(id){
+      let data = {id:id}
+      cancel.cancelSave(data).then(res=>{
+        this.$message.success('宸插彇娑�')
+        this.search(1)
+      })
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/project-web/src/views/projectManage/cancel/items.js b/project-web/src/views/projectManage/cancel/items.js
new file mode 100644
index 0000000..ff8c6ae
--- /dev/null
+++ b/project-web/src/views/projectManage/cancel/items.js
@@ -0,0 +1,62 @@
+export default [
+  {
+    type: 'text',
+    dataIndex: 'projectName',
+    label: '椤圭洰鍚嶇О',
+    defaultValue: ''
+  },
+  {
+    type: 'text',
+    dataIndex: 'projectCode',
+    label: '椤圭洰缂栧彿',
+    defaultValue: ''
+  },
+  {
+    type: 'cascader',
+    dataIndex: 'projectCategoryId',
+    label: '鍒嗙被',
+    optionsConfig: {
+      url: '/pc/p/project/category/tree',
+      props:{checkStrictly: false,value: 'id'}
+    },
+    options: []
+  },
+  {
+    type: 'cascader',
+    dataIndex: 'buildOrgId',
+    label: '寤鸿鍗曚綅',
+    optionsConfig: {
+      url: '/pc/fin/sys/tenant/select/tree_fin_tenant'
+    },
+    options: []
+  },
+  {
+    type: 'select',
+    dataIndex: 'cancelStatus',
+    label: '鐘舵��',
+    defaultValue: '',
+    options: [
+      {
+        value: 0,
+        label: '鏈彇娑�'
+      },
+      {
+        value: 1,
+        label: '宸插彇娑�'
+      }
+    ]
+  },
+  {
+    type: 'datetimerange-picker',
+    dataIndex: 'approvalDate',
+    label: '鎵瑰鏃堕棿',
+    defaultValue: '',
+    format:'yyyy-MM-dd'
+  },
+  {
+    type: 'datetimerange-picker',
+    dataIndex: 'createTime',
+    label: '鍒涘缓鏃堕棿',
+    defaultValue: '',
+  },
+]
diff --git a/project-web/src/views/projectManage/classify/edit.vue b/project-web/src/views/projectManage/classify/edit.vue
new file mode 100644
index 0000000..192371a
--- /dev/null
+++ b/project-web/src/views/projectManage/classify/edit.vue
@@ -0,0 +1,138 @@
+<template>
+  <win-sm :title="setting.title" @close="close">
+    <el-form ref="ruleForm" :model="formData" :rules="rules" class="demo-ruleForm" label-width="120px" v-loading="loading">
+<!--      <el-form-item label="鐖剁骇鍒嗙被鍚嶇О" >-->
+<!--        <el-input v-model="parentName"  disabled clearable maxlength="20" show-word-limit />-->
+<!--      </el-form-item>-->
+      <el-form-item label="鍒嗙被鍚嶇О" prop="title">
+        <el-input v-model="formData.title" clearable maxlength="20" show-word-limit />
+      </el-form-item>
+      <el-form-item label="椤哄簭鍙�" prop="orderNum">
+        <el-input v-model="formData.orderNum" clearable maxlength="20" type="Number" show-word-limit />
+      </el-form-item>
+      <el-form-item label="鐘舵��" prop="status">
+        <el-radio-group v-model="formData.status">
+          <el-radio :label="0" border>鍚敤</el-radio>
+          <el-radio :label="1" border>绂佺敤</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="澶囨敞"  prop="note">
+        <el-input
+          v-model="formData.note"
+          type="textarea"
+          :rows="3"
+          maxlength="500"
+          show-word-limit
+        />
+      </el-form-item>
+    </el-form>
+    <div slot="footer" align="center" class="dialog-footer">
+      <my-button name="鍙栨秷" site="form" @click="close" />
+      <my-button name="淇濆瓨" site="form" @click="save" />
+    </div>
+  </win-sm>
+</template>
+
+<script>
+import winSm from '@/components/win/win-sm'
+import myButton from '@/components/myButton/myButton'
+import * as classify from '@/api/projectManage/classify'
+export default {
+  components: { winSm, myButton},
+  props: {
+    setting: {
+      type: Object,
+      default: () => {
+      }
+    }
+  },
+  data() {
+    return {
+      loading:false,
+      formData: {
+        projectId: this.setting.projectId,
+        title: '',
+        orderNum: null,
+        note: '',
+        status: 0,
+        parentId:this.setting.parentId,
+      },
+      parentName:this.setting.parentName,
+      rules: {
+        title: [
+          { required: true, message: '璇疯緭鍏ュ垎绫诲悕绉�', trigger: 'blur' }
+        ],
+        orderNum: [
+          { required: true, message: '璇疯緭鍏ュ垎绫婚『搴忓彿', trigger: 'blur' }
+        ],
+      }
+    }
+  },
+  created() {
+    if(this.setting){
+      this.getInfo();
+    }
+  },
+  methods: {
+    getInfo() {
+      this.title = this.setting.title
+      if (this.setting.id != null) {
+        this.loading = true
+        let params = {
+          id: this.setting.id
+        }
+        // 鏌ヨ鏁版嵁
+        classify.getdetail(params).then(res => {
+          const data = res
+          this.formData = Object.assign(this.formData, data)
+          this.loading = false
+        })
+      }
+    },
+    close() {
+      this.formData = {
+        name: '',
+        code: '',
+        description: '',
+        status: 0
+      }, this.$emit('close')
+    },
+    save() {
+      this.$refs.ruleForm.validate((valid) => {
+        if (valid) {
+          const params = Object.assign({}, this.formData)
+          if (params.id) {
+            classify.edit(params).then(res => {
+              if (res) {
+                this.$message.success('淇濆瓨鎴愬姛锛�')
+                this.close()
+                this.$emit('search')
+                this.$emit('initTreeData')
+              } else {
+                this.$message.error('淇濆瓨澶辫触')
+              }
+            })
+          } else {
+            classify.add(params).then(res => {
+              if (res) {
+                this.$message.success('淇濆瓨鎴愬姛锛�')
+                this.close()
+                this.$emit('search')
+                this.$emit('initTreeData')
+              } else {
+                this.$message.error('淇濆瓨澶辫触')
+              }
+            })
+          }
+        } else {
+          this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��')
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/project-web/src/views/projectManage/classify/index.vue b/project-web/src/views/projectManage/classify/index.vue
new file mode 100644
index 0000000..4e6ad04
--- /dev/null
+++ b/project-web/src/views/projectManage/classify/index.vue
@@ -0,0 +1,224 @@
+<template>
+  <div class="app-container">
+    <el-container>
+      <el-card shadow="never" style="width: 240px;margin-right: 15px">
+        <my-tree ref="searchTree" :tree-list="treeDataList" @setNode="nodeClick" @search="search"></my-tree>
+      </el-card>
+      <el-container>
+        <el-card class="box-card" style="width: 100%" shadow="never">
+          <!--鎼滅储鏉′欢-->
+          <div class="filter-container">
+            <my-search ref="searchBar" :items="items" @search="fifterForm"></my-search>
+          </div>
+          <el-row style="margin-top: 8px">
+            <el-col>
+              <!--鍒楄〃-->
+              <my-table-v2 ref="myTable" :filter="filterFrom" :table="table"/>
+            </el-col>
+          </el-row>
+        </el-card>
+      </el-container>
+    </el-container>
+    <edit v-if="setting.show" :setting="setting" @close="setting.show=false" @search="search" @initTreeData="initTreeData"/>
+  </div>
+</template>
+
+<script>
+import myTree from '@/components/myTree/index'
+import MyTableV2 from "@/components/myTable/myTableV2";
+import SettingIplatform from '@/utils/settingIplatform';
+import items from './items'
+import edit from './edit'
+import * as classify from '@/api/projectManage/classify'
+
+export default {
+  name: "index",
+  components: { MyTableV2, myTree,edit },
+  data() {
+    return {
+      // 鎼滅储妗�
+      items: items,
+      // 鏍戞暟鎹�
+      treeDataList: [],
+      // 鎼滅储鏉′欢
+      filterFrom: {
+        status: 0,
+        title: null,
+        parentId:null
+      },
+      setting:{
+        show:false,
+        id:null,
+        title:'鏂板'
+      },
+      // 琛ㄦ牸鏁版嵁
+      table: {
+        showIndex: true, // 鏄惁鏄剧ず搴忓彿
+        expand: false, // 鏄惁鏄剧ず璇︽儏鏁版嵁
+        url: SettingIplatform.apiBaseURL + '/pc/p/project/category/list', // 璇锋眰鍦板潃
+        // 宸ュ叿鏉�
+        tools: {
+          columnsCtrl: {// 鍒楁帶鍒舵寜閽�
+            show: false
+          },
+          generalExport: {// 閫氱敤瀵煎嚭鎸夐挳
+            show: false
+          },
+          // 鑷畾涔夊伐鍏锋潯鎸夐挳
+          custom: [
+            {
+              name: '鏂板',
+              click: () => {
+                this.showAdd(null)
+              }
+            }
+          ]
+        },
+        // 鍒椾俊鎭�
+        columns: [
+          {title: '鍒嗙被鍚嶇О', field: 'title', align: 'left',},
+          {title: '鏄剧ず椤哄簭', field: 'orderNum', align: 'center', width: '250px'},
+          {title: '鐘舵��', field: 'status', align: 'center', width: '80px',
+            switch: row => {
+              const result = {}
+              if (row.status == 0) {
+                Object.assign(result, {
+                  value: true, // 寮�
+                  label: '鍚敤', // 寮�鐨勬弿杩�
+                  click: () => { // 鐐瑰嚮浜嬩欢
+                    this.updState(row)
+                  }
+                })
+              } else {
+                Object.assign(result, {
+                  value: false, // 鍏�
+                  label: '绂佺敤', // 鍏崇殑鎻忚堪
+                  click: () => {
+                    this.updState(row)
+                  }
+                })
+              }
+              return result
+            }
+          }
+        ],
+        // 鎿嶄綔淇℃伅
+        operation: {
+          width: 200,
+          align:'center',
+          show: true, // 鏄剧ず鎿嶄綔鍒�
+          attr: [
+            {
+              title: '缂栬緫',
+              events: row => {
+                this.showAdd(row.id)
+              }
+            },
+            // 鍒嗙被涓嬫湁姝e湪杩涜涓殑椤圭洰鏃讹紝缁欏嚭鎻愮ず涓嶅厑璁哥鐢ㄥ拰鍒犻櫎銆備笖绂佺敤涓�绾у垎绫诲墠闇�瑕佸厛绂佺敤涓嬮潰鐨勬墍鏈変簩绾э紝鏈夊惎鐢ㄧ殑浜岀骇鏃朵笉鍏佽绂佺敤涓�绾�
+            {
+              title: '鍒犻櫎',
+              events: row => {
+                this.showDel(row.id)
+              }
+            }
+          ]
+        },
+        paging: {
+          show: true, // 鏄剧ず鍒嗛〉
+          // 鍒嗛〉淇℃伅
+          page: {
+            small: false,
+            pageNum: 1,
+            pageSize: 10,
+            total: 0
+          }
+        }
+      },
+    }
+  },
+  created() {
+    // 鑾峰彇鏈烘瀯鏍�
+    this.initTreeData()
+  },
+  methods: {
+    // 宸︿晶鏍戝垵濮嬪寲
+    initTreeData() {
+      classify.classifyTree().then(res => {
+        const content = res || []
+        this.treeDataList.splice(0, this.treeDataList.length)
+        this.treeDataList = content
+      })
+    },
+    // 淇敼鐘舵��
+    updState(row) {
+      // 鍒嗙被涓嬫湁姝e湪杩涜涓殑椤圭洰鏃讹紝缁欏嚭鎻愮ず涓嶅厑璁哥鐢ㄥ拰鍒犻櫎銆備笖绂佺敤涓�绾у垎绫诲墠闇�瑕佸厛绂佺敤涓嬮潰鐨勬墍鏈変簩绾э紝鏈夊惎鐢ㄧ殑浜岀骇鏃朵笉鍏佽绂佺敤涓�绾�
+      let vm = this
+      let text = row.status == 1 ? "鍚敤" : "绂佺敤";
+      vm.$modal.confirm('纭瑕�' + text + '"' + row.title + '"鍚楋紵').then(function() {
+        let params = Object.assign({},row)
+        params.status = row.status == 1 ? 0 : 1
+        classify.updateStatus(params).then(res=>{
+          if(res){
+            row.status = row.status == 1 ? 0 : 1
+            vm.$message.success(text + "鎴愬姛");
+            vm.search()
+          }
+        })
+      })
+    },
+    nodeClick(param) {
+      this.setting.parentId = param.id;
+      this.setting.parentName = param.name;
+      param = param || {}
+      this.p = Object.assign({}, {
+        id: param.id,
+        name: param.name
+      })
+      if (this.p.id != undefined && this.p.id != null) {
+        this.filterFrom.parentId = this.p.id
+      } else {
+        this.filterFrom.parentId = null
+      }
+      this.search(1)
+    },
+    // 鏌ヨtable鍒楄〃
+    search(pageNum) {
+      if (pageNum != undefined) {
+        this.$refs.myTable.search(pageNum)
+      } else {
+        this.$refs.myTable.search()
+      }
+    },
+    fifterForm(params) {
+      this.filterFrom = Object.assign(this.filterFrom, params)
+      this.search(1)
+    },
+    // 鏂板/缂栬緫
+    showAdd(id){
+      let title = '娣诲姞'
+      if (id != null) {
+        title = '缂栬緫'
+      }
+      this.setting.id = id
+      this.setting.title = title
+      this.setting.show = true
+    },
+    // 鍒犻櫎
+    showDel(id){
+      let vm = this
+      vm.$modal.confirm('纭瑕佸垹闄よ鍒嗙被鍚楋紵').then(function() {
+        classify.del({ id:id }).then(res=>{
+          if(res){
+            vm.$message.success("鍒犻櫎鎴愬姛");
+            vm.search(1)
+          }
+        })
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/project-web/src/views/projectManage/classify/items.js b/project-web/src/views/projectManage/classify/items.js
new file mode 100644
index 0000000..d5cea20
--- /dev/null
+++ b/project-web/src/views/projectManage/classify/items.js
@@ -0,0 +1,26 @@
+export default [
+  {
+    type: 'text',
+    dataIndex: 'title',
+    label: '鍒嗙被鍚嶇О',
+    placeholder: '璇疯緭鍏�',
+    defaultValue: ''
+  },
+  {
+    type: 'select',
+    dataIndex: 'status',
+    label: '鐘舵��',
+    defaultValue: '0',
+    placeholder: '璇烽�夋嫨',
+    options: [
+      {
+        value: '0',
+        label: '姝e父'
+      },
+      {
+        value: '1',
+        label: '绂佺敤'
+      }
+    ]
+  }
+]
diff --git a/project-web/src/views/projectManage/information/components/moneySetting.vue b/project-web/src/views/projectManage/information/components/moneySetting.vue
new file mode 100644
index 0000000..7a2f3e3
--- /dev/null
+++ b/project-web/src/views/projectManage/information/components/moneySetting.vue
@@ -0,0 +1,96 @@
+<template>
+  <win-sm :title="setting.title" @close="close">
+    <el-form :model="formData" ref="ruleForm" :rules="rules" label-width="100px">
+      <el-form-item v-for="(c,j) in totalList" :label="'绗�'+(j+1)+'娆℃姇璧�'">
+        <div class="font-14 color-333">
+          {{c.releaseInvest}}涓囧厓
+        </div>
+      </el-form-item>
+      <el-form-item prop="releaseInvest" :label="'绗�'+(totalList.length+1)+'娆℃姇璧�'">
+        <el-input type="number" v-model="formData.releaseInvest" auto-complete="off">
+          <template slot="append">涓囧厓</template>
+        </el-input>
+      </el-form-item>
+      <el-form-item prop="releaseTime" label="涓嬭揪鏃堕棿">
+        <el-date-picker
+          v-model="formData.releaseTime"
+          type="date"
+          format="yyyy-MM-dd"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨涓嬭揪鏃堕棿">
+        </el-date-picker>
+      </el-form-item>
+    </el-form>
+    <div slot="footer" align="center" class="dialog-footer">
+      <my-button name="鍙栨秷" site="form" @click="close" />
+      <my-button name="淇濆瓨" site="form" @click="save" />
+    </div>
+  </win-sm>
+</template>
+
+<script>
+import winSm from '@/components/win/win-sm'
+import myButton from "@/components/myButton/myButton";
+import * as information from '@/api/projectManage/information'
+export default {
+  name: "warningSetting",
+  components: { winSm, myButton},
+  props: {
+    setting: {
+      type: Object,
+      default: () => {
+      }
+    }
+  },
+  data() {
+    return {
+      totalList:[],
+      formData:{
+        releaseInvest:'',
+        releaseTime:''
+      },
+      rules: {
+        releaseInvest: [
+          { required: true, message: '璇疯緭鍏ユ姇璧勯噾棰�', trigger: 'blur' },
+          { min: 0, message: '鏈�浣庝笉灏忎簬0', trigger: 'blur' },
+        ],
+        releaseTime: [
+          { required: true, message: '璇烽�夋嫨涓嬭揪鏃堕棿', trigger: 'change' }
+        ]
+      }
+    }
+  },
+  created() {
+    this.investInfoList()
+  },
+  methods:{
+    investInfoList(){
+      information.getInvestInfoList({id:this.setting.id}).then(res=>{
+        this.totalList = res
+      })
+    },
+    close(){
+      this.$emit('close')
+    },
+    save(){
+      this.$refs['ruleForm'].validate((valid) => {
+        if (valid) {
+          let params = Object.assign({},this.formData)
+          params.id = this.setting.id
+          information.investInfoSave(params).then(res=>{
+            this.$message.success('淇濆瓨鎴愬姛')
+            this.$emit('close')
+            this.$emit('search')
+          })
+        } else {
+          return false;
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/project-web/src/views/projectManage/information/components/warningSetting.vue b/project-web/src/views/projectManage/information/components/warningSetting.vue
new file mode 100644
index 0000000..eedc884
--- /dev/null
+++ b/project-web/src/views/projectManage/information/components/warningSetting.vue
@@ -0,0 +1,80 @@
+<template>
+  <win-sm :title="setting.title" @close="close">
+    <el-form :model="formData" :rules="rules" ref="ruleForm" label-width="100px">
+      <el-form-item label="棰勮妯℃澘" prop="tempExpirationNotifyId">
+        <el-select v-model="formData.tempExpirationNotifyId" placeholder="璇烽�夋嫨棰勮妯℃澘" filterable >
+          <el-option v-for="c in treeData" :key="c.id" :label="c.tempExpirationNotifyName" :value="c.id"></el-option>
+        </el-select>
+      </el-form-item>
+    </el-form>
+    <div slot="footer" align="center" class="dialog-footer">
+      <my-button name="鍙栨秷" site="form" @click="close" />
+      <my-button name="淇濆瓨" site="form" @click="save" />
+    </div>
+  </win-sm>
+</template>
+
+<script>
+import winSm from '@/components/win/win-sm'
+import myButton from "@/components/myButton/myButton";
+import * as information from '@/api/projectManage/information'
+export default {
+  name: "warningSetting",
+  components: { winSm, myButton},
+  props: {
+    setting: {
+      type: Object,
+      default: () => {
+      }
+    }
+  },
+  data() {
+    return {
+      treeData:[],
+      formData:{
+        id: '',
+        tempExpirationNotifyId:null
+      },
+      rules: {
+        tempExpirationNotifyId: [
+          { required: true, message: '璇烽�夋嫨棰勮妯℃澘', trigger: 'change' }
+        ]
+      }
+    }
+  },
+  created() {
+    this.formData.tempExpirationNotifyId = this.setting.tempExpirationNotifyId
+    this.formData.id = this.setting.id
+    this.loadTempList()
+  },
+  methods:{
+    loadTempList(){
+      information.getWarnTempletelist({
+        createOrgId: this.setting.createOrgId
+      }).then(res=>{
+        this.treeData = res
+      })
+    },
+    close(){
+      this.$emit('close')
+    },
+    save(){
+      this.$refs['ruleForm'].validate((valid) => {
+        if (valid) {
+          information.warnTempleteSave(this.formData).then(res=>{
+            this.$message.success('淇濆瓨鎴愬姛')
+            this.$emit('close')
+            this.$emit('search')
+          })
+        } else {
+          return false;
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/project-web/src/views/projectManage/information/detail.vue b/project-web/src/views/projectManage/information/detail.vue
new file mode 100644
index 0000000..ef6f511
--- /dev/null
+++ b/project-web/src/views/projectManage/information/detail.vue
@@ -0,0 +1,465 @@
+<template>
+  <win2 :title="setting.title" @close="close">
+    <div class="app-container">
+      <el-row :gutter="15">
+        <el-col :span="5">
+          <el-card shadow="never" class="com-box">
+            <div>
+              <div class="f-r">
+                <div class="img-box f-r f-r-center">
+                  <img src="@/assets/images/project/icon-gj-lv.png" alt="" class="type-img"/>
+                </div>
+                <div>
+                  <div class="font-18 font-bold color-333">{{info.projectName}}</div>
+                  <el-progress :percentage="info.progressRate" style="width: 100%;margin-top: 5px"
+                               :show-text="false"></el-progress>
+                  <div class="m-t-10 f-r f-r-between">
+                    <el-tag :type="getStatusText(info.status).type">{{ getStatusText(info.status).text }}</el-tag>
+                    <div class="font-13 color-999">
+                      褰撳墠杩涘害
+                      <span class="color-red">{{ info.progressRate }}%</span>
+                    </div>
+                  </div>
+                </div>
+              </div>
+              <div class="cont-box">
+                <div class="font-14 color-666">涓昏寤鸿鍐呭</div>
+                <div class="font-14 color-333 m-t-5 line-24">
+                  {{info.detail}}
+                </div>
+              </div>
+              <div class="e-p-v-15">
+                <el-form label-width="80px" label-position="left">
+                  <el-form-item label="寤鸿鍦板潃">
+                    <div class="font-14 color-333 line-24">{{info.addr}}</div>
+                  </el-form-item>
+                  <el-form-item label="椤圭洰缂栧彿">
+                    <div class="font-14 color-333 line-24">{{info.projectCode}}</div>
+                  </el-form-item>
+                  <el-form-item label="椤圭洰鍒嗙被">
+                    <div class="font-14 color-333 line-24" style="color: #235686">{{info.projectCategoryName}}</div>
+                  </el-form-item>
+                  <el-form-item label="寤鸿鍗曚綅">
+                    <div class="font-14 color-333 line-24">{{info.buildOrgName}}</div>
+                  </el-form-item>
+                  <el-form-item label="椤圭洰缁忕悊">
+                    <div class="font-14 color-333 line-24">{{info.projectManager}}</div>
+                  </el-form-item>
+                  <el-form-item label="璧锋骞撮檺">
+                    <div class="font-14 color-333 line-24">{{info.buildYearStart}}-{{info.buildYearEnd}}</div>
+                  </el-form-item>
+                  <el-form-item label="椤圭洰鎵规">
+                    <div class="font-14 color-333 line-24">{{info.projectBatchName}}</div>
+                  </el-form-item>
+                  <el-form-item label="鎵瑰鏃堕棿">
+                    <div class="font-14 color-333 line-24">{{info.approvalDate}}</div>
+                  </el-form-item>
+                  <el-form-item label="鍒涘缓鏃堕棿">
+                    <div class="font-14 color-333 line-24">{{info.createTime}}</div>
+                  </el-form-item>
+                  <el-form-item label="鎶曡祫涓撲笟">
+                    <div class="font-14 color-333 line-24">{{info.investMajorName}}</div>
+                  </el-form-item>
+                  <el-form-item label="椤圭洰鎶曡祫">
+                    <div class="font-14 color-333 line-24">鎬昏祫浜{info.totalInvest}}涓囧厓 / 宸蹭笅杈�<span class="color-red">{{info.totalReleaseInvest}}</span>涓囧厓</div>
+                    <div v-for="(item, i) in info.pReleaseInvestInfoList"
+                         :key="item.id"
+                         class="font-14 color-333 line-24">
+                      绗瑊{i + 1}}娆′笅杈�<span class="color-red">{{item.releaseInvest}}</span>涓囧厓
+                    </div>
+                  </el-form-item>
+                </el-form>
+              </div>
+            </div>
+          </el-card>
+        </el-col>
+        <el-col :span="10" class="com-box">
+          <el-card shadow="never">
+            <div class="font-18 color-333 font-bold m-b-15">鑺傜偣杩涘害</div>
+            <div class="f-r f-r-between f-r-top">
+              <!--宸︿晶-->
+              <div class="com-c-box">
+                <div v-for="(c,j) in projectStage" :key="j" class="jd-item" :class="{'jd-active':c.pstageId===curId}" @click="changeJd(c,j)">
+                  {{ c.pstageName }}
+                </div>
+              </div>
+              <!--鍙充晶-->
+              <div class="f-1 node-list com-c-box">
+                <el-timeline>
+                  <el-timeline-item
+                    v-for="(node, index) in nodeList"
+                    :key="index"
+                    icon="el-icon-check"
+                    type="success"
+                    size="large"
+                    :hide-timestamp="false">
+                    <div class="node-item f-r f-r-between">
+                      <div>
+                        <div class="font-16 color-333">{{ node.nodeName }}</div>
+                        <div class="m-t-5 font-14 color-333">{{ formatterDate(node.nodeStart) }}鑷硔{ formatterDate(node.nodeEnd) }}</div>
+                      </div>
+                      <div>
+<!--                        <div class="font-12 color-999">{{ node.nodeCompleteDate }}</div>-->
+                        <el-button type="primary" size="mini" class="m-t-5 float-right" @click="lookNode(node.nodeId)">鏌ョ湅</el-button>
+                      </div>
+                    </div>
+                  </el-timeline-item>
+                </el-timeline>
+              </div>
+            </div>
+          </el-card>
+        </el-col>
+        <el-col :span="9">
+          <el-card shadow="never">
+            <div class="font-18 color-333 font-bold m-b-15">鍏ㄩ儴杩涘害</div>
+            <div class="com-c-box" style="padding-left: 5px" :loading="nodeLoading">
+              <el-timeline>
+                <!-- recList-->
+                <el-timeline-item
+                  v-for="(cs, index) in 10"
+                  :key="index"
+                  size="large"
+                  :hide-timestamp="false">
+                  <div class="info-item">
+                    <div class="font-14 m-b-15">
+                      瀹屾垚浜�<span class="color-0D9">绔嬮」/鍙爺</span>闃舵鐨勫鏌ヨ妭鐐�
+                    </div>
+                    <div class="info-box">
+                      <div class="f-r f-r-between m-b-15">
+                        <div class="font-14 color-333">鍛ㄦ槦鏄�</div>
+                        <div class="font-12 color-999">2023-09-04 12:31</div>
+                      </div>
+                      <!-- 鍥剧墖-->
+                      <div class="f-r">
+                        <el-image
+                          v-for="(iItem,iIndex) in cs.imgs"
+                          class="info-img"
+                          :src="iItem"
+                          :preview-src-list="imgList">
+                        </el-image>
+                      </div>
+                      <!-- 闄勪欢 -->
+                      <div class="m-b-15" v-if="cs.files && cs.files.length>0">
+                        <div class="font-14 color-666">闄勪欢</div>
+                        <div class="f-r f-r-between file-item" v-for="(file,fIndex) in cs.files">
+                          <div class="f-r f-1">
+                            <img :src="getFileIcon(file.fileName)" alt="涓嬭浇" class="file-icon"/>
+                            <div class="file-name" @click="downLoadFile(file.url)">
+                              {{ file.fileName }}
+                            </div>
+                          </div>
+                          <div class="down-enter">鏌ョ湅</div>
+                        </div>
+                      </div>
+                      <!-- 褰撳墠椤圭洰杩涘害 -->
+                      <div>
+                        <div class="font-14 color-666">褰撳墠椤圭洰杩涘害</div>
+                        <div class="font-14 color-333 m-t-5 line-24">
+                          鍦ㄤ腑鍙颁骇鍝佺殑鐮斿彂杩囩▼涓紝浼氬嚭鐜颁笉鍚岀殑璁捐瑙勮寖鍜屽疄鐜版柟寮忥紝浣嗗叾涓線寰�瀛樺湪寰堝绫讳技鐨勯〉闈㈠拰缁勪欢锛岃繖浜涚被浼肩殑缁勪欢浼氳鎶界鎴愪竴濂楁爣鍑嗚鑼冦��
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                </el-timeline-item>
+              </el-timeline>
+            </div>
+          </el-card>
+        </el-col>
+      </el-row>
+      <!--  鑺傜偣杩涘害 -->
+      <nodeProgress v-if="nodeShow" :nodeId="nodeId" @close="nodeShow=false"></nodeProgress>
+    </div>
+  </win2>
+</template>
+
+<script>
+import win2 from '@/components/win2/index'
+import {getDownUrl} from '@/utils/base';
+import nodeProgress from '@/views/projectManage/information/nodeProgress'
+import * as info from '@/api/projectManage/info'
+import * as DateFormatter from '@/utils/DateFormatter';
+export default {
+  name: "detail",
+  components: {win2,nodeProgress},
+  props: {
+    setting: {
+      type: Object,
+      default: () => {
+      }
+    }
+  },
+  data() {
+    return {
+      info: {},
+      files: [
+        {url: '2222.txt', fileName: '鏈�椤圭洰杩涘害璁捐鏂规.xsl'},
+        {url: '2222.txt', fileName: '鏈�椤圭洰杩涘害璁捐鏂规.ppt'},
+        {url: '2222.txt', fileName: '鏈�椤圭洰杩涘害璁捐鏂规.pdf'},
+        {url: '2222.txt', fileName: '鏈�椤圭洰杩涘害璁捐鏂规.xls'},
+        {url: '2222.txt', fileName: '鏈�椤圭洰杩涘害璁捐鏂规.xsl'}
+      ],
+      projectStage: [], // 鑺傜偣鍒楄〃
+      curId: null, // 褰撳墠閫変腑闃舵id
+      nodeId: null, // 褰撳墠閫変腑鑺傜偣id
+      nodeList: [],
+      recList: [],  // 杩涘害鍒楄〃
+      imgList: [],  // 鍥剧墖棰勮
+      nodeShow:false, // 鑺傜偣杩涘害
+      nodeLoading:false // 鍙充晶鍔犺浇loading
+    }
+  },
+  created() {
+    if (this.setting.id) {
+      this.getInfo(this.setting.id)
+    }
+  },
+  methods: {
+    formatterDate(time){
+      return DateFormatter.LongToDate(time)
+    },
+    getInfo(id) {
+      info.getInfo({id: id}).then(res => {
+        if (res) {
+          this.info = res
+          this.info.approvalDate = DateFormatter.LongToDate(this.info.approvalDate)
+          this.info.createTime = DateFormatter.LongToDateTime(this.info.createTime)
+          this.projectStage = res.pTempStageResults
+          if(this.projectStage.length>0){
+            this.curId = this.projectStage[0].pstageId
+            this.nodeList = this.projectStage[0].pStageNodeResults
+          }
+        }
+      })
+    },
+    // 鏌ョ湅鑺傜偣杩涘害
+    lookNode(nodeId){
+      this.nodeId = nodeId
+      this.nodeShow = true
+    },
+    // 鍒囨崲鑺傜偣
+    changeJd(c,index){
+      this.curId = c.pstageId
+      this.nodeList = this.projectStage[index].pStageNodeResults
+      this.$forceUpdate()
+    },
+    getStatusText(state) {
+      // 0 鏈紑宸� 1 杩涜涓� 2 宸插畬鎴� 3 宸插彇娑� 4 宸插欢鏈�
+      let obj = {
+        text: '',
+        type: 'success'
+      }
+      switch (state) {
+        case 0:
+          obj.text = '鏈紑宸�'
+          obj.type = 'info'
+          break
+        case 1:
+          obj.text = '杩涜涓�'
+          obj.type = 'primary'
+          break
+        case 2:
+          obj.text = '宸插畬鎴�'
+          obj.type = 'success'
+          break
+        case 3:
+          obj.text = '宸插彇娑�'
+          obj.type = 'warning'
+          break
+        case 4:
+          obj.text = '宸插欢鏈�'
+          obj.type = 'danger'
+          break
+      }
+      return obj
+    },
+    // 涓嬭浇鏂囦欢
+    downLoadFile(item) {
+      const loadingInstance = this.$loading({
+        lock: true,
+        text: '姝e湪涓嬭浇...',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)',
+      });
+      let info = JSON.parse(item)[0];
+      if (info.url.indexOf('http') !== 0) {
+        info.url = getDownUrl() + info.url;
+      }
+      // window.open(decodeURI(info.url))
+      var doc = document.createElement('a');
+      doc.href = info.url;
+      doc.download = info.fileName;
+      doc.target = '_blank';
+      doc.click();
+      loadingInstance.close();
+    },
+    getFileIcon(item) {
+      const arr = item.split('.');
+      if (arr[arr.length - 1] === 'doc' || arr[arr.length - 1] === 'docx') {
+        return require('@/assets/images/project/word.png');
+      } else if (arr[arr.length - 1] === 'pdf') {
+        return require('@/assets/images/project/pdf.png');
+      } else if (arr[arr.length - 1] === 'txt') {
+        return require('@/assets/images/project/txt.png');
+      } else if (arr[arr.length - 1] === 'xls' || arr[arr.length - 1] === 'xlsx') {
+        return require('@/assets/images/project/xls.png');
+      } else if (arr[arr.length - 1] === 'ppt' || arr[arr.length - 1] === 'pptx') {
+        return require('@/assets/images/project/ppt.png');
+      } else {
+        return require('@/assets/images/project/no-file.png');
+      }
+    },
+    close() {
+      this.$emit('close')
+    }
+  },
+}
+</script>
+
+<style scoped>
+.com-box {
+  overflow-y: auto;
+  max-height: calc(100vh - 256px);
+}
+
+.com-c-box {
+  overflow-y: auto;
+  max-height: calc(100vh - 310px);
+}
+
+.com-c-box::-webkit-scrollbar {
+  display: none;
+}
+
+.com-box::-webkit-scrollbar {
+  width: 4px;
+}
+
+.com-box::-webkit-scrollbar-thumb {
+  box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
+}
+
+.m-t-10 {
+  margin-top: 10px;
+}
+
+.m-t-5 {
+  margin-top: 5px;
+}
+
+.m-b-15 {
+  margin-bottom: 15px;
+}
+
+.img-box {
+  min-width: 56px;
+  max-width: 56px;
+  height: 56px;
+  border-radius: 4px;
+  border: 1px solid #eeeeee;
+  margin-right: 5px;
+}
+
+.type-img {
+  width: 38px;
+  height: 38px;
+}
+
+.cont-box {
+  padding: 15px 0;
+  border-bottom: 1px solid #f5f5f5;
+}
+
+.line-24 {
+  line-height: 24px;
+}
+
+>>> .el-form-item__label {
+  line-height: 24px;
+}
+
+>>> .el-form-item {
+  margin-bottom: 10px;
+}
+
+.e-p-v-15 {
+  padding: 15px 0;
+}
+
+.jd-item {
+  width: 150px;
+  height: 45px;
+  line-height: 45px;
+  text-align: center;
+  border-radius: 4px;
+  font-size: 16px;
+  border: 1px solid #e6e6e6;
+  cursor: pointer;
+  margin-bottom: 15px;
+}
+
+.jd-item:hover {
+  color: #FFFFFF;
+  background-color: #0d997c;
+}
+
+.jd-active {
+  color: #FFFFFF;
+  background-color: #0d997c;
+}
+
+.node-list {
+  padding-left: 25px;
+}
+
+.node-item {
+  padding-top: 5px;
+}
+
+.float-right {
+  float: right;
+}
+
+.color-0D9 {
+  color: #0D997C;
+}
+
+.info-item {
+  padding-top: 5px;
+}
+
+.info-box {
+  padding: 8px;
+  border-radius: 4px;
+  background: #f8faf9;
+}
+
+.info-img {
+  width: 92px;
+  height: 92px;
+  border-radius: 4px;
+  margin-right: 10px;
+}
+
+.file-item {
+  padding: 10px 0;
+}
+.file-icon{
+  width: 16px;
+  height: 16px;
+  margin-right: 5px;
+}
+.file-name{
+  font-size: 14px;
+  color: #333333;
+}
+.file-name:hover{
+  cursor: pointer;
+  color: #0d997c;
+}
+.down-enter{
+  cursor: pointer;
+  color: #1890ff;
+  font-size: 14px;
+  text-decoration: underline;
+}
+</style>
diff --git a/project-web/src/views/projectManage/information/index.vue b/project-web/src/views/projectManage/information/index.vue
new file mode 100644
index 0000000..2147573
--- /dev/null
+++ b/project-web/src/views/projectManage/information/index.vue
@@ -0,0 +1,383 @@
+<template>
+  <div class="app-container">
+    <el-card class="box-card" style="width: 100%" shadow="never">
+      <div class="f-r f-r-between">
+        <div class="total-item" :class="{'total-active':curId ==null}" @click.stop="changeType(null)">
+          <div class="total-title">椤圭洰鎬绘暟</div>
+          <div class="total-num">{{ topInfo.projectTotal }}</div>
+        </div>
+        <div class="total-item" :class="{'total-active':curId ==0}" @click="changeType(0)">
+          <div class="total-title">鏈紑宸�</div>
+          <div class="total-num">{{ topInfo.awaitNum }}</div>
+        </div>
+        <div class="total-item" :class="{'total-active':curId ==1}" @click="changeType(1)">
+          <div class="total-title">杩涜涓�</div>
+          <div class="total-num">{{ topInfo.ingNum }}</div>
+        </div>
+        <div class="total-item" :class="{'total-active':curId ==4}" @click="changeType(4)">
+          <div class="total-title">宸插欢鏈�</div>
+          <div class="total-num">{{ topInfo.postponeNum }}</div>
+        </div>
+        <div class="total-item" :class="{'total-active':curId ==2}" @click="changeType(2)">
+          <div class="total-title">宸插畬鎴�</div>
+          <div class="total-num">{{ topInfo.endNum }}</div>
+        </div>
+        <div class="total-item" :class="{'total-active':curId ==3}" @click="changeType(3)">
+          <div class="total-title">宸插彇娑�</div>
+          <div class="total-num">{{ topInfo.cancelNum }}</div>
+        </div>
+      </div>
+    </el-card>
+    <el-card class="box-card" style="width: 100%;margin-top: 8px" shadow="never">
+      <!--鎼滅储鏉′欢-->
+      <div class="filter-container">
+        <my-search ref="searchBar" :items="items" @search="fifterForm"></my-search>
+      </div>
+      <el-row style="margin-top: 15px">
+        <el-col>
+          <div>
+            <el-table
+              v-loading="loading"
+              :show-header="false"
+              :data="tableData"
+              fit
+              size="medium"
+              style="width: 100%">
+              <el-table-column
+                fixed="left"
+                width="240">
+                <template slot-scope="scope">
+                  <div class="f-r">
+                    <div>
+                      <div class="project-name" @click="toDetail(scope.row.id)">{{ scope.row.projectName }}</div>
+                      <div class="font-13 color-666">{{ scope.row.projectCode }}</div>
+                    </div>
+                  </div>
+                </template>
+              </el-table-column>
+              <el-table-column
+                fixed="left"
+                width="200">
+                <template slot-scope="scope">
+                  <div>
+                    <el-progress :percentage="scope.row.progressRate"></el-progress>
+                    <div class="m-t-10 f-r f-r-between">
+                      <el-tag :type="getStatusText(scope.row.status).type">{{getStatusText(scope.row.status).text}}</el-tag>
+                      <div class="font-13 color-999">
+                        褰撳墠杩涘害
+                        <span class="color-red">{{ scope.row.progressRate }}%</span>
+                      </div>
+                    </div>
+                  </div>
+                </template>
+              </el-table-column>
+              <el-table-column
+                width="180">
+                <template slot-scope="scope">
+                  <div class="font-13 color-666 text-center">绫诲瀷</div>
+                  <div class="font-13 color-333 text-center m-t-10">{{ scope.row.projectCategoryName }}</div>
+                </template>
+              </el-table-column>
+              <el-table-column
+                width="180">
+                <template slot-scope="scope">
+                  <div class="font-13 color-666 text-center">寤鸿鍗曚綅</div>
+                  <div class="font-13 color-333 text-center m-t-10">{{ scope.row.buildOrgName }}</div>
+                </template>
+              </el-table-column>
+              <el-table-column
+                width="180">
+                <template slot-scope="scope">
+                  <div class="font-13 color-666 text-center">鎵瑰鏃堕棿</div>
+                  <div class="font-13 color-333 text-center m-t-10">{{ scope.row.approvalDate }}</div>
+                </template>
+              </el-table-column>
+              <el-table-column
+                width="180">
+                <template slot-scope="scope">
+                  <div class="font-13 color-666 text-center">鍒涘缓鏃堕棿</div>
+                  <div class="font-13 color-333 text-center m-t-10">{{ scope.row.createTime }}</div>
+                </template>
+              </el-table-column>
+              <el-table-column
+                width="180">
+                <template slot-scope="scope">
+                  <div class="font-13 color-666 text-center">涓存湡棰勮</div>
+                  <div class="m-t-10 f-r f-r-center">
+                    <el-switch
+                      :disabled="scope.row.status===3"
+                      v-model="scope.row.expirationNotifyStatus===1?true:false"
+                      active-color="#13ce66"
+                      @change="updateStatus(scope.row)">
+                    </el-switch>
+                  </div>
+                </template>
+              </el-table-column>
+              <el-table-column
+                fixed="right"
+                align="center"
+                width="300">
+                <template slot-scope="scope">
+                  <el-button
+                    size="mini"
+                    type="success"
+                    v-if="scope.row.status!==3"
+                    @click="warnSetting(scope.row)">棰勮璁剧疆
+                  </el-button>
+                  <el-button
+                    v-if="scope.row.status!==3"
+                    size="mini"
+                    @click="sendCode(scope.row.id)">鍙戦�佺煭淇�
+                  </el-button>
+                  <el-button
+                    size="mini"
+                    type="warning"
+                    @click="moneySetting(scope.row.id)">涓嬭揪鎶曡祫
+                  </el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+          <div class="f-r f-r-end page-box">
+            <el-pagination
+              :current-page="page.pageNum"
+              :page-sizes="[5, 10, 20, 50, 100, 200, 300, 400, 500]"
+              :page-size="page.pageSize"
+              layout="total, sizes, prev, pager, next, jumper"
+              :total="page.total"
+              @size-change="handleSizeChange"
+              @current-change="handleCurrentChange"
+            />
+          </div>
+        </el-col>
+      </el-row>
+    </el-card>
+    <!-- 棰勮璁剧疆 -->
+    <warning-setting v-if="warningShow" :setting="comSetting" @close="warningShow=false" @search="search(1)"></warning-setting>
+    <!-- 涓嬭揪鎶曡祫 -->
+    <money-setting v-if="moneyShow" :setting="comSetting" @close="moneyShow=false" @search="search(1)"></money-setting>
+    <!-- 璇︽儏 -->
+    <detail v-if="detailShow" :setting="comSetting" @close="detailShow=false"></detail>
+  </div>
+</template>
+
+<script>
+import items from './items'
+import * as information from '@/api/projectManage/information'
+import warningSetting from  '@/views/projectManage/information/components/warningSetting'
+import moneySetting from  '@/views/projectManage/information/components/moneySetting'
+import detail from  '@/views/projectManage/information/detail'
+import * as classify from "@/api/projectManage/classify";
+import {updateInfoStatus} from "@/api/projectManage/information";
+export default {
+  name: "index",
+  components: { warningSetting,moneySetting,detail },
+  data() {
+    return {
+      loading:false,
+      warningShow:false, // 棰勮璁剧疆
+      moneyShow:false, // 涓嬭揪鎶曡祫
+      detailShow:false, // 璇︽儏
+      comSetting:{
+        id:"",
+        title:""
+      },
+      curId:null, // 褰撳墠椤堕儴绫诲瀷Id
+      // 鎼滅储妗�
+      items: items,
+      // 鏍戞暟鎹�
+      treeDataList: [],
+      // 鎼滅储鏉′欢
+      filterFrom: {
+        projectName: null,  // 椤圭洰鎬绘暟
+        projectCode: null, // 椤圭洰缂栧彿
+        projectCategoryId: null, // 绫诲瀷
+        buildOrgId: null, // 寤鸿鍗曚綅
+        expirationNotifyStatus: null, // 涓存椂棰勮  0鍏抽棴 1寮�鍚�
+        approvalDate: null, // 鎵瑰鏃堕棿
+        createTime: null // 鍒涘缓鏃堕棿
+      },
+      topInfo: {
+        projectTotal: 0,  // 椤圭洰鎬绘暟
+        awaitNum: 0,  // 鏈紑宸�
+        ingNum: 0,  // 杩涜涓�
+        postponeNum: 0,  // 宸插欢鏈�
+        endNum: 0,  // 宸插畬鎴�
+        cancelNum: 0,  // 宸插彇娑�
+      },
+      page: {
+        pageNum: 1,
+        pageSize: 10,
+        total: 0
+      },
+      tableData: [] // 鍒楄〃鏁版嵁
+    }
+  },
+  mounted() {
+    this.getTopInfo()
+    this.search(1)
+  },
+  methods: {
+    // 淇敼褰撳墠琛岄璀︾姸鎬�
+    updateStatus(row){
+      let vm = this
+      let text = row.expirationNotifyStatus == 1 ? "鍏抽棴" : "寮�鍚�";
+      vm.$modal.confirm('纭瑕�' + text +'鍚楋紵').then(function() {
+        let params = Object.assign({},row)
+        params.status = row.expirationNotifyStatus == 1 ? 0 : 1
+        information.updateInfoStatus(params).then(res=>{
+          if(res){
+            row.status = row.expirationNotifyStatus == 1 ? 0 : 1
+            vm.$message.success(text + "鎴愬姛");
+            vm.search()
+          }
+        })
+      })
+    },
+    // 璇︽儏
+    toDetail(id){
+      this.comSetting = {
+        id,
+        title:'椤圭洰璇︽儏'
+      }
+      this.detailShow = true
+    },
+    changeType(e){
+      this.curId = e
+    },
+    getTopInfo() {
+      information.getTotal().then(res => {
+        this.topInfo = res
+      })
+    },
+    //鍒嗛〉
+    handleSizeChange(pageSize) {
+      this.page.pageSize = pageSize;
+      this.search(1);
+    },
+    handleCurrentChange(pageNum) {
+      this.page.pageNum = pageNum;
+      this.search(1);
+    },
+    // 鏌ヨtable鍒楄〃
+    search(pageNum) {
+      if(pageNum){
+        this.page.pageNum = pageNum
+      }
+      this.loading = true
+      let params = Object.assign(this.filterFrom, this.page)
+      information.getInfolist(params).then(res => {
+        this.tableData = res.datas
+        this.page = {
+          pageIndex: res.pageIndex,
+          pageSize: res.pageSize,
+          totalRows: res.totalRows
+        }
+        this.loading = false
+      })
+    },
+    fifterForm(params) {
+      this.filterFrom = Object.assign(this.filterFrom, params)
+      this.search(1)
+    },
+    getStatusText(state) {
+      // 0 鏈紑宸� 1 杩涜涓� 2 宸插畬鎴� 3 宸插彇娑� 4 宸插欢鏈�
+      let obj = {
+        text: '',
+        type: 'success'
+      }
+      switch (state) {
+        case 0:
+          obj.text = '鏈紑宸�'
+          obj.type = 'info'
+          break
+        case 1:
+          obj.text = '杩涜涓�'
+          obj.type = 'primary'
+          break
+        case 2:
+          obj.text = '宸插畬鎴�'
+          obj.type = 'success'
+          break
+        case 3:
+          obj.text = '宸插彇娑�'
+          obj.type = 'warning'
+          break
+        case 4:
+          obj.text = '宸插欢鏈�'
+          obj.type = 'danger'
+          break
+      }
+      return obj
+    },
+    warnSetting(row){
+      this.comSetting = {
+        id:row.id,
+        createOrgId:row.createOrgId,
+        tempExpirationNotifyId: row.tempExpirationNotifyId,
+        title:'棰勮璁剧疆'
+      }
+      this.warningShow = true
+    },
+    sendCode(){
+
+    },
+    // 涓嬭揪鎶曡祫
+    moneySetting(id){
+      this.comSetting = {
+        id,
+        title:'涓嬭揪鎶曡祫'
+      }
+      this.moneyShow = true
+    }
+  }
+}
+</script>
+
+<style scoped>
+.total-item {
+  width: 15%;
+  padding: 12px 20px;
+  border-radius: 8px;
+  background-color: #eeeeee;
+}
+
+.total-item:hover {
+  cursor: pointer;
+  background-color: #0D997C;
+}
+.total-item:hover .total-num,.total-item:hover .total-title {
+  color: #ffffff;
+}
+.total-active{
+  background-color: #0D997C;
+}
+.total-active .total-num,.total-active .total-title{
+  color: #ffffff;
+}
+.total-title {
+  font-size: 14px;
+  color: #666;
+  text-align: center;
+}
+
+.total-num {
+  font-size: 22px;
+  margin-top: 5px;
+  color: #333;
+  font-weight: bold;
+  text-align: center;
+}
+.project-name {
+  letter-spacing: 1px;
+  font-size: 16px;
+  color: #333333;
+  cursor: pointer;
+}
+.project-name:hover{
+  color: #0D997C;
+}
+.m-t-10 {
+  margin-top: 10px;
+}
+</style>
diff --git a/project-web/src/views/projectManage/information/items.js b/project-web/src/views/projectManage/information/items.js
new file mode 100644
index 0000000..555e5ce
--- /dev/null
+++ b/project-web/src/views/projectManage/information/items.js
@@ -0,0 +1,62 @@
+export default [
+  {
+    type: 'text',
+    dataIndex: 'projectName',
+    label: '椤圭洰鍚嶇О',
+    defaultValue: ''
+  },
+  {
+    type: 'text',
+    dataIndex: 'projectCode',
+    label: '椤圭洰缂栧彿',
+    defaultValue: ''
+  },
+  {
+    type: 'cascader',
+    dataIndex: 'projectCategoryId',
+    label: '鍒嗙被',
+    optionsConfig: {
+      url: '/pc/p/project/category/tree',
+      props:{checkStrictly: false,value: 'id'}
+    },
+    options: []
+  },
+  {
+    type: 'cascader',
+    dataIndex: 'buildOrgId',
+    label: '寤鸿鍗曚綅',
+    optionsConfig: {
+      url: '/pc/fin/sys/tenant/select/tree_fin_tenant'
+    },
+    options: []
+  },
+  {
+    type: 'select',
+    dataIndex: 'expirationNotifyStatus',
+    label: '涓存湡棰勮',
+    defaultValue: '',
+    options: [
+      {
+        value: 1,
+        label: '姝e父'
+      },
+      {
+        value: 0,
+        label: '绂佺敤'
+      }
+    ]
+  },
+  {
+    type: 'datetimerange-picker',
+    dataIndex: 'approvalDate',
+    label: '鎵瑰鏃堕棿',
+    defaultValue: '',
+    format:'yyyy-MM-dd'
+  },
+  {
+    type: 'datetimerange-picker',
+    dataIndex: 'createTime',
+    label: '鍒涘缓鏃堕棿',
+    defaultValue: '',
+  },
+]
diff --git a/project-web/src/views/projectManage/information/nodeProgress.vue b/project-web/src/views/projectManage/information/nodeProgress.vue
new file mode 100644
index 0000000..7f0f8e7
--- /dev/null
+++ b/project-web/src/views/projectManage/information/nodeProgress.vue
@@ -0,0 +1,223 @@
+<template>
+    <div>
+      <el-drawer
+        title=""
+        :modal-append-to-body="false"
+        :before-close="close"
+        :modal="false"
+        :visible.sync="nodeShow">
+        <div class="node-info">
+          <div class="font-18 color-333 font-bold m-b-15">鑺傜偣杩涘害</div>
+          <div class="com-c-box" style="padding-left: 5px">
+            <el-timeline>
+              <!-- recList-->
+              <el-timeline-item
+                v-for="(cs, index) in 2"
+                :key="index"
+                size="large"
+                :hide-timestamp="false">
+                <div class="info-item">
+                  <div class="font-14 m-b-15">
+                    瀹屾垚浜�<span class="color-0D9">绔嬮」/鍙爺</span>闃舵鐨勫鏌ヨ妭鐐�
+                  </div>
+                  <div class="info-box">
+                    <div class="f-r f-r-between m-b-15">
+                      <div class="font-14 color-333">鍛ㄦ槦鏄�</div>
+                      <div class="font-12 color-999">2023-09-04 12:31</div>
+                    </div>
+                    <!-- 鍥剧墖-->
+                    <div class="f-r">
+                      <el-image
+                        v-for="(iItem,iIndex) in cs.imgs"
+                        class="info-img"
+                        :src="iItem"
+                        :preview-src-list="imgList">
+                      </el-image>
+                    </div>
+                    <!-- 闄勪欢 -->
+                    <div class="m-b-15" v-if="cs.files && cs.files.length>0">
+                      <div class="font-14 color-666">闄勪欢</div>
+                      <div class="f-r f-r-between file-item" v-for="(file,fIndex) in cs.files">
+                        <div class="f-r f-1">
+                          <img :src="getFileIcon(file.fileName)" alt="涓嬭浇" class="file-icon"/>
+                          <div class="file-name" @click="downLoadFile(file.url)">
+                            {{ file.fileName }}
+                          </div>
+                        </div>
+                        <div class="down-enter">鏌ョ湅</div>
+                      </div>
+                    </div>
+                    <!-- 褰撳墠椤圭洰杩涘害 -->
+                    <div>
+                      <div class="font-14 color-666">褰撳墠椤圭洰杩涘害</div>
+                      <div class="font-14 color-333 m-t-5 line-24">
+                        鍦ㄤ腑鍙颁骇鍝佺殑鐮斿彂杩囩▼涓紝浼氬嚭鐜颁笉鍚岀殑璁捐瑙勮寖鍜屽疄鐜版柟寮忥紝浣嗗叾涓線寰�瀛樺湪寰堝绫讳技鐨勯〉闈㈠拰缁勪欢锛岃繖浜涚被浼肩殑缁勪欢浼氳鎶界鎴愪竴濂楁爣鍑嗚鑼冦��
+                      </div>
+                    </div>
+                  </div>
+                </div>
+              </el-timeline-item>
+            </el-timeline>
+          </div>
+          <div class="f-r f-r-center btn-bot">
+            <my-button name="鍙栨秷" site="form" @click="close"/>
+            <my-button name="涓婃姤" site="form" @click="toSubmit"/>
+          </div>
+          <node-submit v-if="submitShow" :nodeId="nodeId" @close="submitShow=false"></node-submit>
+        </div>
+      </el-drawer>
+    </div>
+</template>
+
+<script>
+import nodeSubmit from "@/views/projectManage/information/nodeSubmit";
+import myButton from '@/components/myButton/myButton'
+import {getDownUrl} from "@/utils/base";
+export default {
+  name: "nodeProgress",
+  components: {nodeSubmit,myButton},
+  props: {
+    nodeId: {
+      type: String,
+      default: ''
+    }
+  },
+  data() {
+    return {
+      nodeShow:true,
+      submitShow:false,
+    }
+  },
+  methods:{
+    // 涓嬭浇鏂囦欢
+    downLoadFile(item) {
+      const loadingInstance = this.$loading({
+        lock: true,
+        text: '姝e湪涓嬭浇...',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)',
+      });
+      let info = JSON.parse(item)[0];
+      if (info.url.indexOf('http') !== 0) {
+        info.url = getDownUrl() + info.url;
+      }
+      // window.open(decodeURI(info.url))
+      var doc = document.createElement('a');
+      doc.href = info.url;
+      doc.download = info.fileName;
+      doc.target = '_blank';
+      doc.click();
+      loadingInstance.close();
+    },
+    getFileIcon(item) {
+      const arr = item.split('.');
+      if (arr[arr.length - 1] === 'doc' || arr[arr.length - 1] === 'docx') {
+        return require('@/assets/images/project/word.png');
+      } else if (arr[arr.length - 1] === 'pdf') {
+        return require('@/assets/images/project/pdf.png');
+      } else if (arr[arr.length - 1] === 'txt') {
+        return require('@/assets/images/project/txt.png');
+      } else if (arr[arr.length - 1] === 'xls' || arr[arr.length - 1] === 'xlsx') {
+        return require('@/assets/images/project/xls.png');
+      } else if (arr[arr.length - 1] === 'ppt' || arr[arr.length - 1] === 'pptx') {
+        return require('@/assets/images/project/ppt.png');
+      } else {
+        return require('@/assets/images/project/no-file.png');
+      }
+    },
+    close(){
+      this.$emit('close')
+    },
+    toSubmit(){
+      this.submitShow = true
+    }
+  }
+}
+</script>
+
+<style scoped>
+.com-c-box{
+  overflow-y: auto;
+  max-height: calc(100vh - 240px);
+}
+>>>.com-c-box::-webkit-scrollbar {
+  display: none;
+}
+.node-info{
+  padding:15px;
+}
+.btn-bot{
+  position: absolute;
+  left: 0;
+  bottom: 120px;
+  width: 100%;
+  padding:15px 0;
+  background-color: #FFFFFF;
+  border-top:1px solid #eeeeee;
+  z-index: 11;
+}
+>>>.el-drawer__container{
+  top:120px;
+  bottom: 0;
+}
+>>> .el-drawer__body{
+  position: relative;
+}
+>>>.el-drawer__header{
+  display: none;
+}
+.m-t-10 {
+  margin-top: 10px;
+}
+
+.m-t-5 {
+  margin-top: 5px;
+}
+
+.m-b-15 {
+  margin-bottom: 15px;
+}
+.color-0D9 {
+  color: #0D997C;
+}
+
+.info-item {
+  padding-top: 5px;
+}
+
+.info-box {
+  padding: 8px;
+  border-radius: 4px;
+  background: #f8faf9;
+}
+
+.info-img {
+  width: 92px;
+  height: 92px;
+  border-radius: 4px;
+  margin-right: 10px;
+}
+
+.file-item {
+  padding: 10px 0;
+}
+.file-icon{
+  width: 16px;
+  height: 16px;
+  margin-right: 5px;
+}
+.file-name{
+  font-size: 14px;
+  color: #333333;
+}
+.file-name:hover{
+  cursor: pointer;
+  color: #0d997c;
+}
+.down-enter{
+  cursor: pointer;
+  color: #1890ff;
+  font-size: 14px;
+  text-decoration: underline;
+}
+</style>
diff --git a/project-web/src/views/projectManage/information/nodeSubmit.vue b/project-web/src/views/projectManage/information/nodeSubmit.vue
new file mode 100644
index 0000000..4a00f3f
--- /dev/null
+++ b/project-web/src/views/projectManage/information/nodeSubmit.vue
@@ -0,0 +1,140 @@
+<template>
+  <div>
+    <el-drawer
+      title=""
+      :append-to-body="true"
+      :before-close="close"
+      :modal="false"
+      :visible.sync="nodeShow">
+      <div class="node-info">
+        <div class="font-18 color-333 font-bold m-b-15">涓婃姤</div>
+        <div class="com-c-box">
+          <el-form ref="form" :model="formData" label-width="150px" label-position="top">
+            <el-form-item label="鏈杩涘害">
+              <el-input
+                v-model="formData.progressRateInfo"
+                type="textarea"
+                :rows="3"
+                maxlength="500"
+                show-word-limit></el-input>
+            </el-form-item>
+            <el-form-item label="鍥剧墖涓婁紶">
+              <upload ref="imgs" :settings="imgSettings" :values="formData.imgs"/>
+            </el-form-item>
+            <el-form-item label="鏂囦欢涓婁紶">
+              <upload ref="files" :settings="settings" :values="formData.files"/>
+            </el-form-item>
+          </el-form>
+        </div>
+        <div class="f-r f-r-center btn-bot">
+          <my-button name="鍙栨秷" site="form" @click="close"/>
+          <my-button name="涓婃姤" site="form" @click="save"/>
+        </div>
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+import myButton from '@/components/myButton/myButton'
+import upload from '@/components/upload/index'
+import {getUploadUrl} from "@/utils/base";
+import * as information from '@/api/projectManage/information'
+export default {
+  name: "nodeProgress",
+  components: {myButton,upload},
+  props: {
+    nodeId: {
+      type: String,
+      default: ''
+    }
+  },
+  data() {
+    return {
+      dialogImageUrl:'',
+      nodeShow: true,
+      formData: {
+        progressRateInfo: '',
+        imgs:[],
+        files:[]
+      },
+      imgSettings:{
+        uploadUrl: getUploadUrl(),
+        type:'picture-card',
+        max:10,
+        num: 10,
+        title:' ',
+        accept: '.jpg,.jpeg,.png' // 闄愬埗鏍煎紡
+      },
+      settings: {
+        drag:true,
+        uploadUrl: getUploadUrl(),
+        num: 10,
+        accept: '.bmp,.pdf,.doc,.docx,.xls,.xlsx,.apk,.zip' // 闄愬埗鏍煎紡
+      }
+    }
+  },
+  methods: {
+    close() {
+      this.$emit('close')
+    },
+    save() {
+      this.$refs.workForm.validate((valid) => {
+        if (valid) {
+          let params = Object.assign({}, this.formData)
+          let file = this.$refs.files.getContent()
+          params.fileId = JSON.stringify(file)
+          let images = this.$refs.images.getContent()
+          params.images = JSON.stringify(images)
+        }
+      })
+      information.nodeSubmit(params).then(res => {
+        if (res) {
+          this.$message.success('淇濆瓨鎴愬姛锛�')
+          this.$emit('close')
+        } else {
+          this.$message.error('淇濆瓨澶辫触')
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+.node-info {
+  padding: 15px;
+}
+
+.com-c-box {
+  overflow-y: auto;
+  max-height: calc(100vh - 240px);
+}
+
+>>> .com-c-box::-webkit-scrollbar {
+  display: none;
+}
+
+>>> .el-drawer__container {
+  top: 120px;
+}
+>>> .el-drawer__body{
+  position: relative;
+}
+>>> .el-drawer__header {
+  display: none;
+}
+.m-b-15{
+  margin-bottom: 15px;
+}
+.btn-bot{
+  position: absolute;
+  left: 0;
+  bottom: 120px;
+  width: 100%;
+  padding:15px 0;
+  background-color: #FFFFFF;
+  border-top:1px solid #eeeeee;
+  z-index: 11;
+}
+</style>
diff --git a/project-web/src/views/projectManage/record/index.vue b/project-web/src/views/projectManage/record/index.vue
new file mode 100644
index 0000000..a75ffb1
--- /dev/null
+++ b/project-web/src/views/projectManage/record/index.vue
@@ -0,0 +1,183 @@
+<template>
+  <div class="app-container">
+    <el-card class="box-card" style="width: 100%;margin-top: 15px" shadow="never">
+      <!--鎼滅储鏉′欢-->
+      <div class="filter-container">
+        <my-search ref="searchBar" :items="items" @search="fifterForm"></my-search>
+      </div>
+      <el-row style="margin-top: 8px">
+        <el-col>
+          <!--鍒楄〃-->
+          <my-table ref="myTable" :filter="filterFrom" :table="table"/>
+        </el-col>
+      </el-row>
+    </el-card>
+    <!-- 璇︽儏 -->
+    <detail v-if="detailShow" :setting="setting" @close="detailShow=false"></detail>
+  </div>
+</template>
+
+<script>
+import MyTable from "@/components/myTable/myTable";
+import SettingIplatform from '@/utils/settingIplatform';
+import items from './items'
+import detail from  '@/views/projectManage/information/detail'
+import * as record from '@/api/projectManage/record'
+import * as DateFormatter from "@/utils/DateFormatter";
+export default {
+  name: "index",
+  components: { MyTable,detail },
+  data() {
+    return {
+      // 鎼滅储妗�
+      items: items,
+      // 鎼滅储鏉′欢
+      filterFrom: {
+        projectName: null,  // 椤圭洰鎬绘暟
+        projectCode: null, // 椤圭洰缂栧彿
+        projectCategoryId: null, // 鍒嗙被
+        buildOrgId: null, // 寤鸿鍗曚綅
+        archiveStatus: null, // 绫诲瀷  0 鏈綊妗� 1 瀹℃牳涓� 2 宸插綊妗�
+        approvalDate: null, // 鎵瑰鏃堕棿
+        createTime: null // 鍒涘缓鏃堕棿
+      },
+      detailShow:false,
+      setting:{
+        id:null,
+        title:'璇︽儏'
+      },
+      // 琛ㄦ牸鏁版嵁
+      table: {
+        showIndex: true, // 鏄惁鏄剧ず搴忓彿
+        expand: false, // 鏄惁鏄剧ず璇︽儏鏁版嵁
+        url: SettingIplatform.apiBaseURL + '/pc/p/project/info/record/list', // 璇锋眰鍦板潃
+        // 宸ュ叿鏉�
+        tools: {
+          columnsCtrl: {// 鍒楁帶鍒舵寜閽�
+            show: false
+          },
+          generalExport: {// 閫氱敤瀵煎嚭鎸夐挳
+            show: false
+          },
+          // 鑷畾涔夊伐鍏锋潯鎸夐挳
+          custom: []
+        },
+        // 鍒椾俊鎭�
+        columns: [
+          {title: '椤圭洰鍚嶇О', field: 'projectName', align: 'left',width: '240px'},
+          {title: '缂栧彿', field: 'projectCode', align: 'center', width: '180px'},
+          {title: '鍒嗙被', field: 'projectCategoryName', align: 'left', width: '150px'},
+          {title: '寤鸿鍗曚綅', field: 'buildOrgName', align: 'left', width: '200px'},
+          {title: '鎵瑰鏃堕棿', field: 'approvalDate', align: 'center', width: '180px',
+            formatter: row => {
+              return { value: DateFormatter.LongToDate(row.approvalDate) }
+            }
+          },
+          {title: '鍒涘缓鏃堕棿', field: 'createTime', align: 'center', width: '180px',
+            formatter: row => {
+              return { value: DateFormatter.LongToDateTime(row.createTime) }
+            }
+          },
+          {
+            title: '鐘舵��', field: 'archiveStatus', align: 'center', width: '120px',
+            formatter: row => {
+              return {value: row.archiveStatus == -1 ? '鏈綊妗�' : row.archiveStatus == 0 ?'瀹℃牳涓�':row.archiveStatus == 1 ?'鎷掔粷褰掓。':'宸插綊妗�'}
+            }
+          },
+        ],
+        // 鎿嶄綔淇℃伅
+        operation: {
+          width: 180,
+          align:'center',
+          show: true, // 鏄剧ず鎿嶄綔鍒�
+          attr: [
+            {
+              title: '褰掓。',
+              events: row => {
+                this.$confirm('纭瑕佸綊妗e悧锛�', {
+                  type: 'warning'
+                }).then(() => {
+                  this.gd(row.id)
+                })
+              },
+              hidden:(row) => {
+                return row.archiveStatus == 0||row.archiveStatus == 2
+              }
+            },
+            {
+              title: '杩樺師',
+              events: row => {
+                this.$confirm('纭瑕佽繕鍘熷悧锛�', {
+                  type: 'warning'
+                }).then(() => {
+                  this.hy(row.id)
+                })
+              },
+              hidden:(row) => {
+                return row.archiveStatus !== 2
+              }
+            },
+            {
+              title: '璇︽儏',
+              events: row => {
+                this.showDetail(row.id)
+              }
+            }
+          ]
+        },
+        paging: {
+          show: true, // 鏄剧ず鍒嗛〉
+          // 鍒嗛〉淇℃伅
+          page: {
+            small: false,
+            pageNum: 1,
+            pageSize: 10,
+            total: 0
+          }
+        }
+      },
+    }
+  },
+  methods:{
+    showDetail(id){
+      this.setting = {
+        id,
+        title:'椤圭洰璇︽儏'
+      }
+      this.detailShow = true
+    },
+    // 鏌ヨtable鍒楄〃
+    search(pageNum) {
+      if (pageNum != undefined) {
+        this.$refs.myTable.search(pageNum)
+      } else {
+        this.$refs.myTable.search()
+      }
+    },
+    fifterForm(params) {
+      this.filterFrom = Object.assign(this.filterFrom, params)
+      this.search(1)
+    },
+    // 褰掓。
+    gd(id){
+      let data = {id:id}
+      record.recordUpd(data).then(res=>{
+        this.$message.success('褰掓。鎴愬姛')
+        this.search(1)
+      })
+    },
+    // 杩樺師
+    hy(id){
+      let data = {id:id}
+      record.recordSave(data).then(res=>{
+        this.$message.success('杩樺師鎴愬姛')
+        this.search(1)
+      })
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/project-web/src/views/projectManage/record/items.js b/project-web/src/views/projectManage/record/items.js
new file mode 100644
index 0000000..faf8880
--- /dev/null
+++ b/project-web/src/views/projectManage/record/items.js
@@ -0,0 +1,77 @@
+export default [
+  {
+    type: 'text',
+    dataIndex: 'projectName',
+    label: '椤圭洰鍚嶇О',
+    placeholder: '璇疯緭鍏�',
+    defaultValue: ''
+  },
+  {
+    type: 'text',
+    dataIndex: 'projectCode',
+    label: '椤圭洰缂栧彿',
+    placeholder: '璇疯緭鍏�',
+    defaultValue: ''
+  },
+  {
+    type: 'cascader',
+    dataIndex: 'projectCategoryId',
+    label: '鍒嗙被',
+    placeholder: '璇烽�夋嫨',
+    optionsConfig: {
+      url: '/pc/p/project/category/tree',
+      props:{checkStrictly: false,value: 'id'}
+    },
+    options: []
+  },
+  {
+    type: 'cascader',
+    dataIndex: 'buildOrgId',
+    label: '寤鸿鍗曚綅',
+    placeholder: '璇烽�夋嫨',
+    optionsConfig: {
+      url: '/pc/fin/sys/tenant/select/tree_fin_tenant'
+    },
+    options: []
+  },
+  {
+    type: 'select',
+    dataIndex: 'archiveStatus',
+    label: '鐘舵��',
+    placeholder: '璇烽�夋嫨',
+    defaultValue: '',
+    options: [
+      {
+        value: -1,
+        label: '鏈綊妗�'
+      },
+      {
+        value: 0,
+        label: '瀹℃牳涓�'
+      },
+      {
+        value: 1,
+        label: '鎷掔粷褰掓。'
+      },
+      {
+        value: 2,
+        label: '宸插綊妗�'
+      }
+    ]
+  },
+  {
+    type: 'datetimerange-picker',
+    dataIndex: 'approvalDate',
+    label: '鎵瑰鏃堕棿',
+    placeholder: '璇烽�夋嫨',
+    defaultValue: '',
+    format:'yyyy-MM-dd'
+  },
+  {
+    type: 'datetimerange-picker',
+    dataIndex: 'createTime',
+    placeholder: '璇烽�夋嫨',
+    label: '鍒涘缓鏃堕棿',
+    defaultValue: '',
+  },
+]
diff --git a/project-web/src/views/redirect/index.vue b/project-web/src/views/redirect/index.vue
new file mode 100644
index 0000000..a447aaf
--- /dev/null
+++ b/project-web/src/views/redirect/index.vue
@@ -0,0 +1,13 @@
+<script>
+
+export default {
+  created() {
+    const { params, query } = this.$route;
+    const { path } = params;
+    this.$router.replace({ path: '/' + path, query });
+  },
+  render: function (h) {
+    return h(); // avoid warning message
+  },
+};
+</script>
diff --git a/project-web/src/views/routerView/index.vue b/project-web/src/views/routerView/index.vue
new file mode 100644
index 0000000..98240ae
--- /dev/null
+++ b/project-web/src/views/routerView/index.vue
@@ -0,0 +1,3 @@
+<template>
+  <router-view />
+</template>
diff --git a/project-web/src/views/systemManger/org/edit.vue b/project-web/src/views/systemManger/org/edit.vue
new file mode 100644
index 0000000..2ceda56
--- /dev/null
+++ b/project-web/src/views/systemManger/org/edit.vue
@@ -0,0 +1,113 @@
+<template>
+  <win-sm :title="setting.title" @close="close" :width="'800px'">
+    <el-form ref="ruleForm" :model="formData" :rules="rules" class="demo-ruleForm" label-width="100px">
+      <el-form-item label="缂栧彿" prop="code">
+        <el-input v-model="formData.code" clearable maxlength="20" show-word-limit style="width: 100%"/>
+      </el-form-item>
+      <el-form-item label="鏈烘瀯鍚嶇О" prop="name">
+        <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/>
+      </el-form-item>
+      <el-form-item label="鐘舵��" prop="status">
+        <el-radio-group v-model="formData.status">
+          <el-radio :label="1" border>鍚敤</el-radio>
+          <el-radio :label="0" border>绂佺敤</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="summary">
+        <el-input
+          v-model="formData.summary"
+          type="textarea"
+          :rows="3"
+          maxlength="100"
+          show-word-limit
+        />
+      </el-form-item>
+    </el-form>
+    <div slot="footer" align="center" class="dialog-footer">
+      <my-button name="鍙栨秷" site="form" @click="close"/>
+      <my-button name="淇濆瓨" site="form" @click="save"/>
+    </div>
+  </win-sm>
+</template>
+
+<script>
+import winSm from '@/components/win/win-sm'
+import myButton from '@/components/myButton/myButton'
+import * as finsystenant from '@/api/baseSetting/finsystenant'
+
+export default {
+  components: {winSm, myButton},
+  props: {
+    setting: {
+      type: Object,
+      default: () => {
+      }
+    }
+  },
+  data() {
+    return {
+      checkAll: false,
+      checkedList: [],
+      formData: {
+        code: '',
+        name: '',
+        status: 1,
+        summary: '',
+      },
+      rules: {
+        code: [
+          {required: true, message: '璇疯緭鍏ユ満鏋勭紪鍙�', trigger: 'blur'}
+        ],
+        name: [
+          {required: true, message: '璇疯緭鍏ユ満鏋勫悕绉�', trigger: 'blur'}
+        ]
+      }
+    }
+  },
+  created() {
+    if(this.setting.info){
+      this.formData = Object.assign({},JSON.parse(this.setting.info))
+    }
+  },
+  methods: {
+    getEditInfo(id){
+
+    },
+    close() {
+      this.$emit('close')
+    },
+    save() {
+      this.$refs.ruleForm.validate((valid) => {
+        if (valid) {
+          const params = Object.assign({}, this.formData)
+          if(this.setting.id){
+            // 缂栬緫鎺ュ彛
+            finsystenant.edit(params).then(res => {
+              if (res) {
+                this.$message.success('淇濆瓨鎴愬姛锛�')
+                this.close()
+                this.$emit('search')
+              } else {
+                this.$message.error('淇濆瓨澶辫触')
+              }
+            })
+          }else{
+            params.orgId = this.setting.orgId
+            finsystenant.add(params).then(res => {
+              if (res) {
+                this.$message.success('淇濆瓨鎴愬姛锛�')
+                this.close()
+                this.$emit('search')
+              } else {
+                this.$message.error('淇濆瓨澶辫触')
+              }
+            })
+          }
+        } else {
+          this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��')
+        }
+      })
+    }
+  }
+}
+</script>
diff --git a/project-web/src/views/systemManger/org/index.vue b/project-web/src/views/systemManger/org/index.vue
new file mode 100644
index 0000000..b7964cd
--- /dev/null
+++ b/project-web/src/views/systemManger/org/index.vue
@@ -0,0 +1,287 @@
+<template>
+  <div class="app-container">
+    <el-container>
+      <el-card shadow="never" style="width: 240px;margin-right: 15px">
+        <my-tree ref="searchTree" :tree-list="treeDataList" @setNode="nodeClick" @search="search"></my-tree>
+      </el-card>
+      <el-container>
+        <el-card class="box-card" style="width: 100%" shadow="never">
+          <!--鎼滅储鏉′欢-->
+          <div class="filter-container">
+            <my-search ref="searchBar" :items="items" @search="fifterForm"></my-search>
+          </div>
+          <el-row style="margin-top: 15px">
+            <el-col>
+              <!--鍒楄〃-->
+              <my-table-v2 ref="myTable" :filter="filterFrom" :table="table"/>
+            </el-col>
+          </el-row>
+          <!--娣诲姞/缂栬緫寮圭獥-->
+          <edit v-if="editSetting.show" :setting="editSetting" @close="editSetting.show = false" @search="search"/>
+        </el-card>
+      </el-container>
+    </el-container>
+    <my-import
+      :import-setting="importSetting"
+      :dialog-show="importSetting.dialogShow"
+      :dialog-title="importSetting.dialogTitle"
+    />
+  </div>
+</template>
+
+<script>
+import myTree from '@/components/myTree/index'
+import MyTableV2 from "@/components/myTable/myTableV2";
+import MyButton from "@/components/myButton/myButton";
+import SettingIplatform from '@/utils/settingIplatform';
+import items from './items'
+import edit from './edit'
+import * as finsystenant from '@/api/baseSetting/finsystenant'
+import myImport from '@/views/components/myImport'
+import {updStatus} from "@/api/baseSetting/finsystenant";
+import {getBaseUrl, getUploadUrl} from '@/utils/base';
+
+export default {
+  name: "index",
+  components: {MyButton, MyTableV2, edit, myTree, myImport},
+  data() {
+    return {
+      // 鎼滅储妗�
+      items: items,
+      // 鏍戞暟鎹�
+      treeDataList: [],
+      // 鎼滅储鏉′欢
+      filterFrom: {
+        tenantId: null,
+        userName: null,
+        userPhone: null,
+        status: 1
+      },
+      // 瀵煎叆
+      importSetting: {
+          dialogTitle: '瀵煎叆',
+          dialogShow: false,
+          fileSettings: {
+              data: {},
+              uploadUrl: getBaseUrl()+"/pc/fin/sys/tenant/import", // 涓婁紶鍦板潃
+              accept: '.xls', // 鏍煎紡
+              type: 'text', // 鍥炴樉褰㈠紡
+              loading: false // 瀵煎叆鏁堟灉
+          },
+          /* 妯℃澘涓嬭浇 */
+          templateSettings: {
+              templateName: '瀵煎叆妯℃澘.xls', // 鍚嶇О
+              templateUrl: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getImportTemplate' // 涓嬭浇鍦板潃
+          },
+          onSuccess: null
+      },
+      editSetting: {
+        title: '',
+        id: '',
+        orgId: '',
+        show: false,
+      },
+      // 琛ㄦ牸鏁版嵁
+      table: {
+        showIndex: true, // 鏄惁鏄剧ず搴忓彿
+        expand: false, // 鏄惁鏄剧ず璇︽儏鏁版嵁
+        url: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/select/list', // 璇锋眰鍦板潃
+        // 宸ュ叿鏉�
+        tools: {
+          columnsCtrl: {// 鍒楁帶鍒舵寜閽�
+            show: false
+          },
+          generalExport: {// 閫氱敤瀵煎嚭鎸夐挳
+            show: false
+          },
+          // 鑷畾涔夊伐鍏锋潯鎸夐挳
+          custom: [
+            {
+              name: '鏂板',
+              click: () => {
+                this.showAdd(null);
+              },
+            },
+            {
+              name: '鏈烘瀯瀵煎叆',
+              click: () => {
+                this.importOrg();
+              },
+            }
+          ]
+        },
+        // 鍒椾俊鎭�
+        columns: [
+          {title: '缂栧彿', field: 'code', align: 'center', width: '150px'},
+          {title: '鏈烘瀯鍚嶇О', field: 'name', align: 'left'},
+          {title: '灞傜骇', field: 'lv', align: 'center', width: '80px'},
+          {title: '澶囨敞', field: 'summary', align: 'left', width: '150px'},
+          {
+            field: 'belongProvince',
+            title: '鐘舵��',
+            align: 'center',
+            width: 100,
+            switch: row => {
+              const result = {}
+              if (row.status == 1) {
+                Object.assign(result, {
+                  value: true, // 寮�
+                  label: '鏄�', // 寮�鐨勬弿杩�
+                  click: () => { // 鐐瑰嚮浜嬩欢
+                    this.updState(row)
+                  }
+                })
+              } else {
+                Object.assign(result, {
+                  value: false, // 鍏�
+                  label: '鍚�', // 鍏崇殑鎻忚堪
+                  click: () => {
+                    this.updState(row)
+                  }
+                })
+              }
+              return result
+            }
+          }
+        ],
+        // 鎿嶄綔淇℃伅
+        operation: {
+          show: true, // 鏄剧ず鎿嶄綔鍒�
+          width: '150', // 鍒楀
+          attr: [
+            {
+              title: '缂栬緫',
+              events: (row) => {
+                this.showAudit(row);
+              },
+            },
+            {
+              title: '鍒犻櫎',
+              events: (row) => {
+                this.del(row);
+              },
+            }
+          ],
+        },
+        paging: {
+          show: true, // 鏄剧ず鍒嗛〉
+          // 鍒嗛〉淇℃伅
+          page: {
+            small: false,
+            pageNum: 1,
+            pageSize: 10,
+            total: 0
+          }
+        }
+      },
+    }
+  },
+  created() {
+    // 鑾峰彇鏈烘瀯鏍�
+    this.initTreeData()
+  },
+  methods: {
+    //瀵煎叆
+    importOrg() {
+        this.importSetting.dialogShow = true
+        this.importSetting.onSuccess = (response, callBack) => {
+            if (response.code===1){
+              this.$message.success(response.msg)
+              this.search(1)
+            }else{
+              this.$message.warning(response.msg)
+            }
+            callBack()
+        }
+    },
+    // 宸︿晶鏍戝垵濮嬪寲
+    initTreeData() {
+      finsystenant.getTree().then(res => {
+        const content = res || []
+        this.treeDataList.splice(0, this.treeDataList.length)
+        this.treeDataList = content
+        if (content.length > 0) {
+          this.importSetting.fileSettings.data = {pid: content[0].id}
+        }
+      })
+    },
+    updState(row) {
+      let vm = this
+      let text = row.status == 0 ? "鍚敤" : "绂佺敤";
+      vm.$modal.confirm('纭瑕�' + text + '"' + row.name + '"鍚楋紵').then(function () {
+        let params = Object.assign({}, row)
+        params.status = row.status == 1 ? 0 : 1
+        finsystenant.edit(params).then(res => {
+          if (res) {
+            row.status = row.status === 1 ? 0 : 1
+            vm.$modal.msgSuccess(text + "鎴愬姛");
+            vm.search()
+          }
+        })
+      })
+    },
+    del(row) {
+      this.$modal
+        .confirm('鏄惁纭鍒犻櫎鍚嶇О涓�"' + row.name + '"鐨勬満鏋勫悧锛�')
+        .then(function () {
+          finsystenant.del({id: row.id}).then((res) => {
+          });
+        })
+        .then((res) => {
+          this.$message.success('鍒犻櫎鎴愬姛锛�');
+          this.search()
+        })
+        .catch(() => {
+        });
+    },
+    showAdd() {
+      if (!this.editSetting.orgId) {
+        this.$message.warning('璇峰厛閫夋嫨宸︿晶鏈烘瀯')
+      } else {
+        this.editSetting.id = null;
+        this.editSetting.info = null;
+        this.editSetting.title = '鏂板';
+        this.editSetting.show = true;
+      }
+    },
+    showAudit(row) {
+      this.editSetting.id = row.id;
+      this.editSetting.info = JSON.stringify(row);
+      this.editSetting.title = '缂栬緫';
+      this.editSetting.show = true;
+    },
+    nodeClick(param) {
+      param = param || {}
+      this.p = Object.assign({}, {
+        id: param.id,
+        name: param.name
+      })
+      if (this.p.id != undefined && this.p.id != null) {
+        this.filterFrom.tenantId = this.p.id
+        this.editSetting.orgId = this.p.id
+      } else {
+        this.filterFrom.tenantId = null
+        this.editSetting.orgId = null
+      }
+      this.importSetting.fileSettings.data = {pid: param.id}
+      this.search(1)
+    },
+    // 鏌ヨtable鍒楄〃
+    search(pageNum) {
+      if (pageNum != undefined) {
+        this.$refs.myTable.search(pageNum)
+      } else {
+        this.$refs.myTable.search()
+      }
+    },
+    fifterForm(params) {
+      this.filterFrom = Object.assign(this.filterFrom, params)
+      this.search(1)
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/project-web/src/views/systemManger/org/items.js b/project-web/src/views/systemManger/org/items.js
new file mode 100644
index 0000000..4528033
--- /dev/null
+++ b/project-web/src/views/systemManger/org/items.js
@@ -0,0 +1,33 @@
+export default [
+  {
+    type: 'text',
+    dataIndex: 'name',
+    label: '鏈烘瀯鍚嶇О',
+    placeholder: '璇疯緭鍏�',
+    defaultValue: ''
+  },
+  {
+    type: 'text',
+    dataIndex: 'code',
+    label: '缂栧彿',
+    placeholder: '璇疯緭鍏�',
+    defaultValue: ''
+  },
+  {
+    type: 'select',
+    dataIndex: 'status',
+    label: '鐘舵��',
+    placeholder: '璇烽�夋嫨',
+    defaultValue: '1',
+    options: [
+      {
+        label: '鍚敤',
+        value: '1'
+      },
+      {
+        label: '绂佺敤',
+        value: '0'
+      }
+    ]
+  }
+]
diff --git a/project-web/src/views/systemManger/server/user/edit.vue b/project-web/src/views/systemManger/server/user/edit.vue
new file mode 100644
index 0000000..b5646fc
--- /dev/null
+++ b/project-web/src/views/systemManger/server/user/edit.vue
@@ -0,0 +1,285 @@
+<template>
+  <win-sm :title="setting.title" @close="close" :width="'800px'">
+    <el-alert
+      style="margin-bottom: 10px"
+      title="娓╅Θ鎻愮ず锛氱敤鎴峰垵濮嬪瘑鐮佷负123456"
+      type="warning"
+      :closable="false"
+      show-icon>
+    </el-alert>
+    <el-form ref="ruleForm" :model="formData" :rules="rules" class="demo-ruleForm" label-width="100px">
+      <el-form-item label="褰撳墠鏈烘瀯">
+        <el-input v-model="setting.tenantName" disabled style="width: 250px"/>
+      </el-form-item>
+      <el-form-item label="浜哄憳濮撳悕" prop="userName">
+        <el-input v-model="formData.userName" clearable maxlength="20" show-word-limit style="width: 250px"/>
+      </el-form-item>
+      <el-form-item label="鍛樺伐缂栧彿" prop="userCode">
+        <el-input v-model="formData.userCode" clearable maxlength="20" show-word-limit style="width: 250px"/>
+      </el-form-item>
+      <el-form-item label="鎵嬫満鍙�" prop="userPhone">
+        <el-input  v-model="formData.userPhone" clearable maxlength="20" show-word-limit
+                  style="width: 250px"/>
+      </el-form-item>
+      <el-form-item label="鎬у埆" prop="sex">
+        <el-radio-group v-model="formData.sex">
+          <el-radio :label="1" border>鐢�</el-radio>
+          <el-radio :label="2" border>濂�</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="鐘舵��" prop="status">
+        <el-radio-group v-model="formData.status">
+          <el-radio :label="1" border>鍚敤</el-radio>
+          <el-radio :label="0" border>绂佺敤</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="椤哄簭鍙�" prop="seq">
+        <el-input-number v-model="formData.seq" clearable :min="1" :max="99" show-word-limit/>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="remark">
+        <el-input
+          v-model="formData.remark"
+          type="textarea"
+          :rows="3"
+          maxlength="100"
+          show-word-limit
+        />
+      </el-form-item>
+      <el-form-item label="瑙掕壊閰嶇疆" prop="roleSetting">
+        <el-checkbox v-model="checkAll" @change="handleCheckAllChange">鍏ㄩ��</el-checkbox>
+        <div style="margin: 15px 0;"></div>
+        <el-checkbox-group v-model="checkedList" @change="handleCheckedCitiesChange">
+          <el-checkbox v-for="(r,i) in roleOptions" :label="r.role_id" :key="r.role_id">{{r.role_name}}</el-checkbox>
+        </el-checkbox-group>
+      </el-form-item>
+    </el-form>
+    <div slot="footer" align="center" class="dialog-footer">
+      <my-button name="鍙栨秷" site="form" @click="close"/>
+      <my-button name="淇濆瓨" site="form" @click="save"/>
+    </div>
+  </win-sm>
+</template>
+
+<script>
+    import winSm from '@/components/win/win-sm'
+    import myButton from '@/components/myButton/myButton'
+    import * as DateFormatter from '@/utils/DateFormatter'
+    import * as role from "@/api/system/role";
+    import * as user from "@/api/user";
+
+    export default {
+        components: {winSm, myButton},
+        props: {
+            // setting 涓』鑷冲皯鍖呭惈鎺у埗dialog鏄剧ず鎴栭殣钘忕殑灞炴��,鍏朵綑灞炴�у彲鎷撳睍
+            // 灏嗘坊鍔�/淇敼鐨勫ぇ閲忔暟鎹強閫昏緫浠庡垪琛ㄩ〉闈腑鍒嗙鍑烘潵,閬垮厤鍒楄〃椤甸潰浠g爜杩囧,瀹℃煡鍥伴毦
+            // 鑻ユ椤甸潰椤诲洖浼犳暟鎹嚦鐖堕〉闈�,鍙湪寮曠敤缁勪欢鏃舵坊鍔犱簨浠�,鏈〉闈娇鐢╰his.$emit('浜嬩欢鍚�',鍙傛暟1,鍙傛暟2...)鍥炰紶鏁版嵁
+            setting: {
+                type: Object,
+                default: () => {
+                }
+            }
+        },
+        data() {
+            return {
+                checkAll: false,
+                checkedList: [],
+                roleList: [
+                    {'id': 1, label: '鐜嬫兜1'},
+                    {'id': 2, label: '鐜嬫兜2'}
+                ],
+                // 鏌ヨ鍙傛暟
+                queryParams: {
+                    pageNum: 1,
+                    pageSize: 10,
+                    roleName: undefined,
+                    roleKey: undefined,
+                    status: undefined,
+                    orgId: 1
+                },
+                roleOptions: [],// 閫夋嫨椤�
+                roleCheckStrictly: true,
+                defaultProps: {
+                    children: 'childList',
+                    label: 'name',
+                },
+                formData: {
+                    userName: '',
+                    userCode: '',
+                    userPhone: '',
+                    sex: 1,
+                    status: 1,
+                    remark: '',
+                    seq: null,
+                },
+                rules: {
+                    userName: [
+                        {required: true, message: '璇疯緭鍏ヤ汉鍛樺鍚�', trigger: 'blur'}
+                    ],
+                    userCode: [
+                        {required: true, message: '璇疯緭鍏ュ憳宸ョ紪鍙�', trigger: 'blur'}
+                    ],
+                    userPhone: [
+                        {required: true, message: '璇疯緭鍏ユ墜鏈哄彿', trigger: 'blur'}
+                    ],
+                    sex: [
+                        {required: true, message: '璇烽�夋嫨鎬у埆', trigger: 'change'}
+                    ],
+                    seq: [
+                        {required: true, message: '璇疯緭鍏ラ『搴忓彿', trigger: 'blur'}
+                    ],
+                }
+            }
+        },
+        created() {
+            this.getInfo()
+            this.getAllRole()
+        },
+        methods: {
+            // 鑾峰彇鎵�鏈夎鑹�
+            getAllRole() {
+              const user = this.$store.getters.userInfo
+              if (user.lv == 1) {
+                this.data_scope = 1
+              }
+              if (user.lv == 2) {
+                this.data_scope = 2
+              }
+              if (user.lv == 3) {
+                this.data_scope = 3
+              }
+              role.listRoleByDataScope({dataScope: this.data_scope}).then(response => {
+                  if (response) {
+                    this.roleOptions = response;
+                  } else {
+                    this.roleOptions = [];
+                  }
+                        this.loading = false;
+                    }
+                );
+            },
+            handleCheckAllChange(val) {
+                if (val) {
+                    this.checkedList = this.roleOptions.map(x => {
+                        return x.role_id
+                    })
+                } else {
+                    this.checkedList = []
+                }
+            },
+            handleCheckedCitiesChange(value) {
+                let checkedCount = value.length;
+                this.checkAll = checkedCount === this.roleOptions.length;
+            },
+            getInfo() {
+                this.title = this.setting.title
+                if (this.setting.id != null) {
+                    // 鏌ヨ鏁版嵁
+                    user.getUser({id: this.setting.id}).then(res => {
+                        const data = res.data
+                        this.formData = Object.assign(this.formData, data)
+                        if (this.formData.projectStart != null && this.formData.projectStart > 0) {
+                            this.formData.projectStart = DateFormatter.LongToDateTime(this.formData.projectStart)
+                        }
+                        if (this.formData.projectEnd != null && this.formData.projectEnd > 0) {
+                            this.formData.projectEnd = DateFormatter.LongToDateTime(this.formData.projectEnd)
+                        }
+                        this.checkedList = res.list.map(x => {
+                            return x.role_id
+                        })
+                        if (res.list.length == this.roleOptions.length) {
+                            this.handleCheckedCitiesChange(res.list)
+                        }
+                    })
+                }
+            },
+            close() {
+                this.formData = {
+                    projectName: '',
+                    projectSubName: '',
+                    projectCode: '',
+                    projectContact: '',
+                    projectTel: '',
+                    projectEmail: '',
+                    projectStart: null,
+                    projectEnd: null,
+                    projectDesc: '',
+                    status: 1
+                },
+                    this.$emit('close')
+            },
+            save() {
+
+                this.$refs.ruleForm.validate((valid) => {
+                    if (valid) {
+                        const params = Object.assign({}, this.formData)
+                        params.roleList = this.checkedList
+                        // 鍖哄煙id
+                        params.tenantId = this.setting.tenantId
+                        params.tenantCode = this.setting.tenantCode
+                        if (params.ctiStatus == 0) {
+                            params.agentJid = ''
+                            params.workgroupJid = ''
+                            params.clientNumber = ''
+                            params.clientPwd = ''
+                        }
+                        if (params.projectStart != null && params.projectEnd != null) {
+                            params.projectStart = DateFormatter.DateToLong(params.projectStart)
+                            params.projectEnd = DateFormatter.DateToLong(params.projectEnd)
+                            if (params.projectStart >= params.projectEnd) {
+                                this.$message.error('鏈嶅姟缁撴潫鏃堕棿涓嶈兘灏忎簬鎴栬�呯瓑浜庢湇鍔″紑濮嬫椂闂�')
+                                return
+                            }
+                        }
+                        if ((params.projectStart == null && params.projectEnd != null) || (params.projectStart != null && params.projectEnd == null)) {
+                            this.$message.error('鏈嶅姟寮�濮嬫椂闂村拰鏈嶅姟缁撴潫鏃堕棿蹇呴』鎴愬鍑虹幇')
+                            return
+                        }
+                        if (params.id) {
+                            user.upd(params).then(res => {
+                                if (res) {
+                                    this.$message.success('淇濆瓨鎴愬姛锛�')
+                                    this.close()
+                                    this.$emit('search')
+                                } else {
+                                    this.$message.error('淇濆瓨澶辫触')
+                                }
+                            })
+                        } else {
+                            user.add(params).then(res => {
+                                if (res) {
+                                    this.$message.success('淇濆瓨鎴愬姛锛�')
+                                    this.close()
+                                    this.$emit('search')
+                                } else {
+                                    this.$message.error('淇濆瓨澶辫触')
+                                }
+                            })
+                        }
+                    } else {
+                        this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��')
+                    }
+                })
+            },
+            getWorkgroupsAll(){
+                callCenter.getWorkgroupsAll().then(res => {
+                    this.workgroups = res.workgroups
+                })
+            },
+            getWorkgroupAgents(workgroupName){
+                this.formData.agentJid = ''
+                this.formData.clientNumber = ''
+                this.formData.clientPwd = ''
+                this.agentExtendEntiry.agentId = ''
+                this.formData.workgroupJid = this.workgroup.workgroupJID
+                callCenter.getWorkgroupAgents(workgroupName).then(res => {
+                    this.agents = res.agents
+                })
+            },
+            onClickAgent(agent){
+                this.formData.agentJid = agent.agentExtendEntiry.agentId
+                this.formData.clientNumber = agent.agentExtendEntiry.ccClientNumber
+                this.formData.clientPwd = agent.agentExtendEntiry.ccClientPWD
+            }
+        }
+    }
+</script>
diff --git a/project-web/src/views/systemManger/server/user/editRole.vue b/project-web/src/views/systemManger/server/user/editRole.vue
new file mode 100644
index 0000000..a487e8b
--- /dev/null
+++ b/project-web/src/views/systemManger/server/user/editRole.vue
@@ -0,0 +1,160 @@
+<template>
+  <win :title="setting.title" @close="close" :width="'800px'">
+    <el-form  :model="formData"  class="demo-ruleForm" label-width="100px">
+      <el-form-item label="瑙掕壊閰嶇疆"  prop="roleSetting">
+        <el-checkbox v-model="checkAll" @change="handleCheckAllChange">鍏ㄩ��</el-checkbox>
+        <div style="margin: 15px 0;"></div>
+        <el-checkbox-group v-model="checkedList" @change="handleCheckedCitiesChange" >
+          <el-checkbox v-for="(r,i) in roleOptions" :label="r.role_id" :key="r.role_id">{{r.role_name}}</el-checkbox>
+        </el-checkbox-group>
+      </el-form-item>
+    </el-form>
+    <div slot="footer" align="center" class="dialog-footer">
+      <my-button name="鍙栨秷" site="form" @click="close" />
+      <my-button name="淇濆瓨" site="form" @click="save" />
+    </div>
+  </win>
+</template>
+
+<script>
+import win from '@/components/win'
+import myButton from '@/components/myButton/myButton'
+import * as role from "@/api/system/role";
+import * as user from "@/api/user";
+export default {
+  components: { win, myButton },
+  props: {
+    // setting 涓』鑷冲皯鍖呭惈鎺у埗dialog鏄剧ず鎴栭殣钘忕殑灞炴��,鍏朵綑灞炴�у彲鎷撳睍
+    // 灏嗘坊鍔�/淇敼鐨勫ぇ閲忔暟鎹強閫昏緫浠庡垪琛ㄩ〉闈腑鍒嗙鍑烘潵,閬垮厤鍒楄〃椤甸潰浠g爜杩囧,瀹℃煡鍥伴毦
+    // 鑻ユ椤甸潰椤诲洖浼犳暟鎹嚦鐖堕〉闈�,鍙湪寮曠敤缁勪欢鏃舵坊鍔犱簨浠�,鏈〉闈娇鐢╰his.$emit('浜嬩欢鍚�',鍙傛暟1,鍙傛暟2...)鍥炰紶鏁版嵁
+    setting: {
+      type: Object,
+      default: () => {
+      }
+    }
+  },
+  data() {
+    return {
+      data_scope: null,
+      checkAll:false,
+      checkedList:[],
+      roleList:[
+        {'id':1,label:'鐜嬫兜1'},
+        {'id':2,label:'鐜嬫兜2'}
+      ],
+        // 鏌ヨ鍙傛暟
+        queryParams: {
+            pageNum: 1,
+            pageSize: 10,
+            roleName: undefined,
+            roleKey: undefined,
+            status: 0,
+            orgId: 1
+        },
+      roleOptions: [],// 閫夋嫨椤�
+      roleCheckStrictly: true,
+      defaultProps: {
+        children: 'childList',
+        label: 'name',
+      },
+      formData: {
+        userName: '',
+        userCode: '',
+        userPhone: '',
+        sex: 1,
+        status: 1,
+        remark: '',
+        seq: null
+      }
+    }
+  },
+  created() {
+    this.getInfo()
+    this.getAllRole()
+  },
+  methods: {
+    // 鑾峰彇鎵�鏈夎鑹�
+    getAllRole() {
+      const user = this.$store.getters.userInfo
+      if (user.lv == 1) {
+        this.data_scope = 1
+      }
+      if (user.lv == 2) {
+        this.data_scope = 2
+      }
+      if (user.lv == 3) {
+        this.data_scope = 3
+      }
+      role.listRoleByDataScope({dataScope: this.data_scope}).then(response => {
+            if (response) {
+              this.roleOptions = response;
+            } else {
+              this.roleOptions = [];
+            }
+                this.loading = false;
+            }
+        );
+    },
+    handleCheckAllChange(val){
+      if(val){
+        this.checkedList = this.roleOptions.map(x=>{
+          return x.role_id
+        })
+      }else{
+        this.checkedList = []
+      }
+    },
+    handleCheckedCitiesChange(value) {
+      let checkedCount = value.length;
+      this.checkAll = checkedCount === this.roleOptions.length;
+    },
+    getInfo() {
+      this.title = this.setting.title
+      if ( this.setting.id != null ) {
+        // 鏌ヨ鏁版嵁
+        user.getUser({ id: this.setting.id }).then(res => {
+          const data = res.data
+          this.formData = Object.assign(this.formData, data)
+          this.checkedList = res.list.map(x=>{
+              return x.role_id
+          })
+          if (res.list.length===this.roleOptions.length){
+              this.handleCheckedCitiesChange(res.list)
+          }
+        })
+      }
+    },
+    close() {
+        this.formData = {
+          projectName: '',
+          projectSubName: '',
+          projectCode: '',
+          projectContact: '',
+          projectTel: '',
+          projectEmail: '',
+          projectStart: null,
+          projectEnd: null,
+          projectDesc: '',
+          status: 1
+        },
+      this.$emit('close')
+    },
+    save() {
+        const params = Object.assign({}, this.formData)
+        params.roleList=this.checkedList
+        if (params.id) {
+            console.log(params+'params')
+            user.updRole(params).then(res => {
+                if (res) {
+                    this.$message.success('淇濆瓨鎴愬姛锛�')
+                    this.close()
+                    this.$emit('search')
+                } else {
+                    this.$message.error('淇濆瓨澶辫触')
+                }
+            })
+        }
+    }
+  }
+}
+</script>
diff --git a/project-web/src/views/systemManger/server/user/index.vue b/project-web/src/views/systemManger/server/user/index.vue
new file mode 100644
index 0000000..e777bbb
--- /dev/null
+++ b/project-web/src/views/systemManger/server/user/index.vue
@@ -0,0 +1,303 @@
+<template>
+  <div class="app-container">
+    <el-row :gutter="15">
+      <!--宸︿晶鏍戝舰寮�濮�-->
+      <el-col :span="5">
+        <el-card class="box-card" shadow="never">
+          <my-tree ref="searchTree" :tree-list="treeDataList" @setNode="nodeClick" @search="search"></my-tree>
+        </el-card>
+      </el-col>
+      <!--宸︿晶鏍戝舰缁撴潫-->
+      <!--鍙充晶鍒楄〃寮�濮�-->
+      <el-col :span="19">
+        <el-card class="box-card" shadow="never">
+          <!--鎼滅储鏉′欢-->
+          <div class="filter-container">
+            <my-search ref="searchBar" :items="items" @search="fifterForm"></my-search>
+          </div>
+          <el-row style="margin-top: 15px">
+            <el-col>
+              <!--鍒楄〃-->
+              <my-table-v2 ref="myTable" :filter="filterFrom" :table="table" />
+            </el-col>
+          </el-row>
+        </el-card>
+      </el-col>
+    </el-row>
+    <!--娣诲姞/缂栬緫寮圭獥-->
+    <edit v-if="editSetting.show" :setting="editSetting" @close="editSetting.show = false" @search="search" />
+    <editRole
+      v-if="editRoleSetting.show"
+      :setting="editRoleSetting"
+      @close="editRoleSetting.show = false"
+      @search="search"
+    />
+  </div>
+</template>
+
+<script>
+import myTree from '@/components/myTree/index';
+import MyTableV2 from '@/components/myTable/myTableV2';
+import MyButton from '@/components/myButton/myButton';
+import SettingIplatform from '@/utils/settingIplatform';
+import items from './items';
+import edit from './edit';
+import editRole from './editRole';
+import * as finsystenant from '@/api/baseSetting/finsystenant';
+import * as DateFormatter from '@/utils/DateFormatter';
+import * as user from '@/api/user';
+
+export default {
+  name: 'index',
+  components: { MyButton, MyTableV2, myTree, edit, editRole },
+  data() {
+    return {
+      // 鎼滅储妗�
+      items: items,
+      // 鏍戞暟鎹�
+      treeDataList: [],
+      // 鎼滅储鏉′欢
+      filterFrom: {
+        tenantCode: 0,
+        trnantId: 0,
+        userName: null,
+        userPhone: null,
+      },
+      curOrgId: null,
+      // 娣诲姞&缂栬緫璁剧疆
+      tenantId: null, //鍖哄垝id
+      tenantCode: null, //鍖哄垝code
+      tenantName: null, //鍖哄垝鍚嶇О
+      editSetting: {
+        title: '',
+        id: '',
+        tenantId: '',
+        show: false,
+      },
+      // 缂栬緫瑙掕壊閰嶇疆
+      editRoleSetting: {
+        title: '',
+        id: '',
+        show: false,
+      },
+      // 琛ㄦ牸鏁版嵁
+      table: {
+        showIndex: true, // 鏄惁鏄剧ず搴忓彿
+        expand: false, // 鏄惁鏄剧ず璇︽儏鏁版嵁
+        url: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/user/select/list', // 璇锋眰鍦板潃
+        // 宸ュ叿鏉�
+        tools: {
+          columnsCtrl: {
+            // 鍒楁帶鍒舵寜閽�
+            show: false,
+          },
+          generalExport: {
+            // 閫氱敤瀵煎嚭鎸夐挳
+            show: false,
+          },
+          // 鑷畾涔夊伐鍏锋潯鎸夐挳
+          custom: [
+            {
+              name: '鏂板',
+              click: () => {
+                this.showAdd(null);
+              },
+            },
+          ],
+        },
+        // 鍒椾俊鎭�
+        columns: [
+          { title: '浜哄憳濮撳悕', field: 'userName', align: 'left' },
+          { title: '鍛樺伐缂栧彿', field: 'userCode', align: 'left' },
+          { title: '鎵嬫満鍙�', field: 'userPhone', align: 'center', width: 150 },
+          {
+            title: '鍒涘缓鏃堕棿',
+            field: 'createTime',
+            align: 'center',
+            width: 200,
+            formatter: (row) => {
+              return { value: DateFormatter.LongToDateTime(row.createTime) };
+            },
+          },
+          {
+            field: 'status',
+            title: '鐘舵��',
+            align: 'center',
+            width: 80,
+            switch: (row) => {
+              const result = {};
+              if (row.status == 1) {
+                Object.assign(result, {
+                  value: true, // 寮�
+                  label: '鍚敤', // 寮�鐨勬弿杩�
+                  click: () => {
+                    // 鐐瑰嚮浜嬩欢
+                    this.updState(row)
+                  },
+                });
+              } else {
+                Object.assign(result, {
+                  value: false, // 鍏�
+                  label: '绂佺敤', // 鍏崇殑鎻忚堪
+                  click: () => {
+                    this.updState(row)
+                  },
+                });
+              }
+              return result;
+            },
+          }
+        ],
+        // 鎿嶄綔淇℃伅
+        operation: {
+          show: true, // 鏄剧ず鎿嶄綔鍒�
+          width: '250', // 鍒楀
+          attr: [
+            {
+              title: '瑙掕壊',
+              events: (row) => {
+                this.showEditRole(row.id);
+              },
+            },
+            {
+              title: '缂栬緫',
+              events: (row) => {
+                this.showAdd(row.id);
+              },
+            },
+            {
+              title: '瀵嗙爜鍒濆鍖�',
+              events: (row) => {
+                this.updPassWord(row);
+              },
+            },
+          ],
+        },
+        paging: {
+          show: true, // 鏄剧ず鍒嗛〉
+          // 鍒嗛〉淇℃伅
+          page: {
+            small: false,
+            pageNum: 1,
+            pageSize: 10,
+            total: 0,
+          },
+        },
+      },
+    };
+  },
+  created() {
+    // 鑾峰彇鏈烘瀯鏍�
+    this.initTreeData();
+  },
+  methods: {
+    // 宸︿晶鏍戝垵濮嬪寲
+    initTreeData() {
+      finsystenant.getTree().then((res) => {
+        const content = res || [];
+        this.treeDataList.splice(0, this.treeDataList.length);
+        this.treeDataList = content;
+        if (this.treeDataList && this.treeDataList.length > 0) {
+          this.tenantId = this.treeDataList[0].id;
+          this.tenantName = this.treeDataList[0].label;
+          this.tenantCode = this.treeDataList[0].code;
+        }
+      });
+    },
+    updState(row) {
+      let vm = this
+      let text = row.status === 0 ? "鍚敤" : "绂佺敤";
+      vm.$modal.confirm('纭瑕�' + text + '"' + row.userName + '"鍚楋紵').then(function() {
+        let params = Object.assign({},row)
+        params.status = row.status === 1 ? 0 : 1
+        user.updateStatus(params).then(res=>{
+          if(res){
+            row.status = row.status === 1 ? 0 : 1
+            vm.$modal.msgSuccess(text + "鎴愬姛");
+          }
+        })
+      })
+    },
+    nodeClick(param) {
+      param = param || {};
+      this.p = Object.assign(
+        {},
+        {
+          id: param.id,
+          name: param.name,
+          code: param.code,
+        },
+      );
+      if (this.p.code != undefined && this.p.code != null) {
+        this.filterFrom.tenantCode = this.p.code;
+        this.tenantId = this.p.id;
+        this.tenantName = this.p.name;
+        this.editSetting.tenantCode = this.p.code;
+      } else {
+        this.filterFrom.tenantCode = 0;
+      }
+      this.table.paging.page.pageNum = 1;
+      this.search(1);
+    },
+    /** 鍒濆鍖栧瘑鐮� */
+    updPassWord(row) {
+      this.$modal
+        .confirm('鏄惁纭鍒濆鍖栧悕绉颁负"' + row.userName + '"鐨勫瘑鐮侊紵')
+        .then(function () {
+          user.updPassWord(row).then((res) => {});
+        })
+        .then((res) => {
+          this.$message.success('鍒濆鍖栧瘑鐮佹垚鍔燂紒');
+          this.search();
+        })
+        .catch(() => {});
+    },
+    // 鏌ヨtable鍒楄〃
+    search(pageNum) {
+      if (pageNum != undefined) {
+        this.$refs.myTable.search(pageNum);
+      } else {
+        this.$refs.myTable.search();
+      }
+    },
+    fifterForm(params) {
+      this.filterFrom = Object.assign(this.filterFrom, params);
+      this.search();
+    },
+    showAdd(id) {
+      let title = '娣诲姞';
+      if (id != null) {
+        title = '缂栬緫';
+      }
+      if (!this.tenantName) {
+        this.$message.warning('璇烽�夋嫨鎮ㄨ娣诲姞浜哄憳鐨勬満鏋勶紒');
+        return;
+      }
+      this.editSetting.tenantId = this.tenantId;
+      this.editSetting.tenantName = this.tenantName;
+      this.editSetting.id = id;
+      this.editSetting.title = title;
+      this.editSetting.show = true;
+    },
+    showEditRole(id) {
+      let title = '娣诲姞';
+      if (id != null) {
+        title = '缂栬緫瑙掕壊';
+      }
+      this.editRoleSetting.id = id;
+      this.editRoleSetting.title = title;
+      this.editRoleSetting.show = true;
+    },
+    // 閲嶇疆
+    reset() {
+      this.filterFrom.tenantCode = null;
+      this.filterFrom.userName = null;
+      this.filterFrom.userPhone = null;
+      this.filterFrom.status = 1;
+      this.search(1);
+    },
+  },
+};
+</script>
+
+<style scoped></style>
diff --git a/project-web/src/views/systemManger/server/user/items.js b/project-web/src/views/systemManger/server/user/items.js
new file mode 100644
index 0000000..a59a1c7
--- /dev/null
+++ b/project-web/src/views/systemManger/server/user/items.js
@@ -0,0 +1,33 @@
+export default [
+  {
+    type: 'text',
+    dataIndex: 'userName',
+    label: '浜哄憳濮撳悕',
+    placeholder: "璇疯緭鍏�",
+    defaultValue: ''
+  },
+  {
+    type: 'text',
+    dataIndex: 'userPhone',
+    label: '鎵嬫満鍙�',
+    placeholder: "璇疯緭鍏�",
+    defaultValue: ''
+  },
+  {
+    type: 'select',
+    dataIndex: 'status',
+    label: '鐘舵��',
+    placeholder: '璇烽�夋嫨',
+    defaultValue: '1',
+    options: [
+      {
+        label: '鍚敤',
+        value: '1'
+      },
+      {
+        label: '绂佺敤',
+        value: '0'
+      }
+    ]
+  }
+]
diff --git a/project-web/src/views/systemSetting/dept/index.vue b/project-web/src/views/systemSetting/dept/index.vue
new file mode 100644
index 0000000..7f933c1
--- /dev/null
+++ b/project-web/src/views/systemSetting/dept/index.vue
@@ -0,0 +1,405 @@
+<template>
+  <div class="divBox">
+    <el-card class="box-card">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
+      <el-form-item label="椤剁骇鍗曚綅" prop="orgId">
+        <el-select v-model="queryParams.orgId" placeholder="閫夋嫨椤剁骇鍗曚綅" @change="getList()">
+          <el-option
+            v-for="org in this.rootOrgList"
+            :key="org.id"
+            :label="org.dept_name"
+            :value="org.id"
+          />
+        </el-select>
+      </el-form-item>
+
+      <el-form-item label="閮ㄩ棬鍚嶇О" prop="deptName">
+        <el-input
+          v-model="queryParams.deptName"
+          placeholder="璇疯緭鍏ラ儴闂ㄥ悕绉�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="鐘舵��" prop="status">
+        <el-select v-model="queryParams.status" placeholder="閮ㄩ棬鐘舵��" clearable>
+          <el-option
+            v-for="dict in constants.normalOrDisabled"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd(null)"
+          v-hasPermi="['system:dept:add']"
+        >鏂板椤剁骇鏈烘瀯</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          plain
+          icon="el-icon-sort"
+          size="mini"
+          @click="toggleExpandAll"
+        >灞曞紑/鎶樺彔</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table
+      v-if="refreshTable"
+      v-loading="loading"
+      :data="deptList"
+      row-key="id"
+      :default-expand-all="isExpandAll"
+      :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
+    >
+      <el-table-column prop="dept_name" label="閮ㄩ棬鍚嶇О" width="260"></el-table-column>
+      <el-table-column prop="order_num" label="鎺掑簭" width="200"></el-table-column>
+      <el-table-column prop="status" label="鐘舵��" width="100">
+        <template slot-scope="scope">
+<!--          <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>-->
+          <span>{{ scope.row.status == 0? '姝e父':'绂佺敤' }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="create_time" width="200">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.create_time) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dept:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-plus"
+            @click="handleAdd(scope.row)"
+            v-hasPermi="['system:dept:add']"
+          >鏂板</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dept:remove:query']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    </el-card>
+
+    <!-- 娣诲姞鎴栦慨鏀归儴闂ㄥ璇濇 -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="鏈烘瀯绫诲瀷" prop="org_type">
+              <el-select v-model="form.org_type" placeholder="鏈烘瀯绫诲瀷">
+                <el-option
+                  v-for="dict in constants.sysOrgType"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row>
+          <el-col :span="24" v-if="form.parent_id !== 0">
+            <el-form-item label="涓婄骇鏈烘瀯" prop="parent_id">
+              <treeselect v-model="form.parent_id" :options="deptOptions" :normalizer="normalizer" placeholder="閫夋嫨涓婄骇鏈烘瀯" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="鏈烘瀯鍚嶇О" prop="dept_name">
+              <el-input v-model="form.dept_name" placeholder="璇疯緭鍏ユ満鏋勫悕绉�" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鏄剧ず鎺掑簭" prop="order_num">
+              <el-input-number v-model="form.order_num" controls-position="right" :min="0" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="璐熻矗浜�" prop="leader">
+              <el-input v-model="form.leader" placeholder="璇疯緭鍏ヨ礋璐d汉" maxlength="20" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鑱旂郴鐢佃瘽" prop="phone">
+              <el-input v-model="form.phone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" maxlength="11" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="閭" prop="email">
+              <el-input v-model="form.email" placeholder="璇疯緭鍏ラ偖绠�" maxlength="50" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鏈烘瀯鐘舵��">
+              <el-radio-group v-model="form.status">
+                <el-radio
+                  v-for="dict in constants.normalOrDisabled"
+                  :key="dict.value"
+                  :label="dict.value"
+                >{{dict.label}}</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listDept, getDept, delDept, addDept, updateDept, listDeptExcludeChild } from "@/api/system/dept";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+
+export default {
+  name: "Dept",
+  // dicts: ['sys_normal_disable', 'sys_org_type'],
+  components: { Treeselect },
+  data() {
+    return {
+      constants: this.$constants,
+      // 閬僵灞�
+      loading: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 琛ㄦ牸鏍戞暟鎹�
+      deptList: [],
+
+      // 2022-12-01 鏍规満鏋勫垪琛紝涓汉鍙兘鍒楀嚭鑷繁鎵�鍦ㄦ牴鏈烘瀯
+      rootOrgList:[],
+      // 2022-12-03 瓒呯骇绠$悊鍛橀�夋嫨鐨勯《绾ф満鏋処D
+      selectedRootOrgId: undefined,
+
+      // 閮ㄩ棬鏍戦�夐」
+      deptOptions: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏄惁灞曞紑锛岄粯璁ゅ叏閮ㄥ睍寮�
+      isExpandAll: true,
+      // 閲嶆柊娓叉煋琛ㄦ牸鐘舵��
+      refreshTable: true,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        deptName: undefined,
+        status: undefined,
+        loadSelect: 0 // 鍔犺浇鏈烘瀯涓嬫媺閫夋嫨鍚楋紵
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        // parentId: [
+        //   { required: true, message: "涓婄骇閮ㄩ棬涓嶈兘涓虹┖", trigger: "blur" }
+        // ],
+        dept_name: [
+          { required: true, message: "閮ㄩ棬鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        order_num: [
+          { required: true, message: "鏄剧ず鎺掑簭涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        email: [
+          {
+            type: "email",
+            message: "璇疯緭鍏ユ纭殑閭鍦板潃",
+            trigger: ["blur", "change"]
+          }
+        ],
+        phone: [
+          {
+            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
+            message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜",
+            trigger: "blur"
+          }
+        ]
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鍒囨崲鏍规満鏋勯�夐」鍒楄〃锛�2022-12-03 */
+    switchOrgRootList(){
+
+    },
+
+    /** 鏌ヨ閮ㄩ棬鍒楄〃 */
+    getList() {
+      this.loading = true;
+      this.queryParams.loadSelect = 0;
+      listDept(this.queryParams).then(response => {
+        // console.log(response);
+        this.rootOrgList = response.rootOrgList;
+        // this.queryParams.orgId = this.rootOrgList[0].id;
+        this.selectedRootOrgId = response.selectedRootOrgId;
+        this.queryParams.orgId = this.selectedRootOrgId;
+        this.deptList = this.handleTree(response.deptList, "id", "parent_id");
+        this.loading = false;
+      });
+    },
+    /** 杞崲閮ㄩ棬鏁版嵁缁撴瀯 */
+    normalizer(node) {
+      if (node.children && !node.children.length) {
+        delete node.children;
+      }
+      return {
+        id: node.id,
+        label: node.dept_name,
+        children: node.children
+      };
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        id: undefined,
+        parent_id: undefined,
+        dept_name: undefined,
+        order_num: undefined,
+        leader: undefined,
+        phone: undefined,
+        email: undefined,
+        status: "0",
+        org_id: undefined, // 椤剁骇鏈烘瀯ID
+        org_type: undefined // 鏈烘瀯绫诲瀷锛氫唬鐮佽〃
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      // this.queryParams.orgId = this.rootOrgList[0].id;
+      this.queryParams.orgId = this.selectedRootOrgId;
+      this.handleQuery();
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd(row) {
+      this.reset();
+      if (row != undefined && row != null) {
+        // 鏅�氭満鏋勮兘鑾峰彇鍒楄〃涓婄殑涓婄骇ID
+        this.form.parent_id = row.id;
+        this.form.org_type = "9"; // 榛樿閫夋嫨: 閮ㄩ棬
+        // 璁剧疆鏍囧織涓� [鍔犺浇鏈烘瀯涓嬫媺閫夋嫨]锛屽洜涓哄叕鐢ㄤ竴涓帴鍙o紝2022-12-02
+        this.queryParams.loadSelect = 1;
+        listDept(this.queryParams).then(response => {
+          this.deptOptions = this.handleTree(response.deptList, "id", "parent_id");
+        });
+        this.title = "娣诲姞鏈烘瀯";
+      } else {
+        // 椤剁骇鏈烘瀯鏂板锛屾鏃� org_id = 0
+        this.form.org_id = 0;
+        this.form.parent_id = 0;
+        this.form.org_type = "0"; // 闆嗗洟(椤剁骇鏈烘瀯)
+        this.title = "娣诲姞椤剁骇鏈烘瀯";
+      }
+      this.open = true;
+      // this.title = "娣诲姞鏈烘瀯";
+
+    },
+    /** 灞曞紑/鎶樺彔鎿嶄綔 */
+    toggleExpandAll() {
+      this.refreshTable = false;
+      this.isExpandAll = !this.isExpandAll;
+      this.$nextTick(() => {
+        this.refreshTable = true;
+      });
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      getDept(row.id).then(response => {
+        this.form = response;
+        this.form.org_type = response.org_type + '';
+        this.form.status = response.status + '';
+        this.open = true;
+        this.title = "淇敼鏈烘瀯";
+      });
+      // 娣诲姞琛岃缃爣蹇椾负 [鍔犺浇鏈烘瀯涓嬫媺閫夋嫨]锛屽洜涓哄叕鐢ㄤ竴锛�2022-12-02
+      this.queryParams.loadSelect = 1;
+      // listDeptExcludeChild(row.id).then(response => {
+      listDept(this.queryParams).then(response => {
+        // this.deptOptions = this.handleTree(response.data, "id", "parent_id");
+        this.deptOptions = this.handleTree(response.deptList, "id", "parent_id");
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateDept(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addDept(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      this.$modal.confirm('鏄惁纭鍒犻櫎鍚嶇О涓�"' + row.dept_name + '"鐨勬暟鎹」锛�').then(function() {
+        return delDept(row.id);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    }
+  }
+};
+</script>
diff --git a/project-web/src/views/systemSetting/dict/data.vue b/project-web/src/views/systemSetting/dict/data.vue
new file mode 100644
index 0000000..b0836af
--- /dev/null
+++ b/project-web/src/views/systemSetting/dict/data.vue
@@ -0,0 +1,427 @@
+<template>
+  <div class="divBox">
+    <el-card class="box-card">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="瀛楀吀鍚嶇О" prop="dictType">
+        <el-select v-model="queryParams.dictType">
+          <el-option
+            v-for="item in typeOptions"
+            :key="item.dict_id"
+            :label="item.dict_name"
+            :value="item.dict_type"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="瀛楀吀鏍囩" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="璇疯緭鍏ュ瓧鍏告爣绛�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="鐘舵��" prop="status">
+        <el-select v-model="queryParams.status" placeholder="鏁版嵁鐘舵��" clearable>
+          <el-option
+            v-for="item in constants.normalOrDisabled"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-close"
+          size="mini"
+          @click="handleClose"
+        >鍏抽棴</el-button>
+      </el-col>
+<!--      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>-->
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="瀛楀吀ID" align="center" prop="dict_code" />
+      <el-table-column label="瀛楀吀鍚嶇О" align="center" prop="dict_label">
+        <template slot-scope="scope">
+          <span v-if="scope.row.list_class == '' || scope.row.list_class == 'default'">{{scope.row.dict_label}}</span>
+          <el-tag v-else :type="scope.row.list_class == 'primary' ? '' : scope.row.list_class">{{scope.row.dict_label}}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="瀛楀吀鍊�" align="center" prop="dict_value" />
+      <el-table-column label="鎺掑簭" align="center" prop="dict_sort" />
+      <el-table-column label="鐘舵��" align="center" prop="status">
+        <template slot-scope="scope">
+<!--          <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>-->
+          <span>{{ scope.row.status == 0? '姝e父':'绂佺敤' }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="鐖秈d" align="center" prop="parent_id" />
+      <el-table-column label="澶囨敞" align="center" prop="remark" :show-overflow-tooltip="true" />
+      <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="create_time" width="180">
+<!--        <template slot-scope="scope">-->
+<!--          <span>{{ parseTime(scope.row.create_time) }}</span>-->
+<!--        </template>-->
+      </el-table-column>
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+<!--    <pagination-->
+<!--      v-show="total>0"-->
+<!--      :total="total"-->
+<!--      :page.sync="queryParams.pageNum"-->
+<!--      :limit.sync="queryParams.pageSize"-->
+<!--      @pagination="getList"-->
+<!--    />-->
+    <el-pagination
+      :current-page="queryParams.pageNum"
+      :page-sizes="constants.page.limit"
+      :layout="constants.page.layout"
+      :total="this.total"
+      @size-change="getList"
+      @current-change="getList"
+    />
+    </el-card>
+
+    <!-- 娣诲姞鎴栦慨鏀瑰弬鏁伴厤缃璇濇 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" :before-close="cancel" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="瀛楀吀ID">
+          <el-input v-model="form.dict_code" :disabled="false" placeholder="涓�涓敮涓�鏁板瓧"/>
+        </el-form-item>
+        <el-form-item label="瀛楀吀绫诲瀷">
+          <el-input v-model="form.dict_type" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="瀛楀吀鍚嶇О" prop="dict_label">
+          <el-input v-model="form.dict_label" placeholder="璇疯緭鍏ユ暟鎹爣绛�" />
+        </el-form-item>
+        <el-form-item label="瀛楀吀鍊�" prop="dict_value">
+          <el-input v-model="form.dict_value" placeholder="涓嶅~鍜屽瓧鍏窱D涓�鑷�" />
+        </el-form-item>
+        <el-form-item label="鏍峰紡灞炴��" prop="css_class">
+          <el-input v-model="form.css_class" placeholder="璇疯緭鍏ユ牱寮忓睘鎬�" />
+        </el-form-item>
+        <el-form-item label="鏄剧ず鎺掑簭" prop="dict_sort">
+          <el-input-number v-model="form.dict_sort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="鍥炴樉鏍峰紡" prop="list_class">
+          <el-select v-model="form.list_class">
+            <el-option
+              v-for="item in listClassOptions"
+              :key="item.value"
+              :label="item.label + '(' + item.value + ')'"
+              :value="item.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="鐘舵��" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in constants.normalOrDisabled"
+              :key="dict.value"
+              :label="dict.value * 1"
+            >{{dict.label}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="鐖跺瓧鍏窱D" prop="dict_label">
+          <el-input v-model="form.parent_id" placeholder="鐖跺瓧鍏竔d锛屽繀濉�" />
+        </el-form-item>
+        <el-form-item label="澶囨敞" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listData, getData, delData, addData, updateData } from "@/api/system/dict/data";
+import { optionselect as getDictOptionselect, getType } from "@/api/system/dict/type";
+
+export default {
+  name: "Data",
+  // dicts: ['sys_normal_disable'],
+  data() {
+    return {
+      constants: this.$constants,
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 瀛楀吀琛ㄦ牸鏁版嵁
+      dataList: [],
+      // 榛樿瀛楀吀绫诲瀷
+      defaultDictType: "",
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏁版嵁鏍囩鍥炴樉鏍峰紡
+      listClassOptions: [
+        {
+          value: "default",
+          label: "榛樿"
+        },
+        {
+          value: "primary",
+          label: "涓昏"
+        },
+        {
+          value: "success",
+          label: "鎴愬姛"
+        },
+        {
+          value: "info",
+          label: "淇℃伅"
+        },
+        {
+          value: "warning",
+          label: "璀﹀憡"
+        },
+        {
+          value: "danger",
+          label: "鍗遍櫓"
+        }
+      ],
+      // 绫诲瀷鏁版嵁瀛楀吀
+      typeOptions: [],
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        dictName: undefined,
+        dictType: undefined,
+        status: undefined
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {
+        status: '1'
+      },
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        dict_code: [
+          { required: true, message: "瀛楀吀id蹇呴』杈撳叆", trigger: "blur" }
+        ],
+        dict_label: [
+          { required: true, message: "鏁版嵁鏍囩涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        parent_id: [
+          { required: true, message: "鐖秈d涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        // dict_value: [
+        //   { required: true, message: "鏁版嵁閿�间笉鑳戒负绌�", trigger: "blur" }
+        // ],
+        dict_sort: [
+          { required: true, message: "鏁版嵁椤哄簭涓嶈兘涓虹┖", trigger: "blur" }
+        ]
+      },
+      editMode: false
+    };
+  },
+  created() {
+    const dictId = this.$route.params && this.$route.params.dictId;
+    this.getType(dictId);
+    this.getTypeList();
+  },
+  methods: {
+    /** 鏌ヨ瀛楀吀绫诲瀷璇︾粏 */
+    getType(dictId) {
+      getType(dictId).then(response => {
+        // this.queryParams.dictType = response.data.dict_type;
+        // this.defaultDictType = response.data.dict_type;
+        this.queryParams.dictType = response.dict_type;
+        this.defaultDictType = response.dict_type;
+        this.getList();
+      });
+    },
+    /** 鏌ヨ瀛楀吀绫诲瀷鍒楄〃 */
+    getTypeList() {
+      getDictOptionselect().then(response => {
+        this.typeOptions = response.data;
+      });
+    },
+    /** 鏌ヨ瀛楀吀鏁版嵁鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listData(this.queryParams).then(response => {
+        this.dataList = response.datas;
+        this.total = response.totalRows;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        dict_code: undefined,
+        dict_label: undefined,
+        dict_value: undefined,
+        css_class: undefined,
+        list_class: 'default',
+        dict_sort: 0,
+        status: "0",
+        parent_id: undefined,
+        remark: undefined
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 杩斿洖鎸夐挳鎿嶄綔 */
+    handleClose() {
+      const obj = { path: "/system/dict" };
+      this.$tab.closeOpenPage(obj);
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.queryParams.dictType = this.defaultDictType;
+      this.handleQuery();
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.editMode = false;
+      this.open = true;
+      this.title = "娣诲姞瀛楀吀鏁版嵁";
+      // this.form.dictType = this.queryParams.dictType;
+      this.form.dict_type = this.queryParams.dictType;
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.dictCode)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      this.editMode = true;
+      const dictCode = row.dict_code || this.ids
+      getData(dictCode).then(response => {
+        this.form = response;
+        this.open = true;
+        this.title = "淇敼瀛楀吀鏁版嵁";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          // if (this.form.dict_code != undefined) {
+          if (this.editMode == true) {
+            updateData(this.form).then(response => {
+              this.$store.dispatch('dict/removeDict', this.queryParams.dictType);
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            console.log(this.form);
+            addData(this.form).then(response => {
+              this.$store.dispatch('dict/removeDict', this.queryParams.dictType);
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const dictCodes = row.dict_code || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎瀛楀吀缂栫爜涓�"' + dictCodes + '"鐨勬暟鎹」锛�').then(function() {
+        return delData(dictCodes);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+        this.$store.dispatch('dict/removeDict', this.queryParams.dictType);
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('system/dict/data/export', {
+        ...this.queryParams
+      }, `data_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/project-web/src/views/systemSetting/dict/index.vue b/project-web/src/views/systemSetting/dict/index.vue
new file mode 100644
index 0000000..73bece6
--- /dev/null
+++ b/project-web/src/views/systemSetting/dict/index.vue
@@ -0,0 +1,381 @@
+<template>
+  <div class="app-container">
+    <el-container>
+      <el-card class="box-card" style="width: 100%" shadow="never">
+<!--      <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">-->
+<!--        <el-form-item label="瀛楀吀鍚嶇О" prop="dictName">-->
+<!--          <el-input-->
+<!--            v-model="queryParams.dictName"-->
+<!--            placeholder="璇疯緭鍏�"-->
+<!--            clearable-->
+<!--            style="width: 150px"-->
+<!--            @keyup.enter.native="handleQuery"-->
+<!--          />-->
+<!--        </el-form-item>-->
+<!--        <el-form-item label="鐘舵��" prop="status">-->
+<!--          <el-select-->
+<!--            v-model="queryParams.status"-->
+<!--            placeholder="璇烽�夋嫨"-->
+<!--            clearable-->
+<!--            style="width: 150px"-->
+<!--          >-->
+<!--            <el-option-->
+<!--              v-for="item in constants.normalOrDisabled"-->
+<!--              :key="item.value"-->
+<!--              :label="item.label"-->
+<!--              :value="item.value"-->
+<!--            />-->
+<!--          </el-select>-->
+<!--        </el-form-item>-->
+<!--        <el-form-item>-->
+<!--          <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鏌ヨ</el-button>-->
+<!--          <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>-->
+<!--        </el-form-item>-->
+<!--      </el-form>-->
+<!--      <el-table v-loading="loading" :data="typeList" @selection-change="handleSelectionChange">-->
+<!--        <el-table-column type="selection" width="55" align="center" />-->
+<!--        <el-table-column label="瀛楀吀缂栧彿" align="center" prop="dict_id" />-->
+<!--        <el-table-column label="瀛楀吀鍚嶇О" align="center" prop="dict_name" :show-overflow-tooltip="true" />-->
+<!--        <el-table-column label="瀛楀吀绫诲瀷" align="center" :show-overflow-tooltip="true">-->
+<!--          <template slot-scope="scope">-->
+<!--            <router-link :to="'/systemSetting/dictdata/data/' + scope.row.dict_id" class="link-type">-->
+<!--              <span>{{ scope.row.dict_type }}</span>-->
+<!--            </router-link>-->
+<!--          </template>-->
+<!--        </el-table-column>-->
+<!--        <el-table-column label="鐘舵��" align="center" prop="status">-->
+<!--          <template slot-scope="scope">-->
+<!--            <span>{{ scope.row.status == 0? '姝e父':'绂佺敤' }}</span>-->
+<!--          </template>-->
+<!--        </el-table-column>-->
+<!--        <el-table-column label="澶囨敞" align="center" prop="remark" :show-overflow-tooltip="true" />-->
+<!--        <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="create_time" width="180">-->
+<!--          <template slot-scope="scope">-->
+<!--            <span>{{ dateTo(scope.row.create_time) }}</span>-->
+<!--          </template>-->
+<!--          &lt;!&ndash;        <template slot-scope="scope">&ndash;&gt;-->
+<!--          &lt;!&ndash;          <span>{{ parseTime(scope.row.create_time) }}</span>&ndash;&gt;-->
+<!--          &lt;!&ndash;        </template>&ndash;&gt;-->
+<!--        </el-table-column>-->
+<!--        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width" width="180">-->
+<!--          <template slot-scope="scope">-->
+<!--            <el-button-->
+<!--              size="mini"-->
+<!--              type="text"-->
+<!--              icon="el-icon-edit"-->
+<!--              @click="handleUpdate(scope.row)"-->
+<!--              v-hasPermi="['system:dict:edit']"-->
+<!--            >淇敼</el-button>-->
+<!--  &lt;!&ndash;          <el-button-->
+<!--              size="mini"-->
+<!--              type="text"-->
+<!--              icon="el-icon-delete"-->
+<!--              @click="handleDelete(scope.row)"-->
+<!--              v-hasPermi="['system:dict:remove']"-->
+<!--            >鍒犻櫎</el-button>&ndash;&gt;-->
+<!--          </template>-->
+<!--        </el-table-column>-->
+<!--      </el-table>-->
+        <!--鎼滅储鏉′欢-->
+        <div class="filter-container">
+          <my-search ref="searchBar" :items="items" @search="fifterForm"></my-search>
+        </div>
+        <el-row style="margin-top: 8px">
+          <el-col>
+            <!--鍒楄〃-->
+            <my-table-v2 ref="myTable" :filter="queryParams" :table="table"/>
+          </el-col>
+        </el-row>
+      </el-card>
+    </el-container>
+    <!-- 娣诲姞鎴栦慨鏀瑰弬鏁伴厤缃璇濇 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="瀛楀吀鍚嶇О" prop="dictName">
+          <el-input v-model="form.dictName" placeholder="璇疯緭鍏ュ瓧鍏稿悕绉�" />
+        </el-form-item>
+        <el-form-item label="瀛楀吀绫诲瀷" prop="dictType">
+          <el-input v-model="form.dictType" placeholder="璇疯緭鍏ュ瓧鍏哥被鍨�" />
+        </el-form-item>
+        <el-form-item label="鐘舵��" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="item in constants.normalOrDisabled"
+              :key="item.value"
+              :label="item.value"
+            >{{item.label}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="澶囨敞" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listType, getType, delType, addType, updateType, refreshCache } from "@/api/system/dict/type";
+import * as DateFormatter from "@/utils/DateFormatter";
+import MyTableV2 from "@/components/myTable/myTableV2";
+import SettingIplatform from '@/utils/settingIplatform';
+import items from './items'
+export default {
+  name: "Dict",
+  components: { MyTableV2 },
+  data() {
+    return {
+      constants: this.$constants,
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 瀛楀吀琛ㄦ牸鏁版嵁
+      typeList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏃ユ湡鑼冨洿
+      dateRange: [],
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        dictName: undefined,
+        dictType: undefined,
+        status: 0
+      },
+      items:items,
+      table: {
+        showIndex: true, // 鏄惁鏄剧ず搴忓彿
+        expand: false, // 鏄惁鏄剧ず璇︽儏鏁版嵁
+        url: SettingIplatform.apiBaseURL + '/system/dict/type/list', // 璇锋眰鍦板潃
+        // 宸ュ叿鏉�
+        tools: {
+          columnsCtrl: {// 鍒楁帶鍒舵寜閽�
+            show: false
+          },
+          generalExport: {// 閫氱敤瀵煎嚭鎸夐挳
+            show: false
+          },
+          // 鑷畾涔夊伐鍏锋潯鎸夐挳
+          custom: []
+        },
+        // 鍒椾俊鎭�
+        columns: [
+          {title: '瀛楀吀缂栧彿', field: 'dict_id', align: 'center', width: '100px'},
+          {title: '瀛楀吀鍚嶇О', field: 'dict_name', align: 'left'},
+          {
+            title: '瀛楀吀绫诲瀷', field: 'dict_type', align: 'left',
+            formatter: row => {
+              return {
+                value: row.dict_type
+              }
+            }
+          },
+          {
+            title: '鐘舵��', field: 'status', align: 'center', width: '180px',
+            formatter: row => {
+              return { value: row.status=== 0? '鍚敤':'绂佺敤'  }
+            }
+          },
+          /*{
+            title: '鍒涘缓鏃堕棿', field: 'create_time', align: 'center', width: '180px',
+            formatter: row => {
+              return { value: DateFormatter.LongToDateTime(row.create_time) }
+            }
+          },*/
+          {title: '澶囨敞', field: 'remark', align: 'left', width: '200px'},
+        ],
+        // 鎿嶄綔淇℃伅
+        operation: {
+          // width: 150,
+          align: 'center',
+          show: false, // 鏄剧ず鎿嶄綔鍒�
+          attr: [
+            // 鍒嗙被涓嬫湁姝e湪杩涜涓殑椤圭洰鏃讹紝缁欏嚭鎻愮ず涓嶅厑璁哥鐢ㄥ拰鍒犻櫎銆備笖绂佺敤涓�绾у垎绫诲墠闇�瑕佸厛绂佺敤涓嬮潰鐨勬墍鏈変簩绾э紝鏈夊惎鐢ㄧ殑浜岀骇鏃朵笉鍏佽绂佺敤涓�绾�
+            {
+              // checkPermission:'system:role:edit',
+              title: '淇敼',
+              events: row => {
+                this.handleUpdate(row)
+              }
+            },
+            {
+              // checkPermission: 'system:role:remove',
+              title: '鍒犻櫎',
+              events: row => {
+                this.handleDelete(row)
+              }
+            },
+          ]
+        },
+        paging: {
+          show: true, // 鏄剧ず鍒嗛〉
+          // 鍒嗛〉淇℃伅
+          page: {
+            small: false,
+            pageNum: 1,
+            pageSize: 10,
+            total: 0
+          }
+        }
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        dictName: [
+          { required: true, message: "瀛楀吀鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        dictType: [
+          { required: true, message: "瀛楀吀绫诲瀷涓嶈兘涓虹┖", trigger: "blur" }
+        ]
+      }
+    };
+  },
+  created() {
+  },
+  methods: {
+    fifterForm(params) {
+      this.queryParams = Object.assign(this.queryParams, params)
+      this.search(1)
+    },
+    // 鏌ヨtable鍒楄〃
+    search(pageNum) {
+      if (pageNum != undefined) {
+        this.$refs.myTable.search(pageNum)
+      } else {
+        this.$refs.myTable.search()
+      }
+    },
+    dateTo(val) {
+      return DateFormatter.LongToDateTime(val);
+    },
+    changeSize(e){
+      this.queryParams.pageSize = e
+      this.getList()
+    },
+    changePage(e){
+      this.queryParams.pageNum = e
+      this.getList()
+    },
+    /** 鏌ヨ瀛楀吀绫诲瀷鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listType(this.queryParams).then(response => {
+          // this.typeList = response.rows;
+          this.typeList = response.datas;
+          this.total = response.totalRows;
+          this.loading = false;
+        }
+      );
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        dictId: undefined,
+        dictName: undefined,
+        dictType: undefined,
+        status: "0",
+        remark: undefined
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞瀛楀吀绫诲瀷";
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.dictId)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const dictId = row.dict_id || this.ids
+      getType(dictId).then(response => {
+        this.form = response;
+        this.form.dictName = this.form.dict_name
+        this.form.dictType = this.form.dict_type
+        this.open = true;
+        this.title = "淇敼瀛楀吀绫诲瀷";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.dictId != undefined) {
+            updateType(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addType(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const dictIds = row.dictId || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎瀛楀吀缂栧彿涓�"' + dictIds + '"鐨勬暟鎹」锛�').then(function() {
+        return delType(dictIds);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('system/dict/type/export', {
+        ...this.queryParams
+      }, `type_${new Date().getTime()}.xlsx`)
+    },
+    /** 鍒锋柊缂撳瓨鎸夐挳鎿嶄綔 */
+    handleRefreshCache() {
+      refreshCache().then(() => {
+        this.$modal.msgSuccess("鍒锋柊鎴愬姛");
+        this.$store.dispatch('dict/cleanDict');
+      });
+    }
+  }
+};
+</script>
diff --git a/project-web/src/views/systemSetting/dict/items.js b/project-web/src/views/systemSetting/dict/items.js
new file mode 100644
index 0000000..f5596d1
--- /dev/null
+++ b/project-web/src/views/systemSetting/dict/items.js
@@ -0,0 +1,26 @@
+export default [
+  {
+    type: 'text',
+    dataIndex: 'dictName',
+    label: '瀛楀吀鍚嶇О',
+    placeholder: '璇疯緭鍏�',
+    defaultValue: ''
+  },
+  {
+    type: 'select',
+    dataIndex: 'status',
+    label: '鐘舵��',
+    placeholder: '璇烽�夋嫨',
+    defaultValue: '0',
+    options: [
+      {
+        value: '0',
+        label: '鍚敤'
+      },
+      {
+        value: '1',
+        label: '绂佺敤'
+      }
+    ]
+  }
+]
diff --git a/project-web/src/views/systemSetting/menu/index.vue b/project-web/src/views/systemSetting/menu/index.vue
new file mode 100644
index 0000000..3eb9a7d
--- /dev/null
+++ b/project-web/src/views/systemSetting/menu/index.vue
@@ -0,0 +1,481 @@
+<template>
+  <div class="divBox">
+    <el-card class="box-card">
+      <div slot="header" class="clearfix" ref="tableheader">
+        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
+          <el-form-item label="鑿滃崟鍚嶇О" prop="menuName">
+            <el-input
+                v-model="queryParams.menuName"
+                placeholder="璇疯緭鍏ヨ彍鍗曞悕绉�"
+                clearable
+                @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="鐘舵��" prop="status">
+            <el-select v-model="queryParams.status" placeholder="鑿滃崟鐘舵��" clearable>
+              <el-option
+                  v-for="dict in constants.normalOrDisabled"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+          </el-form-item>
+        </el-form>
+
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="1.5">
+            <el-button
+                type="primary"
+                plain
+                icon="el-icon-plus"
+                size="mini"
+                @click="handleAdd"
+                v-hasPermi="['system:menu:add']"
+            >鏂板
+            </el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button
+                type="info"
+                plain
+                icon="el-icon-sort"
+                size="mini"
+                @click="toggleExpandAll"
+            >灞曞紑/鎶樺彔
+            </el-button>
+          </el-col>
+        </el-row>
+      </div>
+
+      <el-table
+          v-if="refreshTable"
+          v-loading="loading"
+          :data="menuList"
+          row-key="menu_id"
+          :default-expand-all="isExpandAll"
+          :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
+      >
+        <el-table-column prop="menu_name" label="鑿滃崟鍚嶇О" :show-overflow-tooltip="true" width="160"></el-table-column>
+        <el-table-column prop="icon" label="鍥炬爣" align="center" width="100">
+          <template slot-scope="scope">
+            <i :class="'el-icon-' + scope.row.icon" style="font-size: 20px"/>
+          </template>
+        </el-table-column>
+        <el-table-column prop="order_num" label="鎺掑簭" width="60"></el-table-column>
+        <el-table-column prop="perms" label="鏉冮檺鏍囪瘑" :show-overflow-tooltip="true"></el-table-column>
+        <el-table-column prop="component" label="缁勪欢璺緞" :show-overflow-tooltip="true"></el-table-column>
+        <el-table-column prop="status" label="鐘舵��" width="80">
+          <template slot-scope="scope">
+            <span>{{ scope.row.status == 0 ? '姝e父' : '绂佺敤' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="is_show" label="鍙" width="80">
+          <template slot-scope="scope">
+            <el-tag :type="scope.row.is_show==1? '' : 'danger'">{{ scope.row.is_show == 1 ? '鏄剧ず' : '闅愯棌' }}</el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column label="鑿滃崟绫诲瀷" align="center" prop="menu_type">
+        </el-table-column>
+        <el-table-column label="鎿嶄綔" align="center" min-width="130" fixed="right">
+          <template slot-scope="scope">
+            <el-button
+                size="mini" type="text" @click="handleUpdate(scope.row)" v-hasPermi="['system:menu:edit']">淇敼
+            </el-button>
+            <el-button size="mini" type="text" @click="handleAdd(scope.row)" v-hasPermi="['system:menu:add']"
+            >鏂板
+            </el-button
+            >
+            <el-button size="mini" type="text" @click="handleDelete(scope.row)" v-hasPermi="['system:menu:remove']"
+            >鍒犻櫎
+            </el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-card>
+
+    <!-- 娣诲姞鎴栦慨鏀硅彍鍗曞璇濇 -->
+    <el-dialog :title="title" :visible.sync="open" width="680px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="涓婄骇鑿滃崟">
+              <treeselect
+                  v-model="form.parent_id"
+                  :options="menuOptions"
+                  :normalizer="normalizer"
+                  :show-count="true"
+                  placeholder="閫夋嫨涓婄骇鑿滃崟"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="鑿滃崟绫诲瀷" prop="menu_type">
+              <el-radio-group v-model="form.menu_type">
+                <el-radio label="M">鐩綍</el-radio>
+                <el-radio label="C">鑿滃崟</el-radio>
+                <el-radio label="F">鎸夐挳</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24" v-if="form.menu_type != 'F'">
+            <el-form-item label="鑿滃崟鍥炬爣" prop="icon">
+              <el-form-item>
+                <el-input placeholder="璇烽�夋嫨鑿滃崟鍥炬爣" v-model.trim="form.icon">
+                  <el-button slot="append" icon="el-icon-circle-plus-outline" @click="addIcon"></el-button>
+                </el-input>
+              </el-form-item>
+              <!--              <el-popover-->
+              <!--                placement="bottom-start"-->
+              <!--                width="460"-->
+              <!--                trigger="click"-->
+              <!--                @show="$refs['iconSelect'].reset()"-->
+              <!--              >-->
+              <!--                <IconSelect ref="iconSelect" @selected="selected" />-->
+              <!--                <el-input slot="reference" v-model="form.icon" placeholder="鐐瑰嚮閫夋嫨鍥炬爣" readonly>-->
+              <!--                  <svg-icon-->
+              <!--                    v-if="form.icon"-->
+              <!--                    slot="prefix"-->
+              <!--                    :icon-class="form.icon"-->
+              <!--                    class="el-input__icon"-->
+              <!--                    style="height: 32px;width: 16px;"-->
+              <!--                  />-->
+              <!--                  <i v-else slot="prefix" class="el-icon-search el-input__icon" />-->
+              <!--                </el-input>-->
+              <!--              </el-popover>-->
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鑿滃崟鍚嶇О" prop="menu_name">
+              <el-input v-model="form.menu_name" placeholder="璇疯緭鍏ヨ彍鍗曞悕绉�"/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鏄剧ず鎺掑簭" prop="order_num">
+              <el-input-number v-model="form.order_num" controls-position="right" :min="0"/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12" v-if="form.menu_type != 'F'">
+            <el-form-item>
+              <span slot="label">
+                <el-tooltip content="閫夋嫨鏄閾惧垯璺敱鍦板潃闇�瑕佷互`http(s)://`寮�澶�" placement="top">
+                <i class="el-icon-question"></i>
+                </el-tooltip>
+                鏄惁澶栭摼
+              </span>
+              <el-radio-group v-model="form.is_frame">
+                <el-radio label="0">鏄�</el-radio>
+                <el-radio label="1">鍚�</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12" v-if="form.menu_type != 'F'">
+            <el-form-item prop="path">
+              <span slot="label">
+                <el-tooltip content="璁块棶鐨勮矾鐢卞湴鍧�锛屽锛歚user`锛屽澶栫綉鍦板潃闇�鍐呴摼璁块棶鍒欎互`http(s)://`寮�澶�" placement="top">
+                <i class="el-icon-question"></i>
+                </el-tooltip>
+                璺敱鍦板潃
+              </span>
+              <el-input v-model="form.path" placeholder="璇疯緭鍏ヨ矾鐢卞湴鍧�"/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12" v-if="form.menu_type == 'C'">
+            <el-form-item prop="component">
+              <span slot="label">
+                <el-tooltip content="璁块棶鐨勭粍浠惰矾寰勶紝濡傦細`system/user/index`锛岄粯璁ゅ湪`views`鐩綍涓�" placement="top">
+                <i class="el-icon-question"></i>
+                </el-tooltip>
+                缁勪欢璺緞
+              </span>
+              <el-input v-model="form.component" placeholder="璇疯緭鍏ョ粍浠惰矾寰�"/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12" v-if="form.menu_type != 'M'">
+            <el-form-item>
+              <el-input v-model="form.perms" placeholder="璇疯緭鍏ユ潈闄愭爣璇�" maxlength="100"/>
+              <span slot="label">
+                <el-tooltip content="鎺у埗鍣ㄤ腑瀹氫箟鐨勬潈闄愬瓧绗︼紝濡傦細@PreAuthorize(`@ss.hasPermi('system:user:list')`)" placement="top">
+                <i class="el-icon-question"></i>
+                </el-tooltip>
+                鏉冮檺瀛楃
+              </span>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12" v-if="form.menu_type == 'C'">
+            <el-form-item>
+              <el-input v-model="form.query" placeholder="璇疯緭鍏ヨ矾鐢卞弬鏁�" maxlength="255"/>
+              <span slot="label">
+                <el-tooltip content='璁块棶璺敱鐨勯粯璁や紶閫掑弬鏁帮紝濡傦細`{"id": 1, "name": "ry"}`' placement="top">
+                <i class="el-icon-question"></i>
+                </el-tooltip>
+                璺敱鍙傛暟
+              </span>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12" v-if="form.menu_type == 'C'">
+            <el-form-item>
+              <span slot="label">
+                <el-tooltip content="閫夋嫨鏄垯浼氳`keep-alive`缂撳瓨锛岄渶瑕佸尮閰嶇粍浠剁殑`name`鍜屽湴鍧�淇濇寔涓�鑷�" placement="top">
+                <i class="el-icon-question"></i>
+                </el-tooltip>
+                鏄惁缂撳瓨
+              </span>
+              <el-radio-group v-model="form.is_cache">
+                <el-radio :label="1">缂撳瓨</el-radio>
+                <el-radio :label="0">涓嶇紦瀛�</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12" v-if="form.menu_type != 'F'">
+            <el-form-item>
+              <span slot="label">
+                <el-tooltip content="閫夋嫨闅愯棌鍒欒矾鐢卞皢涓嶄細鍑虹幇鍦ㄤ晶杈规爮锛屼絾浠嶇劧鍙互璁块棶" placement="top">
+                <i class="el-icon-question"></i>
+                </el-tooltip>
+                鏄剧ず鐘舵��
+              </span>
+              <el-radio-group v-model="form.is_show">
+                <el-radio
+                    v-for="dict in constants.showStatus"
+                    :key="dict.value"
+                    :label="dict.value"
+                >{{ dict.label }}
+                </el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12" v-if="form.menu_type != 'F'">
+            <el-form-item>
+              <span slot="label">
+                <el-tooltip content="閫夋嫨绂佺敤鍒欒矾鐢卞皢涓嶄細鍑虹幇鍦ㄤ晶杈规爮锛屼篃涓嶈兘琚闂�" placement="top">
+                <i class="el-icon-question"></i>
+                </el-tooltip>
+                鑿滃崟鐘舵��
+              </span>
+              <el-radio-group v-model="form.status">
+                <el-radio
+                    v-for="dict in constants.normalOrDisabled"
+                    :key="dict.value"
+                    :label="dict.value"
+                >{{ dict.label }}
+                </el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {listMenu, getMenu, delMenu, addMenu, updateMenu} from "@/api/system/menu";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+// import IconSelect from "@/components/RuoYi/IconSelect";
+
+export default {
+  name: "Menu",
+  // dicts: ['sys_show_hide', 'sys_normal_disable'],
+  components: {Treeselect},
+  data() {
+    return {
+      constants: this.$constants,
+      // 閬僵灞�
+      loading: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鑿滃崟琛ㄦ牸鏍戞暟鎹�
+      menuList: [],
+      // 鑿滃崟鏍戦�夐」
+      menuOptions: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏄惁灞曞紑锛岄粯璁ゅ叏閮ㄦ姌鍙�
+      isExpandAll: false,
+      // 閲嶆柊娓叉煋琛ㄦ牸鐘舵��
+      refreshTable: true,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        menuName: undefined,
+        visible: undefined
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {
+        menu_id: undefined,
+        parent_id: 0,
+        menu_name: undefined,
+        icon: undefined,
+        menu_type: "M",
+        order_num: undefined,
+        is_frame: "1",
+        is_cache: "0",
+        visible: "0",
+        status: "0"
+      },
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        menu_name: [
+          {required: true, message: "鑿滃崟鍚嶇О涓嶈兘涓虹┖", trigger: "blur"}
+        ],
+        order_num: [
+          {required: true, message: "鑿滃崟椤哄簭涓嶈兘涓虹┖", trigger: "blur"}
+        ],
+        path: [
+          {required: true, message: "璺敱鍦板潃涓嶈兘涓虹┖", trigger: "blur"}
+        ]
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    // 閫夋嫨鍥炬爣
+    // selected(name) {
+    //   this.form.icon = name;
+    // },
+    // 鐐瑰嚮鍥炬爣
+    addIcon() {
+      const _this = this;
+      this.$modalIcon(function (icon) {
+        _this.form.icon = icon;
+      });
+    },
+    /** 鏌ヨ鑿滃崟鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listMenu(this.queryParams).then(response => {
+        // console.log(response);
+        this.menuList = this.handleTree(response, "menu_id", "parent_id");
+        this.loading = false;
+      });
+    },
+    /** 杞崲鑿滃崟鏁版嵁缁撴瀯 */
+    normalizer(node) {
+      if (node.children && !node.children.length) {
+        delete node.children;
+      }
+      return {
+        id: node.menu_id,
+        label: node.menu_name,
+        children: node.children
+      };
+    },
+    /** 鏌ヨ鑿滃崟涓嬫媺鏍戠粨鏋� */
+    getTreeselect() {
+      listMenu().then(response => {
+        this.menuOptions = [];
+        const menu = {menu_id: 0, menu_name: '涓荤被鐩�', children: []};
+        menu.children = this.handleTree(response, "menu_id", "parent_id");
+        this.menuOptions.push(menu);
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        menu_id: '',
+        parent_id: 0,
+        menu_name: '',
+        icon: '',
+        menu_type: "M",
+        order_num: '',
+        is_frame: "1",
+        is_cache: "0",
+        visible: "0",
+        status: "0"
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd(row) {
+      this.reset();
+      this.getTreeselect();
+      if (row != null && row.menu_id) {
+        this.form.parent_id = row.menu_id;
+      } else {
+        this.form.parent_id = 0;
+      }
+      this.open = true;
+      this.title = "娣诲姞鑿滃崟";
+    },
+    /** 灞曞紑/鎶樺彔鎿嶄綔 */
+    toggleExpandAll() {
+      this.refreshTable = false;
+      this.isExpandAll = !this.isExpandAll;
+      this.$nextTick(() => {
+        this.refreshTable = true;
+      });
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      this.getTreeselect();
+      getMenu(row.menu_id).then(response => {
+        this.form = response;
+        this.open = true;
+        this.title = "淇敼鑿滃崟";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm: function () {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          console.log(this.form,'0-0-0-')
+          if (this.form.menu_id != undefined) {
+            delete this.form.icon_info
+            updateMenu(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            delete this.form.icon_info
+            addMenu(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      this.$modal.confirm('鏄惁纭鍒犻櫎鍚嶇О涓�"' + row.menu_name + '"鐨勬暟鎹」锛�').then(function () {
+        return delMenu(row.menu_id);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {
+      });
+    }
+  }
+};
+</script>
diff --git a/project-web/src/views/systemSetting/role/authUser.vue b/project-web/src/views/systemSetting/role/authUser.vue
new file mode 100644
index 0000000..8646e69
--- /dev/null
+++ b/project-web/src/views/systemSetting/role/authUser.vue
@@ -0,0 +1,209 @@
+<template>
+  <div class="divBox">
+    <el-card class="box-card">
+     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
+      <el-form-item label="鐢ㄦ埛鍚嶇О" prop="userName">
+        <el-input
+          v-model="queryParams.userName"
+          placeholder="璇疯緭鍏ョ敤鎴峰悕绉�"
+          clearable
+          style="width: 240px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="鎵嬫満鍙风爜" prop="phonenumber">
+        <el-input
+          v-model="queryParams.phonenumber"
+          placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�"
+          clearable
+          style="width: 240px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="openSelectUser"
+          v-hasPermi="['system:role:add']"
+        >娣诲姞鐢ㄦ埛</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-circle-close"
+          size="mini"
+          :disabled="multiple"
+          @click="cancelAuthUserAll"
+          v-hasPermi="['system:role:remove']"
+        >鎵归噺鍙栨秷鎺堟潈</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-close"
+          size="mini"
+          @click="handleClose"
+        >鍏抽棴</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="鐢ㄦ埛鍚嶇О" prop="user_name" :show-overflow-tooltip="true" />
+      <el-table-column label="鐢ㄦ埛鏄电О" prop="nick_name" :show-overflow-tooltip="true" />
+      <el-table-column label="閭" prop="email" :show-overflow-tooltip="true" />
+      <el-table-column label="鎵嬫満" prop="phonenumber" :show-overflow-tooltip="true" />
+      <el-table-column label="鐘舵��" align="center" prop="status">
+        <template slot-scope="scope">
+          <span>{{ scope.row.status == 0? '姝e父':'绂佺敤' }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="create_time" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.create_time) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-circle-close"
+            @click="cancelAuthUser(scope.row)"
+            v-hasPermi="['system:role:remove']"
+          >鍙栨秷鎺堟潈</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+<!--    <pagination-->
+<!--      v-show="total>0"-->
+<!--      :total="total"-->
+<!--      :page.sync="queryParams.pageNum"-->
+<!--      :limit.sync="queryParams.pageSize"-->
+<!--      @pagination="getList"-->
+<!--    />-->
+    <el-pagination
+      :current-page="queryParams.pageNum"
+      :page-sizes="constants.page.limit"
+      :layout="constants.page.layout"
+      :total="this.total"
+      @size-change="getList"
+      @current-change="getList"
+    />
+    </el-card>
+    <select-user ref="select" :roleId="queryParams.roleId" @ok="handleQuery" />
+  </div>
+</template>
+
+<script>
+import { allocatedUserList, authUserCancel, authUserCancelAll } from "@/api/system/role";
+import selectUser from "./selectUser";
+
+export default {
+  name: "AuthUser",
+  // dicts: ['sys_normal_disable'],
+  components: { selectUser },
+  data() {
+    return {
+      constants: this.$constants,
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鐢ㄦ埛缁�
+      userIds: [],
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 鐢ㄦ埛琛ㄦ牸鏁版嵁
+      userList: [],
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        roleId: undefined,
+        userName: undefined,
+        phonenumber: undefined
+      }
+    };
+  },
+  created() {
+    const roleId = this.$route.params && this.$route.params.roleId;
+    if (roleId) {
+      this.queryParams.roleId = roleId;
+      this.getList();
+    }
+  },
+  methods: {
+    /** 鏌ヨ鎺堟潈鐢ㄦ埛鍒楄〃 */
+    getList() {
+      this.loading = true;
+      allocatedUserList(this.queryParams).then(response => {
+          this.userList = response.datas;
+          this.total = response.totalRows;
+          this.loading = false;
+        }
+      );
+    },
+    // 杩斿洖鎸夐挳
+    handleClose() {
+      const obj = { path: "/system/role" };
+      this.$tab.closeOpenPage(obj);
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.userIds = selection.map(item => item.userId)
+      this.multiple = !selection.length
+    },
+    /** 鎵撳紑鎺堟潈鐢ㄦ埛琛ㄥ脊绐� */
+    openSelectUser() {
+      this.$refs.select.show();
+    },
+    /** 鍙栨秷鎺堟潈鎸夐挳鎿嶄綔 */
+    cancelAuthUser(row) {
+      const roleId = this.queryParams.roleId;
+      this.$modal.confirm('纭瑕佸彇娑堣鐢ㄦ埛"' + row.user_name + '"瑙掕壊鍚楋紵').then(function() {
+        return authUserCancel({ userId: row.id, roleId: roleId });
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍙栨秷鎺堟潈鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 鎵归噺鍙栨秷鎺堟潈鎸夐挳鎿嶄綔 */
+    cancelAuthUserAll(row) {
+      const roleId = this.queryParams.roleId;
+      const userIds = this.userIds.join(",");
+      this.$modal.confirm('鏄惁鍙栨秷閫変腑鐢ㄦ埛鎺堟潈鏁版嵁椤癸紵').then(function() {
+        return authUserCancelAll({ roleId: roleId, userIds: userIds });
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍙栨秷鎺堟潈鎴愬姛");
+      }).catch(() => {});
+    }
+  }
+};
+</script>
diff --git a/project-web/src/views/systemSetting/role/index.vue b/project-web/src/views/systemSetting/role/index.vue
new file mode 100644
index 0000000..e2e25f5
--- /dev/null
+++ b/project-web/src/views/systemSetting/role/index.vue
@@ -0,0 +1,710 @@
+<template>
+  <div class="app-container">
+    <el-container>
+      <el-card class="box-card" style="width: 100%" shadow="never">
+        <!--    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">-->
+        <!--      <el-form-item label="瑙掕壊鍚嶇О" prop="roleName">-->
+        <!--        <el-input-->
+        <!--          v-model="queryParams.roleName"-->
+        <!--          placeholder="璇疯緭鍏�"-->
+        <!--          clearable-->
+        <!--          @keyup.enter.native="handleQuery"-->
+        <!--          style="width: 150px"-->
+        <!--        />-->
+        <!--      </el-form-item>-->
+        <!--      <el-form-item label="鐘舵��" prop="status">-->
+        <!--        <el-select-->
+        <!--          style="width: 150px"-->
+        <!--          v-model="queryParams.status"-->
+        <!--          placeholder="璇烽�夋嫨"-->
+        <!--          clearable>-->
+        <!--          <el-option-->
+        <!--            v-for="dict in constants.normalOrDisabled"-->
+        <!--            :key="dict.value"-->
+        <!--            :label="dict.label"-->
+        <!--            :value="dict.value"-->
+        <!--          />-->
+        <!--        </el-select>-->
+        <!--      </el-form-item>-->
+        <!--      <el-form-item>-->
+        <!--        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鏌ヨ</el-button>-->
+        <!--        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>-->
+        <!--      </el-form-item>-->
+        <!--    </el-form>-->
+        <!--    <el-row :gutter="10" class="mb8">-->
+        <!--      <el-col :span="1.5">-->
+        <!--        <el-button-->
+        <!--          type="primary"-->
+        <!--          plain-->
+        <!--          icon="el-icon-plus"-->
+        <!--          size="mini"-->
+        <!--          @click="handleAdd"-->
+        <!--          v-hasPermi="['system:role:add']"-->
+        <!--        >鏂板</el-button>-->
+        <!--      </el-col>-->
+        <!--    </el-row>-->
+        <!--    <el-table v-loading="loading" :data="roleList" @selection-change="handleSelectionChange">-->
+        <!--      <el-table-column type="selection" width="55" align="center" />-->
+        <!--      <el-table-column label="瑙掕壊缂栧彿" prop="role_id" width="160" />-->
+        <!--      <el-table-column label="瑙掕壊鍚嶇О" prop="role_name" :show-overflow-tooltip="true" width="150" />-->
+        <!--      <el-table-column label="鏉冮檺瀛楃" prop="role_key" :show-overflow-tooltip="true" width="150" />-->
+        <!--      <el-table-column label="鏄剧ず椤哄簭" prop="role_sort" width="100" />-->
+        <!--      <el-table-column label="鐘舵��" align="center" width="100">-->
+        <!--        <template slot-scope="scope">-->
+        <!--          <el-switch-->
+        <!--            v-model="scope.row.status"-->
+        <!--            :active-value=0-->
+        <!--            :inactive-value=1-->
+        <!--            @change="handleStatusChange(scope.row)"-->
+        <!--          ></el-switch>-->
+        <!--        </template>-->
+        <!--      </el-table-column>-->
+        <!--      <el-table-column label="澶囨敞" align="center" prop="remark" width="180">-->
+        <!--      </el-table-column>-->
+        <!--      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width" width="180">-->
+        <!--        <template slot-scope="scope">-->
+        <!--          <el-button-->
+        <!--            size="mini"-->
+        <!--            type="text"-->
+        <!--            icon="el-icon-edit"-->
+        <!--            @click="handleUpdate(scope.row)"-->
+        <!--            v-hasPermi="['system:role:edit']"-->
+        <!--          >淇敼</el-button>-->
+        <!--          <el-button-->
+        <!--            size="mini"-->
+        <!--            type="text"-->
+        <!--            icon="el-icon-delete"-->
+        <!--            @click="handleDelete(scope.row)"-->
+        <!--            v-hasPermi="['system:role:remove']"-->
+        <!--          >鍒犻櫎</el-button>-->
+        <!--&lt;!&ndash;          <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']">-->
+        <!--            <span class="el-dropdown-link">-->
+        <!--              <i class="el-icon-d-arrow-right el-icon&#45;&#45;right"></i>鏇村-->
+        <!--            </span>-->
+        <!--            <el-dropdown-menu slot="dropdown">-->
+        <!--              <el-dropdown-item command="handleDataScope" icon="el-icon-circle-check"-->
+        <!--                v-hasPermi="['system:role:edit']">鏁版嵁鏉冮檺</el-dropdown-item>-->
+        <!--              <el-dropdown-item command="handleAuthUser" icon="el-icon-user"-->
+        <!--                v-hasPermi="['system:role:edit']">鍒嗛厤鐢ㄦ埛</el-dropdown-item>-->
+        <!--            </el-dropdown-menu>-->
+        <!--          </el-dropdown>&ndash;&gt;-->
+        <!--        </template>-->
+        <!--      </el-table-column>-->
+        <!--    </el-table>-->
+        <!--    <el-pagination-->
+        <!--      :current-page="queryParams.pageNum"-->
+        <!--      :page-sizes="constants.page.limit"-->
+        <!--      :layout="constants.page.layout"-->
+        <!--      :total="this.total"-->
+        <!--      @size-change="changeSize"-->
+        <!--      @current-change="changePage"-->
+        <!--    />-->
+        <!--鎼滅储鏉′欢-->
+        <div class="filter-container">
+          <my-search ref="searchBar" :items="items" @search="fifterForm"></my-search>
+        </div>
+        <el-row style="margin-top: 8px">
+          <el-col>
+            <!--鍒楄〃-->
+            <my-table-v2 ref="myTable" :filter="queryParams" :table="table" v-if="tableShow"/>
+          </el-col>
+        </el-row>
+      </el-card>
+    </el-container>
+    <!-- 娣诲姞鎴栦慨鏀硅鑹查厤缃璇濇 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+        <el-form-item label="瑙掕壊鍚嶇О" prop="role_name">
+          <el-input v-model="form.role_name" placeholder="璇疯緭鍏ヨ鑹插悕绉�"/>
+        </el-form-item>
+        <el-form-item prop="role_key">
+          <span slot="label">
+            <el-tooltip content="瑙掕壊鏍囪瘑锛岀洰鍓嶆殏鏈娇鐢�" placement="top">
+              <i class="el-icon-question"></i>
+            </el-tooltip>
+            瑙掕壊鏍囪瘑
+          </span>
+          <el-input v-model="form.role_key" placeholder="璇疯緭鍏ヨ鑹叉爣璇�"/>
+        </el-form-item>
+        <el-form-item label="瑙掕壊椤哄簭" prop="role_sort">
+          <el-input-number v-model="form.role_sort" controls-position="right" :min="0"/>
+        </el-form-item>
+        <el-form-item label="鐘舵��">
+          <el-radio-group v-model="form.status">
+            <el-radio :label="0">姝e父</el-radio>
+            <el-radio :label="1">绂佺敤</el-radio>
+            <!--            <el-radio-->
+            <!--              v-for="dict in constants.normalOrDisabled"-->
+            <!--              :key="dict.value"-->
+            <!--              :label="dict.value"-->
+            <!--            >{{dict.label}}</el-radio>-->
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="瑙掕壊鑼冨洿">
+          <el-radio-group v-model="form.data_scope">
+            <el-radio :label="1" checked>鐪�</el-radio>
+            <el-radio :label="2">甯�</el-radio>
+            <el-radio :label="3">鍘�</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="鑿滃崟鏉冮檺">
+          <el-checkbox v-model="menuExpand" @change="handleCheckedTreeExpand($event, 'menu')">灞曞紑/鎶樺彔</el-checkbox>
+          <el-checkbox v-model="menuNodeAll" @change="handleCheckedTreeNodeAll($event, 'menu')">鍏ㄩ��/鍏ㄤ笉閫�</el-checkbox>
+          <el-checkbox v-model="form.menu_check_strictly" @change="handleCheckedTreeConnect($event, 'menu')">鐖跺瓙鑱斿姩
+          </el-checkbox>
+          <el-tree
+            class="tree-border"
+            :data="menuOptions"
+            show-checkbox
+            ref="menu"
+            node-key="menu_id"
+            :check-strictly="!form.menu_check_strictly"
+            empty-text="鍔犺浇涓紝璇风◢鍊�"
+            :props="defaultProps"
+          ></el-tree>
+        </el-form-item>
+        <el-form-item label="澶囨敞">
+          <el-input v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer" align="center">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {listRole, getRole, delRole, addRole, updateRole, dataScope, changeRoleStatus} from "@/api/system/role";
+import {treeselect as menuTreeselect, roleMenuTreeselect} from "@/api/system/menu";
+import {treeselect as deptTreeselect, roleDeptTreeselect, listOrgRoot} from "@/api/system/dept";
+import MyTableV2 from "@/components/myTable/myTableV2";
+import SettingIplatform from '@/utils/settingIplatform';
+import items from './items'
+
+export default {
+  name: "Role",
+  components: {MyTableV2},
+  data() {
+    return {
+      radio: 3,
+      scopeOption: [
+        {value: 1, label: '鐪�'},
+        {value: 2, label: '甯�'},
+        {value: 3, label: '鍘�'},
+      ],
+      constants: this.$constants,
+      // 2022-12-15 鏍规満鏋勫垪琛紝涓汉鍙兘鍒楀嚭鑷繁鎵�鍦ㄦ牴鏈烘瀯
+      rootOrgList: [],
+      // 2022-12-15 瓒呯骇绠$悊鍛橀�夋嫨鐨勯《绾ф満鏋処D
+      selectedRootOrgId: undefined,
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 瑙掕壊琛ㄦ牸鏁版嵁
+      roleList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏄惁鏄剧ず寮瑰嚭灞傦紙鏁版嵁鏉冮檺锛�
+      openDataScope: false,
+      menuExpand: false,
+      menuNodeAll: false,
+      deptExpand: true,
+      deptNodeAll: false,
+      // 鏃ユ湡鑼冨洿
+      dateRange: [],
+      // 鏁版嵁鑼冨洿閫夐」
+      dataScopeOptions: [
+        {
+          value: "1",
+          label: "鍏ㄩ儴鏁版嵁鏉冮檺"
+        },
+        {
+          value: "2",
+          label: "鑷畾鏁版嵁鏉冮檺"
+        },
+        {
+          value: "3",
+          label: "鏈儴闂ㄦ暟鎹潈闄�"
+        },
+        {
+          value: "4",
+          label: "鏈儴闂ㄥ強浠ヤ笅鏁版嵁鏉冮檺"
+        },
+        {
+          value: "5",
+          label: "浠呮湰浜烘暟鎹潈闄�"
+        }
+      ],
+      // 鑿滃崟鍒楄〃
+      menuOptions: [],
+      // 閮ㄩ棬鍒楄〃
+      deptOptions: [],
+      // 鏌ヨ鍙傛暟
+      items: items,
+      queryParams: {
+        roleName: '',
+        roleKey: '',
+        status: 0
+      },
+      tableShow: false,
+      // 琛ㄦ牸鏁版嵁
+      table: {
+        showIndex: true, // 鏄惁鏄剧ず搴忓彿
+        expand: false, // 鏄惁鏄剧ず璇︽儏鏁版嵁
+        url: SettingIplatform.apiBaseURL + '/system/role/list', // 璇锋眰鍦板潃
+        // 宸ュ叿鏉�
+        tools: {
+          columnsCtrl: {// 鍒楁帶鍒舵寜閽�
+            show: false
+          },
+          generalExport: {// 閫氱敤瀵煎嚭鎸夐挳
+            show: false
+          },
+          // 鑷畾涔夊伐鍏锋潯鎸夐挳
+          custom: [
+            {
+              name: '鏂板',
+              checkPermission:'system:role:edit',
+              click: () => {
+                this.handleAdd(null)
+              }
+            }
+          ]
+        },
+        // 鍒椾俊鎭�
+        columns: [
+          {title: '瑙掕壊缂栧彿', field: 'role_id', align: 'center', width: '200px'},
+          {title: '瑙掕壊鍚嶇О', field: 'role_name', align: 'center', width: '260px'},
+          {title: '鏉冮檺瀛楃', field: 'role_key', align: 'center', width: '260px'},
+          {title: '鏄剧ず椤哄簭', field: 'role_sort', align: 'center', width: '100px'},
+          {
+            title: '鐘舵��', field: 'status', align: 'center', width: '100px',
+            switch: row => {
+              const result = {}
+              if (row.status == 0) {
+                Object.assign(result, {
+                  value: true, // 寮�
+                  label: '鍚敤', // 寮�鐨勬弿杩�
+                  click: () => { // 鐐瑰嚮浜嬩欢
+                    this.handleStatusChange(row)
+                  }
+                })
+              } else {
+                Object.assign(result, {
+                  value: false, // 鍏�
+                  label: '绂佺敤', // 鍏崇殑鎻忚堪
+                  click: () => {
+                    this.handleStatusChange(row)
+                  }
+                })
+              }
+              return result
+            }
+          },
+          {title: '澶囨敞', field: 'remark', align: 'left', width: '250px'},
+        ],
+        // 鎿嶄綔淇℃伅
+        operation: {
+          // width: 150,
+          align: 'center',
+          show: true, // 鏄剧ず鎿嶄綔鍒�
+          attr: [
+            // 鍒嗙被涓嬫湁姝e湪杩涜涓殑椤圭洰鏃讹紝缁欏嚭鎻愮ず涓嶅厑璁哥鐢ㄥ拰鍒犻櫎銆備笖绂佺敤涓�绾у垎绫诲墠闇�瑕佸厛绂佺敤涓嬮潰鐨勬墍鏈変簩绾э紝鏈夊惎鐢ㄧ殑浜岀骇鏃朵笉鍏佽绂佺敤涓�绾�
+            {
+              // checkPermission:'system:role:edit',
+              title: '淇敼',
+              events: row => {
+                this.handleUpdate(row)
+              }
+            },
+            {
+              // checkPermission: 'system:role:remove',
+              title: '鍒犻櫎',
+              events: row => {
+                this.handleDelete(row)
+              }
+            },
+          ]/*,
+          more:[
+            {
+              // checkPermission:'system:role:edit',
+              title: '鏁版嵁鏉冮檺',
+              events: row => {
+                this.handleDataScope(row);
+              }
+            },
+            {
+              // checkPermission:'system:role:edit',
+              title: '鍒嗛厤鐢ㄦ埛',
+              events: row => {
+                this.handleAuthUser(row);
+              }
+            },
+          ]*/
+        },
+        paging: {
+          show: true, // 鏄剧ず鍒嗛〉
+          // 鍒嗛〉淇℃伅
+          page: {
+            small: false,
+            pageNum: 1,
+            pageSize: 10,
+            total: 0
+          }
+        }
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {
+        data_scope: 1,
+        status: 1
+      },
+      defaultProps: {
+        children: "children",
+        label: "menu_name"
+      },
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        role_name: [
+          {required: true, message: "瑙掕壊鍚嶇О涓嶈兘涓虹┖", trigger: "blur"}
+        ],
+        role_key: [
+          {required: false, message: "鏉冮檺瀛楃涓嶈兘涓虹┖", trigger: "blur"}
+        ],
+        role_sort: [
+          {required: true, message: "瑙掕壊椤哄簭涓嶈兘涓虹┖", trigger: "blur"}
+        ]
+      }
+    };
+  },
+  created() {
+    this.getRootOrgList();
+  },
+  methods: {
+    fifterForm(params) {
+      this.queryParams = Object.assign(this.queryParams, params)
+      this.search(1)
+    },
+    // 鏌ヨtable鍒楄〃
+    search(pageNum) {
+      if (pageNum != undefined) {
+        this.$refs.myTable.search(pageNum)
+      } else {
+        this.$refs.myTable.search()
+      }
+    },
+    /** 鑾峰彇椤剁骇鏈烘瀯鍒楄〃閫夋嫨妗� 2022-12-15 */
+    getRootOrgList() {
+      this.loading = true;
+      listOrgRoot().then(response => {
+        this.rootOrgList = response;
+        this.selectedRootOrgId = this.rootOrgList[0].id;
+        this.queryParams.orgId = this.selectedRootOrgId;
+        this.loading = false;
+      }).then(() => {
+        this.tableShow = true
+        this.search(1);
+      }).catch(function () {
+        // this.loading = false;
+      });
+    },
+    /** 鏌ヨ瑙掕壊鍒楄〃 */
+    getList() {
+      this.loading = true;
+      this.selectedRootOrgId = this.queryParams.orgId;
+      listRole(this.queryParams).then(response => {
+          this.roleList = response.datas;
+          this.total = response.totalRows;
+          this.loading = false;
+        }
+      );
+    },
+    /** 鏌ヨ鑿滃崟鏍戠粨鏋� */
+    getMenuTreeselect() {
+      menuTreeselect().then(response => {
+        this.menuOptions = response;
+      });
+    },
+    /** 鏌ヨ閮ㄩ棬鏍戠粨鏋� */
+    getDeptTreeselect() {
+      deptTreeselect().then(response => {
+        this.deptOptions = response;
+      });
+    },
+    // 鎵�鏈夎彍鍗曡妭鐐规暟鎹�
+    getMenuAllCheckedKeys() {
+      // 鐩墠琚�変腑鐨勮彍鍗曡妭鐐�
+      let checkedKeys = this.$refs.menu.getCheckedKeys();
+      // 鍗婇�変腑鐨勮彍鍗曡妭鐐�
+      let halfCheckedKeys = this.$refs.menu.getHalfCheckedKeys();
+      checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);
+      return checkedKeys;
+    },
+    // 鎵�鏈夐儴闂ㄨ妭鐐规暟鎹�
+    getDeptAllCheckedKeys() {
+      // 鐩墠琚�変腑鐨勯儴闂ㄨ妭鐐�
+      let checkedKeys = this.$refs.dept.getCheckedKeys();
+      // 鍗婇�変腑鐨勯儴闂ㄨ妭鐐�
+      let halfCheckedKeys = this.$refs.dept.getHalfCheckedKeys();
+      checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);
+      return checkedKeys;
+    },
+    /** 鏍规嵁瑙掕壊ID鏌ヨ鑿滃崟鏍戠粨鏋� */
+    getRoleMenuTreeselect(roleId) {
+      return roleMenuTreeselect(roleId).then(response => {
+        this.menuOptions = response.menus;
+        return response;
+      });
+    },
+    /** 鏍规嵁瑙掕壊ID鏌ヨ閮ㄩ棬鏍戠粨鏋� */
+    getRoleDeptTreeselect(roleId) {
+      return roleDeptTreeselect(roleId).then(response => {
+        this.deptOptions = response.depts;
+        return response;
+      });
+    },
+    // 瑙掕壊鐘舵�佷慨鏀�
+    handleStatusChange(row) {
+      let text = row.status == 0 ? "绂佺敤" : "鍚敤";
+      this.$modal.confirm('纭瑕�' + text + '"' + row.role_name + '"瑙掕壊鍚楋紵').then(function () {
+        row.status = row.status == 0 ? 1 : 0;
+        return changeRoleStatus(row.role_id, row.status);
+      }).then(() => {
+        this.$modal.msgSuccess(text + "鎴愬姛");
+        this.search();
+      }).catch(function () {
+        row.status = row.status == 0 ? 1 : 0;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 鍙栨秷鎸夐挳锛堟暟鎹潈闄愶級
+    cancelDataScope() {
+      this.openDataScope = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      if (this.$refs.menu != undefined) {
+        this.$refs.menu.setCheckedKeys([]);
+      }
+      this.menuExpand = false,
+        this.menuNodeAll = false,
+        this.deptExpand = true,
+        this.deptNodeAll = false,
+        this.form = {
+          org_id: undefined, // 椤剁骇鏈烘瀯ID
+          role_id: undefined,
+          role_name: undefined,
+          role_key: "None",
+          role_sort: 0,
+          status: 0,
+          menuIds: [],
+          deptIds: [],
+          menu_check_strictly: true,
+          dept_check_strictly: true,
+          remark: undefined
+        };
+      this.resetForm("form");
+    },
+    changeSize(e) {
+      this.queryParams.pageSize = e
+      this.getList()
+    },
+    changePage(e) {
+      this.queryParams.pageNum = e
+      this.getList()
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.queryParams.orgId = this.selectedRootOrgId;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.roleId)
+      this.single = selection.length != 1
+      this.multiple = !selection.length
+    },
+    // 鏇村鎿嶄綔瑙﹀彂
+    handleCommand(command, row) {
+      switch (command) {
+        case "handleDataScope":
+          this.handleDataScope(row);
+          break;
+        case "handleAuthUser":
+          this.handleAuthUser(row);
+          break;
+        default:
+          break;
+      }
+    },
+    // 鏍戞潈闄愶紙灞曞紑/鎶樺彔锛�
+    handleCheckedTreeExpand(value, type) {
+      if (type == 'menu') {
+        let treeList = this.menuOptions;
+        for (let i = 0; i < treeList.length; i++) {
+          this.$refs.menu.store.nodesMap[treeList[i].id].expanded = value;
+        }
+      } else if (type == 'dept') {
+        let treeList = this.deptOptions;
+        for (let i = 0; i < treeList.length; i++) {
+          this.$refs.dept.store.nodesMap[treeList[i].id].expanded = value;
+        }
+      }
+    },
+    // 鏍戞潈闄愶紙鍏ㄩ��/鍏ㄤ笉閫夛級
+    handleCheckedTreeNodeAll(value, type) {
+      if (type == 'menu') {
+        this.$refs.menu.setCheckedNodes(value ? this.menuOptions : []);
+      } else if (type == 'dept') {
+        this.$refs.dept.setCheckedNodes(value ? this.deptOptions : []);
+      }
+    },
+    // 鏍戞潈闄愶紙鐖跺瓙鑱斿姩锛�
+    handleCheckedTreeConnect(value, type) {
+      if (type == 'menu') {
+        // this.form.menu_check_strictly = value ? true: false;
+        this.form.menu_check_strictly = value ? true : false;
+      } else if (type == 'dept') {
+        this.form.dept_check_strictly = value ? true : false;
+      }
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.getMenuTreeselect();
+      // 2022-12-18 娣诲姞涓婇《绾ф満鏋処D
+      this.form.org_id = this.selectedRootOrgId;
+      this.open = true;
+      this.title = "娣诲姞瑙掕壊";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      // const roleId = row.role_id || this.ids
+      const roleId = row.role_id;
+      const roleMenu = this.getRoleMenuTreeselect(roleId);
+      getRole(roleId).then(response => {
+        this.form = response;
+        this.open = true;
+        this.$nextTick(() => {
+          roleMenu.then(res => {
+            let checkedKeys = res.checkedKeys;
+            if (checkedKeys) {
+              checkedKeys.forEach((v) => {
+                this.$nextTick(() => {
+                  this.$refs.menu.setChecked(v, true, false);
+                })
+              })
+            }
+          });
+        });
+        this.title = "淇敼瑙掕壊";
+      });
+    },
+    /** 閫夋嫨瑙掕壊鏉冮檺鑼冨洿瑙﹀彂 */
+    dataScopeSelectChange(value) {
+      if (value !== '2') {
+        this.$refs.dept.setCheckedKeys([]);
+      }
+    },
+    /** 鍒嗛厤鏁版嵁鏉冮檺鎿嶄綔 */
+    handleDataScope(row) {
+      this.reset();
+      const roleDeptTreeselect = this.getRoleDeptTreeselect(row.role_id);
+      getRole(row.role_id).then(response => {
+        this.form = response;
+        this.openDataScope = true;
+        this.$nextTick(() => {
+          roleDeptTreeselect.then(res => {
+            this.$refs.dept.setCheckedKeys(res.checkedKeys);
+          });
+        });
+        this.title = "鍒嗛厤鏁版嵁鏉冮檺";
+      });
+    },
+    /** 鍒嗛厤鐢ㄦ埛鎿嶄綔 */
+    handleAuthUser: function (row) {
+      const roleId = row.role_id;
+      this.$router.push("/system/role-auth/user/" + roleId);
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm: function () {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          // 2022-12-19,鎶婅繖涓や釜瀛楁璁剧疆涓烘暟鍊硷紝鐩墠鏆備笉浣跨敤锛岃涓嶅悗鍙扮被鍨嬭浆鎹㈤敊璇�(boolean)
+          this.form.menu_check_strictly = 1;
+          this.form.dept_check_strictly = 1;
+
+          if (this.form.role_id != undefined) {
+            this.form.menuIds = this.getMenuAllCheckedKeys();
+            updateRole(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            this.form.menuIds = this.getMenuAllCheckedKeys();
+            addRole(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鎻愪氦鎸夐挳锛堟暟鎹潈闄愶級 */
+    submitDataScope: function () {
+      if (this.form.roleId != undefined) {
+        this.form.deptIds = this.getDeptAllCheckedKeys();
+        dataScope(this.form).then(response => {
+          this.$modal.msgSuccess("淇敼鎴愬姛");
+          this.openDataScope = false;
+          this.getList();
+        });
+      }
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const roleIds = row.role_id;
+      this.$modal.confirm('鏄惁纭鍒犻櫎瑙掕壊涓�"' + row.role_name + '"鐨勬暟鎹」锛�').then(function () {
+        return delRole(roleIds);
+      }).then(() => {
+        this.this.search();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {
+      });
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('system/role/export', {
+        ...this.queryParams
+      }, `role_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/project-web/src/views/systemSetting/role/items.js b/project-web/src/views/systemSetting/role/items.js
new file mode 100644
index 0000000..4d6cd79
--- /dev/null
+++ b/project-web/src/views/systemSetting/role/items.js
@@ -0,0 +1,26 @@
+export default [
+  {
+    type: 'text',
+    dataIndex: 'roleName',
+    label: '瑙掕壊鍚嶇О',
+    placeholder: '璇疯緭鍏�',
+    defaultValue: ''
+  },
+  {
+    type: 'select',
+    dataIndex: 'status',
+    label: '鐘舵��',
+    defaultValue: '0',
+    placeholder: '璇烽�夋嫨',
+    options: [
+      {
+        value: '0',
+        label: '鍚敤'
+      },
+      {
+        value: '1',
+        label: '绂佺敤'
+      }
+    ]
+  }
+]
diff --git a/project-web/src/views/systemSetting/role/selectUser.vue b/project-web/src/views/systemSetting/role/selectUser.vue
new file mode 100644
index 0000000..3a3b121
--- /dev/null
+++ b/project-web/src/views/systemSetting/role/selectUser.vue
@@ -0,0 +1,147 @@
+<template>
+  <!-- 鎺堟潈鐢ㄦ埛 -->
+  <el-dialog title="閫夋嫨鐢ㄦ埛" :visible.sync="visible" width="800px" top="5vh" append-to-body>
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true">
+      <el-form-item label="鐢ㄦ埛鍚嶇О" prop="userName">
+        <el-input
+          v-model="queryParams.userName"
+          placeholder="璇疯緭鍏ョ敤鎴峰悕绉�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="鎵嬫満鍙风爜" prop="phonenumber">
+        <el-input
+          v-model="queryParams.phonenumber"
+          placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+    <el-row>
+      <el-table @row-click="clickRow" ref="table" :data="userList" @selection-change="handleSelectionChange" height="260px">
+        <el-table-column type="selection" width="55"></el-table-column>
+        <el-table-column label="鐢ㄦ埛鍚嶇О" prop="user_name" :show-overflow-tooltip="true" />
+        <el-table-column label="鐢ㄦ埛鏄电О" prop="nick_name" :show-overflow-tooltip="true" />
+        <el-table-column label="閭" prop="email" :show-overflow-tooltip="true" />
+        <el-table-column label="鎵嬫満" prop="phonenumber" :show-overflow-tooltip="true" />
+        <el-table-column label="鐘舵��" align="center" prop="status">
+          <template slot-scope="scope">
+            <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>
+          </template>
+        </el-table-column>
+        <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="create_time" width="180">
+          <template slot-scope="scope">
+            <span>{{ parseTime(scope.row.create_time) }}</span>
+          </template>
+        </el-table-column>
+      </el-table>
+<!--      <pagination-->
+<!--        v-show="total>0"-->
+<!--        :total="total"-->
+<!--        :page.sync="queryParams.pageNum"-->
+<!--        :limit.sync="queryParams.pageSize"-->
+<!--        @pagination="getList"-->
+<!--      />-->
+      <el-pagination
+        :current-page="queryParams.pageNum"
+        :page-sizes="constants.page.limit"
+        :layout="constants.page.layout"
+        :total="this.total"
+        @size-change="getList"
+        @current-change="getList"
+      />
+    </el-row>
+    <div slot="footer" class="dialog-footer">
+      <el-button type="primary" @click="handleSelectUser">纭� 瀹�</el-button>
+      <el-button @click="visible = false">鍙� 娑�</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import { unallocatedUserList, authUserSelectAll } from "@/api/system/role";
+export default {
+  props: {
+    // 瑙掕壊缂栧彿
+    roleId: {
+      type: [Number, String]
+    }
+  },
+  data() {
+    return {
+      constants: this.$constants,
+      // 閬僵灞�
+      visible: false,
+      // 閫変腑鏁扮粍鍊�
+      userIds: [],
+      // 鎬绘潯鏁�
+      total: 0,
+      // 鏈巿鏉冪敤鎴锋暟鎹�
+      userList: [],
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        roleId: undefined,
+        userName: undefined,
+        phonenumber: undefined
+      }
+    };
+  },
+  methods: {
+    // 鏄剧ず寮规
+    show() {
+      this.queryParams.roleId = this.roleId;
+      this.getList();
+      this.visible = true;
+    },
+    clickRow(row) {
+      this.$refs.table.toggleRowSelection(row);
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.userIds = selection.map(item => item.id);
+    },
+    // 鏌ヨ琛ㄦ暟鎹�
+    getList() {
+      unallocatedUserList(this.queryParams).then(res => {
+        this.userList = res.datas;
+        this.total = res.totalRows;
+      });
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    /** 閫夋嫨鎺堟潈鐢ㄦ埛鎿嶄綔 */
+    handleSelectUser() {
+      const roleId = this.queryParams.roleId;
+      const userIds = this.userIds.join(",");
+      if (userIds == "") {
+        this.$modal.msgError("璇烽�夋嫨瑕佸垎閰嶇殑鐢ㄦ埛");
+        return;
+      }
+      // console.log("roleId = " + roleId + ", " + userIds);
+      authUserSelectAll({ roleId: roleId, userIds: userIds }).then(res => {
+        this.$modal.msgSuccess(res.msg);
+        if (res.code === 1) {
+          this.visible = false;
+          this.$emit("ok");
+        }
+      });
+    }
+  }
+};
+</script>
diff --git a/project-web/src/views/systemSetting/user/authRole.vue b/project-web/src/views/systemSetting/user/authRole.vue
new file mode 100644
index 0000000..5397cc0
--- /dev/null
+++ b/project-web/src/views/systemSetting/user/authRole.vue
@@ -0,0 +1,117 @@
+<template>
+  <div class="app-container">
+    <h4 class="form-header h4">鍩烘湰淇℃伅</h4>
+    <el-form ref="form" :model="form" label-width="80px">
+      <el-row>
+        <el-col :span="8" :offset="2">
+          <el-form-item label="鐢ㄦ埛鏄电О" prop="nick_name">
+            <el-input v-model="form.nick_name" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8" :offset="2">
+          <el-form-item label="鐧诲綍璐﹀彿" prop="user_name">
+            <el-input  v-model="form.user_name" disabled />
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+
+    <h4 class="form-header h4">瑙掕壊淇℃伅</h4>
+    <el-table v-loading="loading" :row-key="getRowKey" @row-click="clickRow" ref="table" @selection-change="handleSelectionChange" :data="roles.slice((pageNum-1)*pageSize,pageNum*pageSize)">
+      <el-table-column label="搴忓彿" type="index" align="center">
+        <template slot-scope="scope">
+          <span>{{(pageNum - 1) * pageSize + scope.$index + 1}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column type="selection" :reserve-selection="true" width="55"></el-table-column>
+      <el-table-column label="瑙掕壊缂栧彿" align="center" prop="role_id" />
+      <el-table-column label="瑙掕壊鍚嶇О" align="center" prop="role_name" />
+      <el-table-column label="鏉冮檺瀛楃" align="center" prop="role_key" />
+      <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="create_time" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.create_time) }}</span>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total>0" :total="total" :page.sync="pageNum" :limit.sync="pageSize" />
+
+    <el-form label-width="100px">
+      <el-form-item style="text-align: center;margin-left:-120px;margin-top:30px;">
+        <el-button type="primary" @click="submitForm()">鎻愪氦</el-button>
+        <el-button @click="close()">杩斿洖</el-button>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+
+<script>
+import { getAuthRole, updateAuthRole } from "@/api/system/user";
+
+export default {
+  name: "AuthRole",
+  data() {
+    return {
+       // 閬僵灞�
+      loading: true,
+      // 鍒嗛〉淇℃伅
+      total: 0,
+      pageNum: 1,
+      pageSize: 10,
+      // 閫変腑瑙掕壊缂栧彿
+      roleIds:[],
+      // 瑙掕壊淇℃伅
+      roles: [],
+      // 鐢ㄦ埛淇℃伅
+      form: {}
+    };
+  },
+  created() {
+    const userId = this.$route.params && this.$route.params.userId;
+    if (userId) {
+      this.loading = true;
+      getAuthRole(userId).then((response) => {
+        this.form = response.data.user;
+        this.roles = response.data.roles;
+        this.total = this.roles.length;
+        this.$nextTick(() => {
+          this.roles.forEach((row) => {
+            if (row.flag) {
+              this.$refs.table.toggleRowSelection(row);
+            }
+          });
+        });
+        this.loading = false;
+      });
+    }
+  },
+  methods: {
+    /** 鍗曞嚮閫変腑琛屾暟鎹� */
+    clickRow(row) {
+      this.$refs.table.toggleRowSelection(row);
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.roleIds = selection.map((item) => item.role_id);
+    },
+    // 淇濆瓨閫変腑鐨勬暟鎹紪鍙�
+    getRowKey(row) {
+      return row.role_id;
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      const userId = this.form.id;
+      const roleIds = this.roleIds.join(",");
+      updateAuthRole({ userId: userId, roleIds: roleIds }).then((response) => {
+        this.$modal.msgSuccess("鎺堟潈鎴愬姛");
+        this.close();
+      });
+    },
+    /** 鍏抽棴鎸夐挳 */
+    close() {
+      const obj = { path: "/system/user" };
+      this.$tab.closeOpenPage(obj);
+    },
+  },
+};
+</script>
diff --git a/project-web/src/views/systemSetting/user/index.vue b/project-web/src/views/systemSetting/user/index.vue
new file mode 100644
index 0000000..eea60e2
--- /dev/null
+++ b/project-web/src/views/systemSetting/user/index.vue
@@ -0,0 +1,715 @@
+<template>
+  <div class="divBox">
+    <el-card class="box-card">
+    <el-row :gutter="30">
+      <!--閮ㄩ棬鏁版嵁-->
+      <el-col :span="4" :xs="24">
+        <div class="head-container">
+          <el-input
+            v-model="deptName"
+            placeholder="璇疯緭鍏ユ満鏋勫悕绉�"
+            clearable
+            size="small"
+            prefix-icon="el-icon-search"
+            style="margin-bottom: 20px"
+          />
+        </div>
+        <div class="head-container">
+          <el-tree
+            :data="orgListOptions"
+            :props="defaultProps"
+            :expand-on-click-node="false"
+            :filter-node-method="filterNode"
+            ref="tree"
+            default-expand-all
+            highlight-current
+            @node-click="handleNodeClick"
+          />
+        </div>
+      </el-col>
+      <!--鐢ㄦ埛鏁版嵁-->
+      <el-col :span="20" :xs="24">
+        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+          <el-form-item label="鐢ㄦ埛鍚嶇О" prop="userName">
+            <el-input
+              v-model="queryParams.userName"
+              placeholder="璇疯緭鍏ョ櫥褰曞悕绉�"
+              clearable
+              style="width: 160px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="鎵嬫満鍙风爜" prop="phonenumber">
+            <el-input
+              v-model="queryParams.phonenumber"
+              placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�"
+              clearable
+              style="width: 160px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="鐘舵��" prop="status">
+            <el-select
+              v-model="queryParams.status"
+              placeholder="璇烽�夋嫨"
+              clearable
+              style="width: 130px"
+            >
+              <el-option
+                v-for="dict in constants.normalOrDisabled"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+            <el-button
+              type="primary"
+              plain
+              icon="el-icon-plus"
+              size="mini"
+              @click="handleAdd"
+              v-hasPermi="['system:user:add']"
+            >鏂板</el-button>
+            <el-button
+              type="info"
+              plain
+              icon="el-icon-upload2"
+              size="mini"
+              @click="handleImport"
+              v-hasPermi="['system:user:import']"
+            >瀵煎叆</el-button>
+            <el-button
+              type="warning"
+              plain
+              icon="el-icon-download"
+              size="mini"
+              @click="handleExport"
+              v-hasPermi="['system:user:export']"
+            >瀵煎嚭</el-button>
+          </el-form-item>
+        </el-form>
+
+<!--        <el-row :gutter="10" class="mb8">-->
+<!--          <el-col :span="1.5">-->
+<!--          </el-col>-->
+<!--          <el-col :span="1.5">-->
+<!--          </el-col>-->
+<!--        </el-row>-->
+
+        <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
+          <el-table-column type="selection" width="50" align="left" />
+          <el-table-column label="鐢ㄦ埛缂栧彿" align="left" key="id" prop="id" v-if="columns[0].visible" />
+          <el-table-column label="鐢ㄦ埛鍚嶇О" align="left" key="user_name" prop="user_name" v-if="columns[1].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="鐢ㄦ埛鏄电О" align="left" key="nick_name" prop="nick_name" v-if="columns[2].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="鏈烘瀯" align="left" key="dept_id" prop="parameter.dept_name" v-if="columns[3].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="鎵嬫満鍙风爜" align="left" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
+          <el-table-column label="鐘舵��" align="left" key="status" prop="status" v-if="columns[5].visible">
+            <template slot-scope="scope">
+              <el-switch
+                v-model="scope.row.status"
+                :active-value=0
+                :inactive-value=1
+                @change="handleStatusChange(scope.row)"
+              ></el-switch>
+            </template>
+          </el-table-column>
+          <el-table-column label="鍒涘缓鏃堕棿" align="left" prop="create_time" v-if="columns[6].visible" width="160">
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.create_time) }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column
+            label="鎿嶄綔"
+            align="center"
+            width="160"
+             fixed="right"
+          >
+<!--            <template slot-scope="scope" v-if="scope.row.userId !== 1">-->
+            <template slot-scope="scope">
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-edit"
+                @click="handleUpdate(scope.row)"
+                v-hasPermi="['system:user:edit']"
+              >淇敼</el-button>
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-delete"
+                @click="handleDelete(scope.row)"
+                v-hasPermi="['system:user:remove']"
+              >鍒犻櫎</el-button>
+              <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:user:resetPwd', 'system:user:edit']">
+                <span class="el-dropdown-link">
+                  <i class="el-icon-d-arrow-right el-icon--right"></i>鏇村
+                </span>
+                <el-dropdown-menu slot="dropdown">
+                  <el-dropdown-item command="handleResetPwd" icon="el-icon-key"
+                    v-hasPermi="['system:user:resetPwd']">閲嶇疆瀵嗙爜</el-dropdown-item>
+                  <el-dropdown-item command="handleAuthRole" icon="el-icon-circle-check"
+                    v-hasPermi="['system:user:edit']">鍒嗛厤瑙掕壊</el-dropdown-item>
+                </el-dropdown-menu>
+              </el-dropdown>
+            </template>
+          </el-table-column>
+        </el-table>
+
+<!--        <pagination-->
+<!--          v-show="total>0"-->
+<!--          :total="total"-->
+<!--          :page.sync="queryParams.pageNum"-->
+<!--          :limit.sync="queryParams.pageSize"-->
+<!--          @pagination="getList"-->
+<!--        />-->
+        <el-pagination
+          :current-page="queryParams.pageNum"
+          :page-sizes="constants.page.limit"
+          :layout="constants.page.layout"
+          :total="this.total"
+          @size-change="changeSize"
+          @current-change="changePage"
+        />
+      </el-col>
+    </el-row>
+    </el-card>
+
+    <!-- 娣诲姞鎴栦慨鏀圭敤鎴烽厤缃璇濇 -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="鐢ㄦ埛鏄电О" prop="nick_name">
+              <el-input v-model="form.nick_name" placeholder="璇疯緭鍏ョ敤鎴锋樀绉�" maxlength="30" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="褰掑睘閮ㄩ棬" prop="dept_id">
+              <treeselect v-model="form.dept_id" :options="deptOptions" :show-count="true" placeholder="璇烽�夋嫨褰掑睘閮ㄩ棬" :normalizer="normalizer"/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="鎵嬫満鍙风爜" prop="phonenumber">
+              <el-input v-model="form.phonenumber" placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" maxlength="11" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="閭" prop="email">
+              <el-input v-model="form.email" placeholder="璇疯緭鍏ラ偖绠�" maxlength="50" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item v-if="form.id == undefined" label="鐧诲綍鍚�" prop="user_name">
+              <el-input v-model="form.user_name" placeholder="璇疯緭鍏ョ櫥褰曞悕" maxlength="30" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item v-if="form.id == undefined" label="鐢ㄦ埛瀵嗙爜" prop="password">
+              <el-input v-model="form.password" placeholder="璇疯緭鍏ョ敤鎴峰瘑鐮�" type="password" maxlength="20" show-password/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="鐢ㄦ埛鎬у埆" prop="sex">
+              <el-select v-model="form.sex" placeholder="璇烽�夋嫨鎬у埆">
+                <el-option v-for="dict in constants.sex" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鐘舵��">
+              <el-radio-group v-model="form.status">
+                <el-radio
+                  v-for="dict in constants.normalOrDisabled"
+                  :key="dict.value"
+                  :label="dict.value"
+                >{{dict.label}}</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="宀椾綅">
+              <el-select v-model="form.postIds" multiple placeholder="璇烽�夋嫨宀椾綅">
+<!--                <el-option-->
+<!--                  v-for="item in postOptions"-->
+<!--                  :key="item.postId"-->
+<!--                  :label="item.postName"-->
+<!--                  :value="item.postId"-->
+<!--                  :disabled="item.status == 1"-->
+<!--                ></el-option>-->
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="瑙掕壊">
+              <el-select v-model="form.roleIds" multiple placeholder="璇烽�夋嫨瑙掕壊">
+                <el-option
+                  v-for="item in roleOptions"
+                  :key="item.role_id"
+                  :label="item.role_name"
+                  :value="item.role_id"
+                  :disabled="item.status == 1"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="澶囨敞">
+              <el-input v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+
+    <!-- 鐢ㄦ埛瀵煎叆瀵硅瘽妗� -->
+    <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
+      <el-upload
+        ref="upload"
+        :limit="1"
+        accept=".xlsx, .xls"
+        :headers="upload.headers"
+        :action="upload.url + '?updateSupport=' + upload.updateSupport"
+        :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress"
+        :on-success="handleFileSuccess"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
+        <div class="el-upload__tip text-center" slot="tip">
+          <div class="el-upload__tip" slot="tip">
+            <el-checkbox v-model="upload.updateSupport" /> 鏄惁鏇存柊宸茬粡瀛樺湪鐨勭敤鎴锋暟鎹�
+          </div>
+          <span>浠呭厑璁稿鍏ls銆亁lsx鏍煎紡鏂囦欢銆�</span>
+          <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">涓嬭浇妯℃澘</el-link>
+        </div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">纭� 瀹�</el-button>
+        <el-button @click="upload.open = false">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import {
+    addUser,
+    changeUserStatus,
+    delUser,
+    getNewUserRoles,
+    getUser,
+    listUser,
+    resetUserPwd,
+    updateUser
+  } from "@/api/system/user";
+  import {getToken} from "@/utils/auth";
+  import {listOrgRootTree, treeselect} from "@/api/system/dept";
+  import Treeselect from "@riophae/vue-treeselect";
+  import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+  import {apiBaseURL} from "@/settings";
+
+  export default {
+  name: "User",
+  // dicts: ['sys_normal_disable', 'sys_user_sex'],
+  components: { Treeselect },
+  data() {
+    return {
+      constants: this.$constants,
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 鐢ㄦ埛琛ㄦ牸鏁版嵁
+      userList: null,
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 閮ㄩ棬鏍戦�夐」
+      deptOptions: undefined,
+
+      // 2022-12-08 澶氬崟浣嶆満鏋勬爲锛岃秴绾х鐞嗗憳鍙睍绀哄鏍瑰崟浣�
+      orgListOptions: undefined,
+
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 閮ㄩ棬鍚嶇О
+      deptName: undefined,
+      // 榛樿瀵嗙爜
+      initPassword: undefined,
+      // 鏃ユ湡鑼冨洿
+      dateRange: [],
+      // 宀椾綅閫夐」
+      postOptions: [],
+      // 瑙掕壊閫夐」
+      roleOptions: [],
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      defaultProps: {
+        children: "children",
+        label: "label"
+      },
+      // 鐢ㄦ埛瀵煎叆鍙傛暟
+      upload: {
+        // 鏄惁鏄剧ず寮瑰嚭灞傦紙鐢ㄦ埛瀵煎叆锛�
+        open: false,
+        // 寮瑰嚭灞傛爣棰橈紙鐢ㄦ埛瀵煎叆锛�
+        title: "",
+        // 鏄惁绂佺敤涓婁紶
+        isUploading: false,
+        // 鏄惁鏇存柊宸茬粡瀛樺湪鐨勭敤鎴锋暟鎹�
+        updateSupport: 0,
+        // 璁剧疆涓婁紶鐨勮姹傚ご閮�
+        headers: { Authorization: "Bearer " + getToken() },
+        // 涓婁紶鐨勫湴鍧�
+        // url: "http://localhost:8082/admin" + "/system/user/import"
+        // url: globalConf.baseUrl + "/system/user/import"
+        url: apiBaseURL + "/system/user/import"
+      },
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        userName: undefined,
+        phonenumber: undefined,
+        status: undefined,
+        deptId: undefined
+      },
+      // 鍒椾俊鎭�
+      columns: [
+        { key: 0, label: `鐢ㄦ埛缂栧彿`, visible: true },
+        { key: 1, label: `鐧诲綍鍚峘, visible: true },
+        { key: 2, label: `鐢ㄦ埛鏄电О`, visible: true },
+        { key: 3, label: `鏈烘瀯`, visible: true },
+        { key: 4, label: `鎵嬫満鍙风爜`, visible: true },
+        { key: 5, label: `鐘舵�乣, visible: true },
+        { key: 6, label: `鍒涘缓鏃堕棿`, visible: true }
+      ],
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        user_name: [
+          { required: true, message: "鐧诲綍鍚嶄笉鑳戒负绌�", trigger: "blur" },
+          { min: 2, max: 20, message: '鐧诲綍鍚嶇О闀垮害蹇呴』浠嬩簬 2 鍜� 20 涔嬮棿', trigger: 'blur' }
+        ],
+        nick_name: [
+          { required: true, message: "鐢ㄦ埛鏄电О涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        password: [
+          { required: false, message: "涓嶅~鍐欏皢浣跨敤骞冲彴榛樿瀵嗙爜", trigger: "blur" },
+          { min: 5, max: 20, message: '鐢ㄦ埛瀵嗙爜闀垮害蹇呴』浠嬩簬 5 鍜� 20 涔嬮棿', trigger: 'blur' }
+        ],
+        email: [
+          {
+            type: "email",
+            message: "璇疯緭鍏ユ纭殑閭鍦板潃",
+            trigger: ["blur", "change"]
+          }
+        ],
+        phonenumber: [
+          {
+            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
+            message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜",
+            trigger: "blur"
+          }
+        ]
+      }
+    };
+  },
+  watch: {
+    // 鏍规嵁鍚嶇О绛涢�夐儴闂ㄦ爲
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
+  created() {
+    this.listOrgRootTree();
+    this.getList();
+    // this.getTreeselect();
+    // this.getConfigKey("sys.user.initPassword").then(response => {
+    //   this.initPassword = response.msg;
+    // });
+  },
+  methods: {
+    changeSize(e){
+      this.queryParams.pageSize = e
+      this.getList()
+    },
+    changePage(e){
+      this.queryParams.pageNum = e
+      this.getList()
+    },
+    /** 鏌ヨ鐢ㄦ埛鍒楄〃 */
+    getList() {
+      this.loading = true;
+      if (this.queryParams.deptId == undefined || this.queryParams.deptId == null || this.queryParams.deptId < 1) {
+        this.queryParams.deptId = 1
+      }
+      listUser(this.queryParams).then(response => {
+          this.userList = response.datas;
+          this.total = response.totalRows;
+          this.loading = false;
+        }
+      );
+    },
+    /** 鏌ヨ閮ㄩ棬涓嬫媺鏍戠粨鏋� */
+    getTreeselect(deptId) {
+      // treeselect(this.queryParams.deptId).then(response => {
+      //   this.deptOptions = response.data;
+      // });
+      if(deptId == undefined || deptId == ""){
+        this.$modal.alert("璇烽�夋嫨涓�涓儴闂�");
+        return false;
+      }
+      treeselect(deptId).then(response => {
+        // console.log("+++++++++++++")
+        // console.log(response);
+        this.deptOptions = response;
+      });
+      return true;
+    },
+
+    // 2022-12-08锛屽姞杞介《绾ф満鏋勬爲鍒楄〃
+    listOrgRootTree(){
+      listOrgRootTree().then(response => {
+        // console.log(response);
+        this.orgListOptions = response;
+      });
+    },
+
+    // 绛涢�夎妭鐐�
+    filterNode(value, data) {
+      if (!value) return true;
+      console.log("value = " + value + ", data = " + data);
+      return data.label.indexOf(value) !== -1;
+    },
+    // 鑺傜偣鍗曞嚮浜嬩欢
+    handleNodeClick(data) {
+      this.queryParams.deptId = data.id;
+      this.handleQuery();
+    },
+    // 鐢ㄦ埛鐘舵�佷慨鏀�
+    handleStatusChange(row) {
+      let text = row.status === 0 ? "鍚敤" : "绂佺敤";
+      this.$modal.confirm('纭瑕�' + text + '"' + row.user_name + '"鐢ㄦ埛鍚楋紵').then(function() {
+        return changeUserStatus(row.id, row.status);
+      }).then(() => {
+        this.$modal.msgSuccess(text + "鎴愬姛");
+      }).catch(function() {
+        row.status = row.status === 0 ? 1 : 0;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        id: undefined,
+        dept_id: undefined,
+        user_name: undefined,
+        nick_name: undefined,
+        password: undefined,
+        phonenumber: undefined,
+        email: undefined,
+        sex: undefined,
+        status: 0,
+        remark: undefined,
+        postIds: [],
+        roleIds: []
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.userId);
+      this.single = selection.length != 1;
+      this.multiple = !selection.length;
+    },
+    // 鏇村鎿嶄綔瑙﹀彂
+    handleCommand(command, row) {
+      switch (command) {
+        case "handleResetPwd":
+          this.handleResetPwd(row);
+          break;
+        case "handleAuthRole":
+          this.handleAuthRole(row);
+          break;
+        default:
+          break;
+      }
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      // if(this.queryParams.deptId == undefined){
+      //   this.$modal.msgSuccess("璇峰厛閫夋嫨涓�涓《绾ф満鏋�");
+      //   return;
+      // }
+      if(!this.getTreeselect(this.queryParams.deptId)){
+        return;
+      }
+      // getUser().then(response => {
+      getNewUserRoles(this.queryParams.deptId).then(response => {
+        // this.postOptions = response.posts;
+        this.roleOptions = response.roles;
+        this.open = true;
+        this.title = "娣诲姞鐢ㄦ埛";
+        this.form.password = this.initPassword;
+        this.form.sex = 0;
+      });
+
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      // this.getTreeselect();
+      // const userId = row.id || this.ids;
+      const userId = row.id;
+      getUser(userId).then(response => {
+        this.form = response.data;
+        // this.postOptions = response.posts;
+        this.roleOptions = response.roles;
+        // this.form.postIds = response.postIds;
+        this.form.roleIds = response.roleIds;
+        this.open = true;
+        this.title = "淇敼鐢ㄦ埛";
+        this.form.password = "";
+        this.form.sex = response.data.sex - 0;
+        this.getTreeselect(this.form.dept_id);
+      });
+    },
+    /** 閲嶇疆瀵嗙爜鎸夐挳鎿嶄綔 */
+    handleResetPwd(row) {
+      this.$modal.confirm('纭瑕侀噸缃敤鎴�"' + row.user_name + '"鐨勫瘑鐮侊紵').then(function() {
+        resetUserPwd(row.id, "");
+      }).then(() => {
+        this.$modal.msgSuccess("瀵嗙爜閲嶇疆鎴愬姛");
+      }).catch(()=> {})
+
+      /*this.$prompt('璇疯緭鍏�"' + row.user_name + '"鐨勬柊瀵嗙爜', "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        closeOnClickModal: false,
+        inputPattern: /^.{5,20}$/,
+        inputErrorMessage: "鐢ㄦ埛瀵嗙爜闀垮害蹇呴』浠嬩簬 5 鍜� 20 涔嬮棿"
+      }).then(({ value }) => {
+          resetUserPwd(row.id, value).then(response => {
+            this.$modal.msgSuccess("淇敼鎴愬姛锛屾柊瀵嗙爜鏄細" + value);
+          });
+        }).catch(() => {});*/
+    },
+    /** 鍒嗛厤瑙掕壊鎿嶄綔 */
+    handleAuthRole: function(row) {
+      const userId = row.id;
+      this.$router.push("/system/user-auth/role/" + userId);
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateUser(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addUser(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const userIds = row.id;
+      this.$modal.confirm('鏄惁纭鍒犻櫎鐢ㄦ埛缂栧彿涓�"' + userIds + '"鐨勬暟鎹」锛�').then(function() {
+        return delUser(userIds);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.$download('system/user/export', {
+        ...this.queryParams
+      }, `user_${new Date().getTime()}.xlsx`)
+    },
+    /** 瀵煎叆鎸夐挳鎿嶄綔 */
+    handleImport() {
+      this.upload.title = "鐢ㄦ埛瀵煎叆";
+      this.upload.open = true;
+    },
+    /** 涓嬭浇妯℃澘鎿嶄綔 */
+    importTemplate() {
+      // this.download('system/user/select/downloadTemplate', {}, `user_template_${new Date().getTime()}.xlsx`);
+      this.$download('system/user/select/downloadTemplate', {}, `user_template.xlsx`);
+    },
+    // 鏂囦欢涓婁紶涓鐞�
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 鏂囦欢涓婁紶鎴愬姛澶勭悊
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "瀵煎叆缁撴灉", { dangerouslyUseHTMLString: true });
+      this.getList();
+    },
+    // 鎻愪氦涓婁紶鏂囦欢
+    submitFileForm() {
+      this.$refs.upload.submit();
+    },
+    normalizer(node){
+      //鍘绘帀children=null鐨勫睘鎬�
+      if(node.children==null||node.children=='null'){
+        delete node.children;
+      }
+    },
+  }
+};
+</script>
diff --git a/project-web/src/views/systemSetting/user/profile/index.vue b/project-web/src/views/systemSetting/user/profile/index.vue
new file mode 100644
index 0000000..6574379
--- /dev/null
+++ b/project-web/src/views/systemSetting/user/profile/index.vue
@@ -0,0 +1,42 @@
+<template>
+  <div class="app-container">
+    <div style="display: flex">
+      <el-card class="box-card">
+        <el-tabs tab-position="left" v-model="activeTab">
+          <el-tab-pane label="鍩烘湰璧勬枡" name="userinfo"></el-tab-pane>
+          <el-tab-pane label="淇敼瀵嗙爜" name="resetPwd"></el-tab-pane>
+        </el-tabs>
+      </el-card>
+      <el-card class="box-card" style="flex: 1;margin-left: 16px">
+        <div slot="header" class="clearfix">
+          <span style="font-size: 18px;font-weight: bold">{{ activeTab === 'userinfo' ? '鍩烘湰璧勬枡' : '淇敼瀵嗙爜' }}</span>
+        </div>
+        <userInfo v-if="activeTab==='userinfo'"/>
+        <resetPwd v-if="activeTab==='resetPwd'"/>
+      </el-card>
+    </div>
+  </div>
+</template>
+
+<script>
+import userInfo from "./userInfo";
+import resetPwd from "./resetPwd";
+
+export default {
+  name: "Profile",
+  components: {userInfo, resetPwd},
+  data() {
+    return {
+      roleGroup: {},
+      postGroup: {},
+      activeTab: "userinfo"
+    };
+  },
+  methods: {}
+};
+</script>
+<style scoped>
+.box-card{
+  height: calc(100vh - 146px);
+}
+</style>
diff --git a/project-web/src/views/systemSetting/user/profile/resetPwd.vue b/project-web/src/views/systemSetting/user/profile/resetPwd.vue
new file mode 100644
index 0000000..4365831
--- /dev/null
+++ b/project-web/src/views/systemSetting/user/profile/resetPwd.vue
@@ -0,0 +1,92 @@
+<template>
+  <el-form style="width: 500px;margin: auto" ref="form" :model="user" :rules="rules" label-width="80px">
+    <el-form-item label="鏃у瘑鐮�" prop="oldMixPd">
+      <el-input v-model="user.oldMixPd" placeholder="璇疯緭鍏ユ棫瀵嗙爜" type="password" show-password/>
+    </el-form-item>
+    <el-form-item label="鏂板瘑鐮�" prop="newMixPd">
+      <el-input v-model="user.newMixPd" placeholder="璇疯緭鍏ユ柊瀵嗙爜" type="password" show-password/>
+      <div style="font-size: 12px;color: #999"><span style="color: red;margin-right: 4px">*</span>瀵嗙爜闀垮害鍦� 8 鍒� 12 涓瓧绗﹂棿,蹇呴』鍖呭惈鏁板瓧銆佸ぇ灏忓啓瀛楁瘝銆佺壒娈婂瓧绗�</div>
+    </el-form-item>
+    <el-form-item label="纭瀵嗙爜" prop="btnMixPd">
+      <el-input v-model="user.btnMixPd" placeholder="璇风‘璁ゆ柊瀵嗙爜" type="password" show-password/>
+    </el-form-item>
+    <el-form-item>
+      <el-button type="primary" size="mini" @click="submit">淇濆瓨</el-button>
+      <el-button type="danger" size="mini" @click="close">鍏抽棴</el-button>
+    </el-form-item>
+  </el-form>
+</template>
+
+<script>
+import {updatePassword} from "@/api/user";
+import {encrypt} from "@/utils/jsencrypt";
+
+export default {
+  data() {
+    const equalToPassword = (rule, value, callback) => {
+      if (this.user.newMixPd !== value) {
+        callback(new Error("涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鑷�"));
+      } else {
+        callback();
+      }
+    };
+    return {
+      user: {
+        oldMixPd: undefined,
+        newMixPd: undefined,
+        btnMixPd: undefined
+      },
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        oldMixPd: [
+          {required: true, message: "鏃у瘑鐮佷笉鑳戒负绌�", trigger: "blur"}
+        ],
+        newMixPd: [
+          {required: true, message: "鏂板瘑鐮佷笉鑳戒负绌�", trigger: "blur"},
+          { min: 8, max: 12, message: "闀垮害鍦� 8 鍒� 12 涓瓧绗�", trigger: "blur" }
+        ],
+        btnMixPd: [
+          {required: true, message: "纭瀵嗙爜涓嶈兘涓虹┖", trigger: "blur"},
+          {required: true, validator: equalToPassword, trigger: "blur"}
+        ]
+      }
+    };
+  },
+  methods: {
+    submit() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          let params = {
+            oldMixPd: encrypt(this.user.oldMixPd),
+            newMixPd: encrypt(this.user.newMixPd),
+            btnMixPd: encrypt(this.user.btnMixPd),
+          }
+          updatePassword(params).then(response => {
+            this.user = {
+              oldMixPd: undefined,
+              newMixPd: undefined,
+              btnMixPd: undefined
+            }
+            this.$modal.msgSuccess("淇敼鎴愬姛");
+          });
+        }
+      });
+    },
+    close() {
+      this.$store.dispatch('tagsView/delView', this.$route).then(({visitedViews}) => {
+        const latestView = visitedViews.slice(-1)[0];
+        if (latestView) {
+          this.$router.push(latestView.fullPath);
+        } else {
+          if (this.$route.name === 'Dashboard') {
+            // to reload home page
+            this.$router.replace({path: '/redirect' + this.$route.fullPath});
+          } else {
+            this.$router.push('/dashboard');
+          }
+        }
+      });
+    }
+  }
+};
+</script>
diff --git a/project-web/src/views/systemSetting/user/profile/userInfo.vue b/project-web/src/views/systemSetting/user/profile/userInfo.vue
new file mode 100644
index 0000000..15362aa
--- /dev/null
+++ b/project-web/src/views/systemSetting/user/profile/userInfo.vue
@@ -0,0 +1,165 @@
+<template>
+  <el-form style="width: 500px;margin: auto" ref="form" :model="user" :rules="rules" label-width="80px">
+    <el-form-item label="澶村儚">
+      <input id="imgInput" style="display: none" type="file" accept="image/*" @change="sendImg" />
+      <div class="avatar-box">
+        <el-avatar :size="100" :src="user.avatar?getHead():require('@/assets/images/40b2.jpeg')"></el-avatar>
+        <label class="upload" for="imgInput"
+        ><i class="el-icon-camera"></i></label>
+      </div>
+    </el-form-item>
+    <el-form-item label="鐢ㄦ埛濮撳悕" prop="userName">
+      <el-input v-model="user.userName" maxlength="30" />
+    </el-form-item>
+    <el-form-item label="鐧诲綍鍚�">
+      <el-input disabled v-model="user.userCode" maxlength="30" />
+    </el-form-item>
+    <el-form-item label="鎬у埆" required>
+      <el-radio-group v-model="user.sex">
+        <el-radio :label="1">鐢�</el-radio>
+        <el-radio :label="0">濂�</el-radio>
+      </el-radio-group>
+    </el-form-item>
+    <el-form-item label="鎵嬫満鍙风爜" prop="userPhone">
+      <el-input v-model="user.userPhone" maxlength="11" />
+    </el-form-item>
+    <el-form-item label="閭" prop="email">
+      <el-input v-model="user.email" maxlength="50" />
+    </el-form-item>
+    <el-form-item>
+      <el-button type="primary" size="mini" @click="submit">淇濆瓨</el-button>
+      <el-button type="danger" size="mini" @click="close">鍏抽棴</el-button>
+    </el-form-item>
+  </el-form>
+</template>
+
+<script>
+import { mapGetters } from "vuex";
+import {updatePerson,getCurInfo} from "@/api/user";
+import {getDownUrl, upLoadFile} from "@/utils/base";
+
+export default {
+  computed: {
+    ...mapGetters([
+      "userInfo",
+    ])
+  },
+  created(){
+    this.user = JSON.parse(JSON.stringify(this.userInfo))
+    console.log(this.user)
+  },
+  data() {
+    return {
+      baseUrl:getDownUrl(),
+      user:{},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        userName: [
+          { required: true, message: "鐢ㄦ埛濮撳悕涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        email: [
+          {
+            type: "email",
+            message: "璇疯緭鍏ユ纭殑閭鍦板潃",
+            trigger: ["blur", "change"]
+          }
+        ],
+        userPhone: [
+          { required: true, message: "鎵嬫満鍙风爜涓嶈兘涓虹┖", trigger: "blur" },
+          {
+            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
+            message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜",
+            trigger: "blur"
+          }
+        ]
+      }
+    };
+  },
+  methods: {
+    getHead(){
+      return this.baseUrl + this.user.avatar
+    },
+    //  涓婁紶鍥剧墖
+    sendImg(e) {
+      const file = e.target.files[0]; // 鑾峰彇鍥剧墖璧勬簮
+      // 鍙�夋嫨鍥剧墖
+      if (!file.type.match('image.*')) {
+        this.$message.error('鍙兘涓婁紶鍥剧墖');
+        return false;
+      }
+      const formData = new FormData();
+      formData.append('multipartFile', file);
+      const loadingInstance = this.$loading({
+        text: '涓婁紶涓�...',
+        background: 'rgba(0,0,0,0.5)',
+      });
+      upLoadFile(formData)
+        .then((res) => {
+          e.target.value = '' //闃叉閲嶅涓婁紶鍚屼竴寮犵収鐗� 涓嶈兘鍙戦��
+          this.user.avatar = res[0].url
+          loadingInstance.close();
+        })
+        .catch((err) => {
+          loadingInstance.close();
+        });
+    },
+    submit() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          updatePerson(this.user).then(response => {
+            this.$modal.msgSuccess("淇敼鎴愬姛");
+            getCurInfo().then(res=>{
+                this.$store.commit('user/SET_USER_INFO',res)
+            })
+          });
+        }
+      });
+    },
+    close() {
+      this.$store.dispatch('tagsView/delView', this.$route).then(({ visitedViews }) => {
+        const latestView = visitedViews.slice(-1)[0];
+        if (latestView) {
+          this.$router.push(latestView.fullPath);
+        } else {
+          if (this.$route.name === 'Dashboard') {
+            // to reload home page
+            this.$router.replace({ path: '/redirect' + this.$route.fullPath });
+          } else {
+            this.$router.push('/dashboard');
+          }
+        }
+      });
+    }
+  }
+};
+</script>
+<style scoped lang="scss">
+.avatar-box{
+  position: relative;
+  width: 100px;
+  height: 100px;
+  cursor: pointer;
+
+}
+.avatar-box:hover .upload{
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+.upload{
+  display: none;
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  border-radius: 50%;
+  background-color: rgba(0,0,0,0.5);
+  cursor: pointer;
+  .el-icon-camera{
+    font-size: 24px;
+    color: #fff;
+  }
+}
+
+</style>
diff --git a/project-web/tests/unit/.eslintrc.js b/project-web/tests/unit/.eslintrc.js
new file mode 100644
index 0000000..958d51b
--- /dev/null
+++ b/project-web/tests/unit/.eslintrc.js
@@ -0,0 +1,5 @@
+module.exports = {
+  env: {
+    jest: true
+  }
+}
diff --git a/project-web/tests/unit/components/Hamburger.spec.js b/project-web/tests/unit/components/Hamburger.spec.js
new file mode 100644
index 0000000..01ea303
--- /dev/null
+++ b/project-web/tests/unit/components/Hamburger.spec.js
@@ -0,0 +1,18 @@
+import { shallowMount } from '@vue/test-utils'
+import Hamburger from '@/components/Hamburger/index.vue'
+describe('Hamburger.vue', () => {
+  it('toggle click', () => {
+    const wrapper = shallowMount(Hamburger)
+    const mockFn = jest.fn()
+    wrapper.vm.$on('toggleClick', mockFn)
+    wrapper.find('.hamburger').trigger('click')
+    expect(mockFn).toBeCalled()
+  })
+  it('prop isActive', () => {
+    const wrapper = shallowMount(Hamburger)
+    wrapper.setProps({ isActive: true })
+    expect(wrapper.contains('.is-active')).toBe(true)
+    wrapper.setProps({ isActive: false })
+    expect(wrapper.contains('.is-active')).toBe(false)
+  })
+})
diff --git a/project-web/tests/unit/components/SvgIcon.spec.js b/project-web/tests/unit/components/SvgIcon.spec.js
new file mode 100644
index 0000000..31467a9
--- /dev/null
+++ b/project-web/tests/unit/components/SvgIcon.spec.js
@@ -0,0 +1,22 @@
+import { shallowMount } from '@vue/test-utils'
+import SvgIcon from '@/components/SvgIcon/index.vue'
+describe('SvgIcon.vue', () => {
+  it('iconClass', () => {
+    const wrapper = shallowMount(SvgIcon, {
+      propsData: {
+        iconClass: 'test'
+      }
+    })
+    expect(wrapper.find('use').attributes().href).toBe('#icon-test')
+  })
+  it('className', () => {
+    const wrapper = shallowMount(SvgIcon, {
+      propsData: {
+        iconClass: 'test'
+      }
+    })
+    expect(wrapper.classes().length).toBe(1)
+    wrapper.setProps({ className: 'test' })
+    expect(wrapper.classes().includes('test')).toBe(true)
+  })
+})
diff --git a/project-web/tests/unit/utils/formatTime.spec.js b/project-web/tests/unit/utils/formatTime.spec.js
new file mode 100644
index 0000000..d07e414
--- /dev/null
+++ b/project-web/tests/unit/utils/formatTime.spec.js
@@ -0,0 +1,29 @@
+import { formatTime } from '@/utils/index.js'
+describe('Utils:formatTime', () => {
+  const d = new Date('2018-07-13 17:54:01') // "2018-07-13 17:54:01"
+  const retrofit = 5 * 1000
+
+  it('ten digits timestamp', () => {
+    expect(formatTime((d / 1000).toFixed(0))).toBe('7鏈�13鏃�17鏃�54鍒�')
+  })
+  it('test now', () => {
+    expect(formatTime(+new Date() - 1)).toBe('鍒氬垰')
+  })
+  it('less two minute', () => {
+    expect(formatTime(+new Date() - 60 * 2 * 1000 + retrofit)).toBe('2鍒嗛挓鍓�')
+  })
+  it('less two hour', () => {
+    expect(formatTime(+new Date() - 60 * 60 * 2 * 1000 + retrofit)).toBe('2灏忔椂鍓�')
+  })
+  it('less one day', () => {
+    expect(formatTime(+new Date() - 60 * 60 * 24 * 1 * 1000)).toBe('1澶╁墠')
+  })
+  it('more than one day', () => {
+    expect(formatTime(d)).toBe('7鏈�13鏃�17鏃�54鍒�')
+  })
+  it('format', () => {
+    expect(formatTime(d, '{y}-{m}-{d} {h}:{i}')).toBe('2018-07-13 17:54')
+    expect(formatTime(d, '{y}-{m}-{d}')).toBe('2018-07-13')
+    expect(formatTime(d, '{y}/{m}/{d} {h}-{i}')).toBe('2018/07/13 17-54')
+  })
+})
diff --git a/project-web/tests/unit/utils/parseTime.spec.js b/project-web/tests/unit/utils/parseTime.spec.js
new file mode 100644
index 0000000..bc61d1a
--- /dev/null
+++ b/project-web/tests/unit/utils/parseTime.spec.js
@@ -0,0 +1,32 @@
+import { parseTime } from '@/utils/index.js'
+describe('Utils:parseTime', () => {
+  const d = new Date('2018-07-13 17:54:01') // "2018-07-13 17:54:01"
+  it('timestamp', () => {
+    expect(parseTime(d)).toBe('2018-07-13 17:54:01')
+  })
+
+  it('timestamp string', () => {
+    expect(parseTime((d + ''))).toBe('2018-07-13 17:54:01')
+  })
+
+  it('ten digits timestamp', () => {
+    expect(parseTime((d / 1000).toFixed(0))).toBe('2018-07-13 17:54:01')
+  })
+  it('new Date', () => {
+    expect(parseTime(new Date(d))).toBe('2018-07-13 17:54:01')
+  })
+  it('format', () => {
+    expect(parseTime(d, '{y}-{m}-{d} {h}:{i}')).toBe('2018-07-13 17:54')
+    expect(parseTime(d, '{y}-{m}-{d}')).toBe('2018-07-13')
+    expect(parseTime(d, '{y}/{m}/{d} {h}-{i}')).toBe('2018/07/13 17-54')
+  })
+  it('get the day of the week', () => {
+    expect(parseTime(d, '{a}')).toBe('浜�') // 鏄熸湡浜�
+  })
+  it('get the day of the week', () => {
+    expect(parseTime(+d + 1000 * 60 * 60 * 24 * 2, '{a}')).toBe('鏃�') // 鏄熸湡鏃�
+  })
+  it('empty argument', () => {
+    expect(parseTime()).toBeNull()
+  })
+})
diff --git a/project-web/tests/unit/utils/validate.spec.js b/project-web/tests/unit/utils/validate.spec.js
new file mode 100644
index 0000000..ef2efe6
--- /dev/null
+++ b/project-web/tests/unit/utils/validate.spec.js
@@ -0,0 +1,28 @@
+import { validUsername, validURL, validLowerCase, validUpperCase, validAlphabets } from '@/utils/validate.js'
+describe('Utils:validate', () => {
+  it('validUsername', () => {
+    expect(validUsername('admin')).toBe(true)
+    expect(validUsername('editor')).toBe(true)
+    expect(validUsername('xxxx')).toBe(false)
+  })
+  it('validURL', () => {
+    expect(validURL('https://github.com/PanJiaChen/vue-element-admin')).toBe(true)
+    expect(validURL('http://github.com/PanJiaChen/vue-element-admin')).toBe(true)
+    expect(validURL('github.com/PanJiaChen/vue-element-admin')).toBe(false)
+  })
+  it('validLowerCase', () => {
+    expect(validLowerCase('abc')).toBe(true)
+    expect(validLowerCase('Abc')).toBe(false)
+    expect(validLowerCase('123abc')).toBe(false)
+  })
+  it('validUpperCase', () => {
+    expect(validUpperCase('ABC')).toBe(true)
+    expect(validUpperCase('Abc')).toBe(false)
+    expect(validUpperCase('123ABC')).toBe(false)
+  })
+  it('validAlphabets', () => {
+    expect(validAlphabets('ABC')).toBe(true)
+    expect(validAlphabets('Abc')).toBe(true)
+    expect(validAlphabets('123aBC')).toBe(false)
+  })
+})
diff --git a/project-web/vue.config.js b/project-web/vue.config.js
new file mode 100644
index 0000000..7a1e29d
--- /dev/null
+++ b/project-web/vue.config.js
@@ -0,0 +1,130 @@
+'use strict'
+const path = require('path')
+const defaultSettings = require('./src/settings.js')
+
+function resolve(dir) {
+  return path.join(__dirname, dir)
+}
+
+const name = defaultSettings.title || '鍥哄畾璧勪骇椤圭洰杩涘害' // page title
+
+// If your port is set to 80,
+// use administrator privileges to execute the command line.
+// For example, Mac: sudo npm run
+// You can change the port by the following method:
+// port = 9527 npm run dev OR npm run dev --port = 9527
+const port = process.env.port || process.env.npm_config_port || 80 // dev port
+
+// All configuration item explanations can be find in https://cli.vuejs.org/config/
+module.exports = {
+  /**
+   * You will need to set publicPath if you plan to deploy your site under a sub path,
+   * for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/,
+   * then publicPath should be set to "/bar/".
+   * In most cases please use '/' !!!
+   * Detail: https://cli.vuejs.org/config/#publicpath
+   */
+  transpileDependencies: ['element-ui', 'vuex', 'js-cookie', '@babel', 'resize-detector'],
+  publicPath: './',
+  // publicPath: '/',
+  outputDir: 'psmWeb',
+  assetsDir: 'static',
+  lintOnSave: process.env.NODE_ENV === 'development',
+  productionSourceMap: false,
+  devServer: {
+    port: port,
+    open: false,
+    overlay: {
+      warnings: false,
+      errors: true
+    }
+  },
+  configureWebpack: {
+    // provide the app's title in webpack's name field, so that
+    // it can be accessed in index.html to inject the correct title.
+    name: name,
+    resolve: {
+      alias: {
+        '@': resolve('src')
+      }
+    }
+  },
+  chainWebpack(config) {
+    config.entry.app = ['babel-polyfill', './src/main.js']
+    config.plugins.delete('preload') // TODO: need test
+    config.plugins.delete('prefetch') // TODO: need test
+
+    // set svg-sprite-loader
+    config.module
+      .rule('svg')
+      .exclude.add(resolve('src/icons'))
+      .end()
+    config.module
+      .rule('icons')
+      .test(/\.svg$/)
+      .include.add(resolve('src/icons'))
+      .end()
+      .use('svg-sprite-loader')
+      .loader('svg-sprite-loader')
+      .options({
+        symbolId: 'icon-[name]'
+      })
+      .end()
+
+    // set preserveWhitespace
+    config.module
+      .rule('vue')
+      .use('vue-loader')
+      .loader('vue-loader')
+      .tap(options => {
+        options.compilerOptions.preserveWhitespace = true
+        return options
+      })
+      .end()
+
+    config
+      // https://webpack.js.org/configuration/devtool/#development
+      .when(process.env.NODE_ENV === 'development',
+        config => config.devtool('cheap-source-map')
+      )
+
+    config
+      .when(process.env.NODE_ENV !== 'development',
+        config => {
+          config
+            .plugin('ScriptExtHtmlWebpackPlugin')
+            .after('html')
+            .use('script-ext-html-webpack-plugin', [{
+            // `runtime` must same as runtimeChunk name. default is `runtime`
+              inline: /runtime\..*\.js$/
+            }])
+            .end()
+          config
+            .optimization.splitChunks({
+              chunks: 'all',
+              cacheGroups: {
+                libs: {
+                  name: 'chunk-libs',
+                  test: /[\\/]node_modules[\\/]/,
+                  priority: 10,
+                  chunks: 'initial' // only package third parties that are initially dependent
+                },
+                elementUI: {
+                  name: 'chunk-elementUI', // split elementUI into a single package
+                  priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
+                  test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
+                },
+                commons: {
+                  name: 'chunk-commons',
+                  test: resolve('src/components'), // can customize your rules
+                  minChunks: 3, //  minimum common number
+                  priority: 5,
+                  reuseExistingChunk: true
+                }
+              }
+            })
+          config.optimization.runtimeChunk('single')
+        }
+      )
+  }
+}

--
Gitblit v1.9.1