index.ftl 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title></title>
  5. <!-- <#include "/include/head-file.ftl"/>
  6. <#include "/reset-password.ftl"/>
  7. <#include "/exit-system.ftl"/> -->
  8. <link rel="stylesheet" href="${base}/static/ms-admin/4.7.0/css/index.css">
  9. <!--#include virtual="include/head-file.ftl" -->
  10. <!--#include virtual="./reset-password.ftl" -->
  11. <!--#include virtual="./exit-system.ftl" -->
  12. <link rel="stylesheet" href="../../../static/ms-admin/4.7.0/css/index.css">
  13. </head>
  14. <body>
  15. <div id="app" class="index">
  16. <el-container>
  17. <!--头部-->
  18. <el-header class="ms-admin-header">
  19. <el-aside width="200px" class="ms-admin-logo">
  20. <img :src="ms.base+'/static/ms-admin/4.7.0/images/logo.png'" />
  21. <div>
  22. <img :src="ms.base+'/static/ms-admin/4.7.0/images/version.png'" />
  23. <span>v4.6.3</span>
  24. </div>
  25. </el-aside>
  26. <!--头部menu-->
  27. <el-menu class="ms-admin-header-menu" :default-active="0+''" mode="horizontal" >
  28. <el-menu-item
  29. class="ms-admin-menu-item"
  30. :index="i+''"
  31. v-for="(menu,i) in mainParentMenuList"
  32. :key='i'
  33. @click="openMenu(menu,i)"
  34. v-text="menu.modelTitle"
  35. ></el-menu-item>
  36. <el-menu-item class="ms-admin-menu-item" :index="menuList.length+''" @click=''>
  37. <i class="iconfont icon-gengduo" @click.stop.self='shortcutMenu = !shortcutMenu'></i>
  38. </el-menu-item>
  39. <!-- 快捷菜单 -->
  40. <ul class="ms-admin-shortcut-menu" v-show='shortcutMenu'>
  41. <li v-for="(item,index) of parentMenuList"
  42. :key='index'
  43. v-text='item.modelTitle'
  44. @click='openMenu(item,index)'
  45. ></li>
  46. <i class="iconfont icon-gengduo" @click.stop.self='shortcutMenu = !shortcutMenu'></i>
  47. </ul>
  48. </el-menu>
  49. <!--头部右侧-->
  50. <el-main class="ms-admin-mstore">
  51. <!--登录-->
  52. <el-dropdown trigger="click" class="ms-admin-login" placement="top-start" @visible-change="loginDown = !loginDown">
  53. <span class="el-dropdown-link" :class="{'active':loginDown}">
  54. <img src="${base}/static/ms-admin/4.7.0/images/default_handsome.jpg" />
  55. <span v-text='peopleInfo.managerName'></span>
  56. </span>
  57. <el-dropdown-menu class="ms-admin-login-down" slot="dropdown" @click.native='openModal'>
  58. <el-dropdown-item>修改密码</el-dropdown-item>
  59. <el-dropdown-item>退出</el-dropdown-item>
  60. </el-dropdown-menu>
  61. </el-dropdown>
  62. <!--mstore按钮-->
  63. <div class="ms-admin-mstore-icon">
  64. <i class="iconfont icon-gengduo1"></i>
  65. </div>
  66. </el-main>
  67. </el-header>
  68. <el-container class="ms-admin-container">
  69. <!--菜单-->
  70. <el-aside :class="['ms-admin-menu-aside',{'ms-admin-menu-aside-active':collapseMenu}]">
  71. <el-menu
  72. :class="['ms-admin-menu',{'ms-admin-menu-active':collapseMenu}]"
  73. :default-active="menuActive"
  74. :collapse="collapseMenu"
  75. mode='vertical'
  76. :collapse-transition='true'
  77. :unique-opened='true'
  78. ref='menu'
  79. >
  80. <el-submenu
  81. :index="i+''"
  82. v-for="(menu,i) in parentMenuList"
  83. :key='i'
  84. >
  85. <template slot="title">
  86. <i class="iconfont" :class="iconType(menu.modelTitle)"></i>
  87. <span v-text="menu.modelTitle"></span>
  88. </template>
  89. <!-- 子菜单 -->
  90. <el-menu-item
  91. :index="i+'-'+index"
  92. v-for="(sub,index) in getSubMenu(menu.modelId)"
  93. :key='sub.modelModelId'
  94. v-text="sub.modelTitle"
  95. @click.self='open(sub.modelTitle,sub.modelUrl)'
  96. ></el-menu-item>
  97. </el-submenu>
  98. <!-- 收缩按钮 -->
  99. <div :class="['ms-menu-expand',{'ms-menu-expand-active':collapseMenu}]" @click='collapseMenu = !collapseMenu'>
  100. <i class="iconfont icon-shousuo"></i>
  101. </div>
  102. </el-menu>
  103. </el-aside>
  104. <!--内容-->
  105. <el-main class="ms-admin-main">
  106. <!--选项卡-->
  107. <el-tabs
  108. class="ms-admin-tabs"
  109. v-model="currentTab"
  110. type="card"
  111. closable
  112. @tab-remove="closeTab"
  113. >
  114. <el-tab-pane
  115. v-for="(item, index) in editableTabs"
  116. :key="index"
  117. :label="item.title"
  118. :name="item.title"
  119. >
  120. <iframe :src='ms.manager+"/"+item.url'></iframe>
  121. </el-tab-pane>
  122. </el-tabs>
  123. </el-main>
  124. </el-container>
  125. </el-container>
  126. </div>
  127. </body>
  128. </html>
  129. <script>
  130. var indexVue = new Vue({
  131. el: "#app",
  132. data: {
  133. // 预置菜单图标
  134. icon:{
  135. '消息管理':'icon-xiaoxiguanli',
  136. '评论管理':'icon-pinglunguanli',
  137. '内容管理':'icon-bianji1',
  138. '会员中心':'icon-huiyuan',
  139. '自定义管理':'icon-gengduo-2',
  140. '权限管理':'icon-UPMSquanxianicon-',
  141. '系统管理':'icon-xitong',
  142. },
  143. menuList:[],//菜单接口数据
  144. parentMenuList:[],//一级菜单
  145. subMenuList:[],//二级菜单 所有
  146. mainParentMenuList:[],//头部菜单显示主要的选项
  147. loginDown: false, //登录下拉
  148. menuActive: "", //选中菜单
  149. editableTabsValue: '',
  150. editableTabs: [],//当前打开的tab页面
  151. shortcutMenu:false,//快捷菜单显示状态
  152. collapseMenu:false,//菜单折叠,false不折叠
  153. currentTab:'',//当前激活tab的name
  154. tabIndex: 2,
  155. //登录用户信息
  156. peopleInfo:{
  157. managerName:''//账号
  158. },
  159. subMenuList:[],//
  160. },
  161. watch:{
  162. menuList:function(n,o){
  163. var that = this;
  164. n && n.forEach(function(item,index){
  165. item.modelModelId == 0 ? that.parentMenuList.push(item) : that.subMenuList.push(item)
  166. })
  167. },
  168. parentMenuList:function(n,o){
  169. this.mainParentMenuList = n.slice(0,5);
  170. },
  171. menuActive:function(n,o){
  172. console.log('激活',n);
  173. }
  174. },
  175. methods: {
  176. // 菜单列表
  177. list:function(){
  178. var that = this;
  179. ms.http.post(ms.manager + "/model/list.do")
  180. .then((data)=>{
  181. that.menuList = data.rows
  182. }, (err) => {
  183. that.$message.error(err);
  184. })
  185. },
  186. // 菜单打开页面
  187. open:function(title,url){
  188. var result = '';
  189. result = this.editableTabs.some(function (item,index) {return item.title == title})
  190. !result ? this.editableTabs.push({title:title,url:url}) : ""
  191. this.currentTab = title;
  192. // 处理其他逻辑
  193. },
  194. // 获取当前菜单的子菜单
  195. getSubMenu:function (modelId) {
  196. var result = [];
  197. var that = this;
  198. that.subMenuList && that.subMenuList.forEach(function (item) {
  199. item.modelModelId == modelId ? result.push(item) : ''
  200. })
  201. return result;
  202. },
  203. // 匹配图标
  204. iconType:function (title) {
  205. return this.icon[title] || 'icon-xitongpeizhi'
  206. },
  207. //关闭tab标签页
  208. closeTab(targetName) {
  209. var that = this;
  210. // 关闭的面板是当前激活面板
  211. if(that.currentTab == targetName){
  212. that.editableTabs.forEach(function (tab,index,arr) {
  213. if(tab.title == targetName){
  214. var nextTab = arr[index + 1] || arr[index - 1];
  215. if(nextTab){
  216. that.currentTab = nextTab.title
  217. }
  218. }
  219. })
  220. }
  221. // 关闭的不是当前面板
  222. that.editableTabs = that.editableTabs.filter(function (tab) {
  223. return tab.title !== targetName
  224. })
  225. },
  226. // 头部导航打开菜单
  227. openMenu:function(menu,index){
  228. this.$refs.menu.open(index);
  229. var children = [];
  230. this.menuList.forEach(function (tab) {
  231. if(tab.modelModelId == menu.modelId){
  232. children.push(tab)
  233. }
  234. })
  235. this.currentTab = children[0] && children[0].modelTitle;
  236. this.open(children[0].modelTitle,children[0].modelUrl);
  237. var that = this;
  238. setTimeout(function(){
  239. that.shortcutMenu = false
  240. },50)
  241. },
  242. managerGet:function(){
  243. var that = this;
  244. ms.http.get(ms.manager + "/basic/manager/get.do")
  245. .then((data)=>{
  246. that.peopleInfo = data
  247. resetPasswordVue.resetPasswordForm.managerName = that.peopleInfo.managerName
  248. }, (err) => {
  249. that.$message.error(err);
  250. })
  251. },
  252. // 打开修改密码,退出的模态框
  253. openModal:function(){
  254. event.target.innerText.indexOf('修改密码')>-1
  255. ? resetPasswordVue.isShow=true : exitSystemVue.isShow=true
  256. }
  257. },
  258. mounted:function(){
  259. // 菜单列表
  260. this.list();
  261. //获取登录用户信息
  262. this.managerGet();
  263. },
  264. })
  265. </script>