Slidebar.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. <template>
  2. <div class="work-slidebar">
  3. <el-menu
  4. :default-active="defaultActive"
  5. class="el-menu-vertical-demo"
  6. :default-openeds="defalutOpends"
  7. ref="menu"
  8. @select="onMenuSelect"
  9. >
  10. <el-menu-item index="我的主页" @click.native="toIndex">
  11. <i class="iconfont icon-hui7"></i>
  12. <span slot="title">我的主页</span>
  13. </el-menu-item>
  14. <el-submenu :index="item.firstlevel" v-for="item in menus" :key="item.firstlevel">
  15. <template slot="title">
  16. <i class="iconfont" :class="item.icon"></i>
  17. <span>{{item.firstlevel}}</span>
  18. </template>
  19. <el-menu-item-group>
  20. <el-menu-item :index="v.name" v-for="v in item.secondarylevel" :key="v.name" @click="goRouteItem(v)">
  21. <span class="router-name" v-html="v.name"></span>
  22. </el-menu-item>
  23. </el-menu-item-group>
  24. </el-submenu>
  25. </el-menu>
  26. </div>
  27. </template>
  28. <script>
  29. import '@/assets/style/iconfont.css'
  30. import { Menu, Submenu, MenuItem, MenuItemGroup, MessageBox } from 'element-ui'
  31. import { getLeftMenu } from '@/api/modules'
  32. export default {
  33. name: 'work-slidebar',
  34. computed: {},
  35. components: {
  36. [Menu.name]: Menu,
  37. [Submenu.name]: Submenu,
  38. [MenuItem.name]: MenuItem,
  39. [MenuItemGroup.name]: MenuItemGroup,
  40. [MessageBox.name]: MessageBox
  41. },
  42. data () {
  43. return {
  44. menuKey: '0', // 用来强制刷新menu
  45. menus: [],
  46. defalutOpends: [],
  47. defaultActive: '我的主页',
  48. // 使用SideBar的index列表
  49. useSideBar: [
  50. '我的主页',
  51. '定制化分析报告'
  52. ]
  53. }
  54. },
  55. watch: {
  56. $router (to, from) {
  57. this.setDefaultActive()
  58. }
  59. },
  60. created () {
  61. this.getHomeLeftMenu()
  62. },
  63. methods: {
  64. getHomeLeftMenu () {
  65. getLeftMenu().then(res => {
  66. if (res.error_code === 0 && res.data) {
  67. res.data.forEach((v, i) => {
  68. switch (v.firstlevel) {
  69. case '我的订阅':
  70. v.icon = 'icon-hui2'
  71. break
  72. case '我的关注':
  73. v.icon = 'icon-hui'
  74. break
  75. case '我的收藏':
  76. v.icon = 'icon-hui3'
  77. break
  78. case '会员服务':
  79. v.icon = 'icon-hui4'
  80. break
  81. case '我的资产':
  82. v.icon = 'icon-hui5'
  83. break
  84. case '交易管理':
  85. v.icon = 'icon-hui6'
  86. break
  87. default:
  88. v.icon = 'icon-hui2'
  89. break
  90. }
  91. if (v.firstlevel === '会员服务') {
  92. this.defalutOpends.push(v.firstlevel) // 加空字符串
  93. v.secondarylevel.forEach(s => {
  94. if (s.name.indexOf('/') > -1) {
  95. s.name = s.name.replace('/', '/<br>')
  96. }
  97. })
  98. }
  99. })
  100. this.menus = res.data
  101. this.setDefaultActive()
  102. } else {
  103. this.menus = []
  104. }
  105. })
  106. },
  107. goRouteItem (item) {
  108. if (item.isusable) {
  109. window.open(item.url)
  110. this.$refs.menu.activeIndex = this.defaultActive
  111. } else {
  112. MessageBox.confirm('您未购买此服务,如需使用请联系您的销售人员或客服升级套餐,谢谢!', '提示信息', {
  113. customClass: 'custom-message-box',
  114. confirmButtonText: '我知道了',
  115. confirmButtonClass: 'custom-confirm-btn',
  116. showClose: false,
  117. showCancelButton: false,
  118. closeOnClickModal: false,
  119. center: true
  120. }).then(() => {
  121. console.log('关闭')
  122. })
  123. }
  124. },
  125. onMenuSelect (e) {
  126. this.$nextTick(() => {
  127. this.$refs.menu.activeIndex = this.defaultActive
  128. })
  129. },
  130. toIndex () {
  131. if (this.$route.name === 'desktop') return
  132. const routeUrl = this.$router.resolve({
  133. path: '/'
  134. })
  135. window.open(routeUrl.href)
  136. },
  137. setDefaultActive () {
  138. if (this.$route.name === 'desktop') {
  139. this.defaultActive = '我的主页'
  140. } else if (this.$route.path.indexOf('report_analysis') !== -1) {
  141. this.defaultActive = '定制化分析报告'
  142. }
  143. }
  144. }
  145. }
  146. </script>
  147. <style lang="scss" scoped>
  148. .work-slidebar{
  149. .iconfont{
  150. margin-right: 8px;
  151. font-size: 18px;
  152. color: #1D1D1D;
  153. }
  154. ::v-deep{
  155. .el-menu{
  156. border-right: 0;
  157. }
  158. .el-submenu{
  159. width: 100%;
  160. }
  161. .el-menu-item{
  162. height: 42px;
  163. line-height: 42px;
  164. min-width: 0;
  165. padding: 0 10px!important;
  166. width: 100%;
  167. color: #1D1D1D;
  168. &:hover{
  169. color: #2CB7CA;
  170. background: #eaf8fa;
  171. border-radius: 4px;
  172. i,span{
  173. color: #2CB7CA;
  174. }
  175. }
  176. &.is-active{
  177. .iconfont{
  178. color: #2CB7CA;
  179. }
  180. }
  181. }
  182. .el-submenu__title{
  183. height: 42px;
  184. line-height: 42px;
  185. padding: 0 10px!important;
  186. color: #1D1D1D;
  187. &:hover{
  188. color: #2CB7CA;
  189. background: #eaf8fa;
  190. border-radius: 4px;
  191. i{
  192. color: #2CB7CA;
  193. }
  194. }
  195. }
  196. .el-menu-item-group{
  197. width: 100%;
  198. .el-menu-item{
  199. height: auto;
  200. line-height: 22px;
  201. padding: 6px 0!important;
  202. white-space: normal;
  203. font-size: 14px;
  204. color: #686868;
  205. }
  206. }
  207. .el-menu-item.is-active {
  208. color: #2CB7CA;
  209. background: #eaf8fa;
  210. padding-left: 0;
  211. border-radius: 4px;
  212. }
  213. .el-menu-item-group__title{
  214. padding: 0;
  215. }
  216. .el-submenu__icon-arrow{
  217. // display: none;
  218. }
  219. .router-name{
  220. padding-left: 36px;
  221. display: inline-block;
  222. }
  223. }
  224. }
  225. </style>