efd7ba90ccaf0b2d9ca5cfb1d7e014ec88fd960b..ef37c59e055a990ce247b265b27d3fcef430a243
4 天以前 杨磊
first submit
ef37c5 对比 | 目录
2个文件已修改
191个文件已添加
45633 ■■■■■ 已修改文件
.gitignore 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
README.md 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
babel.config.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jsconfig.json 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package-lock.json 20542 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/favicon.ico 补丁 | 查看 | 原始文档 | blame | 历史
public/index.html 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/App.vue 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/css/base.css 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/css/common.css 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/css/theme.less 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/iconfont/iconfont.css 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/iconfont/iconfont.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/iconfont/iconfont.json 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/iconfont/iconfont.ttf 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/iconfont/iconfont.woff 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/iconfont/iconfont.woff2 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/shoucang.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/testImg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/tianmaologo2.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/京东icon-01.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/当当网.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/default-book-img.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/default_avatar.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/delete.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/index/bookListBg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/login/boxBg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/login/pageBg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/login/weChartIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/officialAccount.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/packDown.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/packUp.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/pageFooter/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/pageFooter/wechatCode.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/pageFooter/weiboCode.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/pageHeader/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/choose.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/examine.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/noPass.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/pass.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/teaching/arrow.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/teaching/electronicBooks.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/teaching/paperCopies.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/teaching/sample.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/teaching/teacher.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/tuijian-bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/about_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/about_bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/beijing.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/beijing@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/dizhi.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/dizhi@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/email(1).png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/email.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/email@2x(1).png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/email@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/fazhan.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/fazhan@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/footer-bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/footer-bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/phone.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/phone@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/website.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/website@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/wenhua_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/wenhua_bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/yinhao.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/zizhi.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/zizhi@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/zongzhi.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/zongzhi@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/“@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/关于我们_slices.zip 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/Audio.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/Audio@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/PPT.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/PPT@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/details_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/details_bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/img.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/img@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/shijuan.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/shijuan@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/shixun.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/shixun@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/tuozhan.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/tuozhan@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/video.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/video@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/ziliao.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/ziliao@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/数字教材详情_slices.zip 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Chevron_Circle Right _ undefined _ Glyph_ undefined.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Chevron_Circle Right _ undefined _ Glyph_ undefined@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Frame(1).png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Frame(2).png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Frame.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Frame@2x(1).png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Frame@2x(2).png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Frame@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Group_302.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Group_302@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Group_303.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Group_303@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/banner.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/banner@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/caozuoshouce.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/caozuoshouce@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/footer-bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/footer-bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/jiaoshirenzheng.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/jiaoshirenzheng@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/tuijian-bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/config.js 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/WebMiddleGroundApi.js 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/api/app.js 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/api/edu.js 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/api/file.js 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/api/identity.js 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/api/job.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/api/resource.js 203 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/api/store.js 534 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/api/ugc.js 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/tool.js 295 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/toolClass.js 216 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/userAction.js 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/theme/fonts/element-icons.ttf 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/theme/fonts/element-icons.woff 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/theme/index.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/bookInfo.vue 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/detail/bookInfo.vue 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/detail/bookList.vue 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/detail/detailInfo.vue 960 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/detail/electronicBooks.vue 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/detail/history.vue 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/detail/paperCopies.vue 198 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/detail/relatedRecommendation.vue 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/detail/resource.vue 482 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/detail/serviceRelated.vue 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/list/data.vue 284 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/list/index.vue 387 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/relatedRecommendation.vue 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/video/index.vue 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/base.vue 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/footer.vue 260 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/header.vue 311 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/index.vue 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/plugin/axios/index.js 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/modules/aboutUs.js 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/modules/bookStore.js 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/modules/informationCenter.js 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/modules/preview.js 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/modules/teachingServices.js 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/index.js 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/aboutUs/index.vue 510 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/authorServices/index.vue 293 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bindWeChat/index.vue 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bindWeChat/success.vue 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bookStore/detail.vue 215 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bookStore/index.vue 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bookStore/order.vue 189 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/index.vue 650 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/search.vue 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/informationCenter/detail.vue 197 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/informationCenter/index.vue 337 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login/adminLogin.vue 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login/findPassword.vue 402 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login/login.vue 545 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login/register.vue 533 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personalCenter/components/addressManagement.vue 407 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personalCenter/components/authorContribution.vue 731 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personalCenter/components/basicInformation.vue 473 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personalCenter/components/downloadApplication.vue 254 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personalCenter/components/electronicSampleBook.vue 392 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personalCenter/components/myCollection.vue 471 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personalCenter/components/orderList.vue 459 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personalCenter/components/paperSampleBook.vue 297 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personalCenter/components/sampleApplication.vue 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personalCenter/components/teacherRegister.vue 1028 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personalCenter/index.vue 196 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/preview/audio.vue 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/preview/pdf.vue 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/preview/video.vue 161 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/teachingServices/applyBookElectronic.vue 378 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/teachingServices/applyBookPaper.vue 690 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/teachingServices/detail.vue 247 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/teachingServices/index.vue 379 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vue.config.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yarn.lock 6401 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -1,21 +1,23 @@
# Compiled Object files
*.slo
*.lo
*.o
*.obj
.DS_Store
node_modules
/dist
# Compiled Dynamic libraries
*.so
*.dylib
*.dll
# Compiled Static libraries
*.lai
*.la
*.a
*.lib
# local env files
.env.local
.env.*.local
# Executables
*.exe
*.out
*.app
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
README.md
@@ -1,4 +1,24 @@
## xiehe_website
# website
协和网站
## Project setup
```
yarn install
```
### Compiles and hot-reloads for development
```
yarn serve
```
### Compiles and minifies for production
```
yarn build
```
### Lints and fixes files
```
yarn lint
```
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).
babel.config.js
New file
@@ -0,0 +1,5 @@
module.exports = {
  presets: [
    '@vue/cli-plugin-babel/preset'
  ]
}
jsconfig.json
New file
@@ -0,0 +1,19 @@
{
  "compilerOptions": {
    "target": "es5",
    "module": "esnext",
    "baseUrl": "./",
    "moduleResolution": "node",
    "paths": {
      "@/*": [
        "src/*"
      ]
    },
    "lib": [
      "esnext",
      "dom",
      "dom.iterable",
      "scripthost"
    ]
  }
}
package-lock.json
New file
Diff too large
package.json
New file
@@ -0,0 +1,61 @@
{
  "name": "website",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  },
  "dependencies": {
    "@vicons/ionicons5": "^0.12.0",
    "axios": "^0.27.2",
    "core-js": "^3.8.3",
    "element-china-area-data": "^5.0.2",
    "element-ui": "^2.15.10",
    "moment": "^2.29.4",
    "qrcodejs2": "0.0.2",
    "spark-md5": "^3.0.2",
    "vue": "^2.6.14",
    "vue-router": "^3.5.1",
    "vue-wxlogin": "^1.0.4",
    "vuex": "^3.6.2"
  },
  "devDependencies": {
    "@babel/core": "^7.12.16",
    "@babel/eslint-parser": "^7.12.16",
    "@vue/cli-plugin-babel": "~5.0.0",
    "@vue/cli-plugin-eslint": "~5.0.0",
    "@vue/cli-plugin-router": "~5.0.0",
    "@vue/cli-plugin-vuex": "~5.0.0",
    "@vue/cli-service": "~5.0.0",
    "eslint": "^7.32.0",
    "eslint-plugin-vue": "^8.0.3",
    "less": "^4.1.3",
    "less-loader": "^11.0.0",
    "vue-template-compiler": "^2.6.14"
  },
  "eslintConfig": {
    "root": true,
    "env": {
      "node": true
    },
    "extends": [
      "plugin:vue/essential",
      "eslint:recommended"
    ],
    "parserOptions": {
      "parser": "@babel/eslint-parser"
    },
    "rules": {
      "vue/multi-word-component-names": 0,
      "no-debugger": "off",
      "no-unused-vars": "warn"
    }
  },
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not dead"
  ]
}
public/favicon.ico
public/index.html
New file
@@ -0,0 +1,18 @@
<!DOCTYPE html>
<html lang="zh-cn">
  <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>协和云课堂</title>
  </head>
  <body>
    <noscript>
      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>
src/App.vue
New file
@@ -0,0 +1,109 @@
<template>
  <div id="app">
    <router-view />
  </div>
</template>
<script>
import { watch } from "vue";
import { setSessionGuid, setNewView, storage } from "./assets/js/userAction";
import tool from "./assets/js/toolClass";
export default {
  name: "App",
  data() {
    return {
      imgsrc: require("@/assets/images/officialAccount.jpg"),
    };
  },
  created() {
    // åœ¨ç§»åŠ¨ç«¯æ‰“å¼€Pc网站时的提示
    if (
      window.navigator.userAgent.match(
        /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
      )
    ) {
      this.$alert(
        "<p style='text-align:left;'>请在PC端打开此网页,或扫描下方二维码关注我社公众号,单击菜单栏中的“教学服务”浏览相关信息、申请样书或下载教材配套的资源。</p><img src='" +
          this.imgsrc +
          "'>",
        "提示",
        {
          dangerouslyUseHTMLString: true,
          center: true,
          customClass: "msgbox",
        }
      );
    }
    //在页面加载时读取sessionStorage里的状态信息
    if (sessionStorage.getItem("store")) {
      this.$store.replaceState(
        Object.assign(
          {},
          this.$store.state,
          JSON.parse(sessionStorage.getItem("store"))
        )
      );
      sessionStorage.removeItem("store");
    }
    //在页面刷新时将vuex里的信息保存到sessionStorage里
    window.addEventListener("beforeunload", () => {
      sessionStorage.setItem("store", JSON.stringify(this.$store.state));
    });
  },
  watch: {
    $route(to, from) {
      if (to.path.indexOf("AdminLogin") == -1 && from.path.indexOf("AdminLogin") == -1) {
        const detailList = ["/bookStore/detail", "teachingServices/detail"];
        if (detailList.includes(to.path)) {
          if (to.path == "/bookStore/detail") {
            setNewView("productId", to.query.id);
          } else {
            setNewView("cmsItemId", to.query.id);
          }
        }
        let sessionGuid = storage.get("sessionGuid");
        const token = tool.getCookie("websiteFrontToken");
        if (!sessionGuid) {
          setSessionGuid();
        }
        sessionStorage.setItem("fromPath", from.fullPath.substring(1));
        sessionStorage.setItem("toPath", to.fullPath.substring(1));
      }
    },
  },
};
</script>
<style lang="less">
@import "~@/assets/css/base.css";
@import "~@/assets/css/common.css";
html,
body,
#app {
  width: 100%;
  height: 100%;
  background-color: #f1f8f4;
  .msgbox {
    width: 380px !important;
  }
}
</style>
<style lang="less">
// å¯Œæ–‡æœ¬å®¹å™¨ï¼Œä¿ç•™å¯Œæ–‡æœ¬é»˜è®¤æ ·å¼ï¼Œæ‰€è§å³æ‰€å¾—
.richTextBox {
  line-height: 1.4;
  font-size: 14px;
  * {
    margin: revert;
    padding: revert;
    border: revert;
    font: revert;
    vertical-align: revert;
  }
}
</style>
<style lang="less" scoped></style>
src/assets/css/base.css
New file
@@ -0,0 +1,49 @@
/* http://meyerweb.com/eric/tools/css/reset/
   v2.0 | 20110126
   License: none (public domain)
*/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
    margin: 0;
    padding: 0;
    border: 0;
    font-size: 100%;
    font: inherit;
    vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
    display: block;
}
body {
    line-height: 1;
    font-size: 14px;
}
ol, ul {
    list-style: none;
}
blockquote, q {
    quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
    content: '';
    content: none;
}
table {
    border-collapse: collapse;
    border-spacing: 0;
}
src/assets/css/common.css
New file
@@ -0,0 +1,175 @@
/* å±…中布局 */
.contentBox{
  width: 1200px;
  margin: 0 auto;
}
/* è‡ªé€‚应图片 */
.autoImg {
  width: auto;
  height: auto;
  max-width: 100%;
  max-height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  margin: auto;
}
.bannerImg {
 width: 100%;
 height: 100%;
 position: absolute;
 top: 0;
 left: 0;
 right: 0;
 bottom: 0;
 margin: auto;
}
/* å…è´¹ */
.freePrice {
  color: #0bc266 !important;
}
.titleBox {
  height: 60px;
  background: #d8f7e6;
  line-height: 60px;
  padding: 0 40px;
  font-weight: 700;
  color: #00873c;
  font-size: 18px;
}
/* å¯Œæ–‡æœ¬å®¹å™¨ï¼Œä¿ç•™å¯Œæ–‡æœ¬é»˜è®¤æ ·å¼ï¼Œæ‰€è§å³æ‰€å¾— */
.richTextBox {
  line-height: 1.4;
}
.richTextBox p {
  display: block;
  margin-block-start: 1em;
  margin-block-end: 1em;
  margin-inline-start: 0px;
  margin-inline-end: 0px;
}
.richTextBox table[border]:not([border="0"]):not([style*=border-style]) td, .richTextBox table[border]:not([border="0"]):not([style*=border-style]) th {
  border-style: solid;
}
.richTextBox table[border]:not([border="0"]):not([style*=border-width]) td, .richTextBox table[border]:not([border="0"]):not([style*=border-width]) th {
  border-width: 1px;
}
.richTextBox table:not([cellpadding]) td, .richTextBox table:not([cellpadding]) th {
  padding: 0.4rem;
}
/* å•行省略 */
.ellipsis {
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}
/* flex布局 */
.flex {
  display: flex;
}
.flex1 {
  flex: 1;
  overflow: hidden;
}
/* ä¸Šä¼ å›¾ç‰‡ */
.avatar-uploader .el-upload {
  width: 190px;
  height: 140px;
  border: 1px dashed #d9d9d9;
  position: relative;
}
.avatar-uploader .el-upload:hover {
  border-color: #409eff;
}
.avatarCover {
  display: block;
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  max-width: 100%;
  max-height: 100%;
  margin: auto;
}
/* å†…置状态字体颜色 */
.primaryTxt {
  color: #00873C !important;
}
.successTxt {
  color: #67c23a !important;
}
.warningTxt {
  color: #e6a23c !important;
}
.errorTxt {
  color: #f56c6c !important;
}
.infoTxt {
  color: #999 !important;
}
/* å†…置状态背景颜色 */
.primaryBack {
  color: #fff !important;
  background: #00873C !important;
}
.successBack {
  color: #fff !important;
  background: #67c23a !important;
}
.warningBack {
  color: #fff !important;
  background: #e6a23c !important;
}
.errorBack {
  color: #fff !important;
  background: #f56c6c !important;
}
/* ä¸»é¢˜è‰²ä¿®æ”¹,根据UI框架决定是否需要 */
/* .el-button--primary {
  background-color: #00873C !important;
  border-color: #00873C !important;
}
.el-button--primary:focus,
.el-button--primary:hover {
  background: #086833 !important;
  border-color: #086833 !important;
  color: #fff !important;
}
.el-tabs__item.is-active {
  color: #00873C !important;
} */
.el-input-group__append, .el-input-group__prepend {
  vertical-align: initial !important;
}
.el-checkbox__inner{
  border: 1px solid #000 !important;
  width: 20px !important;
  height: 20px !important;
}
.el-checkbox__inner::after {
  left: 7px !important;
  top: 4px !important;
}
src/assets/css/theme.less
New file
@@ -0,0 +1,4 @@
@defaultColor: #00873C;
@color: @defaultColor;
src/assets/iconfont/iconfont.css
New file
@@ -0,0 +1,55 @@
@font-face {
  font-family: "iconfont"; /* Project id 3721619 */
  src: url('iconfont.woff2?t=1666778377066') format('woff2'),
       url('iconfont.woff?t=1666778377066') format('woff'),
       url('iconfont.ttf?t=1666778377066') format('truetype');
}
.iconfont {
  font-family: "iconfont" !important;
  font-size: 16px;
  font-style: normal;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.icon-dianhua:before {
  content: "\e61b";
}
.icon-tongxunlu:before {
  content: "\e632";
}
.icon-renwu-ren:before {
  content: "\e749";
}
.icon-QQ:before {
  content: "\e882";
}
.icon-shanchu:before {
  content: "\e74b";
}
.icon-tubiaozhizuo-:before {
  content: "\e605";
}
.icon-icon_yulan:before {
  content: "\eb8a";
}
.icon-xiazai:before {
  content: "\e606";
}
.icon-fenxiang:before {
  content: "\e602";
}
.icon-shoucang:before {
  content: "\e68e";
}
src/assets/iconfont/iconfont.js
New file
@@ -0,0 +1 @@
window._iconfont_svg_string_3721619='<svg><symbol id="icon-dianhua" viewBox="0 0 1024 1024"><path d="M766.438946 943.5579c-4.429893 0-7.181563-0.145309-7.476275-0.160659l-0.290619-0.01842c-42.736337-3.02387-90.967828-17.787108-139.483798-42.693358l-0.587378-0.315178-54.078663-30.248931c-102.549607-56.177464-259.853259-218.356147-266.500657-225.233787l-11.432377-11.828396 0.092098-0.11461c-27.666106-29.688159-84.594677-94.66094-133.902686-175.60753-55.477522-91.075275-81.612763-169.619142-77.67815-233.44889 2.922563-47.425126 22.463618-85.97307 58.07979-114.573455 38.268582-30.728862 73.250304-43.540655 106.933451-39.162952 36.108383 4.690836 69.019956 28.681226 103.573937 75.497485 2.307555 3.127224 4.591575 6.207375 6.842849 9.244548 25.679869 34.643008 47.857984 64.562435 55.935963 95.558379 9.42772 36.173874-1.87572 69.727061-34.558074 102.576213l-1.133823 1.139963-0.239454 0.143263c-1.543146 1.576915-8.922207 10.053983-9.100262 28.119431-0.180102 18.291598 6.823406 40.11565 20.814048 64.866357 19.22076 34.000372 51.161217 72.403007 94.934163 114.14162 73.369008 69.476351 120.596635 88.594781 147.289578 92.391247 23.400966 3.329838 33.67803-4.653997 35.45756-6.243191l0.306992-0.428765-0.25071 0.378623c0.052189-0.048095 0.096191-0.088004 0.12996-0.12075 27.874861-32.115442 63.648622-42.73122 106.3297-31.54853 30.785144 8.064676 64.736397 26.939559 110.083188 61.199851 34.673707 26.194592 55.872518 52.227502 64.805982 79.588663 9.91379 30.357402 5.175883 61.742203-14.482853 95.946212-5.145184 8.953929-16.573467 12.040221-25.526373 6.892991-8.951883-5.145184-12.039197-16.573467-6.892991-25.526373 14.275121-24.837688 17.885346-45.717228 11.357675-65.705468-6.482645-19.854187-23.427572-39.926338-51.800783-61.36051-53.480029-40.404222-80.984453-50.661843-97.019661-54.862515-29.009707-7.600095-50.218752-1.410116-68.768223 20.064988-2.236947 2.578732-16.8559 18.027585-47.285956 19.762089-50.306756 2.858094-114.064872-31.898501-189.489702-103.322204C364.582509 505.738389 321.769424 435.174264 324.130192 378.769626c1.333368-31.846312 17.013489-48.312332 21.691021-52.538587 46.799886-47.340191 27.248597-78.138638-25.329898-149.069107-2.266623-3.057639-4.564969-6.15928-6.887874-9.30697-28.097942-38.068014-52.979632-57.33073-78.30646-60.621682-23.048949-2.994194-48.796356 7.223518-78.70248 31.237445-27.442002 22.037922-41.891086 50.730405-44.171012 87.718831-3.406586 55.261605 21.591761 128.46586 72.290443 211.69647 55.645344 91.351568 121.350812 161.615864 140.164297 180.974771l2.491751 2.564405c20.531616 20.967544 164.28874 166.17981 255.178797 215.937051l0.149403 0.082888 53.862745 30.126134c43.889603 22.49227 86.947258 35.799344 124.561947 38.494733 1.385557 0.062422 16.679891 0.665149 33.288151-2.122337 5.990434-1.004887 12.458753-2.228761 19.305695-3.52222 25.75764-4.867868 57.81373-10.927887 100.929714-12.644995 10.296507-0.403183 19.015076 7.619538 19.425422 17.936511 0.411369 10.316973-7.618515 19.015076-17.936511 19.425422-40.364313 1.608637-70.922283 7.385201-95.474468 12.025894-7.04137 1.330298-13.690814 2.586918-20.058848 3.656273C786.892791 943.120948 774.135232 943.5579 766.438946 943.5579z"  ></path></symbol><symbol id="icon-tongxunlu" viewBox="0 0 1024 1024"><path d="M820.672 3.52H246.08a128 128 0 0 0-128 128v118.464l-0.064 0.32v4.096h0.832c2.048 14.4 13.888 25.6 28.8 25.6s26.88-11.2 28.928-25.6h0.384v-1.92c0.064-0.704 0.448-1.408 0.448-2.176s-0.384-1.472-0.448-2.24V160a96 96 0 0 1 96-96h520.768a96 96 0 0 1 96 96v702.784a96 96 0 0 1-96 96H272.96a96 96 0 0 1-96-96V763.52c0.064-0.768 0.448-1.472 0.448-2.24a29.568 29.568 0 1 0-59.136-1.28h-0.192v0.96l-0.064 0.32V892.48a128 128 0 0 0 128 128h574.656a128 128 0 0 0 128-128V131.52a128 128 0 0 0-128-128z" fill="" ></path><path d="M85.376 377.6h128a32 32 0 0 0 0-64h-128a32 32 0 0 0 0 64zM245.376 668.288a32 32 0 0 0-32-32h-128a32 32 0 0 0 0 64h128a32 32 0 0 0 32-32zM118.08 457.024v104.704a29.632 29.632 0 1 0 59.264 0V456.96a29.632 29.632 0 1 0-59.264 0zM294.272 743.488s-4.928 35.52 26.112 37.504c13.952 0.896 25.024-10.432 27.136-23.808h0.192c8.64-107.2 91.264-185.344 200.64-185.344 109.44 0 191.744 78.144 200.32 185.344h0.512c2.112 13.376 13.248 24.96 27.2 23.808 35.008-3.008 26.048-37.44 26.048-37.44A256.96 256.96 0 0 0 636.8 532.544a160.32 160.32 0 1 0-176.768 0 256.96 256.96 0 0 0-165.696 210.944z m145.28-347.648a108.8 108.8 0 1 1 217.6 0 108.8 108.8 0 0 1-217.6 0z" fill="" ></path></symbol><symbol id="icon-renwu-ren" viewBox="0 0 1024 1024"><path d="M652.8 534.4C723.2 489.6 768 409.6 768 320c0-140.8-115.2-256-256-256S256 179.2 256 320c0 89.6 44.8 169.6 115.2 214.4C192 592 64 761.6 64 960h64c0-211.2 172.8-384 384-384s384 172.8 384 384h64c0-198.4-128-368-307.2-425.6zM512 512c-105.6 0-192-86.4-192-192s86.4-192 192-192 192 86.4 192 192-86.4 192-192 192z"  ></path></symbol><symbol id="icon-QQ" viewBox="0 0 1024 1024"><path d="M824.8 613.2c-16-51.4-34.4-94.6-62.7-165.3C766.5 262.2 689.3 112 511.5 112 331.7 112 256.2 265.2 261 447.9c-28.4 70.8-46.7 113.7-62.7 165.3-34 109.5-23 154.8-14.6 155.8 18 2.2 70.1-82.4 70.1-82.4 0 49 25.2 112.9 79.8 159-26.4 8.1-85.7 29.9-71.6 53.8 11.4 19.3 196.2 12.3 249.5 6.3 53.3 6 238.1 13 249.5-6.3 14.1-23.8-45.3-45.7-71.6-53.8 54.6-46.2 79.8-110.1 79.8-159 0 0 52.1 84.6 70.1 82.4 8.5-1.1 19.5-46.4-14.5-155.8z"  ></path></symbol><symbol id="icon-shanchu" viewBox="0 0 1024 1024"><path d="M607.897867 768.043004c-17.717453 0-31.994625-14.277171-31.994625-31.994625L575.903242 383.935495c0-17.717453 14.277171-31.994625 31.994625-31.994625s31.994625 14.277171 31.994625 31.994625l0 351.94087C639.892491 753.593818 625.61532 768.043004 607.897867 768.043004z"  ></path><path d="M415.930119 768.043004c-17.717453 0-31.994625-14.277171-31.994625-31.994625L383.935495 383.935495c0-17.717453 14.277171-31.994625 31.994625-31.994625 17.717453 0 31.994625 14.277171 31.994625 31.994625l0 351.94087C447.924744 753.593818 433.647573 768.043004 415.930119 768.043004z"  ></path><path d="M928.016126 223.962372l-159.973123 0L768.043004 159.973123c0-52.980346-42.659499-95.983874-95.295817-95.983874L351.94087 63.989249c-52.980346 0-95.983874 43.003528-95.983874 95.983874l0 63.989249-159.973123 0c-17.717453 0-31.994625 14.277171-31.994625 31.994625s14.277171 31.994625 31.994625 31.994625l832.032253 0c17.717453 0 31.994625-14.277171 31.994625-31.994625S945.73358 223.962372 928.016126 223.962372zM319.946246 159.973123c0-17.545439 14.449185-31.994625 31.994625-31.994625l320.806316 0c17.545439 0 31.306568 14.105157 31.306568 31.994625l0 63.989249L319.946246 223.962372 319.946246 159.973123 319.946246 159.973123z"  ></path><path d="M736.048379 960.010751 288.123635 960.010751c-52.980346 0-95.983874-43.003528-95.983874-95.983874L192.139761 383.591466c0-17.717453 14.277171-31.994625 31.994625-31.994625s31.994625 14.277171 31.994625 31.994625l0 480.435411c0 17.717453 14.449185 31.994625 31.994625 31.994625l448.096758 0c17.717453 0 31.994625-14.277171 31.994625-31.994625L768.215018 384.795565c0-17.717453 14.277171-31.994625 31.994625-31.994625s31.994625 14.277171 31.994625 31.994625l0 479.231312C832.032253 916.835209 789.028725 960.010751 736.048379 960.010751z"  ></path></symbol><symbol id="icon-tubiaozhizuo-" viewBox="0 0 1024 1024"><path d="M474.91 67h74.19v890h-74.19z"  ></path></symbol><symbol id="icon-icon_yulan" viewBox="0 0 1024 1024"><path d="M512 736a224 224 0 1 1 0-448 224 224 0 0 1 0 448z m0-64a160 160 0 1 0 0-320 160 160 0 0 0 0 320z"  ></path><path d="M512 864C323.232 864 154.144 751.264 5.44 529.856a32 32 0 0 1 0-35.712C154.144 272.704 323.2 160 512 160c188.768 0 357.856 112.736 506.56 334.144a32 32 0 0 1 0 35.712C869.856 751.296 700.8 864 512 864z m0-64c159.84 0 306.72-94.784 441.248-288C818.72 318.784 671.84 224 512 224c-159.84 0-306.72 94.784-441.248 288 134.528 193.216 281.408 288 441.248 288z"  ></path></symbol><symbol id="icon-xiazai" viewBox="0 0 1024 1024"><path d="M544.256 605.184l244.224-244.224a31.744 31.744 0 0 1 45.056 45.056l-295.424 295.424a36.864 36.864 0 0 1-51.2 0L190.464 406.528a31.744 31.744 0 1 1 45.056-45.056l244.224 244.224V111.104a32.256 32.256 0 1 1 64 0zM153.6 902.656a32.256 32.256 0 0 1 0-64h716.8a32.256 32.256 0 0 1 0 64z" fill="#5A5A68" ></path></symbol><symbol id="icon-fenxiang" viewBox="0 0 1024 1024"><path d="M213.664 453.248L796.16 231.328l-138.688 499.296-164.864-103.04a24 24 0 1 0-25.44 40.704l192.128 120.064a24 24 0 0 0 35.84-13.92l160-576a24 24 0 0 0-31.68-28.864l-672 256a24 24 0 0 0-4.16 42.784l138.944 86.848a24 24 0 1 0 25.44-40.704l-98.016-61.248z" fill="#36383F" ></path><path d="M408 602.752L848 209.888a24 24 0 0 0-32-35.776L360 581.248V864a24 24 0 0 0 48 0v-261.248z" fill="#36383F" ></path></symbol><symbol id="icon-shoucang" viewBox="0 0 1024 1024"><path d="M766.976 692.224h-190.464c-14.336 0-26.112-11.776-26.112-26.112s11.776-26.112 26.112-26.112h190.464c14.336 0 26.112 11.776 26.112 26.112s-11.776 26.112-26.112 26.112z" fill="#000000" ></path><path d="M645.632 761.344v-190.464c0-14.336 11.776-26.112 26.112-26.112s26.112 11.776 26.112 26.112v190.464c0 14.336-11.776 26.112-26.112 26.112s-26.112-11.776-26.112-26.112zM508.928 855.552c-6.656 0-12.8-2.56-17.92-7.168l-299.008-299.008c-43.008-43.008-67.072-100.864-67.072-161.792s24.064-118.784 67.072-161.792c42.496-42.496 103.424-58.368 171.008-45.056 57.856 11.264 116.736 43.52 161.28 88.064 9.728 9.728 9.728 26.112 0 35.84-9.728 9.728-26.112 9.728-35.84 0C415.232 231.424 294.912 194.048 227.84 261.12c-33.792 33.792-52.224 78.336-52.224 125.952s18.432 92.672 52.224 125.952l299.008 299.008c9.728 9.728 9.728 26.112 0 35.84-5.12 5.632-11.264 7.68-17.92 7.68z" fill="#000000" ></path><path d="M812.544 556.544c-6.656 0-12.8-2.56-17.92-7.168-9.728-9.728-9.728-26.112 0-35.84 33.792-33.792 52.224-78.336 52.224-125.952s-18.432-92.672-52.224-125.952c-41.472-41.472-98.816-38.4-129.536-33.28-50.176 8.704-101.888 35.84-138.24 72.192-9.728 9.728-26.112 9.728-35.84 0-9.728-9.728-9.728-26.112 0-35.84 44.032-44.032 104.448-75.776 165.376-86.016 69.632-12.288 131.584 4.608 174.08 47.104 43.008 43.008 67.072 100.864 67.072 161.792 0 60.928-23.552 118.784-67.072 161.792-5.12 4.608-11.776 7.168-17.92 7.168z" fill="#000000" ></path></symbol></svg>',function(e){var t=(t=document.getElementsByTagName("script"))[t.length-1],a=t.getAttribute("data-injectcss"),t=t.getAttribute("data-disable-injectsvg");if(!t){var c,o,i,l,n,s=function(t,a){a.parentNode.insertBefore(t,a)};if(a&&!e.__iconfont__svg__cssinject__){e.__iconfont__svg__cssinject__=!0;try{document.write("<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>")}catch(t){console&&console.log(t)}}c=function(){var t,a=document.createElement("div");a.innerHTML=e._iconfont_svg_string_3721619,(a=a.getElementsByTagName("svg")[0])&&(a.setAttribute("aria-hidden","true"),a.style.position="absolute",a.style.width=0,a.style.height=0,a.style.overflow="hidden",a=a,(t=document.body).firstChild?s(a,t.firstChild):t.appendChild(a))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(c,0):(o=function(){document.removeEventListener("DOMContentLoaded",o,!1),c()},document.addEventListener("DOMContentLoaded",o,!1)):document.attachEvent&&(i=c,l=e.document,n=!1,h(),l.onreadystatechange=function(){"complete"==l.readyState&&(l.onreadystatechange=null,d())})}function d(){n||(n=!0,i())}function h(){try{l.documentElement.doScroll("left")}catch(t){return void setTimeout(h,50)}d()}}(window);
src/assets/iconfont/iconfont.json
New file
@@ -0,0 +1,79 @@
{
  "id": "3721619",
  "name": "农大社",
  "font_family": "iconfont",
  "css_prefix_text": "icon-",
  "description": "",
  "glyphs": [
    {
      "icon_id": "144688",
      "name": "电话",
      "font_class": "dianhua",
      "unicode": "e61b",
      "unicode_decimal": 58907
    },
    {
      "icon_id": "1381825",
      "name": "通讯录",
      "font_class": "tongxunlu",
      "unicode": "e632",
      "unicode_decimal": 58930
    },
    {
      "icon_id": "4933375",
      "name": "人物-人",
      "font_class": "renwu-ren",
      "unicode": "e749",
      "unicode_decimal": 59209
    },
    {
      "icon_id": "4936984",
      "name": "QQ",
      "font_class": "QQ",
      "unicode": "e882",
      "unicode_decimal": 59522
    },
    {
      "icon_id": "577357",
      "name": "删除",
      "font_class": "shanchu",
      "unicode": "e74b",
      "unicode_decimal": 59211
    },
    {
      "icon_id": "6237070",
      "name": "竖线",
      "font_class": "tubiaozhizuo-",
      "unicode": "e605",
      "unicode_decimal": 58885
    },
    {
      "icon_id": "4347521",
      "name": "icon_预览",
      "font_class": "icon_yulan",
      "unicode": "eb8a",
      "unicode_decimal": 60298
    },
    {
      "icon_id": "4880421",
      "name": "下载",
      "font_class": "xiazai",
      "unicode": "e606",
      "unicode_decimal": 58886
    },
    {
      "icon_id": "9666176",
      "name": "分享",
      "font_class": "fenxiang",
      "unicode": "e602",
      "unicode_decimal": 58882
    },
    {
      "icon_id": "12344845",
      "name": "收藏",
      "font_class": "shoucang",
      "unicode": "e68e",
      "unicode_decimal": 59022
    }
  ]
}
src/assets/iconfont/iconfont.ttf
Binary files differ
src/assets/iconfont/iconfont.woff
Binary files differ
src/assets/iconfont/iconfont.woff2
Binary files differ
src/assets/images/bookStore/shoucang.svg
New file
@@ -0,0 +1 @@
<?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 t="1669360744685" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1168" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M766.976 692.224h-190.464c-14.336 0-26.112-11.776-26.112-26.112s11.776-26.112 26.112-26.112h190.464c14.336 0 26.112 11.776 26.112 26.112s-11.776 26.112-26.112 26.112z" fill="#009A44" p-id="1169"></path><path d="M645.632 761.344v-190.464c0-14.336 11.776-26.112 26.112-26.112s26.112 11.776 26.112 26.112v190.464c0 14.336-11.776 26.112-26.112 26.112s-26.112-11.776-26.112-26.112zM508.928 855.552c-6.656 0-12.8-2.56-17.92-7.168l-299.008-299.008c-43.008-43.008-67.072-100.864-67.072-161.792s24.064-118.784 67.072-161.792c42.496-42.496 103.424-58.368 171.008-45.056 57.856 11.264 116.736 43.52 161.28 88.064 9.728 9.728 9.728 26.112 0 35.84-9.728 9.728-26.112 9.728-35.84 0C415.232 231.424 294.912 194.048 227.84 261.12c-33.792 33.792-52.224 78.336-52.224 125.952s18.432 92.672 52.224 125.952l299.008 299.008c9.728 9.728 9.728 26.112 0 35.84-5.12 5.632-11.264 7.68-17.92 7.68z" fill="#009A44" p-id="1170"></path><path d="M812.544 556.544c-6.656 0-12.8-2.56-17.92-7.168-9.728-9.728-9.728-26.112 0-35.84 33.792-33.792 52.224-78.336 52.224-125.952s-18.432-92.672-52.224-125.952c-41.472-41.472-98.816-38.4-129.536-33.28-50.176 8.704-101.888 35.84-138.24 72.192-9.728 9.728-26.112 9.728-35.84 0-9.728-9.728-9.728-26.112 0-35.84 44.032-44.032 104.448-75.776 165.376-86.016 69.632-12.288 131.584 4.608 174.08 47.104 43.008 43.008 67.072 100.864 67.072 161.792 0 60.928-23.552 118.784-67.072 161.792-5.12 4.608-11.776 7.168-17.92 7.168z" fill="#009A44" p-id="1171"></path></svg>
src/assets/images/bookStore/testImg.png
src/assets/images/bookStore/tianmaologo2.svg
New file
@@ -0,0 +1 @@
<?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 t="1679558961529" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3002" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M461.842647 631.286804l22.067598-39.22128c-100.392478-56.483432-154.764829-113.929796-170.871669-182.065616l169.512718 0 0-45.008077-174.657902 0-0.050142-17.422811 0-77.797877 156.564825 0 0-44.99989L106.133226 224.771253l0 44.99989 156.709111 0 0 77.738525-0.042979 17.482163L88.473007 364.991832l0 45.008077 169.181167 0c-16.114003 68.13582-70.487378 125.583207-170.879855 182.065616l22.075785 39.22128c61.946864-34.853809 139.065266-86.675058 176.499853-165.742858 9.695826 20.555152 22.449291 40.244586 38.34226 58.924018C355.600951 561.991578 400.796292 596.934414 461.842647 631.286804z" fill="#DA1726" p-id="3003"></path><path d="M640.32976 432.744935c0.144286-50.42546 0.296759-98.048083-0.152473-132.307352-0.288572-21.99085-7.302313-39.795355-20.85191-52.950979-25.157983-24.414039-64.714907-23.735587-85.975117-23.378453-2.181689 0.041956-4.177136 0.076748-5.943362 0.076748l0 45.01217c1.995447 0 4.245697-0.047072 6.707772-0.089028 14.721283-0.25071 42.129516-0.713244 53.862745 10.68127 1.732457 1.681292 7.004531 6.7968 7.190773 21.22644 0.067538 4.924149 0.119727 10.163477 0.161682 15.631002l-69.910233 41.692564 23.059182 38.644135 46.986127-28.018124c-0.00921 15.945157-0.050142 32.81129-0.102331 50.127677l-69.944002 41.72224 23.059182 38.657438 46.731324-27.883047c-0.025583 12.905938-0.042979 25.735128-0.042979 38.300304 0 10.31595-6.070252 26.736944-13.270235 35.846416-20.886703 26.447349-56.478316 46.867424-56.809867 47.062875l22.159696 39.167045c1.765203-1.001817 43.522236-24.852014 69.969585-58.337663 13.525038-17.116843 22.957875-43.326784 22.957875-63.73765C640.176264 484.715587 640.253012 458.462666 640.32976 432.744935z" fill="#DA1726" p-id="3004"></path><path d="M708.015326 333.907882 753.032612 333.907882 753.032612 297.712519 848.710718 297.712519 848.710718 333.907882 893.719818 333.907882 893.719818 297.712519 937.080372 297.712519 937.080372 252.704442 893.719818 252.704442 893.719818 223.412302 848.710718 223.412302 848.710718 252.704442 753.032612 252.704442 753.032612 223.412302 708.015326 223.412302 708.015326 252.704442 665.621796 252.704442 665.621796 297.712519 708.015326 297.712519Z" fill="#DA1726" p-id="3005"></path><path d="M732.450854 633.655757l137.800459 0c36.763298 0 66.829058-30.072923 66.829058-66.833151L937.080372 391.660214l0-27.865651L665.621796 363.794563l0 45.008077L665.621796 566.822606C665.621796 603.582835 695.687556 633.655757 732.450854 633.655757zM823.851541 408.80264l68.220754 0 0 67.082838-68.220754 0L823.851541 408.80264zM823.851541 520.889461l68.220754 0 0 45.933145c0 11.831466-9.993608 21.820981-21.819958 21.820981l-46.400796 0L823.851541 520.889461zM710.639083 408.79343l68.212568 0 0 67.082838L710.639083 475.876268 710.639083 408.79343zM710.630896 520.889461l68.220754 0 0 67.754127-46.400796 0c-11.827373 0-21.820981-9.989515-21.820981-21.820981L710.629873 520.889461z" fill="#DA1726" p-id="3006"></path><path d="M392.713196 689.854711c-17.32969 0-23.51967 18.356067-23.51967 18.356067l-36.814464 92.37692 19.044752 0 15.341407-39.115879 50.544163 0 15.105023 39.115879 20.623713 0-36.797068-92.37692C416.241053 708.210777 410.092006 689.854711 392.713196 689.854711zM374.017392 743.5394l10.714016-26.091238c0 0 2.12336-5.866614 7.981788-5.866614 6.053879 0 7.997138 5.866614 7.997138 5.866614l9.399067 24.957415 0.424672 1.133823L374.017392 743.5394z" fill="#DA1726" p-id="3007"></path><path d="M88.201831 707.030905 132.99706 707.030905 132.99706 800.527322 133.00627 800.527322 151.642722 800.527322 151.642722 707.030905 196.447161 707.030905 196.447161 689.582511 88.201831 689.582511Z" fill="#DA1726" p-id="3008"></path><path d="M478.178707 763.26772l0-73.446779-18.525935 0 0 18.415418 0 63.628156c0 16.650215 11.538801 28.621874 29.079292 28.621874l22.534226 0 0-18.314111c0 0-4.168949 0.025583-13.71128 0.025583C485.123886 782.196839 478.178707 779.916912 478.178707 763.26772z" fill="#DA1726" p-id="3009"></path><path d="M541.924543 763.26772l0-73.446779-18.526959 0 0 18.415418 0 63.628156c0 16.650215 11.54801 28.621874 29.096688 28.621874l22.51683 0 0-18.314111c0 0-4.15974 0.025583-13.721513 0.025583C548.869722 782.196839 541.924543 779.916912 541.924543 763.26772z" fill="#DA1726" p-id="3010"></path><path d="M309.921585 690.321338c-6.180769-2.505054-11.92868 2.105964-13.066597 3.001357-8.126075 6.39771-16.887622 15.923668-32.815383 15.923668l-0.629333 0-0.194428 0-0.620124 0c-15.936971 0-24.698518-9.525957-32.815383-15.923668-1.137916-0.895393-6.894014-5.506411-13.075807-3.001357-5.782703 2.335185-6.691399 7.879458-6.691399 12.277628 0 8.468882 0.017396 57.319473 0.017396 97.836259l18.500353 0 0-83.249029c6.121418 3.378957 18.891256 11.759835 34.275641 11.759835l1.019213 0c14.629185 0 28.146037-8.379854 34.259268-11.759835l0 83.249029 18.517749 0c0.016373-40.516786 0.024559-89.366354 0.024559-97.836259C316.629357 698.200796 315.696102 692.656523 309.921585 690.321338z" fill="#DA1726" p-id="3011"></path><path d="M930.508699 690.321338c-6.180769-2.505054-11.92868 2.105964-13.066597 3.001357-8.117888 6.39771-16.879436 15.923668-32.807197 15.923668l-0.62831 0-0.203638 0-0.610914 0c-15.935947 0-24.707728-9.525957-32.816406-15.923668-1.136893-0.895393-6.894014-5.506411-13.075807-3.001357-5.78168 2.335185-6.690376 7.879458-6.690376 12.277628 0 8.468882 0.017396 57.319473 0.017396 97.836259l18.500353 0 0-83.249029c6.121418 3.378957 18.891256 11.759835 34.267455 11.759835l1.019213 0c14.637372 0 28.154223-8.379854 34.267455-11.759835l0 83.249029L937.199075 800.435225c0.016373-40.516786 0.025583-89.366354 0.025583-97.836259C937.224658 698.200796 936.282193 692.656523 930.508699 690.321338z" fill="#DA1726" p-id="3012"></path><path d="M603.888803 782.018783c-5.111414 0-9.271154 4.139274-9.271154 9.246595 0 5.111414 4.15974 9.254781 9.271154 9.254781 5.111414 0 9.254781-4.143367 9.254781-9.254781C613.142561 786.158057 609.000218 782.018783 603.888803 782.018783z" fill="#DA1726" p-id="3013"></path><path d="M766.642584 689.922249c-13.338796 0-24.800849 3.981684-34.097586 11.835559-11.114129 9.432837-16.759709 24.062022-16.759709 43.462884 0 17.685801 4.728698 31.465642 14.018272 40.941458 9.314133 9.517771 21.701255 14.366196 36.840046 14.366196 9.373485 0 18.178011-2.194992 26.158776-6.504134 7.964392-4.325515 14.119579-10.489912 18.331507-18.339694 4.13518-7.79043 6.214539-18.535145 6.214539-31.907711 0-16.666588-4.762467-29.946033-14.178931-39.455617C793.743826 694.774767 781.449825 689.922249 766.642584 689.922249zM789.829679 773.761726c-6.231935 6.049786-14.043854 9.122775-23.187095 9.122775-9.43386 0-17.057491-2.954285-23.331381-9.051143-6.376221-6.245238-9.628288-15.860223-9.628288-28.612665 0-12.744255 3.252067-22.338774 9.628288-28.53694 6.180769-5.985318 14.042831-9.025561 23.331381-9.025561 9.136078 0 16.921391 3.043313 23.13593 9.067516 6.4192 6.198166 9.679453 15.597233 9.679453 27.925003C799.457967 757.727541 796.222273 767.529791 789.829679 773.761726z" fill="#DA1726" p-id="3014"></path><path d="M675.395394 706.776102c9.136078 0 16.912182 3.039219 23.12672 9.05933 0.432859 0.424672 0.849344 0.865717 1.264806 1.324158l10.384511-15.401782c-9.16166-8.439206-20.862143-12.718673-34.777061-12.718673-13.338796 0-24.801872 3.973498-34.098609 11.831466-11.122315 9.42465-16.760732 24.066115-16.760732 43.454698 0 17.689894 4.720511 31.473829 14.018272 40.941458 9.305947 9.531074 21.693068 14.370289 36.84107 14.370289 9.364275 0 18.168802-2.199085 26.15059-6.512321 1.952468-1.061169 3.795443-2.232854 5.536087-3.510964l-8.277524-16.968463c-0.076748 0.076748-0.144286 0.152473-0.230244 0.229221-6.223748 6.053879-14.026458 9.126868-23.178909 9.126868-9.43386 0-17.066701-2.963495-23.332405-9.05933-6.376221-6.249331-9.627265-15.852036-9.627265-28.616758 0-12.740162 3.251044-22.334681 9.627265-28.523637C658.244782 709.797925 666.097634 706.776102 675.395394 706.776102z" fill="#DA1726" p-id="3015"></path></svg>
src/assets/images/bookStore/¾©¶«icon-01.svg
New file
@@ -0,0 +1 @@
<?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 t="1666837514634" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1889" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M442.5 699.7H285.8v21.4h156.7v-21.4zM663.6 220c-3.5-0.3-7.1-0.7-10.6-0.9-4-0.4-7.9-0.8-11.8-1.4 3.9 0.6 7.9 1 11.8 1.4 3.5 0.2 7 0.7 10.6 0.9z" fill="#E12319" p-id="1890"></path><path d="M767.2 83.4H213.1c-78.7 0-142.5 63.8-142.5 142.5V780c0 78.7 63.8 142.5 142.5 142.5h554.1c78.7 0 142.5-63.8 142.5-142.5V225.9c0-78.7-63.8-142.5-142.5-142.5zM228 323.3c1.8-4.8 3.3-9.6 5.5-14.2 2.8-5.8 6.3-11.2 10.4-16.2 10.2-12.4 17.2-26.6 23.1-41.5 3.4-8.4 7.1-16.7 10.5-25.2 3.9-9.7 12.4-11.4 21-8.8 4.2 1.3 8 3.6 11.3 6.4 6.4 5.4 13.7 9.6 20.7 14.3 1.2 0.8 2.1 1.2 3.4-0.2 13.4-14.5 30.1-24.2 47.9-32 35.1-15.6 71.9-25.7 109.7-32 30.8-5.1 61.8-6.1 93-4.6 0.6 0 1.2-0.1 1.8-0.1 1.8-1.7 3.4-1 5.1 0.2 1.2 0.4 2.4 0.5 3.6 0.3 0.8-0.7 1.5-0.7 2.2 0.2 4.4 0.4 8.7 0.9 13.1 1.3 0.8-0.7 1.5-0.6 2.1 0.2 1.5 0.2 2.9 0.3 4.4 0.5 0.6-0.6 1-0.5 1.4 0.2 0.9 0.4 1.9 0.6 2.9 0.4 1.2-1 2.2-0.7 3.1 0.5 7.3 1.6 14.7 3 22 4.8 19.9 4.9 39.1 11.5 55.4 24.7 13.1 10.6 18.2 23.9 15.5 40.9-3.7 22.9-11.7 44-23 64.1-1.4 2.5-3.9 3.8-5.6 5.9 0.8 3.9-3 5.8-3.9 9-0.8 2.7-3.2 4.4-4.9 6.5-0.1 0.4-0.2 0.9-0.8 0.6 0 0.5 0.2 1.3-0.7 0.7 0.6 1.6-1 2.3-1.7 3.2-10.5 13.9-23.5 25.2-37.2 35.8-28.5 22.1-61.1 35.1-96.5 41.2-8.8 1.5-17.7 0-26.5-1-6.5-0.7-13-1.5-19.5-2.8-1.2-0.2-2.6-1.2-3.8 0.1-0.1 0.1-0.4 0.2-0.5 0.3-0.7-4.6-4.8-2.7-7.1-3.2-20.3-4.7-38.9-13.6-57-23.5-23.5-13-46.3-27.1-65.9-45.9-15.1-14.5-28.3-30.4-36.5-50-1.6-3.9-3.1-8-3.7-12.2-0.4-3-1.6-4.8-4.7-5.7 0.6 6.8 1 13.6 0.4 20.3-2.1 27.1-15.2 46.2-41.1 55.6-8.6 3.1-16.9 7.1-26.3 8-12.5 1.3-28.2-12.2-22.6-27.1z m68.1 473.4c-6.2 11.1-14.9 20.9-22.5 31.2-6.1 8.2-14.1 10.8-25.4 7.4 3.6-6.4 7.8-12.1 10.2-18.5 6.9-18.3 13.5-36.8 19.3-55.5 1.9-6 3.5-9.2 10.3-8.8 8.2 0.5 16.4 0.1 28.3 0.1-7.4 16.5-12.7 30.9-20.2 44.1z m84.2-8c-0.5 32.8-19.2 49.6-53.4 47.3v-13.9c20-7.1 21-8.6 21-30.6v-51.4h-93.1v-57.7h218.5v57h-93v35.8c0 4.4 0.1 9 0 13.5z m75.7 40.6c-20-21.5-33.7-46.3-41.9-76.2h31.4c10.9 28.2 21.4 55.5 32 82.9-7.3 2-14.5 0.8-21.5-6.7z m25.2-162.6H246.9v-16.5h100.6c0.5-4.8 0.8-8.5 1.3-13h30.8c0.6 4.1 1.2 8.1 2 13.2h75.1c3.8 0 7.6-0.1 11.4-0.1 14.8-0.2 14.9-0.1 13.1 16.4z m26.7-172.5c-4.4 9.6-6.8 20-9.8 30.1-0.7 2.3-1.5 3.5-4.1 3.4-3 0-6.9 1.8-8.8 0.1-2-1.8-0.2-5.7 0-8.6 0.9-11.5 1.4-23 0.7-34.8-3.8 1.2-6.8 3.5-9.6 5.9-10.9 9.1-19.9 20-30.1 29.7-1.7 1.6-3.4 3.1-4.9 4.9-2.2 2.8-5.2 3.1-8.4 3.4-2.9 0.3-3.5-0.6-2-3.3 5.5-9.2 10.8-18.5 16.2-27.7 2.9-5 5.7-10.2 8.9-15.1 1.6-2.5 0.5-3-1.5-3.5-3.7-0.9-7-2.7-10-5-7.2-5.5-10.6-16.8-7.3-25.1 1.1 3.8 2.4 7.3 4.7 10.3 7.1 9.6 17.5 7.9 25.1 3.6 0.9-0.5 1.4-1.6 2-2.6 9-15 17.9-30 26.8-45.1 1.4-2.4 2.7-2.9 5.5-2.4 12 2.2 24 4 36.2 2.5 5.8-0.7 11.4-2 17.2-5.3v6c-0.3 36.2-0.6 72.5-0.7 108.7 0 3.4-1 4-4.1 3.7-7.6-0.7-7.5-0.6-9.4-8.1-2.2-8.4-3.3-17.2-6.4-25.4-1.7-4.3-3.6-8.5-6.9-11.9-4.3-4.3-7.5-4.3-11.9 0-3.4 3.4-5.5 7.5-7.4 11.6z m31.4 339c-4 3.5-11.6 2.9-18.5 4.4 8.2-18.6 15.7-35 22.6-51.6 2.6-6.2 5.3-13 5.4-19.6 0.2-12.7 6.8-15 17.5-13.9 6.2 0.6 12.6 0.1 20.4 0.1-9.5 32.3-23.6 59.5-47.4 80.6z m187.8-4.8c-19.7-21.3-32.9-45.8-40.9-74.1 2.1-0.9 2.4-1.1 2.8-1.1 29.8-3 29.5-2.9 37.6 25.3 2.9 10.2 6.8 20.1 11.1 29.8 4.1 9.2 9.4 17.9 14.3 27.2-10.3 2.7-17.8 0.6-24.9-7.1zM753.5 667c-3.5 0.2-7.5 0.6-11.5 0.6-45.9 0.1-91.9 0.3-137.8-0.1-8.8-0.1-13.8 2.2-17.1 10.8-5.5 14-12.4 27.5-19.8 43.6 17.9 0 33.9 0.3 50-0.4 1.8-0.1 4.7-5.1 4.9-8 0.6-9.7 0.2-19.5 0.2-30.1h31.7v38.3h90.7v17.8h-90.5c0 17.4 0.1 33.2 0 49-0.2 32.8-18.6 49.6-52.7 47.8-2.5-8.7-3.3-15.3 8.8-18.2 4.5-1.1 10.4-8 10.6-12.6 1.1-21.4 0.5-43 0.5-65.9h-95.1c11.2-24.4 21.6-46.9 33-71.8h-40.7v-17.5c13.6 0 27.2 0.2 40.8-0.1 3.2-0.1 8.4-0.8 9.1-2.6 7.7-19.4 23.5-8.5 37.3-11.9-1.8 5.5-3 8.9-4.7 14h152.2c0.1 6.4 0.1 11.1 0.1 17.3z" fill="#E12319" p-id="1891"></path><path d="M678 329.8c0.8 1.8-0.9 2.4-1.6 3.4-10.5 13.9-23.5 25.2-37.2 35.8-28.5 22.1-61.1 35.1-96.5 41.2-8.8 1.5-17.7 0-26.5-1-6.5-0.7-13-1.5-19.5-2.8-1.2-0.2-2.6-1.2-3.8 0.1-0.1 0.1-0.4 0.2-0.5 0.3-0.7-4.6-4.8-2.7-7.1-3.2-20.3-4.7-38.9-13.6-57-23.5-23.5-13-46.3-27.1-65.9-45.9-15.1-14.5-28.3-30.4-36.5-50-1.6-3.9-3.1-8-3.7-12.2-0.4-3-1.6-4.8-4.7-5.7 0.6 6.8 1 13.6 0.4 20.3-2.1 27.1-15.2 46.2-41.1 55.6-8.6 3.1-16.9 7.1-26.3 8-12.5 1.2-28.1-12.2-22.5-27.1 1.8-4.8 3.3-9.6 5.5-14.2 2.8-5.8 6.3-11.2 10.4-16.2 10.2-12.4 17.2-26.6 23.1-41.5 3.4-8.4 7.1-16.7 10.5-25.2 3.9-9.7 12.4-11.4 21-8.8 4.2 1.3 8 3.6 11.3 6.4 6.4 5.4 13.7 9.6 20.7 14.3 1.2 0.8 2.1 1.2 3.4-0.2 13.4-14.5 30.1-24.2 47.9-32 35.1-15.6 71.9-25.7 109.7-32 30.8-5.1 61.8-6.1 93-4.6 0.6 0 1.2-0.1 1.8-0.1 1.7 0.1 3.4 0.1 5.1 0.2 1.2 0.4 2.4 0.5 3.6 0.3 0.7 0.1 1.4 0.1 2.2 0.2 4.4 0.4 8.7 0.9 13.1 1.3 0.7 0.1 1.4 0.1 2.1 0.2 1.5 0.2 2.9 0.3 4.4 0.5 0.5 0.1 1 0.1 1.4 0.2 0.9 0.4 1.9 0.6 2.9 0.4 1 0.2 2.1 0.3 3.1 0.5 7.3 1.6 14.7 3 22 4.8 19.9 4.9 39.1 11.5 55.4 24.7 13.1 10.6 18.2 23.9 15.5 40.9-3.7 22.9-11.7 44-23 64.1-1.4 2.5-3.9 3.8-5.6 5.9-1.5 0.5-3 0.8-4.4 1.5-7.6 3.6-15.7 6-23.9 7.4-31.5 5.3-62.5 3-92.8-7.2-28.5-9.6-51.1-27.4-69-51.4-1.8-2.5-5.2-3.4-7.3-2-2 1.3-2.9 6.4-1.3 8.6 5.6 7.9 12 15.3 18.9 22.1 24.1 23.5 53.6 36.2 86.3 42 20.7 3.7 41.6 3.6 62.4 0.7 7-1 13.8-3.1 20.6-5.1z m-25-110.7c6.3 0.3 12.5 1.5 18.9 0.9 8.1-0.7 15.9-2 22.7-6.9 4.4-3.2 5-8.2 1.6-12.4-1.3-1.6-2.9-3-4.7-4-6.9-3.9-14.2-6.8-22-7.8-8-1-16-1.5-24.2-0.6-6.5 0.7-12.7 1.6-18.4 4.7-4.3 2.4-8.2 5.8-8.2 10.8 0 5.3 4.8 7.8 9.1 9.9 7.9 3.9 16.6 4.5 25.2 5.4z m-161.9-0.4c-0.7 6.7 5.1 13.4 12.1 14.2 6.2 0.7 14.6-5.4 15.3-11.1 0.8-6.1-5.6-13.4-12.3-14-8-0.7-14.3 3.9-15.1 10.9z" fill="#EEEEEE" p-id="1892"></path><path d="M437.2 448.7c1.1 3.8 2.4 7.3 4.7 10.3 7.1 9.6 17.5 7.9 25.1 3.6 0.9-0.5 1.4-1.6 2-2.6 9-15 17.9-30 26.8-45.1 1.4-2.4 2.7-2.9 5.5-2.4 12 2.2 24 4 36.2 2.5 5.8-0.7 11.4-2 17.2-5.3v6c-0.3 36.2-0.6 72.5-0.7 108.7 0 3.4-1 4-4.1 3.7-7.6-0.7-7.5-0.6-9.4-8.1-2.2-8.4-3.3-17.2-6.4-25.4-1.7-4.3-3.6-8.5-6.9-11.9-4.3-4.3-7.5-4.3-11.9 0-3.2 3.2-5.3 7.2-7.2 11.3-4.4 9.6-6.8 20-9.8 30.1-0.7 2.3-1.5 3.5-4.1 3.4-3 0-6.9 1.8-8.8 0.1-2-1.8-0.2-5.7 0-8.6 0.9-11.5 1.4-23 0.7-34.8-3.8 1.2-6.8 3.5-9.6 5.9-10.9 9.1-19.9 20-30.1 29.7-1.7 1.6-3.4 3.1-4.9 4.9-2.2 2.8-5.2 3.1-8.4 3.4-2.9 0.3-3.5-0.6-2-3.3 5.5-9.2 10.8-18.5 16.2-27.7 2.9-5 5.7-10.2 8.9-15.1 1.6-2.5 0.5-3-1.5-3.5-3.7-0.9-7-2.7-10-5-7.4-5.2-10.7-16.6-7.5-24.8z" fill="#EEEEEE" p-id="1893"></path><path d="M678 329.8c-6.8 2-13.6 4-20.7 5-20.9 2.9-41.7 3-62.4-0.7-32.7-5.8-62.1-18.5-86.3-42-7-6.8-13.3-14.1-18.9-22.1-1.6-2.2-0.7-7.2 1.3-8.6 2.2-1.4 5.5-0.5 7.3 2 17.9 24 40.5 41.8 69 51.4 30.2 10.2 61.3 12.4 92.8 7.2 8.3-1.4 16.3-3.8 23.9-7.4 1.4-0.6 2.9-1 4.4-1.5 0.8 3.9-3 5.8-3.9 9-0.8 2.7-3.2 4.4-4.9 6.5-0.5-0.1-0.8 0.1-0.8 0.6l0.1-0.1c-0.6 0.1-1.1 0.1-0.9 0.7zM591.3 169.5c-1.7-0.1-3.4-0.1-5.1-0.2 1.8-1.7 3.5-1 5.1 0.2zM624.2 172.9c-1-0.2-2.1-0.3-3.1-0.5 1.2-0.9 2.2-0.6 3.1 0.5zM597.1 169.9c-0.7-0.1-1.4-0.1-2.2-0.2 0.8-0.7 1.6-0.6 2.2 0.2zM612.4 171.4c-0.7-0.1-1.4-0.1-2.1-0.2 0.7-0.7 1.4-0.6 2.1 0.2zM618.2 172.1c-0.5-0.1-1-0.1-1.4-0.2 0.5-0.6 1-0.5 1.4 0.2z" fill="#282526" p-id="1894"></path><path d="M678.7 329.3c0.1-0.5 0.4-0.6 0.8-0.6-0.1 0.4-0.1 0.9-0.8 0.6z" fill="#EEEEEE" p-id="1895"></path><path d="M677.9 329.9c-0.1-0.7 0.4-0.7 0.9-0.7-0.1 0.5 0.3 1.6-0.9 0.7z" fill="#EEEEEE" p-id="1896"></path><path d="M653 219.1c-8.6-0.9-17.2-1.6-25.2-5.3-4.4-2.1-9.1-4.6-9.1-9.9 0-5 3.9-8.5 8.2-10.8 5.7-3.1 11.9-4 18.4-4.7 8.2-0.9 16.2-0.4 24.2 0.6 7.8 1 15.1 4 22 7.8 1.8 1 3.4 2.4 4.7 4 3.4 4.2 2.8 9.2-1.6 12.4-6.8 4.9-14.6 6.1-22.7 6.9-6.4 0.6-12.6-0.7-18.9-1z" fill="#282526" p-id="1897"></path><path d="M491.1 218.7c0.8-7 7.1-11.6 15.2-10.9 6.7 0.6 13 7.9 12.3 14-0.7 5.6-9.1 11.7-15.3 11.1-7.1-0.7-12.9-7.5-12.2-14.2z" fill="#444243" p-id="1898"></path><path d="M559.6 667.8h-40.7v-17.5c13.6 0 27.2 0.2 40.8-0.1 3.2-0.1 8.4-0.8 9.1-2.6 7.7-19.4 23.5-8.5 37.3-11.9-1.8 5.5-3 8.9-4.7 14h152.2V667c-3.5 0.2-7.5 0.6-11.5 0.6-45.9 0.1-91.9 0.3-137.8-0.1-8.8-0.1-13.8 2.2-17.1 10.8-5.5 14-12.4 27.5-19.8 43.6 17.9 0 33.9 0.3 50-0.4 1.8-0.1 4.7-5.1 4.9-8 0.6-9.7 0.2-19.5 0.2-30.1h31.7v38.3h90.7v17.8h-90.5c0 17.4 0.1 33.2 0 49-0.2 32.8-18.6 49.6-52.7 47.8-2.5-8.7-3.3-15.3 8.8-18.2 4.5-1.1 10.4-8 10.6-12.6 1.1-21.4 0.5-43 0.5-65.9h-95.1c11.3-24.4 21.7-47 33.1-71.8zM326.9 836v-13.9c20-7.1 21-8.6 21-30.6v-51.4h-93.1v-57.7h218.5v57h-93v49.5c-0.5 32.6-19.1 49.5-53.4 47.1z m-41.1-114.9h156.7v-21.4H285.8v21.4zM246.8 666.7v-16.5h100.6c0.5-4.8 0.8-8.5 1.3-13h30.8c0.6 4.1 1.2 8.1 2 13.2h75.1c3.8 0 7.6-0.1 11.4-0.1 15-0.1 15 0 13.2 16.5-77.7-0.1-155.5-0.1-234.4-0.1z" fill="#FFFFFF" p-id="1899"></path><path d="M686.2 754.2c2.1-0.9 2.4-1.1 2.8-1.1 29.8-3 29.5-2.9 37.6 25.3 2.9 10.2 6.8 20.1 11.1 29.8 4.1 9.2 9.4 17.9 14.3 27.2-10.3 2.8-17.8 0.7-24.9-7-19.7-21.3-33-45.9-40.9-74.2zM414.1 753.1h31.4c10.9 28.2 21.4 55.5 32 82.9-7.2 2.1-14.5 0.8-21.4-6.6-20.1-21.6-33.7-46.3-42-76.3zM316.4 752.6c-7.4 16.5-12.8 30.9-20.3 44.2-6.2 11.1-14.9 20.9-22.5 31.2-6.1 8.2-14.1 10.8-25.4 7.4 3.6-6.4 7.8-12.1 10.2-18.5 6.9-18.3 13.5-36.8 19.3-55.5 1.9-6 3.5-9.2 10.3-8.8 8.2 0.4 16.4 0 28.4 0zM586.6 752.5c-9.4 32.4-23.5 59.5-47.4 80.6-4 3.5-11.6 2.9-18.5 4.4 8.2-18.6 15.7-35 22.6-51.6 2.6-6.2 5.3-13 5.4-19.6 0.2-12.7 6.8-15 17.5-13.9 6.2 0.6 12.6 0.1 20.4 0.1z" fill="#FFFFFF" p-id="1900"></path></svg>
src/assets/images/bookStore/µ±µ±Íø.svg
New file
@@ -0,0 +1 @@
<?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 t="1666837543425" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2096" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M83.168188 519.487531c17.535375-0.12689 35.071773-0.031722 52.608172-0.031722 17.198707 0.005117 34.398438-0.093121 51.596122 0.037862M115.494431 414.897452c-0.060375-11.618619-9.787924-21.146623-21.386076-20.948101-11.92868 0.204661-20.784372 9.349949-20.748556 21.428032 0.035816 11.970636 9.128915 20.87647 21.194718 20.756743C106.512872 436.015422 115.556852 426.843528 115.494431 414.897452zM289.782919 553.038672c16.989953 0 33.81413 0.290619 50.620911-0.121773 8.516977-0.208754 14.848173-7.466042 15.283078-15.975856 0.415462-8.111748-5.850242-16.909112-13.930267-17.206894-17.071817-0.629333-34.18252-0.191358-51.973722-0.191358C289.782919 530.900465 289.782919 541.259394 289.782919 553.038672zM187.373505 519.493671c-17.197684-0.130983-34.397415-0.032746-51.596122-0.035816-17.536398-0.002047-35.072797-0.097214-52.608172 0.029676M83.168188 519.487531c-12.458753 0.090051-19.564591 6.367011-19.522636 16.84669 0.039909 10.083659 6.940063 16.535605 18.760273 16.59291 35.071773 0.170892 70.14457 0.159636 105.216343 0.007163 11.793604-0.051165 18.978237-6.505158 19.142989-16.361643 0.173962-10.440793-7.086395-16.98586-19.392676-17.080004M84.947717 598.183871c24.419156 28.183899 55.475476 40.190351 92.771917 36.478819 47.625694-4.739954 86.159312-40.048111 91.570555-84.472903 6.16235-50.594305-20.676925-93.489254-68.474534-109.435435-18.427698-6.148024-18.427698-6.148024-18.46249-25.237801 0-4.723581 0.229221-9.460466-0.046049-14.167674-0.623193-10.627035-7.377014-17.526165-16.97665-17.672498-9.419534-0.143263-16.169261 5.803169-17.104563 16.244986-0.74906 8.372691-0.848321 16.874319-0.358157 25.267477 0.462534 7.91425-1.571798 11.656481-10.215666 13.803377-21.809725 5.415336-40.137139 17.253966-54.259788 35.004235-5.771447 7.254218-5.374404 16.502859 0.49221 21.914102 6.594185 6.082532 15.428388 5.467525 22.453385-1.62808 3.083222-3.114944 5.903453-6.505158 9.116635-9.474792 35.971259-33.253358 99.613742-21.217231 118.365828 22.680559 10.670014 24.978904 8.162914 49.242518-9.119705 70.372767-19.277042 23.568788-45.342698 30.407544-74.640977 25.463951-17.675568-2.982938-31.243585-13.151531-43.420929-26.048259-3.51301-3.719718-10.662851-6.179746-15.71696-5.583159-4.046153 0.477884-9.851369 6.060019-10.523681 10.100032C79.539544 586.947969 81.489966 594.192977 84.947717 598.183871zM257.008468 619.286492c23.107277 13.903661 47.164183 18.198477 73.251328 15.07637 60.35767-7.224542 100.997252-65.930595 85.044932-124.519991-10.425444-38.290071-36.285414-61.467957-74.200956-71.071685-8.639774-2.187829-11.669784-5.595438-10.839883-14.198374 0.709151-7.354502 0.26299-14.83487 0.101307-22.25384-0.25071-11.538801-6.647397-18.517749-16.845667-18.653849-10.204409-0.1361-16.756639 6.811126-16.983813 18.290575-0.160659 8.094352-0.469698 16.22452 0.083911 24.284079 0.50756 7.381108-2.189875 10.463306-9.461489 12.490475-10.384511 2.894933-20.227694 7.730055-30.834262 11.9471 6.991228 9.400091 12.596899 16.936741 18.73162 25.184589 37.731346-20.057825 77.543074-7.537673 97.270371 15.760962 18.804275 22.209838 21.172205 56.387241 4.752234 81.044828-8.879228 13.334703-21.12718 22.574135-36.33351 27.701922-22.774703 7.679913-44.886303 5.598508-65.754586-5.548366C268.717138 603.353614 263.006066 611.124602 257.008468 619.286492zM403.465075 415.390685c0.090051-12.009522-8.852622-21.298072-20.644179-21.443381-11.720949-0.144286-21.296025 9.224082-21.376866 20.917402-0.082888 11.992125 8.90788 21.169135 20.860097 21.291932C394.440537 436.281481 403.374 427.514817 403.465075 415.390685zM261.482363 415.359986c0.177032-11.543917-9.41851-21.366633-20.921495-21.417799-12.117992-0.053212-20.944008 8.718569-21.10262 20.971637-0.159636 12.251022 8.544607 21.204951 20.630876 21.222347C252.221442 436.154591 261.298168 427.338808 261.482363 415.359986z" p-id="2097" fill="#d81e06"></path><path d="M512.135076 497.649154l-10.077519 0 0-9.461489-0.205685 0c-4.149507 7.198959-10.593266 10.797927-19.334347 10.797927-7.198959 0-12.923334-2.562359-17.174148-7.687076-4.250814-5.123694-6.375198-12.040221-6.375198-20.747533 0-9.391904 2.39863-16.924461 7.197936-22.597671 4.799306-5.67321 11.072173-8.509814 18.819624-8.509814 7.746428 0 13.368472 3.016707 16.866133 9.049097l0.205685 0 0-35.015491 10.077519 0L512.135076 497.649154zM502.107699 463.815581c0-4.558829-1.499144-8.372691-4.498454-11.440563-2.99931-3.067872-6.693446-4.601808-11.08036-4.601808-5.347798 0-9.56382 1.997494-12.649088 5.990434-3.085268 3.993964-4.627391 9.435906-4.627391 16.325827 0 6.342452 1.481747 11.355629 4.447289 15.039531 2.964518 3.685949 6.915503 5.5279 11.851932 5.5279 4.866844 0 8.844435-1.808182 11.929704-5.424546 3.084245-3.616364 4.626367-8.114818 4.626367-13.497409L502.107699 463.815581zM531.467377 444.74013c5.655813-3.530406 12.186554-5.29561 19.591197-5.29561 13.710256 0 20.567431 7.198959 20.567431 21.595854l0 36.609803-9.975189 0 0-8.792247-0.25685 0c-3.942799 6.753821-9.752108 10.129708-17.430998 10.129708-5.519714 0-9.906627-1.49198-13.162788-4.473895-3.257184-2.982938-4.88424-7.009647-4.88424-12.0832 0-10.626012 6.28924-16.813944 18.87079-18.562774l16.864086-2.364861c0-9.289574-3.839445-13.934361-11.517311-13.934361-6.822382 0-13.044084 2.297322-18.665105 6.889921L531.4684 444.74013zM548.33351 470.91221c-4.663206 0.617054-7.875365 1.782599-9.641591 3.496637-1.766226 1.715061-2.648316 4.113691-2.648316 7.198959 0 2.707668 0.959861 4.919033 2.879584 6.633071 1.918699 1.714038 4.455475 2.570545 7.610328 2.570545 4.386914 0 8.003278-1.542122 10.850116-4.627391 2.843768-3.085268 4.267187-6.958482 4.267187-11.620665l0-5.450129L548.33351 470.91221zM636.412544 497.649154l-10.026354 0 0-32.341592c0-11.689227-4.26821-17.533328-12.803607-17.533328-4.421706 0-8.055466 1.645476-10.900258 4.936429-2.845815 3.290953-4.26821 7.455809-4.26821 12.494569l0 32.444946-10.078543 0 0-56.869219 10.078543 0 0 9.4093 0.205685 0c4.284583-7.164167 10.506285-10.745738 18.665105-10.745738 6.238075 0 10.985192 1.997494 14.242376 5.990434 3.257184 3.993964 4.88424 9.812483 4.88424 17.45658L636.411521 497.649154zM702.58771 492.867244c0 21.046339-10.214642 31.571043-30.644951 31.571043-7.060813 0-13.196557-1.320065-18.407232-3.959172l0-9.718339c6.341429 3.530406 12.426007 5.296633 18.253736 5.296633 13.81361 0 20.721951-7.268544 20.721951-21.801539l0-6.016017-0.205685 0c-4.319375 7.164167-10.765181 10.746762-19.334347 10.746762-7.130398 0-12.837376-2.553149-17.121959-7.661494-4.285606-5.107321-6.426363-11.877515-6.426363-20.310581 0-9.699919 2.365884-17.386996 7.095605-23.061228 4.730745-5.67321 11.037381-8.509814 18.921955-8.509814 7.575536 0 13.196557 3.016707 16.865109 9.049097l0.205685 0 0-7.712659 10.077519 0L702.588733 492.867244zM692.51019 463.815581c0.032746-4.386914-1.439792-8.157797-4.421706-11.311627-2.982938-3.15383-6.65149-4.730745-11.003612-4.730745-5.484921 0-9.753131 2.013867-12.803607 6.0416-3.051499 4.028757-4.577249 9.555633-4.577249 16.582677 0 6.033413 1.473561 10.917654 4.421706 14.653745 2.948145 3.736091 6.856152 5.604648 11.724019 5.604648 4.901637 0 8.911974-1.782599 12.032034-5.347798 3.119037-3.564175 4.66116-8.089235 4.627391-13.574157L692.509167 463.815581zM769.945817 497.649154l-10.077519 0 0-9.461489-0.205685 0c-4.148483 7.198959-10.593266 10.797927-19.334347 10.797927-7.197936 0-12.923334-2.562359-17.173125-7.687076-4.250814-5.123694-6.375198-12.040221-6.375198-20.747533 0-9.391904 2.39863-16.924461 7.197936-22.597671 4.798283-5.67321 11.072173-8.509814 18.819624-8.509814s13.368472 3.016707 16.865109 9.049097l0.205685 0 0-35.015491 10.077519 0L769.945817 497.649154zM759.919463 463.815581c0-4.558829-1.500167-8.372691-4.498454-11.440563-3.000334-3.067872-6.693446-4.601808-11.08036-4.601808-5.347798 0-9.564843 1.997494-12.649088 5.990434-3.085268 3.993964-4.627391 9.435906-4.627391 16.325827 0 6.342452 1.482771 11.355629 4.448312 15.039531 2.964518 3.685949 6.916527 5.5279 11.851932 5.5279 4.866844 0 8.844435-1.808182 11.92868-5.424546 3.085268-3.616364 4.627391-8.114818 4.627391-13.497409L759.920486 463.815581zM789.280164 444.74013c5.655813-3.530406 12.186554-5.29561 19.591197-5.29561 13.710256 0 20.567431 7.198959 20.567431 21.595854l0 36.609803-9.975189 0 0-8.792247-0.25685 0c-3.942799 6.753821-9.752108 10.129708-17.430998 10.129708-5.519714 0-9.906627-1.49198-13.162788-4.473895-3.257184-2.982938-4.88424-7.009647-4.88424-12.0832 0-10.626012 6.28924-16.813944 18.87079-18.562774l16.864086-2.364861c0-9.289574-3.839445-13.934361-11.517311-13.934361-6.822382 0-13.044084 2.297322-18.665105 6.889921L789.281187 444.74013zM806.145274 470.91221c-4.663206 0.617054-7.875365 1.782599-9.641591 3.496637-1.766226 1.715061-2.648316 4.113691-2.648316 7.198959 0 2.707668 0.959861 4.919033 2.879584 6.633071 1.918699 1.714038 4.455475 2.570545 7.610328 2.570545 4.386914 0 8.003278-1.542122 10.850116-4.627391 2.843768-3.085268 4.267187-6.958482 4.267187-11.620665l0-5.450129L806.145274 470.91221zM894.224308 497.649154l-10.026354 0 0-32.341592c0-11.689227-4.26821-17.533328-12.803607-17.533328-4.421706 0-8.055466 1.645476-10.900258 4.936429-2.845815 3.290953-4.26821 7.455809-4.26821 12.494569l0 32.444946-10.078543 0 0-56.869219 10.078543 0 0 9.4093 0.205685 0c4.284583-7.164167 10.506285-10.745738 18.665105-10.745738 6.238075 0 10.985192 1.997494 14.242376 5.990434 3.257184 3.993964 4.88424 9.812483 4.88424 17.45658L894.223285 497.649154zM960.399473 492.867244c0 21.046339-10.214642 31.571043-30.644951 31.571043-7.060813 0-13.196557-1.320065-18.407232-3.959172l0-9.718339c6.341429 3.530406 12.426007 5.296633 18.253736 5.296633 13.81361 0 20.721951-7.268544 20.721951-21.801539l0-6.016017-0.205685 0c-4.319375 7.164167-10.765181 10.746762-19.334347 10.746762-7.130398 0-12.837376-2.553149-17.121959-7.661494-4.285606-5.107321-6.426363-11.877515-6.426363-20.310581 0-9.699919 2.365884-17.386996 7.095605-23.061228 4.730745-5.67321 11.037381-8.509814 18.921955-8.509814 7.575536 0 13.196557 3.016707 16.865109 9.049097l0.205685 0 0-7.712659 10.077519 0L960.400496 492.867244zM950.322977 463.815581c0.032746-4.386914-1.439792-8.157797-4.421706-11.311627-2.982938-3.15383-6.65149-4.730745-11.003612-4.730745-5.484921 0-9.753131 2.013867-12.803607 6.0416-3.051499 4.028757-4.577249 9.555633-4.577249 16.582677 0 6.033413 1.473561 10.917654 4.421706 14.653745 2.948145 3.736091 6.856152 5.604648 11.724019 5.604648 4.901637 0 8.911974-1.782599 12.032034-5.347798 3.119037-3.564175 4.66116-8.089235 4.627391-13.574157L950.321954 463.815581z" p-id="2098" fill="#d81e06"></path><path d="M427.967118 627.373681c0-2.77623 0.950651-5.115508 2.854001-7.017834 1.901303-1.901303 4.267187-2.854001 7.095605-2.854001 2.87856 0 5.270027 0.963954 7.173376 2.892887 1.901303 1.927909 2.854001 4.254907 2.854001 6.978948 0 2.673899-0.951675 4.975315-2.854001 6.903224-1.90335 1.928932-4.319375 2.891863-7.250124 2.891863-2.828418 0-5.180999-0.962931-7.05672-2.891863C428.904467 632.350019 427.967118 630.04758 427.967118 627.373681zM529.235546 631.461789c-6.53074 3.906983-14.396895 5.862521-23.600511 5.862521-12.341073 0-22.265096-3.959172-29.771047-11.877515-7.507998-7.91732-11.260461-18.175965-11.260461-30.773887 0-13.985526 4.049223-25.25929 12.147668-33.82027s18.934235-12.842493 32.509415-12.842493c7.816013 0 14.500249 1.388627 20.053732 4.164856l0 14.962783c-6.016017-4.421706-12.700253-6.633071-20.053732-6.633071-8.637728 0-15.669888 2.996241-21.094434 8.985652-5.425569 5.990434-8.137331 13.973246-8.137331 23.947412 0 9.822716 2.557242 17.507746 7.674796 23.061228 5.116531 5.553483 12.018731 8.330736 20.708648 8.330736 7.353478 0 14.294564-2.416026 20.825304-7.250124L529.237593 631.461789zM543.812543 593.592296c0-14.08888 3.933589-25.208125 11.800767-33.358759 7.867178-8.148587 18.535145-12.224416 32.006971-12.224416 12.803607 0 22.842241 3.921309 30.118971 11.761881 7.274684 7.841595 10.913561 18.678408 10.913561 32.510438 0 13.471826-3.882424 24.346501-11.646248 32.625048-7.764847 8.278547-18.176988 12.417821-31.236422 12.417821-12.752442 0-22.933315-4.01136-30.54262-12.032034C547.616172 617.270579 543.812543 606.703919 543.812543 593.592296zM559.237861 593.129762c0 9.821693 2.480494 17.558911 7.442506 23.215748 4.962012 5.655813 11.632945 8.484232 20.014846 8.484232 8.637728 0 15.219633-2.76395 19.744693-8.29185 4.524037-5.526877 6.78759-13.458523 6.78759-23.793916 0-10.385535-2.263553-18.356067-6.78759-23.909549-4.52506-5.553483-11.106965-8.330736-19.744693-8.330736-8.484232 0-15.181771 2.90619-20.091594 8.716522C561.692772 575.031569 559.237861 583.001077 559.237861 593.129762zM772.727163 635.31863l-15.116279 0 0-48.975435c0-9.255805-1.439792-15.875572-4.319375-19.860327-2.880607-3.984754-7.611352-5.978155-14.192234-5.978155-5.552459 0-10.308787 2.597151-14.267958 7.79043-3.960195 5.193279-5.939269 11.337209-5.939269 18.433838l0 48.589648-15.116279 0 0-50.51858c0-16.196891-6.247284-24.295336-18.741853-24.295336-5.759167 0-10.527774 2.468215-14.306844 7.404644-3.778046 4.935406-5.668093 11.234879-5.668093 18.896372l0 48.5129-15.117302 0 0-85.302805 15.117302 0 0 13.497409 0.308015 0c6.067182-10.336416 14.937201-15.503089 26.610054-15.503089 5.706979 0 10.745738 1.568728 15.116279 4.705162 4.370541 3.136433 7.40362 7.379061 9.101285 12.726859 6.325056-11.619642 15.784498-17.430998 28.382421-17.430998 18.767436 0 28.152177 11.5695 28.152177 34.707476L772.72921 635.31863z" p-id="2099" fill="#d81e06"></path></svg>
src/assets/images/default-book-img.png
src/assets/images/default_avatar.png
src/assets/images/delete.png
src/assets/images/index/bookListBg.png
src/assets/images/login/boxBg.png
src/assets/images/login/pageBg.png
src/assets/images/login/weChartIcon.png
src/assets/images/officialAccount.jpg
src/assets/images/packDown.png
src/assets/images/packUp.png
src/assets/images/pageFooter/logo.png
src/assets/images/pageFooter/wechatCode.png
src/assets/images/pageFooter/weiboCode.png
src/assets/images/pageHeader/logo.png
src/assets/images/personalCenter/choose.png
src/assets/images/personalCenter/examine.png
src/assets/images/personalCenter/noPass.png
src/assets/images/personalCenter/pass.png
src/assets/images/teaching/arrow.png
src/assets/images/teaching/electronicBooks.png
src/assets/images/teaching/paperCopies.png
src/assets/images/teaching/sample.png
src/assets/images/teaching/teacher.png
src/assets/images/tuijian-bg.png
src/assets/images/xiehe/about/about_bg.png
src/assets/images/xiehe/about/about_bg@2x.png
src/assets/images/xiehe/about/beijing.png
src/assets/images/xiehe/about/beijing@2x.png
src/assets/images/xiehe/about/dizhi.png
src/assets/images/xiehe/about/dizhi@2x.png
src/assets/images/xiehe/about/email(1).png
src/assets/images/xiehe/about/email.png
src/assets/images/xiehe/about/email@2x(1).png
src/assets/images/xiehe/about/email@2x.png
src/assets/images/xiehe/about/fazhan.png
src/assets/images/xiehe/about/fazhan@2x.png
src/assets/images/xiehe/about/footer-bg.png
src/assets/images/xiehe/about/footer-bg@2x.png
src/assets/images/xiehe/about/phone.png
src/assets/images/xiehe/about/phone@2x.png
src/assets/images/xiehe/about/website.png
src/assets/images/xiehe/about/website@2x.png
src/assets/images/xiehe/about/wenhua_bg.png
src/assets/images/xiehe/about/wenhua_bg@2x.png
src/assets/images/xiehe/about/yinhao.png
src/assets/images/xiehe/about/zizhi.png
src/assets/images/xiehe/about/zizhi@2x.png
src/assets/images/xiehe/about/zongzhi.png
src/assets/images/xiehe/about/zongzhi@2x.png
src/assets/images/xiehe/about/¡°@2x.png
src/assets/images/xiehe/about/¹ØÓÚÎÒÃÇ_slices.zip
Binary files differ
src/assets/images/xiehe/detail/Audio.png
src/assets/images/xiehe/detail/Audio@2x.png
src/assets/images/xiehe/detail/PPT.png
src/assets/images/xiehe/detail/PPT@2x.png
src/assets/images/xiehe/detail/details_bg.png
src/assets/images/xiehe/detail/details_bg@2x.png
src/assets/images/xiehe/detail/img.png
src/assets/images/xiehe/detail/img@2x.png
src/assets/images/xiehe/detail/shijuan.png
src/assets/images/xiehe/detail/shijuan@2x.png
src/assets/images/xiehe/detail/shixun.png
src/assets/images/xiehe/detail/shixun@2x.png
src/assets/images/xiehe/detail/tuozhan.png
src/assets/images/xiehe/detail/tuozhan@2x.png
src/assets/images/xiehe/detail/video.png
src/assets/images/xiehe/detail/video@2x.png
src/assets/images/xiehe/detail/ziliao.png
src/assets/images/xiehe/detail/ziliao@2x.png
src/assets/images/xiehe/detail/Êý×ֽ̲ÄÏêÇé_slices.zip
Binary files differ
src/assets/images/xiehe/home/Chevron_Circle Right _ undefined _ Glyph_ undefined.png
src/assets/images/xiehe/home/Chevron_Circle Right _ undefined _ Glyph_ undefined@2x.png
src/assets/images/xiehe/home/Frame(1).png
src/assets/images/xiehe/home/Frame(2).png
src/assets/images/xiehe/home/Frame.png
src/assets/images/xiehe/home/Frame@2x(1).png
src/assets/images/xiehe/home/Frame@2x(2).png
src/assets/images/xiehe/home/Frame@2x.png
src/assets/images/xiehe/home/Group_302.png
src/assets/images/xiehe/home/Group_302@2x.png
src/assets/images/xiehe/home/Group_303.png
src/assets/images/xiehe/home/Group_303@2x.png
src/assets/images/xiehe/home/banner.png
src/assets/images/xiehe/home/banner@2x.png
src/assets/images/xiehe/home/caozuoshouce.png
src/assets/images/xiehe/home/caozuoshouce@2x.png
src/assets/images/xiehe/home/footer-bg.png
src/assets/images/xiehe/home/footer-bg@2x.png
src/assets/images/xiehe/home/jiaoshirenzheng.png
src/assets/images/xiehe/home/jiaoshirenzheng@2x.png
src/assets/images/xiehe/home/tuijian-bg.png
src/assets/js/config.js
New file
@@ -0,0 +1,73 @@
export const requestCtx = "https://www.caupress.cn"; // è¯·æ±‚地址
export const requestTimeOut = 300000; // è¯·æ±‚è¶…æ—¶æ—¶é—´
export const tokenKey = "zgnydx-token";
export const userInfoKey = "zgnydx-userInfo"; // ç”¨æˆ·ä¿¡æ¯key
export const appId = 1;
export const appRefCode = "caupress";
export const goodsStore = `defaultGoodsStore${appId}`; // é»˜è®¤å•†å“åº“
export const publicStore = `defaultPublicStore${appId}`; // é»˜è®¤èµ„源开放仓储
export const publicRepository = `defaultPublicRepository${appId}`; // é»˜è®¤èµ„源开放库
export const reg_tel =
  /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/; // ç”µè¯å·æ­£åˆ™
const pdfUrl = "https://www.caupress.cn/pdfRead/";
// const pdfUrl = "http://192.168.3.196:8083/pdfRead/";
// é¢‘道refCode
export const refCodes = {
  index: {
    banner: "caupress_banner\\caupress_homepageBanner",
    information: "caupress_informationCenter\\caupress_information",
    notice: "caupress_informationCenter\\caupress_notice",
    column: "caupress_homepageColumn",
    honor: "caupress_honor",
  },
  // æ„è§åé¦ˆ
  Feedback: "feedback",
  // æŠ•稿
  Contribution: "caupress_contributedWorks",
  // éšç§æ”¿ç­–
  Privacy:"caupress_protocol",
  // æ³•律声明
  Statement:"caupress_protocol",
  //教师认证formtypeItem
  teacherCertification: "caupress_teacherCertification",
  // ç”µå­æ ·ä¹¦cmsTypeRefcode
  electronicSampleApplication: "electronicSampleApplication",
  // ç”µå­æ ·ä¹¦ç”³è¯·
  applyBook: "applyBook",
  // çº¸è´¨æ ·ä¹¦ç”³è¯·
  applyEntityBook: "applyEntityBook",
  // èµ„源下载申请
  productDownLoad: "productDownLoad",
};
export const seriesList = {
  caupress_yyxbkspkxygclzyxljc: "应用型本科食品科学与工程类专业系列教材",
  caupress_ptgdyxsplzyxljc: "普通高等院校食品类专业系列教材",
  caupress_ptgdjyfjylylzysswghjc: "普通高等院校风景园林/园林系列教材",
  caupress_gdzyjyxmsyzyjpjc: "高等职业教育畜牧兽医专业精品教材",
  caupress_gdzyjyxmsyzyqgxjhxljc:
    "高等职业教育畜牧兽医专业群“工学结合”系列教材",
  caupress_xczxbwnmpxxl: "乡村振兴百万农民培训系列教材",
  caupress_tdzyglyyxzxfzsdzyxljc: "土地资源管理应用型转型发展试点专业系列教材",
  caupress_ptgdyxtdzyglzyjpkcj: "普通高等院校土地资源管理专业精品课程建设教材",
  caupress_gdzyjygklqcnygcnjxlghjc:
    "高等职业教育工科类汽车、农业工程、农机系列规划教材",
};
const config = {
  requestCtx,
  requestTimeOut,
  tokenKey,
  userInfoKey,
  appRefCode,
  goodsStore,
  publicStore,
  publicRepository,
  refCodes,
  reg_tel,
  seriesList,
  pdfUrl
};
export default config;
src/assets/js/middleGround/WebMiddleGroundApi.js
New file
@@ -0,0 +1,24 @@
// å–消接口调用能力;
// é˜Ÿåˆ—的必要性??
import resource from "./api/resource";
import store from "./api/store";
import identity from "./api/identity";
import ugc from "./api/ugc";
import app from "./api/app";
import file from "./api/file";
import job from "./api/job";
import edu from "./api/edu";
const WebMiddleGroundApi = {
  resource,
  store,
  identity,
  ugc,
  app,
  file,
  job,
  edu
};
export default WebMiddleGroundApi;
src/assets/js/middleGround/api/app.js
New file
@@ -0,0 +1,39 @@
import request from "@/plugin/axios";
const appApi = {
  // èŽ·å–ç”¨æˆ·æ¶ˆæ¯åˆ—è¡¨
  getAppMessageList(data) {
    return request({
      url: "/app/api/ApiGetAppMessageList",
      method: "post",
      data
    });
  },
  // èŽ·å–ç”¨æˆ·æ¶ˆæ¯è¯¦æƒ…
  getMessage(data) {
    return request({
      url: "/app/api/ApiGetMessage",
      method: "post",
      data
    });
  },
  //获取凭证
  getTicketResult(data) {
    return request({
      url: "/app/api/ApiGetTicketResult",
      method: "post",
      data
    });
  },
  //使用凭证
  useTicket(data) {
    return request({
      url:   "/app/api/ApiUseTicket",
      method: "post",
      data
    });
  }
};
export default appApi;
src/assets/js/middleGround/api/edu.js
New file
@@ -0,0 +1,171 @@
import request from "@/plugin/axios";
import { handleQueryResourceListData } from "../tool";
const eduApi = {
  /*
    **获取商品列表**
    path: æ•°æ®è·¯å¾„
    storeInfo: ä»“储
    channelInfo: é¢‘道
    subAccess:
    queryType: æ£€ç´¢ç±»åž‹
    paging: åˆ†é¡µ
    sort: æŽ’序
    fields: è‡ªå®šä¹‰å­—段
  */
  getCourseProductList: ({
    courseInfo = null,
    queryType,
    LinkProductId = null,
    paging = {},
    sort,
    fields,
    coverSize
  }) => {
    const query = {
      Type: queryType || "\\",
      CourseId: courseInfo + "",
      LinkProductId: LinkProductId || "",
      PageQuery: {
        Start: paging.start || "0",
        Size: paging.size || "10"
      },
      SortQuery: sort
        ? [sort]
        : [
            {
              LinkOrder: "Desc"
            }
          ],
      CreateDate: [],
      Description: [],
      Name: [],
      Icon: [],
      RefCode: [],
      TypeId: [],
      SysType: [],
      State: [],
      Tag: [],
      BeginDate: [],
      EndDate: [],
      ProductLinkInfo: [],
      AllowDonate: [],
      // DonatePriceList: [],
      SubProductCount: [],
      ...fields
    };
    const body = { query: JSON.stringify({ Query: [{ Q1: query }] }) };
    let url = "/edu/api/ApiAppUserQueryCourseProduct";
    return request({
      url: url,
      method: "post",
      data: body
    }).then((resp) => {
      if (resp.length > 0) {
        const data = resp[0];
        const datas = handleQueryResourceListData({
          datas: data.datas,
          fields,
          courseInfo,
          coverSize
        });
        return {
          datas,
          total: data.totalCount
        };
      }
      return { datas: [], total: 0 };
    });
  },
  //申请课程
  applyNewCourse(data) {
    return request({
      url: "/edu/api/ApiApplyNewCourse",
      method: "post",
      data
    });
  },
  //更新课程申请信息
  updateCourseApply(data) {
    return request({
      url: "/edu/api/ApiUpdateCourseApply",
      method: "post",
      data
    });
  },
  //获取我的课程
  getAppCourseList(data) {
    return request({
      url: "/edu/api/ApiGetAppCourseList",
      method: "post",
      data
    });
  },
  //获取已申请的课程详情
  getCourseById(data) {
    return request({
      url: "/edu/api/ApiGetCourseById",
      method: "post",
      data
    });
  },
  //获取创建课程中的班级列表
  getCourseClassList(data) {
    return request({
      url: "/edu/api/ApiGetCourseClassList",
      method: "post",
      data
    });
  },
  //创建班级信息
  newCourseClass(data) {
    return request({
      url: "/edu/api/ApiNewCourseClass",
      method: "post",
      data
    });
  },
  //删除班级信息
  delCourseClass(data) {
    return request({
      url: "/edu/api/ApiDelCourseClass",
      method: "post",
      data
    });
  },
  // æ›´æ–°ç­çº§ä¿¡æ¯
  updateCourseClass(data) {
    return request({
      url: "/edu/api/ApiUpdateCourseClass",
      method: "post",
      data
    });
  },
  //创建课程订单
  createCourseOrder(data) {
    return request({
      url: "/store/api/CreateCourseOrder",
      method: "post",
      data
    });
  },
  // å…è´¹é¢†å–课程
  MakeFreeOrderPay(data) {
    return request({
      url: "/store/api/MakeFreeOrderPay",
      method: "post",
      data
    });
  }
};
export default eduApi;
src/assets/js/middleGround/api/file.js
New file
@@ -0,0 +1,31 @@
import request from "@/plugin/axios";
const fileApi = {
  // èŽ·å–pdf总页数
  getPdfTotalPage(data) {
    return request({
      url: "/file/GetPdfTotalPage",
      method: "post",
      data
    });
  },
  //上传文件
  upload(data) {
    return request({
      url: "/file/api/ApiUpload",
      method: "post",
      data
    });
  },
  // èŽ·å–é˜¿é‡Œäº‘åŠ é€Ÿåœ°å€
  getAliVod(data) {
    return request({
      url: "/file/GetAliVod",
      method: "post",
      data,
    });
  },
};
export default fileApi;
src/assets/js/middleGround/api/identity.js
New file
@@ -0,0 +1,155 @@
import request from "@/plugin/axios";
const identityApi = {
  // èŽ·å–å›¾å½¢éªŒè¯ç 
  getImgCode() {
    return request({
      url: "/identity/NewCaptcha",
      method: "post",
    });
  },
  // éªŒè¯å›¾å½¢éªŒè¯ç 
  verificationImgCode(data) {
    return request({
      url: "/identity/ValidCaptcha",
      method: "post",
      data,
    });
  },
  // èŽ·å–çŸ­ä¿¡éªŒè¯ç 
  getPhoneCode(data) {
    return request({
      url: "/identity/NewSms",
      method: "post",
      data,
    });
  },
  // éªŒè¯çŸ­ä¿¡éªŒè¯ç 
  verificationPhoneCode(data) {
    return request({
      url: "/identity/api/ApiValidMobilePhone",
      method: "post",
      data,
    });
  },
  // é€šè¿‡æ‰‹æœºå·æ³¨å†Œç”¨æˆ·
  registerAppUserWithPhone(data) {
    return request({
      url: "/identity/api/RegisterAppUserWithPhone",
      method: "post",
      data,
    });
  },
  // è´¦å·å¯†ç ç™»å½•
  loginByPassword(data) {
    return request({
      url: "/identity/api/LoginByPassword",
      method: "post",
      data,
    });
  },
  // çŸ­ä¿¡éªŒè¯ç ç™»å½•
  loginByMobilePhone(data) {
    return request({
      url: "/identity/api/LoginByMobilePhone",
      method: "post",
      data,
    });
  },
  // è®¾ç½®ç”¨æˆ·key
  setUserKey(data) {
    return request({
      url: "/identity/api/ApiAppUserSetKey",
      method: "post",
      data,
    });
  },
  // èŽ·å–ç”¨æˆ·key
  getUserKey(data) {
    return request({
      url: "/identity/api/ApiGetAppUserKey",
      method: "post",
      data,
    });
  },
  // åˆ é™¤ç”¨æˆ·key
  delUserKey(data) {
    return request({
      url: "/identity/api/ApiDelAppUserKey",
      method: "post",
      data,
    });
  },
  // èŽ·å–åŽ»å½“å‰ç”¨æˆ·ä¿¡æ¯
  getCurrentAppUser() {
    return request({
      url: "/identity/api/GetCurrentAppUser",
      method: "post",
    });
  },
  // æ·»åŠ ç”¨æˆ·ä¿¡æ¯
  setAppUserInfo(data) {
    return request({
      url: "/identity/api/SetAppUserInfoRequest",
      method: "post",
      data,
    });
  },
  // ç”¨æˆ·æ›´æ¢ç»‘定手机号,如没有绑定手机则自动创建
  userSetPhoneNumber(data) {
    return request({
      url: "/identity/api/ApiUserSetPhoneNumber",
      method: "post",
      data,
    });
  },
  // æ£€æµ‹ç”¨æˆ·æ˜¯å¦ç»‘定微信
  checkBuildingWeChat(data) {
    return request({
      url: "/identity/api/ApiCheckBuildingWeChat",
      method: "post",
      data,
    });
  },
  // é€šè¿‡æ‰‹æœºå·é‡ç½®å¯†ç 
  changePasswordByMobilePhone(data) {
    return request({
      url: "/identity/api/ChangePasswordByMobilePhone",
      method: "post",
      data,
    });
  },
  // å¾®ä¿¡å¼€æ”¾å¹³å°æ‰«ç ç™»å½•
  loginByWeChatOpenCode(data) {
    return request({
      url: "/identity/api/LoginByWeChatOpenCode",
      method: "post",
      data,
    });
  },
  // ç”¨æˆ·ç»‘定微信号
  bindingWeChat(data) {
    return request({
      url: "/identity/api/ApiBindingWeChat",
      method: "post",
      data,
    });
  },
};
export default identityApi;
src/assets/js/middleGround/api/job.js
New file
@@ -0,0 +1,23 @@
import request from "@/plugin/axios";
import { tokenKey } from "@/assets/js/config";
import toolClass from "@/assets/js/toolClass";
const jobApi = {
  // ç»Ÿè®¡
  newJobWithNewView(data) {
    return request({
      url: "/job/api/NewJobWithNewView",
      method: "post",
      data
    });
  },
  newSession(data) {
    return request({
      url: toolClass.getCookie(tokenKey) ? "/job/api/AppUserNewSession" : "/job/api/NewSession",
      method: "post",
      data
    });
  }
};
export default jobApi;
src/assets/js/middleGround/api/resource.js
New file
@@ -0,0 +1,203 @@
import request from "@/plugin/axios";
import { publicStore, publicRepository } from "@/assets/js/config";
import { tokenKey } from "@/assets/js/config";
import { handleQueryResourceListData } from "../tool";
import toolClass from "@/assets/js/toolClass";
const resourceApi = {
  /*
    **获取资源列表&详情**
    path: æ•°æ®è·¯å¾„
    storeInfo: ä»“储
    repositoryInfo: ä»“库
    queryType: æ£€ç´¢ç±»åž‹
    paging: åˆ†é¡µ
    sort: æŽ’序
    fields: è‡ªå®šä¹‰å­—段
    itemId: èŽ·å–è¯¦æƒ…æ—¶çš„èµ„æºID
  */
  getItem: ({
    path,
    storeInfo = publicStore,
    repositoryInfo = publicRepository,
    queryType,
    linkType,
    paging,
    sort,
    fields,
    itemId,
    itemType,
    coverSize,
    filterList,
  }) => {
    if (!path) return Promise.reject("接口请求必要参数不能为空!");
    const query = {
      AccessControl: {
        Path: path,
        StoreRefCode: storeInfo + "",
        RepositoryRefCode: repositoryInfo + "",
        Type: queryType || "\\",
        LinkType: linkType || "",
      },
      PageQuery: {
        Start: paging?.start || "0",
        Size: paging?.size || "10",
      },
      SortQuery: sort
        ? [sort]
        : [
            {
              LinkOrder: "Desc",
            },
          ],
      CreateDate: [],
      Description: [],
      Name: [],
      Icon: [],
      RefCode: [],
      Type: [],
      TypeId: [],
      State: [],
      Tag: [],
      LinkInfo: [],
      LinkFile: [],
      CmsItemType: [],
      ChildrenFolderCount: [],
      ChildrenCount: [],
      ...fields,
      ...filterList,
    };
    if (itemId) query["Id="] = [`${itemId}`];
    if (itemType) query["Type="] = [`${itemType}`];
    const body = { query: JSON.stringify({ Query: [{ Q1: query }] }) };
    let token = toolClass.getCookie(tokenKey);
    return request({
      url: token ? "/resource/api/ApiAppUserQuery" : "/resource/api/ApiQuery",
      method: "post",
      data: body,
    }).then((resp) => {
      if (resp.length > 0) {
        const data = resp[0];
        const datas = handleQueryResourceListData({
          datas: data.datas,
          fields,
          path,
          storeInfo,
          repositoryInfo,
          coverSize,
        });
        return { datas, total: data.totalCount };
      }
      return { datas: [], total: 0 };
    });
  },
  // æ¨¡ç³Šæœç´¢
  EsQuery(query) {
    let { params, path, paging } = query;
    let queryBody = {
      Type: "*",
      Store: [],
      ItemType: [],
      CmsType: [],
      SysType: ["CmsItem"],
      LinkInfo: [],
      PageQuery: {
        Start: paging?.start || "0",
        Size: paging?.size || "10",
      },
    };
    // è®¾ç½®ä¸åŒçš„Path
    // å¦‚果没有搜索关键字,则只用获取名称
    if (params.length > 0) {
      let data = {
        "||Name": [...params],
        "||tourism_content*": [...params],
        "||tourism_workflow*": [...params],
        "||tourism_notes*": [...params],
        "||tourism_caseIndex*": [...params],
        "||tourism_basicCase*": [...params],
        "||tourism_judgmentAndReasons*": [...params],
        "||tourism_legalIssuesInvolvedInThisCase*": [...params],
        "||tourism_referenceAnswerAndLegalAnalysis*": [...params],
        "||tourism_case*": [...params],
        "||tourism_clause*": [...params],
        "||tourism_unscramble*": [...params],
        "||tourism_specialRemind*": [...params],
        "||tourism_fiction*": [...params],
        "||tourism_authorityNature*": [...params],
        "||tourism_authorityGist*": [...params],
        "||tourism_penaltyGist*": [...params],
        "||tourism_penaltyTerms*": [...params],
        "||tourism_penaltyType*": [...params],
        "||tourism_remarksNote*": [...params],
        "||tourism_keyword*": [...params],
      };
      Object.assign(queryBody, data);
    } else {
      let data = {
        Name: [],
      };
      Object.assign(queryBody, data);
    }
    // å…¨éƒ¨æœç´¢  - å•独的某个库
    if (path != "All") {
      let data = {
        Path: [
          {
            Repository: "tourism_tourismLawsAndRegulationsDatabase",
            Path: path,
          },
        ],
      };
      Object.assign(queryBody, data);
    }
    const body = { query: JSON.stringify({ Query: [{ Q1: queryBody }] }) };
    return request({
      url: "/resource/api/ApiEsQuery",
      method: "post",
      data: body,
    }).then((res) => {
      if (res.length > 0) {
        const data = res[0];
        const datas = handleQueryResourceListData({
          datas: data.datas,
          path,
        });
        return { datas, total: data.totalCount };
      }
      return { data: [], total: 0 };
    });
  },
  //获取资源类型
  getCmsTypeByRefCode(data) {
    return request({
      url: "resource/api/ApiGetCmsTypeByRefCode",
      method: "post",
      data,
    });
  },
  //取消cms收藏
  delCmsItemLink(data) {
    return request({
      url: "/resource/api/ApiDelCmsItemLink",
      method: "post",
      data,
    });
  },
  //cms收藏
  collectCmsItem(data) {
    return request({
      url: "/resource/api/ApiAddCmsItemLink",
      method: "post",
      data,
    });
  },
};
export default resourceApi;
src/assets/js/middleGround/api/store.js
New file
@@ -0,0 +1,534 @@
import request from "@/plugin/axios";
import { tokenKey, goodsStore } from "@/assets/js/config";
import toolClass from "@/assets/js/toolClass";
import {
  handleQueryResourceListData,
  handleDetailQueryRequestData
} from "../tool";
const storeApi = {
  /*
    **获取商品列表**
    path: æ•°æ®è·¯å¾„
    storeInfo: ä»“储
    channelInfo: é¢‘道
    subAccess:
    queryType: æ£€ç´¢ç±»åž‹
    paging: åˆ†é¡µ
    sort: æŽ’序
    fields: è‡ªå®šä¹‰å­—段
  */
  getProductList: ({
    path = "",
    storeInfo = goodsStore,
    storeEventIdOrRefCode = "",
    queryType,
    linkType,
    subAccess = [],
    paging = {},
    sort,
    fields,
    filterList,
    coverSize,
    mainProductId
  }) => {
    const query = {
      AccessControl: {
        Path: path,
        StoreRefCode: storeInfo + "",
        Type: queryType || "\\",
        LinkType: linkType || ""
      },
      SubAccess: subAccess.length > 0 ? subAccess : [],
      PageQuery: {
        Start: paging.start || "0",
        Size: paging.size || "10"
      },
      SortQuery:
        sort?.length == 0
          ? []
          : sort
          ? [sort]
          : [
              {
                LinkOrder: "Desc"
              }
            ],
      CreateDate: [],
      Description: [],
      Name: [],
      Icon: [],
      RefCode: [],
      TypeId: [],
      SysType: [],
      State: [],
      Tag: [],
      BeginDate: [],
      EndDate: [],
      ProductLinkInfo: [],
      AllowDonate: [],
      // DonatePriceList: [],
      StoreEvent: [],
      SubProductCount: [],
      SaleMethod: [],
      SaleMethodValid: [],
      StoreEventIdOrRefCode: storeEventIdOrRefCode,
      ...fields,
      ...filterList
    };
    if (mainProductId) {
      query.AccessControl.MainProductId = mainProductId;
    }
    const body = {
      query: JSON.stringify({
        Query: [
          {
            Q1: query
          }
        ]
      })
    };
    let token = toolClass.getCookie(tokenKey);
    let url = token
      ? "/store/api/ApiQueryProductByAppUser"
      : "/store/api/ApiQueryProduct";
    return request({
      url: url,
      method: "post",
      data: body
    }).then((resp) => {
      if (resp.length > 0) {
        const data = resp[0];
        const datas = handleQueryResourceListData({
          datas: data.datas,
          fields,
          path,
          storeInfo,
          coverSize
        });
        return {
          datas,
          total: data.totalCount,
          extraInfos: data.extraInfos?.StoreEvent
        };
      }
      return {
        datas: [],
        total: 0
      };
    });
  },
  /*
    **获取商品详情**
    path: æ•°æ®è·¯å¾„
    storeInfo: ä»“储
    channelInfo: é¢‘道
    subAccess:
    fields: è‡ªå®šä¹‰å­—段
    productId: å•†å“ID
    cmsPath:cmsPath
  */
  getProductDetail: ({
    path = "",
    storeInfo = goodsStore,
    channelInfo = "",
    queryType,
    subAccess = [],
    fields,
    productId,
    cmsPath,
    coverSize,
    itemId,
    itemFields,
    linkTypes
  }) => {
    const subQuery = {};
    if (cmsPath) {
      subQuery["QueryCms"] = {
        Path: cmsPath + "",
        Type: "\\",
        Name: [],
        Icon: [],
        TypeId: [],
        PageQuery: {
          Start: 0,
          Size: 100
        },
        ProductLinkInfo: [],
        ...itemFields
      };
      if (itemId) subQuery["QueryCms"]["Id="] = [`${itemId}`];
    }
    // èŽ·å–å…³è”èµ„æº
    let linkFields = {};
    if (linkTypes && linkTypes.length) {
      for (let i = 0; i < linkTypes.length; i++) {
        const linkType = linkTypes[i];
        subQuery["QueryLink_" + linkType.linkType] = {
          Path: cmsPath + "",
          Type: "\\",
          Name: [],
          Icon: [],
          TypeId: [],
          LinkTypes: [linkType.linkType],
          PageQuery: {
            Start: 0,
            Size: 100
          },
          ProductLinkInfo: [],
          ...linkType.fields
        };
        linkFields = {
          ...linkFields,
          ...linkType.fields
        };
      }
    }
    const query = {
      AccessControl: {
        Path: path,
        StoreRefCode: storeInfo + "",
        ChannelRefCode: channelInfo + "",
        Type: queryType || "\\"
      },
      SubAccess: subAccess.length > 0 ? subAccess : [],
      PageQuery: {
        Start: "0",
        Size: "1"
      },
      "Id=": [`${productId}`],
      SortQuery: [],
      CreateDate: [],
      Description: [],
      Name: [],
      Icon: [],
      RefCode: [],
      TypeId: [],
      SysType: [],
      State: [],
      Tag: [],
      BeginDate: [],
      EndDate: [],
      ProductLinkInfo: [],
      AllowDonate: [],
      DonatePriceList: [],
      StoreEvent: [],
      SaleMethod: [],
      SaleMethodValid: [],
      ProductCmsQuery: [subQuery],
      ...fields
    };
    if (productId) query["Id="] = [`${productId}`];
    const body = {
      query: JSON.stringify({
        Query: [
          {
            Q1: query
          }
        ]
      })
    };
    let token = toolClass.getCookie(tokenKey);
    let url = token
      ? "/store/api/ApiQueryProductByAppUser"
      : "/store/api/ApiQueryProduct";
    return request({
      url: url,
      method: "post",
      data: body
    }).then((resp) => {
      if (resp.length > 0) {
        const data = resp[0];
        if (data.datas.length) {
          data.datas[0].subDatas = data.datas[0].cmsDatas;
          const datas = handleDetailQueryRequestData({
            item: data.datas[0],
            fields,
            itemFields: {
              ...itemFields,
              ...linkFields
            },
            path,
            coverSize
          });
          return {
            datas,
            total: data.totalCount
          };
        } else {
          return {
            datas: [],
            total: 0
          };
        }
      }
      return {
        datas: [],
        total: 0
      };
    });
  },
  // èŽ·å–ä¼˜æƒ åˆ¸åˆ—è¡¨
  getChannelPromoteCodeList(data) {
    return request({
      url: "/store/api/ApiGetChannelPromoteCodeList",
      method: "post",
      data
    });
  },
  // èŽ·å–ç”¨æˆ·å·²é¢†å–çš„ä¼˜æƒ åˆ¸åˆ—è¡¨
  getPromoteCodeList(data) {
    return request({
      url: "/store/api/ApiGetPromoteCodeList",
      method: "post",
      data
    });
  },
  // èŽ·å–ç”¨æˆ·æµè§ˆæŽ’è¡Œ
  getProductViewRank(data) {
    return request({
      url: "/store/api/ApiGetProductViewRank",
      method: "post",
      data
    });
  },
  // èŽ·å–ç”¨æˆ·é”€å”®æŽ’è¡Œ
  getProductSaleRank(data) {
    return request({
      url: "/store/api/ApiGetProductSaleRank",
      method: "post",
      data
    });
  },
  // èŽ·å–å•†å“å¯ç”¨ä¼˜æƒ åˆ¸
  getProductPromoteCodeList(data) {
    return request({
      url: "/store/api/ApiGetProductPromoteCodeList",
      method: "post",
      data
    });
  },
  // èŽ·å–è®¢å•å¯ç”¨ä¼˜æƒ åˆ¸
  getOrderPromoteCodeList(data) {
    return request({
      url: "/store/api/GetOrderPromoteCodeList",
      method: "post",
      data
    });
  },
  // èŽ·å–é”€å”®æ–¹å¼å¯ç”¨ä¼˜æƒ åˆ¸
  getSaleMethodPromoteCodeList(data) {
    return request({
      url: "/store/api/GetSaleMethodPromoteCodeList",
      method: "post",
      data
    });
  },
  // é¢†å–优惠卷
  getPromoteCode(data) {
    return request({
      url: "/store/api/ApiGetPromoteCode",
      method: "post",
      data
    });
  },
  // ä¸ºè®¢å•使用优惠券
  updateOrderPromoteCode(data) {
    return request({
      url: "/store/api/UpdateOrderPromoteCode",
      method: "post",
      data
    });
  },
  // ä¸ºé”€å”®æ–¹å¼ä½¿ç”¨ä¼˜æƒ åˆ¸
  updateSaleMethodPromoteCode(data) {
    return request({
      url: "/store/api/UpdateSaleMethodPromoteCode",
      method: "post",
      data
    });
  },
  // é€šè¿‡è®¢å•号获取订单
  getOrderByOrderNum(data) {
    return request({
      url: "/store/api/GetOrderByOrderNum",
      method: "post",
      data
    });
  },
  // åˆ›å»ºè®¢å•
  initOrder(data) {
    return request({
      url: "/store/api/InitOrder",
      method: "post",
      data
    });
  },
  // ç¡®è®¤è®¢å•
  confirmOrder(data) {
    return request({
      url: "/store/api/ConfirmOrder",
      method: "post",
      data
    });
  },
  // å–消订单
  cancelOrder(data) {
    return request({
      url: "/store/api/CancelOrder",
      method: "post",
      data
    });
  },
  // èµžèµ
  CreateDonateOrder(data) {
    return request({
      url: "/store/api/CreateDonateOrder",
      method: "post",
      data
    });
  },
  //获取用户订单列表
  getUserOrderList(data) {
    return request({
      url: "/store/api/GetUserOrderList",
      method: "post",
      data
    });
  },
  //获取频道下的列表
  getStoreChannelList(data) {
    return request({
      url: "/store/api/ApiGetStoreChannelList",
      method: "post",
      data
    });
  },
  //获取购物车
  getShoppingCartProductList(data) {
    return request({
      url: "/store/api/ApiGetShoppingCartProductList",
      method: "post",
      data
    });
  },
  //添加到购物车
  addShoppingCart(data) {
    return request({
      url: "/store/api/ApiAddShoppingCart",
      method: "post",
      data
    });
  },
  //购物车删除商品
  delShoppingCart(data) {
    return request({
      url: "/store/api/ApiDelShoppingCart",
      method: "post",
      data
    });
  },
  //从购物车创建订单
  shoppingCartCreateOrder(data) {
    return request({
      url: "/store/api/ApiShoppingCartCreateOrder",
      method: "post",
      data
    });
  },
  //获取已购买的商品列表
  getPurchasedProductList(data) {
    return request({
      url: "/store/api/ApiGetPurchasedProductList",
      method: "post",
      data
    });
  },
  //调取微信支付
  makeWeChatPay(data) {
    return request({
      url: "/store/api/MakeWeChatPay",
      method: "post",
      data
    });
  },
  //调取微信二维码支付
  makeWeChatQrPay(data) {
    return request({
      url: "/store/api/MakeWeChatQrPay",
      method: "post",
      data
    });
  },
  // èŽ·å–æ¿€æ´»ç è¯¦æƒ…
  getActiveCode(data) {
    return request({
      url: "/store/api/ApiGetActiveCode",
      method: "post",
      data
    });
  },
  // ä½¿ç”¨æ¿€æ´»ç 
  userActiveCode(data) {
    return request({
      url: "/store/api/ApiUseActiveCode",
      method: "post",
      data
    });
  },
  // å•†å“æŸ¥è¯¢ç±»åž‹å­—段接口
  getProductTypeField(data) {
    return request({
      url: "/store/api/ApiGetProductTypeField",
      method: "post",
      data
    });
  },
  // å–消收藏或移除书架
  delProductLink(data) {
    return request({
      url: "/store/api/ApiDelProductLink",
      method: "post",
      data
    });
  },
  //收藏商品
  productLink(data) {
    return request({
      url: "/store/api/ApiAddProductLink",
      method: "post",
      data
    });
  }
};
export default storeApi;
src/assets/js/middleGround/api/ugc.js
New file
@@ -0,0 +1,74 @@
import request from "@/plugin/axios";
import { tokenKey } from "@/assets/js/config";
import toolClass from "@/assets/js/toolClass";
const ugcApi = {
  // èŽ·å–å•†å“ç‚¹èµžTopic
  getProductLikesTopic(data) {
    return request({
      url: toolClass.getCookie(tokenKey)
        ? "/ugc/api/ApiAppUserGetProductLikesTopic"
        : "/ugc/api/ApiGetProductLikesTopic",
      method: "post",
      data,
    });
  },
  // èŽ·å–å•†å“è¯„è®ºTopic
  getProductCommentTopic(data) {
    return request({
      url: toolClass.getCookie(tokenKey)
        ? "/ugc/api/ApiAppUserGetProductCommentTopic"
        : "/ugc/api/ApiGetProductCommentTopic",
      method: "post",
      data,
    });
  },
  // èŽ·å–MessageList
  getTopicMessageList(data) {
    return request({
      url: toolClass.getCookie(tokenKey)
        ? "/ugc/api/ApiAppUserGetTopicMessageList"
        : "/ugc/api/ApiGetTopicMessageList",
      method: "post",
      data,
    });
  },
  // æ–°å»ºMessage
  newTopicMessage(data) {
    return request({
      url: "/ugc/api/ApiNewTopicMessage",
      method: "post",
      data,
    });
  },
  // åˆ é™¤Message
  delTopicMessage(data) {
    return request({
      url: "/ugc/api/ApiDelTopicMessage",
      method: "post",
      data,
    });
  },
  // èŽ·å–cms评论
  getCmsItemCommentTopic(data) {
    return request({
      url: "/ugc/api/ApiGetCmsItemCommentTopic",
      method: "post",
      data,
    });
  },
  //更新TOPICMESSAGE
  updateTopicMessage(data) {
    return request({
      url: "/ugc/api/ApiUpdateTopicMessage",
      method: "post",
      data,
    });
  },
};
export default ugcApi;
src/assets/js/middleGround/tool.js
New file
@@ -0,0 +1,295 @@
import { requestCtx } from "@/assets/js/config";
import moment from "moment";
// å¤„理列表查询结果
export function handleQueryResourceListData({
  datas,
  fields,
  path,
  storeInfo,
  repositoryInfo,
  coverSize,
}) {
  const dataList = [];
  for (let i = 0; i < datas.length; i++) {
    const item = datas[i];
    // å¤„理字段
    const _fields = {};
    if (fields != null) {
      for (let fieldKey in fields) {
        if (item.datas[fieldKey]) {
          const values = JSON.parse(item.datas[fieldKey]);
          if (values.length > 0) {
            // ç”¨å­—段名处理返回的字段值
            if (values[0].Value) {
              _fields[fieldKey] = values[0].Value;
            } else if (values[0].Data) {
              _fields[fieldKey] = values[0].Data.Value;
            }
            item.datas[fieldKey] = values[0];
          }
        }
      }
    }
    const subDatas = {};
    if (item.subDatas) {
      for (let subData of item.subDatas) {
        const tag = subData.queryTag.replace("Query", "");
        subDatas[tag] = subData.datas;
      }
    }
    let obj = {
      ...item,
      id: item.id,
      name: item.datas.Name,
      icon: getPublicImage(
        item.datas.Icon,
        coverSize?.width,
        coverSize?.height
      ),
      repositoryInfo: repositoryInfo,
      refCode: item.datas.RefCode === "[]" ? null : item.datas.RefCode,
      state: item.datas.State,
      type: item.datas.Type,
      tag: item.datas.Tag,
      creator: item.datas.Creator ? JSON.parse(item.datas.Creator) : undefined,
      storeInfo: storeInfo,
      linkType: item.datas.LinkType,
      childrenCount: parseInt(item.datas.ChildrenCount ?? "0"),
      childrenFolderCount: parseInt(item.datas.ChildrenFolderCount ?? "0"),
      childrenChannelCount: parseInt(item.datas.ChildrenChannelCount ?? "0"),
      createDate: moment(item.datas.CreateDate).format("YYYY-MM-DD"),
      beginDate: moment(item.datas.BeginDate).format("YYYY-MM-DD"),
      endDate: moment(item.datas.EndDate).format("YYYY-MM-DD"),
      description: item.datas.Description,
      sysType: item.datas.SysType,
      idPath: path + "\\" + item.id,
      typeId: parseInt(item.datas.TypeId),
      linkFile: JSON.parse(item.datas.LinkFile ?? "[]"),
      cmsItemType: item.datas.CmsItemType,
      allowDonate: item.datas.AllowDonate == "True",
      // donatePriceList: JSON.parse(item.datas.DonatePriceList ?? "[]"),
      productLinkInfo: JSON.parse(item.datas.ProductLinkInfo ?? "[]"),
      storeEvent: JSON.parse(item.datas.StoreEvent ?? "[]"),
      linkInfo: JSON.parse(item.datas.LinkInfo ?? "[]"),
      saleMethod: JSON.parse(item.datas.SaleMethod ?? "[]"),
      subProductCount: parseInt(item.datas.SubProductCount),
      ..._fields,
      datas: item.datas,
      subDatas,
    };
    // ç»Ÿä¸€å¤„理价格
    if (obj.defaultSaleMethod) {
      if (obj.defaultSaleMethod.allowEvent && obj.storeEvent.length) {
        // å·²å‚加活动,获取有效活动并计算价格
        let time = new Date().getTime();
        // è¿‡æ»¤è¿‡æœŸæ´»åЍ
        let event = obj.storeEvent.filter((item) => {
          let endTime = new Date(item.EndDate).getTime();
          return endTime > time;
        });
        // åªå¤„理一条有效活动
        if (event.length) {
          obj.price = (obj.defaultSaleMethod.price * event[0].Value).toFixed(2);
          obj.oldPrice = obj.defaultSaleMethod.price;
          obj.storeEventId = event[0].Id;
        }
      } else {
        obj.price = obj.defaultSaleMethod.price;
        obj.oldPrice = obj.defaultSaleMethod.virtualPrice;
      }
    }
    dataList.push(obj);
  }
  return dataList;
}
// å¤„理详情查询结果
export function handleDetailQueryRequestData({
  item,
  fields,
  path,
  coverSize,
  itemFields,
}) {
  let itemFieldsData = [];
  for (const key in itemFields) {
    itemFieldsData.push(key);
  }
  let fieldsData = [];
  for (const key in fields) {
    fieldsData.push(key);
  }
  for (let i = 0; i < fieldsData.length; i++) {
    const field = fieldsData[i];
    item.datas[field] = JSON.parse(item.datas[field]);
    const datas = item.datas[field];
    if (datas.length > 0) {
      if (datas[0].Value) {
        item[field] = datas[0].Value;
      } else if (datas[0].Data) {
        item[field] = datas[0].Data.Value;
      }
    }
  }
  // å¤„理cms资源
  const subDatas = item.subDatas;
  const linkItemsMap = {};
  if (subDatas) {
    for (const sdata of subDatas) {
      const tag = sdata.queryTag;
      for (const subItem of sdata.datas) {
        convertCmsItemBase(subItem, coverSize);
        subItem.fileMap = {};
        for (let i = 0; i < itemFieldsData.length; i++) {
          const itemField = itemFieldsData[i];
          try {
            subItem.datas[itemField] = JSON.parse(subItem.datas[itemField]);
          } catch (error) {
            subItem.datas[itemField] = [];
          }
          const itemDatas = subItem.datas[itemField];
          if (itemDatas.length > 0) {
            if (itemDatas[0].Value) {
              subItem[itemField] = itemDatas[0].Value;
              if (
                itemDatas[0].FileList &&
                itemDatas[0].FileList.length
              ) {
                subItem.fileMap = {
                  ...subItem.fileMap,
                  ...handleLinkFileInfo(itemDatas[0].FileList),
                };
              }
            } else if (itemDatas[0].Data) {
              subItem[itemField] = itemDatas[0].Data.Value;
              if (
                itemDatas[0].Data.FileList &&
                itemDatas[0].Data.FileList.length
              ) {
                subItem.fileMap = {
                  ...subItem.fileMap,
                  ...handleLinkFileInfo(itemDatas[0].Data.FileList),
                };
              }
            } else if (itemDatas[0].CmsItemData) {
              subItem[itemField] = itemDatas[0].CmsItemData.Value;
              if (
                itemDatas[0].CmsItemData.FileList &&
                itemDatas[0].CmsItemData.FileList.length
              ) {
                subItem.fileMap = {
                  ...subItem.fileMap,
                  ...handleLinkFileInfo(itemDatas[0].CmsItemData.FileList),
                };
              }
            }
          }
        }
        if (subItem.productLinkInfo && subItem.productLinkInfo.length)
          subItem.productLinkPath =
            subItem.productLinkInfo[0].LinkPath +
            "\\" +
            subItem.productLinkInfo[0].CmsItemId;
        if (subItem.linkInfo && subItem.linkInfo.length)
          subItem.linkPath =
            subItem.linkInfo[0].LinkPath + "\\" + subItem.linkInfo[0].CmsItemId;
      }
      linkItemsMap[tag] = sdata.datas;
    }
  }
  convertCmsItemBase(item, coverSize);
  item.idPath = path + "\\" + item.id;
  item.subItems = linkItemsMap;
  return item;
}
const handleLinkFileInfo = (linkList) => {
  let linkFileMap = {};
  for (let z = 0; z < linkList.length; z++) {
    const linkItem = linkList[z];
    linkFileMap[linkItem.Md5] = {
      linkType: linkItem.LinkType,
      extension: linkItem.Extension,
      fileName: linkItem.FileName,
      fileType: linkItem.Type,
      md5: linkItem.Md5,
      icon: linkItem.Icon,
      size: linkItem.Size,
      metaData: JSON.parse(linkItem.MetaData ?? "{}"),
      order: linkItem.Order,
      protectType: linkItem.ProtectType
    };
  }
  return linkFileMap;
};
const convertCmsItemBase = (item, coverSize) => {
  item.name = item.datas.Name;
  item.description = item.datas.Description;
  item.refCode = item.datas.RefCode;
  item.state = item.datas.State;
  item.type = item.datas.Type;
  item.tag = item.datas.Tag;
  item.typeId = parseInt(item.datas.TypeId);
  item.icon = getPublicImage(
    item.datas.Icon,
    coverSize?.width,
    coverSize?.height
  );
  item.sysType = item.datas.SysType;
  item.linkFile = JSON.parse(item.datas.LinkFile ?? "[]");
  item.linkType = item.datas.LinkType;
  item.linkAppId = parseInt(item.datas.LinkAppId);
  item.linkStoreId = parseInt(item.datas.LinkStore);
  item.linkRepoId = item.datas.LinkRepository;
  item.childrenCount = parseInt(item.datas.ChildrenCount ?? "0");
  item.linkId = parseInt(item.datas.LinkId);
  item.linkOrg = JSON.parse(item.datas.LinkOrg ?? "[]")[0];
  item.linkDepartment = JSON.parse(item.datas.LinkDepartment ?? "[]")[0];
  item.linkInfo = JSON.parse(item.datas.LinkInfo ?? "[]");
  item.productLinkInfo = JSON.parse(item.datas.ProductLinkInfo ?? "[]");
  item.saleMethod = JSON.parse(item.datas.SaleMethod ?? "[]");
  item.allowDonate = item.datas.AllowDonate == "True";
  // item.donatePriceList = JSON.parse(item.datas.DonatePriceList ?? "[]");
  item.beginDate = moment(item.datas.BeginDate).format("YYYY-MM-DD");
  item.endDate = moment(item.datas.EndDate).format("YYYY-MM-DD");
  item.storeEvent = JSON.parse(item.datas.StoreEvent ?? "[]");
  // ç»Ÿä¸€å¤„理价格
  if (item.defaultSaleMethod) {
    if (item.defaultSaleMethod.allowEvent && item.storeEvent.length) {
      // å·²å‚加活动,获取有效活动并计算价格
      let time = new Date().getTime();
      // è¿‡æ»¤è¿‡æœŸæ´»åЍ
      let event = item.storeEvent.filter((item) => {
        let endTime = new Date(item.EndDate).getTime();
        return endTime > time;
      });
      // åªå¤„理一条有效活动
      if (event.length) {
        item.price = (item.defaultSaleMethod.price * event[0].Value).toFixed(2);
        item.oldPrice = item.defaultSaleMethod.price;
        item.storeEventId = event[0].Id;
      }
    } else {
      item.price = item.defaultSaleMethod.price;
      item.oldPrice = item.defaultSaleMethod.virtualPrice;
    }
  }
};
// èŽ·å–ä¸å—ä¿æŠ¤çš„å›¾ç‰‡
export function getPublicImage(md5, width, height) {
  let src = null;
  if (md5) {
    src = requestCtx + `/file/GetPreViewImage?md5=${md5}`;
  } else {
    return require("@/assets/images/default-book-img.png");
  }
  if (width) src += `&width=${width}`;
  if (height) src += `&height=${height}`;
  return src;
}
src/assets/js/toolClass.js
New file
@@ -0,0 +1,216 @@
import SparkMD5 from "spark-md5";
var tool = {
  setCookie: function (c_name, value, expiredays, path) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + expiredays);
    document.cookie =
      c_name +
      "=" +
      escape(value) +
      (expiredays == null ? "" : ";expires=" + exdate.toGMTString()) +
      (path ? ";path=" + path : "");
  },
  getCookie: function (c_name) {
    if (document.cookie.length > 0) {
      var c_start = document.cookie.indexOf(c_name + "=");
      if (c_start != -1) {
        c_start = c_start + c_name.length + 1;
        var c_end = document.cookie.indexOf(";", c_start);
        if (c_end == -1) c_end = document.cookie.length;
        return unescape(document.cookie.substring(c_start, c_end));
      }
    }
    return "";
  },
  delCookie: function (name) {
    var exp = new Date();
    exp.setTime(exp.getTime() - 1);
    var cval = tool.getCookie(name);
    if (cval != null)
      document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
  },
  // å¼ºåˆ¶ä¿ç•™2位小数,如:2,会在2后面补上00.即2.00
  toDecimal2(x) {
    var f;
    f = parseFloat(x);
    if (isNaN(f)) {
      return false;
    }
    f = Math.round(x * 100) / 100;
    var s = f.toString();
    var rs = s.indexOf(".");
    if (rs < 0) {
      rs = s.length;
      s += ".";
    }
    while (s.length <= rs + 2) {
      s += "0";
    }
    return s;
  },
};
/**
 * èŽ·å–ä¸€ä¸ªUUID
 * @param len
 * @param radix
 * @returns {string}
 */
export function uuid(len = 32, radix = 16) {
  const chars =
    "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("");
  let uuid = [],
    i;
  radix = radix || chars.length;
  if (len) {
    // Compact form
    for (i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)];
  } else {
    // rfc4122, version 4 form
    let r;
    // rfc4122 requires these characters
    uuid[8] = uuid[13] = uuid[18] = uuid[23] = "-";
    uuid[14] = "4";
    // Fill in random data.  At i==19 set the high bits of clock sequence as
    // per rfc4122, sec. 4.1.5
    for (i = 0; i < 36; i++) {
      if (!uuid[i]) {
        r = 0 | (Math.random() * 16);
        uuid[i] = chars[i === 19 ? (r & 0x3) | 0x8 : r];
      }
    }
  }
  return uuid.join("");
}
export function getFileMd5(file, chunkSize) {
  return new Promise((resolve, reject) => {
    let blobSlice =
      File.prototype.slice ||
      File.prototype.mozSlice ||
      File.prototype.webkitSlice;
    let chunks = Math.ceil(file.size / chunkSize);
    let currentChunk = 0;
    let spark = new SparkMD5.ArrayBuffer();
    let fileReader = new FileReader();
    fileReader.onload = function (e) {
      spark.append(e.target.result);
      currentChunk++;
      if (currentChunk < chunks) {
        loadNext();
      } else {
        const md5 = spark.end();
        resolve(md5);
      }
    };
    fileReader.onerror = function (e) {
      reject(e);
    };
    function loadNext() {
      let start = currentChunk * chunkSize;
      let end = start + chunkSize;
      if (end > file.size) {
        end = file.size;
      }
      fileReader.readAsArrayBuffer(blobSlice.call(file, start, end));
    }
    loadNext();
  });
}
export function worksDataBytool(res, value, linkList) {
  let arr = [];
  res.forEach((item) => {
    const obj = {
      baseType: item.typeField.baseType,
      order: 0,
      typeFieldId: item.typeField.id,
      sequenceNum: item.config ? JSON.parse(item.config).uuid : "",
      newDataAndFileLinkListRequest: [],
    };
    for (let k in value) {
      if (item.typeField.refCode === k) {
        if (typeof value[k] == "object") {
          obj.strValue = JSON.stringify(value[k]);
          obj.newDataAndFileLinkListRequest = linkList;
        } else {
          obj.strValue = value[k];
        }
      }
    }
    if (obj.strValue) {
      arr.push(obj);
    }
  });
  return arr;
}
export function resultsBytool(res, value) {
  let obj = {};
  res.forEach((item, i) => {
    item.sequenceNum = item.config ? JSON.parse(item.config).uuid : "";
    value.forEach((e) => {
      if (item.sequenceNum == e.sequenceNum) {
        try {
          const val = JSON.parse(e.value);
          obj[item.typeField.refCode] = val;
        } catch (error) {
          obj[item.typeField.refCode] = e.value;
        }
      }
    });
  });
  return obj;
}
export function UpdateworksDataBytool(initData, res, value, linkList) {
  let arr = [];
  for (let i = 0; i < initData.length; i++) {
    const ele = initData[i];
    for (let j = 0; j < res.length; j++) {
      const item = res[j];
      if (item.sequenceNum == ele.sequenceNum) {
        item.refCode = ele.typeField.refCode;
      }
    }
  }
  res.forEach((item) => {
    const obj = {
      baseType: item.baseType,
      order: 0,
      id: item.id,
      typeFieldId: item.fieldId,
      sequenceNum: item.sequenceNum,
      setDataAndFileLinkListRequest: [],
    };
    for (let k in value) {
      if (item.refCode === k) {
        if (typeof value[k] == "object") {
          obj.strValue = JSON.stringify(value[k]);
          obj.setDataAndFileLinkListRequest = linkList;
        } else {
          obj.strValue = value[k].toString();
        }
      }
    }
    if (obj.strValue) {
      arr.push(obj);
    }
  });
  return arr;
}
export default {
  ...tool,
  uuid,
  getFileMd5,
  worksDataBytool,
  UpdateworksDataBytool,
  resultsBytool,
};
src/assets/js/userAction.js
New file
@@ -0,0 +1,140 @@
import config from "@/assets/js/config.js";
import toolClass from "@/assets/js/toolClass";
import jobApi
// newSession,
// newJobWithNewView
from "./middleGround/api/job"
export function setSessionGuid(type, id) {
  var cityCode = null;
  var SnIp = null;
  try {
    // eslint-disable-next-line
    SnIp = window.returnCitySN;
  } catch (error) {
    SnIp = null;
    console.log(error);
  }
  if (SnIp != undefined && SnIp != null) {
    cityCode = SnIp;
  } else {
    cityCode = {
      cip: "0.0.0.0",
      cname: "未知"
    };
  }
  const _city = cityCode.cname.substring(3);
  const _province = cityCode.cname.substring(0, 3);
  const params = {
    appRefCode: config.appRefCode,
    hostName: config.requestCtx,
    ipAddress: cityCode.cip,
    browser: myBrowser(),
    os: navigator.platform,
    device: "pc",
    province: _province,
    city: _city ? _city : _province,
  };
  jobApi.newSession(params).then((res) => {
    storage.set("sessionGuid", res, 30);
    setNewView(type, id)
  });
}
export const storage = {
  /*
   * set å­˜å‚¨æ–¹æ³•
   * @ param {String}     key é”®
   * @ param {String}     value å€¼ï¼Œ
   * @ param {String}     expired è¿‡æœŸæ—¶é—´ï¼Œä»¥åˆ†é’Ÿä¸ºå•位,非必须
   */
  set(key, val, expired) {
    if (typeof val !== "string") {
      val = JSON.stringify(val);
    }
    window.sessionStorage.setItem(key, val);
    if (expired) {
      window.sessionStorage.setItem(
        `${key}__expires__`,
        `${Date.now() + 1000 * 60 * expired}`
      );
    }
  },
  /*
   * get èŽ·å–æ–¹æ³•
   * @ param {String}     key é”®
   * @ param {String}     expired å­˜å‚¨æ—¶ä¸ºéžå¿…须字段,所以有可能取不到,默认为 Date.now+1
   */
  get(key) {
    const expired =
      window.sessionStorage.getItem(`${key}__expires__`) || Date.now + 1;
    const now = Date.now();
    if (now >= expired) {
      window.sessionStorage.removeItem(key);
      return;
    }
    let val = window.sessionStorage.getItem(key);
    try {
      val = JSON.parse(val);
    } catch (e) {
      return e
    }
    return val;
  }
};
function myBrowser() {
  const userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
  const isOpera = userAgent.indexOf("Opera") > -1;
  if (isOpera) {
    //判断是否Opera浏览器
    return "Opera";
  }
  if (userAgent.indexOf("Firefox") > -1) {
    //判断是否Firefox浏览器
    return "Firefox";
  }
  if (userAgent.indexOf("Chrome") > -1) {
    return "Chrome";
  }
  if (userAgent.indexOf("Safari") > -1) {
    //判断是否Safari浏览器
    return "Safari";
  }
  if (
    userAgent.indexOf("compatible") > -1 &&
    userAgent.indexOf("MSIE") > -1 &&
    !isOpera
  ) {
    //判断是否IE浏览器
    return "IE";
  }
  return "";
}
export function setNewView(type, id) {
  if (!sessionStorage.getItem("sessionGuid")) {
    setSessionGuid(type, id)
  }
  const sessionGuid = sessionStorage.getItem("sessionGuid");
  const fromPath = sessionStorage.getItem("fromPath");
  const toPath = sessionStorage.getItem("toPath");
  if (sessionGuid) {
    let params = {
      sessionGuid: sessionGuid,
      appRefCode: config.appRefCode,
      type: "View",
      url: toPath == null ? "/" : toPath,
      ref: fromPath == null ? "/" : fromPath
    };
    if (id) {
      params[type] = id;
    }
    jobApi.newJobWithNewView(params).then((res) => {});
  }
}
src/assets/logo.png
src/assets/theme/fonts/element-icons.ttf
Binary files differ
src/assets/theme/fonts/element-icons.woff
Binary files differ
src/assets/theme/index.css
New file
@@ -0,0 +1 @@
@charset "UTF-8";.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55, 0, .1, 1);transition:opacity .3s cubic-bezier(.55, 0, .1, 1)}@font-face{font-family:element-icons;src:url("fonts/element-icons.woff") format("woff"),url("fonts/element-icons.ttf") format("truetype");font-weight:400;font-display:"auto";font-style:normal}[class*=" el-icon-"],[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}.el-icon-ice-cream-round:before{content:"\e6a0"}.el-icon-ice-cream-square:before{content:"\e6a3"}.el-icon-lollipop:before{content:"\e6a4"}.el-icon-potato-strips:before{content:"\e6a5"}.el-icon-milk-tea:before{content:"\e6a6"}.el-icon-ice-drink:before{content:"\e6a7"}.el-icon-ice-tea:before{content:"\e6a9"}.el-icon-coffee:before{content:"\e6aa"}.el-icon-orange:before{content:"\e6ab"}.el-icon-pear:before{content:"\e6ac"}.el-icon-apple:before{content:"\e6ad"}.el-icon-cherry:before{content:"\e6ae"}.el-icon-watermelon:before{content:"\e6af"}.el-icon-grape:before{content:"\e6b0"}.el-icon-refrigerator:before{content:"\e6b1"}.el-icon-goblet-square-full:before{content:"\e6b2"}.el-icon-goblet-square:before{content:"\e6b3"}.el-icon-goblet-full:before{content:"\e6b4"}.el-icon-goblet:before{content:"\e6b5"}.el-icon-cold-drink:before{content:"\e6b6"}.el-icon-coffee-cup:before{content:"\e6b8"}.el-icon-water-cup:before{content:"\e6b9"}.el-icon-hot-water:before{content:"\e6ba"}.el-icon-ice-cream:before{content:"\e6bb"}.el-icon-dessert:before{content:"\e6bc"}.el-icon-sugar:before{content:"\e6bd"}.el-icon-tableware:before{content:"\e6be"}.el-icon-burger:before{content:"\e6bf"}.el-icon-knife-fork:before{content:"\e6c1"}.el-icon-fork-spoon:before{content:"\e6c2"}.el-icon-chicken:before{content:"\e6c3"}.el-icon-food:before{content:"\e6c4"}.el-icon-dish-1:before{content:"\e6c5"}.el-icon-dish:before{content:"\e6c6"}.el-icon-moon-night:before{content:"\e6ee"}.el-icon-moon:before{content:"\e6f0"}.el-icon-cloudy-and-sunny:before{content:"\e6f1"}.el-icon-partly-cloudy:before{content:"\e6f2"}.el-icon-cloudy:before{content:"\e6f3"}.el-icon-sunny:before{content:"\e6f6"}.el-icon-sunset:before{content:"\e6f7"}.el-icon-sunrise-1:before{content:"\e6f8"}.el-icon-sunrise:before{content:"\e6f9"}.el-icon-heavy-rain:before{content:"\e6fa"}.el-icon-lightning:before{content:"\e6fb"}.el-icon-light-rain:before{content:"\e6fc"}.el-icon-wind-power:before{content:"\e6fd"}.el-icon-baseball:before{content:"\e712"}.el-icon-soccer:before{content:"\e713"}.el-icon-football:before{content:"\e715"}.el-icon-basketball:before{content:"\e716"}.el-icon-ship:before{content:"\e73f"}.el-icon-truck:before{content:"\e740"}.el-icon-bicycle:before{content:"\e741"}.el-icon-mobile-phone:before{content:"\e6d3"}.el-icon-service:before{content:"\e6d4"}.el-icon-key:before{content:"\e6e2"}.el-icon-unlock:before{content:"\e6e4"}.el-icon-lock:before{content:"\e6e5"}.el-icon-watch:before{content:"\e6fe"}.el-icon-watch-1:before{content:"\e6ff"}.el-icon-timer:before{content:"\e702"}.el-icon-alarm-clock:before{content:"\e703"}.el-icon-map-location:before{content:"\e704"}.el-icon-delete-location:before{content:"\e705"}.el-icon-add-location:before{content:"\e706"}.el-icon-location-information:before{content:"\e707"}.el-icon-location-outline:before{content:"\e708"}.el-icon-location:before{content:"\e79e"}.el-icon-place:before{content:"\e709"}.el-icon-discover:before{content:"\e70a"}.el-icon-first-aid-kit:before{content:"\e70b"}.el-icon-trophy-1:before{content:"\e70c"}.el-icon-trophy:before{content:"\e70d"}.el-icon-medal:before{content:"\e70e"}.el-icon-medal-1:before{content:"\e70f"}.el-icon-stopwatch:before{content:"\e710"}.el-icon-mic:before{content:"\e711"}.el-icon-copy-document:before{content:"\e718"}.el-icon-full-screen:before{content:"\e719"}.el-icon-switch-button:before{content:"\e71b"}.el-icon-aim:before{content:"\e71c"}.el-icon-crop:before{content:"\e71d"}.el-icon-odometer:before{content:"\e71e"}.el-icon-time:before{content:"\e71f"}.el-icon-bangzhu:before{content:"\e724"}.el-icon-close-notification:before{content:"\e726"}.el-icon-microphone:before{content:"\e727"}.el-icon-turn-off-microphone:before{content:"\e728"}.el-icon-position:before{content:"\e729"}.el-icon-postcard:before{content:"\e72a"}.el-icon-message:before{content:"\e72b"}.el-icon-chat-line-square:before{content:"\e72d"}.el-icon-chat-dot-square:before{content:"\e72e"}.el-icon-chat-dot-round:before{content:"\e72f"}.el-icon-chat-square:before{content:"\e730"}.el-icon-chat-line-round:before{content:"\e731"}.el-icon-chat-round:before{content:"\e732"}.el-icon-set-up:before{content:"\e733"}.el-icon-turn-off:before{content:"\e734"}.el-icon-open:before{content:"\e735"}.el-icon-connection:before{content:"\e736"}.el-icon-link:before{content:"\e737"}.el-icon-cpu:before{content:"\e738"}.el-icon-thumb:before{content:"\e739"}.el-icon-female:before{content:"\e73a"}.el-icon-male:before{content:"\e73b"}.el-icon-guide:before{content:"\e73c"}.el-icon-news:before{content:"\e73e"}.el-icon-price-tag:before{content:"\e744"}.el-icon-discount:before{content:"\e745"}.el-icon-wallet:before{content:"\e747"}.el-icon-coin:before{content:"\e748"}.el-icon-money:before{content:"\e749"}.el-icon-bank-card:before{content:"\e74a"}.el-icon-box:before{content:"\e74b"}.el-icon-present:before{content:"\e74c"}.el-icon-sell:before{content:"\e6d5"}.el-icon-sold-out:before{content:"\e6d6"}.el-icon-shopping-bag-2:before{content:"\e74d"}.el-icon-shopping-bag-1:before{content:"\e74e"}.el-icon-shopping-cart-2:before{content:"\e74f"}.el-icon-shopping-cart-1:before{content:"\e750"}.el-icon-shopping-cart-full:before{content:"\e751"}.el-icon-smoking:before{content:"\e752"}.el-icon-no-smoking:before{content:"\e753"}.el-icon-house:before{content:"\e754"}.el-icon-table-lamp:before{content:"\e755"}.el-icon-school:before{content:"\e756"}.el-icon-office-building:before{content:"\e757"}.el-icon-toilet-paper:before{content:"\e758"}.el-icon-notebook-2:before{content:"\e759"}.el-icon-notebook-1:before{content:"\e75a"}.el-icon-files:before{content:"\e75b"}.el-icon-collection:before{content:"\e75c"}.el-icon-receiving:before{content:"\e75d"}.el-icon-suitcase-1:before{content:"\e760"}.el-icon-suitcase:before{content:"\e761"}.el-icon-film:before{content:"\e763"}.el-icon-collection-tag:before{content:"\e765"}.el-icon-data-analysis:before{content:"\e766"}.el-icon-pie-chart:before{content:"\e767"}.el-icon-data-board:before{content:"\e768"}.el-icon-data-line:before{content:"\e76d"}.el-icon-reading:before{content:"\e769"}.el-icon-magic-stick:before{content:"\e76a"}.el-icon-coordinate:before{content:"\e76b"}.el-icon-mouse:before{content:"\e76c"}.el-icon-brush:before{content:"\e76e"}.el-icon-headset:before{content:"\e76f"}.el-icon-umbrella:before{content:"\e770"}.el-icon-scissors:before{content:"\e771"}.el-icon-mobile:before{content:"\e773"}.el-icon-attract:before{content:"\e774"}.el-icon-monitor:before{content:"\e775"}.el-icon-search:before{content:"\e778"}.el-icon-takeaway-box:before{content:"\e77a"}.el-icon-paperclip:before{content:"\e77d"}.el-icon-printer:before{content:"\e77e"}.el-icon-document-add:before{content:"\e782"}.el-icon-document:before{content:"\e785"}.el-icon-document-checked:before{content:"\e786"}.el-icon-document-copy:before{content:"\e787"}.el-icon-document-delete:before{content:"\e788"}.el-icon-document-remove:before{content:"\e789"}.el-icon-tickets:before{content:"\e78b"}.el-icon-folder-checked:before{content:"\e77f"}.el-icon-folder-delete:before{content:"\e780"}.el-icon-folder-remove:before{content:"\e781"}.el-icon-folder-add:before{content:"\e783"}.el-icon-folder-opened:before{content:"\e784"}.el-icon-folder:before{content:"\e78a"}.el-icon-edit-outline:before{content:"\e764"}.el-icon-edit:before{content:"\e78c"}.el-icon-date:before{content:"\e78e"}.el-icon-c-scale-to-original:before{content:"\e7c6"}.el-icon-view:before{content:"\e6ce"}.el-icon-loading:before{content:"\e6cf"}.el-icon-rank:before{content:"\e6d1"}.el-icon-sort-down:before{content:"\e7c4"}.el-icon-sort-up:before{content:"\e7c5"}.el-icon-sort:before{content:"\e6d2"}.el-icon-finished:before{content:"\e6cd"}.el-icon-refresh-left:before{content:"\e6c7"}.el-icon-refresh-right:before{content:"\e6c8"}.el-icon-refresh:before{content:"\e6d0"}.el-icon-video-play:before{content:"\e7c0"}.el-icon-video-pause:before{content:"\e7c1"}.el-icon-d-arrow-right:before{content:"\e6dc"}.el-icon-d-arrow-left:before{content:"\e6dd"}.el-icon-arrow-up:before{content:"\e6e1"}.el-icon-arrow-down:before{content:"\e6df"}.el-icon-arrow-right:before{content:"\e6e0"}.el-icon-arrow-left:before{content:"\e6de"}.el-icon-top-right:before{content:"\e6e7"}.el-icon-top-left:before{content:"\e6e8"}.el-icon-top:before{content:"\e6e6"}.el-icon-bottom:before{content:"\e6eb"}.el-icon-right:before{content:"\e6e9"}.el-icon-back:before{content:"\e6ea"}.el-icon-bottom-right:before{content:"\e6ec"}.el-icon-bottom-left:before{content:"\e6ed"}.el-icon-caret-top:before{content:"\e78f"}.el-icon-caret-bottom:before{content:"\e790"}.el-icon-caret-right:before{content:"\e791"}.el-icon-caret-left:before{content:"\e792"}.el-icon-d-caret:before{content:"\e79a"}.el-icon-share:before{content:"\e793"}.el-icon-menu:before{content:"\e798"}.el-icon-s-grid:before{content:"\e7a6"}.el-icon-s-check:before{content:"\e7a7"}.el-icon-s-data:before{content:"\e7a8"}.el-icon-s-opportunity:before{content:"\e7aa"}.el-icon-s-custom:before{content:"\e7ab"}.el-icon-s-claim:before{content:"\e7ad"}.el-icon-s-finance:before{content:"\e7ae"}.el-icon-s-comment:before{content:"\e7af"}.el-icon-s-flag:before{content:"\e7b0"}.el-icon-s-marketing:before{content:"\e7b1"}.el-icon-s-shop:before{content:"\e7b4"}.el-icon-s-open:before{content:"\e7b5"}.el-icon-s-management:before{content:"\e7b6"}.el-icon-s-ticket:before{content:"\e7b7"}.el-icon-s-release:before{content:"\e7b8"}.el-icon-s-home:before{content:"\e7b9"}.el-icon-s-promotion:before{content:"\e7ba"}.el-icon-s-operation:before{content:"\e7bb"}.el-icon-s-unfold:before{content:"\e7bc"}.el-icon-s-fold:before{content:"\e7a9"}.el-icon-s-platform:before{content:"\e7bd"}.el-icon-s-order:before{content:"\e7be"}.el-icon-s-cooperation:before{content:"\e7bf"}.el-icon-bell:before{content:"\e725"}.el-icon-message-solid:before{content:"\e799"}.el-icon-video-camera:before{content:"\e772"}.el-icon-video-camera-solid:before{content:"\e796"}.el-icon-camera:before{content:"\e779"}.el-icon-camera-solid:before{content:"\e79b"}.el-icon-download:before{content:"\e77c"}.el-icon-upload2:before{content:"\e77b"}.el-icon-upload:before{content:"\e7c3"}.el-icon-picture-outline-round:before{content:"\e75f"}.el-icon-picture-outline:before{content:"\e75e"}.el-icon-picture:before{content:"\e79f"}.el-icon-close:before{content:"\e6db"}.el-icon-check:before{content:"\e6da"}.el-icon-plus:before{content:"\e6d9"}.el-icon-minus:before{content:"\e6d8"}.el-icon-help:before{content:"\e73d"}.el-icon-s-help:before{content:"\e7b3"}.el-icon-circle-close:before{content:"\e78d"}.el-icon-circle-check:before{content:"\e720"}.el-icon-circle-plus-outline:before{content:"\e723"}.el-icon-remove-outline:before{content:"\e722"}.el-icon-zoom-out:before{content:"\e776"}.el-icon-zoom-in:before{content:"\e777"}.el-icon-error:before{content:"\e79d"}.el-icon-success:before{content:"\e79c"}.el-icon-circle-plus:before{content:"\e7a0"}.el-icon-remove:before{content:"\e7a2"}.el-icon-info:before{content:"\e7a1"}.el-icon-question:before{content:"\e7a4"}.el-icon-warning-outline:before{content:"\e6c9"}.el-icon-warning:before{content:"\e7a3"}.el-icon-goods:before{content:"\e7c2"}.el-icon-s-goods:before{content:"\e7b2"}.el-icon-star-off:before{content:"\e717"}.el-icon-star-on:before{content:"\e797"}.el-icon-more-outline:before{content:"\e6cc"}.el-icon-more:before{content:"\e794"}.el-icon-phone-outline:before{content:"\e6cb"}.el-icon-phone:before{content:"\e795"}.el-icon-user:before{content:"\e6e3"}.el-icon-user-solid:before{content:"\e7a5"}.el-icon-setting:before{content:"\e6ca"}.el-icon-s-tools:before{content:"\e7ac"}.el-icon-delete:before{content:"\e6d7"}.el-icon-delete-solid:before{content:"\e7c9"}.el-icon-eleme:before{content:"\e7c7"}.el-icon-platform-eleme:before{content:"\e7ca"}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.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)}}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.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, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-select-dropdown{position:absolute;z-index:1001;border:solid 1px #e4e7ed;border-radius:4px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item{padding-right:40px}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#00873c;background-color:#fff}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#f5f7fa}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:element-icons;content:"\e6da";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.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:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#00873c}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:0;border-color:#00873c}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:0;border-color:#00873c}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.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}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-tag{background-color:#e6f3ec;border-color:#cce7d8;color:#00873c;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#00873c;border-width:1px;border-style:solid;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#00873c}.el-tag .el-tag__close{color:#00873c}.el-tag .el-tag__close:hover{color:#fff;background-color:#00873c}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag.el-tag--success{background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a}.el-tag.el-tag--success.is-hit{border-color:#67c23a}.el-tag.el-tag--success .el-tag__close{color:#67c23a}.el-tag.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close::before{display:block}.el-tag--dark{background-color:#00873c;border-color:#00873c;color:#fff}.el-tag--dark.is-hit{border-color:#00873c}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#fff;background-color:#339f63}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#fff;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#67c23a}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#fff;background-color:#85ce61}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#99cfb1;color:#00873c}.el-tag--plain.is-hit{border-color:#00873c}.el-tag--plain .el-tag__close{color:#00873c}.el-tag--plain .el-tag__close:hover{color:#fff;background-color:#00873c}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#c2e7b0;color:#67c23a}.el-tag--plain.el-tag--success.is-hit{border-color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#fff}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#f5f7fa}.el-select-dropdown__item.selected{color:#00873c;font-weight:700}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type)::after{content:'';position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#e4e7ed}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.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}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-select{display:inline-block;position:relative}.el-select .el-select__tags>span{display:contents}.el-select:hover .el-input__inner{border-color:#c0c4cc}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#00873c}.el-select .el-input .el-select__caret{color:#c0c4cc;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotateZ(0);transform:rotateZ(0)}.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:#c0c4cc;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-select .el-input .el-select__caret.is-show-close:hover{color:#909399}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#e4e7ed}.el-select .el-input.is-focus .el-input__inner{border-color:#00873c}.el-select>.el-input{display:block}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#c0c4cc;line-height:18px;font-size:14px}.el-select__close:hover{color:#909399}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-select__tags-text{overflow:hidden;text-overflow:ellipsis}.el-select .el-tag{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5;display:-webkit-box;display:-ms-flexbox;display:flex;max-width:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-select .el-tag__close.el-icon-close{background-color:#c0c4cc;top:0;color:#fff;-ms-flex-negative:0;flex-shrink:0}.el-select .el-tag__close.el-icon-close:hover{background-color:#909399}.el-select .el-tag__close.el-icon-close::before{display:block;-webkit-transform:translate(0,.5px);transform:translate(0,.5px)}.el-pagination{white-space:nowrap;padding:2px 5px;color:#303133;font-weight:700}.el-pagination::after,.el-pagination::before{display:table;content:""}.el-pagination::after{clear:both}.el-pagination button,.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}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield;line-height:normal}.el-pagination .el-input__suffix{right:0;-webkit-transform:scale(.8);transform:scale(.8)}.el-pagination .el-select .el-input{width:100px;margin:0 5px}.el-pagination .el-select .el-input .el-input__inner{padding-right:25px;border-radius:3px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#00873c}.el-pagination button:disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.el-pagination .btn-next,.el-pagination .btn-prev{background:center center no-repeat;background-size:16px;background-color:#fff;cursor:pointer;margin:0;color:#303133}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700}.el-pagination .btn-prev{padding-right:12px}.el-pagination .btn-next{padding-left:12px}.el-pagination .el-pager li.disabled{color:#c0c4cc;cursor:not-allowed}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li,.el-pagination--small .el-pager li.btn-quicknext,.el-pagination--small .el-pager li.btn-quickprev,.el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.el-pagination--small .arrow.disabled{visibility:hidden}.el-pagination--small .more::before,.el-pagination--small li.more::before{line-height:24px}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){height:22px;line-height:22px}.el-pagination--small .el-pagination__editor{height:22px}.el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px}.el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#606266}.el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#00873c}.el-pagination__total{margin-right:10px;font-weight:400;color:#606266}.el-pagination__jump{margin-left:24px;font-weight:400;color:#606266}.el-pagination__jump .el-input__inner{padding:0 3px}.el-pagination__rightwrapper{float:right}.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}.el-pagination__editor.el-input{width:50px}.el-pagination__editor.el-input .el-input__inner{height:28px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 5px;background-color:#f4f4f5;color:#606266;min-width:30px;border-radius:2px}.el-pagination.is-background .btn-next.disabled,.el-pagination.is-background .btn-prev.disabled,.el-pagination.is-background .el-pager li.disabled{color:#c0c4cc}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev{padding:0}.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev:disabled{color:#c0c4cc}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:#00873c}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#00873c;color:#fff}.el-pagination.is-background.el-pagination--small .btn-next,.el-pagination.is-background.el-pagination--small .btn-prev,.el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px}.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}.el-pager .more::before{line-height:30px}.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}.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{line-height:28px;color:#303133}.el-pager li.btn-quicknext.disabled,.el-pager li.btn-quickprev.disabled{color:#c0c4cc}.el-pager li.btn-quickprev:hover{cursor:pointer}.el-pager li.btn-quicknext:hover{cursor:pointer}.el-pager li.active+li{border-left:0}.el-pager li:hover{color:#00873c}.el-pager li.active{color:#00873c;cursor:default}.v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .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}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-popup-parent--hidden{overflow:hidden}.el-dialog{position:relative;margin:0 auto 50px;background:#fff;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog__header{padding:20px;padding-bottom:10px}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#909399}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#00873c}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;font-size:14px;word-break:break-all}.el-dialog__footer{padding:20px;padding-top:10px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.dialog-fade-leave-active{-webkit-animation:dialog-fade-out .3s;animation:dialog-fade-out .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}}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.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:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#00873c}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:0;border-color:#00873c}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:0;border-color:#00873c}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.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}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.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}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.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, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-autocomplete{position:relative;display:inline-block}.el-autocomplete-suggestion{margin:5px 0;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;border:1px solid #e4e7ed;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#606266;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li:hover{background-color:#f5f7fa}.el-autocomplete-suggestion li.highlighted{background-color:#f5f7fa}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #000}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.el-autocomplete-suggestion.is-loading li::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:#fff}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-color:#dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.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}.el-button+.el-button{margin-left:10px}.el-button.is-round{padding:12px 20px}.el-button:focus,.el-button:hover{color:#00873c;border-color:#b3dbc5;background-color:#e6f3ec}.el-button:active{color:#007a36;border-color:#007a36;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#fff;border-color:#00873c;color:#00873c}.el-button.is-plain:active{background:#fff;border-color:#007a36;color:#007a36;outline:0}.el-button.is-active{color:#007a36;border-color:#007a36}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#ebeef5;color:#c0c4cc}.el-button.is-loading{position:relative;pointer-events:none}.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,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#fff;background-color:#00873c;border-color:#00873c}.el-button--primary:focus,.el-button--primary:hover{background:#339f63;border-color:#339f63;color:#fff}.el-button--primary:active{background:#007a36;border-color:#007a36;color:#fff;outline:0}.el-button--primary.is-active{background:#007a36;border-color:#007a36;color:#fff}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#fff;background-color:#80c39e;border-color:#80c39e}.el-button--primary.is-plain{color:#00873c;background:#e6f3ec;border-color:#99cfb1}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#00873c;border-color:#00873c;color:#fff}.el-button--primary.is-plain:active{background:#007a36;border-color:#007a36;color:#fff;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#66b78a;background-color:#e6f3ec;border-color:#cce7d8}.el-button--success{color:#fff;background-color:#67c23a;border-color:#67c23a}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#fff}.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#fff;outline:0}.el-button--success.is-active{background:#5daf34;border-color:#5daf34;color:#fff}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#fff;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67c23a;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67c23a;border-color:#67c23a;color:#fff}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#fff;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#fff;background-color:#e6a23c;border-color:#e6a23c}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#fff}.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-active{background:#cf9236;border-color:#cf9236;color:#fff}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#fff;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#e6a23c;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#e6a23c;border-color:#e6a23c;color:#fff}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#fff}.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-active{background:#dd6161;border-color:#dd6161;color:#fff}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#fff;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#f56c6c;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#f56c6c;border-color:#f56c6c;color:#fff}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#fff;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#fff}.el-button--info:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-active{background:#82848a;border-color:#82848a;color:#fff}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#fff;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#fff}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small{padding:9px 15px;font-size:12px;border-radius:3px}.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini{padding:7px 15px;font-size:12px;border-radius:3px}.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{border-color:transparent;color:#00873c;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#339f63;border-color:transparent;background-color:transparent}.el-button--text:active{color:#007a36;border-color:transparent;background-color:transparent}.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover{border-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:""}.el-button-group::after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button:not(.is-disabled):active,.el-button-group>.el-button:not(.is-disabled):focus,.el-button-group>.el-button:not(.is-disabled):hover{z-index:1}.el-button-group>.el-button.is-active{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.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, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-dropdown{display:inline-block;position:relative;color:#606266;font-size:14px}.el-dropdown .el-button-group{display:block}.el-dropdown .el-button-group .el-button{float:none}.el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none}.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,.5)}.el-dropdown .el-dropdown__caret-button.el-button--default::before{background:rgba(220,223,230,.5)}.el-dropdown .el-dropdown__caret-button:hover:not(.is-disabled)::before{top:0;bottom:0}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.el-dropdown__icon{font-size:12px;margin:0 3px}.el-dropdown .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing){outline-width:0}.el-dropdown [disabled]{cursor:not-allowed;color:#bbb}.el-dropdown-menu{position:absolute;top:0;left:0;z-index:10;padding:10px 0;margin:5px 0;background-color:#fff;border:1px solid #ebeef5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-dropdown-menu__item{list-style:none;line-height:36px;padding:0 20px;margin:0;font-size:14px;color:#606266;cursor:pointer;outline:0}.el-dropdown-menu__item:focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:#e6f3ec;color:#339f63}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #ebeef5}.el-dropdown-menu__item--divided:before{content:'';height:6px;display:block;margin:0 -20px;background-color:#fff}.el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none}.el-dropdown-menu--medium{padding:6px 0}.el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px}.el-dropdown-menu--small{padding:6px 0}.el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px}.el-dropdown-menu--mini{padding:3px 0}.el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55, 0, .1, 1);transition:opacity .3s cubic-bezier(.55, 0, .1, 1)}.el-menu{border-right:solid 1px #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0;background-color:#fff}.el-menu::after,.el-menu::before{display:table;content:""}.el-menu::after{clear:both}.el-menu.el-menu--horizontal{border-bottom:solid 1px #e6e6e6}.el-menu--horizontal{border-right:none}.el-menu--horizontal>.el-menu-item{float:left;height:60px;line-height:60px;margin:0;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover{background-color:#fff}.el-menu--horizontal>.el-submenu{float:left}.el-menu--horizontal>.el-submenu:focus,.el-menu--horizontal>.el-submenu:hover{outline:0}.el-menu--horizontal>.el-submenu:focus .el-submenu__title,.el-menu--horizontal>.el-submenu:hover .el-submenu__title{color:#303133}.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #00873c;color:#303133}.el-menu--horizontal>.el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-submenu .el-submenu__title:hover{background-color:#fff}.el-menu--horizontal>.el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-submenu__title{background-color:#fff;float:none;height:36px;line-height:36px;padding:0 10px;color:#909399}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title{color:#303133}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:#303133}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #00873c;color:#303133}.el-menu--collapse{width:64px}.el-menu--collapse>.el-menu-item [class^=el-icon-],.el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item span,.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-item.is-active i{color:inherit}.el-menu--collapse .el-menu .el-submenu{min-width:200px}.el-menu--collapse .el-submenu{position:relative}.el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;z-index:10;border:1px solid #e4e7ed;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:none;transform:none}.el-menu--popup{z-index:100;min-width:200px;border:none;padding:5px 0;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--popup-bottom-start{margin-top:5px}.el-menu--popup-right-start{margin-left:5px;margin-right:5px}.el-menu-item{height:56px;line-height:56px;font-size:14px;color:#303133;padding:0 20px;list-style:none;cursor:pointer;position:relative;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-menu-item *{vertical-align:middle}.el-menu-item i{color:#909399}.el-menu-item:focus,.el-menu-item:hover{outline:0;background-color:#e6f3ec}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center;font-size:18px;vertical-align:middle}.el-menu-item.is-active{color:#00873c}.el-menu-item.is-active i{color:inherit}.el-submenu{list-style:none;margin:0;padding-left:0}.el-submenu__title{height:56px;line-height:56px;font-size:14px;color:#303133;padding:0 20px;list-style:none;cursor:pointer;position:relative;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-submenu__title *{vertical-align:middle}.el-submenu__title i{color:#909399}.el-submenu__title:focus,.el-submenu__title:hover{outline:0;background-color:#e6f3ec}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:#e6f3ec}.el-submenu .el-menu{border:none}.el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.el-submenu__icon-arrow{position:absolute;top:50%;right:20px;margin-top:-7px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:12px}.el-submenu.is-active .el-submenu__title{border-bottom-color:#00873c}.el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-submenu.is-disabled .el-menu-item,.el-submenu.is-disabled .el-submenu__title{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#909399}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.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:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#00873c}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:0;border-color:#00873c}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:0;border-color:#00873c}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.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}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.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:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#00873c}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:0;border-color:#00873c}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:0;border-color:#00873c}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.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}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.el-input-number__decrease,.el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#f5f7fa;color:#606266;cursor:pointer;font-size:13px}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#00873c}.el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#00873c}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #dcdfe6}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #dcdfe6}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#e4e7ed;color:#e4e7ed}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#e4e7ed;cursor:not-allowed}.el-input-number--medium{width:200px;line-height:34px}.el-input-number--medium .el-input-number__decrease,.el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.el-input-number--small{width:130px;line-height:30px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.el-input-number--mini{width:130px;line-height:26px}.el-input-number--mini .el-input-number__decrease,.el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.el-input-number--mini .el-input-number__decrease [class*=el-icon],.el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #dcdfe6}.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 #dcdfe6;border-radius:0 0 4px 0}.el-input-number.is-controls-right[class*=medium] [class*=decrease],.el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.el-input-number.is-controls-right[class*=mini] [class*=decrease],.el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.el-radio{color:#606266;font-weight:500;line-height:1;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;outline:0;font-size:14px;margin-right:30px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#00873c}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#ebeef5}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__label{font-size:12px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio:last-child{margin-right:0}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed;cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#f5f7fa}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed}.el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#c0c4cc}.el-radio__input.is-disabled+span.el-radio__label{color:#c0c4cc;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#00873c;background:#00873c}.el-radio__input.is-checked .el-radio__inner::after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#00873c}.el-radio__input.is-focus .el-radio__inner{border-color:#00873c}.el-radio__inner{border:1px solid #dcdfe6;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}.el-radio__inner:hover{border-color:#00873c}.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 .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #00873c;box-shadow:0 0 2px 2px #00873c}.el-radio__label{font-size:14px;padding-left:10px}.el-radio-group{display:inline-block;line-height:1;vertical-align:middle;font-size:0}.el-radio-button{position:relative;display:inline-block;outline:0}.el-radio-button__inner{display:inline-block;line-height:1;white-space:nowrap;vertical-align:middle;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-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 .3s cubic-bezier(.645, .045, .355, 1);transition:all .3s cubic-bezier(.645, .045, .355, 1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#00873c}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#fff;background-color:#00873c;border-color:#00873c;-webkit-box-shadow:-1px 0 0 0 #00873c;box-shadow:-1px 0 0 0 #00873c}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#f2f6fc}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #00873c;box-shadow:0 0 2px 2px #00873c}.el-checkbox{color:#606266;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;margin-right:30px}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#00873c}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#00873c;border-color:#00873c}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#00873c}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#00873c}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#00873c;border-color:#00873c}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#fff;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;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 .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46);transition:border-color .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46)}.el-checkbox__inner:hover{border-color:#00873c}.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 .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button{position:relative;display:inline-block}.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 #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;-webkit-transition:all .3s cubic-bezier(.645, .045, .355, 1);transition:all .3s cubic-bezier(.645, .045, .355, 1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#00873c}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#00873c;border-color:#00873c;-webkit-box-shadow:-1px 0 0 0 #66b78a;box-shadow:-1px 0 0 0 #66b78a}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#00873c}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#00873c}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-switch{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;display:inline-block;font-size:14px;font-weight:500;cursor:pointer;vertical-align:middle;color:#303133}.el-switch__label.is-active{color:#00873c}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__core{margin:0;display:inline-block;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#dcdfe6;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s;vertical-align:middle}.el-switch__core:after{content:"";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#fff}.el-switch.is-checked .el-switch__core{border-color:#00873c;background-color:#00873c}.el-switch.is-checked .el-switch__core::after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.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, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-select-dropdown{position:absolute;z-index:1001;border:solid 1px #e4e7ed;border-radius:4px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item{padding-right:40px}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#00873c;background-color:#fff}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#f5f7fa}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:element-icons;content:"\e6da";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.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:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#00873c}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:0;border-color:#00873c}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:0;border-color:#00873c}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.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}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-tag{background-color:#e6f3ec;border-color:#cce7d8;color:#00873c;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#00873c;border-width:1px;border-style:solid;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#00873c}.el-tag .el-tag__close{color:#00873c}.el-tag .el-tag__close:hover{color:#fff;background-color:#00873c}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag.el-tag--success{background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a}.el-tag.el-tag--success.is-hit{border-color:#67c23a}.el-tag.el-tag--success .el-tag__close{color:#67c23a}.el-tag.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close::before{display:block}.el-tag--dark{background-color:#00873c;border-color:#00873c;color:#fff}.el-tag--dark.is-hit{border-color:#00873c}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#fff;background-color:#339f63}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#fff;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#67c23a}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#fff;background-color:#85ce61}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#99cfb1;color:#00873c}.el-tag--plain.is-hit{border-color:#00873c}.el-tag--plain .el-tag__close{color:#00873c}.el-tag--plain .el-tag__close:hover{color:#fff;background-color:#00873c}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#c2e7b0;color:#67c23a}.el-tag--plain.el-tag--success.is-hit{border-color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#fff}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#f5f7fa}.el-select-dropdown__item.selected{color:#00873c;font-weight:700}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type)::after{content:'';position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#e4e7ed}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.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}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-select{display:inline-block;position:relative}.el-select .el-select__tags>span{display:contents}.el-select:hover .el-input__inner{border-color:#c0c4cc}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#00873c}.el-select .el-input .el-select__caret{color:#c0c4cc;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotateZ(0);transform:rotateZ(0)}.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:#c0c4cc;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-select .el-input .el-select__caret.is-show-close:hover{color:#909399}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#e4e7ed}.el-select .el-input.is-focus .el-input__inner{border-color:#00873c}.el-select>.el-input{display:block}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#c0c4cc;line-height:18px;font-size:14px}.el-select__close:hover{color:#909399}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-select__tags-text{overflow:hidden;text-overflow:ellipsis}.el-select .el-tag{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5;display:-webkit-box;display:-ms-flexbox;display:flex;max-width:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-select .el-tag__close.el-icon-close{background-color:#c0c4cc;top:0;color:#fff;-ms-flex-negative:0;flex-shrink:0}.el-select .el-tag__close.el-icon-close:hover{background-color:#909399}.el-select .el-tag__close.el-icon-close::before{display:block;-webkit-transform:translate(0,.5px);transform:translate(0,.5px)}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-color:#dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.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}.el-button+.el-button{margin-left:10px}.el-button.is-round{padding:12px 20px}.el-button:focus,.el-button:hover{color:#00873c;border-color:#b3dbc5;background-color:#e6f3ec}.el-button:active{color:#007a36;border-color:#007a36;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#fff;border-color:#00873c;color:#00873c}.el-button.is-plain:active{background:#fff;border-color:#007a36;color:#007a36;outline:0}.el-button.is-active{color:#007a36;border-color:#007a36}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#ebeef5;color:#c0c4cc}.el-button.is-loading{position:relative;pointer-events:none}.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,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#fff;background-color:#00873c;border-color:#00873c}.el-button--primary:focus,.el-button--primary:hover{background:#339f63;border-color:#339f63;color:#fff}.el-button--primary:active{background:#007a36;border-color:#007a36;color:#fff;outline:0}.el-button--primary.is-active{background:#007a36;border-color:#007a36;color:#fff}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#fff;background-color:#80c39e;border-color:#80c39e}.el-button--primary.is-plain{color:#00873c;background:#e6f3ec;border-color:#99cfb1}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#00873c;border-color:#00873c;color:#fff}.el-button--primary.is-plain:active{background:#007a36;border-color:#007a36;color:#fff;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#66b78a;background-color:#e6f3ec;border-color:#cce7d8}.el-button--success{color:#fff;background-color:#67c23a;border-color:#67c23a}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#fff}.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#fff;outline:0}.el-button--success.is-active{background:#5daf34;border-color:#5daf34;color:#fff}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#fff;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67c23a;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67c23a;border-color:#67c23a;color:#fff}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#fff;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#fff;background-color:#e6a23c;border-color:#e6a23c}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#fff}.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-active{background:#cf9236;border-color:#cf9236;color:#fff}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#fff;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#e6a23c;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#e6a23c;border-color:#e6a23c;color:#fff}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#fff}.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-active{background:#dd6161;border-color:#dd6161;color:#fff}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#fff;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#f56c6c;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#f56c6c;border-color:#f56c6c;color:#fff}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#fff;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#fff}.el-button--info:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-active{background:#82848a;border-color:#82848a;color:#fff}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#fff;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#fff}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small{padding:9px 15px;font-size:12px;border-radius:3px}.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini{padding:7px 15px;font-size:12px;border-radius:3px}.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{border-color:transparent;color:#00873c;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#339f63;border-color:transparent;background-color:transparent}.el-button--text:active{color:#007a36;border-color:transparent;background-color:transparent}.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover{border-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:""}.el-button-group::after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button:not(.is-disabled):active,.el-button-group>.el-button:not(.is-disabled):focus,.el-button-group>.el-button:not(.is-disabled):hover{z-index:1}.el-button-group>.el-button.is-active{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-checkbox{color:#606266;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;margin-right:30px}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#00873c}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#00873c;border-color:#00873c}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#00873c}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#00873c}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#00873c;border-color:#00873c}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#fff;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;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 .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46);transition:border-color .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46)}.el-checkbox__inner:hover{border-color:#00873c}.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 .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button{position:relative;display:inline-block}.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 #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;-webkit-transition:all .3s cubic-bezier(.645, .045, .355, 1);transition:all .3s cubic-bezier(.645, .045, .355, 1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#00873c}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#00873c;border-color:#00873c;-webkit-box-shadow:-1px 0 0 0 #66b78a;box-shadow:-1px 0 0 0 #66b78a}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#00873c}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#00873c}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-tag{background-color:#e6f3ec;border-color:#cce7d8;color:#00873c;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#00873c;border-width:1px;border-style:solid;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#00873c}.el-tag .el-tag__close{color:#00873c}.el-tag .el-tag__close:hover{color:#fff;background-color:#00873c}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag.el-tag--success{background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a}.el-tag.el-tag--success.is-hit{border-color:#67c23a}.el-tag.el-tag--success .el-tag__close{color:#67c23a}.el-tag.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close::before{display:block}.el-tag--dark{background-color:#00873c;border-color:#00873c;color:#fff}.el-tag--dark.is-hit{border-color:#00873c}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#fff;background-color:#339f63}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#fff;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#67c23a}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#fff;background-color:#85ce61}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#99cfb1;color:#00873c}.el-tag--plain.is-hit{border-color:#00873c}.el-tag--plain .el-tag__close{color:#00873c}.el-tag--plain .el-tag__close:hover{color:#fff;background-color:#00873c}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#c2e7b0;color:#67c23a}.el-tag--plain.el-tag--success.is-hit{border-color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing){outline-width:0}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:" ";border-width:5px}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#fff}.el-tooltip__popper.is-light{background:#fff;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#fff}.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:#606266}.el-table__empty-block{min-height:60px;text-align:center;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:#909399}.el-table__expand-column .cell{padding:0;text-align:center}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;font-size:12px;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;height:20px}.el-table__expand-icon--expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.el-table__expanded-cell{background-color:#fff}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.el-table thead{color:#909399;font-weight:500}.el-table thead.is-group th.el-table__cell{background:#f5f7fa}.el-table .el-table__cell{padding:12px 0;min-width:0;-webkit-box-sizing:border-box;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table--medium .el-table__cell{padding:10px 0}.el-table--small{font-size:12px}.el-table--small .el-table__cell{padding:8px 0}.el-table--mini{font-size:12px}.el-table--mini .el-table__cell{padding:6px 0}.el-table tr{background-color:#fff}.el-table tr input[type=checkbox]{margin:0}.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf{border-bottom:1px solid #ebeef5}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff}.el-table th.el-table__cell>.cell{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;vertical-align:middle;padding-left:10px;padding-right:10px;width:100%}.el-table th.el-table__cell>.cell.highlight{color:#00873c}.el-table th.el-table__cell.required>div::before{display:inline-block;content:"";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td.el-table__cell div{-webkit-box-sizing:border-box;box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.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}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--border,.el-table--group{border:1px solid #ebeef5}.el-table--border::after,.el-table--group::after,.el-table::before{content:'';position:absolute;background-color:#ebeef5;z-index:1}.el-table--border::after,.el-table--group::after{top:0;right:0;width:1px;height:100%}.el-table::before{left:0;bottom:0;width:100%;height:1px}.el-table--border{border-right:none;border-bottom:none}.el-table--border.el-loading-parent--relative{border-color:transparent}.el-table--border .el-table__cell{border-right:1px solid #ebeef5}.el-table--border .el-table__cell:first-child .cell{padding-left:10px}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:1px solid #ebeef5;border-bottom-width:1px}.el-table--border th.el-table__cell{border-bottom:1px solid #ebeef5}.el-table--hidden{visibility:hidden}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;-webkit-box-shadow:0 0 10px rgba(0,0,0,.12);box-shadow:0 0 10px rgba(0,0,0,.12)}.el-table__fixed-right::before,.el-table__fixed::before{content:'';position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#ebeef5;z-index:4}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#fff;border-bottom:1px solid #ebeef5}.el-table__fixed-right{top:0;left:auto;right:0}.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper,.el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.el-table__fixed-footer-wrapper tbody td.el-table__cell{border-top:1px solid #ebeef5;background-color:#f5f7fa;color:#606266}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__footer-wrapper{margin-top:-1px}.el-table__footer-wrapper td.el-table__cell{border-top:1px solid #ebeef5}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td.el-table__cell,.el-table__header-wrapper tbody td.el-table__cell{background-color:#f5f7fa;color:#606266}.el-table__body-wrapper{overflow:hidden;position:relative}.el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.el-table__body-wrapper.is-scrolling-left~.el-table__fixed{-webkit-box-shadow:none;box-shadow:none}.el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #ebeef5}.el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #ebeef5}.el-table .caret-wrapper{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:solid 5px transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:#c0c4cc;top:5px}.el-table .sort-caret.descending{border-top-color:#c0c4cc;bottom:7px}.el-table .ascending .sort-caret.ascending{border-bottom-color:#00873c}.el-table .descending .sort-caret.descending{border-top-color:#00873c}.el-table .hidden-columns{visibility:hidden;position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:#fafafa}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell{background-color:#e6f3ec}.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row>td.el-table__cell{background-color:#f5f7fa}.el-table__body tr.current-row>td.el-table__cell{background-color:#e6f3ec}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #ebeef5;z-index:10}.el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.el-table__column-filter-trigger i{color:#909399;font-size:12px;-webkit-transform:scale(.75);transform:scale(.75)}.el-table--enable-row-transition .el-table__body td.el-table__cell{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:#f5f7fa}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:20px;line-height:20px;height:20px;text-align:center;margin-right:3px}.el-checkbox{color:#606266;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;margin-right:30px}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#00873c}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#00873c;border-color:#00873c}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#00873c}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#00873c}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#00873c;border-color:#00873c}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#fff;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;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 .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46);transition:border-color .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46)}.el-checkbox__inner:hover{border-color:#00873c}.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 .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button{position:relative;display:inline-block}.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 #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;-webkit-transition:all .3s cubic-bezier(.645, .045, .355, 1);transition:all .3s cubic-bezier(.645, .045, .355, 1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#00873c}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#00873c;border-color:#00873c;-webkit-box-shadow:-1px 0 0 0 #66b78a;box-shadow:-1px 0 0 0 #66b78a}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#00873c}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#00873c}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-tag{background-color:#e6f3ec;border-color:#cce7d8;color:#00873c;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#00873c;border-width:1px;border-style:solid;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#00873c}.el-tag .el-tag__close{color:#00873c}.el-tag .el-tag__close:hover{color:#fff;background-color:#00873c}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag.el-tag--success{background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a}.el-tag.el-tag--success.is-hit{border-color:#67c23a}.el-tag.el-tag--success .el-tag__close{color:#67c23a}.el-tag.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close::before{display:block}.el-tag--dark{background-color:#00873c;border-color:#00873c;color:#fff}.el-tag--dark.is-hit{border-color:#00873c}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#fff;background-color:#339f63}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#fff;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#67c23a}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#fff;background-color:#85ce61}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#99cfb1;color:#00873c}.el-tag--plain.is-hit{border-color:#00873c}.el-tag--plain .el-tag__close{color:#00873c}.el-tag--plain .el-tag__close:hover{color:#fff;background-color:#00873c}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#c2e7b0;color:#67c23a}.el-tag--plain.el-tag--success.is-hit{border-color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:solid 1px #ebeef5;border-radius:2px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:2px 0}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.el-table-filter__list-item:hover{background-color:#e6f3ec;color:#339f63}.el-table-filter__list-item.is-active{background-color:#00873c;color:#fff}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid #ebeef5;padding:8px}.el-table-filter__bottom button{background:0 0;border:none;color:#606266;cursor:pointer;font-size:13px;padding:0 3px}.el-table-filter__bottom button:hover{color:#00873c}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-date-table{font-size:12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover div{background-color:#f2f6fc}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#606266}.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}.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}.el-date-table.is-week-mode .el-date-table__row.current div{background-color:#f2f6fc}.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}.el-date-table td div{height:30px;padding:3px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.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%}.el-date-table td.next-month,.el-date-table td.prev-month{color:#c0c4cc}.el-date-table td.today{position:relative}.el-date-table td.today span{color:#00873c;font-weight:700}.el-date-table td.today.end-date span,.el-date-table td.today.start-date span{color:#fff}.el-date-table td.available:hover{color:#00873c}.el-date-table td.in-range div{background-color:#f2f6fc}.el-date-table td.in-range div:hover{background-color:#f2f6fc}.el-date-table td.current:not(.disabled) span{color:#fff;background-color:#00873c}.el-date-table td.end-date div,.el-date-table td.start-date div{color:#fff}.el-date-table td.end-date span,.el-date-table td.start-date span{background-color:#00873c}.el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled div{background-color:#f5f7fa;opacity:1;cursor:not-allowed;color:#c0c4cc}.el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#f2f6fc;border-radius:15px}.el-date-table td.selected div:hover{background-color:#f2f6fc}.el-date-table td.selected span{background-color:#00873c;color:#fff;border-radius:15px}.el-date-table td.week{font-size:80%;color:#606266}.el-date-table th{padding:5px;color:#606266;font-weight:400;border-bottom:solid 1px #ebeef5}.el-month-table{font-size:12px;margin:-1px;border-collapse:collapse}.el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.el-month-table td div{height:48px;padding:6px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-month-table td.today .cell{color:#00873c;font-weight:700}.el-month-table td.today.end-date .cell,.el-month-table td.today.start-date .cell{color:#fff}.el-month-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-month-table td.disabled .cell:hover{color:#c0c4cc}.el-month-table td .cell{width:60px;height:36px;display:block;line-height:36px;color:#606266;margin:0 auto;border-radius:18px}.el-month-table td .cell:hover{color:#00873c}.el-month-table td.in-range div{background-color:#f2f6fc}.el-month-table td.in-range div:hover{background-color:#f2f6fc}.el-month-table td.end-date div,.el-month-table td.start-date div{color:#fff}.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{color:#fff;background-color:#00873c}.el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-month-table td.current:not(.disabled) .cell{color:#00873c}.el-year-table{font-size:12px;margin:-1px;border-collapse:collapse}.el-year-table .el-icon{color:#303133}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:#00873c;font-weight:700}.el-year-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-year-table td.disabled .cell:hover{color:#c0c4cc}.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#606266;margin:0 auto}.el-year-table td .cell:hover{color:#00873c}.el-year-table td.current:not(.disabled) .cell{color:#00873c}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#fff;cursor:default}.el-time-spinner__arrow{font-size:12px;color:#909399;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:#00873c}.el-time-spinner__arrow.el-icon-arrow-up{top:10px}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__input.el-input .el-input__inner{padding:0;text-align:center}.el-time-spinner__list{padding:0;margin:0;list-style:none;text-align:center}.el-time-spinner__list::after,.el-time-spinner__list::before{content:'';display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#f5f7fa;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#303133;font-weight:700}.el-time-spinner__item.disabled{color:#c0c4cc;cursor:not-allowed}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55, 0, .1, 1);transition:opacity .3s cubic-bezier(.55, 0, .1, 1)}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#c0c4cc;float:left;line-height:32px}.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:#606266}.el-date-editor .el-range-input::-webkit-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-moz-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-ms-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::placeholder{color:#c0c4cc}.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:#303133}.el-date-editor .el-range__close-icon{font-size:14px;color:#c0c4cc;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor.is-active{border-color:#00873c}.el-range-editor.is-active:hover{border-color:#00873c}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#e4e7ed}.el-range-editor.is-disabled input{background-color:#f5f7fa;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled input::-webkit-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-moz-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-ms-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::placeholder{color:#c0c4cc}.el-range-editor.is-disabled .el-range-separator{color:#c0c4cc}.el-picker-panel{color:#606266;border:1px solid #e4e7ed;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#fff;border-radius:4px;line-height:30px;margin:5px 0}.el-picker-panel__body-wrapper::after,.el-picker-panel__body::after{content:"";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#fff;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:#00873c}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#00873c}.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}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#00873c}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.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}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.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}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:solid 1px #ebeef5}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266}.el-date-picker__header-label:hover{color:#00873c}.el-date-picker__header-label.active{color:#00873c}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.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}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#303133}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#fff}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.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}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid #e4e7ed}.el-time-panel{margin:5px 0;border:solid 1px #e4e7ed;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(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;-webkit-box-sizing:content-box;box-sizing:content-box}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content::after,.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 #e4e7ed;border-bottom:1px solid #e4e7ed}.el-time-panel__content::after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content::before{padding-left:50%;margin-right:12%;margin-left:12%}.el-time-panel__content.has-seconds::after{left:calc(100% / 3 * 2)}.el-time-panel__content.has-seconds::before{padding-left:calc(100% / 3)}.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}.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:#303133}.el-time-panel__btn.confirm{font-weight:800;color:#00873c}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.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:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#00873c}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:0;border-color:#00873c}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:0;border-color:#00873c}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.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}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.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}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.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, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55, 0, .1, 1);transition:opacity .3s cubic-bezier(.55, 0, .1, 1)}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#c0c4cc;float:left;line-height:32px}.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:#606266}.el-date-editor .el-range-input::-webkit-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-moz-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-ms-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::placeholder{color:#c0c4cc}.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:#303133}.el-date-editor .el-range__close-icon{font-size:14px;color:#c0c4cc;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor.is-active{border-color:#00873c}.el-range-editor.is-active:hover{border-color:#00873c}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#e4e7ed}.el-range-editor.is-disabled input{background-color:#f5f7fa;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled input::-webkit-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-moz-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-ms-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::placeholder{color:#c0c4cc}.el-range-editor.is-disabled .el-range-separator{color:#c0c4cc}.el-picker-panel{color:#606266;border:1px solid #e4e7ed;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#fff;border-radius:4px;line-height:30px;margin:5px 0}.el-picker-panel__body-wrapper::after,.el-picker-panel__body::after{content:"";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#fff;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:#00873c}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#00873c}.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}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#00873c}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.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}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.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}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:solid 1px #ebeef5}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266}.el-date-picker__header-label:hover{color:#00873c}.el-date-picker__header-label.active{color:#00873c}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.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}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.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, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.selected:not(.disabled){color:#00873c;font-weight:700}.time-select-item.disabled{color:#e4e7ed;cursor:not-allowed}.time-select-item:hover{background-color:#f5f7fa;font-weight:700;cursor:pointer}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55, 0, .1, 1);transition:opacity .3s cubic-bezier(.55, 0, .1, 1)}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#c0c4cc;float:left;line-height:32px}.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:#606266}.el-date-editor .el-range-input::-webkit-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-moz-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-ms-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::placeholder{color:#c0c4cc}.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:#303133}.el-date-editor .el-range__close-icon{font-size:14px;color:#c0c4cc;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor.is-active{border-color:#00873c}.el-range-editor.is-active:hover{border-color:#00873c}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#e4e7ed}.el-range-editor.is-disabled input{background-color:#f5f7fa;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled input::-webkit-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-moz-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-ms-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::placeholder{color:#c0c4cc}.el-range-editor.is-disabled .el-range-separator{color:#c0c4cc}.el-picker-panel{color:#606266;border:1px solid #e4e7ed;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#fff;border-radius:4px;line-height:30px;margin:5px 0}.el-picker-panel__body-wrapper::after,.el-picker-panel__body::after{content:"";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#fff;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:#00873c}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#00873c}.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}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#00873c}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.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}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#fff;cursor:default}.el-time-spinner__arrow{font-size:12px;color:#909399;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:#00873c}.el-time-spinner__arrow.el-icon-arrow-up{top:10px}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__input.el-input .el-input__inner{padding:0;text-align:center}.el-time-spinner__list{padding:0;margin:0;list-style:none;text-align:center}.el-time-spinner__list::after,.el-time-spinner__list::before{content:'';display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#f5f7fa;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#303133;font-weight:700}.el-time-spinner__item.disabled{color:#c0c4cc;cursor:not-allowed}.el-time-panel{margin:5px 0;border:solid 1px #e4e7ed;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(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;-webkit-box-sizing:content-box;box-sizing:content-box}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content::after,.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 #e4e7ed;border-bottom:1px solid #e4e7ed}.el-time-panel__content::after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content::before{padding-left:50%;margin-right:12%;margin-left:12%}.el-time-panel__content.has-seconds::after{left:calc(100% / 3 * 2)}.el-time-panel__content.has-seconds::before{padding-left:calc(100% / 3)}.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}.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:#303133}.el-time-panel__btn.confirm{font-weight:800;color:#00873c}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.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}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid #e4e7ed}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.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:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#00873c}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:0;border-color:#00873c}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:0;border-color:#00873c}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.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}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.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}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.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, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.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, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-popover{position:absolute;background:#fff;min-width:150px;border-radius:4px;border:1px solid #ebeef5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);word-break:break-all}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#303133;font-size:16px;line-height:1;margin-bottom:12px}.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0}.el-popover:focus,.el-popover:focus:active{outline-width:0}.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing){outline-width:0}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:" ";border-width:5px}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#fff}.el-tooltip__popper.is-light{background:#fff;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#fff}.v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-popup-parent--hidden{overflow:hidden}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-color:#dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.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}.el-button+.el-button{margin-left:10px}.el-button.is-round{padding:12px 20px}.el-button:focus,.el-button:hover{color:#00873c;border-color:#b3dbc5;background-color:#e6f3ec}.el-button:active{color:#007a36;border-color:#007a36;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#fff;border-color:#00873c;color:#00873c}.el-button.is-plain:active{background:#fff;border-color:#007a36;color:#007a36;outline:0}.el-button.is-active{color:#007a36;border-color:#007a36}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#ebeef5;color:#c0c4cc}.el-button.is-loading{position:relative;pointer-events:none}.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,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#fff;background-color:#00873c;border-color:#00873c}.el-button--primary:focus,.el-button--primary:hover{background:#339f63;border-color:#339f63;color:#fff}.el-button--primary:active{background:#007a36;border-color:#007a36;color:#fff;outline:0}.el-button--primary.is-active{background:#007a36;border-color:#007a36;color:#fff}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#fff;background-color:#80c39e;border-color:#80c39e}.el-button--primary.is-plain{color:#00873c;background:#e6f3ec;border-color:#99cfb1}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#00873c;border-color:#00873c;color:#fff}.el-button--primary.is-plain:active{background:#007a36;border-color:#007a36;color:#fff;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#66b78a;background-color:#e6f3ec;border-color:#cce7d8}.el-button--success{color:#fff;background-color:#67c23a;border-color:#67c23a}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#fff}.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#fff;outline:0}.el-button--success.is-active{background:#5daf34;border-color:#5daf34;color:#fff}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#fff;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67c23a;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67c23a;border-color:#67c23a;color:#fff}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#fff;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#fff;background-color:#e6a23c;border-color:#e6a23c}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#fff}.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-active{background:#cf9236;border-color:#cf9236;color:#fff}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#fff;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#e6a23c;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#e6a23c;border-color:#e6a23c;color:#fff}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#fff}.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-active{background:#dd6161;border-color:#dd6161;color:#fff}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#fff;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#f56c6c;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#f56c6c;border-color:#f56c6c;color:#fff}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#fff;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#fff}.el-button--info:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-active{background:#82848a;border-color:#82848a;color:#fff}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#fff;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#fff}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small{padding:9px 15px;font-size:12px;border-radius:3px}.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini{padding:7px 15px;font-size:12px;border-radius:3px}.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{border-color:transparent;color:#00873c;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#339f63;border-color:transparent;background-color:transparent}.el-button--text:active{color:#007a36;border-color:transparent;background-color:transparent}.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover{border-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:""}.el-button-group::after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button:not(.is-disabled):active,.el-button-group>.el-button:not(.is-disabled):focus,.el-button-group>.el-button:not(.is-disabled):hover{z-index:1}.el-button-group>.el-button.is-active{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.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:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#00873c}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:0;border-color:#00873c}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:0;border-color:#00873c}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.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}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#fff;border-radius:4px;border:1px solid #ebeef5;font-size:18px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper::after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:15px;padding-bottom:10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#303133}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:16px;cursor:pointer}.el-message-box__headerbtn .el-message-box__close{color:#909399}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#00873c}.el-message-box__content{padding:10px 15px;color:#606266;font-size:14px}.el-message-box__container{position:relative}.el-message-box__input{padding-top:15px}.el-message-box__input input.invalid{border-color:#f56c6c}.el-message-box__input input.invalid:focus{border-color:#f56c6c}.el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px!important}.el-message-box__status::before{padding-left:1px}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.el-message-box__status.el-icon-success{color:#67c23a}.el-message-box__status.el-icon-info{color:#909399}.el-message-box__status.el-icon-warning{color:#e6a23c}.el-message-box__status.el-icon-error{color:#f56c6c}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:#f56c6c;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.el-message-box--center{padding-bottom:30px}.el-message-box--center .el-message-box__header{padding-top:30px}.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}.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)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__content{text-align:center}.el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.msgbox-fade-enter-active{-webkit-animation:msgbox-fade-in .3s;animation:msgbox-fade-in .3s}.msgbox-fade-leave-active{-webkit-animation:msgbox-fade-out .3s;animation:msgbox-fade-out .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}}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb::after,.el-breadcrumb::before{display:table;content:""}.el-breadcrumb::after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#c0c4cc}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#606266}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{font-weight:700;text-decoration:none;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1);color:#303133}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:#00873c;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{font-weight:400;color:#606266;cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px 0}.el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item::after,.el-form-item::before{display:table;content:""}.el-form-item::after{clear:both}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--medium .el-form-item__content{line-height:36px}.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small .el-form-item__content{line-height:32px}.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini .el-form-item__content{line-height:28px}.el-form-item--mini.el-form-item{margin-bottom:18px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label-wrap{float:left}.el-form-item__label-wrap .el-form-item__label{display:inline-block;float:none}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content::after,.el-form-item__content::before{display:table;content:""}.el-form-item__content::after{clear:both}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:#f56c6c;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{content:'*';color:#f56c6c;margin-right:4px}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus{border-color:#f56c6c}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#f56c6c}.el-form-item--feedback .el-input__validateIcon{display:inline-block}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#00873c;z-index:1;-webkit-transition:-webkit-transform .3s cubic-bezier(.645, .045, .355, 1);transition:-webkit-transform .3s cubic-bezier(.645, .045, .355, 1);transition:transform .3s cubic-bezier(.645, .045, .355, 1);transition:transform .3s cubic-bezier(.645, .045, .355, 1),-webkit-transform .3s cubic-bezier(.645, .045, .355, 1);list-style:none}.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 .15s;transition:all .15s}.el-tabs__new-tab .el-icon-plus{-webkit-transform:scale(.8,.8);transform:scale(.8,.8)}.el-tabs__new-tab:hover{color:#00873c}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap::after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#e4e7ed;z-index:1}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.el-tabs__nav.is-stretch>*{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.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:#303133;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:0}.el-tabs__item:focus.is-active.is-focus:not(:active){-webkit-box-shadow:0 0 2px 2px #00873c inset;box-shadow:0 0 2px 2px #00873c inset;border-radius:3px}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;-webkit-transition:all .3s cubic-bezier(.645, .045, .355, 1);transition:all .3s cubic-bezier(.645, .045, .355, 1);margin-left:5px}.el-tabs__item .el-icon-close:before{-webkit-transform:scale(.9);transform:scale(.9);display:inline-block}.el-tabs__item .el-icon-close:hover{background-color:#c0c4cc;color:#fff}.el-tabs__item.is-active{color:#00873c}.el-tabs__item:hover{color:#00873c;cursor:pointer}.el-tabs__item.is-disabled{color:#c0c4cc;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #e4e7ed}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap::after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #e4e7ed;border-bottom:none;border-radius:4px 4px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.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%}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #e4e7ed;-webkit-transition:color .3s cubic-bezier(.645, .045, .355, 1),padding .3s cubic-bezier(.645, .045, .355, 1);transition:color .3s cubic-bezier(.645, .045, .355, 1),padding .3s cubic-bezier(.645, .045, .355, 1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#fff}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close{width:14px}.el-tabs--border-card{background:#fff;border:1px solid #dcdfe6;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04);box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#f5f7fa;border-bottom:1px solid #e4e7ed;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap::after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{-webkit-transition:all .3s cubic-bezier(.645, .045, .355, 1);transition:all .3s cubic-bezier(.645, .045, .355, 1);border:1px solid transparent;margin-top:-1px;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#00873c;background-color:#fff;border-right-color:#dcdfe6;border-left-color:#dcdfe6}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#00873c}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #dcdfe6}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left::after,.el-tabs--left .el-tabs__nav-wrap.is-right::after,.el-tabs--right .el-tabs__nav-wrap.is-left::after,.el-tabs--right .el-tabs__nav-wrap.is-right::after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__nav-wrap.is-left::after{left:auto;right:0}.el-tabs--left .el-tabs__active-bar.is-left{right:0;left:auto}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #e4e7ed;border-bottom:none;border-top:1px solid #e4e7ed;text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #e4e7ed;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #e4e7ed;border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #e4e7ed;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:transparent;border-top-color:#d1dbe5;border-bottom-color:#d1dbe5}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right::after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #e4e7ed}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #e4e7ed;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #e4e7ed;border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #e4e7ed;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:transparent;border-top-color:#d1dbe5;border-bottom-color:#d1dbe5}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .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}}.el-tag{background-color:#e6f3ec;border-color:#cce7d8;color:#00873c;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#00873c;border-width:1px;border-style:solid;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#00873c}.el-tag .el-tag__close{color:#00873c}.el-tag .el-tag__close:hover{color:#fff;background-color:#00873c}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag.el-tag--success{background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a}.el-tag.el-tag--success.is-hit{border-color:#67c23a}.el-tag.el-tag--success .el-tag__close{color:#67c23a}.el-tag.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close::before{display:block}.el-tag--dark{background-color:#00873c;border-color:#00873c;color:#fff}.el-tag--dark.is-hit{border-color:#00873c}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#fff;background-color:#339f63}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#fff;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#67c23a}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#fff;background-color:#85ce61}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#99cfb1;color:#00873c}.el-tag--plain.is-hit{border-color:#00873c}.el-tag--plain .el-tag__close{color:#00873c}.el-tag--plain .el-tag__close:hover{color:#fff;background-color:#00873c}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#c2e7b0;color:#67c23a}.el-tag--plain.el-tag--success.is-hit{border-color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55, 0, .1, 1);transition:opacity .3s cubic-bezier(.55, 0, .1, 1)}.el-checkbox{color:#606266;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;margin-right:30px}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#00873c}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#00873c;border-color:#00873c}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#00873c}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#00873c}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#00873c;border-color:#00873c}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#fff;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;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 .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46);transition:border-color .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46)}.el-checkbox__inner:hover{border-color:#00873c}.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 .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button{position:relative;display:inline-block}.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 #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;-webkit-transition:all .3s cubic-bezier(.645, .045, .355, 1);transition:all .3s cubic-bezier(.645, .045, .355, 1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#00873c}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#00873c;border-color:#00873c;-webkit-box-shadow:-1px 0 0 0 #66b78a;box-shadow:-1px 0 0 0 #66b78a}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#00873c}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#00873c}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-tree{position:relative;cursor:default;background:#fff;color:#606266}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#909399;font-size:14px}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#00873c}.el-tree-node{white-space:nowrap;outline:0}.el-tree-node:focus>.el-tree-node__content{background-color:#f5f7fa}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#00873c;color:#fff}.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}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:#f5f7fa}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:#c0c4cc;font-size:12px;-webkit-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.el-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#c0c4cc}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#ebf5ef}.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 .2s;transition:opacity .2s}.el-alert.is-light .el-alert__closebtn{color:#c0c4cc}.el-alert.is-dark .el-alert__closebtn{color:#fff}.el-alert.is-dark .el-alert__description{color:#fff}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success.is-light{background-color:#f0f9eb;color:#67c23a}.el-alert--success.is-light .el-alert__description{color:#67c23a}.el-alert--success.is-dark{background-color:#67c23a;color:#fff}.el-alert--info.is-light{background-color:#f4f4f5;color:#909399}.el-alert--info.is-dark{background-color:#909399;color:#fff}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning.is-light{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning.is-light .el-alert__description{color:#e6a23c}.el-alert--warning.is-dark{background-color:#e6a23c;color:#fff}.el-alert--error.is-light{background-color:#fef0f0;color:#f56c6c}.el-alert--error.is-light .el-alert__description{color:#f56c6c}.el-alert--error.is-dark{background-color:#f56c6c;color:#fff}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0 0}.el-alert__closebtn{font-size:12px;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-alert-fade-enter,.el-alert-fade-leave-active{opacity:0}.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 #ebeef5;position:fixed;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:13px;margin-right:8px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#67c23a}.el-notification .el-icon-error{color:#f56c6c}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#e6a23c}.el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.el-notification-fade-leave-active{opacity:0}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.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:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#00873c}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:0;border-color:#00873c}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:0;border-color:#00873c}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.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}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.el-input-number__decrease,.el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#f5f7fa;color:#606266;cursor:pointer;font-size:13px}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#00873c}.el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#00873c}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #dcdfe6}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #dcdfe6}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#e4e7ed;color:#e4e7ed}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#e4e7ed;cursor:not-allowed}.el-input-number--medium{width:200px;line-height:34px}.el-input-number--medium .el-input-number__decrease,.el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.el-input-number--small{width:130px;line-height:30px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.el-input-number--mini{width:130px;line-height:26px}.el-input-number--mini .el-input-number__decrease,.el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.el-input-number--mini .el-input-number__decrease [class*=el-icon],.el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #dcdfe6}.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 #dcdfe6;border-radius:0 0 4px 0}.el-input-number.is-controls-right[class*=medium] [class*=decrease],.el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.el-input-number.is-controls-right[class*=mini] [class*=decrease],.el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing){outline-width:0}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:" ";border-width:5px}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#fff}.el-tooltip__popper.is-light{background:#fff;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#fff}.el-slider::after,.el-slider::before{display:table;content:""}.el-slider::after{clear:both}.el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#e4e7ed;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.el-slider__runway.show-input{margin-right:160px;width:auto}.el-slider__runway.disabled{cursor:default}.el-slider__runway.disabled .el-slider__bar{background-color:#c0c4cc}.el-slider__runway.disabled .el-slider__button{border-color:#c0c4cc}.el-slider__runway.disabled .el-slider__button-wrapper.hover,.el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button-wrapper.dragging{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{-webkit-transform:scale(1);transform:scale(1)}.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging{cursor:not-allowed}.el-slider__input{float:right;margin-top:3px;width:130px}.el-slider__input.el-input-number--mini{margin-top:5px}.el-slider__input.el-input-number--medium{margin-top:0}.el-slider__input.el-input-number--large{margin-top:-2px}.el-slider__bar{height:6px;background-color:#00873c;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.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;line-height:normal}.el-slider__button-wrapper::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-slider__button-wrapper .el-tooltip{vertical-align:middle;display:inline-block}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{width:16px;height:16px;border:solid 2px #00873c;background-color:#fff;border-radius:50%;-webkit-transition:.2s;transition:.2s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__stop{position:absolute;height:6px;width:6px;border-radius:100%;background-color:#fff;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-slider__marks{top:0;left:12px;width:18px;height:100%}.el-slider__marks-text{position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:14px;color:#909399;margin-top:15px}.el-slider.is-vertical{position:relative}.el-slider.is-vertical .el-slider__runway{width:6px;height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:6px;height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical.el-slider--with-input{padding-bottom:58px}.el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:32px;margin-top:-1px;border:1px solid #dcdfe6;line-height:20px;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px}.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}.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#c0c4cc}.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#00873c}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity .3s;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:#00873c;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.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:#00873C;stroke-linecap:round}.el-loading-spinner i{color:#00873c}.el-loading-fade-enter,.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}}.el-row{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box}.el-row::after,.el-row::before{display:table;content:""}.el-row::after{clear:both}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-align-top{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}[class*=el-col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-col-0{display:none}.el-col-0{width:0%}.el-col-offset-0{margin-left:0}.el-col-pull-0{position:relative;right:0}.el-col-push-0{position:relative;left:0}.el-col-1{width:4.16667%}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{position:relative;right:4.16667%}.el-col-push-1{position:relative;left:4.16667%}.el-col-2{width:8.33333%}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{position:relative;right:8.33333%}.el-col-push-2{position:relative;left:8.33333%}.el-col-3{width:12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{position:relative;right:12.5%}.el-col-push-3{position:relative;left:12.5%}.el-col-4{width:16.66667%}.el-col-offset-4{margin-left:16.66667%}.el-col-pull-4{position:relative;right:16.66667%}.el-col-push-4{position:relative;left:16.66667%}.el-col-5{width:20.83333%}.el-col-offset-5{margin-left:20.83333%}.el-col-pull-5{position:relative;right:20.83333%}.el-col-push-5{position:relative;left:20.83333%}.el-col-6{width:25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{position:relative;right:25%}.el-col-push-6{position:relative;left:25%}.el-col-7{width:29.16667%}.el-col-offset-7{margin-left:29.16667%}.el-col-pull-7{position:relative;right:29.16667%}.el-col-push-7{position:relative;left:29.16667%}.el-col-8{width:33.33333%}.el-col-offset-8{margin-left:33.33333%}.el-col-pull-8{position:relative;right:33.33333%}.el-col-push-8{position:relative;left:33.33333%}.el-col-9{width:37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{position:relative;right:37.5%}.el-col-push-9{position:relative;left:37.5%}.el-col-10{width:41.66667%}.el-col-offset-10{margin-left:41.66667%}.el-col-pull-10{position:relative;right:41.66667%}.el-col-push-10{position:relative;left:41.66667%}.el-col-11{width:45.83333%}.el-col-offset-11{margin-left:45.83333%}.el-col-pull-11{position:relative;right:45.83333%}.el-col-push-11{position:relative;left:45.83333%}.el-col-12{width:50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{position:relative;left:50%}.el-col-13{width:54.16667%}.el-col-offset-13{margin-left:54.16667%}.el-col-pull-13{position:relative;right:54.16667%}.el-col-push-13{position:relative;left:54.16667%}.el-col-14{width:58.33333%}.el-col-offset-14{margin-left:58.33333%}.el-col-pull-14{position:relative;right:58.33333%}.el-col-push-14{position:relative;left:58.33333%}.el-col-15{width:62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{position:relative;right:62.5%}.el-col-push-15{position:relative;left:62.5%}.el-col-16{width:66.66667%}.el-col-offset-16{margin-left:66.66667%}.el-col-pull-16{position:relative;right:66.66667%}.el-col-push-16{position:relative;left:66.66667%}.el-col-17{width:70.83333%}.el-col-offset-17{margin-left:70.83333%}.el-col-pull-17{position:relative;right:70.83333%}.el-col-push-17{position:relative;left:70.83333%}.el-col-18{width:75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{position:relative;right:75%}.el-col-push-18{position:relative;left:75%}.el-col-19{width:79.16667%}.el-col-offset-19{margin-left:79.16667%}.el-col-pull-19{position:relative;right:79.16667%}.el-col-push-19{position:relative;left:79.16667%}.el-col-20{width:83.33333%}.el-col-offset-20{margin-left:83.33333%}.el-col-pull-20{position:relative;right:83.33333%}.el-col-push-20{position:relative;left:83.33333%}.el-col-21{width:87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{position:relative;right:87.5%}.el-col-push-21{position:relative;left:87.5%}.el-col-22{width:91.66667%}.el-col-offset-22{margin-left:91.66667%}.el-col-pull-22{position:relative;right:91.66667%}.el-col-push-22{position:relative;left:91.66667%}.el-col-23{width:95.83333%}.el-col-offset-23{margin-left:95.83333%}.el-col-pull-23{position:relative;right:95.83333%}.el-col-push-23{position:relative;left:95.83333%}.el-col-24{width:100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{position:relative;right:100%}.el-col-push-24{position:relative;left:100%}@media only screen and (max-width:767px){.el-col-xs-0{display:none}.el-col-xs-0{width:0%}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{width:4.16667%}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{width:8.33333%}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{width:12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{width:16.66667%}.el-col-xs-offset-4{margin-left:16.66667%}.el-col-xs-pull-4{position:relative;right:16.66667%}.el-col-xs-push-4{position:relative;left:16.66667%}.el-col-xs-5{width:20.83333%}.el-col-xs-offset-5{margin-left:20.83333%}.el-col-xs-pull-5{position:relative;right:20.83333%}.el-col-xs-push-5{position:relative;left:20.83333%}.el-col-xs-6{width:25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{width:29.16667%}.el-col-xs-offset-7{margin-left:29.16667%}.el-col-xs-pull-7{position:relative;right:29.16667%}.el-col-xs-push-7{position:relative;left:29.16667%}.el-col-xs-8{width:33.33333%}.el-col-xs-offset-8{margin-left:33.33333%}.el-col-xs-pull-8{position:relative;right:33.33333%}.el-col-xs-push-8{position:relative;left:33.33333%}.el-col-xs-9{width:37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{width:41.66667%}.el-col-xs-offset-10{margin-left:41.66667%}.el-col-xs-pull-10{position:relative;right:41.66667%}.el-col-xs-push-10{position:relative;left:41.66667%}.el-col-xs-11{width:45.83333%}.el-col-xs-offset-11{margin-left:45.83333%}.el-col-xs-pull-11{position:relative;right:45.83333%}.el-col-xs-push-11{position:relative;left:45.83333%}.el-col-xs-12{width:50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{width:54.16667%}.el-col-xs-offset-13{margin-left:54.16667%}.el-col-xs-pull-13{position:relative;right:54.16667%}.el-col-xs-push-13{position:relative;left:54.16667%}.el-col-xs-14{width:58.33333%}.el-col-xs-offset-14{margin-left:58.33333%}.el-col-xs-pull-14{position:relative;right:58.33333%}.el-col-xs-push-14{position:relative;left:58.33333%}.el-col-xs-15{width:62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{width:66.66667%}.el-col-xs-offset-16{margin-left:66.66667%}.el-col-xs-pull-16{position:relative;right:66.66667%}.el-col-xs-push-16{position:relative;left:66.66667%}.el-col-xs-17{width:70.83333%}.el-col-xs-offset-17{margin-left:70.83333%}.el-col-xs-pull-17{position:relative;right:70.83333%}.el-col-xs-push-17{position:relative;left:70.83333%}.el-col-xs-18{width:75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{width:79.16667%}.el-col-xs-offset-19{margin-left:79.16667%}.el-col-xs-pull-19{position:relative;right:79.16667%}.el-col-xs-push-19{position:relative;left:79.16667%}.el-col-xs-20{width:83.33333%}.el-col-xs-offset-20{margin-left:83.33333%}.el-col-xs-pull-20{position:relative;right:83.33333%}.el-col-xs-push-20{position:relative;left:83.33333%}.el-col-xs-21{width:87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{width:91.66667%}.el-col-xs-offset-22{margin-left:91.66667%}.el-col-xs-pull-22{position:relative;right:91.66667%}.el-col-xs-push-22{position:relative;left:91.66667%}.el-col-xs-23{width:95.83333%}.el-col-xs-offset-23{margin-left:95.83333%}.el-col-xs-pull-23{position:relative;right:95.83333%}.el-col-xs-push-23{position:relative;left:95.83333%}.el-col-xs-24{width:100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{display:none}.el-col-sm-0{width:0%}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{width:4.16667%}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{width:8.33333%}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{width:12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{width:16.66667%}.el-col-sm-offset-4{margin-left:16.66667%}.el-col-sm-pull-4{position:relative;right:16.66667%}.el-col-sm-push-4{position:relative;left:16.66667%}.el-col-sm-5{width:20.83333%}.el-col-sm-offset-5{margin-left:20.83333%}.el-col-sm-pull-5{position:relative;right:20.83333%}.el-col-sm-push-5{position:relative;left:20.83333%}.el-col-sm-6{width:25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{width:29.16667%}.el-col-sm-offset-7{margin-left:29.16667%}.el-col-sm-pull-7{position:relative;right:29.16667%}.el-col-sm-push-7{position:relative;left:29.16667%}.el-col-sm-8{width:33.33333%}.el-col-sm-offset-8{margin-left:33.33333%}.el-col-sm-pull-8{position:relative;right:33.33333%}.el-col-sm-push-8{position:relative;left:33.33333%}.el-col-sm-9{width:37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{width:41.66667%}.el-col-sm-offset-10{margin-left:41.66667%}.el-col-sm-pull-10{position:relative;right:41.66667%}.el-col-sm-push-10{position:relative;left:41.66667%}.el-col-sm-11{width:45.83333%}.el-col-sm-offset-11{margin-left:45.83333%}.el-col-sm-pull-11{position:relative;right:45.83333%}.el-col-sm-push-11{position:relative;left:45.83333%}.el-col-sm-12{width:50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{width:54.16667%}.el-col-sm-offset-13{margin-left:54.16667%}.el-col-sm-pull-13{position:relative;right:54.16667%}.el-col-sm-push-13{position:relative;left:54.16667%}.el-col-sm-14{width:58.33333%}.el-col-sm-offset-14{margin-left:58.33333%}.el-col-sm-pull-14{position:relative;right:58.33333%}.el-col-sm-push-14{position:relative;left:58.33333%}.el-col-sm-15{width:62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{width:66.66667%}.el-col-sm-offset-16{margin-left:66.66667%}.el-col-sm-pull-16{position:relative;right:66.66667%}.el-col-sm-push-16{position:relative;left:66.66667%}.el-col-sm-17{width:70.83333%}.el-col-sm-offset-17{margin-left:70.83333%}.el-col-sm-pull-17{position:relative;right:70.83333%}.el-col-sm-push-17{position:relative;left:70.83333%}.el-col-sm-18{width:75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{width:79.16667%}.el-col-sm-offset-19{margin-left:79.16667%}.el-col-sm-pull-19{position:relative;right:79.16667%}.el-col-sm-push-19{position:relative;left:79.16667%}.el-col-sm-20{width:83.33333%}.el-col-sm-offset-20{margin-left:83.33333%}.el-col-sm-pull-20{position:relative;right:83.33333%}.el-col-sm-push-20{position:relative;left:83.33333%}.el-col-sm-21{width:87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{width:91.66667%}.el-col-sm-offset-22{margin-left:91.66667%}.el-col-sm-pull-22{position:relative;right:91.66667%}.el-col-sm-push-22{position:relative;left:91.66667%}.el-col-sm-23{width:95.83333%}.el-col-sm-offset-23{margin-left:95.83333%}.el-col-sm-pull-23{position:relative;right:95.83333%}.el-col-sm-push-23{position:relative;left:95.83333%}.el-col-sm-24{width:100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{display:none}.el-col-md-0{width:0%}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{width:4.16667%}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{width:8.33333%}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{width:12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{width:16.66667%}.el-col-md-offset-4{margin-left:16.66667%}.el-col-md-pull-4{position:relative;right:16.66667%}.el-col-md-push-4{position:relative;left:16.66667%}.el-col-md-5{width:20.83333%}.el-col-md-offset-5{margin-left:20.83333%}.el-col-md-pull-5{position:relative;right:20.83333%}.el-col-md-push-5{position:relative;left:20.83333%}.el-col-md-6{width:25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{width:29.16667%}.el-col-md-offset-7{margin-left:29.16667%}.el-col-md-pull-7{position:relative;right:29.16667%}.el-col-md-push-7{position:relative;left:29.16667%}.el-col-md-8{width:33.33333%}.el-col-md-offset-8{margin-left:33.33333%}.el-col-md-pull-8{position:relative;right:33.33333%}.el-col-md-push-8{position:relative;left:33.33333%}.el-col-md-9{width:37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{width:41.66667%}.el-col-md-offset-10{margin-left:41.66667%}.el-col-md-pull-10{position:relative;right:41.66667%}.el-col-md-push-10{position:relative;left:41.66667%}.el-col-md-11{width:45.83333%}.el-col-md-offset-11{margin-left:45.83333%}.el-col-md-pull-11{position:relative;right:45.83333%}.el-col-md-push-11{position:relative;left:45.83333%}.el-col-md-12{width:50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{width:54.16667%}.el-col-md-offset-13{margin-left:54.16667%}.el-col-md-pull-13{position:relative;right:54.16667%}.el-col-md-push-13{position:relative;left:54.16667%}.el-col-md-14{width:58.33333%}.el-col-md-offset-14{margin-left:58.33333%}.el-col-md-pull-14{position:relative;right:58.33333%}.el-col-md-push-14{position:relative;left:58.33333%}.el-col-md-15{width:62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{width:66.66667%}.el-col-md-offset-16{margin-left:66.66667%}.el-col-md-pull-16{position:relative;right:66.66667%}.el-col-md-push-16{position:relative;left:66.66667%}.el-col-md-17{width:70.83333%}.el-col-md-offset-17{margin-left:70.83333%}.el-col-md-pull-17{position:relative;right:70.83333%}.el-col-md-push-17{position:relative;left:70.83333%}.el-col-md-18{width:75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{width:79.16667%}.el-col-md-offset-19{margin-left:79.16667%}.el-col-md-pull-19{position:relative;right:79.16667%}.el-col-md-push-19{position:relative;left:79.16667%}.el-col-md-20{width:83.33333%}.el-col-md-offset-20{margin-left:83.33333%}.el-col-md-pull-20{position:relative;right:83.33333%}.el-col-md-push-20{position:relative;left:83.33333%}.el-col-md-21{width:87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{width:91.66667%}.el-col-md-offset-22{margin-left:91.66667%}.el-col-md-pull-22{position:relative;right:91.66667%}.el-col-md-push-22{position:relative;left:91.66667%}.el-col-md-23{width:95.83333%}.el-col-md-offset-23{margin-left:95.83333%}.el-col-md-pull-23{position:relative;right:95.83333%}.el-col-md-push-23{position:relative;left:95.83333%}.el-col-md-24{width:100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none}.el-col-lg-0{width:0%}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{width:4.16667%}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{width:8.33333%}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{width:12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{width:16.66667%}.el-col-lg-offset-4{margin-left:16.66667%}.el-col-lg-pull-4{position:relative;right:16.66667%}.el-col-lg-push-4{position:relative;left:16.66667%}.el-col-lg-5{width:20.83333%}.el-col-lg-offset-5{margin-left:20.83333%}.el-col-lg-pull-5{position:relative;right:20.83333%}.el-col-lg-push-5{position:relative;left:20.83333%}.el-col-lg-6{width:25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{width:29.16667%}.el-col-lg-offset-7{margin-left:29.16667%}.el-col-lg-pull-7{position:relative;right:29.16667%}.el-col-lg-push-7{position:relative;left:29.16667%}.el-col-lg-8{width:33.33333%}.el-col-lg-offset-8{margin-left:33.33333%}.el-col-lg-pull-8{position:relative;right:33.33333%}.el-col-lg-push-8{position:relative;left:33.33333%}.el-col-lg-9{width:37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{width:41.66667%}.el-col-lg-offset-10{margin-left:41.66667%}.el-col-lg-pull-10{position:relative;right:41.66667%}.el-col-lg-push-10{position:relative;left:41.66667%}.el-col-lg-11{width:45.83333%}.el-col-lg-offset-11{margin-left:45.83333%}.el-col-lg-pull-11{position:relative;right:45.83333%}.el-col-lg-push-11{position:relative;left:45.83333%}.el-col-lg-12{width:50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{width:54.16667%}.el-col-lg-offset-13{margin-left:54.16667%}.el-col-lg-pull-13{position:relative;right:54.16667%}.el-col-lg-push-13{position:relative;left:54.16667%}.el-col-lg-14{width:58.33333%}.el-col-lg-offset-14{margin-left:58.33333%}.el-col-lg-pull-14{position:relative;right:58.33333%}.el-col-lg-push-14{position:relative;left:58.33333%}.el-col-lg-15{width:62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{width:66.66667%}.el-col-lg-offset-16{margin-left:66.66667%}.el-col-lg-pull-16{position:relative;right:66.66667%}.el-col-lg-push-16{position:relative;left:66.66667%}.el-col-lg-17{width:70.83333%}.el-col-lg-offset-17{margin-left:70.83333%}.el-col-lg-pull-17{position:relative;right:70.83333%}.el-col-lg-push-17{position:relative;left:70.83333%}.el-col-lg-18{width:75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{width:79.16667%}.el-col-lg-offset-19{margin-left:79.16667%}.el-col-lg-pull-19{position:relative;right:79.16667%}.el-col-lg-push-19{position:relative;left:79.16667%}.el-col-lg-20{width:83.33333%}.el-col-lg-offset-20{margin-left:83.33333%}.el-col-lg-pull-20{position:relative;right:83.33333%}.el-col-lg-push-20{position:relative;left:83.33333%}.el-col-lg-21{width:87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{width:91.66667%}.el-col-lg-offset-22{margin-left:91.66667%}.el-col-lg-pull-22{position:relative;right:91.66667%}.el-col-lg-push-22{position:relative;left:91.66667%}.el-col-lg-23{width:95.83333%}.el-col-lg-offset-23{margin-left:95.83333%}.el-col-lg-pull-23{position:relative;right:95.83333%}.el-col-lg-push-23{position:relative;left:95.83333%}.el-col-lg-24{width:100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none}.el-col-xl-0{width:0%}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{width:4.16667%}.el-col-xl-offset-1{margin-left:4.16667%}.el-col-xl-pull-1{position:relative;right:4.16667%}.el-col-xl-push-1{position:relative;left:4.16667%}.el-col-xl-2{width:8.33333%}.el-col-xl-offset-2{margin-left:8.33333%}.el-col-xl-pull-2{position:relative;right:8.33333%}.el-col-xl-push-2{position:relative;left:8.33333%}.el-col-xl-3{width:12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{width:16.66667%}.el-col-xl-offset-4{margin-left:16.66667%}.el-col-xl-pull-4{position:relative;right:16.66667%}.el-col-xl-push-4{position:relative;left:16.66667%}.el-col-xl-5{width:20.83333%}.el-col-xl-offset-5{margin-left:20.83333%}.el-col-xl-pull-5{position:relative;right:20.83333%}.el-col-xl-push-5{position:relative;left:20.83333%}.el-col-xl-6{width:25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{width:29.16667%}.el-col-xl-offset-7{margin-left:29.16667%}.el-col-xl-pull-7{position:relative;right:29.16667%}.el-col-xl-push-7{position:relative;left:29.16667%}.el-col-xl-8{width:33.33333%}.el-col-xl-offset-8{margin-left:33.33333%}.el-col-xl-pull-8{position:relative;right:33.33333%}.el-col-xl-push-8{position:relative;left:33.33333%}.el-col-xl-9{width:37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{width:41.66667%}.el-col-xl-offset-10{margin-left:41.66667%}.el-col-xl-pull-10{position:relative;right:41.66667%}.el-col-xl-push-10{position:relative;left:41.66667%}.el-col-xl-11{width:45.83333%}.el-col-xl-offset-11{margin-left:45.83333%}.el-col-xl-pull-11{position:relative;right:45.83333%}.el-col-xl-push-11{position:relative;left:45.83333%}.el-col-xl-12{width:50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{width:54.16667%}.el-col-xl-offset-13{margin-left:54.16667%}.el-col-xl-pull-13{position:relative;right:54.16667%}.el-col-xl-push-13{position:relative;left:54.16667%}.el-col-xl-14{width:58.33333%}.el-col-xl-offset-14{margin-left:58.33333%}.el-col-xl-pull-14{position:relative;right:58.33333%}.el-col-xl-push-14{position:relative;left:58.33333%}.el-col-xl-15{width:62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{width:66.66667%}.el-col-xl-offset-16{margin-left:66.66667%}.el-col-xl-pull-16{position:relative;right:66.66667%}.el-col-xl-push-16{position:relative;left:66.66667%}.el-col-xl-17{width:70.83333%}.el-col-xl-offset-17{margin-left:70.83333%}.el-col-xl-pull-17{position:relative;right:70.83333%}.el-col-xl-push-17{position:relative;left:70.83333%}.el-col-xl-18{width:75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{width:79.16667%}.el-col-xl-offset-19{margin-left:79.16667%}.el-col-xl-pull-19{position:relative;right:79.16667%}.el-col-xl-push-19{position:relative;left:79.16667%}.el-col-xl-20{width:83.33333%}.el-col-xl-offset-20{margin-left:83.33333%}.el-col-xl-pull-20{position:relative;right:83.33333%}.el-col-xl-push-20{position:relative;left:83.33333%}.el-col-xl-21{width:87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{width:91.66667%}.el-col-xl-offset-22{margin-left:91.66667%}.el-col-xl-pull-22{position:relative;right:91.66667%}.el-col-xl-push-22{position:relative;left:91.66667%}.el-col-xl-23{width:95.83333%}.el-col-xl-offset-23{margin-left:95.83333%}.el-col-xl-pull-23{position:relative;right:95.83333%}.el-col-xl-push-23{position:relative;left:95.83333%}.el-col-xl-24{width:100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}.el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .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%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#67c23a}.el-progress.is-success .el-progress__text{color:#67c23a}.el-progress.is-warning .el-progress-bar__inner{background-color:#e6a23c}.el-progress.is-warning .el-progress__text{color:#e6a23c}.el-progress.is-exception .el-progress-bar__inner{background-color:#f56c6c}.el-progress.is-exception .el-progress__text{color:#f56c6c}.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}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#ebeef5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#00873c;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.el-progress-bar__inner::after{display:inline-block;content:"";height:100%;vertical-align:middle}.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}}.el-upload{display:inline-block;text-align:center;cursor:pointer;outline:0}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:#606266;margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0}.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}.el-upload--picture-card i{font-size:28px;color:#8c939d}.el-upload--picture-card:hover{border-color:#00873c;color:#00873c}.el-upload:focus{border-color:#00873c;color:#00873c}.el-upload:focus .el-upload-dragger{border-color:#00873c}.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}.el-upload-dragger .el-icon-upload{font-size:67px;color:#c0c4cc;margin:40px 0 16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:1px solid #dcdfe6;margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:#606266;font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:#00873c;font-style:normal}.el-upload-dragger:hover{border-color:#00873c}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #00873c}.el-upload-list{margin:0;padding:0;list-style:none}.el-upload-list__item{-webkit-transition:all .5s cubic-bezier(.55, 0, .1, 1);transition:all .5s cubic-bezier(.55, 0, .1, 1);font-size:14px;color:#606266;line-height:1.8;margin-top:5px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item:first-child{margin-top:10px}.el-upload-list__item .el-icon-upload-success{color:#67c23a}.el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#606266}.el-upload-list__item .el-icon-close:hover{opacity:1}.el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#00873c}.el-upload-list__item:hover{background-color:#f5f7fa}.el-upload-list__item:hover .el-icon-close{display:inline-block}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#00873c;cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon-close-tip,.el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip{display:none}.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label{display:none}.el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.el-upload-list__item-name{color:#606266;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;-webkit-transition:color .3s;transition:color .3s;white-space:nowrap}.el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#909399;line-height:inherit}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#606266;display:none}.el-upload-list__item-delete:hover{color:#00873c}.el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.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}.el-upload-list--picture-card .el-upload-list__item .el-icon-check,.el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon-close{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.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,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.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)}.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,.5);-webkit-transition:opacity .3s;transition:opacity .3s}.el-upload-list--picture-card .el-upload-list__item-actions::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.el-upload-list--picture-card .el-progress{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;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}.el-upload-list--picture .el-upload-list__item .el-icon-check,.el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#fff}.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}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.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;background-color:#fff}.el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.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}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.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,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-cover__label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#fff;font-size:14px;cursor:pointer;vertical-align:middle;-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);margin-top:60px}.el-upload-cover__interact .btn i{margin-top:0}.el-upload-cover__interact .btn span{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{-webkit-transform:translateY(-13px);transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.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:#303133}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .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%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#67c23a}.el-progress.is-success .el-progress__text{color:#67c23a}.el-progress.is-warning .el-progress-bar__inner{background-color:#e6a23c}.el-progress.is-warning .el-progress__text{color:#e6a23c}.el-progress.is-exception .el-progress-bar__inner{background-color:#f56c6c}.el-progress.is-exception .el-progress__text{color:#f56c6c}.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}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#ebeef5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#00873c;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.el-progress-bar__inner::after{display:inline-block;content:"";height:100%;vertical-align:middle}.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}}.el-time-spinner{width:100%;white-space:nowrap}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.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}}.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:#ebeef5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,transform .4s,top .4s;transition:opacity .3s,transform .4s,top .4s,-webkit-transform .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}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.el-message--success .el-message__content{color:#67c23a}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#e6a23c}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#f56c6c}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__content:focus{outline-width:0}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#c0c4cc;font-size:16px}.el-message__closeBtn:focus{outline-width:0}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#67c23a}.el-message .el-icon-error{color:#f56c6c}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#e6a23c}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#f56c6c;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}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:#00873c}.el-badge__content--success{background-color:#67c23a}.el-badge__content--warning{background-color:#e6a23c}.el-badge__content--info{background-color:#909399}.el-badge__content--danger{background-color:#f56c6c}.el-card{border-radius:4px;border:1px solid #ebeef5;background-color:#fff;overflow:hidden;color:#303133;-webkit-transition:.3s;transition:.3s}.el-card.is-always-shadow{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #ebeef5;-webkit-box-sizing:border-box;box-sizing:border-box}.el-card__body{padding:20px}.el-rate{height:20px;line-height:1}.el-rate:active,.el-rate:focus{outline-width:0}.el-rate__item{display:inline-block;position:relative;font-size:0;vertical-align:middle}.el-rate__icon{position:relative;display:inline-block;font-size:18px;margin-right:6px;color:#c0c4cc;-webkit-transition:.3s;transition:.3s}.el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.el-rate__icon .path2{position:absolute;left:0;top:0}.el-rate__decimal{position:absolute;top:0;left:0;display:inline-block;overflow:hidden}.el-rate__text{font-size:14px;vertical-align:middle}.el-steps{display:-webkit-box;display:-ms-flexbox;display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#f5f7fa}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column}.el-step{position:relative;-ms-flex-negative:1;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.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}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:#303133;border-color:#303133}.el-step__head.is-wait{color:#c0c4cc;border-color:#c0c4cc}.el-step__head.is-success{color:#67c23a;border-color:#67c23a}.el-step__head.is-error{color:#f56c6c;border-color:#f56c6c}.el-step__head.is-finish{color:#00873c;border-color:#00873c}.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:.15s ease-out;transition:.15s ease-out}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.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}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{-webkit-transform:translateY(1px);transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:#c0c4cc}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;-webkit-transition:.15s ease-out;transition:.15s ease-out;-webkit-box-sizing:border-box;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:#303133}.el-step__title.is-wait{color:#c0c4cc}.el-step__title.is-success{color:#67c23a}.el-step__title.is-error{color:#f56c6c}.el-step__title.is-finish{color:#00873c}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#303133}.el-step__description.is-wait{color:#c0c4cc}.el-step__description.is-success{color:#67c23a}.el-step__description.is-error{color:#f56c6c}.el-step__description.is-finish{color:#00873c}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.el-step.is-vertical .el-step__head{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head{text-align:center}.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{-webkit-transform:scale(.8) translateY(1px);transform:scale(.8) translateY(1px)}.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}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.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}.el-step.is-simple .el-step__arrow::after,.el-step.is-simple .el-step__arrow::before{content:'';display:inline-block;position:absolute;height:15px;width:1px;background:#c0c4cc}.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}.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%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-carousel{position:relative}.el-carousel--horizontal{overflow-x:hidden}.el-carousel--vertical{overflow-y:hidden}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:0;padding:0;margin:0;height:36px;width:36px;cursor:pointer;-webkit-transition:.3s;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,.11);color:#fff;position:absolute;top:50%;z-index:10;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;margin:0;padding:0;z-index:2}.el-carousel__indicators--horizontal{bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#c0c4cc;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:12px 4px}.el-carousel__indicator--vertical{padding:4px 12px}.el-carousel__indicator--vertical .el-carousel__button{width:2px;height:15px}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#fff;border:none;outline:0;padding:0;margin:0;cursor:pointer;-webkit-transition:.3s;transition:.3s}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.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}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-carousel__item{position:absolute;top:0;left:0;width:100%;height:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item.is-animating{-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card{width:50%;-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{position:absolute;width:100%;height:100%;top:0;left:0;background-color:#fff;opacity:.24;-webkit-transition:.2s;transition:.2s}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55, 0, .1, 1);transition:opacity .3s cubic-bezier(.55, 0, .1, 1)}.el-collapse{border-top:1px solid #ebeef5;border-bottom:1px solid #ebeef5}.el-collapse-item.is-disabled .el-collapse-item__header{color:#bbb;cursor:not-allowed}.el-collapse-item__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:48px;line-height:48px;background-color:#fff;color:#303133;cursor:pointer;border-bottom:1px solid #ebeef5;font-size:13px;font-weight:500;-webkit-transition:border-bottom-color .3s;transition:border-bottom-color .3s;outline:0}.el-collapse-item__arrow{margin:0 8px 0 auto;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-weight:300}.el-collapse-item__arrow.is-active{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:#00873c}.el-collapse-item__header.is-active{border-bottom-color:transparent}.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 #ebeef5}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#303133;line-height:1.769230769230769}.el-collapse-item:last-child{margin-bottom:-1px}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.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:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#00873c}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:0;border-color:#00873c}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:0;border-color:#00873c}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.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}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.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, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-tag{background-color:#e6f3ec;border-color:#cce7d8;color:#00873c;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#00873c;border-width:1px;border-style:solid;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#00873c}.el-tag .el-tag__close{color:#00873c}.el-tag .el-tag__close:hover{color:#fff;background-color:#00873c}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag.el-tag--success{background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a}.el-tag.el-tag--success.is-hit{border-color:#67c23a}.el-tag.el-tag--success .el-tag__close{color:#67c23a}.el-tag.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close::before{display:block}.el-tag--dark{background-color:#00873c;border-color:#00873c;color:#fff}.el-tag--dark.is-hit{border-color:#00873c}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#fff;background-color:#339f63}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#fff;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#67c23a}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#fff;background-color:#85ce61}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#99cfb1;color:#00873c}.el-tag--plain.is-hit{border-color:#00873c}.el-tag--plain .el-tag__close{color:#00873c}.el-tag--plain .el-tag__close:hover{color:#fff;background-color:#00873c}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#c2e7b0;color:#67c23a}.el-tag--plain.el-tag--success.is-hit{border-color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-checkbox{color:#606266;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;margin-right:30px}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#00873c}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#00873c;border-color:#00873c}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#00873c}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#00873c}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#00873c;border-color:#00873c}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#fff;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;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 .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46);transition:border-color .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46)}.el-checkbox__inner:hover{border-color:#00873c}.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 .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button{position:relative;display:inline-block}.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 #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;-webkit-transition:all .3s cubic-bezier(.645, .045, .355, 1);transition:all .3s cubic-bezier(.645, .045, .355, 1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#00873c}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#00873c;border-color:#00873c;-webkit-box-shadow:-1px 0 0 0 #66b78a;box-shadow:-1px 0 0 0 #66b78a}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#00873c}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#00873c}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-radio{color:#606266;font-weight:500;line-height:1;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;outline:0;font-size:14px;margin-right:30px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#00873c}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#ebeef5}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__label{font-size:12px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio:last-child{margin-right:0}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed;cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#f5f7fa}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed}.el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#c0c4cc}.el-radio__input.is-disabled+span.el-radio__label{color:#c0c4cc;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#00873c;background:#00873c}.el-radio__input.is-checked .el-radio__inner::after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#00873c}.el-radio__input.is-focus .el-radio__inner{border-color:#00873c}.el-radio__inner{border:1px solid #dcdfe6;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}.el-radio__inner:hover{border-color:#00873c}.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 .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #00873c;box-shadow:0 0 2px 2px #00873c}.el-radio__label{font-size:14px;padding-left:10px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.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}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-cascader-panel{display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:4px;font-size:14px}.el-cascader-panel.is-bordered{border:solid 1px #e4e7ed;border-radius:4px}.el-cascader-menu{min-width:180px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;border-right:solid 1px #e4e7ed}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;color:#c0c4cc}.el-cascader-node{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.el-cascader-node.is-selectable.in-active-path{color:#606266}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#00873c;font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:#f5f7fa}.el-cascader-node.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-radio{margin-right:0}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader:not(.is-disabled):hover .el-input__inner{cursor:pointer;border-color:#c0c4cc}.el-cascader .el-input{cursor:pointer}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.el-cascader .el-input .el-input__inner:focus{border-color:#00873c}.el-cascader .el-input .el-icon-arrow-down{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:14px}.el-cascader .el-input .el-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-input .el-icon-circle-close:hover{color:#909399}.el-cascader .el-input.is-focus .el-input__inner{border-color:#00873c}.el-cascader--medium{font-size:14px;line-height:36px}.el-cascader--small{font-size:13px;line-height:32px}.el-cascader--mini{font-size:12px;line-height:28px}.el-cascader.is-disabled .el-cascader__label{z-index:2;color:#c0c4cc}.el-cascader__dropdown{margin:5px 0;font-size:14px;background:#fff;border:solid 1px #e4e7ed;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-cascader__tags{position:absolute;left:0;right:30px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:normal;text-align:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader__tags .el-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:#f0f2f5}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag>span{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{-webkit-box-flex:0;-ms-flex:none;flex:none;background-color:#c0c4cc;color:#fff}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:#909399}.el-cascader__suggestion-panel{border-radius:4px}.el-cascader__suggestion-list{max-height:204px;margin:0;padding:6px 0;font-size:14px;color:#606266;text-align:center}.el-cascader__suggestion-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;padding:0 15px;text-align:left;outline:0;cursor:pointer}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:#f5f7fa}.el-cascader__suggestion-item.is-checked{color:#00873c;font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{margin:10px 0;color:#c0c4cc}.el-cascader__search-input{-webkit-box-flex:1;-ms-flex:1;flex:1;height:24px;min-width:60px;margin:2px 0 2px 15px;padding:0;color:#606266;border:none;outline:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader__search-input::-webkit-input-placeholder{color:#c0c4cc}.el-cascader__search-input::-moz-placeholder{color:#c0c4cc}.el-cascader__search-input::-ms-input-placeholder{color:#c0c4cc}.el-cascader__search-input::placeholder{color:#c0c4cc}.el-color-predefine{display:-webkit-box;display:-ms-flexbox;display:flex;font-size:12px;margin-top:8px;width:280px}.el-color-predefine__colors{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{-webkit-box-shadow:0 0 3px 2px #00873c;box-shadow:0 0 3px 2px #00873c}.el-color-predefine__color-selector>div{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;border-radius:3px}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.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}.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%}.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,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.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%)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-svpanel{position:relative;width:280px;height:180px}.el-color-svpanel__black,.el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.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))}.el-color-svpanel__black{background:-webkit-gradient(linear,left bottom,left top,from(#000),to(rgba(0,0,0,0)));background:linear-gradient(to top,#000,rgba(0,0,0,0))}.el-color-svpanel__cursor{position:absolute}.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,.3),0 0 1px 2px rgba(0,0,0,.4);box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;-webkit-transform:translate(-2px,-2px);transform:translate(-2px,-2px)}.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==)}.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%}.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,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.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%)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper::after{content:"";display:table;clear:both}.el-color-dropdown__btns{margin-top:6px;text-align:right}.el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px}.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}.el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.el-color-dropdown__btn:hover{color:#00873c;border-color:#00873c}.el-color-dropdown__link-btn{cursor:pointer;color:#00873c;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(#00873c,20%)}.el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--medium{height:36px}.el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px}.el-color-picker--medium .el-color-picker__mask{height:34px;width:34px}.el-color-picker--small{height:32px}.el-color-picker--small .el-color-picker__trigger{height:32px;width:32px}.el-color-picker--small .el-color-picker__mask{height:30px;width:30px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker--mini{height:28px}.el-color-picker--mini .el-color-picker__trigger{height:28px;width:28px}.el-color-picker--mini .el-color-picker__mask{height:26px;width:26px}.el-color-picker--mini .el-color-picker__empty,.el-color-picker--mini .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.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,.7)}.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}.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}.el-color-picker__color.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-picker__color-inner{position:absolute;left:0;top:0;right:0;bottom:0}.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)}.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}.el-color-picker__panel{position:absolute;z-index:10;padding:6px;-webkit-box-sizing:content-box;box-sizing:content-box;background-color:#fff;border:1px solid #ebeef5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.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:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#00873c}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:0;border-color:#00873c}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:0;border-color:#00873c}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.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}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-color:#dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.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}.el-button+.el-button{margin-left:10px}.el-button.is-round{padding:12px 20px}.el-button:focus,.el-button:hover{color:#00873c;border-color:#b3dbc5;background-color:#e6f3ec}.el-button:active{color:#007a36;border-color:#007a36;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#fff;border-color:#00873c;color:#00873c}.el-button.is-plain:active{background:#fff;border-color:#007a36;color:#007a36;outline:0}.el-button.is-active{color:#007a36;border-color:#007a36}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#ebeef5;color:#c0c4cc}.el-button.is-loading{position:relative;pointer-events:none}.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,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#fff;background-color:#00873c;border-color:#00873c}.el-button--primary:focus,.el-button--primary:hover{background:#339f63;border-color:#339f63;color:#fff}.el-button--primary:active{background:#007a36;border-color:#007a36;color:#fff;outline:0}.el-button--primary.is-active{background:#007a36;border-color:#007a36;color:#fff}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#fff;background-color:#80c39e;border-color:#80c39e}.el-button--primary.is-plain{color:#00873c;background:#e6f3ec;border-color:#99cfb1}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#00873c;border-color:#00873c;color:#fff}.el-button--primary.is-plain:active{background:#007a36;border-color:#007a36;color:#fff;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#66b78a;background-color:#e6f3ec;border-color:#cce7d8}.el-button--success{color:#fff;background-color:#67c23a;border-color:#67c23a}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#fff}.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#fff;outline:0}.el-button--success.is-active{background:#5daf34;border-color:#5daf34;color:#fff}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#fff;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67c23a;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67c23a;border-color:#67c23a;color:#fff}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#fff;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#fff;background-color:#e6a23c;border-color:#e6a23c}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#fff}.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-active{background:#cf9236;border-color:#cf9236;color:#fff}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#fff;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#e6a23c;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#e6a23c;border-color:#e6a23c;color:#fff}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#fff}.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-active{background:#dd6161;border-color:#dd6161;color:#fff}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#fff;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#f56c6c;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#f56c6c;border-color:#f56c6c;color:#fff}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#fff;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#fff}.el-button--info:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-active{background:#82848a;border-color:#82848a;color:#fff}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#fff;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#fff}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small{padding:9px 15px;font-size:12px;border-radius:3px}.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini{padding:7px 15px;font-size:12px;border-radius:3px}.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{border-color:transparent;color:#00873c;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#339f63;border-color:transparent;background-color:transparent}.el-button--text:active{color:#007a36;border-color:transparent;background-color:transparent}.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover{border-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:""}.el-button-group::after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button:not(.is-disabled):active,.el-button-group>.el-button:not(.is-disabled):focus,.el-button-group>.el-button:not(.is-disabled):hover{z-index:1}.el-button-group>.el-button.is-active{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-checkbox{color:#606266;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;margin-right:30px}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#00873c}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#00873c;border-color:#00873c}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#00873c}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#00873c}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#00873c;border-color:#00873c}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#fff;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;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 .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46);transition:border-color .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46)}.el-checkbox__inner:hover{border-color:#00873c}.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 .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button{position:relative;display:inline-block}.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 #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;-webkit-transition:all .3s cubic-bezier(.645, .045, .355, 1);transition:all .3s cubic-bezier(.645, .045, .355, 1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#00873c}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#00873c;border-color:#00873c;-webkit-box-shadow:-1px 0 0 0 #66b78a;box-shadow:-1px 0 0 0 #66b78a}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#00873c}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#00873c}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-transfer{font-size:14px}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.el-transfer__button{display:block;margin:0 auto;padding:10px;border-radius:50%;color:#fff;background-color:#00873c;font-size:0}.el-transfer__button.is-with-texts{border-radius:4px}.el-transfer__button.is-disabled{border:1px solid #dcdfe6;background-color:#f5f7fa;color:#c0c4cc}.el-transfer__button.is-disabled:hover{border:1px solid #dcdfe6;background-color:#f5f7fa;color:#c0c4cc}.el-transfer__button:first-child{margin-bottom:10px}.el-transfer__button:nth-child(2){margin:0}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer__button [class*=el-icon-]+span{margin-left:0}.el-transfer-panel{border:1px solid #ebeef5;border-radius:4px;overflow:hidden;background:#fff;display:inline-block;vertical-align:middle;width:200px;max-height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:246px}.el-transfer-panel__body.is-with-footer{padding-bottom:40px}.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}.el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block!important}.el-transfer-panel__item+.el-transfer-panel__item{margin-left:0}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#00873c}.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}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;margin:15px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:auto}.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}.el-transfer-panel__filter .el-input__icon{margin-left:5px}.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#f5f7fa;margin:0;padding-left:15px;border-bottom:1px solid #ebeef5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#000}.el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#303133;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#909399;font-size:12px;font-weight:400}.el-transfer-panel .el-transfer-panel__footer{height:40px;background:#fff;margin:0;padding:0;border-top:1px solid #ebeef5;position:absolute;bottom:0;left:0;width:100%;z-index:1}.el-transfer-panel .el-transfer-panel__footer::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#606266}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#909399;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner::after{height:6px;width:3px;left:4px}.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;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-box-sizing:border-box;box-sizing:border-box;min-width:0}.el-container.is-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.el-header{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside{overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;padding:20px}.el-footer{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-timeline{margin:0;font-size:14px;list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline-item{position:relative;padding-bottom:20px}.el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid #e4e7ed}.el-timeline-item__icon{color:#fff;font-size:13px}.el-timeline-item__node{position:absolute;background-color:#e4e7ed;border-radius:50%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-timeline-item__node--normal{left:-1px;width:12px;height:12px}.el-timeline-item__node--large{left:-2px;width:14px;height:14px}.el-timeline-item__node--primary{background-color:#00873c}.el-timeline-item__node--success{background-color:#67c23a}.el-timeline-item__node--warning{background-color:#e6a23c}.el-timeline-item__node--danger{background-color:#f56c6c}.el-timeline-item__node--info{background-color:#909399}.el-timeline-item__dot{position:absolute;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-timeline-item__content{color:#303133}.el-timeline-item__timestamp{color:#909399;line-height:1;font-size:13px}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-link{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:0;cursor:pointer;padding:0;font-size:14px;font-weight:500}.el-link.is-underline:hover:after{content:"";position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid #00873c}.el-link.is-disabled{cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default{color:#606266}.el-link.el-link--default:hover{color:#00873c}.el-link.el-link--default:after{border-color:#00873c}.el-link.el-link--default.is-disabled{color:#c0c4cc}.el-link.el-link--primary{color:#00873c}.el-link.el-link--primary:hover{color:#339f63}.el-link.el-link--primary:after{border-color:#00873c}.el-link.el-link--primary.is-disabled{color:#80c39e}.el-link.el-link--primary.is-underline:hover:after{border-color:#00873c}.el-link.el-link--danger{color:#f56c6c}.el-link.el-link--danger:hover{color:#f78989}.el-link.el-link--danger:after{border-color:#f56c6c}.el-link.el-link--danger.is-disabled{color:#fab6b6}.el-link.el-link--danger.is-underline:hover:after{border-color:#f56c6c}.el-link.el-link--success{color:#67c23a}.el-link.el-link--success:hover{color:#85ce61}.el-link.el-link--success:after{border-color:#67c23a}.el-link.el-link--success.is-disabled{color:#b3e19d}.el-link.el-link--success.is-underline:hover:after{border-color:#67c23a}.el-link.el-link--warning{color:#e6a23c}.el-link.el-link--warning:hover{color:#ebb563}.el-link.el-link--warning:after{border-color:#e6a23c}.el-link.el-link--warning.is-disabled{color:#f3d19e}.el-link.el-link--warning.is-underline:hover:after{border-color:#e6a23c}.el-link.el-link--info{color:#909399}.el-link.el-link--info:hover{color:#a6a9ad}.el-link.el-link--info:after{border-color:#909399}.el-link.el-link--info.is-disabled{color:#c8c9cc}.el-link.el-link--info.is-underline:hover:after{border-color:#909399}.el-divider{background-color:#dcdfe6;position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative}.el-divider__text{position:absolute;background-color:#fff;padding:0 20px;font-weight:500;color:#303133;font-size:14px}.el-divider__text.is-left{left:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-divider__text.is-center{left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-image__error,.el-image__inner,.el-image__placeholder{width:100%;height:100%}.el-image{position:relative;display:inline-block;overflow:hidden}.el-image__inner{vertical-align:top}.el-image__inner--center{position:relative;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:block}.el-image__placeholder{background:#f5f7fa}.el-image__error{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;background:#f5f7fa;color:#c0c4cc;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.el-image-viewer__btn{position:absolute;z-index: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;border-radius:50%;opacity:.8;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-image-viewer__close{top:40px;right:40px;width:40px;height:40px;font-size:24px;color:#fff;background-color:#606266}.el-image-viewer__canvas{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image-viewer__actions{left:50%;bottom:30px;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:282px;height:44px;padding:0 23px;background-color:#606266;border-color:#fff;border-radius:22px}.el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.el-image-viewer__prev{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff;left:40px}.el-image-viewer__next{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff;right:40px;text-indent:2px}.el-image-viewer__mask{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.5;background:#000}.viewer-fade-enter-active{-webkit-animation:viewer-fade-in .3s;animation:viewer-fade-in .3s}.viewer-fade-leave-active{-webkit-animation:viewer-fade-out .3s;animation:viewer-fade-out .3s}@-webkit-keyframes viewer-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 viewer-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 viewer-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 viewer-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}}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-color:#dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.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}.el-button+.el-button{margin-left:10px}.el-button.is-round{padding:12px 20px}.el-button:focus,.el-button:hover{color:#00873c;border-color:#b3dbc5;background-color:#e6f3ec}.el-button:active{color:#007a36;border-color:#007a36;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#fff;border-color:#00873c;color:#00873c}.el-button.is-plain:active{background:#fff;border-color:#007a36;color:#007a36;outline:0}.el-button.is-active{color:#007a36;border-color:#007a36}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#ebeef5;color:#c0c4cc}.el-button.is-loading{position:relative;pointer-events:none}.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,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#fff;background-color:#00873c;border-color:#00873c}.el-button--primary:focus,.el-button--primary:hover{background:#339f63;border-color:#339f63;color:#fff}.el-button--primary:active{background:#007a36;border-color:#007a36;color:#fff;outline:0}.el-button--primary.is-active{background:#007a36;border-color:#007a36;color:#fff}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#fff;background-color:#80c39e;border-color:#80c39e}.el-button--primary.is-plain{color:#00873c;background:#e6f3ec;border-color:#99cfb1}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#00873c;border-color:#00873c;color:#fff}.el-button--primary.is-plain:active{background:#007a36;border-color:#007a36;color:#fff;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#66b78a;background-color:#e6f3ec;border-color:#cce7d8}.el-button--success{color:#fff;background-color:#67c23a;border-color:#67c23a}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#fff}.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#fff;outline:0}.el-button--success.is-active{background:#5daf34;border-color:#5daf34;color:#fff}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#fff;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67c23a;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67c23a;border-color:#67c23a;color:#fff}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#fff;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#fff;background-color:#e6a23c;border-color:#e6a23c}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#fff}.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-active{background:#cf9236;border-color:#cf9236;color:#fff}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#fff;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#e6a23c;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#e6a23c;border-color:#e6a23c;color:#fff}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#fff}.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-active{background:#dd6161;border-color:#dd6161;color:#fff}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#fff;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#f56c6c;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#f56c6c;border-color:#f56c6c;color:#fff}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#fff;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#fff}.el-button--info:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-active{background:#82848a;border-color:#82848a;color:#fff}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#fff;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#fff}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small{padding:9px 15px;font-size:12px;border-radius:3px}.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini{padding:7px 15px;font-size:12px;border-radius:3px}.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{border-color:transparent;color:#00873c;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#339f63;border-color:transparent;background-color:transparent}.el-button--text:active{color:#007a36;border-color:transparent;background-color:transparent}.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover{border-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:""}.el-button-group::after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button:not(.is-disabled):active,.el-button-group>.el-button:not(.is-disabled):focus,.el-button-group>.el-button:not(.is-disabled):hover{z-index:1}.el-button-group>.el-button.is-active{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-calendar{background-color:#fff}.el-calendar__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 20px;border-bottom:1px solid #ebeef5}.el-calendar__title{color:#000;-ms-flex-item-align:center;align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{padding:12px 0;color:#606266;font-weight:400}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:#c0c4cc}.el-calendar-table td{border-bottom:1px solid #ebeef5;border-right:1px solid #ebeef5;vertical-align:top;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}.el-calendar-table td.is-selected{background-color:#f2f8fe}.el-calendar-table td.is-today{color:#00873c}.el-calendar-table tr:first-child td{border-top:1px solid #ebeef5}.el-calendar-table tr td:first-child{border-left:1px solid #ebeef5}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{-webkit-box-sizing:border-box;box-sizing:border-box;padding:8px;height:85px}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:#f2f8fe}.el-backtop{position:fixed;background-color:#fff;width:40px;height:40px;border-radius:50%;color:#00873c;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;font-size:20px;-webkit-box-shadow:0 0 6px rgba(0,0,0,.12);box-shadow:0 0 6px rgba(0,0,0,.12);cursor:pointer;z-index:5}.el-backtop:hover{background-color:#f2f6fc}.el-page-header{display:-webkit-box;display:-ms-flexbox;display:flex;line-height:24px}.el-page-header__left{display:-webkit-box;display:-ms-flexbox;display:flex;cursor:pointer;margin-right:40px;position:relative}.el-page-header__left::after{content:"";position:absolute;width:1px;height:16px;right:-20px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:#dcdfe6}.el-page-header__left .el-icon-back{font-size:18px;margin-right:6px;-ms-flex-item-align:center;align-self:center}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{font-size:18px;color:#303133}.el-checkbox{color:#606266;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;margin-right:30px}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#00873c}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#00873c;border-color:#00873c}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#00873c}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#00873c}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#00873c;border-color:#00873c}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#fff;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;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 .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46);transition:border-color .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46)}.el-checkbox__inner:hover{border-color:#00873c}.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 .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button{position:relative;display:inline-block}.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 #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;-webkit-transition:all .3s cubic-bezier(.645, .045, .355, 1);transition:all .3s cubic-bezier(.645, .045, .355, 1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#00873c}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#00873c;border-color:#00873c;-webkit-box-shadow:-1px 0 0 0 #66b78a;box-shadow:-1px 0 0 0 #66b78a}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#00873c}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#00873c}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-radio{color:#606266;font-weight:500;line-height:1;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;outline:0;font-size:14px;margin-right:30px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#00873c}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#ebeef5}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__label{font-size:12px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio:last-child{margin-right:0}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed;cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#f5f7fa}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed}.el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#c0c4cc}.el-radio__input.is-disabled+span.el-radio__label{color:#c0c4cc;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#00873c;background:#00873c}.el-radio__input.is-checked .el-radio__inner::after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#00873c}.el-radio__input.is-focus .el-radio__inner{border-color:#00873c}.el-radio__inner{border:1px solid #dcdfe6;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}.el-radio__inner:hover{border-color:#00873c}.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 .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #00873c;box-shadow:0 0 2px 2px #00873c}.el-radio__label{font-size:14px;padding-left:10px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.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}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-cascader-panel{display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:4px;font-size:14px}.el-cascader-panel.is-bordered{border:solid 1px #e4e7ed;border-radius:4px}.el-cascader-menu{min-width:180px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;border-right:solid 1px #e4e7ed}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;color:#c0c4cc}.el-cascader-node{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.el-cascader-node.is-selectable.in-active-path{color:#606266}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#00873c;font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:#f5f7fa}.el-cascader-node.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-radio{margin-right:0}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-avatar{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden;color:#fff;background:#c0c4cc;width:40px;height:40px;line-height:40px;font-size:14px}.el-avatar>img{display:block;height:100%;vertical-align:middle}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:4px}.el-avatar--icon{font-size:18px}.el-avatar--large{width:40px;height:40px;line-height:40px}.el-avatar--medium{width:36px;height:36px;line-height:36px}.el-avatar--small{width:28px;height:28px;line-height:28px}@-webkit-keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@-webkit-keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@-webkit-keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@-webkit-keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}@keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}.el-drawer{position:absolute;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);overflow:hidden;outline:0}.el-drawer.rtl{-webkit-animation:rtl-drawer-out .3s;animation:rtl-drawer-out .3s}.el-drawer__open .el-drawer.rtl{-webkit-animation:rtl-drawer-in .3s 1ms;animation:rtl-drawer-in .3s 1ms}.el-drawer.ltr{-webkit-animation:ltr-drawer-out .3s;animation:ltr-drawer-out .3s}.el-drawer__open .el-drawer.ltr{-webkit-animation:ltr-drawer-in .3s 1ms;animation:ltr-drawer-in .3s 1ms}.el-drawer.ttb{-webkit-animation:ttb-drawer-out .3s;animation:ttb-drawer-out .3s}.el-drawer__open .el-drawer.ttb{-webkit-animation:ttb-drawer-in .3s 1ms;animation:ttb-drawer-in .3s 1ms}.el-drawer.btt{-webkit-animation:btt-drawer-out .3s;animation:btt-drawer-out .3s}.el-drawer__open .el-drawer.btt{-webkit-animation:btt-drawer-in .3s 1ms;animation:btt-drawer-in .3s 1ms}.el-drawer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0}.el-drawer__header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#72767b;display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:32px;padding:20px;padding-bottom:0}.el-drawer__header>:first-child{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-drawer__title{margin:0;-webkit-box-flex:1;-ms-flex:1;flex:1;line-height:inherit;font-size:1rem}.el-drawer__close-btn{border:none;cursor:pointer;font-size:20px;color:inherit;background-color:transparent}.el-drawer__body{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto}.el-drawer__body>*{-webkit-box-sizing:border-box;box-sizing:border-box}.el-drawer.ltr,.el-drawer.rtl{height:100%;top:0;bottom:0}.el-drawer.btt,.el-drawer.ttb{width:100%;left:0;right:0}.el-drawer.ltr{left:0}.el-drawer.rtl{right:0}.el-drawer.ttb{top:0}.el-drawer.btt{bottom:0}.el-drawer__container{position:relative;left:0;right:0;top:0;bottom:0;height:100%;width:100%}.el-drawer-fade-enter-active{-webkit-animation:el-drawer-fade-in .3s;animation:el-drawer-fade-in .3s}.el-drawer-fade-leave-active{animation:el-drawer-fade-in .3s reverse}.el-popconfirm__main{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{text-align:right;margin:0}.el-skeleton__item{background:#f2f2f2;display:inline-block;height:16px;border-radius:4px;width:100%}.el-skeleton__circle{border-radius:50%;width:36px;height:36px;line-height:36px}.el-skeleton__circle--lg{width:40px;height:40px;line-height:40px}.el-skeleton__circle--md{width:28px;height:28px;line-height:28px}.el-skeleton__button{height:40px;width:64px;border-radius:4px}.el-skeleton__p{width:100%}.el-skeleton__p.is-last{width:61%}.el-skeleton__p.is-first{width:33%}.el-skeleton__text{width:100%;height:13px}.el-skeleton__caption{height:12px}.el-skeleton__h1{height:20px}.el-skeleton__h3{height:18px}.el-skeleton__h5{height:16px}.el-skeleton__image{width:unset;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;border-radius:0}.el-skeleton__image svg{fill:#DCDDE0;width:22%;height:22%}@-webkit-keyframes el-skeleton-loading{0%{background-position:100% 50%}100%{background-position:0 50%}}@keyframes el-skeleton-loading{0%{background-position:100% 50%}100%{background-position:0 50%}}.el-skeleton{width:100%}.el-skeleton__first-line{height:16px;margin-top:16px;background:#f2f2f2}.el-skeleton__paragraph{height:16px;margin-top:16px;background:#f2f2f2}.el-skeleton.is-animated .el-skeleton__item{background:-webkit-gradient(linear,left top,right top,color-stop(25%,#f2f2f2),color-stop(37%,#e6e6e6),color-stop(63%,#f2f2f2));background:linear-gradient(90deg,#f2f2f2 25%,#e6e6e6 37%,#f2f2f2 63%);background-size:400% 100%;-webkit-animation:el-skeleton-loading 1.4s ease infinite;animation:el-skeleton-loading 1.4s ease infinite}.el-skeleton__item{background:#f2f2f2;display:inline-block;height:16px;border-radius:4px;width:100%}.el-skeleton__circle{border-radius:50%;width:36px;height:36px;line-height:36px}.el-skeleton__circle--lg{width:40px;height:40px;line-height:40px}.el-skeleton__circle--md{width:28px;height:28px;line-height:28px}.el-skeleton__button{height:40px;width:64px;border-radius:4px}.el-skeleton__p{width:100%}.el-skeleton__p.is-last{width:61%}.el-skeleton__p.is-first{width:33%}.el-skeleton__text{width:100%;height:13px}.el-skeleton__caption{height:12px}.el-skeleton__h1{height:20px}.el-skeleton__h3{height:18px}.el-skeleton__h5{height:16px}.el-skeleton__image{width:unset;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;border-radius:0}.el-skeleton__image svg{fill:#DCDDE0;width:22%;height:22%}.el-empty{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;padding:40px 0}.el-empty__image{width:160px}.el-empty__image img{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%;height:100%;vertical-align:top;-o-object-fit:contain;object-fit:contain}.el-empty__image svg{fill:#DCDDE0;width:100%;height:100%;vertical-align:top}.el-empty__description{margin-top:20px}.el-empty__description p{margin:0;font-size:14px;color:#909399}.el-empty__bottom{margin-top:20px}.el-descriptions-item{vertical-align:top}.el-descriptions-item__container{display:-webkit-box;display:-ms-flexbox;display:flex}.el-descriptions-item__container .el-descriptions-item__content,.el-descriptions-item__container .el-descriptions-item__label{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.el-descriptions-item__container .el-descriptions-item__content{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-descriptions-item__label.has-colon::after{content:':';position:relative;top:-.5px}.el-descriptions-item__label.is-bordered-label{font-weight:700;color:#909399;background:#fafafa}.el-descriptions-item__label:not(.is-bordered-label){margin-right:10px}.el-descriptions-item__content{word-break:break-word;overflow-wrap:break-word}.el-descriptions{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:14px;color:#303133}.el-descriptions__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:20px}.el-descriptions__title{font-size:16px;font-weight:700}.el-descriptions__body{color:#606266;background-color:#fff}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%;table-layout:fixed}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:left;font-weight:400;line-height:1.5}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-right{text-align:right}.el-descriptions .is-bordered{table-layout:auto}.el-descriptions .is-bordered .el-descriptions-item__cell{border:1px solid #ebeef5;padding:12px 10px}.el-descriptions :not(.is-bordered) .el-descriptions-item__cell{padding-bottom:12px}.el-descriptions--medium.is-bordered .el-descriptions-item__cell{padding:10px}.el-descriptions--medium:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:10px}.el-descriptions--small{font-size:12px}.el-descriptions--small.is-bordered .el-descriptions-item__cell{padding:8px 10px}.el-descriptions--small:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:8px}.el-descriptions--mini{font-size:12px}.el-descriptions--mini.is-bordered .el-descriptions-item__cell{padding:6px 10px}.el-descriptions--mini:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:6px}.el-descriptions-item{vertical-align:top}.el-descriptions-item__container{display:-webkit-box;display:-ms-flexbox;display:flex}.el-descriptions-item__container .el-descriptions-item__content,.el-descriptions-item__container .el-descriptions-item__label{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.el-descriptions-item__container .el-descriptions-item__content{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-descriptions-item__label.has-colon::after{content:':';position:relative;top:-.5px}.el-descriptions-item__label.is-bordered-label{font-weight:700;color:#909399;background:#fafafa}.el-descriptions-item__label:not(.is-bordered-label){margin-right:10px}.el-descriptions-item__content{word-break:break-word;overflow-wrap:break-word}.el-result{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;padding:40px 30px}.el-result__icon svg{width:64px;height:64px}.el-result__title{margin-top:20px}.el-result__title p{margin:0;font-size:20px;color:#303133;line-height:1.3}.el-result__subtitle{margin-top:10px}.el-result__subtitle p{margin:0;font-size:14px;color:#606266;line-height:1.3}.el-result__extra{margin-top:30px}.el-result .icon-success{fill:#67C23A}.el-result .icon-error{fill:#F56C6C}.el-result .icon-info{fill:#909399}.el-result .icon-warning{fill:#E6A23C}
src/components/bookInfo.vue
New file
@@ -0,0 +1,100 @@
<template>
  <div class="bookInfo">
    <div class="recommend">
      <div class="title">推荐理由</div>
      <div class="content">
        æœ¬ä¹¦å±žäºŽæ™®é€šé«˜ç­‰æ•™è‚²â€œåä¸€äº””*规划教材,主要针对高等农业院校动物医学和动物科学专业学生编写。内容注重基础知识,适度联系专业实际,并引入了生物化学的新进展。内容共分为15ç« ,包括五大部分:(1)生物分子的结构与功能,包括核酸、蛋白质、酶和生物膜;(2)物质代谢部分,包括糖类代谢、脂类代谢、氨基酸代谢、核苷酸代谢、能量代谢以及各途径的相互联系和整体调控;(3)遗传信息的传递与调控,包括复制、转录、翻译、基因表达调控;(4)动物体代谢的特点,包括动物体酸碱平衡与钙磷代谢、血液生化、肝脏生化、大脑生化;(5)现代生物技术及其在畜牧兽医中的应用。本书属于普通高等教育“十一五”*规划教材,主要针对高等农业院校动物医学和动物科学专业学生编写。内容注重基础知识,适度联系专业实际,并引入了生物化学的新进展。内容共分为15ç« ,包括五大部分:(1)生物分子的结构与功能,包括核酸、蛋白质、酶和生物膜;(2)物质代谢部分,包括糖类代谢、脂类代谢、氨基酸代谢、核苷酸代谢、能量代谢以及各途径的相互联系和整体调控;(3)遗传信息的传递与调控,包括复制、转录、翻译、基因表达调控;(4)动物体代谢的特点,包括动物体酸碱平衡与钙磷代谢、血液生化、肝脏生化、大脑生化;(5)现代生物技术及其在畜牧兽医中的应用。本书属于普通高等教育“十一五”*规划教材,主要针对高等农业院校动物医学和动物科学专业学生编写。内容注重基础知识,适度联系专业实际,并引入了生物化学的新进展。内容共分为15ç« ,包括五大部分:(1)生物分子的结构与功能,包括核酸、蛋白质、酶和生物膜;(2)物质代谢部分,包括糖类代谢、脂类代谢、氨基酸代谢、核苷酸代谢、能量代谢以及各途径的相互联系和整体调控;(3)遗传信息的传递与调控,包括复制、转录、翻译、基因表达调控;(4)动物体代谢的特点,包括动物体酸碱平衡与钙磷代谢、血液生化、肝脏生化、大脑生化;(5)现代生物技术及其在畜牧兽医中的应用。本书属于普通高等教育“十一五”*规划教材,主要针对高等农业院校动物医学和动物科学专业学生编写。内容注重基础知识,适度联系专业实际,并引入了生物化学的新进展。内容共分为15ç« ,包括五大部分:(1)生物分子的结构与功能,包括核酸、蛋白质、酶和生物膜;(2)物质代谢部分,包括糖类代谢、脂类代谢、氨基酸代谢、核苷酸代谢、能量代谢以及各途径的相互联系和整体调控;(3)遗传信息的传递与调控,包括复制、转录、翻译、基因表达调控;(4)动物体代谢的特点,包括动物体酸碱平衡与钙磷代谢、血液生化、肝脏生化、大脑生化;(5)现代生物技术及其在畜牧兽医中的应用。本书属于普通高等教育“十一五”*规划教材,主要针对高等农业院校动物医学和动物科学专业学生编写。内容注重基础知识,适度联系专业实际,并引入了生物化学的新进展。内容共分为15ç« ,包括五大部分:(1)生物分子的结构与功能,包括核酸、蛋白质、酶和生物膜;(2)物质代谢部分,包括糖类代谢、脂类代谢、氨基酸代谢、核苷酸代谢、能量代谢以及各途径的相互联系和整体调控;(3)遗传信息的传递与调控,包括复制、转录、翻译、基因表达调控;(4)动物体代谢的特点,包括动物体酸碱平衡与钙磷代谢、血液生化、肝脏生化、大脑生化;(5)现代生物技术及其在畜牧兽医中的应用。本书属于普通高等教育“十一五”*规划教材,主要针对高等农业院校动物医学和动物科学专业学生编写。内容注重基础知识,适度联系专业实际,并引入了生物化学的新进展。内容共分为15ç« ,包括五大部分:(1)生物分子的结构与功能,包括核酸、蛋白质、酶和生物膜;(2)物质代谢部分,包括糖类代谢、脂类代谢、氨基酸代谢、核苷酸代谢、能量代谢以及各途径的相互联系和整体调控;(3)遗传信息的传递与调控,包括复制、转录、翻译、基因表达调控;(4)动物体代谢的特点,包括动物体酸碱平衡与钙磷代谢、血液生化、肝脏生化、大脑生化;(5)现代生物技术及其在畜牧兽医中的应用。
      </div>
    </div>
    <div class="otherBox">
      <div class="itemBox" v-for="(item,index) in dataList" :key="index">
        <div class="itemTitle"><div class="titleName">{{item.title}}</div></div>
        <div class="itemContent">
          {{item.content}}
        </div>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      dataList: [
        {
          title: "作者服务",
          content:
            "本书属于普通高等教育“十一五”*规划教材,主要针对高等农业院校动物医学和动物科学专业学生编写。内容注重基础知识,适度联系专业实际,并引入了生物化学的新进展。内容共分为15ç« ,包括五大部分:(1)生物分子的结构与功能,包括核酸、蛋白质、酶和生物膜",
        },
        {
          title: "作者服务",
          content:
            "本书属于普通高等教育“十一五”*规划教材,主要针对高等农业院校动物医学和动物科学专业学生编写。内容注重基础知识,适度联系专业实际,并引入了生物化学的新进展。内容共分为15ç« ,包括五大部分:(1)生物分子的结构与功能,包括核酸、蛋白质、酶和生物膜",
        },
        {
          title: "作者服务",
          content:
            "本书属于普通高等教育“十一五”*规划教材,主要针对高等农业院校动物医学和动物科学专业学生编写。内容注重基础知识,适度联系专业实际,并引入了生物化学的新进展。内容共分为15ç« ,包括五大部分:(1)生物分子的结构与功能,包括核酸、蛋白质、酶和生物膜",
        },
        {
          title: "作者服务",
          content:
            "本书属于普通高等教育“十一五”*规划教材,主要针对高等农业院校动物医学和动物科学专业学生编写。内容注重基础知识,适度联系专业实际,并引入了生物化学的新进展。内容共分为15ç« ,包括五大部分:(1)生物分子的结构与功能,包括核酸、蛋白质、酶和生物膜",
        },
      ],
    };
  },
};
</script>
<style scoped>
.bookInfo {
  width: 813px;
  background-color: #fff;
  margin: 10px 0 0 10px;
  padding: 40px;
}
.recommend {
  max-height: 270px;
  background-color: #fbf5eb;
  overflow: auto;
  border-radius: 4px;
  border: 1px solid #ebd5b4;
}
.title {
  height: 20px;
  line-height: 20px;
  border-bottom: 1px dashed #d6d6d6;
  padding: 20px;
  color: #333333;
  font-size: 18px;
  font-weight: 700;
}
.content {
  max-height: 210px;
  line-height: 40px;
  margin-top: 20px;
}
.itemTitle {
  height: 20px;
  background: #f8f8f8;
  position: relative;
}
.titleName {
  font-size: 18px;
  font-weight: 700;
  position: absolute;
  top: -10px;
}
.otherBox {
  margin-top: 40px;
}
.itemContent {
  padding: 20px;
  line-height: 20px;
}
.itemBox{
    margin-top: 50px;
}
</style>
src/components/detail/bookInfo.vue
New file
@@ -0,0 +1,127 @@
<template>
  <div class="bookInfo">
    <div class="recommend" v-if="bookInfo.caupress_recommendationReason">
      <div class="title">推荐理由</div>
      <div
        class="content"
        v-html="bookInfo.caupress_recommendationReason"
      ></div>
    </div>
    <div class="otherBox">
      <div class="itemBox" v-for="(item, index) in dataList" :key="index">
        <div v-if="item.content != undefined && item.content.length > 0">
          <div class="itemTitle">
            <div class="titleName">{{ item.title }}</div>
          </div>
          <div
            class="itemContent"
            v-html="item.content"
            v-if="item.content != undefined"
          ></div>
          <el-empty description="暂无内容" v-else></el-empty>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      dataList: [
        {
          title: "作者简介",
          content: null,
        },
        {
          title: "简介",
          content: null,
        },
        {
          title: "前言",
          content: null,
        },
        {
          title: "目录",
          content: null,
        },
      ],
    };
  },
  props: {
    bookInfo: {
      type: Object,
      default: () => {},
    },
  },
  watch: {
    bookInfo() {
      this.dataList.forEach((item) => {
        if (item.title == "作者简介")
          item.content = this.bookInfo.caupress_authorAbout;
        if (item.title == "简介") item.content = this.bookInfo.caupress_content;
        if (item.title == "前言") item.content = this.bookInfo.caupress_preface;
        if (item.title == "目录") item.content = this.bookInfo.caupress_catalog;
      });
    },
  },
};
</script>
<style scoped>
.bookInfo {
  width: 813px;
  background-color: #fff;
  margin: 10px 0 0 10px;
  padding: 40px;
  box-sizing: border-box;
}
.recommend {
  max-height: 270px;
  background-color: #fbf5eb;
  overflow: auto;
  border-radius: 4px;
  border: 1px solid #ebd5b4;
}
.title {
  height: 20px;
  line-height: 20px;
  border-bottom: 1px dashed #d6d6d6;
  padding: 20px;
  color: #333333;
  font-size: 18px;
  font-weight: 700;
}
.content {
  max-height: 210px;
  line-height: 40px;
  margin-top: 20px;
  padding: 20px;
}
.itemTitle {
  height: 20px;
  position: relative;
  border-left: 3px solid #019E58;
  line-height: 20px;
  padding-left: 20px;
}
.titleName {
  font-size: 18px;
  font-weight: 700;
  position: absolute;
}
.otherBox {
  margin-top: 40px;
}
.itemContent {
  padding: 20px;
  line-height: 25px;
  max-height: 900px;
  overflow: auto;
}
.itemBox {
  margin-top: 50px;
}
</style>
src/components/detail/bookList.vue
New file
@@ -0,0 +1,190 @@
<template>
  <div class="relatedBox">
    <div class="headBox">
      <div class="titleBox">{{ title }}</div>
    </div>
    <div class="bookBox" v-if="dataList.length > 0">
      <div class="itemBox" v-for="(item, index) in dataList" :key="index">
        <div class="checkBox">
          <el-checkbox
            @change="selectBook(item)"
            v-model="item.checked"
            label
          ></el-checkbox>
        </div>
        <div class="imgBox">
          <img class="autoImg" :src="item.icon" alt="" />
        </div>
        <div class="rightBox">
          <div class="bookName">
            {{ item.name }}
          </div>
          <div class="authorBox">作者:{{ item.caupress_author }}</div>
          <div class="authorBox">
            å‡ºç‰ˆæ—¶é—´ï¼š{{
              item.caupress_publicationDate
                ? moment(item.caupress_publicationDate).format("YYYY-MM-DD")
                : "-"
            }}
          </div>
          <div class="authorBox">ISBN:{{ item.caupress_ISBN }}</div>
        </div>
        <div class="iconBox" @click="deleteItem(item, index)">
          <i class="iconfont icon-shanchu"></i>
        </div>
      </div>
    </div>
    <el-empty :image-size="100" description="暂无资源" v-else></el-empty>
  </div>
</template>
<script>
export default {
  data() {
    return {
      dataList: [],
      detailRoute: "bookStore-detail",
    };
  },
  created() {
    this.getData("caupress_teachingResource");
  },
  props: {
    title: {
      type: String,
    },
  },
  methods: {
    getData(channel) {
      if (this.$route.name == "teachingServices-applyBook-paper") {
        this.dataList = this.$store.state.paperCopiesList;
      } else {
        this.dataList = this.$store.state.electronicBookList;
      }
      this.dataList.forEach((item) => {
        this.$set(item,"checked",false)
        // item.checked  = false;
      });
      // this.dataList = res.datas;
      // this.$emit("getList", this.dataList);
    },
    selectBook(val) {
      this.$emit("getList", this.dataList);
    },
    toDetail(row) {
      this.$emit("reloadPage", row);
    },
    deleteItem(item, index) {
      this.$confirm("是否删除当前样书?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          if (this.$route.name == "teachingServices-applyBook-paper") {
            this.$store.commit("deletePbookList", index);
          } else {
            this.$store.commit("deleteEbookList", index);
          }
          this.$message({
            type: "success",
            message: "删除成功!",
          });
          if (this.dataList.length == 0) {
            this.$router.push("/teachingServices");
          }
        })
        .catch(() => {});
    },
  },
};
</script>
<style scoped>
.relatedBox {
  width: 100%;
  background-color: #fff;
  margin: 10px 0 0 0px;
  border-top: 1px solid #00873c;
  box-sizing: border-box;
}
.titleBox {
  height: 60px;
  background: #d8f7e6;
  line-height: 60px;
  padding: 0 40px;
  font-weight: 700;
  color: #00873c;
  font-size: 18px;
}
.bookBox {
  display: flex;
  flex-wrap: wrap;
  background-color: #fff;
  padding: 10px;
}
.imgBox {
  width: 100px;
  height: 150px;
  position: relative;
  border: 1px solid #eee;
}
.rightBox {
  flex: 1;
  overflow: hidden;
  margin-left: 10px;
}
.itemBox {
  flex: 1;
  overflow: hidden;
  display: flex;
  padding: 10px;
  position: relative;
  border: 1px solid #ccc;
  margin: 0 5px;
}
.bookName {
  font-size: 16px !important;
  line-height: 20px;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2; /* è¿™é‡Œæ˜¯è¶…出几行省略 */
  overflow: hidden;
}
.authorBox {
  margin-top: 20px;
  color: #666666;
  position: relative;
}
.iconBox {
  cursor: pointer;
  color: red;
  margin-left: 10px;
}
.toDetail {
  margin-top: 50px;
  color: #00873c;
}
.authorName {
  max-width: 86px;
  position: absolute;
  line-height: 20px;
  top: -4px;
  left: 44px;
}
.headBox {
  display: flex;
  background: #d8f7e6;
  justify-content: space-between;
}
.viewMore {
  cursor: pointer;
  padding: 20px;
  color: #999;
}
.checkBox {
  margin-right: 10px;
  line-height: 150px;
}
</style>
src/components/detail/detailInfo.vue
New file
@@ -0,0 +1,960 @@
<template>
  <div class="infoBox">
    <div class="contentBox">
      <div class="crumbs">
        <el-breadcrumb separator-class="el-icon-arrow-right">
          <el-breadcrumb-item :to="{ name: 'bookStore' }"
            >数字教材</el-breadcrumb-item
          >
          <el-breadcrumb-item>详情</el-breadcrumb-item>
        </el-breadcrumb>
      </div>
      <div class="infoTag" v-if="bookInfo.caupress_projectTitle">
        <el-tooltip
          class="item"
          effect="dark"
          :content="bookInfo.caupress_projectTitle"
          placement="top-start"
        >
          <div class="tagText">
            {{ bookInfo.caupress_projectTitle }}
          </div>
        </el-tooltip>
      </div>
      <div class="bookDetail">
        <div class="bookImg">
          <img class="autoImg" :src="bookInfo.icon" alt="" />
        </div>
        <span class="iconfont icon-tubiaozhizuo"></span>
        <div class="detailBox">
          <div class="bookTitle">
            <div class="bookName" :title="bookInfo.name">
              {{ bookInfo.name }}
            </div>
            <div class="bookTag" :title="bookInfo.caupress_seriesName">
              {{ bookInfo.caupress_seriesName }}
            </div>
            <div class="collectBox">
              <img
                @click="collectBook"
                v-if="bookInfo.isFavourite"
                class="buyIcon"
                src="@/assets/images/bookStore/shoucang.svg"
                style="margin-right: 10px"
              />
              <span
                @click="collectBook"
                v-else
                class="iconfont icon-shoucang"
                style="margin-right: 10px"
              >
              </span>
              <div
                class="collectText"
                @click="collectBook"
                v-if="bookInfo.isFavourite"
              >
                å·²æ”¶è—
              </div>
              <div class="collectText" @click="collectBook" v-else>收藏</div>
            </div>
          </div>
          <div class="authorBox">
            <div class="titleBox1">
              <div>作者:</div>
              <div>出版时间:</div>
            </div>
            <div class="valueBox">
              <div>
                {{ bookInfo.caupress_author ? bookInfo.caupress_author : "-" }}
              </div>
              <div>
                {{
                  bookInfo.caupress_publicationDate
                    ? moment(bookInfo.caupress_publicationDate).format(
                        "YYYY-MM-DD"
                      )
                    : "-"
                }}
              </div>
            </div>
            <div class="titleBox1" style="margin-left: 30px">
              <div>ISBN:</div>
              <div>版次:</div>
            </div>
            <div class="valueBox">
              <div>
                {{ bookInfo.caupress_ISBN ? bookInfo.caupress_ISBN : "-" }}
              </div>
              <div>
                {{
                  bookInfo.caupress_pubNumber
                    ? bookInfo.caupress_pubNumber
                    : "-"
                }}
              </div>
            </div>
          </div>
          <div class="authorBox" style="box-sizing: border-box">
            <div class="titleBox1">
              <div>一级分类:</div>
              <div>二级分类:</div>
            </div>
            <div class="valueBox">
              <div>全国高等职业教育预防医学专业规划教材</div>
              <div>二级分类:高等职业教育</div>
            </div>
          </div>
          <div class="purchaseBox">
            <div class="priceBox">
              <span v-if="bookInfo.price && bookInfo.price > 0">
                <span>定价:</span><span>ï¿¥</span>
                <span>{{ this.tool.toDecimal2(bookInfo.price) || "-" }}</span
                ><span v-if="bookInfo.VirtualPrice"
                  >原价:¥{{ bookInfo.VirtualPrice }}</span
                >
              </span>
              <span class="price" v-else>
                <span class="freePrice">免费</span>
              </span>
            </div>
            <div
              class="buyInfo"
              v-if="
                (currentRoute !== 'teachingServices' &&
                  bookInfo.caupress_paperBookDD) ||
                bookInfo.caupress_paperBookJD ||
                bookInfo.caupress_paperBookTmall
              "
            >
              çº¸è´¨ä¹¦å…¶ä»–购买渠道:
              <span @click="toJDLink" v-if="bookInfo.caupress_paperBookJD">
                <img
                  class="buyIcon"
                  src="@/assets/images/bookStore/京东icon-01.svg"
                />京东</span
              >
              <span @click="toDDLink" v-if="bookInfo.caupress_paperBookDD"
                ><img
                  class="buyIcon"
                  src="@/assets/images/bookStore/当当网.svg"
                />当当</span
              >
              <span @click="toTmLink" v-if="bookInfo.caupress_paperBookTmall"
                ><img
                  class="buyIcon"
                  src="@/assets/images/bookStore/tianmaologo2.svg"
                />天猫</span
              >
            </div>
          </div>
          <div class="btnBox">
            <el-button
              v-if="
                currentRoute !== 'teachingServices' &&
                !this.bookInfo.alreadyBuy &&
                this.bookInfo.caupress_isSell &&
                this.bookInfo.caupress_isSell == '1'
              "
              type="primary"
              :disabled="this.bookInfo.alreadyBuy"
              @click="gotoOrder"
              >电子书购买</el-button
            >
            <el-button
              v-if="bookInfo.caupress_pdfFreeFile && !this.bookInfo.alreadyBuy"
              type="primary"
              plain
              style="min-width: 98px"
              @click="previewBook"
              >试读</el-button
            >
            <el-button
              v-else-if="bookInfo.caupress_pdfFile && this.bookInfo.alreadyBuy"
              type="primary"
              plain
              style="min-width: 98px"
              @click="previewBook"
              >立即阅读</el-button
            >
            <el-button
              v-if="
                currentRoute == 'teachingServices' && !this.bookInfo.alreadyBuy
              "
              plain
              @click="addEbook"
              >电子样书</el-button
            >
            <el-button
              v-if="currentRoute == 'teachingServices'"
              plain
              @click="addPaperBook"
              >纸质样书</el-button
            >
          </div>
        </div>
      </div>
      <el-dialog
        title="联系编辑"
        :visible.sync="contactVisible"
        width="30%"
        :lock-scroll="false"
      >
        <div class="contactBox" v-if="this.bookInfo.caupress_editor">
          <div class="contacItem">
            <i class="iconfont icon-renwu-ren contacIcon"></i>
            {{ this.bookInfo.caupress_editor.name }}
          </div>
          <div class="contacItem">
            <i class="iconfont icon-QQ contacIcon"></i>
            {{ this.bookInfo.caupress_editor.qq }}
          </div>
          <div class="contacItem">
            <i class="iconfont icon-tongxunlu contacIcon"></i>
            {{ this.bookInfo.caupress_editor.phone }}
          </div>
          <div class="contacItem">
            <i class="iconfont icon-dianhua contacIcon"></i>
            {{ this.bookInfo.caupress_editor.telephone }}
          </div>
        </div>
        <el-empty
          v-else
          description="暂无数据"
          class="empty"
          :image-size="100"
        ></el-empty>
      </el-dialog>
      <el-dialog
        title="信息反馈"
        :visible.sync="dialogVisible"
        width="50%"
        :lock-scroll="false"
      >
        <div class="infoDialog">
          <el-input
            type="textarea"
            :rows="8"
            placeholder="详细描述您所遇到的问题,有助于快速给您反馈!"
            v-model="textarea"
          >
          </el-input>
          <div class="subBtn">
            <el-button type="primary" @click="sendDiscuss">提交</el-button>
          </div>
          <div class="infoList">
            <div
              class="infoItem"
              v-for="(item, index) in commentList"
              :key="index"
            >
              <div class="infoImg">
                <img v-if="item.icon" class="autoImg" :src="item.icon" alt="" />
                <i v-else class="el-icon-user-solid"></i>
              </div>
              <div class="infoContent">
                <div class="infoTitle">
                  <div class="userNameBox">{{ item.content.name }}</div>
                  <div class="userNameBox">
                    {{ moment(item.createDate).format("YYYY-MM-DD") }}
                  </div>
                </div>
                <div class="infoText">
                  {{ item.content.content }}
                </div>
              </div>
            </div>
          </div>
        </div>
      </el-dialog>
    </div>
  </div>
</template>
<script>
import { mapState } from "vuex";
export default {
  data() {
    return {
      tagText: "普通高等教育十一五规划教材,全国高等教育旅游规划教材",
      price: 29,
      dialogVisible: false,
      contactVisible: false,
      textarea: "",
      // bookInfo: {},
      currentRoute: this.$route,
      discussAreaId: "", //评论ID
      commentList: [],
      editor: {
        qq: "",
        telephone: "",
        mobilePhone: "",
        name: "",
      },
      paginationData: {
        page: 1,
        limit: 10,
        totalCount: 0,
        totalPage: 0,
      },
      commentText: "",
      requestedEBookList: [], // å·²ç”³è¯·çš„电子书
      requestedPBookList: [], // å·²ç”³è¯·çš„纸质书
      ebookTotalCount: 0,
      pbookTotalCount: 0,
    };
  },
  props: {
    bookInfo: {
      type: Object,
      default: () => {},
    },
  },
  created() {
    console.log(this.userInfo, "userInfo");
    this.currentRoute = this.currentRoute.fullPath.split("/")[1];
    this.getCommentTopic();
    this.getRequestedEBookList();
    this.getRequestedPBookList();
    let roleId = this.userInfo ? this.userInfo.roleId : null;
    if (roleId) {
      this.getEbookTicketRes();
      this.getPbookTicketRes();
    }
  },
  computed: {
    ...mapState(["userInfo"]),
  },
  mounted() {},
  methods: {
    //获取电子书剩余申请次数
    getEbookTicketRes() {
      this.MG.app
        .getTicketResult({
          ticketRefCodeOrGuid: "electronicSampleBookapplyNum",
          roleId: this.userInfo.roleId,
        })
        .then((res) => {
          this.ebookTotalCount = res.totalCount - res.usedCount;
        });
    },
    //获取纸质剩余申请次数
    getPbookTicketRes() {
      this.MG.app
        .getTicketResult({
          ticketRefCodeOrGuid: "paperSampleBookapplyNum",
          roleId: this.userInfo.roleId,
        })
        .then((res) => {
          this.pbookTotalCount = res.totalCount - res.usedCount;
        });
    },
    //跳转至京东链接
    toJDLink() {
      window.open(this.bookInfo.caupress_paperBookJD);
    },
    //跳转至当当链接
    toDDLink() {
      window.open(this.bookInfo.caupress_paperBookDD);
    },
    toTmLink() {
      window.open(this.bookInfo.caupress_paperBookTmall);
    },
    //获取评论ID
    getCommentTopic() {
      this.MG.ugc
        .getProductCommentTopic({
          productId: this.$route.query.id,
          appRefCode: this.config.appRefCode,
        })
        .then((res) => {
          this.discussAreaId = res.id;
          this.sysType = res.sysType;
          this.getCommentList();
        });
    },
    //获取评论列表
    getCommentList() {
      this.MG.ugc
        .getTopicMessageList({
          sort: {
            type: "Desc",
            field: "CreateDate",
          },
          size: this.paginationData.limit,
          start: (this.paginationData.page - 1) * this.paginationData.limit,
          appRefCode: this.config.appRefCode,
          topicIdOrRefCode: JSON.stringify(this.discussAreaId),
        })
        .then((res) => {
          this.commentList = res.datas;
          this.commentList.forEach((item) => {
            if (item.content) {
              item.content = JSON.parse(item.content);
            }
          });
          console.log(this.commentList, "this.commentList");
        });
    },
    //发表评论
    sendDiscuss() {
      if (this.textarea == "") {
        this.$message({
          showClose: true,
          message: "评论不能为空",
          type: "error",
        });
      } else {
        let content = {
          content: this.textarea,
          name: this.userInfo.name,
        };
        const data = {
          topicIdOrRefCode: JSON.stringify(this.discussAreaId),
          name: this.bookInfo.name,
          icon: this.userInfo.icon,
          content: JSON.stringify(content),
          type: "ProductComment",
          cmsTypeRefCode: "",
          newDataListRequest: [],
        };
        this.MG.ugc.newTopicMessage(data).then((res) => {
          this.$message({
            showClose: true,
            message: "评论成功",
            type: "success",
          });
          this.textarea = "";
          this.getCommentList();
        });
      }
    },
    relation() {
      this.contactVisible = true;
    },
    setInfo() {
      if (this.userInfo == null) {
        this.$router.push({
          path: "/login",
          query: {
            redirectPath: this.$route.fullPath,
          },
        });
        return;
      }
      this.dialogVisible = true;
    },
    //加入纸质样书
    addPaperBook() {
      if (!this.$store.state.token) {
        this.$router.push({
          path: "/login",
          query: {
            redirectPath: this.$route.fullPath,
          },
        });
      } else {
        if (this.$store.state.userInfo.role !== "Teacher") {
          this.$message({
            showClose: true,
            message: "请先进行教师认证",
            type: "warning",
          });
          return;
        } else {
          if (this.pbookTotalCount == 0) {
            this.$message({
              showClose: true,
              message: "纸质书申请次数不足!",
              type: "warning",
            });
            return;
          }
          let isHave = this.requestedPBookList.find(
            (e) => e.state == "WaitAudit" && e.id == this.bookInfo.id
          );
          if (isHave) {
            this.$message.warning("您已申请该样书,等待审核中!");
            return false;
          }
          if (this.$store.state.paperCopiesList.length >= 3) {
            this.$message.warning("添加书籍不能超过三本");
            return;
          }
          if (this.$store.state.paperCopiesList.length > 0) {
            let currentBook = this.$store.state.paperCopiesList.filter(
              (item) => item.id == this.bookInfo.id
            );
            if (currentBook.length > 0) {
              this.$message.warning("请勿重复添加书籍");
              return;
            } else {
              this.$store.commit("addPbookList", this.bookInfo);
              this.$message.success("添加成功!");
            }
          } else {
            this.$store.commit("addPbookList", this.bookInfo);
            this.$message.success("添加成功!");
          }
        }
      }
    },
    // èŽ·å–å·²ç”³è¯·çš„ç”µå­ä¹¦
    getRequestedEBookList() {
      const data = {
        start: 0,
        size: 99999999,
        appRefCode: this.config.appRefCode,
        topicIdOrRefCode: this.config.refCodes.applyBook,
      };
      this.MG.ugc.getTopicMessageList(data).then((res) => {
        try {
          if (res && res.datas.length > 0) {
            let list = [];
            for (let i = 0; i < res.datas.length; i++) {
              const ele = res.datas[i];
              if (ele.content) {
                ele.content = JSON.parse(ele.content);
                ele.content.map((item) => (item.state = ele.state));
              }
              if (ele.feedBack) {
                ele.isRead = false;
                ele.feedBack = JSON.parse(ele.feedBack);
                const readDate = new Date(
                  ele.feedBack.endDate + " 23:59:59"
                ).getTime();
                const currentDate = Number(sessionStorage.currentDate);
                if (readDate > currentDate) {
                  ele.isRead = true;
                }
              }
              list.push(...ele.content);
            }
            this.requestedEBookList = list;
          }
        } catch (error) {
          this.requestedEBookList = [];
        }
      });
    },
    // èŽ·å–å·²ç”³è¯·çš„çº¸è´¨ä¹¦
    getRequestedPBookList() {
      const data = {
        start: 0,
        size: 99999999,
        appRefCode: this.config.appRefCode,
        topicIdOrRefCode: this.config.refCodes.applyEntityBook,
      };
      this.MG.ugc.getTopicMessageList(data).then((res) => {
        try {
          if (res && res.datas.length > 0) {
            let list = [];
            for (let i = 0; i < res.datas.length; i++) {
              const ele = res.datas[i];
              if (ele.content) {
                ele.content = JSON.parse(ele.content);
                ele.content.map((item) => (item.state = ele.state));
              }
              list.push(...ele.content);
            }
            this.requestedPBookList = list;
          }
        } catch (error) {
          this.requestedPBookList = [];
        }
      });
    },
    //加入电子样书
    addEbook() {
      if (!this.$store.state.token) {
        this.$router.push({
          path: "/login",
          query: {
            redirectPath: this.$route.fullPath,
          },
        });
      } else {
        console.log(this.ebookTotalCount, "this.ebookTotalCount");
        console.log(this.pbookTotalCount, "this.pookTotalCount");
        if (this.$store.state.userInfo.role !== "Teacher") {
          this.$message({
            showClose: true,
            message: "请先进行教师认证",
            type: "warning",
          });
          return;
        }
        if (this.ebookTotalCount == 0) {
          this.$message({
            showClose: true,
            message: "电子书申请次数不足!",
            type: "warning",
          });
          return;
        } else {
          if (this.bookInfo.alreadyBuy) {
            this.$message.warning("本书已在有效期内,请勿重复申请");
            return;
          }
          let isHave = this.requestedEBookList.find(
            (e) => e.state == "WaitAudit" && e.id == this.bookInfo.id
          );
          if (isHave) {
            this.$message.warning("您已申请该样书,等待审核中!");
            return false;
          }
          if (this.$store.state.electronicBookList.length >= 3) {
            this.$message.warning("添加书籍不能超过三本");
            return;
          }
          if (this.$store.state.electronicBookList.length > 0) {
            let currentBook = this.$store.state.electronicBookList.filter(
              (item) => item.id == this.bookInfo.id
            );
            if (currentBook.length > 0) {
              this.$message.warning("请勿重复添加书籍");
              return;
            } else {
              this.$store.commit("addEbookList", this.bookInfo);
              this.$message.success("添加成功!");
            }
          } else {
            this.$store.commit("addEbookList", this.bookInfo);
            this.$message.success("添加成功!");
          }
        }
      }
    },
    gotoOrder() {
      if (this.$store.state.token) {
        let saleMethod = this.bookInfo.saleMethod.find(
          (item) => item.Type == "defaultSaleMethod"
        );
        if (saleMethod) {
          console.log(saleMethod, "saleMethod");
          this.MG.store
            .initOrder({
              requests: [
                {
                  saleMethodId: saleMethod.Id,
                  count: 1,
                },
              ],
            })
            .then((res) => {
              console.log(res, "res");
              if (res.orderNumber) {
                this.$router.push({
                  name: "bookStore-order",
                  query: {
                    orderNum: res.orderNumber,
                  },
                });
              } else {
                this.$message.warning("当前书籍销售方式过期,请联系管理员!");
              }
            });
        } else {
          this.$message({
            message: "未获取到可售卖的规格,请联系管理员!",
            type: "error",
          });
        }
      } else {
        this.$router.push({
          path: "/login",
          query: {
            redirectPath: this.$route.fullPath,
          },
        });
      }
    },
    collectBook() {
      if (this.tool.getCookie(this.config.tokenKey)) {
        if (this.bookInfo.isFavourite) {
          this.MG.store
            .delProductLink({
              productIds: [this.$route.query.id],
              linkType: "Favorite",
            })
            .then((res) => {
              this.$parent.getData();
            });
        } else {
          let params = {
            productIds: [this.$route.query.id],
            linkType: "Favorite",
          };
          if (this.$route.path == "/bookStore/detail") {
            params.LinkTag = "bookStore";
          } else {
            params.LinkTag = "teachingServices";
          }
          this.MG.store.productLink(params).then((res) => {
            this.$parent.getData();
          });
        }
      } else {
        this.$router.push({
          path: "/login",
          query: {
            redirectPath: this.$route.fullPath,
          },
        });
      }
    },
    previewBook() {
      let routeUrl = this.$router.resolve({
        name: "preview-pdf",
        query: {
          md5: this.bookInfo.alreadyBuy
            ? this.bookInfo.caupress_pdfFile
            : this.bookInfo.caupress_pdfFreeFile,
          titleName: this.bookInfo.name,
          productLinkPath: this.bookInfo.productLinkPath,
        },
      });
      window.open(routeUrl.href, "_blank");
    },
  },
};
</script>
<style scoped>
.infoBox {
  width: 100%;
  height: 530px;
  padding-top: 10px;
  background-color: #fff;
  background-image: url("@/assets/images/xiehe/detail/details_bg.png");
}
.infoTag {
  position: relative;
  width: 0px;
  height: 0px;
  border-right: 20px solid #fff;
  border-left: 503px solid #e50021;
  border-top: 19px solid #e50021;
  border-bottom: 19px solid #e50021;
}
.tagText {
  position: absolute;
  left: -480px;
  top: -9.5px;
  max-width: 480px;
  text-overflow: ellipsis;
  color: #fff;
  font-size: 18px;
  overflow: hidden;
  white-space: nowrap;
}
.bookDetail {
  display: flex;
  overflow: hidden;
  margin-top: 30px;
}
.bookImg {
  position: relative;
  width: 338px;
  height: 400px;
  box-shadow: 2px 2px 10px #f2f2f2;
}
.detailBox {
  flex: 1;
  height: 450px;
  position: relative;
  margin-top: 20px;
  overflow: hidden;
}
.collectBox {
  position: absolute;
  right: 80px;
  font-size: 14px;
  color: #999999;
  cursor: pointer;
}
.collectBox span:nth-child(1) {
  margin-right: 10px;
  font-size: 16px;
}
.collectBox span:nth-child(2) {
  margin-left: 10px;
  margin-right: 10px;
  font-size: 16px;
}
.iconfont {
  font-size: 25px !important;
  vertical-align: middle;
}
.bookTitle {
  width: 100%;
  height: 40px;
  line-height: 40px;
  padding-left: 100px;
  display: flex;
  padding-right: 240px;
  box-sizing: border-box;
}
.collectText {
  font-size: 16px;
  line-height: 25px;
  display: inline-block;
}
.bookName {
  flex: 1;
  font-size: 26px;
  color: #333;
  text-overflow: ellipsis;
  white-space: nowrap;
  overflow: hidden;
}
.bookTag {
  max-width: 200px;
  font-size: 16px;
  color: #333;
  line-height: 36px;
  margin-left: 15px;
  text-overflow: ellipsis;
  white-space: nowrap;
  overflow: hidden;
}
.authorBox {
  width: 80%;
  display: flex;
  padding: 20px;
  padding-left: 100px;
  position: relative;
}
.valueBox {
  margin-left: 20px;
}
.valueBox div {
  height: 30px;
}
.titleBox1 div {
  height: 30px;
}
.relationBox {
  position: absolute;
  right: 50px;
  color: #999;
  cursor: pointer;
  font-size: 14px;
}
.purchaseBox {
  margin-left: 100px;
  padding-top: 20px;
}
.priceBox {
  border-bottom: 1px dashed #ececec;
  background-color: #B2D9C8;
  height: 50px;
  line-height: 50px;
  padding-left: 20px;
}
.priceBox span:nth-child(1) {
  color: #000;
  font-weight: 700;
  font-size: 16px;
  padding-right: 20px;
}
.priceBox span:nth-child(2) {
  color: #e50021;
  font-size: 16px;
}
.priceBox span:nth-child(3) {
  color: #e50021;
  font-size: 22px;
  font-weight: 700;
  padding-right: 20px;
}
.priceBox span:nth-child(4) {
  color: #333;
  font-size: 16px;
  padding-right: 20px;
  text-decoration: line-through;
}
.buyInfo {
  padding: 20px 0px;
  border-bottom: 1px dashed #ececec;
  cursor: pointer;
}
.buyInfo img {
  margin-left: 10px;
}
.btnBox {
  margin-left: 100px;
  margin-top: 30px;
}
.infoItem {
  display: flex;
  margin-top: 40px;
}
.infoImg {
  width: 50px;
  height: 50px;
  border-radius: 50%;
  border: 1px solid #ccc;
  background: #efefef;
  text-align: center;
  line-height: 60px;
  position: relative;
}
.infoImg i {
  font-size: 28px;
}
.infoList {
  margin-top: 20px;
  overflow: auto;
}
.infoContent {
  flex: 1;
  overflow: hidden;
  padding: 0 20px 0 10px;
}
.infoDialog {
  padding: 20px;
}
.infoTitle {
  width: 100%;
  display: flex;
  justify-content: space-between;
}
.infoText {
  margin-top: 24px;
  line-height: 20px;
}
.contactBox {
  padding: 0px 40px;
}
.contacItem {
  margin-top: 20px;
}
.contacIcon {
  padding-right: 20px;
}
.subBtn {
  margin-top: 20px;
  text-align: right;
}
.buyIcon {
  width: 24px;
  height: 24px;
  vertical-align: middle;
}
.crumbs {
  margin-top: 10px;
  border-bottom: 1px solid rgba(20, 73, 65, 0.26);
  padding-bottom: 20px;
}
</style>
src/components/detail/electronicBooks.vue
New file
@@ -0,0 +1,166 @@
<template>
  <div class="relatedBox">
    <div class="headBox">
      <div class="titleBox">电子样书</div>
      <div class="inventory" @click="createList">
        <i class="iconfont icon-tongxunlu"></i> ç”Ÿæˆæ¸…单
      </div>
    </div>
    <div class="bookBox" v-if="$store.state.electronicBookList.length > 0">
      <div
        class="itemBox"
        v-for="(item, index) in $store.state.electronicBookList"
        :key="index"
      >
        <div class="imgBox">
          <img class="autoImg" :src="item.icon" alt="" />
        </div>
        <div class="rightBox">
          <div class="bookName">
            {{ item.name }}
          </div>
          <div class="authorBox1">
            ä½œè€…:
            <div class="authorName">{{ item.caupress_author }}</div>
          </div>
          <div class="iconBox" @click="deleteItem(item, index)">
            <i class="iconfont icon-shanchu"></i>
          </div>
        </div>
      </div>
    </div>
    <div class="emptyBox" v-else>
      <el-empty :image-size="100" description="暂无书籍"></el-empty>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {};
  },
  methods: {
    deleteItem(item, index) {
      this.$confirm("是否删除当前样书?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          this.$store.commit("deleteEbookList", index);
          this.$message({
            type: "success",
            message: "删除成功!",
          });
        })
        .catch(() => {});
    },
    createList() {
      if (this.$store.state.userInfo.role !== "Teacher") {
        this.$message({
          showClose: true,
          message: "请先进行教师认证",
          type: "warning",
        });
        return;
      }
      if (this.$store.state.electronicBookList.length == 0) {
        this.$message.error("请添加电子样书后生成清单!");
        return;
      } else {
        this.$router.push("applyBook-electronic");
      }
    },
  },
};
</script>
<style scoped>
.relatedBox {
  width: 377px;
  margin-top: 10px;
  border-top: 1px solid #00873c;
}
.titleBox {
  height: 60px;
  background: #d8f7e6;
  line-height: 60px;
  padding: 0 40px;
  font-weight: 700;
  color: #00873c;
  font-size: 18px;
}
.bookBox {
  background-color: #fff;
  padding: 10px;
}
.imgBox {
  width: 100px;
  height: 150px;
  position: relative;
  padding: 10px;
  border: 1px solid #ccc;
}
.rightBox {
  flex: 1;
  overflow: hidden;
  position: relative;
  margin-left: 10px;
}
.itemBox {
  display: flex;
  border-bottom: 1px solid #eeeeee;
  padding: 10px;
}
.bookName {
  font-size: 16px !important;
  line-height: 20px;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2; /* è¿™é‡Œæ˜¯è¶…出几行省略 */
  overflow: hidden;
}
.authorBox1 {
  margin-top: 10px;
  color: #666666;
  position: relative;
}
.toDetail {
  margin-top: 50px;
  color: #00873c;
}
.authorName {
  position: absolute;
  line-height: 20px;
  top: -4px;
  left: 44px;
}
.headBox {
  display: flex;
  justify-content: space-between;
  background: #d8f7e6;
}
.inventory {
  cursor: pointer;
  padding: 20px;
  color: #999;
}
.iconBox {
  position: absolute;
  bottom: 20px;
  right: 20px;
  display: none;
  cursor: pointer;
  color: red;
}
.itemBox:hover .iconBox {
  display: block;
}
.emptyBox {
  background-color: #fff;
}
</style>
src/components/detail/history.vue
New file
@@ -0,0 +1,136 @@
<template>
  <div class="historyBox">
    <div class="titleBox">浏览历史</div>
    <div class="iconBox" @click="deleteAll">
      <i class="iconfont icon-shanchu"></i>
    </div>
    <div class="itemBox">
      <div
        class="historyItem"
        v-for="(item, index) in this.$store.state.historyBook"
        :key="index"
        @click="toDetail(item)"
      >
        <div class="nameBox"> {{ item.name }}</div>
        <div class="deleteIcon" @click="deleteHistory(index)">×</div>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  name: "history",
  data() {
    return {
      dataList: [],
    };
  },
  methods: {
    //去详情
    toDetail(row) {
      this.$router.replace({
        name: "bookStore-detail",
        query: { id: row.id, cmsPath: row.rootCmsItemId },
      });
      this.$emit("reloadPage", row);
    },
    deleteHistory(index) {
      this.$confirm("是否删除当前浏览记录?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          this.$store.commit("deleteHistoryBook", index);
          this.$message({
            type: "success",
            message: "删除成功!",
          });
        })
        .catch(() => {});
    },
    deleteAll() {
      this.$confirm("是否删除当前浏览记录?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          this.$store.commit("deleteAllHistory");
          this.$message({
            type: "success",
            message: "删除成功!",
          });
        })
        .catch(() => {});
    },
  },
  created() {
    // this.dataList = this.$store.state.historyBook;
  },
};
</script>
<style scoped>
.historyBox {
  position: relative;
  width: 377px;
  margin-top: 10px;
  border-top: 1px solid #00873c;
}
.titleBox {
  height: 60px;
  background: #d8f7e6;
  line-height: 60px;
  padding: 0 40px;
  font-weight: 700;
  color: #00873c;
  font-size: 18px;
}
.itemBox {
  padding: 0 40px;
  background-color: #fff;
  max-height: 1000px;
  overflow-y: auto;
}
.historyItem {
  height: 50px;
  line-height: 50px;
  width: 100%;
  background-color: #fff;
  border-bottom: 1px solid #eeeeee;
  color: #333333;
  position: relative;
}
.historyItem .nameBox {
  width: 80%;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}
.deleteIcon {
  position: absolute;
  right: 10px;
  top: 0px;
  display: none;
}
.historyItem:hover div {
  display: block;
  color: #00873c;
  cursor: pointer;
}
.historyItem:hover {
  color: #00873c;
}
.iconBox {
  position: absolute;
  top: 20px;
  right: 20px;
  cursor: pointer;
  color: red;
}
</style>
src/components/detail/paperCopies.vue
New file
@@ -0,0 +1,198 @@
<template>
  <div class="relatedBox">
    <div class="headBox">
      <div class="titleBox">纸质样书</div>
      <div class="inventory" @click="createList">
        <i class="iconfont icon-tongxunlu"></i> ç”Ÿæˆæ¸…单
      </div>
    </div>
    <div class="bookBox" v-if="$store.state.paperCopiesList.length > 0">
      <div
        class="itemBox"
        v-for="(item, index) in $store.state.paperCopiesList"
        :key="index"
      >
        <div class="imgBox">
          <img class="autoImg" :src="item.icon" alt="" />
        </div>
        <div class="rightBox">
          <div class="bookName">
            {{ item.name }}
          </div>
          <div class="authorBox1">
            ä½œè€…:
            <div class="authorName">{{ item.caupress_author }}</div>
          </div>
          <div class="iconBox">
            <i
              class="iconfont icon-shanchu"
              @click="deleteItem(item, index)"
            ></i>
          </div>
        </div>
      </div>
    </div>
    <div class="emptyBox" v-else>
      <el-empty :image-size="100" description="暂无书籍"></el-empty>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      dataList: [
        {
          img: "@/assets/images/bookStore/testImg.png",
          title: "柠条灌丛草地水分 åŠ¨æ€åŠç¾¤è½ç‰¹å¾ç ”ç©¶",
          author: "徐荣/李生宝 ä½™å³°/蒋齐著",
        },
        {
          img: "@/assets/images/bookStore/testImg.png",
          title: "柠条灌丛草地水分 åŠ¨æ€åŠç¾¤è½ç‰¹å¾ç ”ç©¶",
          author: "徐荣/李生宝 ä½™å³°/蒋齐著",
        },
        {
          img: "@/assets/images/bookStore/testImg.png",
          title: "柠条灌丛草地水分 åŠ¨æ€åŠç¾¤è½ç‰¹å¾ç ”ç©¶",
          author: "徐荣/李生宝 ä½™å³°/蒋齐著",
        },
        {
          img: "@/assets/images/bookStore/testImg.png",
          title: "柠条灌丛草地水分 åŠ¨æ€åŠç¾¤è½ç‰¹å¾ç ”ç©¶",
          author: "徐荣/李生宝 ä½™å³°/蒋齐著",
        },
        {
          img: "@/assets/images/bookStore/testImg.png",
          title: "柠条灌丛草地水分 åŠ¨æ€åŠç¾¤è½ç‰¹å¾ç ”ç©¶",
          author: "徐荣/李生宝 ä½™å³°/蒋齐著",
        },
      ],
    };
  },
  created() {
  },
  methods: {
    deleteItem(item, index) {
      this.$confirm("是否删除当前样书?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          this.$store.commit("deletePbookList", index);
          this.$message({
            type: "success",
            message: "删除成功!",
          });
        })
        .catch(() => {});
    },
    createList() {
      if (this.$store.state.userInfo.role !== "Teacher") {
        this.$message({
          showClose: true,
          message: "请先进行教师认证",
          type: "warning",
        });
        return;
      }
      if (this.$store.state.paperCopiesList.length == 0) {
        this.$message.error("请添加纸质样书后生成清单!");
        return;
      } else {
        this.$router.push("applyBook-paper");
      }
      // this.$store.commit("addPbookList", this.dataList[0]);
    },
  },
};
</script>
<style scoped>
.relatedBox {
  width: 377px;
  margin-top: 10px;
  border-top: 1px solid #00873c;
}
.titleBox {
  height: 60px;
  background: #d8f7e6;
  line-height: 60px;
  padding: 0 40px;
  font-weight: 700;
  color: #00873c;
  font-size: 18px;
}
.bookBox {
  background-color: #fff;
  padding: 10px;
}
.imgBox {
  width: 100px;
  height: 150px;
  position: relative;
  padding: 10px;
  border: 1px solid #ccc;
}
.rightBox {
  position: relative;
  margin-left: 10px;
  flex: 1;
  overflow: hidden;
}
.itemBox {
  display: flex;
  border-bottom: 1px solid #eeeeee;
  padding: 10px;
}
.bookName {
  font-size: 16px !important;
  line-height: 20px;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2; /* è¿™é‡Œæ˜¯è¶…出几行省略 */
  overflow: hidden;
}
.authorBox1 {
  margin-top: 10px;
  color: #666666;
  position: relative;
}
.toDetail {
  margin-top: 50px;
  color: #00873c;
}
.authorName {
  position: absolute;
  line-height: 20px;
  top: -4px;
  left: 44px;
}
.headBox {
  display: flex;
  justify-content: space-between;
  background: #d8f7e6;
}
.inventory {
  cursor: pointer;
  padding: 20px;
  color: #999;
}
.iconBox {
  position: absolute;
  bottom: 20px;
  right: 20px;
  display: none;
  cursor: pointer;
  color: red;
}
.itemBox:hover .iconBox {
  display: block;
}
.emptyBox {
  background-color: #fff;
}
</style>
src/components/detail/relatedRecommendation.vue
New file
@@ -0,0 +1,159 @@
<template>
  <div class="relatedBox" v-loading="loading">
    <div class="titleBox">推荐教材</div>
    <div v-if="dataList.length == 0 && !loading" class="emptyBox">
      <el-empty :image-size="100" description="暂无资源"></el-empty>
    </div>
    <div class="bookBox" v-if="dataList.length > 0 && !loading">
      <div
        class="itemBox"
        v-for="(item, index) in dataList"
        :key="index"
        @click="toDetail(item)"
      >
        <div class="imgBox">
          <img class="autoImg" :src="item.icon" alt="" />
        </div>
        <div class="rightBox">
          <div class="bookName ellipsis" :title="item.name">
            {{ item.name }}
          </div>
          <div class="authorBox">
            <div>作者:</div>
            <div class="authorName" :title="item.caupress_author">
              {{ item.caupress_author }}
            </div>
          </div>
          <div class="toDetail" @click="toDetail(item)">详情 >></div>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  props: ["recommendKey", "bookInfo"],
  data() {
    return {
      dataList: [],
      loading: true,
    };
  },
  created() {
    // this.getData();
  },
  methods: {
    getData(val) {
      console.log(val);
      let query = {
        path: "caupress_bookMall", // ä¹¦åŸŽç›¸å…³æŽ¨è
        queryType: "*",
        paging: {
          start: 0,
          size: 7, // å¤šèŽ·å–ä¸€æ¡ï¼Œé˜²æ­¢éšæœºåˆ°è‡ªèº«
        },
        sort: { Random: "Asc" },
        fields: {
          caupress_author: [],
          "caupress_catalogue*": val ? val : [],
        },
        coverSize: {
          height: 200,
        },
      };
      console.log(query, "query");
      this.MG.store.getProductList(query).then((res) => {
        this.dataList = res.datas.filter((item) => item.id != this.bookInfo.id);
        this.dataList = this.dataList.slice(0, 6);
        console.log(this.dataList, "this.dataList");
        this.loading = false;
      });
    },
    toDetail(row) {
      this.$router.replace({
        name: "bookStore-detail",
        query: { id: row.id, cmsPath: row.rootCmsItemId },
      });
      this.$emit("reloadPage", row);
    },
  },
  watch: {
    recommendKey(key) {
      if (key === "null") {
        this.loading = false;
      }
    },
  },
};
</script>
<style scoped>
.relatedBox {
  width: 357px;
  margin-top: 10px;
  margin-left: 20px;
  border-radius: 5%;
  border: 1px solid #e4e7ed;
  overflow: hidden;
}
.titleBox {
  height: 60px;
  line-height: 60px;
  padding: 0 40px;
  font-weight: 700;
  font-size: 18px;
  background-color: #fff;
  color: #333333;
  border-bottom: 1px solid #e4e7ed;
}
.bookBox {
  background-color: #fff;
  padding: 10px;
}
.imgBox {
  width: 100px;
  height: 150px;
  position: relative;
  border: 1px solid #e6e6e6;
}
.rightBox {
  flex: 1;
  overflow: hidden;
  margin-left: 10px;
}
.itemBox {
  display: flex;
  border-bottom: 1px solid #eeeeee;
  padding: 10px;
  cursor: pointer;
}
.bookName {
  font-size: 16px !important;
  line-height: 20px;
}
.authorBox {
  margin-top: 10px;
  color: #666666;
  position: relative;
  display: flex;
  line-height: 20px;
}
.toDetail {
  margin-top: 40px;
  color: #00873c;
  cursor: pointer;
}
.authorName {
  flex: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
}
.emptyBox {
  background-color: #fff;
}
</style>
src/components/detail/resource.vue
New file
@@ -0,0 +1,482 @@
<template>
  <div class="resourceBox">
    <div>
      <div class="itemTitle">
        <div class="titleName">配套资源示例</div>
      </div>
      <div class="resourceItem" v-if="resourceSupportList.length > 0">
        <div
          class="itemBox"
          v-for="(item, index) in resourceSupportList"
          :key="index"
        >
          <div class="tag">
            {{ item.caupress_fileType.split("_")[1] | fileType }}
          </div>
          <div class="countentBox">
            {{ item.name }}
          </div>
          <div class="previewBox">
            <div @click="preview(item)">
              é¢„览
              <i class="iconfont icon-icon_yulan"></i>
            </div>
            <div @click="collectReource(item)" v-if="!item.isFavourite">
              æ”¶è—
              <i class="iconfont icon-shoucang"></i>
            </div>
            <div @click="collectReource(item)" v-else>
              å·²æ”¶è—
              <i class="iconfont icon-shoucang" style="color: red"></i>
            </div>
          </div>
        </div>
      </div>
      <el-empty :image-size="100" description="暂无资源" v-else></el-empty>
    </div>
    <div>
      <div class="itemTitle allResource">
        <div class="titleName">全部资源</div>
        <span
          v-if="
            userInfo &&
            userInfo.role == 'Teacher' &&
            downloadState == undefined &&
            allResource.length > 0
          "
          class="applyForDownload"
          @click="applyForDownload"
        >
          ç”³è¯·ä¸‹è½½
          <i class="el-icon-download"></i>
        </span>
        <span
          v-if="
            userInfo &&
            userInfo.role == 'Teacher' &&
            downloadState == 'Normal' &&
            allResource.length > 0
          "
          class="resoucename2btn"
        >
          ç»“束时间:{{ downloadEndDate }}
        </span>
        <span
          v-if="
            userInfo &&
            userInfo.role == 'Teacher' &&
            downloadState == 'WaitAudit' &&
            allResource.length > 0
          "
          class="resoucename3"
        >
          å®¡æ ¸ä¸­..
        </span>
        <span
          v-if="
            userInfo &&
            userInfo.role == 'Teacher' &&
            downloadState == 'Reject' &&
            allResource.length > 0
          "
          class="popoverItem"
        >
          <el-popover width="400" placement="top" trigger="hover">
            <p class="reason">
              <span> æ‹’绝原因: </span>
              {{ popoverReasen }}
            </p>
            <el-button class="reApply" type="success" @click="applyForDownload"
              >重新申请</el-button
            >
            <template slot="reference">
              <span style="cursor: pointer"> å·²æ‹’绝 </span>
            </template>
          </el-popover>
        </span>
      </div>
      <div class="resourceItem" v-if="allResource.length > 0">
        <div class="itemBox" v-for="(item, index) in allResource" :key="index">
          <div class="tag allTag">
            {{ item.caupress_fileType.split("_")[1] }}
          </div>
          <div class="countentBox">
            {{ item.name }}
          </div>
          <div class="previewBox allBox" v-if="downloadState == 'Normal'">
            <div
              @click="downloadResource(item)"
              v-if="downloadState == 'Normal'"
            >
              ä¸‹è½½
              <i class="iconfont icon-xiazai"></i>
            </div>
            <!-- <div
              @click="collectReource(item)"
              v-if="!item.isFavourite"
            >
              æ”¶è—
              <i class="iconfont icon-shoucang"></i>
            </div>
            <div
              @click="collectReource(item)"
              v-else
            >
              å·²æ”¶è—
              <i
                class="iconfont icon-shoucang"
                style="color: #009a44"
              ></i>
            </div> -->
          </div>
          <div class="previewBox allBox grey" v-else>
          </div>
        </div>
      </div>
      <el-empty :image-size="100" description="暂无资源" v-else></el-empty>
    </div>
  </div>
</template>
<script>
import { mapState } from "vuex";
export default {
  props: {
    allResource: {
      type: Array,
      default: () => {},
    },
    resourceSupportList: {
      type: Array,
      default: () => {},
    },
    bookInfo: {
      type: Object,
      default: () => {},
    },
  },
  computed: {
    ...mapState(["userInfo"]),
  },
  data() {
    return {
      resourceTypeList: {
        caupress_audio: "音频",
        caupress_video: "视频",
        caupress_zip: "资源包",
        caupress_pdf: "PDF",
        caupress_img: "图片",
        caupress_document: "文档",
      },
      downloadState: "WaitAudit", // ä¸‹è½½çŠ¶æ€
      popoverReasen: "", // å®¡æ ¸æ‹’绝的原因
    };
  },
  created() {
    this.isPass();
  },
  filters: {
    fileType: function (val) {
      if (val == "audio") {
        return "mp3";
      } else if (val == "video") {
        return "mp4";
      } else {
        return val;
      }
    },
  },
  methods: {
    // æœªè´­ä¹°ç‚¹å‡»æ”¶è—
    toBuyBook() {
      this.$alert("当前书籍尚未购买,请购买后操作!", "提示", {
        confirmButtonText: "确定",
        callback: (action) => {},
      });
    },
    // ä¸‹è½½èµ„源
    downloadResource(item) {
      let end = new Date(this.downloadEndDate + "T23:59:59").getTime();
      let getEndNum = Number(sessionStorage.currentDate);
      console.log();
      console.log(end,"end");
      console.log(getEndNum,"getEndNum");
      if (end < getEndNum) {
        this.$message({
          type: "warning",
          message: "允许资源可下载时间已到期,请联系管理员!",
        });
        return false;
      }
      // if (this.downloadState != "Normal") {
      //   this.$message({
      //     type: "warning",
      //     message: "未申请资源下载或申请未通过,请联系管理员!",
      //   });
      //   return false;
      // }
      let url =
        this.config.requestCtx +
        "/file/api/ApiDownload?md5=" +
        item.caupress_file;
      window.open(url, "_blank");
    },
    downloadSupport(item) {
      if (item.caupress_file) {
        let url =
          this.config.requestCtx +
          "/file/api/ApiDownload?md5=" +
          item.caupress_file;
        window.open(url, "_blank");
      } else {
        this.$message({
          type: "warning",
          message: "暂无可下载资源",
        });
      }
    },
    // é¢„览
    preview(item) {
      let previewType = item.caupress_fileType.split("_")[1];
      console.log(previewType, "previewType");
      if (previewType == "zip") {
        this.$message({
          type: "warning",
          message: "此文件类型不支持预览",
        });
      } else {
        this.$router.push({
          name: `preview-${previewType}`,
          query: {
            md5: item.caupress_file,
            titleName: item.name,
            productLinkPath: item.productLinkInfo[0].LinkPath,
          },
        });
      }
    },
    // ç”³è¯·ä¸‹è½½
    applyForDownload() {
      let obj = {
        name: this.bookInfo.name, // ä¹¦å
        icon: this.bookInfo.icon, // å°é¢
        idPath: this.bookInfo.idPath, // è¯·æ±‚路径
        rootCmsItemId: this.bookInfo.rootCmsItemId,
        isdn: this.bookInfo.caupress_ISBN, // ISDN号
        author: this.bookInfo.caupress_author, // ä½œè€…
        id: this.bookInfo.id,
      };
      this.MG.ugc.delTopicMessage({ messageIds: [] }).then(() => {});
      let data = {
        topicIdOrRefCode: this.config.refCodes.productDownLoad,
        name: this.bookInfo.name,
        content: JSON.stringify(obj),
        state: "WaitAudit",
        type: "applyForDownload",
        icon: this.bookInfo.icon,
        cmsTypeRefCode: "",
        newDataListRequest: [],
      };
      this.MG.ugc.newTopicMessage(data).then((res) => {
        if (res) {
          this.$message({
            type: "success",
            message: "申请成功,等待管理员审核!",
          });
          this.isPass();
        }
      });
    },
    //收藏
    collectReource(item) {
      if (item.isFavourite) {
        this.MG.resource
          .delCmsItemLink({
            cmsItemIds: [item.id],
            linkType: "Favorite",
          })
          .then((res) => {
            this.$parent.getData();
          });
      } else {
        this.MG.resource
          .collectCmsItem({
            cmsItemIds: [item.id],
            linkType: "Favorite",
          })
          .then((res) => {
            this.$parent.getData();
          });
      }
    },
    // èŽ·å–ç”³è¯·çš„ä¸‹è½½çŠ¶æ€
    isPass() {
      let data = {
        start: 0,
        size: 1,
        topicIdOrRefCode: "productDownLoad",
        appRefCode: this.config.appRefCode,
        sort: {
          type: "Desc",
          field: "CreateDate",
        },
      };
      this.MG.ugc.getTopicMessageList(data).then((res) => {
        // try {
          console.log(res,"endTime");
        if (res.datas.length > 0) {
          this.downloadState = res.datas[0].state;
          if (res.datas[0].feedBack) {
            let feedBack = JSON.parse(res.datas[0].feedBack);
            res.datas[0].endDate = feedBack.endDate ? feedBack.endDate : "";
            this.popoverReasen = feedBack.reason ? feedBack.reason : "";
            this.downloadEndDate = res.datas[0].endDate;
            let end = new Date(this.downloadEndDate + "T23:59:59").getTime();
            let getEndNum = Number(sessionStorage.currentDate);
            if (end < getEndNum) {
              this.downloadState = undefined;
            }
          }
        } else {
          this.downloadState = undefined;
        }
        console.log(this.downloadState,"downloadState");
        // } catch (error) {
        //   this.downloadState = undefined;
        // }
      });
    },
  },
};
</script>
<style scoped>
.resourceBox {
  width: 813px;
  background-color: #fff;
  margin: 10px 0 0 10px;
  padding: 40px;
  box-sizing: border-box;
}
.itemTitle {
  height: 30px;
  line-height: 30px;
  padding: 0 10px;
  background: #f8f8f8;
  /* position: relative; */
}
.titleName {
  font-size: 18px;
  font-weight: 700;
  /* position: absolute;
  top: -10px; */
}
.applyForDownload {
  font-size: 16px;
  font-weight: 700;
  color: #00873c;
  cursor: pointer;
}
.resourceItem {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
}
.itemBox {
  width: 350px;
  height: 120px;
  box-shadow: 2px 2px 10px #f2f2f2;
  margin-top: 20px;
  position: relative;
  border-radius: 4px;
  line-height: 80px;
}
.tag {
  position: absolute;
  width: 60px;
  height: 20px;
  background-color: #f2f2f2;
  right: 0px;
  text-align: center;
  line-height: 20px;
  border-radius: 0px 4px 0px 4px;
}
.previewBox {
  width: 100%;
  position: absolute;
  height: 40px;
  background-color: #d8f7e6;
  bottom: 0px;
  border-radius: 4px;
  text-align: center;
  line-height: 40px;
  color: #00873c;
  cursor: pointer;
  display: flex;
  justify-content: space-around;
}
.disable {
  background-color: #ccc;
}
.countentBox {
  height: 60px;
  margin-top: 20px;
  line-height: 30px;
  padding: 0 20px;
  color: #444444;
  font-weight: 700;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2; /* è¿™é‡Œæ˜¯è¶…出几行省略 */
  overflow: hidden;
}
.allResource {
  margin-top: 40px;
  display: flex;
  justify-content: space-between;
  font-size: 18px;
  font-weight: 700;
}
.allTag {
  background-color: #d8f7e6;
  color: #00873c;
}
.allBox {
  background-color: #00873c;
  color: #fff;
}
.resoucename2btn {
  font-size: 14px;
  color: #00873c;
}
.resoucename3 {
  color: #8b4513;
  font-size: 14px;
}
.popoverItem {
  color: #ee0a24;
  font-size: 14px;
}
.reApply {
  float: right;
}
.reason {
  display: inline-block;
  padding-bottom: 20px;
}
.grey{
  background-color: #ccc;
}
</style>
src/components/detail/serviceRelated.vue
New file
@@ -0,0 +1,169 @@
<template>
  <div class="relatedBox">
    <div class="headBox">
      <div class="titleBox">相关推荐</div>
    </div>
    <div class="bookBox" v-if="dataList.length > 0 && !loading">
      <div class="itemBox" v-for="(item, index) in dataList" :key="index" @click="toDetail(item)">
        <div class="imgBox">
          <img class="autoImg" :src="item.icon" alt="" />
        </div>
        <div class="rightBox">
          <div class="bookName ellipsis" :title="item.name">
            {{ item.name }}
          </div>
          <div class="authorBox">
            <div>作者:</div>
            <div class="authorName" :title="item.caupress_author">
              {{ item.caupress_author }}
            </div>
          </div>
          <div class="toDetail" @click="toDetail(item)">详情 >></div>
        </div>
      </div>
    </div>
    <el-empty
      :image-size="100"
      description="暂无资源"
      v-if="dataList.length == 0 && !loading"
    ></el-empty>
  </div>
</template>
<script>
export default {
  props: ["recommendKey", "bookInfo"],
  data() {
    return {
      dataList: [],
      loading: true
    };
  },
  created() {
    // this.getData();
  },
  methods: {
    getData(val) {
      console.log(val);
      let query = {
        path: "caupress_teachingResource", // ä¹¦åŸŽç›¸å…³æŽ¨è
        queryType: "*",
        paging: {
          start: 0,
          size: 7 // å¤šèŽ·å–ä¸€æ¡ï¼Œé˜²æ­¢éšæœºåˆ°è‡ªèº«
        },
        sort: { Random: "Asc" },
        fields: {
          caupress_author: [],
          "caupress_catalogue*": val ? val : [],
        },
        coverSize: {
          height: 200
        }
      };
      this.MG.store.getProductList(query).then((res) => {
        this.dataList = res.datas.filter((item) => item.id != this.bookInfo.id);
        this.dataList = this.dataList.slice(0, 6);
        this.loading = false;
      });
    },
    toDetail(row) {
      this.$router.replace({
        name: "teachingServices-detail",
        query: { id: row.id, cmsPath: row.rootCmsItemId }
      });
      this.$emit("reloadPage", row);
    },
  },
  watch: {
    recommendKey(key) {
      if (key === "null") {
        this.loading = false;
      } else if (key) {
        // this.getData();
      }
    },
    bookInfo(key) {
      // this.getData();
    }
  }
};
</script>
<style scoped>
.relatedBox {
  width: 813px;
  background-color: #fff;
  margin: 10px 0 0 10px;
  border-top: 1px solid #00873c;
  margin-bottom: 20px;
  box-sizing: border-box;
}
.titleBox {
  height: 60px;
  background: #d8f7e6;
  line-height: 60px;
  padding: 0 40px;
  font-weight: 700;
  color: #00873c;
  font-size: 18px;
}
.bookBox {
  display: flex;
  flex-wrap: wrap;
  background-color: #fff;
  padding: 10px;
}
.imgBox {
  width: 100px;
  height: 150px;
  position: relative;
  border: 1px solid #e6e6e6;
}
.rightBox {
  flex: 1;
  overflow: hidden;
  margin-left: 10px;
}
.itemBox {
  width: 50%;
  display: flex;
  padding: 10px;
  box-sizing: border-box;
}
.bookName {
  font-size: 16px !important;
  line-height: 20px;
  text-overflow: ellipsis;
}
.authorBox {
  margin-top: 10px;
  color: #666666;
  position: relative;
  display: flex;
  line-height: 20px;
}
.toDetail {
  cursor: pointer;
  margin-top: 40px;
  color: #00873c;
}
.authorName {
  flex: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
}
.headBox {
  display: flex;
  background: #d8f7e6;
  justify-content: space-between;
}
.viewMore {
  cursor: pointer;
  padding: 20px;
  color: #999;
}
</style>
src/components/list/data.vue
New file
@@ -0,0 +1,284 @@
<template>
  <div>
    <div class="wrap bookList" v-loading="reLoading">
      <el-empty
        description="暂无数据"
        class="empty"
        :image-size="200"
        v-if="bookList.length == 0 && !reLoading"
      ></el-empty>
      <template v-if="bookList.length > 0 && !reLoading">
        <div
          class="bookListItem"
          v-for="(item, index) in bookList"
          :key="index"
          @click="toDetail(item)"
        >
          <div class="wrapImg">
            <img class="autoImg" :src="item.icon" alt="" />
          </div>
          <div class="ellipsis" :title="item.name">
            {{ item.name }}
          </div>
          <!-- <p>
          <span style="font-size: 12px">ï¿¥</span>
          {{ item.price }}
        </p> -->
          <div class="priceBox">
            <span class="price" v-if="item.price && item.price > 0"
              >Â¥
              <span>{{ tool.toDecimal2(item.price) }}</span>
            </span>
            <span class="price" v-else>
              <span class="freePrice">免费</span>
            </span>
            <span class="oldPrice" v-if="item.oldPrice"
              >原价:¥{{ tool.toDecimal2(item.oldPrice) }}</span
            >
          </div>
        </div>
      </template>
    </div>
    <!-- åˆ†é¡µ -->
    <div class="pageinateBox" v-if="bookList.length > 0">
      <el-pagination
        @size-change="
          (val) => {
            paginationData.limit = val;
            getData();
          }
        "
        @current-change="
          (val) => {
            paginationData.page = val;
            getData();
          }
        "
        background=""
        :current-page="paginationData.page - 0"
        :page-size="paginationData.limit"
        prev-text="上一页"
        next-text="下一页"
        layout="total, prev, pager, next, slot, jumper"
        :total="paginationData.totalCount"
      >
      </el-pagination>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      reLoading: true,
      tabLoading: true,
      paginationData: {
        page: 1,
        totalCount: 0,
        limit: 20,
        totalPage: 0,
      },
      bookList: [],
    };
  },
  props: {
    channel: {
      type: String,
    },
    selectListKey: {
      type: Array,
      defaultValue: [],
    },
    searchFields: {
      type: String,
      defaultValue: "",
    },
    searchValue: {
      type: String,
      defaultValue: "",
    },
    detailRoute: {
      type: String,
      defaultValue: "",
    },
  },
  created() {
    this.getData();
  },
  watch: {
    searchValue: {
      handler: function (val, oldVal) {
        this.paginationData.page = 1;
        this.getData();
      },
      // æ·±åº¦è§‚察监听
      deep: true,
    },
    channel: {
      handler: function (val, oldVal) {
        this.paginationData.page = 1;
        this.getData();
      },
      // æ·±åº¦è§‚察监听
      deep: true,
    },
    searchFields: {
      handler: function (val, oldVal) {
        this.paginationData.page = 1;
        this.getData();
      },
      // æ·±åº¦è§‚察监听
      deep: true,
    },
  },
  methods: {
    toDetail(row) {
      this.$router.push({
        name: this.detailRoute,
        query: { id: row.id, cmsPath: row.rootCmsItemId },
      });
    },
    getData() {
      this.reLoading = true;
      let { limit, page } = this.paginationData;
      let query = {
        path: this.channel,
        queryType: this.channel == "*" ? "*" : "",
        paging: {
          start: limit * page - limit,
          size: limit,
        },
        fields: {
          caupress_catalogue: [],
          caupress_projectTitle: [],
          caupress_ISBN: [],
          caupress_author: [],
        },
        filterList: {},
        coverSize: {
          height: 200,
        },
      };
      // æ·»åŠ ç­›é€‰æ¡ä»¶
      if (this.selectListKey) {
        console.log(this.selectListKey[0] == "All", "isTru");
        if (this.selectListKey[0] != "All") {
          Object.assign(query.filterList, {
            "caupress_catalogue*": this.selectListKey[0],
          });
        }
        if (this.selectListKey[1] != "arrangementAll") {
          if (this.selectListKey[0] != "All") {
            Object.assign(query.filterList, {
              "caupress_catalogue*": [
                this.selectListKey[0],
                "&" + this.selectListKey[1],
              ],
            });
          } else {
            Object.assign(query.filterList, {
              "caupress_catalogue*": [this.selectListKey[1]],
            });
          }
        }
        if (this.selectListKey[2] != "projectTitleAll") {
          Object.assign(query.filterList, {
            "caupress_projectTitle*": [this.selectListKey[2]],
          });
        }
      }
      // å¢žåŠ å¤´éƒ¨æœç´¢æ¡ä»¶
      if (this.searchFields) {
        Object.assign(query.filterList, {
          [this.searchFields + "*"]: this.searchValue,
        });
      }
      console.log(this.selectListKey, "this.selectListKey");
      console.log(query, "query");
      this.MG.store.getProductList(query).then((res) => {
        this.bookList = res.datas;
        this.paginationData.totalCount = res.total;
        // çˆ¶ç»„件需要获取图书数量时调用
        if (this.$listeners["gainTotalCount"]) {
          this.$emit("gainTotalCount", res.total);
        }
        this.reLoading = false;
      });
    },
  },
};
</script>
<style lang="less" scoped>
.wrap {
  padding: 20px;
  margin-bottom: 10px;
  background-color: #fff;
}
.bookList {
  display: grid;
  grid-template-columns: repeat(5, 150px);
  grid-column-gap: 100px;
  min-height: 400px;
  .empty {
    width: 1160px;
    margin: 0 auto;
  }
  .bookListItem {
    width: 150px;
    height: 280px;
    cursor: pointer;
    .wrapImg {
      width: 150px;
      height: 200px;
      position: relative;
      border: 1px solid #e6e6e6;
      background: #f2f2f2;
    }
    .ellipsis {
      width: 150px;
      line-height: 40px;
      color: #333333;
      font-size: 16px;
    }
    .priceBox {
      .oldPrice {
        font-size: 12px;
        color: #444444;
        text-decoration: line-through;
        margin-left: 6px;
      }
      .price {
        font-size: 12px;
        color: #e50021;
        span {
          font-weight: bold;
          font-size: 14px;
        }
      }
    }
  }
}
.pageinateBox {
  text-align: center;
  margin: 40px 0;
  :deep(.el-pagination.is-background .btn-next) {
    padding: 0 10px;
  }
  :deep(.el-pagination.is-background .btn-prev) {
    padding: 0 10px;
  }
}
</style>
src/components/list/index.vue
New file
@@ -0,0 +1,387 @@
<template>
  <div>
    <div
      v-show="!$route.query.searchOptionHidden"
      class="wrap"
      v-loading="tabLoading"
    >
      <div class="arrangement e7f9ef">
        <div class="primaryBack title">{{ arrangement.name }}:</div>
        <div class="classification">
          <div :class="arrangement.openTag ? 'txtBox show' : 'txtBox'">
            <span
              :class="
                selectListKey.indexOf(cval.value) > -1
                  ? 'txt primaryTxt'
                  : 'txt'
              "
              v-for="(cval, ckey) in arrangement.child"
              :key="ckey"
              @click="selectTxt(arrangement.name, cval.value, cval.name, ckey)"
              >{{ cval.name }}</span
            >
          </div>
          <span
            v-if="Object.keys(arrangement.child).length > 12"
            class="more"
            @click="showList(arrangement)"
            >{{ arrangement.openTag ? "收起" : "展开" }}
            <img
              src="@/assets/images/packUp.png"
              v-if="arrangement.openTag"
              alt=""
              srcset=""
            />
            <img src="@/assets/images/packDown.png" alt="" v-else srcset="" />
          </span>
        </div>
      </div>
      <div class="arrangement">
        <div class="flex">
          <span class="title">{{ catalogue.name }}:</span>
          <div :class="catalogue.openTag ? 'txtBox show' : 'txtBox'">
            <span
              :class="
                selectListKey.indexOf(cval.value) > -1
                  ? 'txt primaryTxt'
                  : 'txt'
              "
              v-for="(cval, ckey) in catalogue.child"
              :key="ckey"
              @click="selectTxt(catalogue.name, cval.value, cval.name)"
              >{{ cval.name }}</span
            >
          </div>
          <span
            v-if="Object.keys(catalogue.child).length > 12"
            class="more"
            @click="showList(catalogue)"
            >{{ catalogue.openTag ? "收起" : "展开" }}
            <img
              src="@/assets/images/packUp.png"
              v-if="catalogue.openTag"
              alt=""
              srcset=""
            />
            <img src="@/assets/images/packDown.png" alt="" v-else srcset="" />
          </span>
        </div>
      </div>
      <div class="arrangement dashedBorder">
        <div class="flex">
          <span class="title">{{ projectTitle.name }}:</span>
          <div :class="projectTitle.openTag ? 'txtBox show' : 'txtBox'">
            <span
              :class="
                selectListKey.indexOf(cval.value) > -1
                  ? 'txt primaryTxt'
                  : 'txt'
              "
              v-for="(cval, ckey) in projectTitle.child"
              :key="ckey"
              @click="selectTxt(projectTitle.name, cval.value, cval.name)"
              >{{ cval.name }}</span
            >
          </div>
          <span
            v-if="Object.keys(projectTitle.child).length > 12"
            class="more"
            @click="showList(projectTitle)"
            >{{ projectTitle.openTag ? "收起" : "展开" }}
            <img
              src="@/assets/images/packUp.png"
              v-if="projectTitle.openTag"
              alt=""
              srcset=""
            />
            <img src="@/assets/images/packDown.png" alt="" v-else srcset="" />
          </span>
        </div>
      </div>
    </div>
    <div v-show="!$route.query.searchOptionHidden" class="wrap retrieval">
      <div>
        å±‚次:{{ selectListName[0] }}
        <img
          v-show="selectListName[0] != '全部'"
          src="@/assets/images/delete.png"
          class="deleteImg"
          @click="deleteOption(0)"
          alt=""
        />
        <el-divider direction="vertical"></el-divider>分类:{{
          selectListName[1]
        }}
        <img
          v-show="selectListName[1] != '全部'"
          src="@/assets/images/delete.png"
          class="deleteImg"
          @click="deleteOption(1)"
          alt=""
        />
        <el-divider direction="vertical"></el-divider>立项冠名:
        {{ selectListName[2] }}
        <img
          v-show="selectListName[2] != '全部'"
          src="@/assets/images/delete.png"
          class="deleteImg"
          @click="deleteOption(2)"
          alt=""
        />
      </div>
      <div>共计:{{ totalCount }}本</div>
    </div>
    <div class="crumbs" v-show="$route.query.searchOptionHidden">
      <el-breadcrumb separator-class="el-icon-arrow-right">
        <el-breadcrumb-item :to="{ name: 'home' }">首页</el-breadcrumb-item>
      </el-breadcrumb>
    </div>
    <DataList
      ref="dataList"
      :channel="channel"
      :selectListKey="selectListKey"
      @gainTotalCount="gainTotalCount"
      :detailRoute="detailRoute"
    ></DataList>
  </div>
</template>
<script>
import DataList from "@/components/list/data.vue";
export default {
  components: {
    DataList
  },
  props: {
    channel: {
      type: String
    },
    detailRoute: {
      type: String
    }
  },
  data() {
    return {
      arrangement: {
        name: "层次",
        openTag: false,
        child: []
      },
      catalogue: {
        name: "分类",
        openTag: false,
        child: []
      },
      projectTitle: {
        name: "立项冠名",
        openTag: false,
        child: []
      },
      totalCount: 0,
      selectListKey: ["All", "arrangementAll", "projectTitleAll"],
      selectListName: ["全部", "全部", "全部"]
    };
  },
  created() {
    this.getHierarchyType();
    this.getProjectTitle();
  },
  methods: {
    // èŽ·å–å±‚æ¬¡ç±»åž‹ä¸€çº§åˆ†ç±»
    getHierarchyType() {
      this.tabLoading = true;
      let query = {
        refCodes: ["caupress_catalogue"]
      };
      this.MG.store.getProductTypeField(query).then((res) => {
        this.arrangement.child = JSON.parse(res[0].config).option;
        let allChild = [
          {
            name: "全部",
            value: "arrangementAll",
            checked: ""
          }
        ];
        this.arrangement.child.map((item) => {
          if (item.child) {
            allChild = allChild.concat(item.child);
          }
          if (item.child) {
            item.child.unshift({
              name: "全部",
              value: "arrangementAll",
              checked: ""
            });
          } else {
            item.child = [
              {
                name: "全部",
                value: "arrangementAll",
                checked: ""
              }
            ];
          }
        });
        this.arrangement.child.unshift({
          name: "全部",
          value: "All",
          child: allChild,
          checked: ""
        });
        this.catalogue.child = this.arrangement.child[0].child;
        this.tabLoading = false;
        console.log(this.arrangement);
      });
    },
    // èŽ·å–ç«‹é¡¹å† å
    getProjectTitle() {
      this.tabLoading = true;
      let query = {
        refCodes: ["caupress_projectTitle"]
      };
      this.MG.store.getProductTypeField(query).then((res) => {
        this.projectTitle.child = JSON.parse(res[0].config).option;
        this.projectTitle.child.unshift({
          name: "全部",
          value: "projectTitleAll",
          checked: ""
        });
        this.tabLoading = false;
      });
    },
    // æŽ§åˆ¶æ ‡ç­¾åˆ—表展开
    showList(data) {
      data.openTag = !data.openTag;
      this.$forceUpdate();
    },
    // é€‰æ‹©æ¡ä»¶
    selectTxt(key, cval, cname, ckey) {
      console.log(cval,"cval");
      console.log(key,"key");
      console.log(cname,"cname");
      console.log(ckey,"ckey");
      switch (key) {
        case "层次":
          this.$set(this.selectListKey, 0, cval);
          this.selectListName[0] = cname;
          this.catalogue.child = this.arrangement.child[ckey].child;
          // é‡ç½®åˆ†ç±»
          this.deleteOption(1);
          break;
        case "分类":
          this.$set(this.selectListKey, 1, cval);
          this.selectListName[1] = cname;
          this.$refs.dataList.paginationData.page = 1;
          console.log(this.selectListKey,"this.selectListKey");
          this.$refs.dataList.getData();
          break;
        case "立项冠名":
          this.$set(this.selectListKey, 2, cval);
          this.selectListName[2] = cname;
          this.$refs.dataList.paginationData.page = 1;
          this.$refs.dataList.getData();
          break;
      }
    },
    // åˆ é™¤æ ‡ç­¾
    deleteOption(index) {
      this.selectListName[index] = "全部";
      switch (index) {
        case 0:
          this.$set(this.selectListKey, 0, "All");
          // é‡ç½®åˆ†ç±»
          this.deleteOption(1);
          break;
        case 1:
          this.$set(this.selectListKey, 1, "arrangementAll");
          break;
        case 2:
          this.$set(this.selectListKey, 2, "projectTitleAll");
      }
      // é‡æ–°èŽ·å–æ•°æ®
      this.$refs.dataList.paginationData.page = 1;
      this.$refs.dataList.getData();
    },
    // æ›´æ–°æŸ¥è¯¢æ€»æ•°é‡
    gainTotalCount(total) {
      this.totalCount = total;
    }
  }
};
</script>
<style lang="less" scoped>
.crumbs {
  padding: 35px 0;
  line-height: 70px;
}
.wrap {
  padding: 20px;
  margin-bottom: 10px;
  background-color: #fff;
  .e7f9ef {
    background-color: #e7f9ef;
    border: 1px solid #ededed;
    border-radius: 4px;
  }
  .arrangement {
    width: 100%;
    line-height: 60px;
    display: flex;
    .title {
      font-size: 16px;
      font-weight: bold;
      width: 80px;
      text-align: center;
      border-top-left-radius: 4px;
      border-bottom-left-radius: 4px;
    }
    .txtBox {
      overflow: hidden;
      height: 60px;
      display: flex;
      flex: 1;
      flex-wrap: wrap;
      .txt {
        line-height: 60px;
        padding: 0 20px;
        cursor: pointer;
      }
    }
    .show {
      height: auto;
    }
    .more {
      width: 50px;
      color: #999999;
      cursor: pointer;
    }
  }
  .dashedBorder {
    border-top: 1px dashed #ededed;
  }
}
.retrieval {
  display: flex;
  justify-content: space-between;
  color: #999999;
  > div {
    line-height: 21px;
  }
  :deep(.el-divider--vertical) {
    width: 0;
    border: 1px dashed #dcdfe6;
    height: 21px;
    margin: 0 30px;
  }
  :deep(.el-divider) {
    background-color: #fff;
  }
  .deleteImg {
    display: inline-block;
    width: 9px;
    height: 9px;
    margin-left: 10px;
    cursor: pointer;
  }
}
</style>
src/components/relatedRecommendation.vue
New file
@@ -0,0 +1,80 @@
<template>
  <div class="relatedBox">
    <div class="titleBox">相关推荐</div>
    <div class="bookBox">
      <div class="itemBox" v-for="(item, index) in dataList" :key="index">
        <div class="imgBox">
          <img src="@/assets/images/bookStore/testImg.png" alt="" />
        </div>
        <div class="rightBox">
          <div class="bookName">
            {{ item.title }}
          </div>
          <div class="authorBox1">作者:{{ item.author }}</div>
          <div class="toDetail">详情 >></div>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      dataList: [],
    };
  },
};
</script>
<style scoped>
.relatedBox {
  width: 377px;
  margin-top: 10px;
  border-top: 1px solid #00873c;
}
.titleBox {
  height: 60px;
  background: #d8f7e6;
  line-height: 60px;
  padding: 0 40px;
  font-weight: 700;
  color: #00873c;
  font-size: 18px;
}
.bookBox {
  background-color: #fff;
  padding: 20px;
}
.imgBox {
  width: 200px;
  height: 150px;
  position: relative;
  border: 1px solid #e6e6e6;
  padding: 10px;
}
.imgBox img {
  width: 100%;
  height: 100%;
}
.rightBox {
  margin-left: 10px;
}
.itemBox {
  display: flex;
  border-bottom: 1px solid #eeeeee;
  padding: 20px;
}
.bookName {
  font-size: 16px !important;
}
.authorBox1 {
  margin-top: 10px;
  color: #666666;
}
.toDetail {
  margin-top: 20px;
  color: #00873c;
}
</style>
src/components/video/index.vue
New file
@@ -0,0 +1,177 @@
<template>
  <div class="container">
    <div class="videoBox">
      <video
        @canplay="getDuration"
        @timeupdate="updateTime"
        ref="audio"
        controls
        controlsList="nodownload"
        autoplay
        :src="videoSrc"
      >
        <!-- <source :src="videoSrc" type="video/mp4" ref="myPlayer" /> -->
      </video>
    </div>
    <div class="calssInfo">
      <el-tabs type="border-card">
        <el-tab-pane label="课程简介">
          <div class="tabItem" v-loading="descriptionLoading">
            <div
              class="richTextBox"
              v-html="description.autism_introduction"
            ></div>
          </div>
        </el-tab-pane>
        <el-tab-pane label="章节目录">
          <div class="tabItem" v-loading="catalogueLoading">
            <p v-for="(item, index) in catalogue" :key="index" class="selected">
              {{ item.name }}
            </p>
          </div>
        </el-tab-pane>
      </el-tabs>
    </div>
  </div>
</template>
<script>
import { getImage } from "@/assets/js/toolClass";
export default {
  props: {
    query: {
      type: Object
    },
    idPath: {
      type: String
    }
  },
  data() {
    return {
      videoSrc: "",
      description: "",
      catalogue: "",
      descriptionLoading: true,
      catalogueLoading: true
    };
  },
  created() {
    this.getData();
    this.getCatalogue();
  },
  methods: {
    // èŽ·å–è¯¦æƒ…
    getData() {
      this.descriptionLoading = true;
      let query = {
        path: this.query.LinkPath,
        fields: {
          autism_introduction: [],
          autism_totalDuration: []
        },
        filterList: {
          "Id=": this.query.id
        }
      };
      this.MG.resource.getItem(query).then((res) => {
        this.description = res.datas[0];
        this.descriptionLoading = false;
      });
    },
    // èŽ·å–ç›®å½•
    getCatalogue() {
      this.catalogueLoading = true;
      let query = {
        path: this.idPath,
        fields: {
          autism_video: [],
          autism_introduction: [],
          autism_totalDuration: []
        },
        filterList: {
          "SysType=":"Cmsitem"
        }
      };
      this.MG.resource.getItem(query).then((res) => {
        this.catalogue = res.datas;
        this.aliVod(this.catalogue[0].autism_video);
        this.catalogueLoading = false;
      });
    },
    // èŽ·å–åŠ é€Ÿåœ°å€
    aliVod(md5) {
      let query = {
        md5: md5,
        appRefCode: this.config.appRefCode
      };
      this.MG.file.getAliVod(query).then((res) => {
        if (res) {
          this.videoSrc = res;
        } else {
          this.videoSrc = getImage(md5);
        }
      });
    },
    getDuration() {
      this.audio = this.$refs.audio;
      this.duration = this.timeFormat(this.$refs.audio.duration);
    },
    timeFormat(number) {
      let minute = parseInt(number / 60);
      let second = parseInt(number % 60);
      minute = minute >= 10 ? minute : "0" + minute;
      second = second >= 10 ? second : "0" + second;
      return minute + ":" + second;
    },
    updateTime() {
      if (!this.$refs.progress) return;
      this.currentDuration = this.timeFormat(this.audio.currentTime);
      //如果不是正在移动 å’Œ æ²¡æœ‰æš‚停播放就执行
      if (!this.isMoveIn || !this.audio.paused) {
        // è®¾ç½®å½“前时间
        let MoveX =
          this.$refs.progress.clientWidth *
          (this.audio.currentTime / this.audio.duration);
        //播放时更新距离
        this.$refs.currentProgress.style.width = MoveX + "px";
        this.$refs.circle.style.left =
          MoveX - this.$refs.circle.clientWidth / 2 + "px";
      }
    }
  }
};
</script>
<style lang="less" scoped>
.videoBox {
  height: 657px;
  width: 100%;
  margin-top: 20px;
}
video {
  width: 100%;
  height: 100%;
}
.calssInfo {
  margin-top: 20px;
  height: 290px;
  background-color: #e4e4e4;
  margin-bottom: 20px;
  padding: 30px;
}
.tabItem {
  height: 220px;
  .selected {
    font-size: 14px;
    color: #0079fe;
  }
}
/deep/.el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active {
  background-color: rgba(0, 121, 254, 1);
  color: #fff !important;
}
/deep/ .el-tabs__item {
  font-size: 16px;
}
</style>
src/layout/base.vue
New file
@@ -0,0 +1,25 @@
<template>
  <keep-alive v-if="keepAliveList.length > 0" :include="keepAliveList">
    <router-view />
  </keep-alive>
  <router-view v-else />
</template>
<script>
import { mapState } from "vuex";
export default {
  data() {
    return {};
  },
  computed: {
    ...mapState(["keepAliveList"])
  },
  watch: {
    $route(to, from) {
      if (to.meta.keepAlive && this.keepAliveList.indexOf(to.name) == -1) {
        this.$store.commit("addKeepAlive", to.name);
      }
    }
  }
};
</script>
src/layout/components/footer.vue
New file
@@ -0,0 +1,260 @@
<template>
  <div class="pageFooter">
    <div class="footerContent contentBox flex">
      <div class="infoBox flex1">
        <ul class="linkBox">
          <li
            class="link"
            @click="toAboutus(index)"
            v-for="(item, index) in linkList"
            :key="index"
          >
            {{ item.name }}
          </li>
        </ul>
        <ul class="linkBox">
          <li
            class="link"
            @click="toAboutus(index)"
            v-for="(item, index) in newList"
            :key="index"
          >
            {{ item.name }}
          </li>
        </ul>
        <ul class="linkBox">
          <li
            class="link"
            @click="toAboutus(index)"
            v-for="(item, index) in serviceList"
            :key="index"
          >
            {{ item.name }}
          </li>
        </ul>
        <ul class="linkBox">
          <li class="link" @click="toAboutus(index)">天猫旗舰店</li>
          <li class="link" style="opacity: 1;font-size: 20px;" @click="toAboutus(index)">京东旗舰店</li>
        </ul>
      </div>
      <div class="QRCodeBox">
        <div class="codeItem">
          <img src="@/assets/images/pageFooter/wechatCode.png" />
        </div>
        <div class="codeItem">
          <img src="@/assets/images/pageFooter/weiboCode.png" />
        </div>
      </div>
    </div>
    <div class="copyrightBox">
      <span
        >中国协和医科大学出版社有限公司 ä¸¨ å¤‡æ¡ˆåºå·ï¼š<span
          class="beian"
          @click="toLink"
          >京ICP备 05029104号-4互联网出版许可证 æ–°å‡ºç½‘证 ï¼ˆäº¬ ï¼‰</span
        >
        ä¸¨ å¢žå€¼ç”µä¿¡ä¸šåŠ¡ç»è¥è®¸å¯è¯ï¼šäº¬B2-20224426</span
      >
      <span style="display: block"
        >Copyright©2013 ä¸­å›½åå’ŒåŒ»ç§‘大学出版社有限公司 ç‰ˆæƒæ‰€æœ‰!</span
      >
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      linkList: [
        {
          name: "关于我们",
          url: "",
        },
        {
          name: "关于我们",
          url: "",
        },
        {
          name: "联系我们",
          url: "",
        },
        {
          name: "意见反馈",
          url: "",
        },
      ],
      newList: [
        {
          name: "新手上路",
          url: "",
        },
        {
          name: "操作指南",
          url: "",
        },
        {
          name: "教师认证",
          url: "",
        },
      ],
      serviceList: [
        {
          name: "友情链接",
          url: "",
        },
        {
          name: "国家科学技术部",
          url: "",
        },
        {
          name: "国家卫生健康委",
          url: "",
        },
        {
          name: "国家教育部",
          url: "",
        },
        {
          name: "北京市卫健委",
          url: "",
        },
      ],
    };
  },
  methods: {
    // å¤‡æ¡ˆ
    toLink() {
      const url = "https://beian.miit.gov.cn/";
      window.open(url, "_blank");
    },
    toAboutus(index) {
      switch (index) {
        case 0:
          window.open("http://xy.caupress.cn", "_blank");
          break;
        case 1:
          window.open(
            "https://zndts.tmall.com/?spm=a1z10.1-b.1997427721.d4918089.561b7c19JR8QxF",
            "_blank"
          );
          break;
        case 2:
          this.$router.push({
            name: "authorServices",
          });
          break;
        case 3:
          this.$router.push({
            name: "aboutUs",
            query: {
              aboutUs: 5,
            },
          });
          break;
        case 4:
          if (this.$route.name == "aboutUs-index") {
            this.$router.replace({
              name: "aboutUs",
              query: {
                aboutUs: 4,
              },
            });
          } else {
            this.$router.push({
              name: "aboutUs",
              query: {
                aboutUs: 4,
              },
            });
          }
          break;
        default:
          this.$message("正在建设中...");
          break;
      }
    },
  },
};
</script>
<style lang="less" scoped>
.pageFooter {
  background: #444444;
  background-image: url("@/assets/images/xiehe/home/footer-bg.png");
  .footerContent {
    padding: 30px 0;
    .infoBox {
      display: flex;
      .linkBox {
        font-size: 16px;
        margin-left: 50px;
        .link {
          padding-right: 15px;
          cursor: pointer;
          color: #fff;
          margin-top: 20px;
          opacity: 0.7;
          &::after {
            margin-left: 15px;
          }
          &:last-child::after {
            display: none;
          }
          &:first-child {
            color: #fff;
            opacity: 1;
            font-size: 20px;
            margin-bottom: 10px;
          }
        }
      }
      .address {
        margin-top: 30px;
        font-size: 14px;
        color: #ccc;
        span {
          margin-right: 30px;
        }
      }
      .logo {
        height: 50px;
        margin-top: 30px;
        img {
          height: 100%;
        }
      }
    }
    .QRCodeBox {
      .codeItem {
        display: inline-block;
        text-align: center;
        margin-left: 40px;
        p {
          font-size: 16px;
        }
        img {
          width: 100px;
          height: 100px;
          margin-top: 20px;
        }
      }
    }
  }
  .copyrightBox {
    text-align: center;
    color: #fff;
    height: 80px;
    line-height: 40px;
    font-size: 12px;
    border-top: 1px solid #e6e6e6;
    .beian {
      cursor: pointer;
    }
    .beian:hover {
      color: blue;
    }
  }
}
</style>
src/layout/components/header.vue
New file
@@ -0,0 +1,311 @@
<template>
  <div class="pageHeader">
    <!-- é¡µçœ‰ -->
    <!-- <div class="topBar">
      <div class="contentBox"></div>
    </div> -->
    <div class="contentBox logoBox">
      <div class="logo">
        <img
          @click="
            () => {
              $router.push({
                path: '/home',
              });
            }
          "
          src="@/assets/images/xiehe/home/Group_303.png"
        />
      </div>
      <div class="searchBox" v-show="!hideSerch">
        <el-input
          style="width: 500px"
          placeholder="请输入内容"
          @change="gotoSearch"
          v-model="searchKey"
          :suffix-icon="Search"
        >
          <!-- <el-select
            v-model="searchType"
            slot="prepend"
            placeholder="请选择"
            class="searchItem"
            @change="changeSelectType"
          >
            <el-option
              v-for="item in searchTypeList"
              :key="item.vlaue"
              :label="item.name"
              :value="item.value"
            ></el-option>
          </el-select> -->
          <!-- <el-button
            slot="append"
            @click="gotoSearch"
            class="searchItem searchBtn"
            >搜索</el-button
          > -->
        </el-input>
        <div class="loginInfoBox">
          <div v-if="!userInfo" class="loginBtnBox">
            <a
              @click="
                () => {
                  $router.push({
                    path: '/register',
                  });
                }
              "
              >注册</a
            >
            |
            <a
              @click="
                () => {
                  $router.push({
                    path: '/login',
                    query: {
                      redirectPath: $route.fullPath,
                    },
                  });
                }
              "
              >登录</a
            >
          </div>
          <div v-else class="userInfoBox">
            <el-dropdown @command="handleCommand">
              <span style="cursor: pointer">欢迎您,{{ userInfo.name }}!</span>
              <el-dropdown-menu slot="dropdown">
                <el-dropdown-item
                  icon="el-icon-user"
                  command="gotoPersonalCenter"
                  >个人中心</el-dropdown-item
                >
                <el-dropdown-item icon="el-icon-switch-button" command="logout"
                  >退出登录</el-dropdown-item
                >
              </el-dropdown-menu>
            </el-dropdown>
          </div>
        </div>
      </div>
    </div>
    <div class="contentBox navBox" v-show="!hideNav">
      <div
        :class="{
          navItem: true,
          active: $route.fullPath.indexOf(item.path) > -1,
        }"
        v-for="(item, index) in navData"
        :key="index"
        @click="gotoPage(item)"
      >
        {{ item.name }}
      </div>
    </div>
  </div>
</template>
<script>
import { mapState } from "vuex";
export default {
  name: "pageHeader",
  props: {
    hideNav: {
      type: Boolean,
      default: false,
    },
    hideSerch: {
      type: Boolean,
      default: false,
    },
  },
  data() {
    return {
      searchKey: "",
      searchType: "projectTitle",
      searchTypeList: [
        {
          name: "书名",
          value: "bookName",
        },
        {
          name: "书号",
          value: "isbn",
        },
        {
          name: "作者",
          value: "author",
        },
        {
          name: "立项冠名",
          value: "projectTitle",
        },
      ],
      navData: [
        {
          name: "首页",
          path: "/home",
        },
        {
          name: "教育出版",
          path: "/bookStore",
        },
        {
          name: "读者服务",
          path: "/teachingServices",
        },
        // {
        //   name: "资讯中心",
        //   path: "/informationCenter",
        // },
        // {
        //   name: "作者服务",
        //   path: "/authorServices",
        // },
        {
          name: "关于我们",
          path: "/aboutUs",
        },
      ],
    };
  },
  computed: {
    ...mapState(["userInfo"]),
  },
  methods: {
    //切换搜索类型
    changeSelectType(val) {
      this.searchKey = "";
    },
    gotoPage(item) {
      this.searchKey = "";
      if (item.path) {
        if (item.path == "/bookStore") {
          console.log(1);
          this.$store.commit("delKeepAlive", "bookStore-index");
        } else if (item.path == "/teachingServices") {
          this.$store.commit("delKeepAlive", "teachingServices-index");
        }
        this.$router.push({
          path: item.path,
        });
      } else {
        this.$message({
          message: "建设中...",
          type: "warning",
        });
      }
    },
    gotoSearch() {
      let query = {
        searchType: this.searchType,
        searchValue: this.searchKey,
      };
      if (this.$route.path.indexOf("/teachingServices") > -1) {
        query.searchPath = "caupress_teachingResource";
      }
      this.$router.push({
        name: "search",
        query: { ...query },
      });
    },
    handleCommand(command) {
      if (command == "gotoPersonalCenter") {
        this.$router.push({
          name: "personalCenter",
        });
      }
      if (command == "logout") {
        this.$store.dispatch("setToken", null);
        this.$store.dispatch("setUserInfo", null);
        this.$router.push({
          name: "home",
        });
      }
    },
  },
};
</script>
<style lang="less" scoped>
.pageHeader {
  width: 100%;
  background-color: #fff;
  border-bottom: 1px solid #e6e6e6;
  .topBar {
    background: #e6e6e6;
    color: #808080;
    overflow: hidden;
    padding: 14px 0;
    p {
      float: left;
    }
    .loginInfoBox {
      float: right;
      .loginBtnBox {
        a {
          cursor: pointer;
          text-decoration: none;
          color: inherit;
          margin: 0 4px;
        }
      }
    }
  }
  .logoBox {
    padding: 25px 0;
    overflow: hidden;
    max-width: 1200px !important;
    .logo {
      float: left;
      height: 66px;
      img {
        height: 100%;
        cursor: pointer;
      }
    }
    .searchBox {
      width: 670px;
      float: right;
      padding-right: 10px;
      line-height: 66px;
      display: flex;
      justify-content: space-between;
      .searchItem {
        width: 120px;
        vertical-align: initial;
      }
      .searchBtn {
        width: auto;
        background: #144941;
        color: #fff;
        padding: 0 20px;
        height: 40px;
      }
    }
  }
  .navBox {
    .navItem {
      display: inline-block;
      width: 120px;
      height: 50px;
      text-align: center;
      line-height: 50px;
      font-size: 16px;
      cursor: pointer;
      &.active {
        background: #144941;
        color: #fff;
      }
    }
  }
}
</style>
<style>
.pageHeader .searchBox .el-input-group__prepend {
  background: #fff;
  color: #444;
}
</style>
src/layout/index.vue
New file
@@ -0,0 +1,48 @@
<template>
  <div class="homeLayoutBox">
    <PageHeader
      :hideNav="$route.name == 'register' || $route.name == 'login'"
      :hideSerch="$route.name == 'register' || $route.name == 'login'"
      v-if="!$route.meta.noWrapHeadFooter"
    ></PageHeader>
    <div class="pageContentBox">
      <keep-alive v-if="keepAliveList.length > 0" :include="keepAliveList">
        <router-view />
      </keep-alive>
      <router-view v-else />
    </div>
    <PageFooter v-if="!$route.meta.noWrapHeadFooter"></PageFooter>
  </div>
</template>
<script>
import PageHeader from "./components/header";
import PageFooter from "./components/footer";
import { mapState } from "vuex";
export default {
  components: {
    PageHeader,
    PageFooter
  },
  computed: {
    ...mapState(["keepAliveList"])
  },
  watch: {
    $route(to, from) {
      if (to.meta.keepAlive && this.keepAliveList.indexOf(to.name) == -1) {
        // this.$store.commit("addKeepAlive", to.name);
      }
    }
  }
};
</script>
<style lang="less" scoped>
.homeLayoutBox {
  width: 100%;
  height: 100%;
  .pageContentBox {
    min-height: calc(100% - 447px);
  }
}
</style>
src/main.js
New file
@@ -0,0 +1,71 @@
import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store";
// è‡ªå®šä¹‰é…ç½®
import "@/assets/iconfont/iconfont.css";
import config from "@/assets/js/config";
Vue.prototype.config = config;
// axios
import service from "@/plugin/axios";
Vue.prototype.request = service;
import {
  setNewView
} from "@/assets/js/userAction"
Vue.prototype.setNewView = setNewView;
// ElementUI
import ElementUI from "element-ui";
import "@/assets/theme/index.css";
Vue.use(ElementUI);
import {
  tokenKey
} from "@/assets/js/config";
//工具类
import tool from "@/assets/js/toolClass";
Vue.prototype.tool = tool;
// è·¯ç”±åˆ¤æ–­ç™»å½• æ ¹æ®è·¯ç”±é…ç½®æ–‡ä»¶çš„参数
router.beforeEach((to, from, next) => {
  if (to.matched.some((record) => record.meta.authentication)) {
    // åˆ¤æ–­è¯¥è·¯ç”±æ˜¯å¦éœ€è¦ç™»å½•权限
    if (tool.getCookie(tokenKey)) {
      // åˆ¤æ–­å½“前的token是否存在 ï¼› ç™»å½•存入的token
      if (to.path === "/login") {
        tool.delCookie(tokenKey);
        // removeToken();
        window.location.reload();
      } else {
        next();
      }
    } else {
      next({
        path: "/login",
        query: {
          redirect: to.fullPath
        }, // å°†è·³è½¬çš„路由path作为参数,登录成功后跳转到该路由
      });
    }
  } else {
    next();
  }
});
// è¯·æ±‚处理
import MG from "@/assets/js/middleGround/WebMiddleGroundApi";
Vue.prototype.MG = MG;
// æ—¶é—´å¤„理
import moment from "moment";
Vue.prototype.moment = moment;
Vue.config.productionTip = false;
new Vue({
  router,
  store,
  render: (h) => h(App),
}).$mount("#app");
src/plugin/axios/index.js
New file
@@ -0,0 +1,74 @@
import axios from "axios";
import myConfig from "@/assets/js/config";
import toolClass from "@/assets/js/toolClass";
import { Message } from "element-ui";
import router from "@/router";
// åˆ›å»º axios å®žä¾‹
const service = axios.create({
  baseURL: myConfig.requestCtx,
  timeout: myConfig.requestTimeOut, // è¯·æ±‚è¶…æ—¶æ—¶é—´
});
// è¯·æ±‚拦截器
service.interceptors.request.use(
  (config) => {
    let token = toolClass.getCookie(myConfig.tokenKey);
    if (token) config.headers["Authorization"] = `bearer ${token}`;
    return config;
  },
  (error) => {
    // å‘送失败
    Promise.reject(error);
  }
);
// å“åº”拦截器
service.interceptors.response.use(
  (response) => {
    // dataAxios æ˜¯ axios è¿”回数据中的 data
    const dataAxios = response.data;
    const { success } = dataAxios;
    if (dataAxios.currentDate) {
      sessionStorage.currentDate = new Date(dataAxios.currentDate).getTime();
    }
    // æ ¹æ® code è¿›è¡Œåˆ¤æ–­
    if (success) {
      // å¤„理上传文件
      if (dataAxios.msg == "文件上传成功") {
        return dataAxios.msg;
      }
      // å¦‚果返回值为 å¸ƒå°”(Boolean)类型,直接返回即可(例如:更改绑定手机号)
      if (typeof dataAxios.data == "boolean") {
        return dataAxios.data;
      }
      return dataAxios.data ? dataAxios.data : dataAxios.result;
    } else {
      // æç¤ºé”™è¯¯
      console.error(dataAxios.msg);
    }
  },
  (error) => {
    if (error.response && error.response.status == 401) {
      toolClass.delCookie(myConfig.tokenKey);
      toolClass.delCookie(myConfig.userInfoKey);
      router.replace({
        path: "/login",
      });
    } else {
      if (error.response && error.response.data && error.response.data) {
        console.error(error.response.data.msg);
        Message({
          message: error.response.data.msg,
          type: "error",
        });
      } else {
        console.error("请求发生错误");
      }
    }
    return Promise.reject(error);
  }
);
export default service;
src/router/index.js
New file
@@ -0,0 +1,149 @@
import Vue from "vue";
import VueRouter from "vue-router";
import HomeLayout from "@/layout";
import Home from "@/views/home";
import Search from "@/views/home/search";
import bookStore from "./modules/bookStore";
import teachingServices from "./modules/teachingServices";
import informationCenterRouter from "./modules/informationCenter";
import aboutUs from "./modules/aboutUs";
import preview from "./modules/preview"
import baseLayout from "@/layout/base";
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}
Vue.use(VueRouter);
const routes = [{
  path: "/",
  name: "HomeLayout",
  component: HomeLayout,
  redirect: {
    name: "home"
  },
  children: [
    // åœ¨ä¸»æ¡†æž¶å†…
    {
      path: "home",
      name: "home",
      meta: {
        name: "首页",
        authentication: false, // æ˜¯å¦éœ€è¦ç™»å½•验证
        keepAlive: false, // æ˜¯å¦éœ€è¦ç¼“å­˜
      },
      component: baseLayout,
      redirect: {
        name: "index"
      },
      children: [{
        path: "index",
        name: "index",
        meta: {
          name: "首页",
          authentication: false, // æ˜¯å¦éœ€è¦ç™»å½•验证
          keepAlive: false, // æ˜¯å¦éœ€è¦ç¼“å­˜
        },
        component: Home,
      },
      {
        path: "search",
        name: "search",
        meta: {
          name: "首页搜索",
          authentication: false, // æ˜¯å¦éœ€è¦ç™»å½•验证
          keepAlive: true, // æ˜¯å¦éœ€è¦ç¼“å­˜
        },
        component: Search,
      },
      ],
    },
    {
      path: "/login",
      name: "login",
      meta: {
        name: "登录",
        authentication: false,
      },
      component: () => import("@/views/login/login"),
    },
    {
      path: "/register",
      name: "register",
      meta: {
        name: "注册",
        authentication: false,
      },
      component: () => import("@/views/login/register"),
    },
    {
      path: "/personalCenter",
      name: "personalCenter",
      meta: {
        name: "个人中心",
        authentication: true,
      },
      component: () => import("@/views/personalCenter"),
    },
    {
      path: "/authorServices",
      name: "authorServices",
      meta: {
        name: "作者服务",
        authentication: false,
      },
      component: () => import("@/views/authorServices"),
    },
    {
      path: "/bindWeChat",
      name: "bindWeChat",
      meta: {
        name: "绑定微信",
        authentication: true,
      },
      component: () => import("@/views/bindWeChat"),
    },
    {
      path: "/bindWeChatBack",
      name: "bindWeChatBack",
      meta: {
        name: "绑定微信",
        authentication: true,
      },
      component: () => import("@/views/bindWeChat/success"),
    },
    {
      path: "/AdminLogin",
      name: "AdminLogin",
      meta: {
        name: "管理登录",
        noWrapHeadFooter: true,
      },
      component: () => import("@/views/login/adminLogin"),
    },
    ...bookStore,
    ...teachingServices,
    ...informationCenterRouter,
    ...aboutUs,
    ...preview
  ],
},
// ä¸åœ¨ä¸»æ¡†æž¶å†…
{
  path: "/findPassword",
  name: "findPassword",
  meta: {
    name: "登录",
  },
  component: () => import("@/views/login/findPassword"),
},
];
const router = new VueRouter({
  routes,
});
export default router;
src/router/modules/aboutUs.js
New file
@@ -0,0 +1,26 @@
import baseLayout from "@/layout/base";
const aboutUsRouter = [
  {
    path: "/aboutUs",
    name: "aboutUs",
    redirect: { name: "aboutUs-index" },
    component: baseLayout,
    meta: {
      name: "关于我们",
      authentication: false,
    },
    children: [
      {
        path: "index",
        name: "aboutUs-index",
        meta: {
          name: "关于我们",
          authentication: false,
        },
        component: () => import("@/views/aboutUs/index"),
      },
    ],
  },
];
export default aboutUsRouter;
src/router/modules/bookStore.js
New file
@@ -0,0 +1,45 @@
import baseLayout from "@/layout/base";
const bookStoreRouter = [
  {
    path: "/bookStore",
    name: "bookStore",
    redirect: { name: "bookStore-index" },
    component: baseLayout,
    meta: {
      name: "书城",
      authentication: false
    },
    children: [
      {
        path: "index",
        name: "bookStore-index",
        meta: {
          name: "书城",
          authentication: false,
          keepAlive: true
        },
        component: () => import("@/views/bookStore/index")
      },
      {
        path: "detail",
        name: "bookStore-detail",
        meta: {
          name: "书城详情",
          authentication: false
        },
        component: () => import("@/views/bookStore/detail")
      },
      {
        path: "order",
        name: "bookStore-order",
        meta: {
          name: "确认订单",
          authentication: false
        },
        component: () => import("@/views/bookStore/order")
      }
    ]
  }
];
export default bookStoreRouter;
src/router/modules/informationCenter.js
New file
@@ -0,0 +1,35 @@
import baseLayout from "@/layout/base";
const informationCenterRouter = [
  {
    path: "/informationCenter",
    name: "informationCenter",
    redirect: { name: "informationCenter-index" },
    component: baseLayout,
    meta: {
      name: "咨询中心",
      authentication: false,
    },
    children: [
      {
        path: "index",
        name: "informationCenter-index",
        meta: {
          name: "咨询中心",
          authentication: false,
        },
        component: () => import("@/views/informationCenter/index"),
      },
      {
        path: "detail",
        name: "informationCenter-detail",
        meta: {
          name: "咨询详情",
          authentication: false,
        },
        component: () => import("@/views/informationCenter/detail"),
      },
    ],
  },
];
export default informationCenterRouter;
src/router/modules/preview.js
New file
@@ -0,0 +1,46 @@
import baseLayout from "@/layout/base";
const previewRouter = [{
    path: "/preview",
    name: "preview",
    redirect: {
        name: "preview-index"
    },
    component: baseLayout,
    meta: {
        name: "资源预览",
        authentication: false,
    },
    children: [{
            path: "pdf",
            name: "preview-pdf",
            meta: {
                name: "PDF预览",
                authentication: false,
                noWrapHeadFooter: true,
            },
            component: () => import("@/views/preview/pdf"),
        },
        {
            path: "audio",
            name: "preview-audio",
            meta: {
                name: "音频试听",
                authentication: false,
            },
            component: () => import("@/views/preview/audio"),
        },
        {
            path: "video",
            name: "preview-video",
            meta: {
                name: "视频试看",
                authentication: false,
            },
            component: () => import("@/views/preview/video"),
        },
    ]
}]
export default previewRouter;
src/router/modules/teachingServices.js
New file
@@ -0,0 +1,54 @@
import baseLayout from "@/layout/base";
const bookStoreRouter = [
  {
    path: "/teachingServices",
    name: "teachingServices",
    redirect: { name: "teachingServices-index" },
    component: baseLayout,
    meta: {
      name: "教学服务",
      authentication: false
    },
    children: [
      {
        path: "index",
        name: "teachingServices-index",
        meta: {
          name: "教学服务",
          authentication: false,
          keepAlive: true
        },
        component: () => import("@/views/teachingServices/index")
      },
      {
        path: "detail",
        name: "teachingServices-detail",
        meta: {
          name: "教学服务详情",
          authentication: false
        },
        component: () => import("@/views/teachingServices/detail")
      },
      {
        path:"applyBook-paper",
        name:"teachingServices-applyBook-paper",
        meta:{
          name:"纸质样书申请",
          authentication: false
        },
        component:() => import("@/views/teachingServices/applyBookPaper")
      },
      {
        path:"applyBook-electronic",
        name:"teachingServices-applyBook-electronic",
        meta:{
          name:"电子样书申请",
          authentication: false
        },
        component:() => import("@/views/teachingServices/applyBookElectronic")
      }
    ]
  }
];
export default bookStoreRouter;
src/store/index.js
New file
@@ -0,0 +1,123 @@
import Vue from "vue";
import Vuex from "vuex";
import tool from "@/assets/js/toolClass";
import { tokenKey, userInfoKey } from "@/assets/js/config";
Vue.use(Vuex);
export default new Vuex.Store({
  state: {
    token: tool.getCookie(tokenKey),
    userInfo: tool.getCookie(userInfoKey)
      ? JSON.parse(tool.getCookie(userInfoKey))
      : null,
    //书城浏览历史
    historyBook: [],
    //电子样书列表
    electronicBookList: [],
    //纸质样书申请列表
    paperCopiesList: [],
    keepAliveList: [],
  },
  getters: {},
  mutations: {
    changeLogin(state, val) {
      if (val) {
        state.token = val;
        tool.setCookie(tokenKey, val);
      } else {
        state.token = null;
        tool.delCookie(tokenKey);
      }
    },
    changeUserInfo(state, val) {
      if (val) {
        // é»˜è®¤å¤´åƒ
        // if (!val.icon)
        //   val.icon = require("@/assets/images/common/pageHeader/userIcon.png");
        state.userInfo = JSON.parse(JSON.stringify(val));
        tool.setCookie(userInfoKey, JSON.stringify(val));
      } else {
        state.userInfo = null;
        tool.delCookie(userInfoKey);
      }
    },
    //设置浏览记录
    setHistoryBook(state, val) {
      let currentIndex = "";
      if (state.historyBook.length > 0) {
        var res = state.historyBook.some((item, index) => {
          if (item.id == val.id) {
            currentIndex = index;
            return true;
          }
        });
        if (!res) {
          state.historyBook.unshift(val);
        } else {
          state.historyBook.splice(currentIndex, 1);
          state.historyBook.unshift(val);
        }
      } else {
        state.historyBook.unshift(val);
      }
    },
    //删除浏览记录
    deleteHistoryBook(state, val) {
      state.historyBook.splice(val, 1);
    },
    //增加电子样书
    addEbookList(state, val) {
      state.electronicBookList.push(val);
    },
    //增加纸质样书
    addPbookList(state, val) {
      state.paperCopiesList.push(val);
    },
    //删除电子样书
    deleteEbookList(state, val) {
      if (val == "all") {
        state.electronicBookList = [];
      } else {
        state.electronicBookList.splice(val, 1);
      }
    },
    //删除纸质样书
    deletePbookList(state, val) {
      if (val == "all") {
        state.paperCopiesList = [];
      } else {
        state.paperCopiesList.splice(val, 1);
      }
    },
    emptyBookList(state, val) {
      state.electronicBookList = [];
      state.paperCopiesList = [];
    },
    deleteAllHistory(state) {
      state.historyBook = [];
    },
    addKeepAlive(state, val) {
      state.keepAliveList.push(val);
      console.log("state", state.keepAliveList);
    },
    delKeepAlive(state, val) {
      if (state.keepAliveList.findIndex((item) => item == val) != -1) {
        state.keepAliveList.splice(
          state.keepAliveList.findIndex((item) => item == val),
          1
        );
      }
    },
  },
  actions: {
    setUserInfo(context, val) {
      context.commit("changeUserInfo", val);
    },
    setToken(context, val) {
      context.commit("changeLogin", val);
    },
  },
  modules: {},
});
src/views/aboutUs/index.vue
New file
@@ -0,0 +1,510 @@
<template>
  <div class="bgcfff">
    <div class="bannerBox">
      <div class="imgBox">
        <img src="@/assets/images/xiehe/about/about_bg.png" alt="" />
        <div class="bannerText">
          <div>中国协和医科大学出版社</div>
          <div class="enText">ABOUT US</div>
        </div>
      </div>
    </div>
    <div class="contentBox">
      <div class="crumbs">
        <el-breadcrumb separator-class="el-icon-arrow-right">
          <el-breadcrumb-item :to="{ name: 'home' }">首页</el-breadcrumb-item>
          <el-breadcrumb-item>关于我们</el-breadcrumb-item>
        </el-breadcrumb>
      </div>
      <div class="aboutUs">
        <div class="aboutTitle">
          <div class="titleBox1">
            <img
              class="autoImg"
              src="@/assets/images/xiehe/about/yinhao.png"
              alt=""
            />
          </div>
          <div class="titleText">Publisher Introduction</div>
        </div>
        <div class="textBox">
          <p>
            ä¸­å›½åå’ŒåŒ»ç§‘大学出版社(以下简称“协和出版社”)成立于
            <span class="colorText">1989</span> å¹´ï¼Œæ˜¯
            <span class="colorText"
              >国家卫生健康委主管、中国医学科学院北京协和医学院主办
              çš„大学出版社。</span
            >
          </p>
          <p>
            åå’Œå‡ºç‰ˆç¤¾çš„出版宗旨是,以积淀文化、弘扬思想为己任,面向医学科学前沿,面向医学教育,面向临床实践,面向大众健康,为学校、学术界及全社会提供高品质的内容产品,为协和的学术声誉增光添彩,为医学界提高医学学术水平做出实质性贡献,为中国公众提供权威的健康科普服务,最终为我国卫生健康事业发展发挥应有作用。
          </p>
          <p>
            å»ºç¤¾ä»¥æ¥ï¼Œåå’Œå‡ºç‰ˆç¤¾ç§‰æ‰¿åå’Œæ¯æ ¡ä¼˜ç§€çš„学术传统,坚守学术出版阵地,搭建高水平的学术传播平台,以“当好医生,读协和医书”为目标,铸造学术品牌,强化精品意识,倾力打造八大品类图书,包括教材教辅、医学专著、临床实用手册、辞书、卫生管理、医学人文、健康科普、工具类图书。不仅在提升医务人员职业能力、拓展专业视野以及助力执业资格考试方面发挥了重要作用,也为医学生夯实医学基础、掌握临床技能、提升科研素养提供了系统性支持,成为其成长过程中的重要学习资源,口碑相传,品牌既树。
          </p>
          <p>
            åå’Œå‡ºç‰ˆç¤¾ä½œä¸ºå…·æœ‰é«˜åº¦åŒ»å­¦ä¸“业性的国家级出版社,肩负着服务院校教材建设与课程建设的重要责任。未来,协和出版社将充分发挥专业优势,为图书出版、发行及宣传提供全方位、有力支持,推动医学教育事业不断发展。
          </p>
        </div>
        <div class="statisticsBox">
          <div class="statisticsItem">
            <div class="statisticsNum">
              35 <span class="circleBox">å¹´</span>
            </div>
            <div class="statisticsTitle">专注医学出版</div>
          </div>
          <div class="statisticsItem">
            <div class="statisticsNum">8000+ ä½</div>
            <div class="statisticsTitle">顶级专家库</div>
          </div>
          <div class="statisticsItem">
            <div class="statisticsNum">
              500+ <span class="circleBox">本</span>
            </div>
            <div class="statisticsTitle">累计出版教材教辅</div>
          </div>
          <div class="statisticsItem">
            <div class="statisticsNum">4 <span class="circleBox">本</span></div>
            <div class="statisticsTitle">学术期刊</div>
          </div>
          <div class="statisticsItem">
            <div class="statisticsNum">4 <span class="circleBox">本</span></div>
            <div class="statisticsTitle">学术期刊</div>
          </div>
        </div>
      </div>
    </div>
    <div class="brandCultureBox">
      <div class="brandCultureTop">
        <div class="CultureBox">
          <div class="brandCultureTitle">
            <div>理念与品牌文化</div>
            <div class="enText">Philosophy & Brand Culture</div>
          </div>
          <div class="cultureList">
            <div class="cultureItem firstItem">
              <div
                class="cultureTitle"
                style="border-bottom: 1px solid rgba(255, 255, 255, 0.1)"
              >
                <div class="leftIcon">
                  <img
                    class="autoImg"
                    src="@/assets/images/xiehe/about/zongzhi.png"
                    alt=""
                  />
                </div>
                <div class="titleTextInfo">
                  <div class="itemTitle" style="color: #fff">出版宗旨</div>
                  <div class="itemSubTitle" style="color: #fff">
                    Publishing Mission
                  </div>
                </div>
              </div>
              <div class="itemText" style="color: #d5d5d5">
                ä»¥ç§¯æ·€æ–‡åŒ–、弘扬思想为己任,聚焦医学科学前沿、医学教育、临床实践与大众健康,为建设健康中国贡献出版力量。
              </div>
            </div>
            <div class="cultureItem">
              <div class="cultureTitle">
                <div class="leftIcon">
                  <img
                    class="autoImg"
                    src="@/assets/images/xiehe/about/beijing.png"
                    alt=""
                  />
                </div>
                <div class="titleTextInfo">
                  <div class="itemTitle">出版宗旨</div>
                  <div class="itemSubTitle">Publishing Mission</div>
                </div>
              </div>
              <div class="itemText">
                ç”±å›½å®¶å«ç”Ÿå¥åº·å§”主管、中国医学科学院北京协和医学院主办,专注医学出版 35年,持续引领医学专业出版方向。
              </div>
            </div>
            <div class="cultureItem">
              <div class="cultureTitle">
                <div class="leftIcon">
                  <img
                    class="autoImg"
                    src="@/assets/images/xiehe/about/zizhi.png"
                    alt=""
                  />
                </div>
                <div class="titleTextInfo">
                  <div class="itemTitle">出版宗旨</div>
                  <div class="itemSubTitle">Publishing Mission</div>
                </div>
              </div>
              <div class="itemText">
                å¤šæ¬¡è£èŽ·â€œé«˜æ ¡ä¼˜ç§€å‡ºç‰ˆç¤¾â€â€œå…¨å›½è‰¯å¥½å‡ºç‰ˆç¤¾â€â€œå«ç”Ÿéƒ¨æ°å‡ºç§‘æŠ€è‘—ä½œçªå‡ºè´¡çŒ®å‡ºç‰ˆç¤¾â€ç­‰ç§°å·ï¼Œå‡ºç‰ˆå›¾ä¹¦å±¡èŽ· ä¸­å›½å‡ºç‰ˆæ”¿åºœå¥–、中华优秀出版物奖 ç­‰å›½å®¶çº§è£èª‰ã€‚
              </div>
            </div>
            <div class="cultureItem">
              <div class="cultureTitle">
                <div class="leftIcon">
                  <img
                    class="autoImg"
                    src="@/assets/images/xiehe/about/fazhan.png"
                    alt=""
                  />
                </div>
                <div class="titleTextInfo">
                  <div class="itemTitle">出版宗旨</div>
                  <div class="itemSubTitle">Publishing Mission</div>
                </div>
              </div>
              <div class="itemText">
                è‡´åŠ›äºŽä¸ºå­¦æ ¡ã€å­¦æœ¯ç•ŒåŠå…¨ç¤¾ä¼šæä¾›é«˜å“è´¨çš„åŒ»å­¦å†…å®¹äº§å“ï¼Œä¸ºåå’Œçš„å­¦æœ¯å£°èª‰å¢žå…‰æ·»å½©ï¼Œä¸ºåŒ»å­¦ç•Œæå‡å­¦æœ¯æ°´å¹³æä¾›å®žè´¨æ”¯æŒï¼Œä¸ºä¸­å›½å…¬ä¼—æä¾›æƒå¨å¥åº·ç§‘æ™®æœåŠ¡ï¼Œä¸ºæˆ‘å›½å«ç”Ÿå¥åº·äº‹ä¸šæŒç»­å‘å±•è´¡çŒ®åå’ŒåŠ›é‡ã€‚
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
import { requestCtx } from "@/assets/js/config";
export default {
  name: "home",
  components: {},
  data() {
    return {
      bannerList: [],
      tabsSelected: 0,
      tabSelect: [
        {
          name: "出版社概括",
          path: "caupress_pressOverview",
        },
        {
          name: "组织架构",
          path: "caupress_organization",
        },
        {
          name: "荣誉奖励",
          path: "caupress_honorAward",
        },
        {
          name: "大事记",
          path: "caupress_majorEvents",
        },
        {
          name: "联系方式",
          path: "caupress_contact",
        },
        {
          name: "招纳贤士",
          path: "caupress_recruit",
        },
      ],
      contentList: [],
      reLoading: true,
      contentIndex: 0,
      paginationData: {
        page: 1,
        totalCount: 0,
        limit: 5,
        totalPage: 0,
      },
      screenheight: document.documentElement.clientWidth / 2.628,
    };
  },
  created() {
    window.onresize = () => {
      let c = 2.628;
      if (document.documentElement.clientWidth >= 1220) {
        this.screenheight = document.documentElement.clientWidth / c;
      }
    };
    // ä»Žå…³äºŽæˆ‘们详情页跳转回来,选中大事记
    if (this.$route.query.aboutUs) {
      this.tabsSelected = this.$route.query.aboutUs;
    }
    this.getBanner();
    this.getData();
  },
  watch: {
    $route: {
      handler: function (val, oldval) {
        console.log(val, "val");
        if (val.query.aboutUs || val.query.aboutUs == 0) {
          scrollTo(0, 0);
          this.tabsSelected = val.query.aboutUs;
          this.getData();
        }
      },
      deep: true,
    },
  },
  methods: {
    bannerLink(val) {
      if (val.caupress_link) {
        window.open(val.caupress_link);
      }
    },
    selectTab(val) {
      this.paginationData.page = 1;
      this.$router.replace({
        name: "aboutUs",
        query: {
          aboutUs: val,
        },
      });
    },
    getBanner() {
      this.MG.resource
        .getItem({
          path: "caupress_banner\\caupress_about",
          fields: {
            caupress_link: [],
          },
          coverSize: {
            height: 750,
          },
          paging: {
            start: 0,
            size: 999,
          },
        })
        .then((res) => {
          this.bannerList = res.datas;
        });
    },
    getData() {
      this.reLoading = true;
      let path = "caupress_aboutUs\\" + this.tabSelect[this.tabsSelected].path;
      let { limit, page } = this.paginationData;
      this.MG.resource
        .getItem({
          path: path,
          fields: {
            caupress_content: [],
            caupress_author: [],
            caupress_file: [],
            caupress_detailedAddress: [],
            caupress_publishDate: [],
          },
          paging: {
            start: limit * page - limit,
            size: limit,
          },
        })
        .then((res) => {
          this.contentList = res.datas;
          this.paginationData.totalCount = res.total;
          this.reLoading = false;
        });
    },
    downloading(md5) {
      let url = requestCtx + "/file/api/ApiDownload/?md5=" + md5;
      window.open(url, "_blank");
    },
    toDetail(linkInfo) {
      this.$router.push({
        name: "informationCenter-detail",
        query: {
          type: "aboutUs",
          path: linkInfo[0].LinkPath,
          id: linkInfo[0].ChildrenId,
        },
      });
    },
  },
};
</script>
<style lang="less" scoped>
.autoImg {
  max-height: none;
}
.bgcfff {
  min-width: 1220px;
  background-color: #fff;
  .bannerBox {
    background: #f3f3f3;
    position: relative;
  }
  .imgBox {
    position: relative;
    width: 100%;
    height: 100%;
  }
  .bannerText {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    font-size: 36px;
    font-weight: 700;
    color: #fff;
    text-shadow: 0px 0px 10px #000000;
    text-align: center;
  }
  .enText {
    font-size: 36px;
    opacity: 0.45;
    margin-top: 20px;
  }
  .contentBox {
    background-color: #fff;
    padding-bottom: 100px;
    margin-top: 35px;
    .aboutUs {
      width: 100%;
      font-size: 16px;
      border-top: 1px solid #ededed;
      margin-top: 40px;
      .aboutTitle {
        display: flex;
        width: 100%;
        padding-top: 30px;
        .titleBox1 {
          position: relative;
          width: 50px;
          height: 50px;
          margin-right: 20px;
        }
        .titleText {
          font-size: 48px;
          font-weight: 700;
          opacity: 0.05;
        }
      }
      .block {
        display: inline-block;
        width: 4px;
        height: 4px;
        margin-right: 10px;
        vertical-align: middle;
        background: #dadada;
      }
      .selected {
        background-color: #e7f9ef;
        .block {
          background-color: #008e3f;
        }
      }
      .title {
        padding: 0;
        font-weight: 700;
        text-align: center;
        background: #008e3f;
        color: #fff;
        line-height: 36px;
        border-bottom: 0;
      }
      div {
        cursor: pointer;
        // border-bottom: 1px dashed #ededed;
      }
      .colorText {
        color: #144941;
      }
      .textBox {
        line-height: 20px;
        p {
          margin-top: 30px;
        }
      }
    }
    .statisticsBox {
      display: flex;
      justify-content: space-between;
      margin-top: 80px;
      text-align: center;
      .statisticsNum {
        font-size: 48px;
      }
      .statisticsTitle {
        margin-top: 10px;
      }
      .circleBox {
        width: 26px;
        height: 26px;
        display: inline-block;
        font-size: 20px;
        line-height: 26px;
        color: #fff;
        background-color: #144941;
        border-radius: 50%;
      }
    }
  }
}
.brandCultureTop {
  background-image: url(@/assets/images/xiehe/about/wenhua_bg.png);
  width: 100%;
  height: 500px;
  padding-top: 55px;
}
.brandCultureTitle {
  font-size: 36px;
  color: #fff;
  font-weight: 700;
  text-align: center;
}
.cultureList {
  display: flex;
  justify-content: space-between;
  width: 100%;
  margin-top: 60px;
}
.cultureItem {
  width: 320px;
  height: 320px;
  background-color: #fff;
  margin-left: 30px;
  padding: 20px;
  box-sizing: border-box;
}
.firstItem {
  background-color: #144941;
  color: #fff;
  width: 320px;
  height: 320px;
  text-align: center;
  margin-left: 0px;
}
.CultureBox {
  width: 1200px;
  margin: 0 auto;
}
.leftIcon {
  width: 58px;
  height: 58px;
  position: relative;
}
.cultureTitle {
  display: flex;
  border-bottom: 1px solid #DEDEDE;
  padding-bottom: 16px;
}
.titleTextInfo {
  margin-left: 20px;
  text-align: left;
}
.itemTitle {
  font-size: 18px;
  font-weight: 700;
  line-height: 36px;
  color: #333;
}
.itemSubTitle {
  color: #000;
  opacity: 0.5;
}
.itemText {
  font-size: 16px;
  line-height: 28px;
  color: #000;
  padding-top: 20px;
}
</style>
src/views/authorServices/index.vue
New file
@@ -0,0 +1,293 @@
<template>
  <div class="minWidth">
    <el-carousel :height="screenheight + 'px'" v-loading="bannerLoading">
      <template v-if="!bannerLoading">
        <el-carousel-item v-for="item in bannerList" :key="item.id">
          <div class="bannerBox imgBox" :style="item.caupress_link ? 'cursor: pointer' : ''">
            <img class="bannerImg" :src="item.icon" @click="bannerLink(item)" />
          </div>
        </el-carousel-item>
      </template>
    </el-carousel>
    <div class="contentBox">
      <div class="content">
        <div class="notice">
          å¦‚果您对我们的工作和服务有任何意见、建议,可填写一些内容进行反馈。为了是您的反馈得到即时回复和处理,请您务必完整填写以下信息。谢谢!
        </div>
        <div class="area">
          <el-form
            :model="form"
            ref="form"
            label-position="left"
            :rules="rules"
            label-width="130px"
          >
            <el-form-item label="姓名:" prop="name">
              <el-input
                v-model="form.name"
                placeholder="请输入您的姓名"
              ></el-input>
            </el-form-item>
            <el-form-item label="电话:" prop="phone">
              <el-input
                v-model="form.phone"
                placeholder="请输入您的电话"
              ></el-input>
            </el-form-item>
            <el-form-item label="邮箱:" prop="email">
              <el-input
                v-model="form.email"
                placeholder="请输入您的邮箱"
              ></el-input>
            </el-form-item>
            <el-form-item label="意见和建议:" prop="content">
              <el-input
                type="textarea"
                v-model="form.content"
                :autosize="{ minRows: 5, maxRows: 15 }"
                placeholder="请输入您的意见和建议"
              ></el-input>
            </el-form-item>
            <el-form-item label="图形验证码:" prop="imgCode">
              <div class="flex">
                <el-input
                  v-model="form.imgCode"
                  placeholder="请输入图形验证码"
                ></el-input>
                <div class="imgCodeBox">
                  <img :src="imgCode" alt="" @click="getImgCapcha" />
                </div>
              </div>
            </el-form-item>
            <el-form-item>
              <div
                class="addAddressButton greenButton"
                type="primary"
                @click="successful()"
              >
                æäº¤
              </div>
            </el-form-item>
          </el-form>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      form: {
        name: "",
        phone: "",
        email: "",
        content: "",
        imgCode: "",
      },
      rules: {
        name: [
          {
            required: true,
            message: "姓名为必填项,请输入您的姓名",
            trigger: "blur",
          },
        ],
        phone: [
          {
            required: true,
            message: "电话为必填项,请输入您的电话",
            trigger: "blur",
          },
          {
            pattern:
              /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/,
            message: "请输入正确手机号",
            trigger: "blur",
          },
        ],
        email: [
          { required: true, message: "请填写邮箱", trigger: "blur" },
          {
            pattern: /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
            message: "邮箱格式校验失败,请输入邮箱",
            trigger: "blur",
          },
        ],
        imgCode: [
          { required: true, message: "请填写图形验证码", trigger: "blur" },
        ],
        content: [
          { required: true, message: "请输入您的意见和建议", trigger: "blur" },
        ],
      },
      imgCode: "",
      bannerList: [],
      bannerLoading: false,
      screenheight: document.documentElement.clientWidth / 2.628,
    };
  },
  mounted() {
    window.onresize = () => {
      let c = 2.628;
      if (document.documentElement.clientWidth >= 1220) {
        this.screenheight = document.documentElement.clientWidth / c;
      }
    };
    if(!this.tool.getCookie(this.config.tokenKey)){
      this.$router.push({
          path: "/login",
          query: {
            redirectPath: this.$route.fullPath
          }
        });
    }
    this.getImgCapcha();
    this.getBanner();
  },
  methods: {
    bannerLink(val) {
      if (val.caupress_link) {
        window.open(val.caupress_link);
      }
    },
    getBanner() {
      this.bannerLoading = true;
      this.MG.resource
        .getItem({
          path: "caupress_banner\\caupress_authorServices",
          fields: {
            caupress_link: [],
          },
          coverSize: {
            height: 750,
          },
          paging: {
            start: 0,
            size: 999,
          },
        })
        .then((res) => {
          this.bannerLoading = false;
          this.bannerList = res.datas;
        });
    },
    getImgCapcha() {
      this.MG.identity.getImgCode().then((res) => {
        this.imgCode = "data:image/png;base64," + res;
      });
    },
    successful() {
      //
      this.$refs["form"].validate((valid) => {
        if (valid) {
          // åˆ¤æ–­å›¾å½¢éªŒè¯ç 
          let query = {
            captcha: this.form.imgCode,
          };
          this.MG.identity.verificationImgCode(query).then((res) => {
            if (res) {
              // æäº¤çš„æ•°æ®
              let submitData = {
                content: this.form.content,
                name: this.form.name,
                email: this.form.email,
                phone: this.form.phone,
              };
              const data = {
                topicIdOrRefCode: this.config.refCodes.Feedback,
                name: "意见反馈",
                content: JSON.stringify(submitData),
                state: "Normal",
                type: "worksApproval",
                cmsTypeRefCode: "",
                newDataListRequest: [],
              };
              this.MG.ugc.newTopicMessage(data).then((res) => {
                if (res) {
                  this.$message.success("反馈意见提交成功!");
                  this.form.name = "";
                  this.form.email = "";
                  this.form.phone = "";
                  this.form.content = "";
                  this.form.imgCode = "";
                }
              });
            } else {
              this.$message.error("图形验证码填写错误,请填写正确验证码");
            }
          });
        } else {
          return false;
        }
      });
    },
  },
};
</script>
<style lang="less" scoped>
.autoImg {
  max-height: none;
}
.minWidth {
  min-width: 1220px;
}
.bannerBox {
  background: #f3f3f3;
}
.imgBox {
  position: relative;
  width: 100%;
  height: 100%;
}
.contentBox {
  margin-top: 60px;
  margin-bottom: 60px;
  background-color: #ffffff;
  .content {
    background-color: #fff;
    padding: 20px 40px;
    .notice {
      font-size: 14px;
      line-height: 50px;
      background-color: #f2f7f4;
      border-radius: 4px;
      padding: 0 20px;
      color: #666666;
    }
    .area {
      width: 750px;
      margin: 0 auto;
      padding-top: 30px;
      .imgCodeBox {
        margin-left: 20px;
        height: 40px;
        width: 140px;
        cursor: pointer;
        img {
          width: 140px;
          height: 100%;
        }
      }
      .addAddressButton {
        width: 120px;
        height: 38px;
        border-radius: 4px;
        font-size: 16px;
        text-align: center;
        line-height: 40px;
        border: 1px solid #00873c;
        color: #101d16;
        cursor: pointer;
        margin: 0 auto;
        margin-top: 80px;
        margin-bottom: 120px;
      }
      .greenButton {
        color: #fff;
        background: linear-gradient(0deg, #00873c 0%, #00aa4c 100%);
      }
    }
  }
}
</style>
src/views/bindWeChat/index.vue
New file
@@ -0,0 +1,65 @@
<template>
  <div class="bingBox">
    <p class="title">微信绑定</p>
    <div class="qrcodeBox">
      <wxlogin
        :redirect_uri="wxLogin.redirectURL"
        style="
          width: 300px;
          height: 340px;
          margin: -40px auto 0;
          overflow: hidden;
        "
        :appid="wxLogin.appid"
        :scope="wxLogin.scope"
        state="WeChatScanningCodeBind"
      >
      </wxlogin>
    </div>
    <p class="tips">使用微信扫一扫扫描二维码进行绑定</p>
  </div>
</template>
<script>
import wxlogin from "vue-wxlogin";
export default {
  components: {
    wxlogin
  },
  data() {
    return {
      wxLogin: {
        appid: "wxad15251431e1f3fd",
        scope: "snsapi_login",
        redirectURL: encodeURIComponent(
          "https://www.caupress.com.cn/website/#/bindWeChatBack"
        )
      }
    };
  },
  created() {
    this.weChatBindFun();
  },
  methods: {
    weChatBindFun() {
      window.location.href = `https://open.weixin.qq.com/connect/qrconnect?appid=${this.wxLogin.appid}&scope=${this.wxLogin.scope}&redirect_uri=${this.wxLogin.redirectURL}&state=WeChatScanningCodeBind`
    },
  }
};
</script>
<style lang="less" scoped>
.title {
  text-align: center;
  font-size: 20px;
  padding-top: 50px;
  margin-bottom: 10px;
}
.qrcodeBox {
  overflow: hidden;
}
.tips{
  text-align: center;
  font-size: 14px;
  color: #666;
  margin-top: 10px;
}
</style>
src/views/bindWeChat/success.vue
New file
@@ -0,0 +1,117 @@
<template>
  <div>
    <div class="iconBox" v-if="state == 'loading'">
      <i class="el-icon-loading" style="color: #666"></i>
      <p>正在绑定微信...</p>
    </div>
    <div class="iconBox" v-if="state == 'success'">
      <i class="el-icon-success" style="color: #67c23a"></i>
      <p>绑定成功!</p>
      <p class="backBox">
        å³å°†è¿”回({{ time }}s)<el-button
          type="primary"
          size="mini"
          @click="goBack"
          >立即返回</el-button
        >
      </p>
    </div>
    <div class="iconBox" v-if="state == 'error'">
      <i class="el-icon-error" style="color: #f56c6c"></i>
      <p>绑定失败,该微信已被绑定!</p>
      <p class="backBox">
        å³å°†è¿”回({{ time }}s)<el-button
          type="primary"
          size="mini"
          @click="goBack"
          >立即返回</el-button
        >
      </p>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      state: "loading",
      time: 5
    };
  },
  created() {
    var url = window.location.href;
    if (url.indexOf("WeChatScanningCodeBind") > -1) {
      var querys = url.substring(url.indexOf("?") + 1).split("&");
      var result = {};
      for (var i = 0; i < querys.length; i++) {
        var temp = querys[i].split("=");
        if (temp.length < 2) {
          result[temp[0]] = "";
        } else {
          result[temp[0]] = temp[1];
        }
      }
      if (result && result.code) {
        this.MG.identity
          .bindingWeChat({
            code: result.code
          })
          .then((res) => {
            if (res) {
              this.state = "success";
            } else {
              this.state = "error";
            }
            this.setTime();
          });
      }
    }
    this.setTime();
  },
  methods: {
    setTime() {
      if (this.timer) clearInterval(this.timer);
      this.time = 5;
      this.timer = setInterval(() => {
        this.time--;
        if (this.time == 0) {
          this.goBack();
        }
      }, 1000);
    },
    goBack() {
      if (this.state == "success") {
        this.$router.push({
          path: "/personalCenter"
        });
      }
      if (this.state == "error") {
        this.$router.push({
          path: "/bindWeChat"
        });
      }
    }
  },
  beforeRouteLeave(to, form, next) {
    if (this.timer) clearInterval(this.timer);
    next();
  }
};
</script>
<style lang="less" scoped>
.iconBox {
  padding-top: 100px;
  text-align: center;
  i {
    font-size: 60px;
    margin-bottom: 30px;
  }
  p {
    font-size: 24px;
    margin-bottom: 50px;
  }
  .backBox {
    font-size: 14px;
  }
}
</style>
src/views/bookStore/detail.vue
New file
@@ -0,0 +1,215 @@
<template>
  <div style="background-color: #fff;" ref="contentData">
    <detailInfo :bookInfo="bookInfo" v-loading="loading"></detailInfo>
    <div class="contentBox" style="display: flex;">
      <div>
        <bookInfo :bookInfo="bookInfo" v-loading="loading" />
        <resource
          :bookInfo="bookInfo"
          :resourceSupportList="resourceSupportList"
          :allResource="allResource"
          v-loading="resourceLoading"
        />
      </div>
      <div>
        <relatedRecommendation
          :bookInfo="bookInfo"
          :recommendKey="recommendKey"
          @reloadPage="reloadPage"
          ref="rela"
        />
        <!-- <history @reloadPage="reloadPage" /> -->
      </div>
    </div>
  </div>
</template>
<script>
import config from "@/assets/js/config";
import detailInfo from "@/components/detail/detailInfo.vue";
import relatedRecommendation from "@/components/detail/relatedRecommendation.vue";
import bookInfo from "@/components/detail/bookInfo.vue";
import resource from "@/components/detail/resource.vue";
import history from "@/components/detail/history.vue";
export default {
  components: {
    detailInfo,
    relatedRecommendation,
    bookInfo,
    resource,
    // history,
  },
  created() {
    if (this.$route.query.id && this.$route.query.cmsPath) {
      this.currentId = this.$route.query.id;
      this.currentCmsId = this.$route.query.cmsPath;
      this.getData();
    }
    window.scrollTo(0, 0);
    this.getData();
  },
  data() {
    return {
      bookInfo: {},
      resourceSupportList: [],
      allResource: [],
      loading: true,
      resourceLoading: true,
      recommendKey: "",
    };
  },
  methods: {
    getData(data) {
      this.loading = true;
      let query = {
        path: "*",
        queryType: "*",
        productId: data ? data.id : this.$route.query.id,
        cmsPath: data ? data.rootCmsItemId : this.$route.query.cmsPath, //获取书籍文件夹
        fields: {
          caupress_author: [],
          caupress_content: [],
          caupress_seriesName: [],
          caupress_publicationDate: [],
          caupress_ISBN: [],
          caupress_pubNumber: [],
          caupress_authorAbout: [],
          caupress_recommendationReason: [],
          caupress_preface: [],
          caupress_catalog: [],
          caupress_pdfFreeFile: [],
          caupress_paperBookJD: [],
          caupress_paperBookDD: [],
          caupress_catalogue: [],
          caupress_projectTitle: [],
          caupress_pdfFile: [],
          caupress_contactEditor: [],
          caupress_paperBookTmall: [],
          caupress_isSell: [],
        },
        linkTypes: [
          // èŽ·å–å…³è”çš„ç¼–è¾‘ä¿¡æ¯
          {
            linkType: "caupress_editor",
            fields: {
              telephone: [],
              phone: [],
              qq: [],
            },
          },
        ],
      };
      // èŽ·å–ä¹¦ç±è¯¦æƒ…ä»¥åŠä¹¦ç±èµ„æºæ–‡ä»¶å¤¹
      this.MG.store.getProductDetail(query).then((res) => {
        console.log(res, "res");
        this.bookInfo = res.datas;
        if (this.bookInfo.caupress_catalogue) {
          this.bookInfo.caupress_catalogue = JSON.parse(
            this.bookInfo.caupress_catalogue
          );
          // èŽ·å–å±‚æ¬¡è¿›è¡Œç›¸å…³æŽ¨è
          this.recommendKey = this.bookInfo.caupress_catalogue[0];
          console.log(this.recommendKey, "this.recommendKey");
          if (this.recommendKey.length > 0) {
            this.catalogue = [];
            this.recommendKey.forEach((item, index) => {
              if (index == 0) {
                this.catalogue.push(item);
              } else {
                this.catalogue.push("&" + item);
              }
            });
          }
          this.$refs.rela.getData(this.catalogue);
        } else {
          this.recommendKey = "null";
        }
        // èŽ·å–å…³è”çš„ç¼–è¾‘ä¿¡æ¯
        let query = this.bookInfo.cmsDatas.find(
          (item) => item.queryTag == "QueryLink_" + "caupress_editor"
        );
        if (query && query.datas.length) {
          this.bookInfo.caupress_editor = {
            name: query.datas[0].name,
            telephone: query.datas[0].telephone,
            phone: query.datas[0].phone,
            qq: query.datas[0].qq,
          };
        }
        if (this.bookInfo.caupress_projectTitle) {
          this.bookInfo.caupress_projectTitle = JSON.parse(
            this.bookInfo.caupress_projectTitle
          );
        }
        if (this.bookInfo.caupress_projectTitle instanceof Array) {
          if (this.bookInfo.caupress_projectTitle.length > 1) {
            this.bookInfo.caupress_projectTitle =
              this.bookInfo.caupress_projectTitle.join("、");
          } else {
            this.bookInfo.caupress_projectTitle =
              this.bookInfo.caupress_projectTitle[0];
          }
        }
        this.bookInfo.VirtualPrice = this.bookInfo.saleMethod[0]?.VirtualPrice;
        this.bookInfo.caupress_seriesName =
          config.seriesList[this.bookInfo.caupress_seriesName];
        if (this.bookInfo.caupress_pubNumber) {
          this.bookInfo.caupress_pubNumber =
            this.bookInfo.caupress_pubNumber.split("_")[1];
        }
        this.loading = false;
        this.$store.commit("setHistoryBook", this.bookInfo);
        let folderList = res.datas.cmsDatas[0].datas;
        folderList.forEach((item) => {
          if (item.name == "配套资源") {
            this.MG.store
              .getProductDetail({
                path: "*",
                cmsPath: res.datas.rootCmsItemId + "\\" + item.id, //书籍文件夹ID获取文件夹中资源
                productId: this.currentId,
                queryType: "*",
                itemFields: {
                  caupress_fileType: [],
                  caupress_file: [],
                  caupress_allowDownload: [],
                },
              })
              .then((dataRes) => {
                console.log(dataRes, "resourceSupportList");
                this.resourceSupportList = dataRes.datas.cmsDatas[0].datas;
              });
          } else {
            this.MG.store
              .getProductDetail({
                path: "*",
                cmsPath: res.datas.rootCmsItemId + "\\" + item.id, //书籍文件夹ID获取文件夹中资源
                productId: this.currentId,
                queryType: "*",
                itemFields: {
                  caupress_fileType: [],
                  caupress_file: [],
                  caupress_allowDownload: [],
                },
              })
              .then((dataRes) => {
                console.log(dataRes, "allResource");
                this.allResource = dataRes.datas.cmsDatas[0].datas;
              });
          }
        });
        // èŽ·å–è”ç³»ç¼–è¾‘ä¿¡æ¯
        this.resourceLoading = false;
      });
    },
    reloadPage(data) {
      this.getData(data);
      window.scrollTo(0, 0);
    },
  },
};
</script>
<style></style>
src/views/bookStore/index.vue
New file
@@ -0,0 +1,134 @@
<template>
  <div class="minWidth">
    <el-carousel :height="screenheight + 'px'" v-show="bannerState">
      <el-carousel-item v-for="item in bannerList" :key="item.id">
        <div class="bannerBox imgBox" :style="item.caupress_link ? 'cursor: pointer' : ''">
          <img class="bannerImg" :src="item.icon" @click="bannerLink(item)" />
        </div>
      </el-carousel-item>
    </el-carousel>
    <div
      :class="!bannerState ? 'show stow' : 'stow'"
      @click="bannerState = !bannerState"
    >
      {{ bannerState ? "收起" : "显示" }}
      è½®æ’­å›¾
      <i
        :class="bannerState ? 'el-icon-caret-top' : 'el-icon-caret-bottom'"
      ></i>
    </div>
    <div class="contentBox">
      <List
        :channel="
          this.$route.query.searchPath
            ? this.$route.query.searchPath
            : 'caupress_bookMall'
        "
        :searchOptionHidden="searchOptionHidden"
        :detailRoute="detailRoute"
      ></List>
    </div>
  </div>
</template>
<script>
import List from "@/components/list";
export default {
  name: "bookStore-index",
  components: {
    List,
  },
  data() {
    return {
      bannerList: [],
      detailRoute: "bookStore-detail",
      searchOptionHidden: this.$route.query.searchOptionHidden
        ? this.$route.query.searchOptionHidden
        : false,
      bannerState: true,
      screenheight: document.documentElement.clientWidth / 2.628,
    };
  },
  created() {
    window.onresize = () => {
      let c = 2.628;
      if (document.documentElement.clientWidth >= 1220) {
        this.screenheight = document.documentElement.clientWidth / c;
      }
    };
    this.getBanner();
    setTimeout(() => {
      this.bannerState = false;
    }, 15000);
  },
  methods: {
    bannerLink(val) {
      if (val.caupress_link) {
        window.open(val.caupress_link);
      }
    },
    getBanner() {
      this.MG.resource
        .getItem({
          path: "caupress_banner\\caupress_mall",
          fields: {
            caupress_link: [],
          },
          coverSize: {
            height: 750,
          },
          paging: {
            start: 0,
            size: 999,
          },
        })
        .then((res) => {
          this.bannerList = res.datas;
        });
    },
  },
  // å¦‚果跳转页面不是详情,则将当前页面不缓存
  beforeRouteLeave(to, from, next) {
    if (to.name != "bookStore-detail") {
      this.$store.commit("delKeepAlive", from.name);
    }
    next();
  },
};
</script>
<style lang="less" scoped>
.autoImg {
  max-height: none;
}
.minWidth {
  min-width: 1220px;
}
.stow {
  width: 160px;
  margin: 0 auto;
  text-align: center;
  border: 1px solid #b3b3b3;
  font-size: 16px;
  line-height: 40px;
  border-radius: 21px;
  color: #b3b3b3;
  cursor: pointer;
  margin-top: 5px;
}
.show {
  margin-top: 20px;
}
.bannerBox {
  background: #f3f3f3;
}
.imgBox {
  position: relative;
  width: 100%;
  height: 100%;
}
.contentBox {
  background-color: rgb(241, 248, 244);
  margin-top: 20px;
}
</style>
src/views/bookStore/order.vue
New file
@@ -0,0 +1,189 @@
<template>
  <div class="orderPage">
    <div class="crumbs">
      <el-breadcrumb separator-class="el-icon-arrow-right">
        <el-breadcrumb-item :to="{ name: 'bookStore' }">书城</el-breadcrumb-item>
        <el-breadcrumb-item>确认订单</el-breadcrumb-item>
      </el-breadcrumb>
    </div>
    <div class="content">
      <el-table :data="tableData" style="width: 100%">
        <el-table-column prop="icon" label="封面" width="200">
          <template slot-scope="scope">
            <img :src="scope.row.icon" />
          </template>
        </el-table-column>
        <el-table-column prop="name" label="书籍名称"> </el-table-column>
        <el-table-column prop="price" label="金额">
          <template slot-scope="scope">
            <p style="color: red; font-weight: bold; font-size: 16px">
              <span>ï¿¥</span>{{ tool.toDecimal2(scope.row.price) }}
            </p>
          </template>
        </el-table-column>
      </el-table>
      <div class="confirmOrderBtn" v-if="orderData.state == 'Init'">
        <el-button @click="back()">返回</el-button>
        <el-button type="primary" @click="confirmOrder">确认订单</el-button>
      </div>
      <div class="payBox" v-if="orderData.state == 'WaitPay'">
        <div class="price">Â¥ {{ tool.toDecimal2(orderData.payPrice) }}</div>
        <div class="title">微信支付</div>
        <div class="code" id="qrcode" ref="qrCodeUrl"></div>
        <div lang="tips">
          è¯·ç”¨å¾®ä¿¡æ‰«æäºŒç»´ç è¿›è¡Œæ”¯ä»˜
        </div>
        <div class="btnBox">
          <el-button @click="back()">返回</el-button>
          <el-button type="primary" @click="isPay()">支付已完成</el-button>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
import { getPublicImage } from "@/assets/js/middleGround/tool";
import QRCode from "qrcodejs2"; // å¼•å…¥qrcode
export default {
  name: "order",
  components: {},
  data() {
    return {
      orderNum: this.$route.query.orderNum,
      orderData: {},
      tableData: []
    };
  },
  created() {
    this.getOrderInfo();
  },
  methods: {
    getOrderInfo() {
      this.MG.store
        .getOrderByOrderNum({
          orderNum: this.orderNum
        })
        .then((res) => {
          this.orderData = res;
          this.tableData.push({
            icon: getPublicImage(
              res.saleMethodLinks[0].orderSaleMethod.product.icon,
              150
            ),
            name: res.saleMethodLinks[0].orderSaleMethod.product.name,
            price: res.payPrice
          });
          if (res.state == 'WaitPay') {
            this.getWeChatCode();
          }
        });
    },
    confirmOrder() {
      this.MG.store
        .confirmOrder({
          orderNum: this.orderNum
        })
        .then((res) => {
          this.orderData = res;
          this.getWeChatCode();
        });
    },
    getWeChatCode() {
      this.MG.store
        .makeWeChatQrPay({
          orderNum: this.orderNum
        })
        .then((res) => {
          if (res) {
            this.createQrcode(res);
          }
        });
    },
    createQrcode(src) {
      let qrcode = new QRCode(this.$refs.qrCodeUrl, {
        width: 150,
        height: 150,
        text: src, // äºŒç»´ç åœ°å€
        colorDark: "#000",
        colorLight: "#fff"
      });
    },
    back() {
      this.$router.back();
    },
    isPay() {
      this.MG.store
        .getOrderByOrderNum({
          orderNum: this.orderNum
        })
        .then((res) => {
          if (res.state == "Success") {
            this.$message({
              message: "订单已完成!",
              type: "success"
            });
            this.$router.push({
              path: "/personalCenter",
              query: {
                tabsSelected: 3
              }
            });
          } else {
            this.$message.error("请先支付订单!");
          }
        });
    }
  }
};
</script>
<style lang="less" scoped>
.orderPage {
  width: 1200px;
  margin: 0 auto;
  .crumbs {
    padding: 35px 0;
  }
  .content {
    width: 100%;
    min-height: 500px;
    background: #fff;
    margin-bottom: 50px;
    padding: 40px;
    box-sizing: border-box;
    .confirmOrderBtn {
      margin-top: 50px;
      text-align: center;
    }
    .payBox {
      text-align: center;
      box-sizing: border-box;
      border: 1px solid #ddd;
      padding: 50px;
      .price {
        font-size: 25px;
        color: #ff721f;
        font-weight: bold;
        margin-bottom: 20px;
      }
      .title {
        font-size: 25px;
      }
      .code {
        width: 150px;
        margin: 50px auto;
        img {
          display: inline-block;
        }
      }
      .tips {
        font-size: 16px;
      }
      .btnBox {
        margin-top: 50px;
      }
    }
  }
}
</style>
src/views/home/index.vue
New file
@@ -0,0 +1,650 @@
<template>
  <div class="indexPage">
    <el-carousel :height="screenheight + 'px'">
      <el-carousel-item v-for="item in bannerList" :key="item.id">
        <div
          class="bannerBox imgBox"
          :style="item.caupress_link ? 'cursor: pointer' : ''"
        >
          <img
            id="autoHeight"
            class="bannerImg"
            :src="item.icon"
            @click="bannerLink(item)"
          />
        </div>
      </el-carousel-item>
    </el-carousel>
    <div class="bookListBox">
      <div class="contentBox">
        <div class="bookListTitle">
          <div class="title">推荐教材</div>
          <div class="more">更多></div>
        </div>
        <div class="recommendList">
          <div
            class="recommendItem"
            v-for="item in bookListData"
            :key="item.id"
          >
            <div class="recommendItemImg">
              <img class="autoImg" :src="item.icon" />
            </div>
            <div class="infoBox">
              <div class="bookName">{{ item.name }}</div>
              <div class="author">
                ä½œè€…:{{
                  item.authorcaupress_author ? item.caupress_author : "-"
                }}
              </div>
              <div class="priceBox">
                <span class="oldPrice" v-if="item.oldPrice"
                  >原价:¥{{ tool.toDecimal2(item.oldPrice) }}</span
                >
                <span class="price" v-if="item.price && item.price > 0">
                  å®šä»·ï¼šÂ¥
                  <span>{{ tool.toDecimal2(item.price) }}</span>
                </span>
                <span class="price" v-else>
                  å®šä»·ï¼š<span class="freePrice">免费</span>
                </span>
              </div>
            </div>
          </div>
        </div>
        <div class="funBox">
          <div class="authentication"></div>
          <div class="manual"></div>
        </div>
        <div class="bookListTitle">
          <div class="title">推荐教材</div>
          <div class="more">更多></div>
        </div>
        <div class="recommendList">
          <div
            class="recommendItem"
            v-for="item in bookListData"
            :key="item.id"
          >
            <div class="recommendItemImg">
              <img class="autoImg" :src="item.icon" />
            </div>
            <div class="infoBox">
              <div class="bookName">{{ item.name }}</div>
              <div class="author">
                ä½œè€…:{{
                  item.authorcaupress_author ? item.caupress_author : "-"
                }}
              </div>
              <div class="priceBox">
                <span class="oldPrice" v-if="item.oldPrice"
                  >原价:¥{{ tool.toDecimal2(item.oldPrice) }}</span
                >
                <span class="price" v-if="item.price && item.price > 0">
                  å®šä»·ï¼šÂ¥
                  <span>{{ tool.toDecimal2(item.price) }}</span>
                </span>
                <span class="price" v-else>
                  å®šä»·ï¼š<span class="freePrice">免费</span>
                </span>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  name: "home",
  data() {
    return {
      bannerList: [],
      informationData: [],
      noticeData: [],
      honorData: [],
      menuData: [],
      bookListData: [],
      bookListTotal: 0,
      bookListLoading: true,
      showMenuIndex: 0,
      screenheight: document.documentElement.clientWidth / 4,
    };
  },
  created() {
    window.onresize = () => {
      let c = 2.628;
      if (document.documentElement.clientWidth >= 1220) {
        this.screenheight = document.documentElement.clientWidth / c;
      }
    };
    var url = window.location.href;
    if (url.indexOf("WeChatScanningCodeLogin") > -1) {
      var querys = url.substring(url.indexOf("?") + 1).split("&");
      var result = {};
      for (var i = 0; i < querys.length; i++) {
        var temp = querys[i].split("=");
        if (temp.length < 2) {
          result[temp[0]] = "";
        } else {
          result[temp[0]] = temp[1];
        }
      }
      if (result && result.code) {
        this.MG.identity
          .loginByWeChatOpenCode({
            code: result.code,
            appRefCode: this.config.appRefCode,
            platform: "PCWeb",
          })
          .then((res) => {
            if (res && res.status == "Ok") {
              this.$store.dispatch("setToken", res.token);
              this.getUserInfo(() => {
                window.location.href = this.config.requestCtx;
              });
            }
          });
      } else {
        this.getBanner();
        this.getHonor();
        this.getBookMenu();
      }
    } else {
      this.getBanner();
      this.getHonor();
      this.getBookMenu();
    }
  },
  methods: {
    //点击轮播图跳转
    bannerLink(val) {
      if (val.caupress_link) {
        window.open(val.caupress_link);
      }
    },
    getUserInfo(callback) {
      this.MG.identity.getCurrentAppUser().then((res) => {
        // ç”¨æˆ·ä¿¡æ¯ä¼˜å…ˆçº§ï¼šæ•™å¸ˆè®¤è¯ > å¾®ä¿¡ > å­¦ç”Ÿï¼ˆæ³¨å†Œæ—¶é»˜è®¤ï¼‰
        if (res) {
          let teacherRole = res.roleLinks.find(
            (item) => item.role.refCode == "teacher"
          );
          let teacherInfo = res.infoList.find(
            (item) => item.type == "teacherInfo"
          );
          let wechatInfo = res.infoList.find((item) => item.type == "WeChat");
          let studentInfo = res.infoList.find((item) => item.type == "Default");
          let phoneInfo = res.secretList.find(
            (item) => item.type == "MobilePhone"
          );
          if (teacherRole && teacherInfo) {
            let data = {};
            try {
              data = JSON.parse(teacherInfo.data);
            } catch (error) {
              data = {};
            }
            this.$store.dispatch("setUserInfo", {
              ...data,
              name: data.fullName,
              phoneNumber: phoneInfo?.credential,
              role: "Teacher",
              roleId: teacherRole.role.id,
            });
          } else if (wechatInfo) {
            this.$store.dispatch("setUserInfo", {
              ...wechatInfo,
              phoneNumber: phoneInfo?.credential,
              role: "Student",
            });
          } else if (studentInfo) {
            this.$store.dispatch("setUserInfo", {
              ...studentInfo,
              phoneNumber: phoneInfo?.credential,
              role: "Student",
            });
          }
        }
        // æ¸…空本地储存的申请样书清单
        this.$store.commit("emptyBookList");
        callback();
      });
    },
    getBanner() {
      this.MG.resource
        .getItem({
          path: this.config.refCodes.index.banner,
          fields: {
            caupress_link: [],
          },
          coverSize: {
            height: 750,
          },
          paging: {
            start: 0,
            size: 999,
          },
        })
        .then((res) => {
          this.bannerList = res.datas;
        });
    },
    getHonor() {
      this.MG.resource
        .getItem({
          path: this.config.refCodes.index.honor,
          coverSize: {
            height: 200,
          },
          paging: {
            start: 0,
            size: 999,
          },
        })
        .then((res) => {
          this.honorData = res.datas;
        });
    },
    getBookMenu() {
      this.MG.store
        .getStoreChannelList({
          storeRefCode: this.config.goodsStore,
          path: this.config.refCodes.index.column,
          start: 0,
          size: 999,
        })
        .then((res) => {
          if (res.datas && res.datas.length) {
            this.menuData = res.datas;
            this.getBookList();
          }
        });
    },
    getBookList() {
      this.bookListLoading = true;
      this.MG.store
        .getProductList({
          path:
            this.config.refCodes.index.column +
            "\\" +
            this.menuData[this.showMenuIndex].refCode,
          paging: {
            start: 0,
            size: 5,
          },
          fields: {
            caupress_author: [],
            caupress_recommendationReason: [],
          },
          coverSize: {
            width: 150,
          },
        })
        .then((res) => {
          this.bookListData = res.datas;
          this.bookListTotal = res.total;
          this.bookListLoading = false;
        });
    },
    toInformation(selected) {
      this.$router.push({
        name: "informationCenter-index",
        query: {
          tabsSelected: selected,
        },
      });
    },
    toDetails(tabsSelected, linkInfo) {
      this.$router.push({
        name: "informationCenter-detail",
        query: {
          tabsSelected: tabsSelected,
          path: linkInfo[0].LinkPath,
          id: linkInfo[0].ChildrenId,
        },
      });
    },
    toDetail(row) {
      this.$router.push({
        name: "teachingServices-detail",
        query: { id: row.id, cmsPath: row.rootCmsItemId },
      });
    },
    // è·³è½¬è‡³åˆ—表页
    toList() {
      this.$router.push({
        path: "/teachingServices",
        query: {
          searchOptionHidden: true,
          searchPath:
            this.config.refCodes.index.column +
            "\\" +
            this.menuData[this.showMenuIndex].refCode,
        },
      });
    },
  },
};
</script>
<style lang="less" scoped>
@import "@/assets/css/theme.less";
.indexPage {
  min-width: 1220px;
  background-color: #fff;
  .bannerBox {
    background: #f3f3f3;
  }
  .imgBox {
    position: relative;
    width: 100%;
    height: 100%;
  }
  // æœ¬ç¤¾èµ„讯
  .informationBox {
    padding-right: 30px;
    border-right: 1px dashed #b3b3b3;
    .informationList {
      .informationItem {
        margin-bottom: 50px;
        cursor: pointer;
        .imgBox {
          position: relative;
          width: 150px;
          height: 90px;
          margin-right: 30px;
          background: #f2f2f2;
          .date {
            color: #999999;
            text-align: center;
            font-size: 30px;
            padding-top: 20px;
            .year {
              font-size: 17px;
              margin-top: 5px;
            }
          }
        }
        .infoBox {
          .title {
            font-size: 16px;
            color: #444444;
            margin-bottom: 20px;
            font-weight: bold;
            line-height: 1.5;
            cursor: pointer;
          }
          .detail {
            font-size: 12px;
            color: #444444;
            line-height: 2;
            display: -webkit-box;
            overflow: hidden;
            text-overflow: ellipsis;
            -webkit-box-orient: vertical;
            -webkit-line-clamp: 2;
          }
        }
      }
    }
  }
  // æœ¬ç¤¾é€šçŸ¥
  .noticeBox {
    width: 400px;
    padding-left: 30px;
    .noticeList {
      .noticeItem {
        margin-bottom: 40px;
        cursor: pointer;
        .indexBox {
          width: 60px;
          height: 60px;
          text-align: center;
          line-height: 60px;
          font-size: 36px;
          color: #b3b3b3;
          background: #f2f2f2;
          margin-right: 30px;
        }
        .infoBox {
          .title {
            font-size: 16px;
            color: #444444;
            height: 40px;
            line-height: 20px;
            margin-bottom: 8px;
            cursor: pointer;
            display: -webkit-box;
            overflow: hidden;
            text-overflow: ellipsis;
            -webkit-box-orient: vertical;
            -webkit-line-clamp: 2;
          }
          .date {
            font-size: 12px;
            color: #bcbcbc;
          }
        }
      }
    }
  }
  // ä¹¦ç±åˆ—表
  .bookListBox {
    width: 100%;
    padding: 80px 0;
    margin-top: 60px;
    background-repeat: no-repeat;
    background-size: 100% 100%;
    background-image: url("@/assets/images/tuijian-bg.png");
    background-repeat: no-repeat;
    background-size: 100% 42%;
    .contentBox {
      min-height: 776px;
    }
    .menuBox {
      width: 180px;
      border-right: 1px solid #d9d9d9;
      padding: 30px 0 30px;
      .menuItem {
        padding-left: 30px;
        border-right: 3px solid #fff;
        font-size: 16px;
        height: 40px;
        line-height: 40px;
        cursor: pointer;
        margin-bottom: 20px;
        &:hover {
          background: #f2f2f2;
        }
        &.active {
          color: @color;
          border-color: @color;
        }
      }
    }
    .bookList {
      padding: 40px;
      min-height: 826px;
      box-sizing: border-box;
      .bookItem {
        margin-bottom: 30px;
        cursor: pointer;
        .imgBox {
          width: 150px;
          height: 200px;
          border: 1px solid #e6e6e6;
        }
        .infoBox {
          margin-left: 30px;
          .title {
            color: #333333;
            font-size: 20px;
            margin-top: 14px;
            margin-bottom: 12px;
            font-weight: bold;
            cursor: pointer;
          }
          .author {
            color: #808080;
            margin-bottom: 20px;
          }
          .reasonBox {
            display: flex;
            line-height: 24px;
            font-size: 14px;
            color: #333333;
            margin-bottom: 20px;
            min-height: 72px;
            .reasonTxt {
              flex: 1;
              overflow: hidden;
              text-overflow: ellipsis;
              display: -webkit-box;
              -webkit-line-clamp: 3;
              -webkit-box-orient: vertical;
            }
          }
        }
      }
      .allList {
        width: 160px;
        height: 40px;
        line-height: 40px;
        font-size: 16px;
        background: #e5f3eb;
        color: @color;
        text-align: center;
        border-radius: 50px;
        margin: 10px auto;
        cursor: pointer;
      }
    }
  }
  .boxTitle {
    font-size: 18px;
    color: #333333;
    margin-bottom: 30px;
    font-weight: bold;
    span {
      float: right;
      font-size: 12px;
      color: #999999;
      line-height: 18px;
      cursor: pointer;
    }
  }
  .honorBox {
    margin-bottom: 60px;
  }
}
// æ¨¡å—标题
.blockTitle {
  text-align: center;
  font-size: 24px;
  font-weight: bold;
  margin-top: 60px;
  margin-bottom: 30px;
  span {
    display: inline-block;
    width: 60px;
    height: 6px;
    margin-top: 10px;
    background: @color;
  }
}
.bookListTitle {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 20px;
  .title {
    font-size: 20px;
    color: #333333;
    font-weight: bold;
  }
  .more {
    font-size: 14px;
    color: #999999;
    cursor: pointer;
  }
}
.recommendList {
  display: flex;
  padding-top: 20px;
  .recommendItem {
    flex: 1;
    margin-right: 20px;
    height: 300px;
    background-repeat: no-repeat;
    background-size: 100% 100%;
    cursor: pointer;
    border: 1px solid #dedede;
    background-color: #fff;
    padding-top: 10px;
    &:last-child {
      margin-right: 0;
    }
  }
}
.recommendItemImg {
  width: 150px;
  height: 200px;
  position: relative;
  margin: 0 auto;
}
.infoBox {
  text-align: center;
  margin-top: 10px;
}
.author {
  margin-top: 10px;
}
.priceBox {
  margin-top: 10px;
  .oldPrice {
    font-size: 16px;
    color: #444444;
    text-decoration: line-through;
    margin-right: 20px;
  }
  .price {
    span {
      font-weight: bold;
      font-size: 14px;
    }
  }
}
.funBox {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-top: 60px;
  margin-bottom: 60px;
  .authentication {
    width: 40%;
    height: 80px;
    background-repeat: no-repeat;
    background-size: 100% 100%;
    background-image: url("@/assets/images/xiehe/home/jiaoshirenzheng.png");
  }
  .manual {
    width: 40%;
    height: 80px;
    background-repeat: no-repeat;
    background-size: 100% 100%;
    background-image: url("@/assets/images/xiehe/home/jiaoshirenzheng.png");
  }
}
</style>
src/views/home/search.vue
New file
@@ -0,0 +1,116 @@
<template>
  <div class="contentBox">
    <div class="crumbs">
      <el-breadcrumb separator-class="el-icon-arrow-right">
        <el-breadcrumb-item :to="{ name: '/' }">首页</el-breadcrumb-item>
        <el-breadcrumb-item>搜索结果</el-breadcrumb-item>
      </el-breadcrumb>
    </div>
    <el-row>
      <el-button
        size="small"
        :type="defaultType == 1 ? 'primary' : ''"
        @click="switchType(1)"
        >教学服务</el-button
      >
      <el-button
        size="small"
        :type="defaultType == 2 ? 'primary' : ''"
        @click="switchType(2)"
        >书城</el-button
      >
    </el-row>
    <List
      :channel="channel"
      :searchFields="searchFields"
      :searchValue="searchValue"
      :detailRoute="detailRoute"
    ></List>
  </div>
</template>
<script>
import List from "@/components/list/data";
export default {
  name: "search",
  components: {
    List,
  },
  data() {
    return {
      searchFields: "",
      detailRoute: "bookStore-detail",
      channel: "caupress_bookMall",
      defaultType: 2, // é»˜è®¤æœç´¢ä¹¦åŸŽ
      searchValue: "",
    };
  },
  created() {
    this.searchValue = this.$route.query.searchValue;
  },
  methods: {
    switchType(type) {
      if (type == 1) {
        this.defaultType = 1;
        this.channel = "caupress_teachingResource";
        this.detailRoute = "teachingServices-detail";
      } else {
        this.defaultType = 2;
        this.channel = "caupress_bookMall";
        this.detailRoute = "bookStore-detail";
      }
    },
  },
  watch: {
    $route: {
      handler: function (val, oldval) {
        if (val.name == "search") {
          if (this.searchValue != this.$route.query.searchValue) {
            this.searchValue = this.$route.query.searchValue;
          }
          // å¦‚果搜索的选项卡位于教学服务,则默认搜索教学服务
          if (this.$route.query.searchPath == "caupress_teachingResource") {
            this.switchType(1);
          }
          switch (this.$route.query.searchType) {
            case "bookName":
              this.searchFields = "Name";
              break;
            case "isbn":
              this.searchFields = "caupress_ISBN";
              break;
            case "author":
              this.searchFields = "caupress_author";
              break;
            case "projectTitle":
              this.searchFields = "caupress_projectTitle";
              break;
          }
        }
      },
      immediate: true,
      deep: true,
    },
  },
  // å¦‚果跳转页面不是详情,则将当前页面不缓存
  beforeRouteLeave(to, from, next) {
    if (to.name != "teachingServices-detail" && to.name != "bookStore-detail") {
      this.$store.commit("delKeepAlive", from.name);
    }
    next();
  },
};
</script>
<style lang="less" scoped>
.contentBox {
  padding-bottom: 120px;
  .el-row {
    margin-bottom: 10px;
  }
  .crumbs {
    padding: 35px 0 25px 0;
    line-height: 70px;
  }
}
</style>
src/views/informationCenter/detail.vue
New file
@@ -0,0 +1,197 @@
<template>
  <div class="contentBox">
    <div class="crumbs">
      <el-breadcrumb separator-class="el-icon-arrow-right">
        <div v-if="this.$route.query.type == 'aboutUs'">
          <el-breadcrumb-item
            :to="{
              name: 'aboutUs-index',
            }"
            >关于我们</el-breadcrumb-item
          >
          <el-breadcrumb-item
            :to="{
              name: 'aboutUs-index',
              query: { aboutUs: 3 },
            }"
            >大事记</el-breadcrumb-item
          >
          <el-breadcrumb-item>{{ data.name }}</el-breadcrumb-item>
        </div>
        <div v-else>
          <el-breadcrumb-item :to="{ name: 'informationCenter-index' }"
            >本社资讯</el-breadcrumb-item
          >
          <el-breadcrumb-item
            :to="{
              name: 'informationCenter-index',
              query: { tabsSelected: this.$route.query.tabsSelected },
            }"
            >{{
              this.$route.query.tabsSelected == 0 ? "本社资讯" : "本社通知"
            }}</el-breadcrumb-item
          >
        </div>
      </el-breadcrumb>
    </div>
    <div class="bgcfff" v-loading="reLoading">
      <el-empty
        description="暂无数据"
        class="empty"
        :image-size="200"
        v-if="data.length == 0"
      ></el-empty>
      <div v-else>
        <div :title="data.name" class="tabs">
          <div>
            {{ data.name }}
          </div>
        </div>
        <div class="borderButtom"></div>
        <div class="wrap">
          <div class="author">
            <span v-if="data.caupress_publishDate">{{
              moment(data.caupress_publishDate).format("YYYY-MM-DD")
            }}</span>
            <span v-if="data.caupress_author"
              >作者:{{ data.caupress_author }}</span
            >
          </div>
          <div class="richTextBox" v-html="data.caupress_content"></div>
          <div class="attaText" v-if="fileList.length > 0">附件:</div>
          <div class="attachment" v-if="fileList.length > 0">
            <div
              class="itemBox"
              v-for="(item, index) in fileList"
              :key="index"
              @click="download(item)"
            >
              <div class="fileName">{{ item.FileList[0].FileName }}</div>
              <i class="el-icon-download"></i>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  name: "home",
  data() {
    return {
      data: [],
      reLoading: true,
      fileList: [],
    };
  },
  created() {
    scrollTo(0, 0);
    this.getData();
  },
  methods: {
    getData() {
      this.reLoading = true;
      let query = {
        path: this.$route.query.path,
        fields: {
          caupress_publishDate: [],
          caupress_author: [],
          caupress_content: [],
        },
        filterList: {
          caupress_file: [],
        },
        itemId: this.$route.query.id,
      };
      this.MG.resource.getItem(query).then((res) => {
        this.data = res.datas[0];
        console.log(JSON.parse(this.data.datas.caupress_file));
        if (this.data.datas.caupress_file) {
          this.fileList = JSON.parse(this.data.datas.caupress_file);
        }
        this.reLoading = false;
      });
    },
    download(item) {
      let url =
        this.config.requestCtx + "/file/api/ApiDownload?md5=" + item.Value;
      window.open(url, "_blank");
    },
  },
};
</script>
<style lang="less" scoped>
.attaText {
  margin-top: 50px;
}
.attachment {
  display: flex;
  align-items: center;
  margin-top: 10px;
  flex-flow: wrap;
  .itemBox {
    margin-left: 20px;
    margin-top: 20px;
    border: 2px solid #d8d8d8;
    padding: 10px;
    border-radius: 10px;
    display: flex;
    cursor: pointer;
    .fileName {
      width: 200px;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }
  }
}
.contentBox {
  padding-bottom: 120px;
  .crumbs {
    padding: 35px 0;
    line-height: 70px;
  }
  .bgcfff {
    background-color: #fff;
    .tabs {
      font-size: 30px;
      padding-top: 50px;
      padding-bottom: 30px;
      line-height: 50px;
      padding-left: 20px;
      padding-right: 20px;
      align-items: center;
      font-weight: 700;
      color: #999999;
      border-bottom: 2px solid #e6e6e6;
      text-align: center;
      color: #333333;
    }
    .borderButtom {
      width: 300px;
      margin: 0 auto;
      margin-top: -2px;
      border-bottom: 2px solid #00873c;
    }
    .wrap {
      min-height: 300px;
      padding: 0 20px 20px 20px;
      .author {
        text-align: right;
        line-height: 60px;
        color: #999999;
        font-size: 18px;
        letter-spacing: 0.45px;
        span {
          margin-left: 40px;
        }
      }
    }
  }
}
</style>
src/views/informationCenter/index.vue
New file
@@ -0,0 +1,337 @@
<template>
  <div class="minWidth">
    <el-carousel :height="screenheight + 'px'" v-loading="bannerLoading">
      <template v-if="!bannerLoading">
        <el-carousel-item v-for="item in bannerList" :key="item.id">
          <div class="bannerBox imgBox" :style="item.caupress_link ? 'cursor: pointer' : ''">
            <img class="bannerImg" :src="item.icon"  @click="bannerLink(item)"/>
          </div>
        </el-carousel-item>
      </template>
    </el-carousel>
    <div class="contentBox">
      <div class="tabs">
        <div
          :class="tabsSelected == 0 ? 'tabSelect' : ''"
          class="tab"
          @click="
            () => {
              this.tabsSelected = 0;
              this.getData();
            }
          "
        >
          <i class="el-icon-document"></i>
          æœ¬ç¤¾èµ„讯
        </div>
        <div class="division"></div>
        <div
          :class="tabsSelected == 1 ? 'tabSelect' : ''"
          class="tab"
          @click="
            () => {
              this.tabsSelected = 1;
              this.getData();
            }
          "
        >
          <i class="el-icon-bell"></i>
          æœ¬ç¤¾é€šçŸ¥
        </div>
      </div>
      <div class="list" v-loading="reLoading">
        <el-empty
          description="暂无数据"
          class="empty"
          :image-size="200"
          v-if="list.length == 0"
        ></el-empty>
        <div>
          <div
            class="listItem"
            v-for="(item, index) in list"
            :key="index"
            @click="gotoDetails(item.linkInfo)"
          >
            <div class="wrapImg">
              <div v-if="item.icon.includes('default')" class="date">
                <div>
                  {{
                    item.caupress_publishDate
                      ? moment(item.caupress_publishDate).format("DD")
                      : moment(item.createDate).format("DD")
                  }}
                </div>
                <div class="year">
                  {{
                    item.caupress_publishDate
                      ? moment(item.caupress_publishDate).format("YYYY-MM")
                      : moment(item.createDate).format("YYYY-MM")
                  }}
                </div>
              </div>
              <img v-else class="autoImg" :src="item.icon" alt="" />
            </div>
            <div>
              <p class="title ellipsis" :title="item.name">
                {{ item.name }}
              </p>
              <p class="introduce ellipsis" :title="item.description">
                {{ item.description }}
              </p>
              <div class="author">
                <span v-if="item.caupress_author">{{
                  item.caupress_author
                }}</span>
                <span>{{
                  item.caupress_publishDate
                    ? moment(item.caupress_publishDate).format("YYYY-MM-DD")
                    : moment(item.createDate).format("YYYY-MM-DD")
                }}</span>
              </div>
            </div>
          </div>
        </div>
      </div>
      <!-- åˆ†é¡µ -->
      <div class="pageinateBox" v-if="list.length > 0 && !reLoading">
        <el-pagination
          @size-change="
            (val) => {
              paginationData.limit = val;
              getData();
            }
          "
          @current-change="
            (val) => {
              paginationData.page = val;
              getData();
            }
          "
          background=""
          :current-page="paginationData.page - 0"
          :page-size="paginationData.limit"
          prev-text="上一页"
          next-text="下一页"
          layout="total, prev, pager, next, slot, jumper"
          :total="paginationData.totalCount"
        >
        </el-pagination>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  name: "home",
  data() {
    return {
      tabsSelected: this.$route.query.tabsSelected
        ? this.$route.query.tabsSelected
        : 0,
      list: [],
      paginationData: {
        page: 1,
        totalCount: 0,
        limit: 10,
        totalPage: 0,
      },
      bannerLoading: false,
      reLoading: true,
      bannerList: [],
      screenheight: document.documentElement.clientWidth / 2.628,
    };
  },
  created() {
    window.onresize = () => {
      let c = 2.628;
      if (document.documentElement.clientWidth >= 1220) {
        this.screenheight = document.documentElement.clientWidth / c;
      }
    };
    this.getBanner();
    this.getData();
  },
  methods: {
    bannerLink(val) {
      if (val.caupress_link) {
        window.open(val.caupress_link);
      }
    },
    getBanner() {
      this.bannerLoading = true;
      this.MG.resource
        .getItem({
          path: "caupress_banner\\caupress_informationCenterBanner",
          fields: {
            caupress_link: [],
          },
          coverSize: {
            height: 750,
          },
          paging: {
            start: 0,
            size: 999,
          },
        })
        .then((res) => {
          console.log(res);
          this.bannerLoading = false;
          this.bannerList = res.datas;
        });
    },
    getData() {
      this.reLoading = true;
      let { limit, page } = this.paginationData;
      let path =
        this.tabsSelected == 0
          ? "caupress_informationCenter\\caupress_information"
          : "caupress_informationCenter\\caupress_notice";
      let query = {
        path: path,
        paging: {
          start: limit * page - limit,
          size: limit,
        },
        sort: {
          CreateDate: "Desc",
        },
        coverSize: {
          height: 126,
        },
        fields: {
          caupress_publishDate: [],
          caupress_author: [],
        },
      };
      this.MG.resource.getItem(query).then((res) => {
        this.list = res.datas;
        console.log(this.list, "list");
        this.paginationData.totalCount = res.total;
        this.reLoading = false;
      });
    },
    gotoDetails(linkInfo) {
      this.$router.push({
        name: "informationCenter-detail",
        query: {
          tabsSelected: this.tabsSelected,
          path: linkInfo[0].LinkPath,
          id: linkInfo[0].ChildrenId,
        },
      });
    },
  },
};
</script>
<style lang="less" scoped>
.minWidth {
  min-width: 1220px;
}
.bannerBox {
  background: #f3f3f3;
}
.imgBox {
  position: relative;
  width: 100%;
  height: 100%;
}
.contentBox {
  background-color: #ffffff;
  margin-top: 60px;
  .tabs {
    display: flex;
    justify-content: space-evenly;
    font-size: 20px;
    line-height: 106px;
    align-items: center;
    font-weight: 700;
    color: #999999;
    border-bottom: 2px solid #e6e6e6;
    text-align: center;
    height: 104px;
    .tab {
      width: 300px;
      cursor: pointer;
    }
    .imgCenter {
      vertical-align: middle;
      margin: 0 5px;
    }
    .division {
      width: 1px;
      height: 18px;
      border-right: 1px solid #acabac;
    }
    .tabSelect {
      color: #333333;
      border-bottom: 2px solid #00873c;
    }
  }
  .list {
    padding: 20px;
    min-height: 400px;
    .listItem {
      margin: 50px 0;
      display: flex;
      font-size: 14px;
      color: #999999;
      cursor: pointer;
      position: relative;
      &:hover {
        .title {
          color: #00873c;
        }
      }
      .wrapImg {
        width: 210px;
        height: 126px;
        margin-right: 30px;
        position: relative;
        background: #f2f2f2;
        .date {
          text-align: center;
          font-size: 30px;
          padding-top: 40px;
          .year {
            font-size: 17px;
            margin-top: 5px;
          }
        }
      }
      .title {
        font-size: 18px;
        line-height: 30px;
        letter-spacing: 0.45px;
        font-weight: 400;
        margin-bottom: 20px;
        color: #555;
      }
      .introduce {
        width: 974px;
      }
      .author {
        position: absolute;
        bottom: 0;
        span {
          margin-right: 30px;
        }
      }
    }
  }
  .pageinateBox {
    text-align: center;
    background-color: rgb(241, 248, 244);
    padding: 40px 0;
    :deep(.el-pagination.is-background .btn-next) {
      padding: 0 10px;
    }
    :deep(.el-pagination.is-background .btn-prev) {
      padding: 0 10px;
    }
  }
}
</style>
src/views/login/adminLogin.vue
New file
@@ -0,0 +1,80 @@
<template>
  <div v-loading="loading" element-loading-text="正在登录"></div>
</template>
<script>
export default {
  data() {
    return {
      loading: true,
    };
  },
  created() {
    console.log(this.$route.query);
    this.$store.dispatch("setToken", this.$route.query.token);
    this.getUserInfo();
  },
  methods: {
    getUserInfo(callback) {
      this.MG.identity.getCurrentAppUser().then((res) => {
        // ç”¨æˆ·ä¿¡æ¯ä¼˜å…ˆçº§ï¼šæ•™å¸ˆè®¤è¯ > å¾®ä¿¡ > å­¦ç”Ÿï¼ˆæ³¨å†Œæ—¶é»˜è®¤ï¼‰
        if (res) {
          let teacherRole = res.roleLinks.find(
            (item) => item.role.refCode == "teacher"
          );
          let teacherInfo = res.infoList.find(
            (item) => item.type == "teacherInfo"
          );
          let wechatInfo = res.infoList.find((item) => item.type == "WeChat");
          let studentInfo = res.infoList.find((item) => item.type == "Default");
          let phoneInfo = res.secretList.find(
            (item) => item.type == "MobilePhone"
          );
          if (teacherRole && teacherInfo) {
            let data = {};
            try {
              data = JSON.parse(teacherInfo.data);
            } catch (error) {
              data = {};
            }
            this.$store.dispatch("setUserInfo", {
              ...data,
              name: data.fullName,
              phoneNumber: phoneInfo?.credential,
              role: "Teacher",
              roleId: teacherRole.role.id,
            });
          } else if (wechatInfo) {
            this.$store.dispatch("setUserInfo", {
              ...wechatInfo,
              phoneNumber: phoneInfo?.credential,
              role: "Student",
            });
          } else if (studentInfo) {
            this.$store.dispatch("setUserInfo", {
              ...studentInfo,
              phoneNumber: phoneInfo?.credential,
              role: "Student",
            });
          }
        }
        // æ¸…空本地储存的申请样书清单
        this.$store.commit("emptyBookList");
        this.loading = false;
        this.$router.push({
          path: this.$route.query.url
            ? decodeURIComponent(this.$route.query.url)
            : "/home",
        });
      });
    },
  },
};
</script>
<style lang="less" scoped>
div {
  margin: auto;
  height: 100vh;
}
</style>
src/views/login/findPassword.vue
New file
@@ -0,0 +1,402 @@
<template>
  <div class="loginPage">
    <div class="loginContent">
      <div class="loginFormBox">
        <div class="title">
          <span class="active">找回密码</span>
        </div>
        <!-- ç”¨æˆ·åå¯†ç ç™»å½• -->
        <div>
          <div class="loginContentBox">
            <div class="errorTips" v-if="errorTipsTxt">
              {{ errorTipsTxt }}
              <span
                v-if="loginFormType == 'password'"
                class="findPassword"
                @click="toFindPassword()"
                >找回密码</span
              >
            </div>
            <div class="codeLoginItemBox flex">
              <el-select
                style="width: 100px"
                class="mr10"
                placeholder="请选择"
                v-model="loginForm.region"
              >
                <el-option
                  v-for="item in options"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                ></el-option>
              </el-select>
              <el-input
                class="flex1"
                placeholder="请输入手机号"
                v-model="loginForm.mobilePhone"
                @keyup.enter.native="loginFun"
              ></el-input>
            </div>
            <div class="codeLoginItemBox flex">
              <el-input
                placeholder="请输入图形验证码"
                class="flex1 mr10"
                v-model="loginForm.imgCode"
              ></el-input>
              <div class="imgCode">
                <img :src="imgCode" alt="" @click="getImgCapcha" />
              </div>
            </div>
            <div class="codeLoginItemBox flex">
              <el-input
                placeholder="请输入验证码"
                class="flex1 mr10"
                v-model="loginForm.verificationCode"
                @keyup.enter.native="loginFun"
              ></el-input>
              <el-button
                style="width: 140px"
                @click="getVerifyCode"
                :disabled="countDown != 0"
                >{{
                  countDown == 0
                    ? "获取短信验证码"
                    : "验证码(" + countDown + "s)"
                }}</el-button
              >
            </div>
            <!-- <div class="loginItemBox" v-if="loginFormType == 'password'">
              <span>手机号</span>
              <el-input
                class="loginItemIpt"
                v-model="loginForm.mobilePhone"
                placeholder="请输入手机号"
                clearable
                @keyup.enter.native="loginFun"
              ></el-input>
            </div> -->
            <div class="loginItemBox">
              <span>新密码</span>
              <el-input
                class="loginItemIpt"
                v-model="loginForm.password"
                type="password"
                show-password
                placeholder="请输入密码"
                @keyup.enter.native="loginFun"
              ></el-input>
            </div>
            <div class="loginItemBox">
              <span>确认密码</span>
              <el-input
                class="loginItemIpt"
                v-model="loginForm.repetitionPassword"
                type="password"
                show-password
                placeholder="请输入确认密码"
                @keyup.enter.native="loginFun"
              ></el-input>
            </div>
            <div class="loginBtnBox">
              <el-button
                type="primary"
                class="loginBtn"
                @click="loginFun"
                :loading="loading"
                >重置密码</el-button
              >
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  name: "login",
  data() {
    return {
      redirectPath: "",
      loading: false,
      errorTipsTxt: "",
      loginFormType: "code",
      imgCode: "",
      loginForm: {
        region: "中国+86",
        mobilePhone: "",
        password: "",
        imgCode: "",
        verificationCode: "",
        repetitionPassword: "",
      },
      countDown: 0,
      options: [
        {
          value: "中国+86",
          label: "中国+86",
        },
      ],
    };
  },
  created() {
    this.redirectPath = this.$route.query.redirectPath;
    this.getImgCapcha();
  },
  methods: {
    getImgCapcha() {
      this.MG.identity.getImgCode().then((res) => {
        this.imgCode = "data:image/png;base64," + res;
      });
    },
    // èŽ·å–éªŒè¯ç 
    getVerifyCode() {
      if (!this.config.reg_tel.test(this.loginForm.mobilePhone)) {
        this.$message({
          message: "请输入正确格式的手机号!",
          type: "error",
        });
        return false;
      } else if (
        this.loginForm.imgCode == "" ||
        this.loginForm.imgCode.length != 4
      ) {
        this.$message({
          message: "请输入正确格式的图形验证码",
          type: "error",
        });
        return false;
      } else {
        this.MG.identity
          .getPhoneCode({
            phoneNumber: this.loginForm.mobilePhone,
            imageCaptcha: this.loginForm.imgCode,
            appRefCode: this.config.appRefCode,
          })
          .then((res) => {
            if (res == "验证码发送成功") {
              this.getSecond(60);
              this.$message({
                message: res,
                type: "success",
              });
            } else {
              this.$message({
                message: res,
                type: "error",
              });
              this.getImgCapcha();
            }
          });
      }
    },
    //验证码倒计时
    getSecond(time) {
      if (!this.timer) {
        this.countDown = time;
        this.timer = setInterval(() => {
          this.countDown--;
          if (this.countDown == 0) {
            clearInterval(this.timer);
            this.timer = null;
          }
        }, 1000);
      }
    },
    loginFun() {
      if (!this.loginForm.mobilePhone) {
        this.$message({
          message: "请输入手机号!",
          type: "error",
        });
        return false;
      }
      if (!this.loginForm.verificationCode) {
        this.$message({
          message: "请输入短信验证码!",
          type: "error",
        });
        return false;
      }
      if (!this.loginForm.password) {
        this.$message({
          message: "请输入密码!",
          type: "error",
        });
        return false;
      }
      if (this.loginForm.password != this.loginForm.repetitionPassword) {
        this.$message({
          message: "两次输入密码不一致!",
          type: "error",
        });
        return false;
      }
      this.loading = true;
      this.MG.identity
        .changePasswordByMobilePhone({
          phoneNumber: this.loginForm.mobilePhone,
          phoneCaptcha: this.loginForm.verificationCode,
          password: this.loginForm.password,
        })
        .then((res) => {
          this.loading = false;
          this.$message({
            message: "密码重置成功!",
            type: "success",
          });
          this.$router.push({
            path: "/login",
          });
        });
    },
  },
};
</script>
<style lang="less" scoped>
@import "@/assets/css/theme.less";
.loginPage {
  width: 100%;
  height: 100%;
  background-image: url("@/assets/images/login/pageBg.png");
  background-repeat: no-repeat;
  background-size: 100% 100%;
  position: relative;
  .loginContent {
    width: 1200px;
    height: 570px;
    position: absolute;
    top: 50%;
    left: 50%;
    margin-top: -285px;
    margin-left: -600px;
    padding: 36px 0;
    box-shadow: 0px 0px 66px 0px rgb(170 170 170 / 35%);
    background-image: url("@/assets/images/login/boxBg.png");
    background-repeat: no-repeat;
    background-size: 100% 100%;
    box-sizing: border-box;
    text-align: right;
    .loginFormBox {
      display: inline-block;
      width: 420px;
      height: 496px;
      padding: 30px 40px;
      margin-right: 60px;
      background: #fff;
      box-sizing: border-box;
      box-shadow: 0 0 5px 0 hsl(0deg 0% 67% / 35%);
      .title {
        font-size: 16px;
        text-align: center;
        color: #333333;
        span {
          display: inline-block;
          width: 80px;
          cursor: pointer;
          &.active {
            font-weight: bold;
            color: @color;
          }
        }
        .division {
          width: 5px;
          margin: 0 50px;
          cursor: initial;
          color: #d0d0d0;
        }
      }
      .loginContentBox {
        padding-top: 30px;
        margin-top: 20px;
        margin-bottom: 15px;
        position: relative;
        .errorTips {
          position: absolute;
          top: 8px;
          left: 10px;
          font-size: 12px;
          color: #e50021;
          .findPassword {
            cursor: pointer;
            color: #2b68cd;
            font-size: 12px;
          }
        }
        .codeLoginItemBox {
          margin-bottom: 15px;
          .imgCode {
            width: 140px;
            height: 40px;
            img {
              width: 100%;
              height: 100%;
              background: #efefef;
            }
          }
        }
        .loginItemBox {
          display: flex;
          justify-content: space-between;
          align-items: center;
          border-radius: 4px;
          margin-bottom: 15px;
          box-sizing: border-box;
          border: 1px solid #dcdfe6;
          span {
            display: inline-block;
            width: 100px;
            text-align: center;
          }
        }
        .changFormBtn {
          margin-bottom: 15px;
          overflow: hidden;
          span {
            cursor: pointer;
          }
        }
        .loginBtnBox {
          margin-bottom: 15px;
          .loginBtn {
            width: 100%;
          }
        }
        .registerBox {
          margin-top: 20px;
          font-size: 14px;
          text-align: center;
          color: #666666;
          span {
            cursor: pointer;
          }
          .division {
            margin: 0 20px;
            cursor: initial;
            color: #d0d0d0;
          }
        }
      }
      .wechatBox {
        .wxCodeBox {
          margin-top: 10px;
          height: 300px;
        }
      }
    }
  }
}
.mr10 {
  margin-right: 10px;
}
</style>
<style>
.loginItemIpt .el-input__inner {
  height: 38px;
  line-height: 38px;
  border: 0;
}
</style>
src/views/login/login.vue
New file
@@ -0,0 +1,545 @@
<template>
  <div class="loginPage">
    <div class="loginContent">
      <div class="loginFormBox">
        <div class="title">
          <span
            :class="{ active: !weChatLogin }"
            @click="
              () => {
                weChatLogin = false;
              }
            "
            >手机号登录</span
          >
          <span class="division">|</span>
          <span :class="{ active: weChatLogin }" @click="weChatLoginFun"
            >微信登录</span
          >
        </div>
        <!-- ç”¨æˆ·åå¯†ç ç™»å½• -->
        <div v-if="!weChatLogin">
          <div class="loginContentBox">
            <div class="errorTips" v-if="errorTipsTxt">
              {{ errorTipsTxt }}
              <span
                v-if="loginFormType == 'password'"
                class="findPassword"
                @click="toFindPassword()"
                >找回密码</span
              >
            </div>
            <div class="codeLoginItemBox flex" v-if="loginFormType == 'code'">
              <el-select
                style="width: 100px"
                class="mr10"
                placeholder="请选择"
                v-model="loginForm.region"
              >
                <el-option
                  v-for="item in options"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                ></el-option>
              </el-select>
              <el-input
                class="flex1"
                placeholder="请输入手机号"
                v-model="loginForm.mobilePhone"
                @keyup.enter.native="loginFun"
              ></el-input>
            </div>
            <div class="codeLoginItemBox flex" v-if="loginFormType == 'code'">
              <el-input
                placeholder="请输入图形验证码"
                class="flex1 mr10"
                v-model="loginForm.imgCode"
              ></el-input>
              <div class="imgCode">
                <img :src="imgCode" alt="" @click="getImgCapcha" />
              </div>
            </div>
            <div class="codeLoginItemBox flex" v-if="loginFormType == 'code'">
              <el-input
                placeholder="请输入验证码"
                class="flex1 mr10"
                v-model="loginForm.verificationCode"
                @keyup.enter.native="loginFun"
              ></el-input>
              <el-button
                style="width: 140px"
                @click="getVerifyCode"
                :disabled="countDown != 0"
                >{{
                  countDown == 0
                    ? "获取短信验证码"
                    : "验证码(" + countDown + "s)"
                }}</el-button
              >
            </div>
            <div class="loginItemBox" v-if="loginFormType == 'password'">
              <span>手机号</span>
              <el-input
                class="loginItemIpt"
                v-model="loginForm.mobilePhone"
                placeholder="请输入手机号"
                clearable
                @keyup.enter.native="loginFun"
              ></el-input>
            </div>
            <div class="loginItemBox" v-if="loginFormType == 'password'">
              <span>密码</span>
              <el-input
                class="loginItemIpt"
                v-model="loginForm.password"
                type="password"
                show-password
                placeholder="请输入密码"
                @keyup.enter.native="loginFun"
              ></el-input>
            </div>
            <div class="changFormBtn">
              <span
                v-if="loginFormType == 'password'"
                @click="() => (loginFormType = 'code')"
                >短信验证码登录</span
              >
              <span
                v-if="loginFormType == 'code'"
                @click="() => (loginFormType = 'password')"
                >手机号密码登录</span
              >
            </div>
            <div class="loginBtnBox">
              <el-button
                type="primary"
                class="loginBtn"
                @click="loginFun"
                :loading="loginLoading"
                >登 å½•</el-button
              >
            </div>
            <div class="registerBox">
              <span
                @click="
                  () => {
                    $router.push({
                      path: '/register'
                    });
                  }
                "
                >立即注册</span
              >
              <span class="division">|</span>
              <span @click="toFindPassword">忘记密码</span>
            </div>
          </div>
        </div>
        <!-- å¾®ä¿¡ç™»å½• -->
        <div class="wechatBox" v-if="weChatLogin">
          <wxlogin
            :redirect_uri="wxLogin.redirectURL"
            style="width: 300px; height: 400px; margin: 20px auto 0"
            :appid="wxLogin.appid"
            :scope="wxLogin.scope"
            state="WeChatScanningCodeLogin"
          >
          </wxlogin>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
import wxlogin from "vue-wxlogin";
export default {
  name: "login",
  data() {
    return {
      redirectPath: "",
      weChatLogin: false,
      loginLoading: false,
      errorTipsTxt: "",
      loginFormType: "code",
      imgCode: "",
      // ç™»å½•表单
      loginForm: {
        region: "中国+86",
        mobilePhone: "",
        password: "",
        imgCode: "",
        verificationCode: ""
      },
      countDown: 0,
      options: [
        {
          value: "中国+86",
          label: "中国+86"
        }
      ],
      wxLogin: {
        appid: "wxad15251431e1f3fd",
        scope: "snsapi_login",
        redirectURL: encodeURIComponent("https://www.caupress.com.cn/website/")
      }
    };
  },
  components: {
    wxlogin
  },
  created() {
    if (this.$route.query.from == "weChatLogin") {
      this.weChatLoginFun()
    }
    if (!this.tool.getCookie(this.config.tokenKey)) {
      this.$store.dispatch("setToken");
    }
    if (!this.tool.getCookie(this.config.userInfoKey)) {
      this.$store.dispatch("setUserInfo");
    }
    this.redirectPath = this.$route.query.redirectPath;
    this.getImgCapcha();
  },
  methods: {
    getImgCapcha() {
      this.MG.identity.getImgCode().then((res) => {
        this.imgCode = "data:image/png;base64," + res;
      });
    },
    // èŽ·å–éªŒè¯ç 
    getVerifyCode() {
      if (!this.config.reg_tel.test(this.loginForm.mobilePhone)) {
        this.$message({
          message: "请输入正确格式的手机号!",
          type: "error"
        });
        return false;
      } else if (
        this.loginForm.imgCode == "" ||
        this.loginForm.imgCode.length != 4
      ) {
        this.$message({
          message: "请输入正确格式的图形验证码",
          type: "error"
        });
        return false;
      } else {
        this.MG.identity
          .getPhoneCode({
            phoneNumber: this.loginForm.mobilePhone,
            imageCaptcha: this.loginForm.imgCode,
            appRefCode: this.config.appRefCode
          })
          .then((res) => {
            if (res == "验证码发送成功") {
              this.getSecond(60);
              this.$message({
                message: res,
                type: "success"
              });
            } else {
              this.$message({
                message: res,
                type: "error"
              });
              this.getImgCapcha();
            }
          });
      }
    },
    //验证码倒计时
    getSecond(time) {
      if (!this.timer) {
        this.countDown = time;
        this.timer = setInterval(() => {
          this.countDown--;
          if (this.countDown == 0) {
            clearInterval(this.timer);
            this.timer = null;
          }
        }, 1000);
      }
    },
    weChatLoginFun() {
      window.location.href = `https://open.weixin.qq.com/connect/qrconnect?appid=${this.wxLogin.appid}&scope=${this.wxLogin.scope}&redirect_uri=${this.wxLogin.redirectURL}&state=WeChatScanningCodeLogin`;
    },
    loginFun() {
      if (!this.loginForm.mobilePhone) {
        this.$message({
          message: "请输入手机号!",
          type: "error"
        });
        return false;
      }
      // æµ‹è¯•使用用户名和密码
      // if (!this.config.reg_tel.test(this.loginForm.mobilePhone)) {
      //   this.$message({
      //     message: "请输入正确格式的手机号!",
      //     type: "error"
      //   });
      //   return false;
      // }
      if (this.loginFormType == "code" && !this.loginForm.verificationCode) {
        this.$message({
          message: "请输入短信验证码!",
          type: "error"
        });
        return false;
      }
      if (this.loginFormType == "password" && !this.loginForm.password) {
        this.$message({
          message: "请输入密码!",
          type: "error"
        });
        return false;
      }
      this.loginLoading = true;
      if (this.loginFormType == "code") {
        this.MG.identity
          .loginByMobilePhone({
            phoneNumber: this.loginForm.mobilePhone,
            phoneCaptcha: this.loginForm.verificationCode,
            appRefCode: this.config.appRefCode,
            platform: "PCWeb"
          })
          .then((res) => {
            this.loginLoading = false;
            if (res && res.status == "Ok") {
              this.$message({
                message: "登录成功!",
                type: "success"
              });
              this.$store.dispatch("setToken", res.token);
              this.getUserInfo();
            } else {
              this.errorTipsTxt = res.message || "手机号或验证码错误!";
            }
          });
      } else {
        this.MG.identity
          .loginByPassword({
            loginName: this.loginForm.mobilePhone,
            password: this.loginForm.password,
            appRefCode: this.config.appRefCode,
            platform: "PCWeb"
          })
          .then((res) => {
            this.loginLoading = false;
            if (res && res.status == "Ok") {
              this.$message({
                message: "登录成功!",
                type: "success"
              });
              this.$store.dispatch("setToken", res.token);
              this.getUserInfo();
            } else {
              this.errorTipsTxt = res.message || "手机号或密码错误!";
            }
          });
      }
    },
    getUserInfo(callback) {
      this.MG.identity.getCurrentAppUser().then((res) => {
        // ç”¨æˆ·ä¿¡æ¯ä¼˜å…ˆçº§ï¼šæ•™å¸ˆè®¤è¯ > å¾®ä¿¡ > å­¦ç”Ÿï¼ˆæ³¨å†Œæ—¶é»˜è®¤ï¼‰
        if (res) {
          let teacherRole = res.roleLinks.find(
            (item) => item.role.refCode == "teacher"
          );
          let teacherInfo = res.infoList.find(
            (item) => item.type == "teacherInfo"
          );
          let wechatInfo = res.infoList.find((item) => item.type == "WeChat");
          let studentInfo = res.infoList.find((item) => item.type == "Default");
          let phoneInfo = res.secretList.find(
            (item) => item.type == "MobilePhone"
          );
          if (teacherRole && teacherInfo) {
            let data = {};
            try {
              data = JSON.parse(teacherInfo.data);
            } catch (error) {
              data = {};
            }
            this.$store.dispatch("setUserInfo", {
              ...data,
              name: data.fullName,
              phoneNumber: phoneInfo?.credential,
              role: "Teacher",
              roleId: teacherRole.role.id
            });
          } else if (wechatInfo) {
            this.$store.dispatch("setUserInfo", {
              ...wechatInfo,
              phoneNumber: phoneInfo?.credential,
              role: "Student"
            });
          } else if (studentInfo) {
            this.$store.dispatch("setUserInfo", {
              ...studentInfo,
              phoneNumber: phoneInfo?.credential,
              role: "Student"
            });
          }
        }
        // æ¸…空本地储存的申请样书清单
        this.$store.commit("emptyBookList");
        if (callback) {
          callback();
        } else {
          this.$router.push({
            path: this.redirectPath ? this.redirectPath : "/home"
          });
        }
      });
    },
    //找回密码
    toFindPassword() {
      this.$router.push({
        path: "/findPassword"
      });
    }
  }
};
</script>
<style lang="less" scoped>
@import "@/assets/css/theme.less";
.loginPage {
  width: 100%;
  height: 100%;
  background-image: url("@/assets/images/login/pageBg.png");
  background-repeat: no-repeat;
  background-size: 100% 100%;
  position: relative;
  padding: 50px 0;
  .loginContent {
    width: 1200px;
    height: 570px;
    margin: 0 auto;
    padding: 36px 0;
    box-shadow: 0px 0px 66px 0px rgb(170 170 170 / 35%);
    background-image: url("@/assets/images/login/boxBg.png");
    background-repeat: no-repeat;
    background-size: 100% 100%;
    box-sizing: border-box;
    text-align: right;
    .loginFormBox {
      display: inline-block;
      width: 420px;
      height: 496px;
      padding: 30px 40px;
      margin-right: 60px;
      background: #fff;
      box-sizing: border-box;
      box-shadow: 0 0 5px 0 hsl(0deg 0% 67% / 35%);
      .title {
        font-size: 16px;
        text-align: center;
        color: #333333;
        span {
          display: inline-block;
          width: 80px;
          cursor: pointer;
          &.active {
            font-weight: bold;
            color: @color;
          }
        }
        .division {
          width: 5px;
          margin: 0 50px;
          cursor: initial;
          color: #d0d0d0;
        }
      }
      .loginContentBox {
        padding-top: 60px;
        margin-top: 20px;
        margin-bottom: 15px;
        position: relative;
        .errorTips {
          position: absolute;
          top: 8px;
          left: 10px;
          font-size: 12px;
          color: #e50021;
          .findPassword {
            cursor: pointer;
            color: #2b68cd;
            font-size: 12px;
          }
        }
        .codeLoginItemBox {
          margin-bottom: 15px;
          .imgCode {
            width: 140px;
            height: 40px;
            img {
              width: 100%;
              height: 100%;
              background: #efefef;
            }
          }
        }
        .loginItemBox {
          display: flex;
          justify-content: space-between;
          align-items: center;
          border-radius: 4px;
          margin-bottom: 15px;
          box-sizing: border-box;
          border: 1px solid #dcdfe6;
          span {
            display: inline-block;
            width: 100px;
            text-align: center;
          }
        }
        .changFormBtn {
          margin-bottom: 15px;
          overflow: hidden;
          span {
            cursor: pointer;
          }
        }
        .loginBtnBox {
          margin-bottom: 15px;
          .loginBtn {
            width: 100%;
          }
        }
        .registerBox {
          margin-top: 20px;
          font-size: 14px;
          text-align: center;
          color: #666666;
          span {
            cursor: pointer;
          }
          .division {
            margin: 0 20px;
            cursor: initial;
            color: #d0d0d0;
          }
        }
      }
      .wechatBox {
        .wxCodeBox {
          margin-top: 10px;
          height: 300px;
        }
      }
    }
  }
}
.mr10 {
  margin-right: 10px;
}
</style>
<style>
.loginItemIpt .el-input__inner {
  height: 38px;
  line-height: 38px;
  border: 0;
}
</style>
src/views/login/register.vue
New file
@@ -0,0 +1,533 @@
<template>
  <div class="registerPage">
    <div class="registerContent">
      <div class="registerBox">
        <div class="registerForm">
          <h1>注册通行证</h1>
          <div class="formItem flex">
            <el-select placeholder="请选择" v-model="registerForm.region">
              <el-option
                v-for="item in options"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              ></el-option>
            </el-select>
            <el-input
              placeholder="请输入手机号"
              class="ml10"
              clearable
              v-model="registerForm.phoneNumber"
            ></el-input>
          </div>
          <div class="formItem flex">
            <el-input
              placeholder="请输入图形验证码"
              class="flex1"
              v-model="registerForm.imgCode"
            ></el-input>
            <div class="imgCode ml10">
              <img :src="imgCode" alt="" @click="getImgCapcha" />
            </div>
          </div>
          <div class="formItem flex">
            <el-input
              placeholder="请输入短信验证码"
              class="flex1"
              v-model="registerForm.verificationCode"
            ></el-input>
            <el-button
              class="ml10"
              style="width: 140px"
              @click="getVerifyCode"
              :disabled="countDown != 0"
              >{{
                countDown == 0 ? "获取短信验证码" : "验证码(" + countDown + "s)"
              }}</el-button
            >
          </div>
          <!-- æ‰‹æœºå·æ³¨å†Œä¸éœ€è¦å¡«å†™ç”¨æˆ·åï¼Œå…ˆæ³¨é‡Š -->
          <!-- <div class="formItem flex">
          <span>用户名</span>
          <el-input
            v-model="registerForm.username"
            placeholder="用户名长度3-64个字符,由字母、数字组成"
            clearable
          ></el-input>
        </div>
        <div class="formItem">
          <p class="tips">用户名称一旦注册成功不可修改</p>
        </div> -->
          <div class="formItem">
            <el-input
              v-model="registerForm.password"
              type="password"
              show-password
              placeholder="请输入密码"
            ></el-input>
          </div>
          <div class="formItem">
            <el-input
              v-model="registerForm.passwordAgain"
              type="password"
              show-password
              placeholder="确认密码"
            ></el-input>
          </div>
          <div class="formItem">
            <p class="tips">请将密码设置为8-16位,且不支持纯数字</p>
          </div>
          <div class="formItem">
            <el-button
              class="registerBtn"
              :class="{ isActive: registerForm.accept }"
              :disabled="!registerForm.accept"
              :loading="registerBtnLoading"
              @click="registerFun"
              >注册</el-button
            >
          </div>
          <div class="termsBox">
            <el-checkbox class="termsCheckBox" v-model="registerForm.accept">
            </el-checkbox>
            <span>我接受并同意</span>
            <span class="terms" @click="getClauseData(1)">《用户服务条款》</span>
            <span>和</span>
            <span class="terms" @click="getClauseData(0)">《隐私政策》</span>
          </div>
        </div>
        <div class="tipBox">
          <p>
            å·²æœ‰è´¦å·ï¼Œè¯·ç‚¹å‡»è¿™é‡Œ
            <span class="toLogin" @click="toLogin()">直接登录</span>
          </p>
          <p>使用第三方账号登录</p>
          <p>
            <img
              @click="toWxLogin()"
              src="@/assets/images/login/weChartIcon.png"
              alt
            />
          </p>
        </div>
      </div>
    </div>
    <!-- å¼¹æ¡† -->
    <el-dialog
      title="《用户服务条款》"
      :visible.sync="dialogVisibleUserService"
      :close-on-click-modal="false"
      width="40%"
    >
    <div class="protocolBox" v-html="userProtocolTxt"></div>
      <span slot="footer" class="dialog-footer">
        <!-- <el-button @click="dialogVisible = false">取 æ¶ˆ</el-button> -->
        <el-button
          type="primary"
          class="btn"
          @click="dialogVisibleUserService = false"
          >ç¡® å®š</el-button
        >
      </span>
    </el-dialog>
    <el-dialog
      title="《隐私政策条款》"
      :visible.sync="dialogVisibleprivacyPolicy"
      :close-on-click-modal="false"
      width="40%"
    >
    <div class="protocolBox" v-html="privacyPolicyTxt"></div>
      <span slot="footer" class="dialog-footer">
        <!-- <el-button @click="dialogVisible = false">取 æ¶ˆ</el-button> -->
        <el-button
          type="primary"
          class="btn"
          @click="dialogVisibleUserService = false"
          >ç¡® å®š</el-button
        >
      </span>
    </el-dialog>
  </div>
</template>
<script>
export default {
  name: "register",
  data() {
    return {
      dialogVisibleprivacyPolicy:false,
      //用户协议dialog
      dialogVisibleUserService: false,
      //用户协议
      userProtocolTxt:"",
      //协议弹框title
      dialogTitle:"",
      //隐私政策条款
      privacyPolicyTxt:"",
      //当前条款富文本
      currentProtocolTxt:"",
      clauseDialog: {
        title: "",
        open: false,
      },
      clauseData: "",
      registerBtnLoading: false,
      options: [
        {
          value: "中国+86",
          label: "中国+86",
        },
      ],
      registerForm: {
        region: "中国+86",
        phoneNumber: "",
        imgCode: "",
        username: "",
        verificationCode: "",
        password: "",
        passwordAgain: "",
        accept: true,
      },
      countDown: 0,
      imgCode: "",
    };
  },
  mounted() {
    this.showTips();
    this.getImgCapcha();
    this.getProtocol();
  },
  methods: {
    showTips() {
      this.$confirm(
        "如果您已使用过中国农业大学出版社公众号样书申请服务,请使用微信扫码登录!",
        "温馨提示",
        {
          confirmButtonText: "去微信扫码登录",
          cancelButtonText: "继续注册全新账号",
          type: "warning",
        }
      )
        .then(() => {
          this.toWxLogin();
        })
        .catch(() => {});
    },
    getImgCapcha() {
      this.MG.identity.getImgCode().then((res) => {
        this.imgCode = "data:image/png;base64," + res;
      });
    },
    // èŽ·å–éªŒè¯ç (注册)
    getVerifyCode() {
      if (!this.config.reg_tel.test(this.registerForm.phoneNumber)) {
        this.$message({
          message: "请输入正确格式的手机号!",
          type: "error",
        });
        return false;
      } else if (
        this.registerForm.imgCode == "" ||
        this.registerForm.imgCode.length != 4
      ) {
        this.$message({
          message: "请输入正确格式的图形验证码",
          type: "error",
        });
        return false;
      } else {
        this.MG.identity
          .getPhoneCode({
            phoneNumber: this.registerForm.phoneNumber,
            imageCaptcha: this.registerForm.imgCode,
            appRefCode: this.config.appRefCode,
          })
          .then((res) => {
            if (res == "验证码发送成功") {
              this.$message({
                message: res,
                type: "success",
              });
              this.getSecond(60);
            } else {
              this.$message({
                message: res,
                type: "error",
              });
              this.getImgCapcha();
            }
          });
      }
    },
    //验证码倒计时
    getSecond(time) {
      if (!this.timer) {
        this.countDown = time;
        this.timer = setInterval(() => {
          this.countDown--;
          if (this.countDown == 0) {
            clearInterval(this.timer);
            this.timer = null;
          }
        }, 1000);
      }
    },
    // ç»‘定手机号弹框-绑定按钮-函数
    registerFun() {
      if (this.registerForm.phoneNumber == "") {
        this.$message({
          message: "手机号不能为空",
          type: "error",
        });
        return false;
      }
      if (this.registerForm.verificationCode == "") {
        this.$message({
          message: "短信验证码不能为空",
          type: "error",
        });
        return false;
      }
      if (this.registerForm.password == "") {
        this.$message({
          message: "密码不能为空",
          type: "error",
        });
        return false;
      }
      if (this.registerForm.password != this.registerForm.passwordAgain) {
        this.$message({
          message: "两次输入密码不一致",
          type: "error",
        });
        return false;
      }
      let pwdreg =
        // eslint-disable-next-line
        /^(?![A-Za-z]+$)(?![0-9]+$)(?![_!@#$%^&*`~()\-+=<>?:,./;'\|\\\{\}\[\]]+$)[a-zA-Z0-9_!@#$%^&*`~()\-+=<>?:,./;'\|\\\{\}\[\]]{8,32}$/;
      if (!this.config.reg_tel.test(this.registerForm.phoneNumber)) {
        this.$message({
          message: "请输入正确格式的手机号!",
          type: "error",
        });
      } else if (!pwdreg.test(this.registerForm.password)) {
        this.$message({
          message:
            "密码长度8-32个字符,必须由字母、数字、符号(-*/+_.~!@#$%^&*及括号)两种及以上组合!",
          type: "error",
        });
        return false;
      } else {
        this.registerBtnLoading = true;
        this.MG.identity
          .registerAppUserWithPhone({
            appRefCode: this.config.appRefCode,
            phoneNumber: this.registerForm.phoneNumber,
            phoneCaptcha: this.registerForm.verificationCode,
            passWord: this.registerForm.password,
          })
          .then((res) => {
            this.registerBtnLoading = false;
            if (res) {
              this.$confirm("注册成功!", {
                confirmButtonText: "去登录",
                cancelButtonText: "取消",
                type: "success",
              })
                .then(() => {
                  this.$router.push({
                    path: "/login",
                  });
                })
                .catch(() => {});
            }
          })
          .catch((e) => {
            this.$message({
              message: e.response.data.msg,
              type: "error",
            });
            this.registerBtnLoading = false;
          });
      }
    },
    //获取用户协议
    getProtocol() {
      var that = this;
      that.MG.resource
        .getItem({
          path: "caupress_protocol",
          fields: {
            caupress_content: [],
          },
        })
        .then((res) => {
          console.log(res);
          try {
            const data = res.datas.find(
              (e) => e.refCode == "caupress_userRegistrationAgreement"
            );
            this.userProtocolTxt = data ? data.caupress_content : "暂无协议";
            const privacy = res.datas.find(
              (e) => e.refCode == "caupress_privacyPolicy"
            );
            this.privacyPolicyTxt = privacy ? privacy.caupress_content : "暂无协议";
          } catch (error) {
            this.protocolTxt = "暂无协议";
          }
        });
    },
    getClauseData(type) {
      console.log(type);
      if(type == 1){
      this.dialogVisibleUserService = true
      }else{
      this.dialogVisibleprivacyPolicy = true
      }
    },
    toLogin() {
      this.$router.push({
        path: "/login",
      });
    },
    toWxLogin() {
      this.$router.push({
        path: "/login",
        query: {
          from: "weChatLogin",
        },
      });
    },
  },
};
</script>
<style lang="less" scoped>
@import "@/assets/css/theme.less";
.registerPage {
  width: 100%;
  height: 100%;
  background-image: url("@/assets/images/login/pageBg.png");
  background-repeat: no-repeat;
  background-size: 100% 100%;
  position: relative;
  padding: 50px 0;
  .registerContent {
    width: 1200px;
    background: #fff;
    margin: 0 auto;
    padding-bottom: 36px;
    box-shadow: 0 0 66px 0 hsl(0deg 0% 67% / 35%);
    display: flex;
    justify-content: center;
    .registerBox {
      display: flex;
      align-items: center;
      .registerForm {
        width: 420px;
        box-sizing: border-box;
        padding: 20px;
        margin: 20px;
        margin-left: 100px;
        h1 {
          font-size: 18px;
          color: @color;
          text-align: center;
          margin-bottom: 30px;
        }
        .formItem {
          margin-bottom: 10px;
          .imgCode {
            width: 140px;
            height: 40px;
            img {
              width: 100%;
              height: 100%;
              background: #efefef;
            }
          }
          span {
            display: inline-block;
            width: 80px;
            text-align: left;
            line-height: 40px;
          }
          .tips {
            font-size: 12px;
            margin: 0 0 10px 0;
            color: #666;
          }
          .registerBtn {
            width: 100%;
            background: #b1b6bd;
            color: #fff;
            cursor: not-allowed;
            margin-top: 15px;
            &.isActive {
              background: @color;
              cursor: pointer;
            }
          }
        }
        .termsBox {
          line-height: 20px;
          .termsCheckBox {
            vertical-align: text-bottom;
            margin-right: 8px;
          }
          span {
            vertical-align: middle;
          }
          .terms {
            color: @color;
            cursor: pointer;
          }
        }
      }
      .tipBox {
        padding-left: 30px;
        border-left: 1px solid #ddd;
        .toLogin {
          color: @color;
          cursor: pointer;
        }
        p {
          margin-bottom: 15px;
        }
        img {
          width: 30px;
          height: 30px;
          margin-left: 50px;
          cursor: pointer;
        }
      }
    }
  }
}
.ml10 {
  margin-left: 10px;
}
.clauseBox {
  height: 500px;
}
.protocolBox {
  text-align: left;
  line-height: 23px;
  z-index: 1;
  height: 500px;
  overflow-y: auto;
  margin-top: -20px;
  box-sizing: border-box;
  padding: 10px;
}
.el-dialog__footer button {
  margin-right: 43%;
  margin-top: 10px;
}
</style>
src/views/personalCenter/components/addressManagement.vue
New file
@@ -0,0 +1,407 @@
<template>
  <div class="content" v-loading="loading">
    <template v-if="isAdd == true">
      <el-form
        :model="addressItem"
        ref="form"
        label-position="left"
        :rules="rules"
        label-width="130px"
      >
        <el-form-item label="收货人:" prop="name">
          <el-input
            class=""
            v-model="addressItem.name"
            placeholder="请填写收货人的姓名"
          ></el-input>
        </el-form-item>
        <el-form-item label="手机号:" prop="tel">
          <el-input
            class=""
            v-model="addressItem.tel"
            placeholder="请填写手机号"
          ></el-input>
        </el-form-item>
        <el-form-item label="所在地区:" prop="city">
          <div>
            <el-cascader
              size="large"
              :options="options"
              v-model="selectedOptions"
              @change="handleChange"
            >
            </el-cascader>
          </div>
        </el-form-item>
        <el-form-item label="详细地址:" prop="address">
          <el-input
            class=""
            v-model="addressItem.address"
            placeholder="请填写详细地址"
          ></el-input>
        </el-form-item>
      </el-form>
      <div class="addAddress">
        <span class="">设为默认地址:</span>
        <el-switch
          v-model="addressItem.ifdefalut"
          :change="
            () => {
              this.addressItem.ifdefalut = !this.addressItem.ifdefalut;
            }
          "
          :active-value="true"
          active-color="#00873C"
          :inactive-value="false"
          inactive-color="#666666"
        >
        </el-switch>
      </div>
      <div>
        <div class="addAddressButton saveAddressBtn greenButton" @click="save">
          ä¿å­˜
        </div>
        <div
          class="addAddressButton saveAddressBtn delete"
          v-show="edit"
          @click="deleteAddress(addressItem.id)"
        >
          åˆ é™¤
        </div>
        <div class="addAddressButton saveAddressBtn delete" @click="cancel">
          å–消
        </div>
      </div>
    </template>
    <template v-else>
      <div
        class="addAddressButton greenButton"
        @click="
          () => {
            this.isAdd = true;
            this.edit = false;
          }
        "
      >
        æ–°å¢žæ”¶è´§åœ°å€
      </div>
      <!-- å†™åŠ è½½çŠ¶æ€ -->
      <template v-if="addressList.length > 0">
        <div
          class="addressItem"
          v-for="(item, index) in addressList"
          :key="index"
        >
          <div>
            <div>
              <span class="name">{{ item.name }}</span>
              <span class="phoneNum">{{ item.tel }}</span>
              <span class="default primaryTxt" v-if="item.ifdefalut">默认</span>
            </div>
            <p class="detailedAddress">
              {{ item.city }}
              {{ item.address }}
            </p>
          </div>
          <div @click="editor(index)">
            <i class="f18 el-icon-edit"></i>
          </div>
        </div>
      </template>
      <template v-else>
        <el-empty description="暂无收货地址,请添加收货地址"></el-empty>
      </template>
    </template>
  </div>
</template>
<script>
import { regionData, CodeToText, TextToCode } from "element-china-area-data";
export default {
  data() {
    return {
      edit: false, // æ˜¯å¦ç¼–辑状态
      isAdd: false,
      addressItem: {
        name: "",
        tel: "",
        city: "",
        ifdefalut: false,
        address: ""
      },
      rules: {
        name: [{ required: true, message: "请输入详细地址", trigger: "blur" }],
        tel: [
          { required: true, message: "请输入手机号", trigger: "blur" },
          {
            pattern:
              /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/,
            message: "请输入正确手机号",
            trigger: "blur"
          }
        ],
        city: [{ required: true, message: "请选择地区", trigger: "change" }],
        address: [
          { required: true, message: "请输入详细地址", trigger: "blur" }
        ]
      },
      addressList: [],
      options: regionData,
      selectedOptions: [], // åœ°åŒºé€‰é¡¹å€¼
      loading: false
    };
  },
  created() {
    this.getAddress();
  },
  methods: {
    handleChange(city) {
      let cityStr =
        CodeToText[city[0]] +
        "/" +
        CodeToText[city[1]] +
        "/" +
        CodeToText[city[2]];
      let cityArr = cityStr.split("/");
      if (cityArr[1] == "市辖区") {
        cityArr[1] = cityArr[0];
      }
      this.addressItem.city = cityArr.join("/");
    },
    // å–消新建地址
    cancel() {
      this.isAdd = false;
      this.edit = false;
      // é‡ç½®è¾“入框
      Object.assign(this.addressItem, {
        name: "",
        tel: "",
        city: "",
        ifdefalut: false,
        address: ""
      });
      this.selectedOptions = [];
    },
    // ä¿å­˜æ–°å»ºçš„地址
    save() {
      // éªŒè¯å¿…填项
      this.$refs["form"].validate((valid) => {
        if (valid) {
          this.loading = true;
          // ä¿å­˜åœ°å€ / æ–°å¢žåœ°å€
          // å¦‚果该地址为默认值,去除其他状态为默认值
          if (this.addressItem.ifdefalut == true) {
            this.addressList.map((item) => {
              item.ifdefalut = false;
            });
          }
          if (this.addressItem.id) {
            // ä¿®æ”¹åœ°å€
            let index = this.addressList.findIndex(
              (item) => item.id == this.addressItem.id
            );
            this.addressList[index] = { ...this.addressItem };
          } else {
            // æ–°å¢žåœ°å€
            this.addressItem.id = this.tool.uuid();
            this.addressList.push(JSON.parse(JSON.stringify(this.addressItem)));
          }
          const userInfo = {
            requests: [
              {
                data: JSON.stringify(this.addressList),
                name: "地址管理",
                type: "Address"
              }
            ]
          };
          this.MG.identity.setAppUserInfo(userInfo).then((res) => {
            this.loading = false;
            if (res) {
              this.$message({
                showClose: true,
                message: "成功",
                type: "success"
              });
              // æ¸…空输入值
              for (const key in this.addressItem) {
                this.addressItem[key] = "";
              }
              this.selectedOptions = [];
              // åˆ‡æ¢çŠ¶æ€
              this.isAdd = false;
              // æ–°å¢žåœ°å€åŽå°†é»˜è®¤åœ°å€è®¾ä¸ºå…³é—­çŠ¶æ€
              this.addressItem.ifdefalut = false;
            } else {
              this.$message({
                showClose: true,
                message: "失败,请稍后重试",
                type: "error"
              });
            }
          });
        }
      });
    },
    // èŽ·å–æ‰€æœ‰åœ°å€
    getAddress() {
      this.loading = true;
      this.MG.identity.getCurrentAppUser().then((res) => {
        this.loading = false;
        let storeInfoList = res.infoList.find((i) => i.type == "Address");
        if (storeInfoList && storeInfoList.data) {
          this.addressList = JSON.parse(storeInfoList.data);
          if (this.addressList.length == 0) {
            // ç”¨æˆ·ä¸ºç¬¬ä¸€æ¬¡æ·»åŠ åœ°å€ï¼Œåˆ™å½“å‰æ‰€é€‰åœ°å€ä¸ºé»˜è®¤åœ°å€
            this.addressItem.ifdefalut = true;
          }
        } else {
          // ç”¨æˆ·ä¸ºç¬¬ä¸€æ¬¡æ·»åŠ åœ°å€ï¼Œåˆ™å½“å‰æ‰€é€‰åœ°å€ä¸ºé»˜è®¤åœ°å€
          this.addressItem.ifdefalut = true;
        }
      });
    },
    // ç¼–辑选中地址
    editor(index) {
      this.isAdd = true;
      this.edit = true;
      this.addressItem = { ...this.addressList[index] };
      let city = this.addressItem.city.split("/");
      if (city[0] == city[1]) {
        city[1] = "市辖区";
      }
      this.selectedOptions.push(TextToCode[city[0]].code);
      this.selectedOptions.push(TextToCode[city[0]][city[1]].code);
      this.selectedOptions.push(TextToCode[city[0]][city[1]][city[2]].code);
    },
    // åˆ é™¤åœ°å€
    deleteAddress(id) {
      this.$confirm("是否移除该地址", "提示", {
        type: "warning"
      })
        .then(() => {
          let basicInfo = this.addressList.filter((item) => item.id != id);
          // å°†å½“前第一个地址设置为默认地址
          if (basicInfo.length != 0) {
            basicInfo[0].ifdefalut = true;
          }
          const userInfo = {
            requests: [
              {
                data: JSON.stringify(basicInfo),
                name: "地址管理",
                type: "Address"
              }
            ]
          };
          this.MG.identity.setAppUserInfo(userInfo).then((res) => {
            if (res) {
              this.$message({
                type: "success",
                message: "地址移除成功"
              });
              // æ¸…空输入值
              for (const key in this.addressItem) {
                this.addressItem[key] = "";
              }
              this.selectedOptions = [];
              this.addressItem.ifdefalut = false;
              this.isAdd = false;
              // é‡æ–°èŽ·å–æ•°æ®
              this.getAddress();
            }
          });
        })
        .catch(() => {});
    }
  }
};
</script>
<style lang="less" scoped>
.content {
  padding: 40px;
  &:deep(.el-input) {
    width: 603px;
  }
  .addressItem {
    width: 100%;
    display: flex;
    justify-content: space-between;
    padding-bottom: 40px;
    margin-bottom: 40px;
    align-items: center;
    border-bottom: 1px solid #eeeeee;
    .detailedAddress {
      font-size: 16px;
      font-weight: 400;
      color: #333333;
      line-height: 24px;
    }
    .name {
      font-size: 18px;
      font-weight: 700;
      color: #333333;
      margin-right: 20px;
    }
    .phoneNum {
      font-size: 16px;
      font-weight: 700;
      color: #999999;
      line-height: 36px;
      margin-right: 20px;
    }
    .default {
      padding: 1px 7px;
      border: 2px solid #00873c;
      border-radius: 4px;
    }
    .f18 {
      cursor: pointer;
      font-size: 18px;
    }
  }
  .greenButton {
    background: linear-gradient(0deg, #00873c 0%, #00aa4c 100%);
  }
  .addAddressButton {
    cursor: pointer;
    width: 120px;
    height: 40px;
    border-radius: 4px;
    color: #fff;
    font-size: 16px;
    text-align: center;
    line-height: 40px;
    margin-bottom: 30px;
  }
  .saveAddressBtn {
    float: right;
  }
  .addAddress {
    width: 100%;
    display: flex;
    margin-bottom: 30px;
    align-items: center;
    span {
      display: inline-block;
      width: 140px;
      font-size: 16px;
      color: #666666;
      line-height: 40px;
    }
    &:deep(.el-input) {
      width: 576px;
    }
  }
  .delete {
    color: #00873c;
    background-color: #fff;
    border: 1px solid #00873c;
    border-radius: 4px;
    margin-right: 20px;
  }
}
</style>
src/views/personalCenter/components/authorContribution.vue
New file
@@ -0,0 +1,731 @@
<template>
  <div class="content">
    <div v-if="!submissionStatus" style="min-height: 600px" v-loading="loading">
      <template>
        <el-button
          type="primary"
          class="btn"
          @click="changeSubmissionStatus"
          plain
          >投稿</el-button
        >
      </template>
      <el-empty
        description="暂无数据"
        class="empty"
        :image-size="200"
        v-if="tableData.length == 0 && !loading"
      ></el-empty>
      <template v-if="tableData.length > 0 && !loading">
        <el-table
          :header-cell-style="rowClass"
          :data="tableData"
          border
          style="width: 100%"
        >
          <el-table-column
            align="center"
            prop="date"
            type="index"
            label="序号"
            width="60"
          >
            <template slot-scope="scope">
              {{
                (paginationData.page - 1) * paginationData.limit +
                scope.$index +
                1
              }}
            </template>
          </el-table-column>
          <el-table-column label="作品名称">
            <span class="ellipsis" slot-scope="scope">
              {{ scope.row.contribute_workName || "-" }}
            </span>
          </el-table-column>
          <el-table-column label="作品描述">
            <span class="ellipsis" slot-scope="scope">
              {{ scope.row.contribute_workDescription || "-" }}
            </span>
          </el-table-column>
          <el-table-column label="查看" width="60" align="center">
            <span
              class="see"
              slot-scope="scope"
              @click="viewContributions(scope.row.content)"
            >
              æŸ¥çœ‹
            </span>
          </el-table-column>
        </el-table>
        <!-- åˆ†é¡µ -->
        <div class="pageinateBox" v-if="tableData.length > 0">
          <el-pagination
            @size-change="
              (val) => {
                paginationData.limit = val;
                getAuthorContribution();
              }
            "
            @current-change="
              (val) => {
                paginationData.page = val;
                getAuthorContribution();
              }
            "
            background=""
            :current-page="paginationData.page - 0"
            :page-size="paginationData.limit"
            prev-text="上一页"
            next-text="下一页"
            layout="total, prev, pager, next, slot, jumper"
            :total="paginationData.totalCount"
          >
          </el-pagination>
        </div>
      </template>
    </div>
    <div v-else>
      <el-form
        :model="ruleForm"
        :rules="rules"
        ref="form"
        :disabled="disabled"
        class="demo-ruleForm"
        label-position="left"
        label-suffix=":"
        label-width="140px"
      >
        <el-form-item label="作品名称" prop="contribute_workName">
          <el-input
            v-model="ruleForm.contribute_workName"
            placeholder="请输入作品名称"
          ></el-input>
        </el-form-item>
        <el-form-item label="电子邮箱" prop="contribute_email">
          <el-input
            v-model="ruleForm.contribute_email"
            placeholder="请输入您的邮箱地址"
          ></el-input>
        </el-form-item>
        <el-form-item label="联系方式" prop="contribute_contact">
          <el-input
            v-model="ruleForm.contribute_contact"
            placeholder="请输入手机号"
          ></el-input>
        </el-form-item>
        <el-form-item label="相关证件" prop="contribute_workCertificates">
          <div class="lecturingSpecixalty">
            <el-upload
              :file-list="ruleForm.contribute_workCertificates"
              action=""
              :limit="5"
              :on-exceed="
                () => {
                  this.$message({
                    message: '最多上传5个文件,请移除其他文件后再上传。',
                    type: 'warning',
                  });
                }
              "
              :http-request="beforeRead"
              :multiple="false"
              list-type="picture-card"
              :before-remove="beforeDelimg"
              :on-preview="handlePictureCardPreview"
              :on-success="uploadSucceeded"
              :on-error="uploadFailed"
              :on-remove="handleRemove"
            >
              <i class="el-icon-plus"></i>
            </el-upload>
          </div>
        </el-form-item>
        <div class="notice">
          æ³¨ï¼šæŽ¨èä¼˜å…ˆä¸Šä¼ æ‚¨çš„æ•™å¸ˆè¯ç”µå­ç‰ˆæˆ–校园卡或工作证或身份证
          æ”¯æŒä¸Šä¼ jpg、png文件
        </div>
        <el-form-item label="作品描述" prop="contribute_workDescription">
          <el-input
            class=""
            type="textarea"
            v-model="ruleForm.contribute_workDescription"
            :autosize="{ minRows: 5, maxRows: 15 }"
            placeholder="请对作品做大概简介"
          ></el-input>
        </el-form-item>
        <el-form-item label="作品" prop="contribute_works">
          <el-upload
            :http-request="uploadFile"
            action=""
            :on-remove="handleRemoveFile"
            :on-error="uploadFailed"
            :on-success="fileuploadSucceeded"
            :before-remove="beforeRemove"
            multiple
            :limit="3"
            :on-exceed="
              () => {
                this.$message({
                  message: '最多上传5个文件,请移除其他文件后再上传。',
                  type: 'warning',
                });
              }
            "
            :file-list="ruleForm.contribute_works"
          >
            <el-button size="small" type="primary">点击上传</el-button>
          </el-upload>
        </el-form-item>
        <span class="notice">注:作品大小不得超过 30Mb </span>
        <div class="agreement" v-if="!disabled">
          <span
            class="choose"
            @click="
              () => {
                this.agreement = !this.agreement;
              }
            "
          >
            <img
              v-show="agreement"
              src="@/assets/images/personalCenter/choose.png"
              alt=""
            />
          </span>
          <span class="infoTxt">
            å·²é˜…读并同意<span class="textpro" @click.stop="onPrivacy"
              >《隐私权政策》</span
            ><span class="textpro" @click.stop="onStatement">《法律声明》</span>
          </span>
        </div>
      </el-form>
      <div>
        <div
          v-if="!disabled"
          class="basic addAddressButton greenButton"
          type="primary"
          @click="authorContribution()"
        >
          æäº¤
        </div>
        <div class="basic addAddressButton delete" @click="cancel">返回</div>
      </div>
      <el-dialog :visible.sync="dialogImageState">
        <img width="100%" :src="dialogImageUrl" alt="" />
      </el-dialog>
      <el-dialog
        :title="dialogName"
        :visible.sync="centerDialogVisible"
        width="40%"
        center
      >
        <p class="protocolBox" v-html="dialoagContent"></p>
        <span slot="footer" class="dialog-footer">
          <el-button type="primary" @click="onCancel">ç¡® å®š</el-button>
        </span>
      </el-dialog>
    </div>
  </div>
</template>
<script>
import { mapState } from "vuex";
import { getPublicImage } from "@/assets/js/middleGround/tool";
export default {
  data() {
    return {
      dialogName: "",
      centerDialogVisible: false,
      disabled: false,
      ruleForm: {
        contribute_workName: "",
        contribute_email: "",
        contribute_contact: "",
        contribute_workCertificates: [],
        contribute_workDescription: "",
        contribute_works: [],
      },
      rules: {
        contribute_workName: [
          { required: true, message: "请填写作品名称", trigger: "blur" },
        ],
        contribute_email: [
          { required: true, message: "请填写邮箱", trigger: "blur" },
          {
            pattern: /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
            message: "邮箱格式校验失败,请输入邮箱",
            trigger: "blur",
          },
        ],
        contribute_contact: [
          { required: true, message: "请输入手机号", trigger: "blur" },
          {
            pattern:
              /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/,
            message: "请输入正确手机号",
            trigger: "blur",
          },
        ],
        contribute_workCertificates: [
          { required: true, message: "请上传您的证件", trigger: "blur" },
        ],
        contribute_workDescription: [
          { required: true, message: "请填写您的作品描述", trigger: "blur" },
        ],
        contribute_works: [
          { required: true, message: "请上传您的作品", trigger: "change" },
        ],
      },
      agreement: false,
      lecturingSpecialty: "",
      file: "",
      pictrueList: [],
      // æŸ¥çœ‹å·²é€‰ä¸­çš„图片
      dialogImageUrl: "",
      // æŸ¥çœ‹å·²é€‰ä¸­çš„图片 æ˜¾ç¤ºçŠ¶æ€
      dialogImageState: false,
      certificatesImg: "",
      loading: false,
      paginationData: {
        page: 1,
        totalCount: 0,
        limit: 10,
        totalPage: 0,
      },
      tableData: [],
      worksInfo: [],
      submissionStatus: false, // åˆ‡æ¢æ˜¾ç¤º è¡¨å•列表 ã€ æäº¤è¡¨å•
      protocolPrivacyTxt: "",
      protocolStatementTxt: "",
      dialoagContent: "",
    };
  },
  computed: {
    ...mapState(["userInfo"]),
  },
  created() {
    this.getAuthorContribution();
    this.getTypeItem();
    this.getPrivacy();
  },
  methods: {
    onCancel() {
      this.dialoagContent = "";
      this.centerDialogVisible = false;
    },
    onPrivacy() {
      this.dialogName = "《隐私权政策》";
      this.dialoagContent = this.protocolPrivacyTxt
        ? this.protocolPrivacyTxt
        : "暂无协议";
      this.centerDialogVisible = true;
    },
    onStatement() {
      this.dialogName = "《法律声明》";
      this.dialoagContent = this.protocolStatementTxt
        ? this.protocolStatementTxt
        : "暂无协议";
      this.centerDialogVisible = true;
    },
    getPrivacy() {
      var that = this;
      that.MG.resource
        .getItem({
          path: this.config.refCodes.Privacy,
          fields: {
            caupress_content: [],
          },
        })
        .then((res) => {
          try {
            const authorPrivacyPolic = res.datas.find(
              (e) => e.refCode == "caupress_authorPrivacyPolicy"
            );
            const legalNotices = res.datas.find(
              (e) => e.refCode == "caupress_legalNotices"
            );
            this.protocolPrivacyTxt = authorPrivacyPolic
              ? authorPrivacyPolic.caupress_content
              : "暂无协议";
            this.protocolStatementTxt = legalNotices
              ? legalNotices.caupress_content
              : "暂无协议";
          } catch (error) {
            this.protocolPrivacyTxt = "暂无协议";
            this.protocolStatementTxt = "暂无协议";
          }
        });
    },
    getStatement() {},
    rowClass() {
      //表格数据居中显示
      return "text-align:center";
    },
    // åˆ‡æ¢ æäº¤è¡¨å• ã€ è¡¨å•列表
    changeSubmissionStatus(openEdit) {
      if (this.userInfo.phoneNumber) {
        this.submissionStatus = !this.submissionStatus;
        // åˆ‡æ¢åˆ°åˆ—表页重新获取数据
        if (!openEdit) {
          // ä¸è®©ç¼–辑 é€‰ä¸­åè®®
          this.disabled = true;
        } else {
          this.disabled = false;
        }
        if (!this.submissionStatus) {
          this.paginationData.page = 1;
          this.getAuthorContribution();
        }
      } else {
        this.$message({
          message: "请先绑定手机号!",
          type: "warning",
        });
      }
    },
    // èŽ·å–æ‰€æœ‰ä½œè€…æŠ•ç¨¿
    getAuthorContribution() {
      this.loading = true;
      let { limit, page } = this.paginationData;
      let query = {
        start: limit * page - limit,
        size: limit,
        sort: {
          field: "createDate",
          type: "Desc",
        },
        appRefCode: this.config.appRefCode,
        topicIdOrRefCode: "contribution",
      };
      this.MG.ugc.getTopicMessageList(query).then((res) => {
        this.loading = false;
        this.paginationData.totalCount = res.totalSize;
        this.tableData = [];
        res.datas.map((item) => {
          let content = JSON.parse(item.content);
          this.tableData.push({
            contribute_workName: content.contribute_workName,
            contribute_workDescription: content.contribute_workDescription,
            content: content,
          });
        });
      });
    },
    handlePictureCardPreview(file) {
      this.dialogImageState = true;
      this.dialogImageUrl = file.url;
    },
    // ç§»é™¤å›¾ç‰‡åŽçš„处理
    handleRemove(file, filelist) {
      this.ruleForm.contribute_workCertificates = filelist;
    },
    // ç§»é™¤ä¸Šä¼ æ–‡ä»¶åŽçš„处理
    handleRemoveFile(file, filelist) {
      this.ruleForm.contribute_works = filelist;
    },
    // ä¸Šä¼ ä½œå“
    uploadFile(file) {
      this.isLoding = true;
      return new Promise((resolve, reject) => {
        const FileName = file.file.name.split(".")[0];
        const Extension = file.file.name.split(".")[1];
        const FileType = file.file.type;
        // å¦‚果文件大于 30mb æç¤ºæ–‡ä»¶è¿‡å¤§ï¼Œä¸å…è®¸ä¸Šä¼ 
        if (file.file.size > 30000000) {
          this.$message({
            message: "作品大小超过30Mb,请上传小于30Mb大小的作品",
            type: "error",
          });
          return reject();
        }
        let size = 1024;
        this.tool
          .getFileMd5(file.file, size * 1024)
          .then((e) => {
            const imgData = new FormData();
            this.fileMd5 = e;
            imgData.append("Md5", e);
            imgData.append("FileName", FileName);
            imgData.append("Extension", Extension);
            imgData.append("FileType", FileType);
            imgData.append("MetaData", null);
            imgData.append("file", file.file);
            this.MG.file.upload(imgData).then((res) => {
              this.$message({
                message: "作品上传成功",
                type: "success",
              });
              return resolve(e);
            });
          })
          .catch((e) => {
            this.isLoding = false;
            console.error(e);
            return reject();
          });
      });
    },
    // ä½œå“ä¸Šä¼ æˆåŠŸåŽçš„å¤„ç†
    fileuploadSucceeded(res, file, filelist) {
      filelist[filelist.length - 1].md5 = res;
      this.ruleForm.contribute_works = filelist;
      this.$refs["form"].validateField("contribute_works");
    },
    // èŽ·å–FormTypeItem
    getTypeItem() {
      const data = {
        refCodes: ["contributedWorks"],
      };
      this.MG.resource.getCmsTypeByRefCode(data).then((res) => {
        this.worksInfo = res[0].cmsTypeLinks[0].children;
      });
    },
    // æäº¤ä½œè€…投稿
    authorContribution() {
      this.$refs["form"].validate((valid) => {
        if (valid) {
          // åˆ¤æ–­æ˜¯å¦åŒæ„äº†åè®®
          if (this.agreement) {
            this.loading = true;
            this.teacherRegisterLoading = true;
            // ç§»é™¤å›¾ç‰‡ä¸ç›¸å…³å±žæ€§
            this.ruleForm.contribute_workCertificates.map((item) => {
              delete item.status;
              delete item.uid;
              delete item.url;
              delete item.percentage;
              delete item.raw;
              delete item.response;
              delete item.size;
            });
            // ç§»é™¤æ–‡ä»¶ä¸ç›¸å…³å±žæ€§
            this.ruleForm.contribute_works.map((item) => {
              delete item.status;
              delete item.uid;
              delete item.url;
              delete item.percentage;
              delete item.raw;
              delete item.response;
              delete item.size;
            });
            const data = {
              topicIdOrRefCode: "contribution",
              name: this.ruleForm.contribute_workName,
              content: JSON.stringify(this.ruleForm),
              state: "Normal",
              type: "authorOfSubmission",
              cmsTypeRefCode: this.config.refCodes.Contribution,
              newDataListRequest: this.tool.worksDataBytool(
                this.worksInfo,
                this.ruleForm,
                this.ruleForm.contribute_workCertificates
              ),
            };
            this.MG.ugc.newTopicMessage(data).then((res) => {
              if (res) {
                // æ¢å¤é»˜è®¤å€¼
                for (const key in this.ruleForm) {
                  this.ruleForm[key] = Array.isArray(this.ruleForm[key])
                    ? []
                    : "";
                }
                this.$message({
                  message: "投稿成功",
                  type: "success",
                });
                this.loading = false;
                this.changeSubmissionStatus();
              } else {
                this.$message.error("投稿失败,请稍后重试");
              }
            });
          } else {
            this.$message({
              message: "请勾选,已阅读并同意《隐私权政策》《法律声明》",
              type: "warning",
            });
          }
        } else {
          return false;
        }
      });
    },
    // å–消投稿
    cancel() {
      this.changeSubmissionStatus();
      // æ¢å¤é»˜è®¤å€¼
      for (const key in this.ruleForm) {
        this.ruleForm[key] = Array.isArray(this.ruleForm[key]) ? [] : "";
      }
    },
    // ä¸Šä¼ å›¾ç‰‡
    beforeRead(file) {
      this.isLoding = true;
      return new Promise((resolve, reject) => {
        const FileName = file.file.name.split(".")[0];
        const Extension = file.file.name.split(".")[1];
        const FileType = file.file.type;
        if (FileType != "image/jpeg" && FileType != "image/png") {
          this.$message({
            message: "文件格式不允许,只允许上传图片格式",
            type: "error",
          });
          return reject();
        }
        let size = 1024;
        this.tool
          .getFileMd5(file.file, size * 1024)
          .then((e) => {
            this.isLoding = false;
            const imgData = new FormData();
            this.fileMd5 = e;
            imgData.append("Md5", e);
            imgData.append("FileName", FileName);
            imgData.append("Extension", Extension);
            imgData.append("FileType", FileType);
            imgData.append("MetaData", null);
            imgData.append("file", file.file);
            this.MG.file.upload(imgData).then((res) => {
              if (res == "文件上传成功") {
                this.$message({
                  message: "图片上传成功",
                  type: "success",
                });
                return resolve(e);
              } else {
                return reject();
              }
            });
          })
          .catch((e) => {
            this.isLoding = false;
            console.error(e);
            return reject();
          });
      });
    },
    // ä¸Šä¼ å›¾ç‰‡æˆåŠŸåŽçš„å¤„ç†
    uploadSucceeded(res, file, filelist) {
      filelist[filelist.length - 1].md5 = res;
      this.ruleForm.contribute_workCertificates = filelist;
      this.$refs["form"].validateField("contribute_workCertificates");
    },
    // åˆ é™¤å›¾ç‰‡æ–‡ä»¶ä¹‹å‰çš„钩子
    beforeDelimg() {
      return this.$confirm(`确定移除证件照吗?`);
    },
    // ä¸Šä¼ å¤±è´¥
    uploadFailed() {
      this.$message.error("文件上传失败,请稍后重试");
    },
    // ç§»é™¤ä¸Šä¼ çš„æ–‡ä»¶
    beforeRemove() {
      return this.$confirm(`确定移除作品吗?`);
    },
    // æŸ¥çœ‹æŠ•稿
    viewContributions(ele) {
      ele.contribute_workCertificates?.map((item) => {
        item.url = getPublicImage(item.md5);
      });
      Object.assign(this.ruleForm, ele);
      this.changeSubmissionStatus(false);
    },
  },
};
</script>
<style lang="less" scoped>
.protocolBox {
  text-align: left;
  line-height: 23px;
  z-index: 1;
  height: 500px;
  overflow-y: auto;
  margin-top: -20px;
  box-sizing: border-box;
  padding: 10px;
}
.content {
  padding: 40px;
  overflow: hidden;
  .btn {
    margin-bottom: 20px;
  }
  .see {
    cursor: pointer;
  }
  .notice {
    font-size: 14px;
    color: #b3b3b3;
    margin-left: 140px;
    margin-bottom: 20px;
  }
  .lecturingSpecixalty {
    display: flex;
    border: 1px solid #dcdfe6;
    border-radius: 4px;
    padding: 20px;
    min-height: 148px;
  }
  .agreement {
    display: flex;
    padding: 40px 0;
    height: 20px;
    align-items: center;
    .choose {
      display: inline-block;
      border: 1px solid #e2e2e2;
      width: 13px;
      height: 13px;
      margin-right: 10px;
      cursor: pointer;
      img {
        margin-left: 2px;
        margin-bottom: 2px;
      }
    }
    .infoTxt {
      .textpro {
        color: #00873c;
        cursor: pointer;
      }
    }
  }
  .basic {
    width: 120px;
    height: 40px;
    border-radius: 4px;
    color: #fff;
    font-size: 16px;
    text-align: center;
    line-height: 40px;
    cursor: pointer;
  }
  .addAddressButton {
    float: right;
    margin-right: 20px;
  }
  .greenButton {
    background: linear-gradient(0deg, #00873c 0%, #00aa4c 100%);
  }
  .delete {
    color: #00873c;
    background-color: #fff;
    border: 1px solid #00873c;
    border-radius: 4px;
  }
  .pageinateBox {
    text-align: center;
    padding: 40px 0 0 0;
    :deep(.el-pagination.is-background .btn-next) {
      padding: 0 10px;
    }
    :deep(.el-pagination.is-background .btn-prev) {
      padding: 0 10px;
    }
  }
}
</style>
src/views/personalCenter/components/basicInformation.vue
New file
@@ -0,0 +1,473 @@
<template>
  <div>
    <div class="content">
      <div class="information">
        <div v-if="userInfo.icon">
          <span>头像:</span>
          <span><img class="usericon" :src="userInfo.icon" /></span>
        </div>
        <div>
          <span>昵称:</span>
          <span>{{ userInfo.name }}</span>
        </div>
        <div>
          <span>微信认证:</span>
          <span v-if="weChatState" class="primaryTxt">已认证</span>
          <span v-else class="warningTxt">未认证</span>
          <p v-if="!weChatState" class="modify" @click="goBindWeChat">去认证</p>
        </div>
        <div>
          <span>绑定手机:</span>
          <span v-if="userInfo.phoneNumber">{{ userInfo.phoneNumber }}</span>
          <span v-if="!userInfo.phoneNumber" class="warningTxt">未绑定</span>
          <p
            v-if="userInfo.phoneNumber"
            class="modify"
            @click="
              () => {
                isPlace = true;
              }
            "
          >
            æ›´æ¢æ‰‹æœºå·
          </p>
          <p
            v-if="!userInfo.phoneNumber"
            class="modify"
            @click="
              () => {
                isPlace = true;
              }
            "
          >
            ç»‘定手机号
          </p>
        </div>
      </div>
      <div class="wrapImg">
        <img src="" class="autoImg" alt="" />
      </div>
    </div>
    <!-- æ›´æ¢æ‰‹æœºå·æ¨¡æ€æ¡† -->
    <el-dialog
      title="绑定手机号"
      :visible="isPlace"
      width="600px"
      :before-close="handleClose"
    >
      <el-form
        :key="formKey"
        :model="replacePhone"
        ref="form"
        label-position="left"
        :rules="rules"
        label-width="130px"
      >
        <el-form-item label="手机号:" prop="phone">
          <el-input
            v-model="replacePhone.phone"
            placeholder="请输入手机号"
          ></el-input>
        </el-form-item>
        <el-form-item label="图形验证码:" prop="imgCode">
          <div class="flex">
            <el-input
              v-model="replacePhone.imgCode"
              placeholder="请输入图形验证码"
            ></el-input>
            <div class="imgCodeBox">
              <img :src="imgCode" alt="" @click="getImgCapcha" />
            </div>
          </div>
        </el-form-item>
        <el-form-item label="短信验证码:" prop="verificationCode">
          <div class="flex">
            <el-input
              v-model="replacePhone.verificationCode"
              placeholder="请输入短信验证码"
            ></el-input>
            <div class="imgCodeBox">
              <el-button
                style="width: 100%"
                @click="getVerifyCode"
                :disabled="countDown != 0"
                >{{
                  countDown == 0
                    ? "获取短信验证码"
                    : "验证码(" + countDown + "s)"
                }}</el-button
              >
            </div>
          </div>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="handleClose">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="replace">ç¡® å®š</el-button>
      </span>
    </el-dialog>
    <div class="title">
      ç”¨æˆ·ç±»åž‹
      <span> THE USER TYPES </span>
    </div>
    <div class="content">
      <div class="information">
        <div>
          <span>用户类型:</span>
          <span>{{ userInfo.role == "Teacher" ? "教师" : "学生" }}</span>
        </div>
        <div>
          <span>教师认证:</span>
          <span class="primaryTxt" v-if="userInfo.role == 'Teacher'"
            >已认证</span
          >
          <span v-else>未认证</span>
          <p
            class="modify"
            v-if="userInfo.role == 'Teacher'"
            @click="toTeacherRegister"
          >
            ä¿®æ”¹ä¿¡æ¯
          </p>
        </div>
        <div v-if="userInfo.role == 'Teacher'">
          <span style="width: 150px">电子书剩余申请次数:</span>
          <span> {{ electronicSampleBookapplyNum }}次 </span>
        </div>
        <div v-if="userInfo.role == 'Teacher'">
          <span style="width: 150px">纸质书剩余申请次数:</span>
          <span> {{ paperSampleBookapplyNum }}次 </span>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
import { mapState } from "vuex";
export default {
  computed: {
    ...mapState(["userInfo"]),
  },
  data() {
    return {
      isPlace: false,
      formKey: 0, // è§£å†³form è¡¨å•,验证表单状态不清空问题
      rules: {
        phone: [
          { required: true, message: "请输入手机号", trigger: "blur" },
          {
            pattern:
              /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/,
            message: "请输入正确手机号",
            trigger: "blur",
          },
        ],
        imgCode: [
          { required: true, message: "请输入图形验证码", trigger: "blur" },
          { min: 4, max: 4, message: "请输入 4 ä½éªŒè¯ç ", trigger: "blur" },
        ],
        verificationCode: [
          { required: true, message: "请输入短信验证码", trigger: "blur" },
        ],
      },
      imgCode: "",
      replacePhone: {
        phone: "",
        imgCode: "",
        verificationCode: "",
      },
      countDown: 0, // éªŒè¯ç å€’计时秒数
      weChatState: false, // å¾®ä¿¡è®¤è¯çŠ¶æ€
      electronicSampleBookapplyNum: 0,
      paperSampleBookapplyNum: 0,
    };
  },
  created() {
    this.getImgCapcha();
    this.getElectronicSampleBookapplyNum();
    this.getPaperSampleBookapplyNum();
    this.getWechatAuthenticationState();
    this.getUserInfo();
    if (!this.userInfo.phoneNumber) {
      this.$confirm(
        "检测到您还未绑定手机号,绑定手机号后当前账号即可使用手机号进行登录!",
        "温馨提示",
        {
          confirmButtonText: "绑定手机号",
          cancelButtonText: "关闭",
          type: "warning",
        }
      )
        .then(() => {
          this.isPlace = true;
        })
        .catch(() => {});
    }
  },
  methods: {
    toTeacherRegister() {
      this.$parent.changeSelected("1");
    },
    getUserInfo() {
      this.MG.identity.getCurrentAppUser().then((res) => {
        if (res) {
          let teacherRole = res.roleLinks.find(
            (item) => item.role.refCode == "teacher"
          );
          let teacherInfo = res.infoList.find(
            (item) => item.type == "teacherInfo"
          );
          let wechatInfo = res.infoList.find((item) => item.type == "WeChat");
          let studentInfo = res.infoList.find((item) => item.type == "Default");
          let phoneInfo = res.secretList.find(
            (item) => item.type == "MobilePhone"
          );
          if (teacherRole && teacherInfo) {
            let data = {};
            try {
              data = JSON.parse(teacherInfo.data);
            } catch (error) {
              data = {};
            }
            this.$store.dispatch("setUserInfo", {
              ...data,
              name: data.fullName,
              phoneNumber: phoneInfo?.credential,
              role: "Teacher",
              roleId: teacherRole.role.id,
            });
          } else if (wechatInfo) {
            this.$store.dispatch("setUserInfo", {
              ...wechatInfo,
              phoneNumber: phoneInfo?.credential,
              role: "Student",
            });
          } else if (studentInfo) {
            this.$store.dispatch("setUserInfo", {
              ...studentInfo,
              phoneNumber: phoneInfo?.credential,
              role: "Student",
            });
          }
        }
      });
    },
    replace() {
      this.$refs.form.validate((val) => {
        let query = {
          phoneNumber: this.replacePhone.phone,
          phoneCaptcha: this.replacePhone.verificationCode,
        };
        this.MG.identity.userSetPhoneNumber(query).then((res) => {
          if (res == "验证码过期或错误") {
            this.$message({
              message: res + ",请稍后重试",
              type: "error",
            });
          } else if (res == "此手机号码已被其它账号绑定") {
            this.$message({
              message: res + ",请更换其他手机号。",
              type: "error",
            });
          } else {
            this.$message({
              message: res,
              type: "success",
            });
            this.$store.dispatch("setUserInfo", {
              ...this.userInfo,
              phoneNumber: this.replacePhone.phone,
            });
            this.isPlace = false;
          }
        });
      });
    },
    // èŽ·å–å›¾å½¢éªŒè¯ç 
    getImgCapcha() {
      this.MG.identity.getImgCode().then((res) => {
        this.imgCode = "data:image/png;base64," + res;
      });
    },
    // å‘送短信验证码
    getVerifyCode() {
      let validateFieldList = [];
      this.$refs.form.validateField(["phone", "imgCode"], (val) => {
        // ç”±äºŽ validateField éªŒè¯ä¼šè§¦å‘多次,当每次验证通过后都往数组里添加一条数据。
        if (!val) {
          validateFieldList.push("通过");
        }
        // æ­¤å¤„ 2 ä¸ºéªŒè¯å­—段的数量
        if (validateFieldList.length == 2) {
          this.MG.identity
            .getPhoneCode({
              phoneNumber: this.replacePhone.phone,
              imageCaptcha: this.replacePhone.imgCode,
              appRefCode: this.config.appRefCode,
            })
            .then((res) => {
              if (
                res == "验证码发送成功" ||
                res == "验证码发送频繁请稍后再试"
              ) {
                this.$message({
                  message: res,
                  type: "success",
                });
                // å¼€å¯çŸ­ä¿¡éªŒè¯å€’计时
                this.getSecond(90);
              } else {
                this.$message({
                  message: res,
                  type: "error",
                });
                this.getImgCapcha();
              }
            });
        }
      });
    },
    // éªŒè¯ç å€’计时
    getSecond(time) {
      if (!this.timer) {
        this.countDown = time;
        this.timer = setInterval(() => {
          this.countDown--;
          if (this.countDown == 0) {
            clearInterval(this.timer);
            this.timer = null;
          }
        }, 1000);
      }
    },
    handleClose(done) {
      // æ¢å¤é»˜è®¤å€¼
      for (const key in this.replacePhone) {
        this.replacePhone[key] = "";
      }
      this.formKey++;
      this.isPlace = false;
    },
    // èŽ·å–å¾®ä¿¡è®¤è¯çŠ¶æ€
    getWechatAuthenticationState() {
      this.MG.identity.checkBuildingWeChat({}).then((res) => {
        if (res) {
          this.weChatState = true;
        } else {
          this.weChatState = false;
          this.$confirm(
            "您还未绑定微信,为了您能正常使用中国农业大学出版社公众号样书申请服务,请使用微信扫码绑定!",
            "温馨提示",
            {
              confirmButtonText: "去扫码绑定微信",
              cancelButtonText: "关闭",
              type: "warning",
            }
          )
            .then(() => {
              this.goBindWeChat();
            })
            .catch(() => {});
        }
      });
    },
    goBindWeChat() {
      this.$router.push({
        path: "/bindWeChat",
      });
    },
    //电子书剩余申请次数
    getElectronicSampleBookapplyNum() {
      this.MG.app
        .getTicketResult({
          ticketRefCodeOrGuid: "electronicSampleBookapplyNum",
          roleId: this.userInfo.roleId,
        })
        .then((res) => {
          this.electronicSampleBookapplyNum = res.totalCount - res.usedCount;
        });
    },
    //纸质书剩余申请次数
    getPaperSampleBookapplyNum() {
      this.MG.app
        .getTicketResult({
          ticketRefCodeOrGuid: "paperSampleBookapplyNum",
          roleId: this.userInfo.roleId,
        })
        .then((res) => {
          this.paperSampleBookapplyNum = res.totalCount - res.usedCount;
        });
    },
  },
};
</script>
<style lang="less" scoped>
.content {
  padding: 40px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  .wrapImg {
    position: relative;
    width: 100px;
    height: 100px;
    border-radius: 50%;
  }
  .information {
    display: inline-block;
    color: #666;
    div {
      span {
        display: inline-block;
        width: 130px;
        line-height: 50px;
      }
      & > span:nth-child(2) {
        color: #333;
      }
      p {
        display: inline-block;
      }
    }
    .modify {
      color: #e50021;
      border-bottom: 1px solid #e50021;
      cursor: pointer;
    }
  }
}
.imgCodeBox {
  margin-left: 20px;
  height: 40px;
  width: 140px;
  cursor: pointer;
  img {
    width: 140px;
    height: 100%;
  }
}
.title {
  font-size: 18px;
  font-weight: 700;
  letter-spacing: 1.8px;
  line-height: 36px;
  padding-left: 40px;
  background: #d8f7e6;
  line-height: 60px;
  color: #00873c;
  span {
    font-size: 16px;
    font-weight: 500;
  }
}
.usericon {
  width: 60px;
  height: 60px;
  vertical-align: middle;
  border-radius: 50%;
}
</style>
src/views/personalCenter/components/downloadApplication.vue
New file
@@ -0,0 +1,254 @@
<template>
  <div class="content" v-loading="orderLoading">
    <el-empty
      description="暂无数据"
      class="empty"
      :image-size="200"
      v-if="orderList.length == 0"
    ></el-empty>
    <div v-for="(item, index) in orderList" :key="index">
      <div class="headerInformation">
        <span>
          <div class="examine" v-if="item.state == 'WaitAudit'">
            <img
              src="@/assets/images/personalCenter/examine.png"
              alt=""
              srcset=""
            />
            çŠ¶æ€ï¼šå¾…å®¡æ ¸
          </div>
          <div class="pass" v-else-if="item.state == 'Normal'">
            <img src="@/assets/images/personalCenter/pass.png" alt="" />
            çŠ¶æ€ï¼šå·²é€šè¿‡
          </div>
          <div class="noPass" v-else-if="item.state == 'Reject'">
            <img src="@/assets/images/personalCenter/noPass.png" alt="" />
            çŠ¶æ€ï¼šå·²æ‹’ç»
          </div>
        </span>
        <span class="applicationTime">
          ç”³è¯·æ—¶é—´ï¼š{{ moment(item.createDate).format("YYYY-MM-DD") }}</span
        >
      </div>
      <div class="bookItem">
        <div class="wrapImg">
          <img
            class="autoImg"
            :src="
              item.icon
                ? item.icon
                : require('@/assets/images/default-book-img.png')
            "
            alt=""
          />
        </div>
        <div class="information">
          <div>
            <span
              class="name"
              v-if="item.state == 'Normal'"
              :title="item.name"
              >{{ item.name }}</span
            >
            <span class="name" title="资源通过审核后方可查看" v-else>{{
              item.name
            }}</span>
          </div>
          <p class="author" v-if="item.content.author">
            ä½œè€…:{{ item.content.author ? item.content.author : "未知作者" }}
          </p>
          <p class="author" v-if="item.content.isdn">
            ISBN:{{ item.content.isdn ? item.content.isdn : "未知ISBN号" }}
          </p>
          <div class="succeeded" v-if="item.state == 'Normal'">
            <el-button size="medium" @click="toDetail(item)"
              >查看详情</el-button
            >
          </div>
          <div class="reason mt14" v-else-if="item.state == 'Reject'">
            <div>理由:</div>
            <div style="flex: 1">{{ item.feedBack.reason }}</div>
          </div>
        </div>
      </div>
    </div>
    <!-- åˆ†é¡µ -->
    <div class="pageinateBox" v-if="orderList.length > 0">
      <el-pagination
        @size-change="
          (val) => {
            paginationData.limit = val;
            getData();
          }
        "
        @current-change="
          (val) => {
            paginationData.page = val;
            getData();
          }
        "
        background=""
        :current-page="paginationData.page - 0"
        :page-size="paginationData.limit"
        prev-text="上一页"
        next-text="下一页"
        layout="total, prev, pager, next, slot, jumper"
        :total="paginationData.totalCount"
      >
      </el-pagination>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      orderList: [],
      orderLoading: true,
      paginationData: {
        page: 1,
        totalCount: 0,
        limit: 5,
        totalPage: 0,
      },
    };
  },
  created() {
    this.getData();
  },
  methods: {
    // èŽ·å–ç”³è¯·ä¸‹è½½
    getData() {
      this.orderLoading = true;
      let { limit, page } = this.paginationData;
      let query = {
        start: limit * page - limit,
        size: limit,
        sort: {
          field: "createDate",
          type: "Desc",
        },
        appRefCode: this.config.appRefCode,
        topicIdOrRefCode: this.config.refCodes.productDownLoad,
      };
      this.MG.ugc.getTopicMessageList(query).then((res) => {
        this.orderLoading = false;
        res.datas.map((data) => {
          data.content = JSON.parse(data.content);
          data.feedBack = data.feedBack ? JSON.parse(data.feedBack) : "";
        });
        this.paginationData.totalCount = res.totalSize;
        this.orderList = res.datas;
      });
    },
    // è·³è½¬è‡³è¯¦æƒ…
    toDetail(item) {
      let routeData = this.$router.resolve({
        name: "bookStore-detail",
        query: {
          id: item.content.id,
          cmsPath: item.content.rootCmsItemId,
        },
      });
      window.open(routeData.href, "_blank");
    },
  },
};
</script>
<style lang="less" scoped>
.content {
  padding: 40px 40px 0 40px;
  min-height: 600px;
  .headerInformation {
    display: flex;
    justify-content: space-between;
    align-items: center;
    .pass {
      align-items: center;
      font-size: 18px;
      font-weight: 700;
      color: #00873c;
    }
    .examine {
      font-size: 18px;
      font-weight: 700;
      color: #8b4513;
    }
    .noPass {
      font-size: 18px;
      font-weight: 700;
      color: #e50021;
    }
    .applicationTime {
      font-size: 14px;
      color: #666666;
    }
  }
  .bookItem {
    display: flex;
    justify-content: space-between;
    border-bottom: 1px solid #eeeeee;
    padding-top: 40px;
    padding-bottom: 40px;
    margin-bottom: 40px;
    .wrapImg {
      position: relative;
      border: 1px solid #e6e6e6;
      background: #ffffff;
      width: 150px;
      height: 200px;
    }
    .information {
      width: 520px;
      font-size: 16px;
      .name {
        cursor: pointer;
        display: inline-block;
        font-size: 24px;
        font-weight: 700;
        line-height: 24px;
        padding-bottom: 10px;
        color: #333333;
      }
      .adopt {
        float: right;
        color: #00873c;
      }
      .author {
        color: #666666;
        padding: 7px 0;
      }
      .reason {
        display: flex;
        line-height: 28px;
        & > :first-child {
          width: 50px;
        }
      }
      .succeeded {
        margin-top: 66px;
        :deep(.el-button--medium) {
          padding: 11px 27px;
          border: 1px solid #00873c;
          color: #00873c;
          font-size: 16px;
        }
      }
      .mt14 {
        margin-top: 14px;
      }
    }
  }
  .pageinateBox {
    text-align: center;
    padding: 40px 0;
    :deep(.el-pagination.is-background .btn-next) {
      padding: 0 10px;
    }
    :deep(.el-pagination.is-background .btn-prev) {
      padding: 0 10px;
    }
  }
}
</style>
src/views/personalCenter/components/electronicSampleBook.vue
New file
@@ -0,0 +1,392 @@
<template>
  <div class="wrap">
    <div v-loading="loading">
      <el-empty
        description="暂无数据"
        class="empty"
        :image-size="200"
        v-if="orderList.length == 0 && !loading"
      ></el-empty>
      <div class="bookItem" v-for="(item, index) in orderList" :key="index">
        <div class="orderInformation">
          <span class="primaryTxt" v-if="item.state == 'Normal'"
            >审核状态:
            <template>通过</template>
          </span>
          <span class="toBeReviewed" v-else-if="item.state == 'WaitAudit'"
            >审核状态:
            <template>审核中</template>
          </span>
          <span class="auditFailed" v-else-if="item.state == 'Reject'"
            >审核状态:
            <template>审核失败</template>
          </span>
          <span>
            <span class="c999">申请日期:</span>
            {{ item.createDate }}</span
          >
          <div class="reason" v-if="item.state == 'Reject'">
            <p class="reasonIntroduction">
              <span class="c999">理由:</span>
              <span class="reasonContent">
                {{ item.feedBack.reason ? item.feedBack.reason : "-" }}
              </span>
            </p>
          </div>
          <span v-if="item.state == 'Normal' && item.isActive">
            <span class="c999">有效期:</span>
            {{ item.feedBack.endDate || "-" }}
          </span>
          <span
            v-if="item.state == 'Normal' && !item.isActive"
            style="color: red"
          >
            <span class="c999">有效期:</span>
            å·²è¿‡æœŸ
          </span>
        </div>
        <div class="orderBookList">
          <div
            v-for="(itemBook, index) in item.content"
            style="cursor: pointer"
            class="orderBook"
            :key="index"
            @click.stop="jumpBookDetail(itemBook)"
          >
            <div class="wrapImg">
              <img class="autoImg" :src="itemBook.icon" alt="" />
            </div>
            <p style="width: 150px" class="ellipsis" :title="itemBook.title">
              {{ itemBook.title }}
            </p>
            <p style="width: 150px" class="c999 ellipsis">{{ itemBook.author }}</p>
            <p
              style="text-align: center"
              v-if="item.state == 'Normal' && item.isActive"
            >
              <el-button @click.stop="readDate(itemBook)" type="primary"
                >立即阅读</el-button
              >
            </p>
          </div>
        </div>
        <div v-if="item.state == 'Reject'" @click="deleteItem(item)">
          <i class="el-icon-delete-solid red"></i>
        </div>
      </div>
      <!-- åˆ†é¡µ -->
      <div class="pageinateBox" v-if="orderList.length > 0">
        <el-pagination
          @size-change="
            (val) => {
              paginationData.limit = val;
              getData();
            }
          "
          @current-change="
            (val) => {
              paginationData.page = val;
              getData();
            }
          "
          background=""
          :current-page="paginationData.page - 0"
          :page-size="paginationData.limit"
          prev-text="上一页"
          next-text="下一页"
          layout="total, prev, pager, next, slot, jumper"
          :total="paginationData.totalCount"
        >
        </el-pagination>
      </div>
    </div>
  </div>
</template>
<script>
import { mapState } from "vuex";
export default {
  data() {
    return {
      orderList: [],
      loading: true,
      paginationData: {
        page: 1,
        totalCount: 0,
        limit: 5,
        totalPage: 0,
      },
    };
  },
  computed: {
    ...mapState(["userInfo"]),
  },
  created() {
    this.getData();
  },
  methods: {
    getData() {
      this.loading = true;
      let { limit, page } = this.paginationData;
      const data = {
        start: limit * page - limit,
        size: limit,
        sort: {
          field: "createDate",
          type: "Desc",
        },
        appRefCode: this.config.appRefCode,
        topicIdOrRefCode: this.config.refCodes.applyBook,
      };
      this.MG.ugc.getTopicMessageList(data).then((res) => {
        this.loading = false;
        try {
          this.paginationData.totalCount = res.totalSize;
          if (res && res.datas.length > 0) {
            let list = [];
            for (let i = 0; i < res.datas.length; i++) {
              const ele = res.datas[i];
              ele.createDate = ele.createDate.split("T")[0];
              if (ele.content) {
                ele.content = JSON.parse(ele.content);
              }
              if (ele.feedBack) {
                ele.isActive = false;
                ele.feedBack = JSON.parse(ele.feedBack);
                const readDate = new Date(
                  ele.feedBack.endDate + " 23:59:59"
                ).getTime();
                const currentDate = Number(sessionStorage.currentDate);
                if (readDate > currentDate) {
                  ele.isActive = true;
                }
              }
              list.push(ele);
            }
            this.orderList = list;
          }
        } catch (error) {
          this.orderList = [];
        }
      });
    },
    deleteItem(item) {
      this.$confirm("确定移除吗?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          let data = {
            messageIds: [item.id],
          };
          this.MG.ugc.delTopicMessage(data).then((res) => {
            if (res) {
              this.$message({
                type: "success",
                message: "已移除该电子样书!",
              });
              this.getData();
            }
          });
        })
        .catch(() => {
          this.$message({
            type: "fail",
            message: "取消操作!",
          });
        });
    },
    readDate(item) {
      this.getBookData(item);
    },
    // èŽ·å–æ•°æ®
    getBookData(item) {
      this.loading = true;
      this.MG.store
        .getProductDetail({
          path: "caupress_teachingResource\\" + item.id,
          productId: item.id,
          paging: {
            start: 0,
            size: 1,
          },
          fields: {
            caupress_pdfFreeFile: [],
            caupress_pdfFile: [],
          },
          coverSize: {
            width: 180,
          },
        })
        .then((res) => {
          try {
            let obj = {};
            if (res.datas.alreadyBuy) {
              obj = {
                pdfFile: res.datas.caupress_pdfFile,
                name: res.datas.name,
                productLinkPath: res.datas.productLinkInfo[0].LinkPath,
              };
            } else {
              obj = {
                pdfFile: res.datas.caupress_pdfFreeFile,
                name: res.datas.name,
                productLinkPath: res.datas.productLinkInfo[0].LinkPath,
              };
            }
            // è·³è½¬è‡³PDF页面
            this.openBook(obj);
            this.loading = false;
          } catch (error) {
            this.$message({
              type: "fail",
              message: "暂无阅读资料!",
            });
            this.loading = false;
          }
        });
    },
    openBook(item) {
      console.log(item,"item");
      let routeUrl = this.$router.resolve({
        name: "preview-pdf",
        query: {
          md5: item.pdfFile,
          titleName: item.name,
          productLinkPath: item.productLinkPath,
        },
      });
      window.open(routeUrl.href, "_blank");
      // this.$router.push({
      //   name: "preview-pdf",
      //   query: {
      //     md5: item.pdfFile,
      //     titleName: item.name,
      //     productLinkPath: item.productLinkPath
      //   }
      // });
    },
    // è·³è½¬å›¾ä¹¦è¯¦æƒ…
    jumpBookDetail(row) {
      let url = this.$router.resolve({
        name: "teachingServices-detail",
        query: {
          id: row.id,
          cmsPath: row.cmsPath,
        },
      });
      window.open(url.href, "_blank");
    },
    // å¤„理当 å½“前页面的数据已全部移除后,跳转至前一页
    JumpToPreviousPage(datas) {
      if (this.paginationData.page > 1 && datas.length == 0) {
        this.paginationData.page -= 1;
        this.getData();
      }
    },
  },
};
</script>
<style lang="less" scoped>
.wrap {
  padding: 40px;
  .tips {
    padding: 20px;
    background: #f2f7f4;
    border-radius: 4px;
    font-size: 14px;
    color: #666666;
  }
  .bookItem {
    border-bottom: 1px solid #eeeeee;
    padding-bottom: 40px;
    // margin-bottom: 40px;
    .spaceBetween {
      width: 100%;
      display: flex;
      justify-content: space-between;
      align-items: flex-end;
      font-size: 18px;
      font-weight: 700;
      line-height: 24px;
    }
    .orderInformation {
      background: #f2f7f4;
      border-radius: 4px;
      padding: 20px;
      font-size: 16px;
      color: #333333;
      margin: 30px 0;
      .auditFailed {
        color: #e50021;
      }
      .toBeReviewed {
        color: #d18252;
      }
      span {
        display: inline-block;
        width: 330px;
        line-height: 40px;
      }
      .c999 {
        display: inline;
        color: #999;
      }
      .reason {
        display: flex;
        line-height: 28px;
        padding: 20px 0;
        .reasonIntroduction {
          width: 590px;
          display: inline-block;
          line-height: 22px;
          .reasonContent {
            display: inline;
            width: 100%;
            line-height: 30px;
          }
        }
      }
    }
    .orderBookList {
      display: flex;
      justify-content: flex-start;
      flex-wrap: wrap;
      font-size: 16px;
      color: #333;
      .orderBook {
        margin: 0 15px;
      }
      .wrapImg {
        position: relative;
        width: 150px;
        height: 200px;
        background-color: #f2f2f2;
        border: 1px solid #e6e6e6;
      }
      > div > p {
        margin: 10px 0;
      }
      .c999 {
        color: #999;
      }
    }
    .red {
      font-size: 16px;
      color: #e50021;
      float: right;
      cursor: pointer;
    }
  }
  .pageinateBox {
    text-align: center;
    padding: 40px 0;
    :deep(.el-pagination.is-background .btn-next) {
      padding: 0 10px;
    }
    :deep(.el-pagination.is-background .btn-prev) {
      padding: 0 10px;
    }
  }
}
</style>
src/views/personalCenter/components/myCollection.vue
New file
@@ -0,0 +1,471 @@
<template>
  <div>
    <div class="title spaceBetween">
      <span
        :class="paymentStatus == 0 ? 'paymentStatus' : 'place'"
        @click="
          () => {
            paymentStatus = 0;
            this.paginationData.page = 1;
            this.collectionList = [];
            this.getBookData();
          }
        "
        >图书收藏</span
      >
      <span class="splitline"></span>
      <span
        :class="paymentStatus == 1 ? 'paymentStatus' : 'place'"
        @click="
          () => {
            paymentStatus = 1;
            this.paginationData.page = 1;
            this.collectionList = [];
            this.getResourceData();
          }
        "
        >资源收藏</span
      >
    </div>
    <div class="content" v-loading="loading">
      <el-empty
        v-if="collectionList.length == 0 && orderList.length == 0 && !loading"
        :image-size="200"
        description="暂无数据"
      ></el-empty>
      <template>
        <template v-if="paymentStatus == 0">
          <div
            class="bookItem"
            v-for="(item, index) in collectionList"
            :key="index"
          >
            <div class="wrapImg">
              <img class="autoImg" :src="item.icon" alt="" />
            </div>
            <div class="information">
              <div>
                <span class="name ellipsis" @click="toDetail(item)">{{
                  item.name
                }}</span>
                <div class="cancelCollection">
                  <span @click="cancleBookCollect(item)">取消收藏</span>
                </div>
              </div>
              <p class="author">
                ä½œè€…:{{
                  item.caupress_author ? item.caupress_author : "未知作者"
                }}
              </p>
              <p class="author" v-if="item.caupress_publicationDate">
                å‡ºç‰ˆæ—¶é—´ï¼š{{
                  moment(item.caupress_publicationDate).format("YYYY-MM-DD")
                }}
              </p>
              <p class="author" v-if="item.caupress_ISBN">
                ISBN:{{ item.caupress_ISBN }}
              </p>
              <p class="payPrice">
                å®šä»·ï¼š
                <span
                  >ï¿¥ <span>{{ item.price }}</span>
                </span>
              </p>
            </div>
          </div>
        </template>
        <template v-else>
          <div
            class="resourcesItem"
            v-for="(item, index) in orderList"
            :key="index"
          >
            <span @click="preview(item)" class="resourcesPre"
              >资源名称:
              <span style="color: #333">{{ item.name }}</span>
            </span>
            <span
              >资源类型:
              <span style="color: #333">{{
                RefCodeConvertFormat(item.caupress_fileType)
              }}</span>
              <div
                class="cancelCollection"
                @click="cancleResourceCollect(item)"
              >
                å–消收藏
              </div>
            </span>
          </div>
        </template>
      </template>
    </div>
    <!-- åˆ†é¡µ -->
    <div
      class="pageinateBox"
      v-if="collectionList.length > 0 || orderList.length > 0"
    >
      <el-pagination
        @size-change="
          (val) => {
            paginationData.limit = val;
            if (paymentStatus == 0) {
              getBookData();
            } else {
              getResourceData();
            }
          }
        "
        @current-change="
          (val) => {
            paginationData.page = val;
            getBookData();
            if (paymentStatus == 0) {
              getBookData();
            } else {
              getResourceData();
            }
          }
        "
        background=""
        :current-page="paginationData.page - 0"
        :page-size="paginationData.limit"
        prev-text="上一页"
        next-text="下一页"
        layout="total, prev, pager, next, slot, jumper"
        :total="paginationData.totalCount"
      >
      </el-pagination>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      paginationData: {
        page: 1,
        totalCount: 0,
        limit: 5,
        totalPage: 0,
      },
      collectionList: [],
      paymentStatus: 0,
      loading: false,
      orderList: [],
    };
  },
  created() {
    // ç”¨äºŽæ¢å¤ è·³è½¬è¯¦æƒ…页之前的分页
    if (localStorage.getItem("searchPage")) {
      this.paginationData = JSON.parse(localStorage.getItem("searchPage"));
      localStorage.removeItem("searchPage");
      this.paymentStatus = JSON.parse(localStorage.getItem("insideTabs"));
      localStorage.removeItem("insideTabs");
    }
    if (this.paymentStatus == 0) {
      this.getBookData();
    } else {
      this.getResourceData();
    }
  },
  methods: {
    RefCodeConvertFormat(refCode) {
      switch (refCode) {
        case "caupress_video":
          return "视频";
        case "caupress_audio":
          return "音频";
        case "caupress_pdf":
          return "PDF";
        case "caupress_zip":
          return "Zip";
        default:
          break;
      }
    },
    // èŽ·å–å›¾ä¹¦æ”¶è—
    getBookData() {
      this.loading = true;
      this.paginationData.limit = 5;
      let { limit, page } = this.paginationData;
      this.paymentStatus == 0 ? "AppUserProductLink" : "AppUserCmsItemLink";
      let query = {
        queryType: "AppUserProductLink",
        linkType: "Favorite",
        paging: {
          start: limit * page - limit,
          size: limit,
        },
        sort: [],
        fields: {
          caupress_author: [],
          caupress_ISBN: [],
          caupress_publicationDate: [],
        },
        coverSize: {
          width: 120,
        },
      };
      this.MG.store.getProductList(query).then((res) => {
        this.JumpToPreviousPage(res.datas);
        this.collectionList = res.datas;
        this.paginationData.totalCount = res.total;
        this.loading = false;
      });
    },
    // èŽ·å–èµ„æºæ”¶è—
    getResourceData() {
      this.loading = true;
      this.paginationData.limit = 12;
      let { limit, page } = this.paginationData;
      this.MG.resource
        .getItem({
          path: "*",
          queryType: "AppUserCmsItemLink",
          linkType: "Favorite",
          paging: {
            start: limit * page - limit,
            size: limit,
          },
          fields: {
            caupress_author: [],
            caupress_ISBN: [],
            caupress_publicationDate: [],
            caupress_fileType: [],
            caupress_file: [],
          },
          coverSize: {
            width: 120,
          },
        })
        .then((res) => {
          this.JumpToPreviousPage(res.datas);
          this.orderList = res.datas;
          this.paginationData.totalCount = res.total;
          this.loading = false;
        });
    },
    // å–消图书收藏
    cancleBookCollect(item) {
      this.$confirm("确定取消收藏吗?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          this.loading = true;
          let data = {
            productIds: [item.id],
            linkType: "Favorite",
          };
          this.MG.store.delProductLink(data).then((res) => {
            if (res) {
              this.loading = false;
              this.$message({
                type: "success",
                message: "取消收藏成功!",
              });
              this.getBookData();
            }
          });
        })
        .catch(() => {
          this.$message({
            type: "info",
            message: "已取消操作",
          });
        });
    },
    // å–消资源收藏
    cancleResourceCollect(item) {
      this.$confirm("确定取消收藏吗?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          this.loading = true;
          let data = {
            cmsItemIds: [item.id],
            linkType: "Favorite",
          };
          this.MG.resource.delCmsItemLink(data).then((res) => {
            if (res) {
              this.loading = false;
              this.$message({
                type: "success",
                message: "取消收藏成功!",
              });
              this.getResourceData();
            }
          });
        })
        .catch(() => {
          this.$message({
            type: "info",
            message: "已取消操作",
          });
        });
    },
    // åŽ»å¾€è¯¦æƒ…é¡µ
    toDetail(item) {
      let LinkTag = item.datas.LinkTag;
      // æ ¹æ®ä¸åŒé¡µé¢æ”¶è—çš„跳转不同页面
      let jumpPath =
        LinkTag == "bookStore" ? "bookStore-detail" : "teachingServices-detail";
      this.saveInformation();
      this.$router.push({
        name: jumpPath,
        query: {
          id: item.id,
          cmsPath: item.rootCmsItemId,
        },
      });
    },
    //去资源详情
    preview(item) {
      let previewType = item.caupress_fileType.split("_")[1];
      this.saveInformation();
      if (previewType == "zip") {
        this.$message({
          type: "warning",
          message: "此文件类型不支持预览",
        });
      } else {
        this.$router.push({
          name: `preview-${previewType}`,
          query: {
            md5: item.caupress_file,
            titleName: item.name,
          },
        });
      }
    },
    // å¤„理当当前页面的数据已全部取消收藏后,跳转至前一页
    JumpToPreviousPage(datas) {
      if (this.paginationData.page > 1 && datas.length == 0) {
        this.paginationData.page -= 1;
        this.getBookData();
      }
    },
    // ä¿å­˜å½“前页面信息,用于详情页返回时恢复页面数据
    saveInformation() {
      localStorage.setItem(
        "searchPage",
        JSON.stringify({ ...this.paginationData })
      );
      localStorage.setItem("selectedTab", JSON.stringify(2));
      localStorage.setItem("insideTabs", JSON.stringify(this.paymentStatus));
    },
  },
};
</script>
<style lang="less" scoped>
.title {
  font-size: 18px;
  font-weight: 700;
  letter-spacing: 1.8px;
  border-top: 2px solid #008e3f;
  line-height: 36px;
  padding-left: 40px;
  background: #d8f7e6;
  line-height: 60px;
  color: #00873c;
  .splitline {
    width: 1px;
    height: 24px;
    background-color: #008e3f;
  }
}
.spaceBetween {
  padding-left: 0;
  display: flex;
  justify-content: space-evenly;
  align-items: center;
  span {
    font-weight: 400;
  }
  .paymentStatus {
    font-weight: 700;
  }
  .place {
    cursor: pointer;
  }
}
.content {
  min-height: 600px;
  padding: 40px 40px 0 40px;
  .cancelCollection {
    cursor: pointer;
    float: right;
    color: #e50021;
  }
  .bookItem {
    display: flex;
    justify-content: space-between;
    border-bottom: 1px solid #eeeeee;
    padding-bottom: 40px;
    margin-bottom: 40px;
    .wrapImg {
      position: relative;
      border: 1px solid #e6e6e6;
      background: #ffffff;
      width: 150px;
      height: 200px;
    }
    .information {
      width: 520px;
      font-size: 16px;
      .name {
        cursor: pointer;
        width: 450px;
        display: inline-block;
        font-size: 24px;
        font-weight: 700;
        line-height: 24px;
        padding-bottom: 20px;
        color: #333333;
      }
      .author {
        color: #666666;
        padding: 8px 0;
      }
      .payPrice {
        color: #333333;
        padding: 14px 0;
        span {
          font-size: 14px;
          color: #e50021;
          span {
            font-size: 24px;
          }
        }
      }
    }
  }
  .resourcesItem {
    font-size: 16px;
    color: #666;
    display: flex;
    line-height: 50px;
    > span {
      width: 50%;
    }
  }
}
.pageinateBox {
  text-align: center;
  padding: 40px 0;
  :deep(.el-pagination.is-background .btn-next) {
    padding: 0 10px;
  }
  :deep(.el-pagination.is-background .btn-prev) {
    padding: 0 10px;
  }
}
.resourcesPre {
  cursor: pointer;
}
</style>
src/views/personalCenter/components/orderList.vue
New file
@@ -0,0 +1,459 @@
<template>
  <div>
    <div class="title spaceBetween">
      <span
        :class="paymentStatus == 0 ? 'paymentStatus' : 'place'"
        @click="changeTabs(0)"
        >全部</span
      >
      <span class="splitline"></span>
      <span
        :class="paymentStatus == 1 ? 'paymentStatus' : 'place'"
        @click="changeTabs(1)"
        >已支付</span
      >
      <span class="splitline"></span>
      <span
        :class="paymentStatus == 2 ? 'paymentStatus' : 'place'"
        @click="changeTabs(2)"
        >待支付</span
      >
    </div>
    <div class="content" v-loading="orderListloading">
      <el-empty
        v-if="orderList.length == 0"
        :image-size="200"
        description="暂无数据"
      ></el-empty>
      <template v-else>
        <div class="" v-for="(item, index) in orderList" :key="index">
          <div class="orderNum">
            <span>订单编号:{{ item.orderNumber }}</span>
            <span>创建日期:{{ item.createDate.split("T")[0] }}</span>
          </div>
          <div class="bookItem">
            <div class="wrapImg">
              <img
                class="autoImg"
                :src="
                  getPublicImage(
                    item.saleMethodLinks[0].orderSaleMethod.product.icon
                  )
                "
                alt=""
              />
            </div>
            <div class="information">
              <div>
                <span
                  class="name ellipsis"
                  :title="item.saleMethodLinks[0].orderSaleMethod.product.name"
                  >{{
                    item.saleMethodLinks[0].orderSaleMethod.product.name
                  }}</span
                >
                <span
                  style="float: right; color: #00873c"
                  v-if="item.state == 'Success'"
                  >已支付</span
                >
                <span
                  style="float: right; color: #e50021"
                  v-else-if="item.state == 'WaitPay'"
                  >待支付</span
                >
                <span
                  style="float: right; color: #ccc"
                  v-else-if="item.state == 'Cancel'"
                  >已取消</span
                >
              </div>
              <!-- <p class="author">
              ä½œè€…:{{ item.author }}
            </p> -->
              <p class="payPrice">
                æ”¯ä»˜ä»·æ ¼ï¼š
                <span
                  >ï¿¥ <span>{{ item.payPrice }}</span>
                </span>
              </p>
              <p class="quantity">数量:{{ item.saleMethodLinks[0].count }}</p>
              <!-- ä¸éœ€è¦æ˜¾ç¤ºå¿«é€’消息 10988 -->
              <!-- <div class="express" v-if="item.state == 'Success'">
              <p>快递信息:{{ item.expressCompany }}</p>
              <p>快递单号:{{ item.courierNumber }}</p>
              <p class="ellipsis" :title="item.receivingInformation">
                æ”¶è´§ä¿¡æ¯ï¼š {{ item.receivingInformation }}
              </p>
            </div> -->
              <!--
              2023-04-11 æš‚时屏蔽
              <div class="succeeded" v-if="item.state == 'Success'">
              <el-button
                size="medium"
                @click="
                  () => {
                    drawABill = true;
                  }
                "
                >开具发票</el-button
              >
            </div> -->
              <div class="unpaid" v-if="item.state == 'WaitPay'">
                <el-button size="medium" @click="toPay(item.orderNumber)"
                  >立即支付</el-button
                >
                <el-button
                  type="danger"
                  plain
                  @click="cancelOrder(item.orderNumber)"
                  >取消订单</el-button
                >
              </div>
            </div>
          </div>
        </div>
      </template>
    </div>
    <!-- å¼€å…·å‘票模态框 -->
    <el-dialog
      v-loading="loading"
      title="提示"
      :visible="drawABill"
      width="40%"
      :before-close="handleClose"
    >
      <el-form
        :model="billData"
        ref="form"
        label-position="left"
        :rules="rules"
        label-width="130px"
      >
        <el-form-item label="发票类型"> å¢žå€¼ç¨Žçº¸è´¨æ™®é€šå‘票 </el-form-item>
        <el-form-item label="抬头类型">
          <el-radio v-model="billData.type" label="1">个人或事业单位</el-radio>
          <el-radio v-model="billData.type" label="2">公司</el-radio>
        </el-form-item>
        <el-form-item label="发票抬头" prop="name">
          <el-input
            v-model="billData.name"
            placeholder="请填写需要开具发票的姓名"
          ></el-input>
        </el-form-item>
        <el-form-item label="发票内容" prop="phone">
          <el-input v-model="billData.content" placeholder="明细"></el-input>
        </el-form-item>
        <el-form-item label="收货地址" prop="phone">
          <el-radio
            v-model="billData.type"
            label="2"
            v-for="(item, index) in addressList"
            :key="index"
          >
            <div></div>
            <span>
              {{ item.city + item.address }}
            </span>
            <div>{{ item.name }} {{ item.tel }}</div>
          </el-radio>
        </el-form-item>
        <span slot="footer" class="dialog-footer">
          <el-button @click="dialogVisible = false">取 æ¶ˆ</el-button>
          <el-button type="primary" @click="dialogVisible = false"
            >ç¡® å®š</el-button
          >
        </span>
      </el-form>
    </el-dialog>
    <!-- åˆ†é¡µ -->
    <div class="pageinateBox" v-if="orderList.length > 0">
      <el-pagination
        @size-change="
          (val) => {
            paginationData.limit = val;
            getData();
          }
        "
        @current-change="
          (val) => {
            paginationData.page = val;
            getData();
          }
        "
        background=""
        :current-page="paginationData.page - 0"
        :page-size="paginationData.limit"
        prev-text="上一页"
        next-text="下一页"
        layout="total, prev, pager, next, slot, jumper"
        :total="paginationData.totalCount"
      >
      </el-pagination>
    </div>
  </div>
</template>
<script>
import { getPublicImage } from "@/assets/js/middleGround/tool";
export default {
  data() {
    return {
      orderList: [],
      paginationData: {
        page: 1,
        totalCount: 0,
        limit: 5,
        totalPage: 0,
      },
      orderListloading: false,
      paymentStatus: 0,
      drawABill: false, // å¼€å…·å‘票模态框是否展示
      billData: {
        type: 1, // å‘票类型,默认为个人
        name: "", // å¼€å‘票的姓名
        content: "", // å‘票内容
        address: "", // å‘票地址
      }, // å‘票信息
      rules: {
        name: [
          {
            required: true,
            message: "请填写需要开具发票的姓名",
            trigger: "blur",
          },
        ],
      },
      addressList: [], // ç”¨æˆ·åœ°å€
      loading: false,
    };
  },
  created() {
    this.getData();
    this.getAddress();
  },
  methods: {
    getPublicImage,
    changeTabs(index) {
      this.paymentStatus = index;
      this.getData();
    },
    getData() {
      this.orderListloading = true;
      let { limit, page } = this.paginationData;
      let filterList = [];
      if (this.paymentStatus != 0) {
        filterList = [
          {
            value: this.paymentStatus == 1 ? "Success" : "WaitPay",
            field: "State",
          },
        ];
      }
      let query = {
        size: limit,
        start: limit * page - limit,
        sort: {
          type: "Desc",
          field: "CreateDate",
        },
        filterList,
      };
      this.MG.store.getUserOrderList(query).then((res) => {
        this.orderListloading = false;
        this.orderList = res.datas;
        this.paginationData.totalCount = res.totalSize;
      });
    },
    toPay(orderNumber) {
      this.$router.push({
        name: "bookStore-order",
        query: {
          orderNum: orderNumber,
        },
      });
    },
    handleClose(done) {
      this.$confirm("确定取消开具发票吗?")
        .then(() => {
          this.drawABill = false;
        })
        .catch((_) => {});
    },
    // èŽ·å–æ‰€æœ‰åœ°å€
    getAddress() {
      this.loading = true;
      this.MG.identity.getCurrentAppUser().then((res) => {
        this.loading = false;
        let storeInfoList = res.infoList.find((i) => i.type == "Address");
        if (storeInfoList && storeInfoList.data) {
          this.addressList = JSON.parse(storeInfoList.data);
        } else {
          // ç”¨æˆ·ä¸ºç¬¬ä¸€æ¬¡æ·»åŠ åœ°å€ï¼Œåˆ™å½“å‰æ‰€é€‰åœ°å€ä¸ºé»˜è®¤åœ°å€
          this.addressItem.ifdefalut = true;
        }
      });
    },
    // å–消订单
    cancelOrder(orderNum) {
      this.$confirm("确定取消支付", "提示", {
        type: "warning",
      })
        .then(() => {
          let query = {
            orderNum: orderNum,
          };
          this.MG.store.cancelOrder(query).then((res) => {
            this.$message({
              type: "success",
              message: "订单已取消",
            });
            this.getData();
          });
        })
        .catch(() => {});
    },
  },
};
</script>
<style lang="less" scoped>
.title {
  font-size: 18px;
  font-weight: 700;
  letter-spacing: 1.8px;
  border-top: 2px solid #008e3f;
  line-height: 36px;
  padding-left: 40px;
  background: #d8f7e6;
  line-height: 60px;
  color: #00873c;
  .splitline {
    width: 1px;
    height: 24px;
    background-color: #008e3f;
  }
}
.spaceBetween {
  padding-left: 0;
  display: flex;
  justify-content: space-evenly;
  align-items: center;
  span {
    font-weight: 400;
  }
  .paymentStatus {
    font-weight: 700;
  }
  .place {
    cursor: pointer;
  }
}
.content {
  padding: 40px 40px 0 40px;
  .orderNum {
    font-size: 16px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 40px;
  }
  .bookItem {
    display: flex;
    justify-content: space-between;
    border-bottom: 1px solid #eeeeee;
    padding-bottom: 40px;
    margin-bottom: 40px;
    .wrapImg {
      border: 1px solid #e6e6e6;
      background: #ffffff;
      width: 150px;
      height: 200px;
      position: relative;
    }
    .information {
      width: 520px;
      font-size: 16px;
      .name {
        display: inline-block;
        width: 460px;
        font-size: 24px;
        font-weight: 700;
        line-height: 24px;
        color: #333333;
      }
      .author {
        font-weight: 400;
        color: #666666;
        padding: 14px 0;
      }
      .payPrice {
        color: #333333;
        padding: 14px 0;
        span {
          font-size: 14px;
          color: #e50021;
          span {
            font-size: 24px;
          }
        }
      }
      .quantity {
        color: #333333;
        padding: 5px 0;
        padding-bottom: 20px;
      }
      .express {
        height: 70px;
        background: #f2f7f4;
        border-radius: 4px;
        padding: 10px;
        color: #666666;
        font-size: 14px;
        line-height: 24px;
        margin-bottom: 30px;
      }
      .succeeded {
        :deep(.el-button--medium) {
          padding: 11px 27px;
          border: 1px solid #00873c;
          color: #00873c;
          font-size: 16px;
        }
      }
      // .unpaid {
      //   }
      .pay {
        :deep(.el-button--medium) {
          padding: 11px 27px;
          border: 1px solid #e50021;
          color: #e50021;
          font-size: 16px;
        }
      }
      .cancel {
        :deep(.el-button--medium) {
          padding: 11px 27px;
          // border: 1px solid yellow;
          color: #fff;
          font-size: 16px;
        }
      }
    }
  }
}
.pageinateBox {
  text-align: center;
  padding: 40px 0;
  :deep(.el-pagination.is-background .btn-next) {
    padding: 0 10px;
  }
  :deep(.el-pagination.is-background .btn-prev) {
    padding: 0 10px;
  }
}
</style>
src/views/personalCenter/components/paperSampleBook.vue
New file
@@ -0,0 +1,297 @@
<template>
  <div class="wrap" v-loading="loading">
    <el-empty
      description="暂无数据"
      class="empty"
      :image-size="200"
      v-if="orderList.length == 0"
    ></el-empty>
    <template v-else>
      <div class="bookItem" v-for="(item, index) in orderList" :key="index">
        <div class="orderInformation">
          <span class="primaryTxt" v-if="item.state == 'Normal'"
            >审核状态:
            <template>通过</template>
          </span>
          <span class="toBeReviewed" v-else-if="item.state == 'WaitAudit'"
            >审核状态:
            <template>审核中</template>
          </span>
          <span class="auditFailed" v-else-if="item.state == 'Reject'"
            >审核状态:
            <template>审核失败</template>
          </span>
          <span>
            <span class="c999">申请日期:</span>
            {{ item.createDate }}</span
          >
          <div class="reason" v-if="item.state == 'Reject'">
            <p class="reasonIntroduction">
              <span class="c999">理由:</span>
              <span class="reasonContent">
                {{ item.feedBack.reason ? item.feedBack.reason : "-" }}
              </span>
            </p>
          </div>
          <span v-if="item.state == 'Normal'">
            <span class="c999">快递单号:</span>
            {{ item.feedBack.mailNum || "-" }}</span
          >
          <span v-if="item.state == 'Normal'">
            <span class="c999">快递公司:</span>
            {{ item.feedBack.mailName || "-" }}</span
          >
        </div>
        <div class="orderBookList">
          <div
            v-for="(itemBook, index) in item.content"
            style="cursor: pointer"
            class="orderBook"
            :key="index"
            @click="toDetail(itemBook)"
          >
            <div class="wrapImg">
              <img class="autoImg" :src="itemBook.icon" alt="" />
            </div>
            <p style="width: 150px" class="ellipsis" :title="itemBook.title">
              {{ itemBook.title }}
            </p>
            <p style="width: 150px"  class="c999 ellipsis">{{ itemBook.author }}</p>
          </div>
        </div>
        <div v-if="item.state == 'Reject'" @click="deleteItem(item)">
          <i class="el-icon-delete-solid red"></i>
        </div>
      </div>
      <!-- åˆ†é¡µ -->
      <div class="pageinateBox" v-if="orderList.length > 0">
        <el-pagination
          @size-change="
            (val) => {
              paginationData.limit = val;
              getData();
            }
          "
          @current-change="
            (val) => {
              paginationData.page = val;
              getData();
            }
          "
          background=""
          :current-page="paginationData.page - 0"
          :page-size="paginationData.limit"
          prev-text="上一页"
          next-text="下一页"
          layout="total, prev, pager, next, slot, jumper"
          :total="paginationData.totalCount"
        >
        </el-pagination>
      </div>
    </template>
  </div>
</template>
<script>
export default {
  data() {
    return {
      orderList: [],
      orderBookList: [],
      loading: true,
      paginationData: {
        page: 1,
        totalCount: 0,
        limit: 5,
        totalPage: 0,
      },
    };
  },
  created() {
    this.getData();
  },
  methods: {
    getData() {
      this.loading = true;
      let { limit, page } = this.paginationData;
      const data = {
        start: limit * page - limit,
        size: limit,
        sort: {
          field: "createDate",
          type: "Desc",
        },
        appRefCode: this.config.appRefCode,
        topicIdOrRefCode: this.config.refCodes.applyEntityBook,
      };
      this.MG.ugc.getTopicMessageList(data).then((res) => {
        this.loading = false;
        try {
          this.paginationData.totalCount = res.totalSize;
          if (res && res.datas.length > 0) {
            let list = [];
            for (let i = 0; i < res.datas.length; i++) {
              const ele = res.datas[i];
              ele.createDate = ele.createDate.split("T")[0];
              if (ele.content) {
                ele.content = JSON.parse(ele.content);
              }
              if (ele.feedBack) {
                ele.feedBack = JSON.parse(ele.feedBack);
              }
              list.push(ele);
            }
            this.orderList = list;
          }
        } catch (error) {
          this.orderList = [];
        }
      });
    },
    toDetail(row) {
      console.log(row);
      if (row.id && row.cmsPath) {
        let url = this.$router.resolve({
          name: "teachingServices-detail",
          query: {
            id: row.id,
            cmsPath: row.cmsPath,
          },
        });
        window.open(url.href, "_blank");
      }
    },
    deleteItem(item) {
      this.$confirm("确定移除吗?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          const data = {
            messageIds: [item.id],
          };
          this.MG.ugc.delTopicMessage(data).then((res) => {
            if (res) {
              this.$message({
                type: "success",
                message: "已移除该纸质样书!",
              });
              this.getData();
            }
          });
        })
        .catch(() => {
          this.$message({
            type: "fail",
            message: "取消操作!",
          });
        });
    },
  },
};
</script>
<style lang="less" scoped>
.wrap {
  padding: 40px;
  .tips {
    padding: 20px;
    background: #f2f7f4;
    border-radius: 4px;
    font-size: 14px;
    color: #666666;
  }
  .bookItem {
    border-bottom: 1px solid #eeeeee;
    padding-bottom: 40px;
    // margin-bottom: 40px;
    .spaceBetween {
      width: 100%;
      display: flex;
      justify-content: space-between;
      align-items: flex-end;
      font-size: 18px;
      font-weight: 700;
      line-height: 24px;
    }
    .orderInformation {
      background: #f2f7f4;
      border-radius: 4px;
      padding: 20px;
      font-size: 16px;
      color: #333333;
      margin: 30px 0;
      .auditFailed {
        color: #e50021;
      }
      .toBeReviewed {
        color: #d18252;
      }
      span {
        display: inline-block;
        width: 330px;
        line-height: 40px;
      }
      .c999 {
        display: inline;
        color: #999;
      }
      .reason {
        display: flex;
        line-height: 28px;
        padding: 20px 0;
        .reasonIntroduction {
          width: 590px;
          display: inline-block;
          line-height: 22px;
          .reasonContent {
            display: inline;
            width: 100%;
            line-height: 30px;
          }
        }
      }
    }
    .orderBookList {
      display: flex;
      justify-content: flex-start;
      flex-wrap: wrap;
      font-size: 16px;
      color: #333;
      .orderBook {
        margin: 0 15px;
      }
      .wrapImg {
        position: relative;
        width: 150px;
        height: 200px;
        background-color: #f2f2f2;
        border: 1px solid #e6e6e6;
      }
      > div > p {
        margin: 10px 0;
      }
      .c999 {
        color: #999;
      }
    }
    .red {
      font-size: 16px;
      color: #e50021;
      float: right;
      cursor: pointer;
    }
  }
  .pageinateBox {
    text-align: center;
    padding: 40px 0;
    :deep(.el-pagination.is-background .btn-next) {
      padding: 0 10px;
    }
    :deep(.el-pagination.is-background .btn-prev) {
      padding: 0 10px;
    }
  }
}
</style>
src/views/personalCenter/components/sampleApplication.vue
New file
@@ -0,0 +1,93 @@
<template>
  <div class="wrap">
    <div class="title">
      å¦‚何申请样书
      <p class="greenLine"></p>
    </div>
    <p class="content m40">
      æ ·ä¹¦ç”³è¯·åŠŸèƒ½åªé’ˆå¯¹æ•™å¸ˆå¼€æ”¾ï¼Œåœ¨æ•™å¸ˆèµ„æ ¼è®¤è¯å®ŒæˆåŽï¼Œå¯ç”³è¯·æ ·ä¹¦ã€‚(每位老师每次只能申请样书3本,每年3次,申请的样书需和您的专业相关。)
    </p>
    <p class="paragraphHeadings">样书申请有两种方式:</p>
    <p class="content m25">
      1.纸质版样书申请:在所选图书下,点击样书申请按钮,选择纸质版样书申请。提交后,两个工作日审核并回复,审核通过后,可按照您填写的地址邮寄。
    </p>
    <p class="content m25b">
      2.电子版样书申请:在所选图书下,点击样书申请按钮,选择电子版版样书申请。注意,电子版样书不可下载并有阅读期限,使用周期为审核通过后一周。
    </p>
    <div class="buttonCombination">
      <el-button class="tearching" @click="toTeacherRegister"
        >教师认证</el-button
      >
      <el-button class="sampleBook" @click="teachingServices">样书选书服务</el-button>
    </div>
  </div>
</template>
<script>
export default {
  methods: {
    //跳转至教学服务
    teachingServices(){
      this.$router.push("/teachingServices/index")
    },
    toTeacherRegister() {
      // this.$router.push({
      //   name: "personalCenter",
      // });
      // æ›´æ”¹çˆ¶ç»„件值
      this.$parent.changeSelected('1');
      // this.$route.query.changeSelected("1");
    }
  }
};
</script>
<style lang="less" scoped>
.wrap {
  padding: 40px;
  .title {
    text-align: center;
    font-size: 24px;
    font-weight: 700;
    letter-spacing: 1.8px;
    .greenLine {
      margin: 0 auto;
      margin-top: 10px;
      width: 60px;
      height: 6px;
      background-color: #00873c;
    }
  }
  .content {
    text-indent: 2em;
    font-size: 18px;
    font-weight: 400;
    color: #333333;
    line-height: 36px;
    letter-spacing: 1.35px;
  }
  .m40 {
    margin: 30px 0;
  }
  .m25 {
    margin: 25px 0;
  }
  .paragraphHeadings {
    font-size: 18px;
    font-weight: 700;
    color: #333333;
    line-height: 36px;
    letter-spacing: 1.35px;
  }
  .buttonCombination {
    margin-top: 50px;
    text-align: right;
    .tearching {
      border: 1px solid #00873c;
      color: #00873c;
    }
    .sampleBook {
      background: linear-gradient(0deg, #00873c 0%, #00aa4c 100%);
      color: #fff;
    }
  }
}
</style>
src/views/personalCenter/components/teacherRegister.vue
New file
@@ -0,0 +1,1028 @@
<template>
  <div class="teacherRegisterPage">
    <div class="teacherRegisterBox" v-loading="teacherRegisterLoading">
      <div class="teacherRegisterForm">
        <div class="zertifizierungsStatus">
          <span> å½“前状态: </span>
          <span class="status-w" v-if="statusNow == 'WaitAudit'">等待审核</span>
          <span class="status-s" v-if="statusNow == 'Normal'">已认证</span>
          <span class="status-f" v-if="statusNow == 'Reject'">
            å·²é©³å›ž
            <p class="reason">原因: {{ reason ? reason : "-" }}</p>
          </span>
          <span class="status-b" v-if="statusNow == undefined">待认证</span>
        </div>
        <el-form
          :model="teacherRegisterForm"
          ref="form"
          :disabled="forbidden"
          label-position="left"
          :rules="rules"
          label-width="130px"
        >
          <el-form-item label="地区:" prop="region">
            <div>
              <el-cascader
                size="large"
                :options="options"
                v-model="selectedOptions"
                @change="handleChange"
              >
              </el-cascader>
            </div>
          </el-form-item>
          <el-form-item label="职务:" prop="post">
            <el-select
              style="width: 100%"
              v-model="teacherRegisterForm.post"
              placeholder="请选择职务"
            >
              <el-option
                v-for="(item, index) in postData"
                :key="index"
                :label="item.name"
                :value="item.name"
              ></el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="职称:" prop="positionalTitle">
            <el-select
              style="width: 100%"
              v-model="teacherRegisterForm.positionalTitle"
              placeholder="请选择职称"
            >
              <el-option
                v-for="(item, index) in positionalTitleData"
                :key="index"
                :label="item.name"
                :value="item.name"
              ></el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="学历:" prop="education">
            <el-select
              style="width: 100%"
              v-model="teacherRegisterForm.education"
              placeholder="请选择学历"
            >
              <el-option
                v-for="(item, index) in educationData"
                :key="index"
                :label="item.name"
                :value="item.name"
              ></el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="姓名:" prop="fullName">
            <el-input
              v-model="teacherRegisterForm.fullName"
              placeholder="请输入姓名"
            ></el-input>
          </el-form-item>
          <el-form-item label="手机号:" prop="phone">
            <el-input
              v-model="teacherRegisterForm.phone"
              placeholder="请输入手机号"
            ></el-input>
          </el-form-item>
          <el-form-item label="邮箱:" prop="email">
            <el-input
              v-model="teacherRegisterForm.email"
              placeholder="请输入你的邮箱"
            ></el-input>
          </el-form-item>
          <el-form-item v-if="SMSState" label="图形验证码:" prop="imgCode">
            <div class="flex">
              <el-input
                v-model="teacherRegisterForm.imgCode"
                placeholder="请输入图形验证码"
              ></el-input>
              <div class="imgCodeBox">
                <img :src="imgCode" alt="" @click="getImgCapcha" />
              </div>
            </div>
          </el-form-item>
          <el-form-item
            v-if="SMSState"
            label="短信验证码:"
            prop="verificationCode"
          >
            <div class="flex">
              <el-input
                v-model="teacherRegisterForm.verificationCode"
                placeholder="请输入短信验证码"
              ></el-input>
              <div class="imgCodeBox">
                <el-button
                  style="width: 100%"
                  @click="getVerifyCode"
                  :disabled="countDown != 0"
                  >{{
                    countDown == 0
                      ? "获取短信验证码"
                      : "验证码(" + countDown + "s)"
                  }}</el-button
                >
              </div>
            </div>
          </el-form-item>
          <el-form-item label="所在学校名称:" prop="schoolName">
            <el-input
              v-model="teacherRegisterForm.schoolName"
              placeholder="请输入所在学校名称"
            ></el-input>
          </el-form-item>
          <el-form-item label="详细地址:" prop="detailedAddress">
            <el-input
              v-model="teacherRegisterForm.detailedAddress"
              placeholder="请输入详细地址"
            ></el-input>
          </el-form-item>
          <el-form-item label="授课专业:" prop="lecturingSpecialty">
            <el-input
              v-model="teacherRegisterForm.lecturingSpecialty"
              placeholder="请输入授课专业"
            ></el-input>
          </el-form-item>
          <el-form-item label="相关证件:" prop="relevantCertificates">
            <div class="lecturingSpecixalty">
              <el-upload
                :file-list="teacherRegisterForm.relevantCertificates"
                action=""
                :limit="5"
                :on-exceed="
                  () => {
                    this.$message({
                      message: '最多上传5个文件,请移除其他文件后再上传。',
                      type: 'warning',
                    });
                  }
                "
                :http-request="beforeRead"
                :multiple="false"
                list-type="picture-card"
                :before-remove="beforeDelimg"
                :on-preview="handlePictureCardPreview"
                :on-success="uploadSucceeded"
                :on-error="uploadFailed"
                :on-remove="handleRemove"
              >
                <i class="el-icon-plus"></i>
              </el-upload>
            </div>
          </el-form-item>
          <div class="notice">
            æ³¨ï¼šæŽ¨èä¼˜å…ˆä¸Šä¼ æ‚¨çš„æ•™å¸ˆè¯ç”µå­ç‰ˆæˆ–校园卡或工作证或身份证
            æ”¯æŒä¸Šä¼ jpg、png文件
          </div>
          <div class="agreementState">
            <span
              class="choose"
              @click="
                () => {
                  if (!this.forbidden) {
                    this.agreementState = !this.agreementState;
                  }
                }
              "
            >
              <img
                v-show="agreementState"
                src="@/assets/images/personalCenter/choose.png"
                alt=""
              />
            </span>
            <span
              class="infoTxt"
              @click="
                () => {
                  dialogVisible = true;
                }
              "
            >
              åŒæ„
              <span class="agreementBox">《教师会员协议》</span>
            </span>
          </div>
          <el-form-item>
            <template v-if="forbidden">
              <div
                @click="
                  () => {
                    this.forbidden = false;
                  }
                "
                class="addAddressButton"
              >
                ä¿®æ”¹
              </div>
            </template>
            <template v-else>
              <div
                class="addAddressButton greenButton aaa"
                type="primary"
                @click="teacherCertification()"
                v-if="!topicId"
                v-loading="subLoading"
              >
                æäº¤
              </div>
              <div v-else>
                <div
                  class="addAddressButton greenButton"
                  type="primary"
                  @click="updateSubmit()"
                  v-loading="subLoading"
                >
                  æäº¤
                </div>
                <div class="addAddressButton" @click="cancelEditor()">取消</div>
              </div>
            </template>
          </el-form-item>
        </el-form>
        <div class="express">
          <p class="title">认证说明</p>
          <p>
            æœ¬æ¨¡å—只对教师开放。认证信息提交后,网站管理人员将在三个工作日之内对您的认证信息进行审核,审核通过后,各位老师可以在本网站进行课件下载、样书申请等操作。您的审核进度可在个人信息中查看。
          </p>
        </div>
      </div>
      <el-dialog :visible.sync="dialogImageState">
        <img width="100%" :src="dialogImageUrl" alt="" />
      </el-dialog>
      <el-dialog :visible.sync="dialogVisible">
        <div class="agreementName">{{ agreement.name }}</div>
        <div class="protocolBox" v-html="agreement.protocolTxt"></div>
      </el-dialog>
    </div>
  </div>
</template>
<script>
import { regionData, CodeToText, TextToCode } from "element-china-area-data";
import { getPublicImage } from "@/assets/js/middleGround/tool";
import { mapState } from "vuex";
export default {
  name: "teacherRegister",
  data() {
    return {
      teacherRegisterLoading: true,
      subLoading: false,
      teacherRegisterForm: {
        region: "",
        post: "",
        positionalTitle: "",
        education: "",
        fullName: "",
        phone: "",
        email: "",
        schoolName: "",
        detailedAddress: "",
        lecturingSpecialty: "",
        imgCode: "",
        verificationCode: "",
        relevantCertificates: [],
      },
      rules: {
        region: [{ required: true, message: "请选择地区", trigger: "change" }],
        post: [{ required: true, message: "请选择职务", trigger: "change" }],
        positionalTitle: [
          { required: true, message: "请选择职称", trigger: "change" },
        ],
        education: [
          { required: true, message: "请选择学历", trigger: "change" },
        ],
        fullName: [{ required: true, message: "请输入姓名", trigger: "blur" }],
        phone: [
          { required: true, message: "请输入手机号", trigger: "blur" },
          {
            pattern:
              /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/,
            message: "请输入正确手机号",
            trigger: "blur",
          },
        ],
        email: [
          { required: true, message: "请填写邮箱", trigger: "blur" },
          {
            pattern: /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
            message: "邮箱格式校验失败,请输入邮箱",
            trigger: "blur",
          },
        ],
        schoolName: [
          { required: true, message: "请输入所在学校名称", trigger: "blur" },
        ],
        detailedAddress: [
          { required: true, message: "请输入详细地址", trigger: "blur" },
        ],
        lecturingSpecialty: [
          { required: true, message: "请输入授课专业", trigger: "blur" },
        ],
        relevantCertificates: [
          { required: true, message: "请上传相关证件", trigger: "blur" },
        ],
        imgCode: [
          { required: true, message: "请输入图形验证码", trigger: "blur" },
          { min: 4, max: 4, message: "请输入 4 ä½éªŒè¯ç ", trigger: "blur" },
        ],
        verificationCode: [
          { required: true, message: "请输入短信验证码", trigger: "blur" },
        ],
      },
      // åè®®å‹¾é€‰çŠ¶æ€
      agreementState: false,
      // åè®®æ–‡æœ¬
      agreement: {
        name: "",
        protocolTxt: "",
      },
      postData: [],
      positionalTitleData: [],
      educationData: [],
      countDown: 0,
      options: regionData,
      selectedOptions: "",
      imgCode: "",
      worksInfo: [],
      topicId: null,
      topicMessageList: [],
      statusNow: undefined,
      // è¡¨å•编辑状态
      forbidden: false,
      // æŸ¥çœ‹å·²é€‰ä¸­çš„图片
      dialogImageUrl: "",
      // æŸ¥çœ‹å·²é€‰ä¸­çš„图片 æ˜¾ç¤ºçŠ¶æ€
      dialogImageState: false,
      dialogVisible: false,
      // æŽ§åˆ¶ èŽ·å–æ‰‹æœºéªŒè¯ç  æ˜¯å¦å±•示
      SMSState: true,
      // æ‰‹æœºå·å‰¯æœ¬ï¼Œç”¨äºŽåˆ¤æ–­æ‰‹æœºå·æ˜¯å¦æ›´æ”¹
      phoneCopy: "",
    };
  },
  watch: {
    "teacherRegisterForm.phone": {
      deep: true,
      handler: function (newV, oldV) {
        if (oldV != "") {
          if (newV != this.phoneCopy) {
            // this.teacherRegisterForm.verificationCode = "";
            this.SMSState = true;
          } else {
            this.SMSState = false;
          }
        }
      },
    },
  },
  mounted() {
    this.getImgCapcha();
    this.getFieldData();
    this.getTypeItem();
    this.getTeacherAgreement();
    this.role = this.$store.role;
  },
  computed: {
    ...mapState(["userInfo"]),
  },
  methods: {
    // èŽ·å–æ•™å¸ˆåè®®
    getTeacherAgreement() {
      this.MG.resource
        .getItem({
          path: "caupress_protocol",
          fields: {
            caupress_content: [],
          },
        })
        .then((res) => {
          try {
            this.agreement.name = "教师会员协议";
            const data = res.datas.find(
              (e) => e.refCode == "caupress_teacherCertificationAgreement"
            );
            this.agreement.protocolTxt = data
              ? data.caupress_content
              : "暂无协议";
          } catch (error) {
            this.agreement.name = "教师会员协议";
            this.agreement.protocolTxt = "暂无协议";
          }
        });
    },
    // å°†å¸‚辖区 è½¬æ¢ä¸º ç›´è¾–市名称,为了适应 element-china-area-data
    handleChange(city) {
      let cityStr =
        CodeToText[city[0]] +
        "/" +
        CodeToText[city[1]] +
        "/" +
        CodeToText[city[2]];
      let cityArr = cityStr.split("/");
      if (cityArr[1] == "市辖区") {
        cityArr[1] = cityArr[0];
      }
      this.teacherRegisterForm.region = cityArr.join("/");
    },
    // èŽ·å–å›¾å½¢éªŒè¯ç 
    getImgCapcha() {
      this.MG.identity.getImgCode().then((res) => {
        this.imgCode = "data:image/png;base64," + res;
      });
    },
    // èŽ·å–éªŒè¯ç 
    getVerifyCode() {
      let validateFieldList = [];
      this.$refs.form.validateField(["phone", "imgCode"], (val) => {
        // ç”±äºŽ validateField éªŒè¯ä¼šè§¦å‘多次,当每次验证通过后都往数组里添加一条数据。
        if (!val) {
          validateFieldList.push("通过");
        }
        // æ­¤å¤„ 2 ä¸ºéªŒè¯å­—段的数量
        if (validateFieldList.length == 2) {
          this.MG.identity
            .getPhoneCode({
              phoneNumber: this.teacherRegisterForm.phone,
              imageCaptcha: this.teacherRegisterForm.imgCode,
              appRefCode: this.config.appRefCode,
            })
            .then((res) => {
              if (
                res == "验证码发送成功" ||
                res == "验证码发送频繁请稍后再试"
              ) {
                this.$message({
                  message: res,
                  type: "success",
                });
                // å¼€å¯çŸ­ä¿¡éªŒè¯å€’计时
                this.getSecond(90);
              } else {
                this.$message({
                  message: res,
                  type: "error",
                });
                this.getImgCapcha();
              }
            });
        }
      });
    },
    // éªŒè¯ç å€’计时
    getSecond(time) {
      if (!this.timer) {
        this.countDown = time;
        this.timer = setInterval(() => {
          this.countDown--;
          if (this.countDown == 0) {
            clearInterval(this.timer);
            this.timer = null;
          }
        }, 1000);
      }
    },
    // å–消编辑
    cancelEditor() {
      this.$confirm("是否取消编辑?")
        .then((_) => {
          this.forbidden = true;
          // é‡æ–°èŽ·å–æ•™å¸ˆè®¤è¯ä¿¡æ¯
          this.$refs["form"].clearValidate();
          this.getApplyTopicData();
        })
        .catch((_) => {});
    },
    // èŽ·å–ä¸‹æ‹‰æ¡†å­—æ®µæ•°æ®
    getFieldData() {
      const data = {
        refCodes: ["post", "positionalTitle", "education"],
      };
      this.MG.store.getProductTypeField(data).then((res) => {
        let post = res.find((item) => item.refCode == "post");
        let positionalTitle = res.find(
          (item) => item.refCode == "positionalTitle"
        );
        let education = res.find((item) => item.refCode == "education");
        try {
          this.postData = JSON.parse(post.config).option;
        } catch (error) {
          this.postData = [];
        }
        try {
          this.positionalTitleData = JSON.parse(positionalTitle.config).option;
        } catch (error) {
          this.positionalTitleData = [];
        }
        try {
          this.educationData = JSON.parse(education.config).option;
        } catch (error) {
          this.educationData = [];
        }
      });
    },
    // é¦–次提交
    teacherCertification() {
      if (this.subLoading) return;
      this.subLoading = true;
      this.$refs["form"].validate((valid) => {
        if (valid) {
          // åˆ¤æ–­æ˜¯å¦åŒæ„äº†åè®®
          if (this.agreementState) {
            // éªŒè¯çŸ­ä¿¡éªŒè¯ç 
            if (this.teacherRegisterForm.verificationCode) {
              let query = {
                phoneNumber: this.teacherRegisterForm.phone,
                smsCaptcha: this.teacherRegisterForm.verificationCode,
              };
              this.MG.identity.verificationPhoneCode(query).then((res) => {
                if (res) {
                  this.$message({
                    message: "手机号验证通过",
                    type: "success",
                  });
                  this.teacherRegisterLoading = true;
                  // ç§»é™¤ ä¸ç›¸å…³å±žæ€§
                  delete this.teacherRegisterForm.verificationCode;
                  this.teacherRegisterForm.relevantCertificates.map((item) => {
                    delete item.status;
                    delete item.uid;
                    delete item.url;
                    delete item.percentage;
                    delete item.raw;
                    delete item.response;
                    delete item.size;
                  });
                  const data = {
                    topicIdOrRefCode: "teacherRoleApproval",
                    name: this.teacherRegisterForm.fullName,
                    content: "",
                    state: "WaitAudit",
                    type: "teacherRegister",
                    cmsTypeRefCode: this.config.refCodes.teacherCertification,
                    newDataListRequest: this.tool.worksDataBytool(
                      this.worksInfo,
                      this.teacherRegisterForm,
                      this.teacherRegisterForm.relevantCertificates
                    ),
                  };
                  let basicInfo = this.teacherRegisterForm;
                  const userInfo = {
                    requests: [
                      {
                        data: JSON.stringify(basicInfo),
                        name: "教师认证",
                        type: "teacherInfo",
                      },
                    ],
                  };
                  this.MG.identity.setAppUserInfo(userInfo).then((res) => {
                    if (res) {
                      this.MG.ugc.newTopicMessage(data).then((res) => {
                        if (res !== false) {
                          this.teacherRegisterLoading = false;
                          this.$message({
                            message: "教师认证已提交审核",
                            type: "success",
                          });
                          // èŽ·å–topic提交的信息,用于回显数据
                          this.subLoading = false;
                          this.getApplyTopicData();
                        } else {
                          this.$message.error("信息提交失败,请稍后重试");
                        }
                      });
                    }
                  });
                } else {
                  return this.$message({
                    message: "手机号验证失败,请填写正确的短信验证码",
                    type: "error",
                  });
                }
              });
            }
          } else {
            this.$message({
              message: "请勾选,同意教师会员协议",
              type: "warning",
            });
          }
        } else {
          return false;
        }
      });
    },
    // ä¿®æ”¹åŽæäº¤
    updateSubmit() {
      if (this.subLoading) return;
      this.subLoading = true;
      this.$refs["form"].validate((valid) => {
        if (valid) {
          // åˆ¤æ–­æ˜¯å¦åŒæ„äº†åè®®
          if (this.agreementState) {
            // éªŒè¯çŸ­ä¿¡éªŒè¯ç 
            if (this.SMSState) {
              this.teacherRegisterLoading = true;
              let query = {
                phoneNumber: this.teacherRegisterForm.phone,
                smsCaptcha: this.teacherRegisterForm.verificationCode,
              };
              this.MG.identity
                .verificationPhoneCode(query)
                .then((res) => {
                  return new Promise((resolve, reject) => {
                    this.subLoading = false;
                    if (res) {
                      this.$message({
                        message: "手机号验证通过",
                        type: "success",
                      });
                      resolve();
                    } else {
                      this.teacherRegisterLoading = false;
                      this.$message({
                        message: "手机号验证失败,请填写正确的短信验证码",
                        type: "error",
                      });
                      // é‡ç½®å›¾å½¢éªŒè¯ç  å’Œ çŸ­ä¿¡éªŒè¯ç 
                      this.getImgCapcha();
                      this.teacherRegisterForm.imgCode = "";
                      this.teacherRegisterForm.verificationCode = "";
                      reject();
                    }
                  });
                })
                .then((res) => {
                  this.submitTeacherCertification();
                });
            } else {
              this.submitTeacherCertification();
            }
          }
        }
      });
    },
    // æ›´æ–°ç”¨æˆ·ä¿¡æ¯
    submitTeacherCertification() {
      this.teacherRegisterForm.relevantCertificates.map((item) => {
        delete item.status;
        delete item.uid;
        delete item.url;
        delete item.percentage;
        delete item.raw;
        delete item.response;
        delete item.size;
      });
      const data = {
        description: "",
        icon: "",
        id: this.topicId,
        topicIdOrRefCode: "teacherRoleApproval",
        name: this.teacherRegisterForm.fullName,
        content: "",
        type: "teacherRegister",
        state: "WaitAudit",
        newDataRequests: [],
        updateDataRequests: this.tool.UpdateworksDataBytool(
          this.worksInfo,
          this.topicMessageList,
          this.teacherRegisterForm,
          this.teacherRegisterForm.relevantCertificates
        ),
        delDataRequest: {
          ids: [],
        },
      };
      let basicInfo = this.teacherRegisterForm;
      const userInfo = {
        requests: [
          {
            data: JSON.stringify(basicInfo),
            name: "教师认证",
            type: "teacherInfo",
          },
        ],
      };
      this.MG.identity.setAppUserInfo(userInfo).then((res) => {
        if (res) {
          this.MG.ugc.updateTopicMessage(data).then((res) => {
            this.subLoading = false;
            if (res !== false) {
              this.teacherRegisterLoading = false;
              this.getApplyTopicData();
            }
          });
        }
      });
    },
    // ä¸Šä¼ å›¾ç‰‡
    beforeRead(file) {
      this.isLoding = true;
      return new Promise((resolve, reject) => {
        const FileName = file.file.name.split(".")[0];
        const Extension = file.file.name.split(".")[1];
        const FileType = file.file.type;
        if (FileType != "image/jpeg" && FileType != "image/png") {
          this.$message({
            message: "文件格式不允许,只允许上传图片格式",
            type: "error",
          });
          return reject();
        }
        let size = 1024;
        this.tool
          .getFileMd5(file.file, size * 1024)
          .then((e) => {
            this.isLoding = false;
            const imgData = new FormData();
            this.fileMd5 = e;
            imgData.append("Md5", e);
            imgData.append("FileName", FileName);
            imgData.append("Extension", Extension);
            imgData.append("FileType", FileType);
            imgData.append("MetaData", null);
            imgData.append("file", file.file);
            this.MG.file.upload(imgData).then((res) => {
              if (res == "文件上传成功") {
                this.$message({
                  message: "图片上传成功",
                  type: "success",
                });
                resolve(e);
              } else {
                reject();
              }
            });
          })
          .catch((e) => {
            this.isLoding = false;
            console.error(e);
            reject();
          });
      });
    },
    // ä¸Šä¼ å›¾ç‰‡æˆåŠŸåŽçš„å¤„ç†
    uploadSucceeded(res, file, filelist) {
      filelist[filelist.length - 1].md5 = res;
      this.teacherRegisterForm.relevantCertificates = filelist;
      this.$refs["form"].validate(() => {});
    },
    // åˆ é™¤æ–‡ä»¶ä¹‹å‰çš„钩子
    beforeDelimg() {
      return this.$confirm(`确定移除证件照吗?`);
    },
    // ç§»é™¤å›¾ç‰‡
    handleRemove(file, filelist) {
      this.teacherRegisterForm.relevantCertificates = filelist;
    },
    // å±•示证件照
    handlePictureCardPreview(file) {
      this.dialogImageState = true;
      this.dialogImageUrl = file.url;
    },
    uploadFailed() {
      this.$message.error("文件上传失败,请稍后重试");
    },
    // èŽ·å–FormTypeItem
    getTypeItem() {
      const data = {
        refCodes: [this.config.refCodes.teacherCertification],
      };
      this.MG.resource.getCmsTypeByRefCode(data).then((res) => {
        this.worksInfo = res[0].cmsTypeLinks[0].children;
        this.getApplyTopicData();
      });
    },
    // èŽ·å–æ•™å¸ˆè®¤è¯ä¿¡æ¯
    getApplyTopicData() {
      this.teacherRegisterLoading = true;
      const data = {
        start: 0,
        size: 1,
        topicIdOrRefCode: "teacherRoleApproval",
        appRefCode: this.config.appRefCode,
        sort: {
          type: "Desc",
          field: "CreateDate",
        },
      };
      this.MG.ugc.getTopicMessageList(data).then((res) => {
        this.teacherRegisterLoading = false;
        console.log(res, "teacherRoleApproval");
        // res.datas ä¸º ç©ºæ•°ç»„
        if (res.datas.length != 0) {
          try {
            this.topicId = res.datas[0].id;
            this.topicMessageList = res.datas[0].cmsItemDataList;
            this.statusNow = res.datas[0].state
              ? res.datas[0].state
              : undefined;
            if (
              res.datas.length > 0 &&
              res.datas[0].cmsItemDataList.length > 0
            ) {
              this.teacherRegisterForm = this.tool.resultsBytool(
                this.worksInfo,
                res.datas[0].cmsItemDataList
              );
              this.phoneCopy = this.teacherRegisterForm.phone;
              // è®¾ç½®åœ°åŒº
              let cityArr = this.teacherRegisterForm.region.split("/");
              if (cityArr[1] == cityArr[0]) {
                cityArr[1] = "市辖区";
              }
              this.selectedOptions =
                TextToCode[cityArr[0]][cityArr[1]][cityArr[2]].code;
              // ä¸å±•示短信验证码
              this.SMSState = false;
              // å°†è¡¨å•状态置为不可编辑
              this.forbidden = true;
              this.agreementState = true;
              // è®¾ç½®å›¾ç‰‡ï¼Œè‡³æœ¬åœ°å›¾ç‰‡, uid æ˜¯ä¸ºäº†é€‚配 element-upload ç»„ä»¶çš„(组件的展示和删除需要)。
              this.teacherRegisterForm.relevantCertificates =
                this.teacherRegisterForm.relevantCertificates.map((item) => {
                  item.uid = this.tool.uuid();
                  item.url = getPublicImage(item.md5);
                  return item;
                });
            }
            // if (this.userInfo.role == "Student" || "") this.status = "";
            if (this.statusNow == "Reject") {
              this.reason = JSON.parse(res.datas[0].feedBack).reason;
            }
            this.teacherRegisterLoading = false;
          } catch {
            this.teacherRegisterLoading = false;
            this.$message.error("获取教师认证信息失败,请稍后重试");
          }
        }
      });
    },
  },
};
</script>
<style lang="less" scoped>
@import "@/assets/css/theme.less";
.protocolBox {
  text-align: left;
  line-height: 23px;
  z-index: 1;
  height: 500px;
  overflow-y: auto;
  margin-top: -20px;
  box-sizing: border-box;
  padding: 10px;
}
.agreementBox {
  color: #00873c;
}
.teacherRegisterPage {
  width: 100%;
  background: #fff;
  padding: 32px 40px;
  box-sizing: border-box;
  .teacherRegisterBox {
    .teacherRegisterForm {
      .zertifizierungsStatus {
        font-size: 14px;
        color: #606266;
        line-height: 40px;
        margin-bottom: 22px;
        .reason {
          font-size: 14px;
          color: #b3b3b3;
          margin-left: 134px;
        }
        & > :first-child {
          display: inline-block;
          width: 130px;
        }
        & > :last-child {
          font-size: 16px;
        }
        .status-b {
          color: #d18252;
        }
        .status-f {
          color: #e50021;
        }
        .status-s {
          color: #00873c;
        }
        .status-w {
          color: #d18252;
        }
      }
      &:deep(.el-input) {
        width: 603px;
      }
      .lecturingSpecixalty {
        display: flex;
        border: 1px solid #dcdfe6;
        border-radius: 4px;
        padding: 20px;
        .certificates {
          display: inline-block;
          width: 150px;
          height: 150px;
          position: relative;
          border: 1px solid #e4e4e4;
          background-color: #fdfdfd;
          margin-right: 40px;
          .closeButton {
            position: absolute;
            right: -11px;
            top: -11px;
            color: #e50021;
            font-size: 20px;
            background-color: #fff;
          }
        }
      }
      .notice {
        font-size: 14px;
        color: #b3b3b3;
        margin-left: 140px;
      }
      .agreementState {
        display: flex;
        padding: 40px 0;
        height: 20px;
        align-items: center;
        .choose {
          display: inline-block;
          border: 1px solid #e2e2e2;
          width: 13px;
          height: 13px;
          margin-right: 10px;
          cursor: pointer;
          img {
            margin-left: 2px;
            margin-bottom: 2px;
          }
        }
        .infoTxt {
          cursor: pointer;
        }
      }
      .addAddressButton {
        width: 120px;
        height: 38px;
        border-radius: 4px;
        font-size: 16px;
        text-align: center;
        line-height: 40px;
        float: right;
        border: 1px solid #00873c;
        color: #00873c;
        margin-right: 20px;
        margin-bottom: 40px;
        cursor: pointer;
      }
      .greenButton {
        color: #fff;
        background: linear-gradient(0deg, #00873c 0%, #00aa4c 100%);
      }
      .express {
        font-size: 14px;
        color: #666666;
        line-height: 24px;
        padding: 20px;
        background: #f2f7f4;
        .title {
          line-height: 26px;
          font-weight: 700;
        }
      }
      .imgCodeBox {
        margin-left: 20px;
        height: 40px;
        width: 140px;
        cursor: pointer;
        img {
          width: 140px;
          height: 100%;
        }
      }
    }
    .agreementName {
      text-align: center;
      font-size: 24px;
      font-weight: 700;
      margin-bottom: 20px;
    }
  }
}
</style>
src/views/personalCenter/index.vue
New file
@@ -0,0 +1,196 @@
<template>
  <div class="contentBox">
    <div class="aboutUs">
      <div class="title">作者与读者服务</div>
      <div
        v-for="(item, index) in tabSelect"
        :key="index"
        :class="tabsSelected == index ? 'selected' : ''"
        @click="
          () => {
            tabsSelected = index;
          }
        "
      >
        {{ item.name }}
        <i class="el-icon-arrow-right" style="float: right"></i>
      </div>
    </div>
    <div class="detailArea">
      <div v-if="tabsSelected != 2 && tabsSelected != 3" class="title">
        {{
          tabSelect[tabsSelected].title
            ? tabSelect[tabsSelected].title
            : tabSelect[tabsSelected].name
        }}
        <span>{{ tabSelect[tabsSelected].englishName }}</span>
      </div>
      <BasicInformation v-if="tabsSelected == 0"></BasicInformation>
      <TeacherRegister v-if="tabsSelected == 1"></TeacherRegister>
      <MyCollection v-if="tabsSelected == 2"></MyCollection>
      <OrderList v-if="tabsSelected == 3"></OrderList>
      <SampleApplication v-if="tabsSelected == 4"></SampleApplication>
      <ElectronicSampleBook v-if="tabsSelected == 5"></ElectronicSampleBook>
      <PaperSampleBook v-if="tabsSelected == 6"></PaperSampleBook>
      <AddressManagement v-if="tabsSelected == 7"></AddressManagement>
      <DownloadApplication v-if="tabsSelected == 8"></DownloadApplication>
      <AuthorContribution v-if="tabsSelected == 9"></AuthorContribution>
    </div>
  </div>
</template>
<script>
import BasicInformation from "./components/basicInformation.vue";
import MyCollection from "./components/myCollection.vue";
import OrderList from "./components/orderList.vue";
import SampleApplication from "./components/sampleApplication.vue";
import ElectronicSampleBook from "./components/electronicSampleBook.vue";
import PaperSampleBook from "./components/paperSampleBook.vue";
import TeacherRegister from "./components/teacherRegister";
import AddressManagement from "./components/addressManagement.vue";
import DownloadApplication from "./components/downloadApplication.vue";
import AuthorContribution from "./components/authorContribution.vue";
export default {
  name: "home",
  components: {
    BasicInformation,
    MyCollection,
    OrderList,
    SampleApplication,
    ElectronicSampleBook,
    PaperSampleBook,
    TeacherRegister,
    AddressManagement,
    DownloadApplication,
    AuthorContribution
  },
  data() {
    return {
      tabsSelected: 0,
      tabSelect: [
        {
          name: "基础信息",
          englishName: "BASIC INFORMATION"
        },
        {
          name: "教师认证",
          title: "认证信息",
          englishName: "AUTHENTICATION INFORMATION"
        },
        {
          name: "我的收藏",
          englishName: "MY COLLECTION"
        },
        {
          name: "订单列表",
          englishName: "MY COLLECTION"
        },
        {
          name: "样书申请",
          englishName: "SAMPLE APPLICATION"
        },
        {
          name: "电子样书",
          englishName: "ELECTRONIC BOOKS"
        },
        {
          name: "纸质样书",
          englishName: "PAPER COPIES"
        },
        {
          name: "地址管理",
          englishName: "ADDRESS MANAGEMENT"
        },
        {
          name: "下载申请",
          englishName: "DOWNLOAD THE APPLICATION"
        },
        {
          name: "作者投稿",
          englishName: "THE AUTHOR CONTRIBUTIONS"
        }
      ]
    };
  },
  created() {
    if (this.$route.query.tabsSelected) {
      this.tabsSelected = this.$route.query.tabsSelected;
    }
    // èŽ·å–è®¢å•
    if (localStorage.getItem("selectedTab")) {
      this.tabsSelected = JSON.parse(localStorage.getItem("selectedTab"));
      localStorage.removeItem("selectedTab");
    }
  },
  methods: {
    changeSelected(index) {
      this.tabsSelected = index;
    }
  }
};
</script>
<style lang="less" scoped>
.contentBox {
  display: flex;
  justify-content: space-between;
  padding-bottom: 100px;
  margin-top: 50px;
  .aboutUs {
    width: 377px;
    height: 833px;
    font-size: 16px;
    background-color: #fff;
    .selected {
      color: #00873c;
      i {
        color: #00873c;
      }
    }
    .title {
      font-size: 18px;
      margin: 0;
      padding: 0;
      border-top: 2px solid #00873c;
      font-weight: 700;
      text-align: center;
      background: #d8f7e6;
      color: #00873c;
      line-height: 60px;
      border-bottom: 0;
      cursor: auto;
    }
    div {
      padding: 30px 0;
      margin: 0 30px;
      // border-bottom: 1px solid #ededed;
      cursor: pointer;
    }
    :last-child {
      border-bottom: 0;
    }
  }
  .detailArea {
    width: 813px;
    background-color: #fff;
    .title {
      font-size: 18px;
      font-weight: 700;
      letter-spacing: 1.8px;
      border-top: 2px solid #008e3f;
      line-height: 36px;
      padding-left: 40px;
      background: #d8f7e6;
      line-height: 60px;
      color: #00873c;
      .splitline {
        width: 1px;
        height: 24px;
        background-color: #008e3f;
      }
      span {
        font-size: 16px;
        font-weight: 500;
      }
    }
  }
}
</style>
src/views/preview/audio.vue
New file
@@ -0,0 +1,74 @@
<template>
  <div class="contentBox">
    <div class="videoName">{{ $route.query.titleName }}</div>
    <audio
      @canplay="getDuration"
      controls
      v-if="audioSrc"
      @timeupdate="updateTime"
      ref="audio"
      :src="audioSrc"
      oncontextmenu="return false"
      controlsList="nodownload"
    ></audio>
  </div>
</template>
<script>
export default {
  data() {
    return {
      audioSrc: "",
    };
  },
  created() {
    scrollTo(0, 0);
    this.audioSrc =
      this.config.requestCtx +
      "/file/api/ApiDownload?md5=" +
      this.$route.query.md5;
  },
  methods: {
    getDuration() {
      this.audio = this.$refs.audio;
      this.duration = this.timeFormat(this.$refs.audio.duration);
    },
    updateTime() {
      if (!this.$refs.progress) return;
      this.currentDuration = this.timeFormat(this.audio.currentTime);
      //如果不是正在移动 å’Œ æ²¡æœ‰æš‚停播放就执行
      if (!this.isMoveIn || !this.audio.paused) {
        // è®¾ç½®å½“前时间
        let MoveX =
          this.$refs.progress.clientWidth *
          (this.audio.currentTime / this.audio.duration);
        //播放时更新距离
        this.$refs.currentProgress.style.width = MoveX + "px";
        this.$refs.circle.style.left =
          MoveX - this.$refs.circle.clientWidth / 2 + "px";
      }
    },
    timeFormat(number) {
      let minute = parseInt(number / 60);
      let second = parseInt(number % 60);
      minute = minute >= 10 ? minute : "0" + minute;
      second = second >= 10 ? second : "0" + second;
      return minute + ":" + second;
    },
  },
};
</script>
<style>
audio {
  width: 100%;
  height: 80px;
}
.videoName {
  text-align: center;
  margin-top: 20px;
  font-size: 30px;
}
</style>
src/views/preview/pdf.vue
New file
@@ -0,0 +1,69 @@
<template>
  <div class="global">
    <div class="wrapIframe">
      <iframe
        class="iframe"
        scrolling="no"
        :src="config.pdfUrl"
        @load="loadIframe"
        allowfullscreen="true"
        ref="iframeref"
      ></iframe>
    </div>
  </div>
</template>
<script>
import config from "@/assets/js/config";
export default {
  props: {
    path: String
  },
  data() {
    return {
      currentPage: 1
    };
  },
  mounted() {},
  created() {
    scrollTo(0, 0);
    this.getData();
  },
  methods: {
    getData() {},
    loadIframe() {
      let that = this;
      that.$refs.iframeref.contentWindow.postMessage(
        {
          MD5: this.$route.query.md5,
          url: that.config.requestCtx,
          currentPage: that.currentPage,
          index: 1,
          token: true // è´­ä¹°äº†ä¼ ,没购买传试读页,没有登录传true
        },
        "*"
      );
    }
  }
};
</script>
<style scoped>
.global {
  width: 100%;
  height: 100vh;
  background: #333;
  box-sizing: border-box;
}
.wrapIframe {
  height: 100%;
  box-sizing: border-box;
}
.iframe {
  display: block;
  width: 100%;
  height: 100%;
  border: medium none;
}
</style>
src/views/preview/video.vue
New file
@@ -0,0 +1,161 @@
<template>
  <div class="contentBox">
    <div class="videoName">{{ $route.query.titleName }}</div>
    <div class="videoBox">
      <video
        @canplay="getDuration"
        @timeupdate="updateTime"
        ref="audio"
        controls
        controlsList="nodownload"
        oncontextmenu="return false"
        autoplay
        :src="videoSrc"
      >
        <!-- <source :src="videoSrc" type="video/mp4" ref="myPlayer" /> -->
      </video>
    </div>
    <!-- <div class="calssInfo">
      <el-tabs type="border-card">
        <el-tab-pane label="课程简介">
          <div class="tabItem" v-loading="descriptionLoading">
            <div
              class="richTextBox"
              v-html="description.autism_introduction"
            ></div>
          </div>
        </el-tab-pane>
        <el-tab-pane label="章节目录">
          <div class="tabItem" v-loading="catalogueLoading">
            <p v-for="(item, index) in catalogue" :key="index" class="selected">
              {{ item.name }}
            </p>
          </div>
        </el-tab-pane>
      </el-tabs>
    </div> -->
  </div>
</template>
<script>
import { getImage } from "@/assets/js/toolClass";
export default {
  props: {
    query: {
      type: Object
    },
    idPath: {
      type: String
    }
  },
  data() {
    return {
      videoSrc: "",
      description: "",
      catalogue: "",
      descriptionLoading: true,
      catalogueLoading: true
    };
  },
  created() {
    scrollTo(0, 0);
    this.videoSrc =
      this.config.requestCtx +
      "/file/api/ApiDownload?md5=" +
      this.$route.query.md5;
  },
  methods: {
    // èŽ·å–ç›®å½•
    getCatalogue() {
      this.catalogueLoading = true;
      let query = {
        path: this.idPath,
        fields: {
          autism_video: [],
          autism_introduction: [],
          autism_totalDuration: []
        },
        filterList: {
          "SysType=": "Cmsitem"
        }
      };
      this.MG.resource.getItem(query).then((res) => {
        this.catalogue = res.datas;
        // this.aliVod(this.catalogue[0].autism_video);
        this.videoSrc =
          this.config.requestCtx +
          "/file/api/ApiDownload?md5=" +
          this.multimedia.autism_video;
        this.catalogueLoading = false;
      });
    },
    getDuration() {
      this.audio = this.$refs.audio;
      this.duration = this.timeFormat(this.$refs.audio.duration);
    },
    timeFormat(number) {
      let minute = parseInt(number / 60);
      let second = parseInt(number % 60);
      minute = minute >= 10 ? minute : "0" + minute;
      second = second >= 10 ? second : "0" + second;
      return minute + ":" + second;
    },
    updateTime() {
      if (!this.$refs.progress) return;
      this.currentDuration = this.timeFormat(this.audio.currentTime);
      //如果不是正在移动 å’Œ æ²¡æœ‰æš‚停播放就执行
      if (!this.isMoveIn || !this.audio.paused) {
        // è®¾ç½®å½“前时间
        let MoveX =
          this.$refs.progress.clientWidth *
          (this.audio.currentTime / this.audio.duration);
        //播放时更新距离
        this.$refs.currentProgress.style.width = MoveX + "px";
        this.$refs.circle.style.left =
          MoveX - this.$refs.circle.clientWidth / 2 + "px";
      }
    }
  }
};
</script>
<style lang="less" scoped>
.videoBox {
  height: 657px;
  width: 100%;
  margin-top: 20px;
  margin-bottom: 20px;
}
video {
  width: 100%;
  height: 100%;
}
.videoName {
  text-align: center;
  margin-top: 20px;
  font-size: 30px;
}
.calssInfo {
  margin-top: 20px;
  height: 290px;
  background-color: #e4e4e4;
  margin-bottom: 20px;
  padding: 30px;
}
.tabItem {
  height: 220px;
  .selected {
    font-size: 14px;
    color: #0079fe;
  }
}
/deep/.el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active {
  background-color: rgba(0, 121, 254, 1);
  color: #fff !important;
}
/deep/ .el-tabs__item {
  font-size: 16px;
}
</style>
src/views/teachingServices/applyBookElectronic.vue
New file
@@ -0,0 +1,378 @@
<template>
  <div class="contentBox">
    <bookList :title="title" @getList="getBookList" />
    <div class="classBox">
      <div class="ruleBox" v-html="ruleText">
      </div>
      <div class="classCondition">授课情况</div>
      <div class="formBox">
        <el-form ref="form" :model="form" :rules="rules" label-width="200px">
          <el-form-item
            :label="item.label"
            :prop="item.prop"
            v-for="(item, index) in formObj.formItem"
            :key="index"
          >
            <el-input
              v-model="form[item.prop]"
              :placeholder="item.placeholder"
            ></el-input>
          </el-form-item>
        </el-form>
      </div>
      <div class="btnBox" v-loading="subloading">
        <el-button @click="$router.go(-1)">取消</el-button>
        <el-button type="primary" @click="submit">提交</el-button>
      </div>
    </div>
  </div>
</template>
<script>
import bookList from "@/components/detail/bookList.vue";
import { mapState } from "vuex";
export default {
  components: {
    bookList,
  },
  data() {
    return {
      ruleText: "",
      totalCount: 0,
      selectedOptions: [],
      subloading: false,
      tableData: [],
      column: [
        {
          prop: "name",
          label: "姓名",
        },
        {
          prop: "tel",
          label: "联系电话",
        },
        {
          prop: "address",
          label: "地址",
        },
      ],
      title: "中国农业大学出版社样书申请单(电子)",
      editForm: {
        name: "",
        tel: "",
        city: "",
        ifdefalut: false,
        address: "",
      },
      form: {},
      formObj: {
        formItem: [
          {
            label: "课程名称:",
            prop: "courseName",
            placeholder: "请输入课程名称",
          },
          {
            label: "学生层次:",
            prop: "studentLevel",
            placeholder: "请输入学生层次",
          },
          {
            label: "学生人数/年:",
            prop: "studentsNumber",
            placeholder: "请输入学生人数/å¹´",
          },
          {
            label: "现在使用教材所属出版社:",
            prop: "teachingMaterialPress",
            placeholder: "请输入现在使用教材所属出版社",
          },
          {
            label: "所用教材:",
            prop: "teachingMaterials",
            placeholder: "请输入所用教材",
          },
        ],
      },
      rules: {
        courseName: [
          { required: true, message: "请输入课程名称", trigger: "blur" },
        ],
        studentLevel: [
          { required: true, message: "请输入学生层次", trigger: "blur" },
        ],
        studentsNumber: [
          { required: true, message: "请输入学生人数/å¹´", trigger: "blur" },
        ],
        teachingMaterialPress: [
          {
            required: true,
            message: "请输入现在使用教材所属出版社",
            trigger: "blur",
          },
        ],
        teachingMaterials: [
          { required: true, message: "请输入所用教材", trigger: "blur" },
        ],
      },
      workInfo: [],
      temp_defalutAddress: false,
      bookList: [],
    };
  },
  created() {
    this.getTicketRes();
    this.getType();
    this.getTeachingSituation();
    this.getExplainType();
  },
  computed: {
    ...mapState(["userInfo"]),
  },
  methods: {
    //获取电子书说明
    getExplainType() {
      const data = {
        refCodes: ["electronicSampleApplication"],
      };
      this.MG.resource.getCmsTypeByRefCode(data).then((res) => {
        console.log(res, "getExplainType");
        try {
          this.ruleText = res[0].description;
        } catch (e) {
          this.ruleText = "暂无规则";
        }
      });
    },
    //获取授课情况
    getTeachingSituation() {
      this.MG.identity
        .getUserKey({
          domain: "teachingSituation",
          keys: [this.userInfo.roleId + ""],
        })
        .then((res) => {
          if (res.length > 0) {
            this.form = JSON.parse(res[0].value);
          }
        });
    },
    getType() {
      const data = {
        refCodes: ["electronicSampleApplication"],
        roleId: this.userInfo.roleId,
      };
      this.MG.resource.getCmsTypeByRefCode(data).then((res) => {
        this.workInfo = res[0].cmsTypeLinks[0].children;
      });
    },
    //提交样书申请
    submit() {
      let that = this;
      if (this.totalCount < 0) {
        this.$message({
          showClose: true,
          message: "申请次数已用完!",
          type: "error",
        });
        return;
      }
      this.$refs.form.validate((valid) => {
        if (valid) {
          let defalutAddress = {};
          this.tableData.forEach((item, index) => {
            if (item.ifdefalut) return (defalutAddress = item);
          });
          defalutAddress = { ...this.form, ...defalutAddress };
          defalutAddress.phone = defalutAddress.tel;
          defalutAddress.user = defalutAddress.name;
          delete defalutAddress.tel;
          delete defalutAddress.name;
          defalutAddress = this.tool.worksDataBytool(
            this.workInfo,
            defalutAddress
          );
          let checkedBook = [];
          let chenckIndex = [];
          this.bookList.forEach((item, index) => {
            if (item.checked) {
              checkedBook.push(item);
              chenckIndex.push(index);
            }
          });
          if (checkedBook.length == 0) {
            this.$message({
              showClose: true,
              message: "请选择书籍!",
              type: "error",
            });
            return;
          }
          if (checkedBook.length > 3) {
            this.$message({
              showClose: true,
              message: "单次申请书籍不能超过三本!",
              type: "error",
            });
            return;
          }
          const data = {
            topicIdOrRefCode: "applyBook",
            name: "电子样书申请",
            content: JSON.stringify(checkedBook),
            state: "WaitAudit",
            type: "applyForEbook",
            cmsTypeRefCode: "electronicSampleApplication",
            newDataListRequest: defalutAddress,
          };
          chenckIndex.forEach((item) => {
            this.$store.commit("deletePbookList", item);
          });
          this.subloading = true;
          this.MG.ugc.newTopicMessage(data).then((res) => {
            this.MG.identity
              .setUserKey({
                setKeyRequests: [
                  {
                    domain: "teachingSituation",
                    key: this.userInfo.roleId + "",
                    value: JSON.stringify(this.form),
                  },
                ],
              })
              .then((res) => {
                console.log(res);
              });
            this.MG.app
              .useTicket({
                ticketRefCodeOrGuid: "electronicSampleBookapplyNum",
                roleId: this.userInfo.roleId,
                refType: "applyBook",
              })
              .then((aRes) => {
                this.$message({
                  message: "申请成功!",
                  type: "success",
                });
                chenckIndex = chenckIndex.reverse();
                chenckIndex.forEach((item) => {
                  this.$store.commit("deleteEbookList", item);
                });
                this.subloading = false;
                that.$router.push({
                  path: "/personalCenter",
                  query: {
                    tabsSelected: 5,
                  },
                });
              });
          });
        }
      });
    },
    //获取剩余申请次数
    getTicketRes() {
      this.MG.app
        .getTicketResult({
          ticketRefCodeOrGuid: "electronicSampleBookapplyNum",
          roleId: this.userInfo.roleId,
        })
        .then((res) => {
          this.totalCount = res.totalCount - res.usedCount;
        });
    },
    //更改默认地址
    setAddress(row) {
      this.tableData.forEach((item) => {
        item.ifdefalut = false;
      });
      this.editForm = JSON.parse(JSON.stringify(row));
      row.ifdefalut = true;
      this.temp_defalutAddress = true;
      this.save();
    },
    //获取样书列表
    getBookList(val) {
      this.bookList = [];
      val.forEach((item) => {
        const templateObj = {
          id: item.id,
          title: item.name,
          icon: item.icon,
          author: item.caupress_author,
          defaultSaleMethodId: item.defaultSaleMethodId,
          isbn: item.caupress_ISBN,
          price: item.price,
          checked: item.checked ? item.checked : false,
          cmsPath: item.rootCmsItemId,
        };
        this.bookList.push(templateObj);
      });
    },
  },
};
</script>
<style scoped>
.el-checkbox__inner::after {
  left: 7px !important;
  top: 4px !important;
}
.classBox {
  width: 100%;
  background-color: #fff;
  padding: 20px;
  box-sizing: border-box;
}
.ruleBox {
  /* text-align: center; */
  padding-left: 20px;
  background-color: #f2f7f4;
  /* width: 100%; */
  /* height: 50px; */
  line-height: 40px;
  border-radius: 5px;
  margin: 0 auto;
}
.classCondition {
  display: flex;
  justify-content: space-between;
  margin-top: 50px;
  font-size: 16px;
  font-weight: 700;
  height: 50px;
  line-height: 50px;
  border-bottom: 1px solid #dbdbdb;
  color: #333;
}
.formBox {
  margin-top: 30px;
  padding: 0 100px;
}
.addAddress {
  font-size: 14px;
  color: #009341;
  cursor: pointer;
}
.btnBox {
  margin-top: 30px;
  padding-right: 100px;
  text-align: right;
}
</style>
<style>
.el-checkbox__inner::after {
  left: 7px !important;
  top: 4px !important;
}
</style>
src/views/teachingServices/applyBookPaper.vue
New file
@@ -0,0 +1,690 @@
<template>
  <div class="contentBox">
    <bookList :title="title" @getList="getBookList" />
    <div class="classBox">
      <div class="ruleBox" v-html="ruleText"></div>
      <div class="classCondition">授课情况</div>
      <div class="formBox">
        <el-form ref="form" :model="form" :rules="rules" label-width="200px">
          <el-form-item
            :label="item.label"
            :prop="item.prop"
            v-for="(item, index) in formObj.formItem"
            :key="index"
          >
            <el-input
              v-model="form[item.prop]"
              :placeholder="item.placeholder"
            ></el-input>
          </el-form-item>
        </el-form>
      </div>
      <div class="classCondition">
        <div>收货人信息</div>
        <div class="addAddress" @click="addAddress">+ æ–°å¢žæ”¶è´§åœ°å€</div>
      </div>
      <div class="tableBox">
        <el-table
          :data="tableData"
          style="width: 100%"
          v-loading="loading"
          highlight-current-row
          @current-change="handleCurrentChange"
          ref="singleTable"
        >
          <el-table-column
            :prop="item.prop"
            :label="item.label"
            v-for="(item, index) in column"
            :key="index"
          >
            <template slot-scope="scope">
              <span>{{ scope.row[item.prop] }}</span>
              <span
                style="color: #ccc; margin-left: 40px"
                v-if="item.prop == 'address' && scope.row.ifdefalut"
                >默认地址</span
              >
            </template>
          </el-table-column>
        </el-table>
      </div>
      <div class="btnBox" v-loading="subloading">
        <el-button @click="$router.go(-1)">取消</el-button>
        <el-button type="primary" @click="submit">提交</el-button>
      </div>
    </div>
    <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="30%">
      <el-form
        ref="addressForm"
        :model="editForm"
        :rules="addressRules"
        label-width="80px"
      >
        <el-form-item
          :label="item.label"
          :prop="item.prop"
          v-for="(item, index) in editFormObj.formItem"
          :key="index"
        >
          <el-input
            v-if="!item.type"
            v-model="editForm[item.prop]"
            :placeholder="item.placeholder"
          ></el-input>
          <el-cascader
            v-if="item.type"
            size="large"
            :options="options"
            v-model="selectedOptions"
            @change="handleChange"
            style="width: 100%"
          >
          </el-cascader>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="save" v-loading="saveloading"
          >ç¡® å®š</el-button
        >
      </span>
    </el-dialog>
  </div>
</template>
<script>
import bookList from "@/components/detail/bookList.vue";
import { CodeToText, TextToCode, regionData } from "element-china-area-data";
import { mapState } from "vuex";
export default {
  components: {
    bookList,
  },
  data() {
    let checkPhone = (rule, value, callback) => {
      let reg =
        /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;
      if (!reg.test(value)) {
        callback(new Error("请输入正确的11位手机号"));
      } else {
        callback();
      }
    };
    return {
      ruleText: "",
      subloading: false,
      saveloading: false,
      totalCount: 0,
      selectedOptions: [],
      options: regionData,
      dialogTitle: "新增收货人信息",
      dialogVisible: false,
      loading: false,
      tableData: [],
      column: [
        {
          prop: "name",
          label: "姓名",
        },
        {
          prop: "tel",
          label: "联系电话",
        },
        {
          prop: "city",
          label: "地址",
        },
        {
          prop: "address",
          label: "详细地址",
        },
      ],
      title: "中国农业大学出版社样书申请单(纸质)",
      editForm: {
        name: "",
        tel: "",
        city: "",
        ifdefalut: false,
        address: "",
      },
      editFormObj: {
        formItem: [
          {
            label: "姓名",
            prop: "name",
            placeholder: "请输入姓名",
          },
          {
            label: "联系电话",
            prop: "tel",
            placeholder: "请输入联系电话",
          },
          {
            type: "address",
            label: "地址",
            prop: "city",
            placeholder: "请输入地址",
          },
          {
            label: "详细地址",
            prop: "address",
            placeholder: "请输入详细地址",
          },
        ],
      },
      form: {},
      formObj: {
        formItem: [
          {
            label: "课程名称:",
            prop: "courseName",
            placeholder: "请输入课程名称",
          },
          {
            label: "学生层次:",
            prop: "studentLevel",
            placeholder: "请输入学生层次",
          },
          {
            label: "学生人数/年:",
            prop: "studentsNumber",
            placeholder: "请输入学生人数/å¹´",
          },
          {
            label: "现在使用教材所属出版社:",
            prop: "teachingMaterialPress",
            placeholder: "请输入现在使用教材所属出版社",
          },
          {
            label: "所用教材:",
            prop: "teachingMaterials",
            placeholder: "请输入所用教材",
          },
        ],
      },
      addressRules: {
        name: [{ required: true, message: "请输入姓名", trigger: "blur" }],
        tel: [
          {
            required: true,
            type: "number",
            validator: checkPhone,
            trigger: "blur",
          },
        ],
        address: [
          { required: true, message: "请输入详细地址", trigger: "blur" },
        ],
        city: [{ required: true, message: "请选择所在城市", trigger: "blur" }],
      },
      rules: {
        courseName: [
          { required: true, message: "请输入课程名称", trigger: "blur" },
        ],
        studentLevel: [
          { required: true, message: "请输入学生层次", trigger: "blur" },
        ],
        studentsNumber: [
          { required: true, message: "请输入学生人数/å¹´", trigger: "blur" },
        ],
        teachingMaterialPress: [
          {
            required: true,
            message: "请输入现在使用教材所属出版社",
            trigger: "blur",
          },
        ],
        teachingMaterials: [
          { required: true, message: "请输入所用教材", trigger: "blur" },
        ],
      },
      workInfo: [],
      temp_defalutAddress: false,
      bookList: [],
      currentAddress: null,
    };
  },
  created() {
    this.getAddress();
    this.getTicketRes();
    this.getType();
    this.getTeachingSituation();
    this.getExplainType();
  },
  computed: {
    ...mapState(["userInfo"]),
  },
  methods: {
    //获取纸质书说明
    getExplainType() {
      const data = {
        refCodes: ["paperSampleApplication"],
      };
      this.MG.resource.getCmsTypeByRefCode(data).then((res) => {
        try {
          this.ruleText = res[0].description;
        } catch (e) {
          this.ruleText = "暂无规则";
        }
      });
    },
    //
    getType() {
      const data = {
        refCodes: ["paperSampleApplication"],
        roleId: this.userInfo.roleId,
      };
      this.MG.resource.getCmsTypeByRefCode(data).then((res) => {
        this.workInfo = res[0].cmsTypeLinks[0].children;
      });
    },
    getTeachingSituation() {
      this.MG.identity
        .getUserKey({
          domain: "teachingSituation",
          keys: [this.userInfo.roleId + ""],
        })
        .then((res) => {
          if (res.length > 0) {
            this.form = JSON.parse(res[0].value);
          }
        });
    },
    //提交样书申请
    submit() {
      let that = this;
      if (this.totalCount == 0) {
        this.$message({
          showClose: true,
          message: "申请次数已用完!",
          type: "error",
        });
        return;
      }
      this.$refs.form.validate((valid) => {
        if (valid) {
          let defalutAddress = {};
          if (this.currentAddress) {
            defalutAddress = this.currentAddress;
          } else {
            this.tableData.forEach((item, index) => {
              if (item.ifdefalut) return (defalutAddress = item);
            });
          }
          if (!defalutAddress.city) {
            this.$message({
              showClose: true,
              message: "请选择地址!",
              type: "error",
            });
            return;
          }
          defalutAddress = { ...this.form, ...defalutAddress };
          defalutAddress.phone = defalutAddress.tel;
          defalutAddress.user = defalutAddress.name;
          delete defalutAddress.tel;
          delete defalutAddress.name;
          defalutAddress = this.tool.worksDataBytool(
            this.workInfo,
            defalutAddress
          );
          let checkedBook = [];
          let chenckIndex = [];
          this.bookList.forEach((item, index) => {
            if (item.checked) {
              checkedBook.push(item);
              chenckIndex.push(index);
            }
          });
          if (checkedBook.length == 0) {
            this.$message({
              showClose: true,
              message: "请选择书籍!",
              type: "error",
            });
            return;
          }
          if (checkedBook.length > 3) {
            this.$message({
              showClose: true,
              message: "单次申请书籍不能超过三本!",
              type: "error",
            });
            return;
          }
          const data = {
            topicIdOrRefCode: "applyEntityBook",
            name: "纸质样书申请",
            content: JSON.stringify(checkedBook),
            state: "WaitAudit",
            type: "applyForPbook",
            cmsTypeRefCode: "paperSampleApplication",
            newDataListRequest: defalutAddress,
          };
          this.subloading = true;
          this.MG.ugc.newTopicMessage(data).then((res) => {
            console.log(this.form, "setUserKey");
            this.MG.identity
              .setUserKey({
                setKeyRequests: [
                  {
                    domain: "teachingSituation",
                    key: this.userInfo.roleId + "",
                    value: JSON.stringify(this.form),
                  },
                ],
              })
              .then((res) => {
                console.log(res);
              });
            this.MG.app
              .useTicket({
                ticketRefCodeOrGuid: "paperSampleBookapplyNum",
                roleId: this.userInfo.roleId,
                refType: "applyEntityBook",
              })
              .then((aRes) => {
                this.subloading = false;
                this.$message({
                  message: "申请成功!",
                  type: "success",
                });
                chenckIndex = chenckIndex.reverse();
                chenckIndex.forEach((item) => {
                  this.$store.commit("deletePbookList", item);
                });
                that.$router.push({
                  path: "/personalCenter",
                  query: {
                    tabsSelected: 6,
                  },
                });
              });
          });
        }
      });
    },
    //选择地址
    handleCurrentChange(val) {
      console.log(val);
      this.currentAddress = val;
    },
    //设置默认选中地址
    setCurrent(row) {
      this.$refs.singleTable.setCurrentRow(row);
    },
    //获取剩余申请次数
    getTicketRes() {
      this.MG.app
        .getTicketResult({
          ticketRefCodeOrGuid: "paperSampleBookapplyNum",
          roleId: this.userInfo.roleId,
        })
        .then((res) => {
          this.totalCount = res.totalCount - res.usedCount;
        });
    },
    //更改默认地址
    setAddress(row) {
      this.tableData.forEach((item) => {
        item.ifdefalut = false;
      });
      this.editForm = JSON.parse(JSON.stringify(row));
      row.ifdefalut = true;
      this.temp_defalutAddress = true;
      this.save();
    },
    //编辑收货人信息
    handleClick(row) {
      this.dialogTitle = "编辑收货人信息";
      this.dialogVisible = true;
      this.editForm = JSON.parse(JSON.stringify(row));
      let city = this.editForm.city.split("/");
      if (city[0] == city[1]) {
        city[1] = "市辖区";
      }
      this.selectedOptions.push(TextToCode[city[0]].code);
      this.selectedOptions.push(TextToCode[city[0]][city[1]].code);
      this.selectedOptions.push(TextToCode[city[0]][city[1]][city[2]].code);
    },
    //新增收货人信息
    addAddress() {
      this.dialogTitle = "新增收货人信息";
      this.dialogVisible = true;
      for (let k in this.editForm) {
        if (k !== "ifdefalut") {
          this.editForm[k] = "";
        }
      }
      this.selectedOptions = [];
    },
    // èŽ·å–æ‰€æœ‰åœ°å€
    getAddress(isAdd) {
      this.loading = true;
      this.MG.identity.getCurrentAppUser().then((res) => {
        this.loading = false;
        let storeInfoList = res.infoList.find((i) => i.type == "Address");
        this.tableData = [];
        if (storeInfoList && storeInfoList.data) {
          if (!Array.isArray(JSON.parse(storeInfoList.data))) {
            this.tableData.unshift(JSON.parse(storeInfoList.data));
          } else {
            this.tableData = JSON.parse(storeInfoList.data)
              ? JSON.parse(storeInfoList.data)
              : [];
          }
          this.tableData.forEach((item, index) => {
            if (item.ifdefalut) {
              this.setCurrent(item);
            }
          });
          this.tableData = this.tableData.reverse();
          if (isAdd) {
            this.setCurrent(this.tableData.at(0));
          }
        } else {
          // ç”¨æˆ·ä¸ºç¬¬ä¸€æ¬¡æ·»åŠ åœ°å€ï¼Œåˆ™å½“å‰æ‰€é€‰åœ°å€ä¸ºé»˜è®¤åœ°å€
          this.addressItem.ifdefalut = true;
        }
      });
    },
    //保存收货人地址
    save() {
      if (this.temp_defalutAddress) {
        this.addressSave();
      } else {
        this.saveloading = true;
        this.$refs.addressForm.validate((valid) => {
          if (valid) {
            if (this.editForm.id) {
              this.tableData.forEach((item, index) => {
                if (item.id == this.editForm.id) {
                  this.temp_index = index;
                }
              });
              this.tableData[this.temp_index] = { ...this.editForm };
            } else {
              this.editForm.id = this.tableData.length + 1;
              this.tableData.push(this.editForm);
            }
          }
        });
        this.addressSave();
      }
    },
    addressSave() {
      const userInfo = {
        requests: [
          {
            data: JSON.stringify(this.tableData),
            name: "地址管理",
            type: "Address",
          },
        ],
      };
      this.MG.identity.setAppUserInfo(userInfo).then((res) => {
        this.loading = false;
        if (res) {
          this.$message({
            showClose: true,
            message: "成功",
            type: "success",
          });
          this.dialogVisible = false;
          this.getAddress(true);
        } else {
          this.$message({
            showClose: true,
            message: "失败,请稍后重试",
            type: "error",
          });
        }
        this.saveloading = false;
      });
    },
    //处理级联数据
    handleChange(city) {
      let cityStr =
        CodeToText[city[0]] +
        "/" +
        CodeToText[city[1]] +
        "/" +
        CodeToText[city[2]];
      let cityArr = cityStr.split("/");
      if (cityArr[1] == "市辖区") {
        cityArr[1] = cityArr[0];
      }
      this.editForm.city = cityArr.join("/");
    },
    //获取样书列表
    getBookList(val) {
      this.bookList = [];
      val.forEach((item) => {
        const templateObj = {
          id: item.id,
          title: item.name,
          icon: item.icon,
          author: item.caupress_author,
          defaultSaleMethodId: item.defaultSaleMethodId,
          isbn: item.caupress_ISBN,
          price: item.price,
          checked: item.checked ? item.checked : false,
          cmsPath: item.rootCmsItemId,
        };
        this.bookList.push(templateObj);
      });
    },
    //删除地址
    // åˆ é™¤åœ°å€
    deleteAddress(id) {
      let that = this;
      this.$confirm("是否移除该地址", "提示", {
        type: "warning",
      })
        .then(() => {
          let basicInfo = "";
          that.tableData.forEach((item) => {
            if (item.id == id) {
              basicInfo = item;
            }
          });
          const userInfo = {
            requests: [
              {
                data: JSON.stringify(basicInfo),
                name: "地址管理",
                type: "Address",
              },
            ],
          };
          this.MG.identity.setAppUserInfo(userInfo).then((res) => {
            if (res) {
              this.$message({
                type: "success",
                message: "地址移除成功",
              });
              this.isAdd = false;
              // é‡æ–°èŽ·å–æ•°æ®
              this.getAddress();
            }
          });
        })
        .catch(() => {});
    },
  },
};
</script>
<style scoped>
.classBox {
  width: 100%;
  height: 1000px;
  background-color: #fff;
  padding: 0 40px;
  /* display: flex;
  justify-content: center; */
  box-sizing: border-box;
}
.ruleBox {
  /* text-align: center; */
  padding-left: 20px;
  background-color: #f2f7f4;
  /* width: 100%; */
  /* height: 50px; */
  line-height: 40px;
  border-radius: 5px;
  margin: 0 auto;
}
.classCondition {
  display: flex;
  justify-content: space-between;
  margin-top: 50px;
  font-size: 16px;
  font-weight: 700;
  height: 50px;
  line-height: 50px;
  border-bottom: 1px solid #dbdbdb;
  color: #333;
}
.formBox {
  margin-top: 30px;
  padding: 0 100px;
}
.tableBox {
  margin-top: 20px;
  max-height: 300px;
  overflow-y: auto;
}
.addAddress {
  font-size: 14px;
  color: #009341;
  cursor: pointer;
}
.btnBox {
  margin-top: 30px;
  float: right;
}
</style>
<style>
.el-table tbody tr:hover > td {
  background-color: #e7f3ec !important;
}
</style>
src/views/teachingServices/detail.vue
New file
@@ -0,0 +1,247 @@
<template>
  <div class="contentBox">
    <detailInfo :bookInfo="bookInfo" v-loading="loading"></detailInfo>
    <div style="display: flex">
      <div class="leftBox">
        <electronicBooks />
        <paperCopies />
      </div>
      <div class="rightBox">
        <bookInfo :bookInfo="bookInfo" v-loading="loading" />
        <resource
          :resourceSupportList="resourceSupportList"
          :allResource="allResource"
          :bookInfo="bookInfo"
        />
        <serviceRelated
          ref="rela"
          :bookInfo="bookInfo"
          :recommendKey="recommendKey"
          @reloadPage="reloadPage"
        />
      </div>
    </div>
  </div>
</template>
<script>
import config from "@/assets/js/config";
import detailInfo from "@/components/detail/detailInfo.vue";
import electronicBooks from "@/components/detail/electronicBooks.vue";
import bookInfo from "@/components/detail/bookInfo.vue";
import resource from "@/components/detail/resource.vue";
import paperCopies from "@/components/detail/paperCopies.vue";
import serviceRelated from "@/components/detail/serviceRelated.vue";
export default {
  components: {
    detailInfo,
    electronicBooks,
    bookInfo,
    resource,
    paperCopies,
    serviceRelated,
  },
  data() {
    return {
      bookInfo: {},
      detailRoute: "teachingServices-detail",
      resourceSupportList: [],
      allResource: [],
      recommendKey: "",
      currentId: null,
      currentCmsId: null,
      loading: true,
    };
  },
  created() {
    if (this.$route.query.id && this.$route.query.cmsPath) {
      this.currentId = this.$route.query.id;
      this.currentCmsId = this.$route.query.cmsPath;
      this.getData();
    } else {
      this.getData({ id: this.$route.query.id });
    }
    window.scrollTo(0, 0);
    this.setNewView("productId", this.$route.query.id);
  },
  methods: {
    //获取电子书剩余申请次数
    getEbookTicketRes() {
      this.MG.app
        .getTicketResult({
          ticketRefCodeOrGuid: "electronicSampleBookapplyNum",
          roleId: this.userInfo.roleId,
        })
        .then((res) => {
          this.ebookTotalCount = res.totalCount - res.usedCount;
        });
    },
    //获取纸质剩余申请次数
    getPbookTicketRes() {
      this.MG.app
        .getTicketResult({
          ticketRefCodeOrGuid: "paperSampleBookapplyNum",
          roleId: this.userInfo.roleId,
        })
        .then((res) => {
          this.pbookTotalCount = res.totalCount - res.usedCount;
        });
    },
    //获取书籍详情
    getData(data) {
      this.loading = true;
      let query = {
        path: "*",
        queryType: "*",
        productId: data ? data.id : this.currentId,
        cmsPath: this.currentCmsId, //获取书籍文件夹
        fields: {
          caupress_author: [],
          caupress_content: [],
          caupress_seriesName: [],
          caupress_publicationDate: [],
          caupress_ISBN: [],
          caupress_pubNumber: [],
          caupress_authorAbout: [],
          caupress_recommendationReason: [],
          caupress_preface: [],
          caupress_catalog: [],
          caupress_pdfFreeFile: [],
          caupress_projectTitle: [],
          caupress_pdfFile: [],
          caupress_catalogue: [],
          caupress_contactEditor: [],
        },
        linkTypes: [
          // èŽ·å–å…³è”çš„ç¼–è¾‘ä¿¡æ¯
          {
            linkType: "caupress_editor",
            fields: {
              telephone: [],
              phone: [],
              qq: [],
            },
          },
        ],
      };
      // èŽ·å–ä¹¦ç±è¯¦æƒ…ä»¥åŠä¹¦ç±èµ„æºæ–‡ä»¶å¤¹
      this.MG.store.getProductDetail(query).then((res) => {
        this.bookInfo = res.datas;
        if (this.bookInfo.caupress_catalogue) {
          this.bookInfo.caupress_catalogue = JSON.parse(
            this.bookInfo.caupress_catalogue
          );
          // èŽ·å–å±‚æ¬¡è¿›è¡Œç›¸å…³æŽ¨è
          this.recommendKey = this.bookInfo.caupress_catalogue[0];
          console.log(this.recommendKey, "this.recommendKey");
          if (this.recommendKey.length > 0) {
            this.catalogue = [];
            this.recommendKey.forEach((item, index) => {
              if (index == 0) {
                this.catalogue.push(item);
              } else {
                this.catalogue.push("&" + item);
              }
            });
          }
          this.$refs.rela.getData(this.catalogue);
        } else {
          this.recommendKey = "null";
        }
        // èŽ·å–å…³è”çš„ç¼–è¾‘ä¿¡æ¯
        let query = this.bookInfo.cmsDatas.find(
          (item) => item.queryTag == "QueryLink_" + "caupress_editor"
        );
        if (query && query.datas.length) {
          this.bookInfo.caupress_editor = {
            name: query.datas[0].name,
            telephone: query.datas[0].telephone,
            phone: query.datas[0].phone,
            qq: query.datas[0].qq,
          };
        }
        if (this.bookInfo.caupress_projectTitle) {
          this.bookInfo.caupress_projectTitle = JSON.parse(
            this.bookInfo.caupress_projectTitle
          );
        }
        if (this.bookInfo.caupress_projectTitle instanceof Array) {
          if (this.bookInfo.caupress_projectTitle.length > 1) {
            this.bookInfo.caupress_projectTitle =
              this.bookInfo.caupress_projectTitle.join("、");
          } else {
            this.bookInfo.caupress_projectTitle =
              this.bookInfo.caupress_projectTitle[0];
          }
        }
        this.bookInfo.VirtualPrice =
          this.bookInfo.saleMethod.length > 0
            ? this.bookInfo.saleMethod[0].VirtualPrice
            : null;
        this.bookInfo.caupress_seriesName =
          config.seriesList[this.bookInfo.caupress_seriesName];
        if (this.bookInfo.caupress_pubNumber) {
          this.bookInfo.caupress_pubNumber =
            this.bookInfo.caupress_pubNumber.split("_")[1];
        }
        this.loading = false;
        this.$store.commit("setHistoryBook", this.bookInfo);
        let folderList = res.datas.cmsDatas[0].datas;
        console.log(folderList, "folderList");
        folderList.forEach((item) => {
          if (item.name == "配套资源") {
            this.MG.store
              .getProductDetail({
                path: "*",
                cmsPath: res.datas.rootCmsItemId + "\\" + item.id, //书籍文件夹ID获取文件夹中资源
                productId: this.currentId,
                queryType: "*",
                itemFields: {
                  caupress_fileType: [],
                  caupress_file: [],
                  caupress_allowDownload: [],
                },
              })
              .then((dataRes) => {
                this.resourceSupportList = dataRes.datas.cmsDatas[0].datas;
              });
          } else {
            this.MG.store
              .getProductDetail({
                path: "*",
                cmsPath: res.datas.rootCmsItemId + "\\\\" + item.id, //书籍文件夹ID获取文件夹中资源
                productId: this.currentId,
                queryType: "*",
                itemFields: {
                  caupress_fileType: [],
                  caupress_file: [],
                  caupress_allowDownload: [],
                },
              })
              .then((dataRes) => {
                this.allResource = dataRes.datas.cmsDatas[0].datas;
              });
          }
        });
      });
    },
    reloadPage(data) {
      this.getData(data);
      window.scrollTo(0, 0);
    },
  },
  beforeRouteLeave(to, from, next) {
    if (to.name != "teachingServices-index") {
      this.$store.commit("delKeepAlive", "teachingServices-index");
    }
    next();
  },
};
</script>
<style></style>
src/views/teachingServices/index.vue
New file
@@ -0,0 +1,379 @@
<template>
  <div class="minWidth">
    <el-carousel :height="screenheight + 'px'" v-show="bannerState">
      <el-carousel-item v-for="item in bannerList" :key="item.id">
        <div class="bannerBox imgBox" :style="item.caupress_link ? 'cursor: pointer' : ''">
          <img class="bannerImg" :src="item.icon" @click="bannerLink(item)" />
        </div>
      </el-carousel-item>
    </el-carousel>
    <div
      :class="!bannerState ? 'show stow' : 'stow'"
      @click="bannerState = !bannerState"
    >
      {{ bannerState ? "收起" : "显示" }}
      è½®æ’­å›¾
      <i
        :class="bannerState ? 'el-icon-caret-top' : 'el-icon-caret-bottom'"
      ></i>
    </div>
    <div class="contentBox">
      <div class="tabs" v-show="!$route.query.searchOptionHidden">
        <div
          class="tabItem"
          v-for="(item, index) in tab"
          :key="index"
          @click="toRoute(item)"
        >
          <div class="img">
            <img src="@/assets/images/teaching/teacher.png" alt="" />
          </div>
          <p class="title">{{ item.name }}</p>
          <p class="englishTitle">{{ item.englishName }}</p>
          <div class="jump">
            <img src="@/assets/images/teaching/arrow.png" alt="" />
          </div>
        </div>
      </div>
      <div class="notice">
        <p>出版社 <span>公告 //</span></p>
        <el-carousel height="40px" direction="vertical" :autoplay="true">
          <el-carousel-item v-for="(item, index) in noticeList" :key="index">
            <div class="ellipsis" :title="item.name">
              {{ item.name }}
            </div>
          </el-carousel-item>
        </el-carousel>
      </div>
      <List
        :channel="
          this.$route.query.searchPath
            ? this.$route.query.searchPath
            : 'caupress_teachingResource'
        "
        :searchOptionHidden="searchOptionHidden"
        :detailRoute="detailRoute"
      ></List>
    </div>
  </div>
</template>
<script>
import List from "@/components/list";
import tool from "@/assets/js/toolClass";
export default {
  name: "teachingServices-index",
  components: {
    List,
  },
  data() {
    return {
      detailRoute: "teachingServices-detail",
      bannerList: [],
      tab: [
        {
          name: "教师认证",
          englishName: "TEACHER CERTIFICATION",
          icon: "@/assets/images/teaching/teacher.png",
          jumpPath: "/personalCenter",
          query: "1",
        },
        {
          name: "样书申请",
          englishName: "SAMPLE APPLICATION",
          icon: "@/assets/images/teaching/sample.png",
          jumpPath: "/teachingServices/applyBook-electronic",
        },
        {
          name: "我的电子样书",
          englishName: "ELECTRONIC BOOKS",
          icon: "@/assets/images/teaching/electronicBooks.png",
          jumpPath: "/personalCenter",
          query: "5",
        },
        {
          name: "我的纸质样书",
          englishName: "PAPER COPIES",
          icon: "@/assets/images/teaching/paperCopies.png",
          jumpPath: "/personalCenter",
          query: "6",
        },
      ],
      noticeList: [],
      bannerState: true,
      searchOptionHidden: this.$route.query.searchOptionHidden
        ? this.$route.query.searchOptionHidden
        : false,
      screenheight: document.documentElement.clientWidth / 2.628,
    };
  },
  created() {
    window.onresize = () => {
      let c = 2.628;
      if (document.documentElement.clientWidth >= 1220) {
        this.screenheight = document.documentElement.clientWidth / c;
      }
    };
    this.getBanner();
    this.getNotice();
    if(tool.getCookie(this.config.tokenKey)){
      this.getUserInfo();
    }
    setTimeout(() => {
      this.bannerState = false;
    }, 15000);
  },
  methods: {
    bannerLink(val) {
      if (val.caupress_link) {
        window.open(val.caupress_link);
      }
    },
    //更新用户信息
    getUserInfo() {
      this.MG.identity.getCurrentAppUser().then((res) => {
        if (res) {
          let teacherRole = res.roleLinks.find(
            (item) => item.role.refCode == "teacher"
          );
          let teacherInfo = res.infoList.find(
            (item) => item.type == "teacherInfo"
          );
          let wechatInfo = res.infoList.find((item) => item.type == "WeChat");
          let studentInfo = res.infoList.find((item) => item.type == "Default");
          let phoneInfo = res.secretList.find(
            (item) => item.type == "MobilePhone"
          );
          if (teacherRole && teacherInfo) {
            let data = {};
            try {
              data = JSON.parse(teacherInfo.data);
            } catch (error) {
              data = {};
            }
            this.$store.dispatch("setUserInfo", {
              ...data,
              name: data.fullName,
              phoneNumber: phoneInfo?.credential,
              role: "Teacher",
              roleId: teacherRole.role.id,
            });
          } else if (wechatInfo) {
            this.$store.dispatch("setUserInfo", {
              ...wechatInfo,
              phoneNumber: phoneInfo?.credential,
              role: "Student",
            });
          } else if (studentInfo) {
            this.$store.dispatch("setUserInfo", {
              ...studentInfo,
              phoneNumber: phoneInfo?.credential,
              role: "Student",
            });
          }
        }
      });
    },
    //导航跳转
    toRoute(item) {
      if (!this.$store.state.token) {
        this.$router.push({
          path: "/login",
          query: {
            redirectPath: this.$route.fullPath
          }
        });
      }else{
        if (item.name == "样书申请") {
          if (this.$store.state.userInfo.role !== "Teacher") {
            this.$message({
              showClose: true,
              message: "请先进行教师认证",
              type: "warning",
            });
            return;
          }
          if (
            this.$store.state.electronicBookList.length == 0 &&
            this.$store.state.paperCopiesList.length == 0
          ) {
            this.$message.error("请添加样书后生成清单!");
          } else if (this.$store.state.electronicBookList != 0) {
            this.$router.push({
              path: item.jumpPath,
              query: {
                tabsSelected: item.query ? item.query : null,
              },
            });
          } else if (this.$store.state.paperCopiesList.length != 0) {
            this.$router.push({
              path: "/teachingServices/applyBook-paper",
              query: {
                tabsSelected: item.query ? item.query : null,
              },
            });
          }
        } else if (item.name == "教师认证") {
          this.$router.push({
            name: "personalCenter",
            query: {
              tabsSelected: 1,
            },
          });
        } else if (item.name == "我的电子样书") {
          this.$router.push({
            name: "personalCenter",
            query: {
              tabsSelected: 5,
            },
          });
        } else if (item.name == "我的纸质样书") {
          this.$router.push({
            name: "personalCenter",
            query: {
              tabsSelected: 6,
            },
          });
        }
      }
    },
    getBanner() {
      this.MG.resource
        .getItem({
          path: "caupress_banner\\caupress_teachService",
          fields: {
            caupress_link: [],
          },
          coverSize: {
            height: 750,
          },
          paging: {
            start: 0,
            size: 999,
          },
        })
        .then((res) => {
          this.bannerList = res.datas;
        });
    },
    getNotice() {
      this.MG.resource
        .getItem({
          path: "caupress_notes",
          paging: {
            start: 0,
            size: 999,
          },
        })
        .then((res) => {
          this.noticeList = res.datas;
        });
    },
  },
  // å¦‚果跳转页面不是详情,则将当前页面不缓存
  beforeRouteLeave(to, from, next) {
    if (to.name != "teachingServices-detail") {
      this.$store.commit("delKeepAlive", from.name);
    }
    next();
  },
};
</script>
<style lang="less" scoped>
.autoImg {
  max-height: none;
}
.minWidth {
  min-width: 1220px;
}
.stow {
  width: 160px;
  margin: 0 auto;
  text-align: center;
  border: 1px solid #b3b3b3;
  font-size: 16px;
  line-height: 40px;
  border-radius: 21px;
  color: #b3b3b3;
  cursor: pointer;
  margin-top: 5px;
}
.show {
  margin-top: 20px;
}
.bannerBox {
  background: #f3f3f3;
}
.imgBox {
  position: relative;
  width: 100%;
  height: 100%;
}
.contentBox {
  background-color: rgb(241, 248, 244);
  .tabs {
    display: flex;
    justify-content: space-between;
    margin-top: 20px;
    margin-bottom: 50px;
    .tabItem {
      width: 250px;
      height: 250px;
      background-color: #e7f9ef;
      text-align: center;
      position: relative;
      cursor: pointer;
      box-shadow: -1.04px 3.86px 20px 4px rgba(0, 0, 0, 0.1);
      .img {
        padding-left: 10px;
        width: 250px;
      }
      .title {
        font-size: 20px;
        font-weight: 700;
        color: #444444;
        line-height: 30px;
      }
      .englishTitle {
        font-size: 14px;
        color: #b0b0b0;
        line-height: 30px;
      }
      .jump {
        width: 100%;
        height: 30px;
        background-color: #fff;
        position: absolute;
        bottom: 0;
        img {
          margin-top: 10px;
        }
      }
    }
  }
  .notice {
    display: flex;
    line-height: 40px;
    border-bottom: 1px solid #e6e6e6;
    margin-bottom: 20px;
    p {
      width: 100px;
      font-weight: 700;
      span {
        color: #00873c;
      }
    }
    div {
      font-size: 14px;
      width: 1000px;
      color: #666666;
      cursor: pointer;
    }
  }
}
</style>
vue.config.js
New file
@@ -0,0 +1,6 @@
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  publicPath: "./",
  productionSourceMap: false,
  transpileDependencies: true
})
yarn.lock
New file
Diff too large