删除备份文件
Showing
12 changed files
with
0 additions
and
1391 deletions
| 1 | /** | ||
| 2 | * 组件描述:PC顶栏导航下拉菜单 | ||
| 3 | */ | ||
| 4 | import api from '@/api/api' | ||
| 5 | import { | ||
| 6 | httpPost | ||
| 7 | } from '@/api/fetch-api.js' | ||
| 8 | |||
| 9 | export default { | ||
| 10 | name: "DropDownList", | ||
| 11 | data() { | ||
| 12 | return { | ||
| 13 | activeIndex: 0, | ||
| 14 | sTitle: this.dataObj && this.dataObj.name || '', | ||
| 15 | reloadBlackList: [] | ||
| 16 | }; | ||
| 17 | }, | ||
| 18 | props: { | ||
| 19 | /** | ||
| 20 | * 导航类型 | ||
| 21 | * nav:普通菜单导航 | ||
| 22 | * login:登陆菜单 | ||
| 23 | * lang:三语切换菜单 | ||
| 24 | */ | ||
| 25 | type: { | ||
| 26 | type: String, | ||
| 27 | default () { | ||
| 28 | return "nav"; | ||
| 29 | } | ||
| 30 | }, | ||
| 31 | /** | ||
| 32 | * 传入菜单完整数据 | ||
| 33 | */ | ||
| 34 | dataObj: { | ||
| 35 | type: Object, | ||
| 36 | default () { | ||
| 37 | return {}; | ||
| 38 | } | ||
| 39 | }, | ||
| 40 | /** | ||
| 41 | * 传入菜单列表 | ||
| 42 | */ | ||
| 43 | dataList: { | ||
| 44 | type: Array, | ||
| 45 | default () { | ||
| 46 | return []; | ||
| 47 | } | ||
| 48 | }, | ||
| 49 | labelProperty: { | ||
| 50 | type: String, | ||
| 51 | default () { | ||
| 52 | return "name"; | ||
| 53 | } | ||
| 54 | } | ||
| 55 | }, | ||
| 56 | directives: { | ||
| 57 | dpl: { | ||
| 58 | bind(el) { | ||
| 59 | el.style.display = "none"; | ||
| 60 | } | ||
| 61 | } | ||
| 62 | }, | ||
| 63 | methods: { | ||
| 64 | onNavHandler() { | ||
| 65 | console.log("this.dataObj:", this.dataObj); | ||
| 66 | let path = this.dataObj && this.dataObj.path || ""; | ||
| 67 | if (path) { | ||
| 68 | this.$router.push({ | ||
| 69 | path: path | ||
| 70 | }) | ||
| 71 | } | ||
| 72 | }, | ||
| 73 | onOverHandler(event) { | ||
| 74 | let ul = event.currentTarget.childNodes[1].childNodes[1]; | ||
| 75 | ul.style.display = "block"; | ||
| 76 | }, | ||
| 77 | onOutHandler(event) { | ||
| 78 | // console.log(event); | ||
| 79 | let ul = event.currentTarget.childNodes[1].childNodes[1]; | ||
| 80 | ul.style.display = "none"; | ||
| 81 | }, | ||
| 82 | onClickHandler(event, index) { | ||
| 83 | // 隐藏其他 | ||
| 84 | if (this.$refs.ul) { | ||
| 85 | this.$refs.ul.style.display = "none"; | ||
| 86 | } | ||
| 87 | |||
| 88 | // 选择item | ||
| 89 | this.activeIndex = index; | ||
| 90 | let curData = this.dataList[index]; | ||
| 91 | if (this.type == "lang") { | ||
| 92 | // 如果是语言设置,则设置语言 | ||
| 93 | let lang = curData.value; | ||
| 94 | if (lang != localStorage.getItem('lang')) { | ||
| 95 | localStorage.setItem("lang", lang); | ||
| 96 | if (this.reloadBlackList.indexOf(this.$route.path) >= 0) { | ||
| 97 | window.location.reload(); | ||
| 98 | } else { | ||
| 99 | this.$i18n.locale = lang; | ||
| 100 | this.sTitle = curData.name; | ||
| 101 | this.$root.eventBus.$emit("langChange"); | ||
| 102 | } | ||
| 103 | } | ||
| 104 | } else { | ||
| 105 | let item = curData; | ||
| 106 | let path = item && item.path || ""; | ||
| 107 | this.$root.eventBus.$emit(item.path); | ||
| 108 | if (path) { | ||
| 109 | // console.log("path:", path); | ||
| 110 | // modify | ||
| 111 | if (path == "/custom/service?q=m5") { | ||
| 112 | path = "/clarms" | ||
| 113 | } | ||
| 114 | this.$router.push({ | ||
| 115 | path: path | ||
| 116 | }) | ||
| 117 | } else { | ||
| 118 | let value = item && item.value || null; | ||
| 119 | if (value) { | ||
| 120 | switch (value) { | ||
| 121 | case "login": | ||
| 122 | this.onLoginHandler(); | ||
| 123 | break; | ||
| 124 | case "logout": | ||
| 125 | this.logoutHandler(); | ||
| 126 | break; | ||
| 127 | case "gotoVHIS": | ||
| 128 | // gotoVHIS(this.$i18n.locale); | ||
| 129 | this.$router.push({ | ||
| 130 | path: "/vhis" | ||
| 131 | }); | ||
| 132 | break; | ||
| 133 | } | ||
| 134 | } | ||
| 135 | } | ||
| 136 | } | ||
| 137 | }, | ||
| 138 | onLoginHandler() { | ||
| 139 | this.$root.eventBus.$emit("login"); | ||
| 140 | if (this.$route.name == "login") { | ||
| 141 | return; | ||
| 142 | } else if (this.$route.name == "register" || this.$route.name == "passwordFind") { | ||
| 143 | this.$router.push({ | ||
| 144 | path: "/login" | ||
| 145 | }); | ||
| 146 | } else { | ||
| 147 | let callback = this.$route.fullPath; | ||
| 148 | this.$router.push({ | ||
| 149 | path: "/login?callback=" + callback | ||
| 150 | }); | ||
| 151 | } | ||
| 152 | }, | ||
| 153 | logoutHandler() { | ||
| 154 | this.clearCache(); | ||
| 155 | httpPost({ | ||
| 156 | url: api.logout | ||
| 157 | }).then(() => { | ||
| 158 | this.$store.commit("SET_USER_INFO", null); | ||
| 159 | this.showLogoutTip(); | ||
| 160 | }); | ||
| 161 | }, | ||
| 162 | clearCache() { | ||
| 163 | for (let index = 0; index < sessionStorage.length; index++) { | ||
| 164 | let key = sessionStorage.key(index); | ||
| 165 | console.log(key); | ||
| 166 | sessionStorage.removeItem(key); | ||
| 167 | } | ||
| 168 | }, | ||
| 169 | showLogoutTip() { | ||
| 170 | // 登出后的提示 | ||
| 171 | // alert("登出成功"); | ||
| 172 | }, | ||
| 173 | updateTitle(name) { | ||
| 174 | this.sTitle = name || this.sTitle; | ||
| 175 | } | ||
| 176 | }, | ||
| 177 | computed: { | ||
| 178 | dplLable() { | ||
| 179 | return this.dataList[this.activeIndex][this.labelProperty]; | ||
| 180 | } | ||
| 181 | }, | ||
| 182 | created() {}, | ||
| 183 | }; |
| 1 | @import '@/styles/_support.scss'; | ||
| 2 | |||
| 3 | .drop-list { | ||
| 4 | display: inline-block; | ||
| 5 | min-width: 120px; | ||
| 6 | position: relative; | ||
| 7 | margin: 0 13.2px; | ||
| 8 | font-size: $fontSizeTitle; | ||
| 9 | |||
| 10 | .list { | ||
| 11 | position: absolute; | ||
| 12 | width: 132px; | ||
| 13 | left: 0; | ||
| 14 | right: 0; | ||
| 15 | margin: 0 auto; | ||
| 16 | font-size: $fontSize; | ||
| 17 | left: 50%; | ||
| 18 | transform: translateX(-50%); //居中处理 | ||
| 19 | |||
| 20 | .space { | ||
| 21 | height: 18px; | ||
| 22 | } | ||
| 23 | } | ||
| 24 | |||
| 25 | span { | ||
| 26 | display: block; | ||
| 27 | text-align: center; | ||
| 28 | } | ||
| 29 | |||
| 30 | span:hover {} | ||
| 31 | |||
| 32 | ul { | ||
| 33 | display: none; | ||
| 34 | overflow: hidden; | ||
| 35 | box-shadow: 0 0 18px 0 rgba(255, 87, 0, 0.15); | ||
| 36 | border-radius: 6px; | ||
| 37 | |||
| 38 | li { | ||
| 39 | // border-bottom: solid 1px #f1f1f1; | ||
| 40 | background: #ffffff; | ||
| 41 | text-align: center; | ||
| 42 | padding: 18px 0; | ||
| 43 | position: relative; | ||
| 44 | |||
| 45 | &:after { | ||
| 46 | content: ""; | ||
| 47 | width: 84px; | ||
| 48 | height: 1px; | ||
| 49 | background: #f1f1f1; | ||
| 50 | position: absolute; | ||
| 51 | bottom: 0; | ||
| 52 | left: 50%; | ||
| 53 | transform: translateX(-50%); //居中处理 | ||
| 54 | } | ||
| 55 | |||
| 56 | } | ||
| 57 | |||
| 58 | li:last-child { | ||
| 59 | border-bottom: none; | ||
| 60 | |||
| 61 | &:after { | ||
| 62 | background: transparent; | ||
| 63 | } | ||
| 64 | } | ||
| 65 | |||
| 66 | li:hover { | ||
| 67 | color: $cOrange; | ||
| 68 | } | ||
| 69 | } | ||
| 70 | } | ||
| 71 | .drop-list:lang(en){ | ||
| 72 | min-width: 0; | ||
| 73 | margin: 0 32px; | ||
| 74 | } | ||
| 75 | |||
| 76 | .user { | ||
| 77 | width: 111px; | ||
| 78 | height: 36px; | ||
| 79 | border-radius: 36px; | ||
| 80 | background-color: $cOrange; | ||
| 81 | display: flex; | ||
| 82 | align-items: center; | ||
| 83 | justify-content: center; | ||
| 84 | color: #ffffff; | ||
| 85 | margin: 0 auto; | ||
| 86 | |||
| 87 | span { | ||
| 88 | max-width: 51px; | ||
| 89 | overflow: hidden; | ||
| 90 | white-space: nowrap; | ||
| 91 | text-overflow: ellipsis; | ||
| 92 | } | ||
| 93 | |||
| 94 | .icon-img { | ||
| 95 | margin: 0 6px; | ||
| 96 | } | ||
| 97 | } | ||
| 98 | |||
| 99 | // 登陆 | ||
| 100 | .login {} | ||
| 101 | |||
| 102 | |||
| 103 | @media (max-width: 1100px) { | ||
| 104 | .drop-list { | ||
| 105 | margin: 0 28px; | ||
| 106 | min-width: 0; | ||
| 107 | } | ||
| 108 | .drop-list:lang(en) { | ||
| 109 | margin: 0 22px; | ||
| 110 | } | ||
| 111 | } | ||
| 112 | |||
| 113 | |||
| 114 | @media (max-width: 1000px) { | ||
| 115 | // .drop-list { | ||
| 116 | // margin: 0 20px; | ||
| 117 | // } | ||
| 118 | } |
| 1 | <template> | ||
| 2 | <div class="drop-list" :class="{'login':type=='login'}" @mouseover="onOverHandler($event)" @mouseout="onOutHandler($event)"> | ||
| 3 | <!-- 登陆下拉样式 --> | ||
| 4 | <template v-if="type=='login'"> | ||
| 5 | <div class="user" @click="onLoginHandler()"> | ||
| 6 | <img class="icon-img" src="@/assets/images/home/icon-user.png"> | ||
| 7 | <span>{{dataObj.name}}</span> | ||
| 8 | </div> | ||
| 9 | </template> | ||
| 10 | <!-- 其他下拉样式 --> | ||
| 11 | <template v-else> | ||
| 12 | <span @click="onNavHandler()"> | ||
| 13 | {{type == "lang" ? sTitle : dataObj.name}} | ||
| 14 | </span> | ||
| 15 | </template> | ||
| 16 | <div class="list"> | ||
| 17 | <div class="space"></div> | ||
| 18 | <ul ref="ul" v-dpl> | ||
| 19 | <li v-for="(item, index) in dataList" :key="index" @mousedown="onClickHandler($event,index)">{{item[labelProperty]}}</li> | ||
| 20 | </ul> | ||
| 21 | </div> | ||
| 22 | </div> | ||
| 23 | </template> | ||
| 24 | |||
| 25 | <script src="./dropdown.js"></script> | ||
| 26 | <style lang="scss" scoped> | ||
| 27 | @import "./dropdown.scss"; | ||
| 28 | </style> |
| 1 | |||
| 2 | /** | ||
| 3 | * 组件描述:页脚 | ||
| 4 | * 静态页面 | ||
| 5 | */ | ||
| 6 | |||
| 7 | export default { | ||
| 8 | data() { | ||
| 9 | return { | ||
| 10 | key: 'value', | ||
| 11 | qrcodeVisible: false, | ||
| 12 | } | ||
| 13 | }, | ||
| 14 | components: {}, | ||
| 15 | methods: { | ||
| 16 | onOverHandler(event) { | ||
| 17 | this.qrcodeVisible = true; | ||
| 18 | }, | ||
| 19 | onOutHandler(event) { | ||
| 20 | this.qrcodeVisible = false; | ||
| 21 | }, | ||
| 22 | toPage(name) { | ||
| 23 | document.documentElement.scrollTop = 0; | ||
| 24 | document.body.scrollTop = 0; | ||
| 25 | this.$router.push({ | ||
| 26 | name: name | ||
| 27 | }) | ||
| 28 | }, | ||
| 29 | toPath(path) { | ||
| 30 | document.documentElement.scrollTop = 0; | ||
| 31 | document.body.scrollTop = 0; | ||
| 32 | this.$router.push({ | ||
| 33 | path: path | ||
| 34 | }) | ||
| 35 | }, | ||
| 36 | initData() {} | ||
| 37 | }, | ||
| 38 | mounted() {}, | ||
| 39 | created() {} | ||
| 40 | } |
| 1 | @import '@/styles/_support.scss'; | ||
| 2 | |||
| 3 | .v-footer { | ||
| 4 | color: #ffffff; | ||
| 5 | background-color: #2e2b2a; | ||
| 6 | font-size: $fontSize; | ||
| 7 | |||
| 8 | .footer-containter { | ||
| 9 | margin: 0 auto; | ||
| 10 | max-width: 1200px; | ||
| 11 | |||
| 12 | .cont { | ||
| 13 | .logo-wrap { | ||
| 14 | padding: 26px 0; | ||
| 15 | |||
| 16 | .logo-img { | ||
| 17 | cursor: pointer; | ||
| 18 | } | ||
| 19 | } | ||
| 20 | |||
| 21 | .line { | ||
| 22 | width: 100%; | ||
| 23 | height: 1px; | ||
| 24 | opacity: 0.2; | ||
| 25 | background-color: #ffffff; | ||
| 26 | } | ||
| 27 | |||
| 28 | // 信息 | ||
| 29 | .info { | ||
| 30 | padding: 24px 0 24px; | ||
| 31 | display: flex; | ||
| 32 | |||
| 33 | // 热线 | ||
| 34 | .hotline { | ||
| 35 | min-width: 294px; | ||
| 36 | |||
| 37 | .contact { | ||
| 38 | .n-item { | ||
| 39 | margin-bottom: 7.2px; | ||
| 40 | } | ||
| 41 | |||
| 42 | .phone { | ||
| 43 | color: $cOrange; | ||
| 44 | font-size: $fontSizeTitle; | ||
| 45 | font-weight: bold; | ||
| 46 | } | ||
| 47 | |||
| 48 | &:first-child { | ||
| 49 | margin-bottom: 24px; | ||
| 50 | } | ||
| 51 | } | ||
| 52 | } | ||
| 53 | |||
| 54 | // 导航 | ||
| 55 | .nav { | ||
| 56 | display: flex; | ||
| 57 | |||
| 58 | .nav-v {} | ||
| 59 | |||
| 60 | .n-item { | ||
| 61 | cursor: pointer; | ||
| 62 | min-width: 177px; | ||
| 63 | } | ||
| 64 | } | ||
| 65 | |||
| 66 | .nav2 { | ||
| 67 | display: none; | ||
| 68 | } | ||
| 69 | |||
| 70 | // 公众号 | ||
| 71 | .public { | ||
| 72 | position: relative; | ||
| 73 | text-align: left; | ||
| 74 | margin-left: 63.84px; | ||
| 75 | |||
| 76 | .qrcode-wrap { | ||
| 77 | text-align: center; | ||
| 78 | margin-top: 3.6px; | ||
| 79 | |||
| 80 | |||
| 81 | .qrcode { | ||
| 82 | width: 100px; | ||
| 83 | } | ||
| 84 | |||
| 85 | .c1 { | ||
| 86 | margin-top: 3.6px; | ||
| 87 | } | ||
| 88 | } | ||
| 89 | |||
| 90 | .icon { | ||
| 91 | margin-top: 9px; | ||
| 92 | margin-right: 12px; | ||
| 93 | display: inline-block; | ||
| 94 | } | ||
| 95 | } | ||
| 96 | |||
| 97 | // 公共组件 | ||
| 98 | .n-item { | ||
| 99 | margin-bottom: 24px; | ||
| 100 | padding-right: 36px; | ||
| 101 | color: #dcdddd; | ||
| 102 | |||
| 103 | &:first-child { | ||
| 104 | margin-bottom: 32px; | ||
| 105 | } | ||
| 106 | |||
| 107 | &:last-child { | ||
| 108 | margin-bottom: 0; | ||
| 109 | } | ||
| 110 | } | ||
| 111 | } | ||
| 112 | |||
| 113 | // 版权 | ||
| 114 | .copyright { | ||
| 115 | color: rgba(179, 177, 168, 0.5); | ||
| 116 | padding: 18px 0; | ||
| 117 | line-height: 1.58; | ||
| 118 | font-size: $fontSizeSmall; | ||
| 119 | } | ||
| 120 | } | ||
| 121 | |||
| 122 | } | ||
| 123 | } | ||
| 124 | |||
| 125 | |||
| 126 | @media (max-width: 1200px) { | ||
| 127 | .v-footer { | ||
| 128 | @include content-percent(); | ||
| 129 | |||
| 130 | .footer-containter { | ||
| 131 | .cont { | ||
| 132 | .info { | ||
| 133 | display: block; | ||
| 134 | |||
| 135 | .hotline {} | ||
| 136 | |||
| 137 | .nav { | ||
| 138 | margin-top: 24px; | ||
| 139 | display: flex; | ||
| 140 | |||
| 141 | .nav-v { | ||
| 142 | width: 100%; | ||
| 143 | } | ||
| 144 | |||
| 145 | .n-item { | ||
| 146 | min-width: 0; | ||
| 147 | margin-right: 0; | ||
| 148 | padding-right: 10px; | ||
| 149 | } | ||
| 150 | } | ||
| 151 | |||
| 152 | .nav2 { | ||
| 153 | display: none; | ||
| 154 | } | ||
| 155 | |||
| 156 | .public { | ||
| 157 | margin: 0; | ||
| 158 | margin-top: 36px; | ||
| 159 | text-align: left; | ||
| 160 | min-height: 144px; | ||
| 161 | } | ||
| 162 | } | ||
| 163 | |||
| 164 | .copyright { | ||
| 165 | box-sizing: border-box; | ||
| 166 | padding-right: 24px; | ||
| 167 | } | ||
| 168 | } | ||
| 169 | } | ||
| 170 | } | ||
| 171 | } | ||
| 172 | |||
| 173 | @media (max-width: 768px) { | ||
| 174 | .v-footer { | ||
| 175 | font-size: $fontSizeSmall-M; | ||
| 176 | |||
| 177 | .footer-containter { | ||
| 178 | .cont { | ||
| 179 | .info { | ||
| 180 | display: flex; | ||
| 181 | justify-content: space-between; | ||
| 182 | |||
| 183 | .hotline { | ||
| 184 | min-width: 0; | ||
| 185 | |||
| 186 | .phone { | ||
| 187 | font-size: $fontSizeSmall-M !important; | ||
| 188 | font-weight: bold !important; | ||
| 189 | } | ||
| 190 | } | ||
| 191 | |||
| 192 | .nav { | ||
| 193 | display: none; | ||
| 194 | margin-top: 0; | ||
| 195 | |||
| 196 | .nav-v {} | ||
| 197 | |||
| 198 | .n-item {} | ||
| 199 | } | ||
| 200 | |||
| 201 | .nav2 { | ||
| 202 | display: block; | ||
| 203 | } | ||
| 204 | |||
| 205 | .public { | ||
| 206 | margin: 0; | ||
| 207 | min-width: 108px; | ||
| 208 | |||
| 209 | .qrcode-wrap { | ||
| 210 | img { | ||
| 211 | width: 84px; | ||
| 212 | } | ||
| 213 | |||
| 214 | .c1 { | ||
| 215 | display: none; | ||
| 216 | } | ||
| 217 | } | ||
| 218 | } | ||
| 219 | |||
| 220 | // 公共组件 | ||
| 221 | .n-item { | ||
| 222 | margin-bottom: 24px; | ||
| 223 | |||
| 224 | &:first-child { | ||
| 225 | margin-bottom: 24px; | ||
| 226 | } | ||
| 227 | } | ||
| 228 | } | ||
| 229 | |||
| 230 | .copyright {} | ||
| 231 | } | ||
| 232 | } | ||
| 233 | } | ||
| 234 | |||
| 235 | } |
| 1 | |||
| 2 | <template> | ||
| 3 | <footer class="v-footer "> | ||
| 4 | <div class="footer-containter "> | ||
| 5 | <div class="cont"> | ||
| 6 | <div class="logo-wrap"> | ||
| 7 | <img class="logo-img" src="@/assets/images/home/footer-logo.png"> | ||
| 8 | </div> | ||
| 9 | <div class="line"></div> | ||
| 10 | <!-- 信息 --> | ||
| 11 | <div class="info"> | ||
| 12 | <div class="hotline"> | ||
| 13 | <div class="contact"> | ||
| 14 | <div class="n-item">{{$t('footer.hkPhone')}}</div> | ||
| 15 | <div class="phone">(852)2983 8866</div> | ||
| 16 | </div> | ||
| 17 | <div class="contact"> | ||
| 18 | <div class="n-item">{{$t('footer.cnPhone')}}</div> | ||
| 19 | <div class="phone">(86)40078 95511</div> | ||
| 20 | </div> | ||
| 21 | </div> | ||
| 22 | <div class="nav"> | ||
| 23 | <div class="nav-v"> | ||
| 24 | <div @click="toPage('profile')" class="n-item">{{$t('footer.aboutUs')}}</div> | ||
| 25 | <div @click="toPage('profile')" class="n-item">{{$t('footer.companyIntroduction')}}</div> | ||
| 26 | <div @click="toPage('newsList')" class="n-item">{{$t('footer.news')}}</div> | ||
| 27 | <div @click="toPage('joinUs')" class="n-item">{{$t('footer.joinUs')}}</div> | ||
| 28 | </div> | ||
| 29 | <div class="nav-v"> | ||
| 30 | <div @click="toPage('help')" class="n-item">{{$t('footer.helpCenter')}}</div> | ||
| 31 | <div @click="toPage('privacy')" class="n-item">{{$t('footer.privacy')}}</div> | ||
| 32 | <div @click="toPage('terms')" class="n-item">{{$t('footer.terms')}}</div> | ||
| 33 | <div @click="toPage('personalDataCollection')" class="n-item">{{$t('footer.protocol')}}</div> | ||
| 34 | </div> | ||
| 35 | <div class="nav-v"> | ||
| 36 | <div @click="toPath('/custom/service?q=m1')" class="n-item">{{$t('footer.contactUs')}}</div> | ||
| 37 | <div @click="toPage('contactMethod')" class="n-item">{{$t('footer.contactInformation')}}</div> | ||
| 38 | <div @click="toPage('serviceNet')" class="n-item">{{$t('footer.service')}}</div> | ||
| 39 | <div @click="toPage('map')" class="n-item">{{$t('footer.map')}}</div> | ||
| 40 | </div> | ||
| 41 | </div> | ||
| 42 | |||
| 43 | <div class="nav nav2"> | ||
| 44 | <div class="nav-v"> | ||
| 45 | <div @click="toPage('privacy')" class="n-item">{{$t('footer.privacy')}}</div> | ||
| 46 | <div @click="toPage('terms')" class="n-item">{{$t('footer.terms')}}</div> | ||
| 47 | <div @click="toPage('personalDataCollection')" class="n-item">{{$t('footer.protocol')}}</div> | ||
| 48 | </div> | ||
| 49 | </div> | ||
| 50 | |||
| 51 | <div class="public"> | ||
| 52 | <div class="tit">{{$t('footer.qrcode')}}</div> | ||
| 53 | <div @click="qrcodeVisible = !qrcodeVisible" v-if="qrcodeVisible" class="qrcode-wrap"> | ||
| 54 | <img @mouseout="onOutHandler($event)" src="@/assets/images/home/qrcode.png" alt=""> | ||
| 55 | <div class="c1">{{$t('footer.qrcodeBot')}}</div> | ||
| 56 | </div> | ||
| 57 | <template v-else> | ||
| 58 | <img @click="qrcodeVisible = !qrcodeVisible" @mouseover="onOverHandler($event)" @mouseout="onOutHandler($event)" class="icon pointer" src="@/assets/images/home/footer-icon-1.png" alt=""> | ||
| 59 | <img class="icon pointer" src="@/assets/images/home/footer-icon-2.png" alt=""> | ||
| 60 | <img class="icon pointer" src="@/assets/images/home/footer-icon-3.png" alt=""> | ||
| 61 | </template> | ||
| 62 | </div> | ||
| 63 | |||
| 64 | </div> | ||
| 65 | <div class="line"></div> | ||
| 66 | <!-- 版权 --> | ||
| 67 | <div class="copyright"> | ||
| 68 | {{$t('footer.copyright')}} | ||
| 69 | </div> | ||
| 70 | </div> | ||
| 71 | </div> | ||
| 72 | </footer> | ||
| 73 | </template> | ||
| 74 | |||
| 75 | <script src="./footer.js"></script> | ||
| 76 | <style lang="scss" scoped> | ||
| 77 | @import "./footer.scss"; | ||
| 78 | </style> |
| 1 | /** | ||
| 2 | * 组件描述:官网顶栏导航 | ||
| 3 | * 通过@midea 媒体查询决定显示PC/移动端样式 | ||
| 4 | */ | ||
| 5 | |||
| 6 | import { | ||
| 7 | mapState | ||
| 8 | } from 'vuex' | ||
| 9 | |||
| 10 | import { | ||
| 11 | getObjByListKeyValue | ||
| 12 | } from '@utils/utils.js' | ||
| 13 | import VDropdown from '@components/home/dropdown/dropdown.vue' | ||
| 14 | import MDropdown from '@components/home/m-dropdown/m-dropdown.vue' | ||
| 15 | |||
| 16 | export default { | ||
| 17 | name: 'VHeader', | ||
| 18 | components: { | ||
| 19 | VDropdown, | ||
| 20 | MDropdown | ||
| 21 | }, | ||
| 22 | computed: { | ||
| 23 | i18n() { | ||
| 24 | return this.$i18n.messages && this.$i18n.locale ? this.$i18n.messages[this.$i18n.locale] : {}; | ||
| 25 | } | ||
| 26 | }, | ||
| 27 | data() { | ||
| 28 | return { | ||
| 29 | dropdownMVisible: false, | ||
| 30 | loginMVisible: false, | ||
| 31 | maxClientWidth: 1200, | ||
| 32 | // 用于传入到导航组件dropdown 常规导航菜单数据 | ||
| 33 | navList: [], | ||
| 34 | // 用于传入到导航组件dropdown 登菜单数据 | ||
| 35 | loginData: {}, | ||
| 36 | // 用于传入到导航组件dropdown 语言菜单数据 | ||
| 37 | langData: { | ||
| 38 | name: "繁", | ||
| 39 | path: "", | ||
| 40 | list: [{ | ||
| 41 | name: "繁", | ||
| 42 | path: "", | ||
| 43 | value: "tc" | ||
| 44 | }, | ||
| 45 | { | ||
| 46 | name: "简", | ||
| 47 | path: "", | ||
| 48 | value: "zh" | ||
| 49 | }, | ||
| 50 | { | ||
| 51 | name: "EN", | ||
| 52 | path: "", | ||
| 53 | value: "en" | ||
| 54 | }, | ||
| 55 | ] | ||
| 56 | } | ||
| 57 | } | ||
| 58 | }, | ||
| 59 | computed: { | ||
| 60 | ...mapState({ | ||
| 61 | isSmallScreen: state => state.isSmallScreen, | ||
| 62 | userInfo: state => state.userInfo | ||
| 63 | }) | ||
| 64 | }, | ||
| 65 | methods: { | ||
| 66 | toIndex() { | ||
| 67 | this.$router.push({ | ||
| 68 | path: "/" | ||
| 69 | }) | ||
| 70 | }, | ||
| 71 | onShowDropdown(evtStr) { | ||
| 72 | this.dropdownMVisible = false; | ||
| 73 | this.loginMVisible = false; | ||
| 74 | if (evtStr == 'nav') { | ||
| 75 | this.dropdownMVisible = true; | ||
| 76 | } else if (evtStr == 'login') { | ||
| 77 | this.loginMVisible = true; | ||
| 78 | } else {} | ||
| 79 | }, | ||
| 80 | checkIsSmallScreen() { | ||
| 81 | const self = this; | ||
| 82 | if (document.body.clientWidth > self.maxClientWidth) { | ||
| 83 | self.$store.commit('IS_SMALL_SCREEN', false) | ||
| 84 | } else { | ||
| 85 | self.$store.commit('IS_SMALL_SCREEN', true) | ||
| 86 | } | ||
| 87 | }, | ||
| 88 | initData() { | ||
| 89 | let i18n = this.$i18n.messages[this.$i18n.locale] || {}; | ||
| 90 | this.buildLoginMenu(); | ||
| 91 | this.navList = i18n.nav.navList; | ||
| 92 | let curLang = getObjByListKeyValue(this.$i18n.locale, "value", this.langData.list) | ||
| 93 | this.langData.name = curLang.name; | ||
| 94 | }, | ||
| 95 | /** | ||
| 96 | * 根据登陆状态构建登陆菜单 | ||
| 97 | */ | ||
| 98 | buildLoginMenu() { | ||
| 99 | let i18n = this.$i18n.messages[this.$i18n.locale] || {}; | ||
| 100 | let menuData = JSON.parse(JSON.stringify(i18n.nav.loginData)); | ||
| 101 | let list = []; | ||
| 102 | if (this.userInfo && this.userInfo.name) { | ||
| 103 | menuData.name = this.userInfo.name; | ||
| 104 | if (this.$i18n.locale == "en" && this.userInfo.nameEn) { | ||
| 105 | menuData.name = this.userInfo.nameEn; | ||
| 106 | } | ||
| 107 | menuData.list.forEach(element => { | ||
| 108 | if (element.type == "auth") { | ||
| 109 | list.push(element); | ||
| 110 | } | ||
| 111 | }); | ||
| 112 | } else { | ||
| 113 | menuData.list.forEach(element => { | ||
| 114 | if (element.type == "noAuth") { | ||
| 115 | list.push(element); | ||
| 116 | } | ||
| 117 | }); | ||
| 118 | } | ||
| 119 | menuData.list = list; | ||
| 120 | this.$set(this, 'loginData', menuData); | ||
| 121 | } | ||
| 122 | }, | ||
| 123 | beforeDestroy() { | ||
| 124 | window.removeEventListener('resize', this.checkIsSmallScreen(), false) | ||
| 125 | }, | ||
| 126 | mounted() { | ||
| 127 | window.addEventListener('resize', () => this.checkIsSmallScreen(), false); | ||
| 128 | this.$root.eventBus.$on("langChange", () => { | ||
| 129 | this.initData(); | ||
| 130 | }); | ||
| 131 | }, | ||
| 132 | watch: { | ||
| 133 | userInfo(val) { | ||
| 134 | this.buildLoginMenu(); | ||
| 135 | } | ||
| 136 | }, | ||
| 137 | created() { | ||
| 138 | this.initData(); | ||
| 139 | }, | ||
| 140 | } |
| 1 | @import '@/styles/_support.scss'; | ||
| 2 | |||
| 3 | $navHei: 92px; | ||
| 4 | $navHeiM: 72px; | ||
| 5 | |||
| 6 | .v-header { | ||
| 7 | height: $navHei; | ||
| 8 | background-color: #fff; | ||
| 9 | color: $cFontGray; | ||
| 10 | position: relative; | ||
| 11 | z-index: 1000; | ||
| 12 | font-size: $fontSize; | ||
| 13 | |||
| 14 | .header-container { | ||
| 15 | max-width: 1200px; | ||
| 16 | height: 100%; | ||
| 17 | margin: auto; | ||
| 18 | display: flex; | ||
| 19 | align-items: center; | ||
| 20 | position: relative; | ||
| 21 | } | ||
| 22 | |||
| 23 | .main-nav { | ||
| 24 | height: 100%; | ||
| 25 | flex: 1 0 auto; | ||
| 26 | } | ||
| 27 | |||
| 28 | .logo-img { | ||
| 29 | margin-right: 43.2px; | ||
| 30 | max-width: 213px; | ||
| 31 | cursor: pointer; | ||
| 32 | } | ||
| 33 | |||
| 34 | .nav-list { | ||
| 35 | height: 100%; | ||
| 36 | display: flex; | ||
| 37 | align-items: center; | ||
| 38 | justify-content: flex-end; | ||
| 39 | position: relative; | ||
| 40 | } | ||
| 41 | |||
| 42 | .nav-item { | ||
| 43 | display: flex; | ||
| 44 | align-items: center; | ||
| 45 | height: 100%; | ||
| 46 | margin: 0; | ||
| 47 | -ms-flex-pack: center; | ||
| 48 | justify-content: center; | ||
| 49 | position: relative; | ||
| 50 | cursor: pointer; | ||
| 51 | } | ||
| 52 | |||
| 53 | .main-nav-list { | ||
| 54 | display: flex; | ||
| 55 | cursor: pointer; | ||
| 56 | } | ||
| 57 | |||
| 58 | .nav-item.link-item { | ||
| 59 | padding: 0 50px; | ||
| 60 | height: 60px; | ||
| 61 | } | ||
| 62 | |||
| 63 | .nav-item.search { | ||
| 64 | flex: 1 1 auto; | ||
| 65 | } | ||
| 66 | |||
| 67 | .nav-item.auth { | ||
| 68 | color: #ffffff; | ||
| 69 | |||
| 70 | .lang { | ||
| 71 | color: $cOrange; | ||
| 72 | min-width: 96px; | ||
| 73 | } | ||
| 74 | } | ||
| 75 | } | ||
| 76 | |||
| 77 | .pc { | ||
| 78 | display: block; | ||
| 79 | } | ||
| 80 | |||
| 81 | // 移动端导航 | ||
| 82 | .mobile { | ||
| 83 | display: none; | ||
| 84 | |||
| 85 | &-nav-list { | ||
| 86 | position: absolute; | ||
| 87 | right: 0; | ||
| 88 | top: 24px; | ||
| 89 | |||
| 90 | display: flex; | ||
| 91 | align-items: center; | ||
| 92 | |||
| 93 | img { | ||
| 94 | width: 20px; | ||
| 95 | margin-left: 20px; | ||
| 96 | } | ||
| 97 | } | ||
| 98 | |||
| 99 | } | ||
| 100 | |||
| 101 | @media (max-width: 1200px) { | ||
| 102 | .v-header { | ||
| 103 | @include content-percent(1%); | ||
| 104 | } | ||
| 105 | } | ||
| 106 | |||
| 107 | |||
| 108 | @media (max-width: 1100px) { | ||
| 109 | .v-header { | ||
| 110 | .logo-img { | ||
| 111 | margin-right: 24px; | ||
| 112 | } | ||
| 113 | } | ||
| 114 | |||
| 115 | .pc { | ||
| 116 | |||
| 117 | .auth { | ||
| 118 | margin-right: 20px; | ||
| 119 | } | ||
| 120 | |||
| 121 | .nav-item.auth { | ||
| 122 | |||
| 123 | .lang { | ||
| 124 | min-width: auto; | ||
| 125 | } | ||
| 126 | } | ||
| 127 | } | ||
| 128 | } | ||
| 129 | |||
| 130 | |||
| 131 | @media (max-width: 980px) { | ||
| 132 | .v-header { | ||
| 133 | |||
| 134 | @include content-percent(); | ||
| 135 | |||
| 136 | .main-nav {} | ||
| 137 | |||
| 138 | .logo-img { | ||
| 139 | max-width: 213px; | ||
| 140 | margin: 0; | ||
| 141 | } | ||
| 142 | |||
| 143 | .pc { | ||
| 144 | display: none; | ||
| 145 | } | ||
| 146 | |||
| 147 | .mobile { | ||
| 148 | display: block; | ||
| 149 | |||
| 150 | &-nav-list { | ||
| 151 | top: 32px; | ||
| 152 | } | ||
| 153 | } | ||
| 154 | } | ||
| 155 | } | ||
| 156 | |||
| 157 | @media (max-width: 768px) { | ||
| 158 | .v-header { | ||
| 159 | |||
| 160 | // 原1200px临界样式 | ||
| 161 | |||
| 162 | .pc { | ||
| 163 | display: none; | ||
| 164 | } | ||
| 165 | |||
| 166 | height: $navHeight-M; | ||
| 167 | |||
| 168 | .logo-img { | ||
| 169 | width: 186px; | ||
| 170 | margin: 0; | ||
| 171 | } | ||
| 172 | |||
| 173 | .mobile { | ||
| 174 | display: block; | ||
| 175 | |||
| 176 | &-nav-list { | ||
| 177 | top: 24px; | ||
| 178 | } | ||
| 179 | } | ||
| 180 | } | ||
| 181 | } |
| 1 | |||
| 2 | <template> | ||
| 3 | <header class="v-header"> | ||
| 4 | <div class="header-container"> | ||
| 5 | <img @click="toIndex" src="@/assets/images/home/header-logo.png" alt="中国平安人寿保险" class="logo-img"> | ||
| 6 | |||
| 7 | <div class="main-nav"> | ||
| 8 | <!-- mobile --> | ||
| 9 | <div class="nav-list-m mobile"> | ||
| 10 | <div class="mobile-nav-list"> | ||
| 11 | <img @click="onShowDropdown('login')" v-if="!loginMVisible" src="@/assets/images/home/mobile-user.png" alt=""> | ||
| 12 | <img @click="onShowDropdown('')" v-else src="@/assets/images/home/mobile-user.png" alt=""> | ||
| 13 | <img @click="onShowDropdown('nav')" v-if="!dropdownMVisible" src="@/assets/images/home/mobile-nav.png" alt=""> | ||
| 14 | <img @click="onShowDropdown('')" v-else src="@/assets/images/home/mobile-nav-close.png" alt=""> | ||
| 15 | </div> | ||
| 16 | <m-dropdown class="lang" :type="'nav'" :visible="dropdownMVisible" :show-dropdown-m="onShowDropdown" :lang-list="langData.list" ref="pcMenu"></m-dropdown> | ||
| 17 | <m-dropdown class="lang" :type="'login'" :visible="loginMVisible" :show-dropdown-m="onShowDropdown"></m-dropdown> | ||
| 18 | </div> | ||
| 19 | |||
| 20 | <!-- pc --> | ||
| 21 | <div class="nav-list pc"> | ||
| 22 | <div class="main-nav-list"> | ||
| 23 | <v-dropdown v-for="item in navList" :key="item.id" :data-obj="item" :data-list="item.list"> | ||
| 24 | </v-dropdown> | ||
| 25 | </div> | ||
| 26 | <div class="nav-item search"></div> | ||
| 27 | <div class="nav-item auth"> | ||
| 28 | <v-dropdown class="lang" :type="'login'" :data-obj="loginData" :data-list="loginData.list" ref="mobileMenu"></v-dropdown> | ||
| 29 | <v-dropdown class="lang" :type="'lang'" :data-obj="langData" :data-list="langData.list"></v-dropdown> | ||
| 30 | </div> | ||
| 31 | </div> | ||
| 32 | |||
| 33 | </div> | ||
| 34 | |||
| 35 | </div> | ||
| 36 | </header> | ||
| 37 | </template> | ||
| 38 | |||
| 39 | <script src="./header.js"></script> | ||
| 40 | <style lang="scss" scoped> | ||
| 41 | @import "./header.scss"; | ||
| 42 | </style> |
| 1 | import { | ||
| 2 | mapState | ||
| 3 | } from 'vuex' | ||
| 4 | |||
| 5 | import api from '@/api/api' | ||
| 6 | import { | ||
| 7 | httpPost | ||
| 8 | } from '@/api/fetch-api.js' | ||
| 9 | |||
| 10 | export default { | ||
| 11 | name: "DropDownList", | ||
| 12 | data() { | ||
| 13 | return { | ||
| 14 | navList: [], | ||
| 15 | activeNames: [], | ||
| 16 | activeName: [], | ||
| 17 | activeIndex: -1, | ||
| 18 | borderBoo: false | ||
| 19 | }; | ||
| 20 | }, | ||
| 21 | props: { | ||
| 22 | visible: { | ||
| 23 | type: Boolean, | ||
| 24 | default () { | ||
| 25 | return false; | ||
| 26 | } | ||
| 27 | }, | ||
| 28 | /** | ||
| 29 | * 导航类型 | ||
| 30 | * nav:普通菜单导航 | ||
| 31 | * login:登陆菜单 | ||
| 32 | * lang:三语切换菜单 | ||
| 33 | */ | ||
| 34 | type: { | ||
| 35 | type: String, | ||
| 36 | default () { | ||
| 37 | return "nav"; | ||
| 38 | } | ||
| 39 | }, | ||
| 40 | /** | ||
| 41 | * 传入菜单列表 | ||
| 42 | */ | ||
| 43 | langList: { | ||
| 44 | type: Array, | ||
| 45 | default () { | ||
| 46 | return []; | ||
| 47 | } | ||
| 48 | }, | ||
| 49 | // 显示/隐藏移动端导航 | ||
| 50 | showDropdownM: { | ||
| 51 | type: Function, | ||
| 52 | default: null | ||
| 53 | }, | ||
| 54 | }, | ||
| 55 | computed: { | ||
| 56 | ...mapState({ | ||
| 57 | isSmallScreen: state => state.isSmallScreen, | ||
| 58 | userInfo: state => state.userInfo | ||
| 59 | }), | ||
| 60 | locale() { | ||
| 61 | return this.$i18n.locale || 'tc'; | ||
| 62 | }, | ||
| 63 | i18n() { | ||
| 64 | return this.$i18n.messages && this.$i18n.locale ? this.$i18n.messages[this.$i18n.locale] : {}; | ||
| 65 | }, | ||
| 66 | }, | ||
| 67 | methods: { | ||
| 68 | // 跳转菜单 | ||
| 69 | onClickHandler(item) { | ||
| 70 | let path = item && item.path || ""; | ||
| 71 | this.showDropdownM(''); | ||
| 72 | if (path) { | ||
| 73 | this.$router.push({ | ||
| 74 | path: path | ||
| 75 | }) | ||
| 76 | } else { | ||
| 77 | let value = item && item.value || null; | ||
| 78 | if (value) { | ||
| 79 | switch (value) { | ||
| 80 | case "login": | ||
| 81 | this.onLoginHandler(); | ||
| 82 | break; | ||
| 83 | case "logout": | ||
| 84 | this.logoutHandler(); | ||
| 85 | break; | ||
| 86 | case "gotoVHIS": | ||
| 87 | // gotoVHIS(this.$i18n.locale); | ||
| 88 | this.$router.push({ | ||
| 89 | path: "/vhis" | ||
| 90 | }); | ||
| 91 | break; | ||
| 92 | } | ||
| 93 | } | ||
| 94 | } | ||
| 95 | }, | ||
| 96 | onLoginHandler() { | ||
| 97 | if (this.$route.name == "login") { | ||
| 98 | return; | ||
| 99 | } else if (this.$route.name == "register" || this.$route.name == "passwordFind") { | ||
| 100 | this.$router.push({ | ||
| 101 | path: "/login" | ||
| 102 | }); | ||
| 103 | } else { | ||
| 104 | let callback = this.$route.fullPath; | ||
| 105 | this.$router.push({ | ||
| 106 | path: "/login?callback=" + callback | ||
| 107 | }); | ||
| 108 | } | ||
| 109 | }, | ||
| 110 | logoutHandler() { | ||
| 111 | this.clearCache(); | ||
| 112 | httpPost({ | ||
| 113 | url: api.logout | ||
| 114 | }).then(() => { | ||
| 115 | this.$store.commit("SET_USER_INFO", null); | ||
| 116 | this.showLogoutTip(); | ||
| 117 | }); | ||
| 118 | }, | ||
| 119 | clearCache() { | ||
| 120 | for (let index = 0; index < sessionStorage.length; index++) { | ||
| 121 | let key = sessionStorage.key(index); | ||
| 122 | sessionStorage.removeItem(key); | ||
| 123 | } | ||
| 124 | }, | ||
| 125 | // 点击item | ||
| 126 | onChangeHandler(evt) { | ||
| 127 | this.activeIndex = evt; | ||
| 128 | }, | ||
| 129 | /** | ||
| 130 | * 设置语言 | ||
| 131 | */ | ||
| 132 | setLangHandler(curData) { | ||
| 133 | this.showDropdownM(''); | ||
| 134 | // 如果是语言设置,则设置语言 | ||
| 135 | let lang = curData.value; | ||
| 136 | this.$i18n.locale = lang; | ||
| 137 | localStorage.setItem("lang", lang); | ||
| 138 | this.sTitle = curData.name; | ||
| 139 | window.location.reload(); | ||
| 140 | }, | ||
| 141 | initData() { | ||
| 142 | let navList = []; | ||
| 143 | if (this.type == "nav") { | ||
| 144 | navList = this.i18n.nav.navList; | ||
| 145 | navList.forEach(element => { | ||
| 146 | this.activeNames.push( | ||
| 147 | [] | ||
| 148 | ) | ||
| 149 | }); | ||
| 150 | } else if (this.type == "login") { | ||
| 151 | // 构建登陆页面 | ||
| 152 | let i18n = this.$i18n.messages[this.$i18n.locale] || {}; | ||
| 153 | let menuData = JSON.parse(JSON.stringify(i18n.nav.loginData)); | ||
| 154 | let list = []; | ||
| 155 | if (this.userInfo && this.userInfo.name) { | ||
| 156 | menuData.name = this.userInfo.name; | ||
| 157 | menuData.list.forEach(element => { | ||
| 158 | if (element.type == "auth") { | ||
| 159 | list.push(element); | ||
| 160 | } | ||
| 161 | }); | ||
| 162 | } else { | ||
| 163 | menuData.list.forEach(element => { | ||
| 164 | if (element.type == "noAuth") { | ||
| 165 | list.push(element); | ||
| 166 | } | ||
| 167 | }); | ||
| 168 | } | ||
| 169 | // menuData.list = list; | ||
| 170 | navList = list; | ||
| 171 | // console.log("navList:", navList); | ||
| 172 | } | ||
| 173 | this.navList = navList; | ||
| 174 | |||
| 175 | } | ||
| 176 | }, | ||
| 177 | created() { | ||
| 178 | this.initData(); | ||
| 179 | }, | ||
| 180 | watch: { | ||
| 181 | visible(newVal, oldVal) { | ||
| 182 | this.$nextTick(() => { | ||
| 183 | this.$refs.panel.scrollTop = 0; | ||
| 184 | }); | ||
| 185 | }, | ||
| 186 | userInfo(val) { | ||
| 187 | this.initData(); | ||
| 188 | } | ||
| 189 | }, | ||
| 190 | }; |
| 1 | @import '@/styles/_support.scss'; | ||
| 2 | |||
| 3 | .panel { | ||
| 4 | z-index: 9999; | ||
| 5 | display: block; | ||
| 6 | left: 0; | ||
| 7 | top: $navHeight-M; | ||
| 8 | position: fixed; | ||
| 9 | width: 100%; | ||
| 10 | height: 100%; | ||
| 11 | // background-color: rgba($color: #000000, $alpha: 0.3); | ||
| 12 | background-color: #ffffff; | ||
| 13 | overflow: scroll; | ||
| 14 | padding-bottom: 200px; | ||
| 15 | |||
| 16 | // 遮罩 | ||
| 17 | .mask { | ||
| 18 | width: 100%; | ||
| 19 | height: 100%; | ||
| 20 | position: fixed; | ||
| 21 | z-index: 5000; | ||
| 22 | left: 0; | ||
| 23 | top: 0; | ||
| 24 | } | ||
| 25 | |||
| 26 | .list { | ||
| 27 | position: relative; | ||
| 28 | z-index: 5001; | ||
| 29 | padding: 0 20px; | ||
| 30 | // background-color: #ffffff; | ||
| 31 | } | ||
| 32 | |||
| 33 | // 国际化 | ||
| 34 | .lang { | ||
| 35 | position: relative; | ||
| 36 | z-index: 5002; | ||
| 37 | display: flex; | ||
| 38 | background-color: #ffffff; | ||
| 39 | padding: 20px 36px; | ||
| 40 | |||
| 41 | &-item { | ||
| 42 | border-right: solid 1px #ebedf0; | ||
| 43 | padding: 0 12px; | ||
| 44 | @extend .fcc; | ||
| 45 | |||
| 46 | |||
| 47 | &:first-child { | ||
| 48 | padding: 0 10px 0 0; | ||
| 49 | } | ||
| 50 | |||
| 51 | &-act { | ||
| 52 | color: $cOrange; | ||
| 53 | } | ||
| 54 | } | ||
| 55 | |||
| 56 | } | ||
| 57 | |||
| 58 | } | ||
| 59 | |||
| 60 | .coll-item-act { | ||
| 61 | color: $cOrange; | ||
| 62 | } | ||
| 63 | |||
| 64 | .list-item { | ||
| 65 | @extend .bb; | ||
| 66 | display: flex; | ||
| 67 | align-items: center; | ||
| 68 | padding: 16px 16px; | ||
| 69 | position: relative; | ||
| 70 | border-bottom: 1px solid #ebedf0; | ||
| 71 | font-size: 14px; | ||
| 72 | color: $cFontGray; | ||
| 73 | background-color: #fff; | ||
| 74 | |||
| 75 | .txt { | ||
| 76 | flex: 1; | ||
| 77 | } | ||
| 78 | } | ||
| 79 | |||
| 80 | .icon-wrap { | ||
| 81 | @extend .fcc; | ||
| 82 | height: 100%; | ||
| 83 | } | ||
| 84 | |||
| 85 | .plus-icon { | ||
| 86 | width: 21px; | ||
| 87 | height: 21px; | ||
| 88 | background: url("~@/assets/images/home/icon-head-plus.png") no-repeat center; | ||
| 89 | @extend .bis; | ||
| 90 | transform: scale(.6); | ||
| 91 | } | ||
| 92 | |||
| 93 | .arrow-icon { | ||
| 94 | width: 21px; | ||
| 95 | height: 21px; | ||
| 96 | background: url("~@/assets/images/home/icon-head-right-arrow.png") no-repeat center; | ||
| 97 | @extend .bis; | ||
| 98 | transform: scale(.6); | ||
| 99 | } | ||
| 100 | |||
| 101 | .plus-icon-act { | ||
| 102 | background: url("~@/assets/images/home/icon-head-plus-act.png") no-repeat center; | ||
| 103 | } | ||
| 104 | |||
| 105 | |||
| 106 | |||
| 107 | .hide { | ||
| 108 | display: none; | ||
| 109 | } | ||
| 110 | |||
| 111 | |||
| 112 | .panel::-webkit-scrollbar { | ||
| 113 | display: none; | ||
| 114 | } |
| 1 | <template> | ||
| 2 | <div> | ||
| 3 | <div ref="panel" class="panel" :class="{'hide':!visible}"> | ||
| 4 | <div class="mask" @click="showDropdownM('')"></div> | ||
| 5 | <!-- 列表 --> | ||
| 6 | <div class="list"> | ||
| 7 | <div v-for="(item,index) in navList" :key="item.id" :index="index"> | ||
| 8 | <van-collapse @change="onChangeHandler" v-model="activeNames[index]" v-if="item && item.list && item.list.length > 0"> | ||
| 9 | <van-collapse-item :border="borderBoo" :title="item.name" :name="index"> | ||
| 10 | <div slot="title"> | ||
| 11 | <span :class="{'coll-item-act':index == activeIndex}">{{item.name}}</span> | ||
| 12 | </div> | ||
| 13 | <div slot="right-icon"> | ||
| 14 | <div class="icon-wrap"> | ||
| 15 | <div class="plus-icon" :class="{'plus-icon-act':index == activeIndex}"></div> | ||
| 16 | </div> | ||
| 17 | </div> | ||
| 18 | <div @click="onClickHandler(item2)" class="list-item" v-for="item2 in item.list" :key="item2.id"> | ||
| 19 | <div class="arrow-icon"></div> | ||
| 20 | <div class="txt">{{ item2.name }}</div> | ||
| 21 | </div> | ||
| 22 | </van-collapse-item> | ||
| 23 | </van-collapse> | ||
| 24 | <div v-else @click="onClickHandler(item)" class="list-item"> | ||
| 25 | {{item.name}} | ||
| 26 | </div> | ||
| 27 | </div> | ||
| 28 | </div> | ||
| 29 | <!-- 语言 --> | ||
| 30 | <div v-if="langList && langList.length > 0" class="lang"> | ||
| 31 | <div @click="setLangHandler(item)" class="lang-item pointer" :class="{'lang-item-act':locale==item.value}" v-for="item in langList" :key="item.id"> | ||
| 32 | {{ item.name }} | ||
| 33 | </div> | ||
| 34 | </div> | ||
| 35 | </div> | ||
| 36 | </div> | ||
| 37 | </template> | ||
| 38 | |||
| 39 | <script src="./m-dropdown.js"></script> | ||
| 40 | <style lang="scss" scoped> | ||
| 41 | @import "./m-dropdown.scss"; | ||
| 42 | </style> |
-
Please register or sign in to post a comment