Navbar.vue 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506
  1. <template>
  2. <div class="top-nav">
  3. <!-- <div class="nav-logo">
  4. <img :src="require(`../../../assets/logo/logo.png`)" alt="">
  5. </div>
  6. <el-menu class="navbar" mode="horizontal">
  7. <div>
  8. <span> {{this.$store.getters.xt_user.org.org_name}}
  9. </span>
  10. </div>
  11. <div class="system-nav">
  12. <div class="system-nav-menu active">
  13. <a>
  14. <span><i class="icon iconfont icon-jiankangshuidi"></i> 血透管理</span>
  15. </a>
  16. </div>
  17. <div class="system-nav-menu" v-if="this.$store.getters.xt_user.cdm_role_exist">
  18. <a :href="CDMWebsit()">
  19. <span><i class="icon iconfont icon-manbing-xuanzhong"></i> 慢病管理</span>
  20. </a>
  21. </div>
  22. <div class="system-nav-menu" v-if="this.$store.getters.xt_user.scrm_role_exist">
  23. <a :href="SCRMWebsit()">
  24. <span><i class="iconfont icon-pengyou"></i> SCRM</span>
  25. </a>
  26. </div>
  27. <div class="system-nav-menu" v-if="this.$store.getters.xt_user.mall_role_exist">
  28. <a :href="MircoMallWebsit()">
  29. <span><i class="icon iconfont icon-service_fill"></i> 微商城</span>
  30. </a>
  31. </div>
  32. <div class="system-nav-menu">
  33. <a :href="APPManageWebsit()">
  34. <span><i class="icon iconfont icon-suoyou"></i> 应用</span>
  35. </a>
  36. </div>
  37. </div>
  38. <div class="right-menu">
  39. <el-dropdown class="avatar-container right-menu-item" trigger="click" @command="handleCommand">
  40. <div class="avatar-wrapper">
  41. <img class="user-avatar" :src="avater">
  42. <span class="user-title">{{ this.$store.getters.xt_user.user.user_name }}</span>
  43. <i class="el-icon-caret-bottom"></i>
  44. </div>
  45. <el-dropdown-menu slot="dropdown">
  46. <el-dropdown-item command="modifyUserInfoAction">
  47. 修改个人信息
  48. </el-dropdown-item>
  49. <el-dropdown-item command="modifyOrgInfoAction">
  50. 机构信息
  51. </el-dropdown-item>
  52. <el-dropdown-item divided command="logout">
  53. {{$t('navbar.logOut')}}
  54. </el-dropdown-item>
  55. </el-dropdown-menu>
  56. </el-dropdown>
  57. <modify-user-info-dialog ref="modify_user_info_dialog"></modify-user-info-dialog>
  58. <modify-org-info-dialog ref="modify_org_info_dialog"></modify-org-info-dialog>
  59. </div>
  60. </el-menu>-->
  61. <div class="dropdownBox">
  62. <el-dropdown trigger="click" @command="handleOrgCommand">
  63. <span class="el-dropdown-link">
  64. {{ org_name }}
  65. <i class="el-icon-arrow-down el-icon--right"></i>
  66. </span>
  67. <el-dropdown-menu slot="dropdown">
  68. <el-dropdown-item icon="el-icon-plus" v-for="(item,index) in orgs" :key="index" :command="item.id">{{item.org_name}}</el-dropdown-item>
  69. </el-dropdown-menu>
  70. </el-dropdown>
  71. </div>
  72. <div class="navRight">
  73. <!-- <el-input placeholder="搜索患者透析号/姓名/首拼" prefix-icon="el-icon-search" v-model="input2"></el-input>
  74. <div style="color: #b2b2b3;">通知中心</div> -->
  75. <div class="right-menu">
  76. <el-dropdown
  77. class="avatar-container right-menu-item"
  78. trigger="click"
  79. @command="handleCommand"
  80. >
  81. <div class="avatar-wrapper">
  82. <img class="user-avatar" :src="avater" />
  83. <span class="user-title">{{
  84. this.$store.getters.xt_user.user.user_name
  85. }}</span>
  86. <i class="el-icon-caret-bottom"></i>
  87. </div>
  88. <el-dropdown-menu slot="dropdown">
  89. <el-dropdown-item command="modifyUserInfoAction"
  90. >修改个人信息</el-dropdown-item
  91. >
  92. <el-dropdown-item command="modifyOrgInfoAction"
  93. >机构信息</el-dropdown-item
  94. >
  95. <el-dropdown-item divided command="logout">{{
  96. $t("navbar.logOut")
  97. }}</el-dropdown-item>
  98. </el-dropdown-menu>
  99. </el-dropdown>
  100. <modify-user-info-dialog
  101. ref="modify_user_info_dialog"
  102. ></modify-user-info-dialog>
  103. <modify-org-info-dialog
  104. ref="modify_org_info_dialog"
  105. ></modify-org-info-dialog>
  106. </div>
  107. <div>
  108. <i class="el-icon-question"></i>
  109. <span>帮助中心</span>
  110. </div>
  111. </div>
  112. </div>
  113. </template>
  114. <script>
  115. import { mapGetters } from "vuex";
  116. // import Breadcrumb from "@/components/Breadcrumb";
  117. // import Hamburger from "@/components/Hamburger";
  118. import Screenfull from "@/components/Screenfull";
  119. import ModifyUserInfoDialog from "@/xt_pages/home/modify_user_info_dialog";
  120. import ModifyOrgInfoDialog from "@/xt_pages/home/modifyOrgInfoDialog";
  121. import { getFiledConfigList, setFiledConfigList } from '@/utils/data_config' // getConfigList from sessionStorage
  122. import {
  123. getAdminUserInfoCache,
  124. cacheAdminUserInfo,
  125. removeAdminUserInfoCache
  126. } from '@/utils/admin_info_cache'
  127. import {
  128. getOrgs,changeOrg
  129. } from '@/api/config'
  130. export default {
  131. data() {
  132. return {
  133. orgs:[],
  134. org_id:this.$store.getters.xt_user.org.id,
  135. org_name:this.$store.getters.xt_user.org.org_name,
  136. // scrm_role_exist: $store.getters.xt_user.scrm_role_exist
  137. };
  138. },
  139. components: {
  140. Screenfull,
  141. ModifyUserInfoDialog,
  142. ModifyOrgInfoDialog
  143. },
  144. computed: {
  145. ...mapGetters(["sidebar"]),
  146. avater: function() {
  147. var avatar = this.$store.getters.xt_user.user.avatar;
  148. return avatar.length > 0
  149. ? avatar
  150. : require("../../../assets/home/userData.png");
  151. }
  152. },
  153. methods: {
  154. handleOrgCommand(org_id){
  155. let params = {
  156. org_id: org_id
  157. }
  158. changeOrg(params).then(response => {
  159. if (response.data.state === 1) {
  160. window.location.reload()
  161. this.$message.success('切换成功')
  162. let data = response.data.data
  163. this.org_id = data.org.id
  164. this.org_name = data.org.org_name
  165. this.commit('SET_CURRENT_INFO', {
  166. user: data.user,
  167. cur_org_id: data.current_org_id,
  168. cur_app_id: data.current_app_id,
  169. org: data.org,
  170. subscibe: data.subscibe,
  171. template_info:data.template_info,
  172. })
  173. this.commit('SET_URLFORS', {
  174. urlfors: data.urlfors
  175. })
  176. this.commit('SET_FILEDS', {
  177. fileds: data.fileds
  178. })
  179. setFiledConfigList(JSON.stringify(data.fileds))
  180. cacheAdminUserInfo(JSON.stringify(data))
  181. }else{
  182. this.$message.success(response.data.msg)
  183. }
  184. }).catch(e => {
  185. // this.$message.success("网络异常")
  186. });
  187. },
  188. handleCommand(command) {
  189. switch (command) {
  190. case "modifyUserInfoAction":
  191. this.modifyUserInfoAction();
  192. break;
  193. case "modifyOrgInfoAction":
  194. this.modifyOrgInfoAction();
  195. break;
  196. case "logout":
  197. this.logout();
  198. break;
  199. }
  200. },
  201. logout() {
  202. this.$store.dispatch("FrontendLogout");
  203. window.location.href = process.env.BASE_API + "/logout";
  204. },
  205. modifyOrgInfoAction() {
  206. // this.$refs.modify_org_info_dialog.show()
  207. this.$router.push("/orginfo");
  208. return false;
  209. },
  210. modifyUserInfoAction() {
  211. this.$refs.modify_user_info_dialog.show();
  212. },
  213. myServe() {
  214. this.$router.push("/service");
  215. return false;
  216. },
  217. SCRMWebsit() {
  218. return process.env.SRCM_HOST;
  219. },
  220. MircoMallWebsit() {
  221. return process.env.MIRCO_MALL_HOST;
  222. },
  223. CDMWebsit() {
  224. return process.env.CDM_HOST;
  225. },
  226. APPManageWebsit() {
  227. return (
  228. process.env.SSO_HOST +
  229. "/org/admin/apps?org=" +
  230. this.$store.getters.xt_user.org_id
  231. );
  232. }
  233. },
  234. created() {
  235. this.org_id = 12
  236. getOrgs().then(response => {
  237. if (response.data.state === 1) {
  238. this.orgs = response.data.data.orgs;
  239. for (let i =0; i < this.orgs.length; i++){
  240. if (this.orgs[i].id == this.org_id){
  241. this.org_name = this.orgs[i].org_name
  242. }
  243. }
  244. }
  245. });
  246. }
  247. };
  248. </script>
  249. <style rel="stylesheet/scss" lang="scss" scoped>
  250. .top-nav {
  251. background: #409eff;
  252. position: fixed;
  253. top: 0;
  254. left: 150px;
  255. right: 0;
  256. z-index: 1000;
  257. height: 50px;
  258. display: flex;
  259. align-items: center;
  260. justify-content: space-between;
  261. color:#fff;
  262. .dropdownBox {
  263. margin-left: 10px;
  264. }
  265. .navRight {
  266. display: flex;
  267. align-items: center;
  268. justify-content: space-between;
  269. min-width: 200px;
  270. margin-right: 10px;
  271. .right-menu {
  272. float: right;
  273. height: 100%;
  274. z-index: 99999;
  275. color: #fff;
  276. & :focus {
  277. outline: none;
  278. }
  279. .right-menu-item {
  280. display: inline-block;
  281. margin: 0 8px;
  282. .iconfont {
  283. font-size: 18px;
  284. }
  285. }
  286. .screenfull {
  287. height: 20px;
  288. }
  289. .international {
  290. vertical-align: top;
  291. }
  292. .theme-switch {
  293. vertical-align: 15px;
  294. }
  295. .avatar-container {
  296. margin-right: 10px;
  297. .avatar-wrapper {
  298. cursor: pointer;
  299. margin-top: 3px;
  300. display: flex;
  301. align-items: center;
  302. justify-content: center;
  303. .user-avatar {
  304. width: 40px;
  305. height: 40px;
  306. border-radius: 50%;
  307. object-fit: cover;
  308. object-position: center;
  309. }
  310. .user-title {
  311. margin: 0 8px;
  312. font-size: 14px;
  313. color: #fff;
  314. }
  315. .el-icon-caret-bottom {
  316. font-size: 12px;
  317. color: #fff;
  318. }
  319. }
  320. }
  321. }
  322. }
  323. .nav-logo {
  324. width: 162px;
  325. display: flex;
  326. align-items: center;
  327. height: 60px;
  328. text-align: center;
  329. justify-content: center;
  330. padding: 10px 0;
  331. box-sizing: border-box;
  332. float: left;
  333. img {
  334. display: inline-block;
  335. width: 100px;
  336. }
  337. }
  338. .navbar {
  339. border-radius: 0px !important;
  340. display: flex;
  341. justify-content: space-between;
  342. width: calc(100% - 180px);
  343. align-items: center;
  344. color: #fff;
  345. border: none;
  346. background: #409eff;
  347. float: left;
  348. .breadcrumb-container {
  349. float: left;
  350. }
  351. .errLog-container {
  352. display: inline-block;
  353. vertical-align: top;
  354. }
  355. .right-menu {
  356. float: right;
  357. height: 100%;
  358. z-index: 99999;
  359. & :focus {
  360. outline: none;
  361. }
  362. .right-menu-item {
  363. display: inline-block;
  364. margin: 0 8px;
  365. .iconfont {
  366. font-size: 18px;
  367. }
  368. }
  369. .screenfull {
  370. height: 20px;
  371. }
  372. .international {
  373. vertical-align: top;
  374. }
  375. .theme-switch {
  376. vertical-align: 15px;
  377. }
  378. .avatar-container {
  379. margin-right: 10px;
  380. .avatar-wrapper {
  381. cursor: pointer;
  382. margin-top: 3px;
  383. display: flex;
  384. align-items: center;
  385. justify-content: center;
  386. .user-avatar {
  387. width: 40px;
  388. height: 40px;
  389. border-radius: 50%;
  390. object-fit: cover;
  391. object-position: center;
  392. }
  393. .user-title {
  394. margin: 0 8px;
  395. font-size: 14px;
  396. color: #fff;
  397. }
  398. .el-icon-caret-bottom {
  399. font-size: 12px;
  400. color: #fff;
  401. }
  402. }
  403. }
  404. }
  405. }
  406. .system-nav {
  407. .system-nav-menu {
  408. float: left;
  409. height: 60px;
  410. line-height: 60px;
  411. padding: 0 25px;
  412. a {
  413. font-size: 15px;
  414. .iconfont {
  415. font-size: 18px;
  416. }
  417. }
  418. }
  419. .active {
  420. background: #3090eb;
  421. border-left: 1px #5fabf7 solid;
  422. border-right: 1px #5fabf7 solid;
  423. }
  424. }
  425. .el-menu::after,
  426. .el-menu::before {
  427. width: 1px;
  428. height: 1px;
  429. position: absolute;
  430. top: 0;
  431. left: 0;
  432. }
  433. }
  434. .el-dropdown-menu {
  435. z-index: 9999 !important;
  436. }
  437. .v-modal {
  438. z-index: 9999 !important;
  439. }
  440. </style>
  441. <style lang="scss">
  442. .navRight {
  443. .el-input {
  444. width: 250px;
  445. }
  446. .el-input__inner {
  447. border-radius: 30px;
  448. background: #f5f7fa;
  449. }
  450. }
  451. .dropdownBox {
  452. .el-dropdown-link{
  453. font-size: 18px;
  454. color:#fff;
  455. }
  456. }
  457. </style>