index.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591
  1. /*layout模板*/
  2. <template>
  3. <div>
  4. <div :class="['header', fixedHeader ? 'fixed-header' : '',this.flag?'hidden':'show']" >
  5. <div class="logo">
  6. <router-link to="/indexLayout/workbench"
  7. ><el-image v-show="xglogo" :src="qylogo" fit="cover"
  8. />
  9. </router-link>
  10. <el-image v-show="qylogos" :src="qylogo" fit="cover"
  11. @click="routerclik()" />
  12. </div>
  13. <div class="count" v-show="zhucenum">
  14. <div class="item">
  15. <el-image class="icon" :src="count" fit="cover" alt="icon" />
  16. <span
  17. >注册用户数<span
  18. ><countTo :start-val="0" :end-val="user" :duration="3000" /></span
  19. >个,当前活跃用户<span
  20. ><countTo
  21. :start-val="0"
  22. :end-val="activeUser"
  23. :duration="3000" /></span
  24. >个</span
  25. >
  26. </div>
  27. <div class="item">
  28. <el-image class="icon" :src="count" fit="cover" alt="icon" />
  29. <span
  30. >总项目数<span
  31. ><countTo
  32. :start-val="0"
  33. :end-val="totalProject"
  34. :duration="3000" /></span
  35. >个,运行项目数<span
  36. ><countTo
  37. :start-val="0"
  38. :end-val="runProject"
  39. :duration="3000" /></span
  40. >个</span
  41. >
  42. </div>
  43. </div>
  44. <div
  45. v-if="
  46. $route.path !== '/login' &&
  47. $route.path !== '/register' &&
  48. $route.path !== '/forget' &&
  49. $route.path !== '/protocol'
  50. "
  51. class="nav"
  52. >
  53. <el-menu
  54. mode="horizontal"
  55. :unique-opened="true"
  56. text-color="#333"
  57. active-text-color="#333"
  58. background-color="background-color: rgba($color: #0158a8, $alpha: 0);"
  59. :default-active="activeMenu"
  60. >
  61. <!-- <menu-item
  62. v-for="route in routes"
  63. :key="route.path"
  64. :item="route"
  65. :base-path="route.path"
  66. />-->
  67. <!-- <el-menu-item
  68. v-if="$route.path.indexOf('/indexLayout') == -1"
  69. index="/indexLayout"
  70. >
  71. <router-link to="/indexLayout">首页</router-link>
  72. </el-menu-item> -->
  73. <el-menu-item class="dasai" :class="currentMenu == 'matchLayout' ? 'itemOn' : ''">
  74. <router-link to="/matchLayout" v-show="yingyong" class="yingyong"
  75. >应用大赛</router-link>
  76. </el-menu-item>
  77. <el-menu-item background-color="background-color: rgba($color: #0158a8, $alpha: 0.1);"
  78. v-if="loginStatus && userType != 1"
  79. :class="currentMenu == 'my-workbench' ? 'itemOn' : ''"
  80. >
  81. <!-- <router-link to="/indexLayout/my-workbench" v-show="yingyong" >我的工作台</router-link> -->
  82. </el-menu-item>
  83. <el-menu-item background-color="background-color: rgba($color: #0158a8, $alpha: 0.1);"
  84. v-if="loginStatus"
  85. :class="currentMenu == 'user' ? 'itemOn' : ''"
  86. >
  87. <router-link to="/userLayout">
  88. <div class="user">
  89. <el-dropdown>
  90. <div>
  91. <span :title="name">{{ name }}</span>
  92. <i class="el-icon-arrow-down" />
  93. </div>
  94. <el-dropdown-menu slot="dropdown">
  95. <el-dropdown-item @click.native="logout"
  96. >退出登录</el-dropdown-item
  97. >
  98. </el-dropdown-menu>
  99. </el-dropdown>
  100. </div>
  101. </router-link>
  102. </el-menu-item>
  103. <el-menu-item v-else style=" background:none;">
  104. <p @click="toLogin">登录/注册</p>
  105. </el-menu-item>
  106. </el-menu>
  107. </div>
  108. </div>
  109. <section class="app-main">
  110. <transition name="fade-transform" mode="out-in">
  111. <router-view :key="key" />
  112. </transition>
  113. </section>
  114. <div
  115. :class="[
  116. 'footer',
  117. fixedHeader ? 'fixed-footer' : '',
  118. /^\/indexLayout([\/][\D]+)?$/.test($route.path)|| /^\/matchLayout([\/][\D]+)?$/.test($route.path)||/^\/topic([\/][\D]+)?$/.test($route.path)||
  119. /^\/detailbzs1([\/][\D]+)?$/.test($route.path)|| /^\/detailbzs2([\/][\D]+)?$/.test($route.path)|| /^\/detailbzs3([\/][\D]+)?$/.test($route.path)|| /^\/detailbzs4([\/][\D]+)?$/.test($route.path)
  120. ? 'footer-index'
  121. : /^\/login\/index$/.test($route.path)
  122. ? 'footer-login'
  123. : '',
  124. ]"
  125. >
  126. <a href="https://www.xichain.com.cn/xichain/" target="_blank"
  127. >Copyright ©2015-2018 西安前沿动力有限公司All Rights Reserved</a
  128. >
  129. <a href="http://www.beian.miit.gov.cn/" target="_blank"
  130. >版权所有:西安前沿动力软件开发有限责任公司 陕ICP备13000621号</a
  131. >
  132. <!-- <img class="police" src="../assets/img/police.png" />
  133. <a
  134. href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=50010302003067"
  135. target="_blank"
  136. >渝公网安备 50010302003067号</a
  137. > -->
  138. <!-- <span v-show="xglogo">服务热线:023-63410620</span> -->
  139. </div>
  140. <Login :loginShow="loginShow" @putLogin="getLogin" />
  141. <Register :registerShow="registerShow" @putRegister="getRegister" />
  142. <Forget :forgetShow="forgetShow" @putForget="getForget" />
  143. </div>
  144. </template>
  145. <script>
  146. import { parseTime } from '@/utils/index'
  147. import { request } from '@/utils/request'
  148. import { resetRouter } from '@/router'
  149. import { mapGetters } from 'vuex'
  150. import { MenuItem } from './components'
  151. import countTo from 'vue-count-to'
  152. import logo from '@/assets/index/logo.png'
  153. import qylogo from '@/assets/index/qylogo.png'
  154. import count from '@/assets/index/count.png'
  155. import Login from '@/components/Login'
  156. import Register from '@/components/Register'
  157. import Forget from '@/components/Forget'
  158. export default {
  159. name: 'Layout',
  160. components: {
  161. MenuItem,
  162. countTo,
  163. Login,
  164. Register,
  165. Forget,
  166. },
  167. data() {
  168. return {
  169. zhucenum:false,
  170. flag: false,
  171. logo:logo,
  172. qylogo:qylogo,
  173. yingyong:false,
  174. xglogo: false,
  175. qylogos:false,
  176. count: count,
  177. runProject: 0,
  178. totalProject: 0,
  179. user: 0,
  180. activeUser: 0,
  181. redirect: undefined,
  182. loginShow: false,
  183. registerShow: false,
  184. forgetShow: false,
  185. currentMenu: '',
  186. }
  187. },
  188. watch: {
  189. $route: {
  190. handler: function (route) {
  191. this.redirect = route.query && route.query.redirect
  192. this.getCount() // 获取统计信息
  193. //判断是否是前沿的logo;
  194. if(route.path=="/indexLayout/workbench"||route.path=="/indexLayout/home"||route.path=="/indexLayout/guanyuwe"){
  195. this.flag=false;
  196. this.qylogos=true;
  197. this.xglogo=false;
  198. this.yingyong=true;
  199. } else{
  200. this.flag=true;
  201. this.xglogo=true;
  202. this.qylogos=false;
  203. this.yingyong=true;
  204. }
  205. },
  206. immediate: true,
  207. },
  208. },
  209. mounted(){
  210. // console.log(this.$store.getters.fixedHeader)
  211. // console.log(this.$store.getters.lesseeId);
  212. },
  213. created() {
  214. // if(path.indexOf('workbench')>0 || path.indexOf('design')>0 ){
  215. // console.log(1111)
  216. // this.xglogo=false;
  217. // this.qylogos=true;
  218. // } else{
  219. // console.log(222)
  220. // this.xglogo=true;
  221. // this.qylogos=false;
  222. // }
  223. // this.getCount() // 获取统计信息
  224. // console.log('1586966400 ->' + parseTime('1586966400'))
  225. // console.log('1586966400000 ->' + parseTime('1586966400000'))
  226. // console.log('2020-12-14 ->' + parseTime('2020-12-14'))
  227. // console.log('2020-12-14 +0800 ->' + parseTime('2020-12-14 +0800'))
  228. // console.log('2020-12-14 -0800 ->' + parseTime('2020-12-14 -0800'))
  229. // console.log('2020-12-14 13:14:23 ->' + parseTime('2020-12-14 13:14:23'))
  230. // console.log(
  231. // '2020-12-14 13:14:23 +0800 ->' + parseTime('2020-12-14 13:14:23 +0800')
  232. // )
  233. // console.log(
  234. // '2020-12-14 13:14:23 -0800 ->' + parseTime('2020-12-14 13:14:23 -0800')
  235. // )
  236. // console.log('2020/12/14 ->' + parseTime('2020/12/14'))
  237. // console.log('2020/12/14 +0800 ->' + parseTime('2020/12/14 +0800'))
  238. // console.log('2020/12/14 -0800 ->' + parseTime('2020/12/14 -0800'))
  239. // console.log('2020/12/14 13:14:23 ->' + parseTime('2020/12/14 13:14:23'))
  240. // console.log(
  241. // '2020/12/14 13:14:23 +0800 ->' + parseTime('2020/12/14 13:14:23 +0800')
  242. // )
  243. // console.log(
  244. // '2020/12/14 13:14:23 -0800 ->' + parseTime('2020/12/14 13:14:23 -0800')
  245. // )
  246. },
  247. // 父组件中返回要传给下级的数据
  248. provide() {
  249. return {
  250. toLogin: this.toLogin,
  251. getCount: this.getCount,
  252. }
  253. },
  254. computed: {
  255. fixedHeader() {
  256. return this.$store.getters.fixedHeader
  257. },
  258. lesseeId() {
  259. return this.$store.getters.lesseeId
  260. },
  261. ...mapGetters(['name', 'userType', 'loginStatus']),
  262. key() {
  263. return this.$route.path
  264. },
  265. routes() {
  266. return this.$router.options.routes // 导航栏是使用 router.options.routes来遍历生成
  267. },
  268. activeMenu() {
  269. const route = this.$route
  270. const { meta, path } = route
  271. let pathArr = path.split('/')
  272. if (pathArr.length == 3 && pathArr[1] == 'userLayout') {
  273. this.currentMenu = 'user'
  274. } else if (
  275. pathArr.length == 3 &&
  276. pathArr[1] == 'indexLayout' &&
  277. pathArr[2] == 'my-workbench'
  278. ) {
  279. this.currentMenu = pathArr[2]
  280. } else {
  281. this.currentMenu = ''
  282. }
  283. // 如果设置了路径,侧边栏将突出显示您设置的路径
  284. if (meta.activeMenu) {
  285. return meta.activeMenu
  286. }
  287. return path
  288. },
  289. },
  290. methods: {
  291. routerclik(){
  292. const path=this.$route.path
  293. let id= sessionStorage.getItem("id",id);
  294. let pretreatment= sessionStorage.getItem("pretreatment",pretreatment);
  295. let solver= sessionStorage.getItem("pretreatment",solver);
  296. this.$router.replace({
  297. path: '/indexLayout/workbench',
  298. query: {id, pretreatment, solver },
  299. })
  300. // if(path=="/indexLayout/design"){
  301. // }else{
  302. // this.$router.replace({
  303. // path: '/indexLayout',
  304. // })
  305. // }
  306. },
  307. toLogin() {
  308. this.loginShow = true
  309. },
  310. getLogin(data) {
  311. this.loginShow = false
  312. if (data) {
  313. if (data.type == 'register') {
  314. this.registerShow = true
  315. } else if (data.type == 'forget') {
  316. this.forgetShow = true
  317. }
  318. }
  319. },
  320. getRegister(data) {
  321. this.registerShow = false
  322. if (data && data.type == 'login') {
  323. this.loginShow = true
  324. }
  325. },
  326. getForget(data) {
  327. this.forgetShow = false
  328. if (data && data.type == 'login') {
  329. this.loginShow = true
  330. }
  331. },
  332. quit() {
  333. this.$store.dispatch('user/changeState', {
  334. key: 'token',
  335. value: '',
  336. })
  337. this.$store.dispatch('user/changeState', {
  338. key: 'name',
  339. value: '',
  340. })
  341. this.$store.dispatch('user/changeState', {
  342. key: 'userId',
  343. value: '',
  344. })
  345. this.$store.dispatch('user/changeState', {
  346. key: 'userRole',
  347. value: '',
  348. })
  349. this.$store.dispatch('user/changeState', {
  350. key: 'cfdUrl',
  351. value: '',
  352. })
  353. this.$store.dispatch('user/changeState', {
  354. key: 'loginStatus',
  355. value: false,
  356. })
  357. resetRouter()
  358. this.$message.success('退出成功!')
  359. setTimeout(() => {
  360. // this.$router.replace(`/login?redirect=${this.$route.fullPath}`)
  361. this.$router.replace(`/indexLayout/workbench`)
  362. }, 1000)
  363. },
  364. logout() {
  365. this.$confirm('此操作将退出登录, 是否继续?', '提示', {
  366. confirmButtonText: '确定',
  367. cancelButtonText: '取消',
  368. center: true,
  369. type: 'warning',
  370. })
  371. .then(() => {
  372. request({ transCode: 'A00004' })
  373. .then(() => {
  374. this.quit()
  375. })
  376. .catch((err) => {
  377. this.quit()
  378. })
  379. })
  380. .catch(() => {
  381. this.$message.info('已取消')
  382. })
  383. },
  384. getCount() {
  385. this.runProject = 0
  386. this.totalProject = 0
  387. this.user = 0
  388. this.activeUser = 0
  389. request({ transCode: 'C00005' })
  390. .then((res) => {
  391. this.runProject = parseInt(res.runProject)
  392. this.totalProject = parseInt(res.totalProject)
  393. this.user = parseInt(res.user)
  394. this.activeUser = parseInt(res.activeUser)
  395. })
  396. .catch((err) => {})
  397. },
  398. },
  399. }
  400. </script>
  401. <style lang="scss" scoped>
  402. @import '@/styles/variables.scss';
  403. @import '@/styles/mixin.scss';
  404. // @import '@/styles/transition.scss';
  405. .fixed {
  406. &-header {
  407. // @include position(fixed, 0, auto, 0, 0, 9);
  408. @include w_h();
  409. }
  410. &-footer {
  411. // @include position(fixed, auto, 0, 0, 0, 9);
  412. @include w_h();
  413. }
  414. }
  415. .fixed-footer{
  416. position: fixed;
  417. top: auto;
  418. bottom: 0;
  419. left: 0;
  420. right: 0;
  421. z-index: 9;
  422. width: 100%;
  423. height: auto;
  424. }
  425. .show{
  426. background: $color_f;
  427. }
  428. .hidden{
  429. background: rgba($color: #0158a8, $alpha: 0.2);
  430. }
  431. .header {
  432. padding: 0 $pad;
  433. @include flex();
  434. @include w_h(100%, 50px);
  435. min-width: 1000px;
  436. box-shadow: 0px 1px 7px 0px rgba(0, 0, 0, 0.04);
  437. .logo {
  438. @include w_h(100px);
  439. &:hover {
  440. cursor: pointer;
  441. }
  442. }
  443. .count {
  444. @include flex(flex-start);
  445. @include w_h(auto, 35px);
  446. padding: 0 $pad;
  447. font-size: 12px;
  448. color: $color_3;
  449. .item {
  450. margin: 0 20px;
  451. }
  452. .icon {
  453. @include w_h(14px);
  454. margin-right: 3px;
  455. vertical-align: bottom;
  456. }
  457. span {
  458. span {
  459. color: $color_on;
  460. }
  461. }
  462. }
  463. .nav {
  464. @include flex();
  465. height: 100%;
  466. font-size: 12px;
  467. .el-menu {
  468. height: 100%;
  469. border: none;
  470. background:none;
  471. color: #0470cc;
  472. .itemOn {
  473. // color: $color_on !important;
  474. // border-bottom: 2px solid $color_on !important;
  475. color: rgba($color: #0158a8, $alpha: 1)!important;
  476. border-bottom: 2px solid #0158a8!important;
  477. }
  478. }
  479. .user {
  480. color: inherit;
  481. span {
  482. display: inline-block;
  483. max-width: 100px;
  484. font-size: 14px;
  485. white-space: nowrap;
  486. text-overflow: ellipsis;
  487. overflow: hidden;
  488. }
  489. &:hover span {
  490. color: #f66420;
  491. }
  492. .el-icon-arrow-down {
  493. font-size: 12px;
  494. }
  495. }
  496. }
  497. }
  498. .app-main {
  499. width: 100%;
  500. height: calc(100vh - 85px);
  501. }
  502. .footer {
  503. @include w_h(100%, 35px);
  504. line-height: 35px;
  505. font-size: 12px;
  506. text-align: center;
  507. color: #747474;
  508. background: $color_f2;
  509. .police {
  510. vertical-align: sub;
  511. }
  512. a {
  513. padding-right: 10px;
  514. }
  515. a:hover {
  516. color: $color_9;
  517. }
  518. &-login {
  519. background: $color_f;
  520. }
  521. &-index {
  522. background: #2b2828;
  523. }
  524. }
  525. </style>
  526. <style lang="scss">
  527. @import '@/styles/variables.scss';
  528. .el-image__inner--center {
  529. left: 0 !important;
  530. transform: translate(0) !important;
  531. }
  532. .nav {
  533. .el-dropdown {
  534. color: inherit;
  535. }
  536. .el-menu-item,
  537. .el-submenu__title,
  538. .el-menu--horizontal > .el-menu-item {
  539. height: 40px;
  540. line-height: 40px;
  541. color: $color_3;
  542. border: none;
  543. padding: 0 5px;
  544. margin: 0 15px;
  545. background-color: rgba($color: #0158a8, $alpha: 0)!important;;
  546. a {
  547. display: block;
  548. }
  549. &.is-active {
  550. border: none;
  551. }
  552. }
  553. }
  554. .dasai{
  555. .yingyong{
  556. font-size: 14px;
  557. color: #303133;
  558. }
  559. &:hover .yingyong{
  560. color: #f66420 !important;
  561. }
  562. }
  563. </style>