Merge branch 'master' of http://yun.pashanhoo.com:9090/bdc/bdcjg-web
Showing
21 changed files
with
455 additions
and
639 deletions
1 | { | 1 | { |
2 | "TITLE": "汉中市数据上报系统", | 2 | "TITLE": "汉中市数据上报系统", |
3 | "THEME": "sb", | 3 | "THEME": "jg", |
4 | "SERVERAPI": "/bdcsjsb", | 4 | "SERVERAPI": "/bdcsjsb", |
5 | "MANAGEMENTAPI": "http: //192.168.2.236/management" | 5 | "MANAGEMENTAPI": "http://192.168.2.236/management" |
6 | } | 6 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
1 | /* | ||
2 | * @Description: | ||
3 | * @Autor: renchao | ||
4 | * @LastEditTime: 2023-03-23 17:19:52 | ||
5 | */ | ||
1 | import request from "@/utils/request"; | 6 | import request from "@/utils/request"; |
2 | import SERVER from "./config"; | 7 | // import SERVER from "./config"; |
8 | let SERVER = JSON.parse(localStorage.getItem('ApiUrl')) | ||
9 | // console.log(SERVER, 'SERVERSERVER'); | ||
3 | 10 | ||
4 | export function loginIn(username, password) { | 11 | export function loginIn (username, password) { |
5 | return request({ | 12 | return request({ |
6 | url: `${SERVER.MANAGEMENTAPI}/login?username=${username}&password=${password}`, | 13 | url: `${SERVER.MANAGEMENTAPI}/login?username=${username}&password=${password}`, |
7 | method: "post", | 14 | method: "post", |
8 | }); | 15 | }); |
9 | } | 16 | } |
10 | export function logout() { | 17 | export function logout () { |
11 | return request({ | 18 | return request({ |
12 | url: `${SERVER.MANAGEMENTAPI}/logout`, | 19 | url: `${SERVER.MANAGEMENTAPI}/logout`, |
13 | method: "post", | 20 | method: "post", | ... | ... |
1 | import request from '@/utils/request' | 1 | import request from '@/utils/request' |
2 | import SERVER from "./config"; | 2 | // import SERVER from "./config"; |
3 | let SERVER = JSON.parse(localStorage.getItem('ApiUrl')) | ||
3 | const workflow = '/workflow' | 4 | const workflow = '/workflow' |
4 | const log = '/log' | 5 | const log = '/log' |
5 | const crud = '/crud' | 6 | const crud = '/crud' | ... | ... |
1 | /* | ||
2 | * @Description: | ||
3 | * @Autor: renchao | ||
4 | * @LastEditTime: 2023-03-23 13:17:59 | ||
5 | */ | ||
1 | import request from '@/utils/request' | 6 | import request from '@/utils/request' |
2 | // let SERVER = JSON.parse(localStorage.getItem('ApiUrl')) | 7 | // let SERVER = JSON.parse(localStorage.getItem('ApiUrl')) |
3 | let SERVER = JSON.parse(localStorage.getItem('ApiUrl')) | 8 | let SERVER = JSON.parse(localStorage.getItem('ApiUrl')) |
9 | console.log(JSON.parse(localStorage.getItem('ApiUrl'))); | ||
4 | // 获取用户信息 | 10 | // 获取用户信息 |
5 | export function getUserInfo () { | 11 | export function getUserInfo () { |
6 | return request({ | 12 | return request({ |
... | @@ -9,14 +15,6 @@ export function getUserInfo () { | ... | @@ -9,14 +15,6 @@ export function getUserInfo () { |
9 | }) | 15 | }) |
10 | } | 16 | } |
11 | 17 | ||
12 | // // 获取菜单信息 | ||
13 | // export function getMenuInfo () { | ||
14 | // return request({ | ||
15 | // url: SERVER.SERVERAPI + '/rest/user/getUserAuthorizationMenus', | ||
16 | // method: 'get', | ||
17 | // }) | ||
18 | // } | ||
19 | |||
20 | // 获取菜单信息 | 18 | // 获取菜单信息 |
21 | export function getMenuInfo (data) { | 19 | export function getMenuInfo (data) { |
22 | return request({ | 20 | return request({ | ... | ... |
1 | <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1673321301365" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3462" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M910.617673 211.45497c-29.726022-40.739866-65.373916-76.582189-105.953124-106.533338-31.447223-23.211654-65.346287-42.500976-101.132328-57.574277-17.797341-7.496741-38.217417 1.723248-44.400233 20.018939l0 0c-5.586229 16.531512 2.569522 34.533514 18.648732 41.309848 30.91408 13.027711 60.204174 29.700439 87.38421 49.761334 35.128055 25.927509 65.986877 56.9562 91.719958 92.223425 53.42477 73.218582 81.662905 159.989831 81.662905 250.935146 0 57.551764-11.264555 113.364931-33.480532 165.888168-21.464871 50.748824-52.199872 96.333022-91.352591 135.484717-39.152718 39.153742-84.736916 69.888743-135.484717 91.352591-52.523237 22.215978-108.336404 33.480532-165.888168 33.480532-57.552787 0-113.364931-11.264555-165.889191-33.480532-50.748824-21.464871-96.331999-52.199872-135.484717-91.352591-39.152718-39.152718-69.888743-84.736916-91.353614-135.484717-22.214954-52.523237-33.479509-108.336404-33.479509-165.888168 0-90.842984 28.180829-177.536462 81.495082-250.706949 25.681916-35.244712 56.481386-66.265216 91.545996-92.199888 27.118638-20.056801 56.344263-36.737716 87.192851-49.78794 16.072047-6.798846 24.204262-24.812105 18.594497-41.336454l0 0c-6.207375-18.285458-26.638707-27.478841-44.424792-19.958564-35.712363 15.098883-69.537749 34.399461-100.915387 57.607022-40.505529 29.958312-76.084862 65.791425-105.750509 106.506732C52.210106 296.342312 19.618826 396.581294 19.618826 501.596046c0 66.5016 13.031804 131.033335 38.734186 191.800327 24.818245 58.677401 60.340273 111.367437 105.58064 156.606781 45.240367 45.240367 97.930403 80.763418 156.607804 105.581664 60.766992 25.701358 125.297704 38.734186 191.800327 38.734186 66.502623 0 131.033335-13.031804 191.800327-38.734186 58.677401-24.818245 111.366414-60.341297 156.606781-105.581664 45.240367-45.239344 80.762395-97.92938 105.581664-156.606781 25.701358-60.766992 38.734186-125.297704 38.734186-191.800327C1005.062695 396.463614 972.403878 296.133557 910.617673 211.45497z" fill="#ffffff" p-id="3463"></path><path d="M509.270842 388.009058 509.270842 388.009058c20.261463 0 36.839023-16.57756 36.839023-36.839023L546.109866 75.454506c0-20.261463-16.57756-36.839023-36.839023-36.839023l0 0c-20.261463 0-36.839023 16.57756-36.839023 36.839023l0 275.715529C472.431819 371.431497 489.00938 388.009058 509.270842 388.009058z" fill="#ffffff" p-id="3464"></path></svg> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1673321301365" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3462" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M910.617673 211.45497c-29.726022-40.739866-65.373916-76.582189-105.953124-106.533338-31.447223-23.211654-65.346287-42.500976-101.132328-57.574277-17.797341-7.496741-38.217417 1.723248-44.400233 20.018939l0 0c-5.586229 16.531512 2.569522 34.533514 18.648732 41.309848 30.91408 13.027711 60.204174 29.700439 87.38421 49.761334 35.128055 25.927509 65.986877 56.9562 91.719958 92.223425 53.42477 73.218582 81.662905 159.989831 81.662905 250.935146 0 57.551764-11.264555 113.364931-33.480532 165.888168-21.464871 50.748824-52.199872 96.333022-91.352591 135.484717-39.152718 39.153742-84.736916 69.888743-135.484717 91.352591-52.523237 22.215978-108.336404 33.480532-165.888168 33.480532-57.552787 0-113.364931-11.264555-165.889191-33.480532-50.748824-21.464871-96.331999-52.199872-135.484717-91.352591-39.152718-39.152718-69.888743-84.736916-91.353614-135.484717-22.214954-52.523237-33.479509-108.336404-33.479509-165.888168 0-90.842984 28.180829-177.536462 81.495082-250.706949 25.681916-35.244712 56.481386-66.265216 91.545996-92.199888 27.118638-20.056801 56.344263-36.737716 87.192851-49.78794 16.072047-6.798846 24.204262-24.812105 18.594497-41.336454l0 0c-6.207375-18.285458-26.638707-27.478841-44.424792-19.958564-35.712363 15.098883-69.537749 34.399461-100.915387 57.607022-40.505529 29.958312-76.084862 65.791425-105.750509 106.506732C52.210106 296.342312 19.618826 396.581294 19.618826 501.596046c0 66.5016 13.031804 131.033335 38.734186 191.800327 24.818245 58.677401 60.340273 111.367437 105.58064 156.606781 45.240367 45.240367 97.930403 80.763418 156.607804 105.581664 60.766992 25.701358 125.297704 38.734186 191.800327 38.734186 66.502623 0 131.033335-13.031804 191.800327-38.734186 58.677401-24.818245 111.366414-60.341297 156.606781-105.581664 45.240367-45.239344 80.762395-97.92938 105.581664-156.606781 25.701358-60.766992 38.734186-125.297704 38.734186-191.800327C1005.062695 396.463614 972.403878 296.133557 910.617673 211.45497z" fill="#ffffff" p-id="3463"></path><path d="M509.270842 388.009058 509.270842 388.009058c20.261463 0 36.839023-16.57756 36.839023-36.839023L546.109866 75.454506c0-20.261463-16.57756-36.839023-36.839023-36.839023l0 0c-20.261463 0-36.839023 16.57756-36.839023 36.839023l0 275.715529C472.431819 371.431497 489.00938 388.009058 509.270842 388.009058z" p-id="3464"></path></svg> | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -29,7 +29,7 @@ export default { | ... | @@ -29,7 +29,7 @@ export default { |
29 | sidebarRight, | 29 | sidebarRight, |
30 | }, | 30 | }, |
31 | computed: { | 31 | computed: { |
32 | ...mapGetters(["sidebar", "dicData", "userInfo"]), | 32 | ...mapGetters(["sidebar", "dicData", , "permission_routes", "userInfo"]), |
33 | logoName () { | 33 | logoName () { |
34 | return this.dicData['sysCode'] && this.dicData['sysCode'].filter(item => | 34 | return this.dicData['sysCode'] && this.dicData['sysCode'].filter(item => |
35 | item.DCODE == "systemTitle" | 35 | item.DCODE == "systemTitle" |
... | @@ -55,9 +55,9 @@ export default { | ... | @@ -55,9 +55,9 @@ export default { |
55 | }) | 55 | }) |
56 | .catch((error) => { | 56 | .catch((error) => { |
57 | // console.dir(error); | 57 | // console.dir(error); |
58 | }); | 58 | }) |
59 | }, | 59 | } |
60 | }, | 60 | } |
61 | }; | 61 | }; |
62 | </script> | 62 | </script> |
63 | <style lang="scss" scoped> | 63 | <style lang="scss" scoped> | ... | ... |
1 | <!-- | ||
2 | * @Description: log | ||
3 | * @Autor: renchao | ||
4 | * @LastEditTime: 2023-03-23 16:29:12 | ||
5 | --> | ||
1 | <template> | 6 | <template> |
2 | <el-menu router :default-active="activeMenu" mode="horizontal"> | 7 | <el-menu router :default-active="activeMenu" mode="horizontal"> |
3 | <!-- 权限菜单 --> | 8 | <!-- 权限菜单 --> |
4 | <sidebar-item v-for="route in permission_routes.slice(3, 6)" :key="route.path" :item="route" | 9 | <sidebar-item v-for="route in permission_routes.slice(4, 7)" :key="route.path" :item="route" |
5 | :base-path="route.path" /> | 10 | :base-path="route.path" /> |
6 | <!-- 菜单全部展示 --> | 11 | <!-- 菜单全部展示 --> |
7 | <!-- <sidebar-item v-for="route in asyncRoutes" :key="route.path" :item="route" :base-path="route.path" /> --> | 12 | <!-- <sidebar-item v-for="route in asyncRoutes" :key="route.path" :item="route" :base-path="route.path" /> --> | ... | ... |
... | @@ -2,14 +2,14 @@ | ... | @@ -2,14 +2,14 @@ |
2 | * @Author: xiaomiao 1158771342@qq.com | 2 | * @Author: xiaomiao 1158771342@qq.com |
3 | * @Date: 2023-01-10 09:03:06 | 3 | * @Date: 2023-01-10 09:03:06 |
4 | * @LastEditors: Please set LastEditors | 4 | * @LastEditors: Please set LastEditors |
5 | * @LastEditTime: 2023-03-22 10:43:26 | 5 | * @LastEditTime: 2023-03-23 16:29:24 |
6 | * @FilePath: \监管系统\js-web-jianguan\src\layout\components\Sidebar\sidebarRight.vue | 6 | * @FilePath: \监管系统\js-web-jianguan\src\layout\components\Sidebar\sidebarRight.vue |
7 | * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE | 7 | * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE |
8 | --> | 8 | --> |
9 | <template> | 9 | <template> |
10 | <el-menu router :default-active="activeMenu" mode="horizontal"> | 10 | <el-menu router :default-active="activeMenu" mode="horizontal"> |
11 | <!-- 权限菜单 --> | 11 | <!-- 权限菜单 --> |
12 | <sidebar-item v-for="route in permission_routes.slice(6, 9)" :key="route.path" :item="route" | 12 | <sidebar-item v-for="route in permission_routes.slice(7, 10)" :key="route.path" :item="route" |
13 | :base-path="route.path" /> | 13 | :base-path="route.path" /> |
14 | <!-- 菜单全部展示 --> | 14 | <!-- 菜单全部展示 --> |
15 | <!-- <sidebar-item v-for="route in asyncRoutes" :key="route.path" :item="route" :base-path="route.path" /> --> | 15 | <!-- <sidebar-item v-for="route in asyncRoutes" :key="route.path" :item="route" :base-path="route.path" /> --> | ... | ... |
1 | <!-- | 1 | <!-- |
2 | * @Description: | 2 | * @Description: |
3 | * @Autor: renchao | 3 | * @Autor: renchao |
4 | * @LastEditTime: 2023-03-20 14:22:35 | 4 | * @LastEditTime: 2023-03-23 15:17:24 |
5 | --> | 5 | --> |
6 | <template> | 6 | <template> |
7 | <div class="app-wrapper jgWrapper"> | 7 | <div class="app-wrapper jgWrapper"> |
... | @@ -12,61 +12,60 @@ | ... | @@ -12,61 +12,60 @@ |
12 | </div> | 12 | </div> |
13 | </template> | 13 | </template> |
14 | <script> | 14 | <script> |
15 | import { AppMain, Navbar, Sidebar, TagsView } from './components' | 15 | import { AppMain, Navbar, Sidebar, TagsView } from './components' |
16 | import ResizeMixin from './mixin/ResizeHandler' | 16 | import ResizeMixin from './mixin/ResizeHandler' |
17 | import { mapState } from 'vuex' | 17 | import { mapState } from 'vuex' |
18 | export default { | 18 | export default { |
19 | name: 'Layout', | 19 | name: 'Layout', |
20 | components: { | 20 | components: { |
21 | AppMain, | 21 | AppMain, |
22 | Navbar, | 22 | Navbar, |
23 | Sidebar, | 23 | Sidebar, |
24 | TagsView | 24 | TagsView |
25 | }, | 25 | }, |
26 | created () { | 26 | created () { |
27 | console.log("hhh"); | 27 | this.$store.dispatch("products/setData", "BDCJGPT"); |
28 | this.$store.dispatch("products/setData", "BDCJGPT"); | 28 | }, |
29 | }, | 29 | mixins: [ResizeMixin], |
30 | mixins: [ResizeMixin], | 30 | computed: { |
31 | computed: { | 31 | ...mapState({ |
32 | ...mapState({ | 32 | sidebar: state => state.app.sidebar, |
33 | sidebar: state => state.app.sidebar, | 33 | needTagsView: state => state.settings.tagsView, |
34 | needTagsView: state => state.settings.tagsView, | 34 | fixedHeader: state => state.settings.fixedHeader |
35 | fixedHeader: state => state.settings.fixedHeader | 35 | }) |
36 | }) | ||
37 | } | ||
38 | } | 36 | } |
37 | } | ||
39 | </script> | 38 | </script> |
40 | <style lang="scss"> | 39 | <style lang="scss"> |
41 | @import "~@/styles/jgSidebar.scss"; | 40 | @import "~@/styles/jgSidebar.scss"; |
42 | </style> | 41 | </style> |
43 | <style lang="scss" scoped> | 42 | <style lang="scss" scoped> |
44 | @import "~@/styles/mixin.scss"; | 43 | @import "~@/styles/mixin.scss"; |
45 | 44 | ||
46 | .app-wrapper { | 45 | .app-wrapper { |
47 | @include clearfix; | 46 | @include clearfix; |
48 | position: relative; | 47 | position: relative; |
49 | height: 100%; | 48 | height: 100%; |
50 | width: 100%; | 49 | width: 100%; |
51 | min-width: 1280px; | 50 | min-width: 1280px; |
52 | background: url("~@/image/bg.png") no-repeat; | 51 | background: url("~@/image/bg.png") no-repeat; |
53 | background-size: 100% 100%; | 52 | background-size: 100% 100%; |
54 | padding: 12px; | 53 | padding: 12px; |
55 | box-sizing: border-box; | 54 | box-sizing: border-box; |
56 | 55 | ||
57 | &.mobile.openSidebar { | 56 | &.mobile.openSidebar { |
58 | position: fixed; | 57 | position: fixed; |
59 | top: 0; | 58 | top: 0; |
60 | } | ||
61 | } | 59 | } |
60 | } | ||
62 | 61 | ||
63 | .appMain { | 62 | .appMain { |
64 | // min-width: 1280px; | 63 | // min-width: 1280px; |
65 | height: calc(100vh - 101px) !important; | 64 | height: calc(100vh - 101px) !important; |
66 | box-sizing: border-box; | 65 | box-sizing: border-box; |
67 | 66 | ||
68 | .app-main { | 67 | .app-main { |
69 | height: 100%; | 68 | height: 100%; |
70 | } | ||
71 | } | 69 | } |
70 | } | ||
72 | </style> | 71 | </style> | ... | ... |
... | @@ -6,15 +6,13 @@ | ... | @@ -6,15 +6,13 @@ |
6 | <h4>不动产登记上报系统</h4> | 6 | <h4>不动产登记上报系统</h4> |
7 | </div> | 7 | </div> |
8 | <div class="right-menu"> | 8 | <div class="right-menu"> |
9 | <el-dropdown class="avatar-container right-menu-item hover-effect" trigger="hover" @command="handleCommand"> | 9 | <el-dropdown class="avatar-container right-menu-item hover-effect" trigger="hover"> |
10 | <div class="avatar-wrapper"> | 10 | <div class="user"> |
11 | <span style="padding-right:10px">{{ name }}</span> | 11 | {{ userName }} |
12 | <img :src="avatar + '?imageView2/1/w/80/h/80'" class="user-avatar" /> | 12 | <span @click="onCancel"> |
13 | <i class="el-icon-switch-button"></i> | ||
14 | </span> | ||
13 | </div> | 15 | </div> |
14 | <el-dropdown-menu slot="dropdown"> | ||
15 | <el-dropdown-item command="a">个人中心</el-dropdown-item> | ||
16 | <el-dropdown-item command="b">退出</el-dropdown-item> | ||
17 | </el-dropdown-menu> | ||
18 | </el-dropdown> | 16 | </el-dropdown> |
19 | </div> | 17 | </div> |
20 | </div> | 18 | </div> |
... | @@ -23,17 +21,15 @@ | ... | @@ -23,17 +21,15 @@ |
23 | <script> | 21 | <script> |
24 | import { mapGetters } from 'vuex' | 22 | import { mapGetters } from 'vuex' |
25 | import Breadcrumb from './Breadcrumb' | 23 | import Breadcrumb from './Breadcrumb' |
26 | import defaultSettings from '@/settings' | 24 | import { logout } from "@/api/login.js"; |
27 | export default { | 25 | export default { |
28 | components: { | 26 | components: { |
29 | Breadcrumb | 27 | Breadcrumb |
30 | }, | 28 | }, |
31 | computed: { | 29 | computed: { |
32 | ...mapGetters(['sidebar', 'avatar', 'name']) | 30 | ...mapGetters(["sidebar", "dicData", "userInfo"]), |
33 | }, | 31 | userName () { |
34 | data () { | 32 | return this.userInfo ? this.userInfo.name : "" |
35 | return { | ||
36 | title: defaultSettings.title | ||
37 | } | 33 | } |
38 | }, | 34 | }, |
39 | methods: { | 35 | methods: { |
... | @@ -44,11 +40,22 @@ export default { | ... | @@ -44,11 +40,22 @@ export default { |
44 | themeChange (val) { | 40 | themeChange (val) { |
45 | this.$store.dispatch('app/updateTheme', val) | 41 | this.$store.dispatch('app/updateTheme', val) |
46 | }, | 42 | }, |
47 | handleCommand (command) { | 43 | onCancel () { |
48 | if (command == 'a') { | 44 | logout() |
49 | } else { | 45 | .then((res) => { |
50 | 46 | sessionStorage.removeItem("token"); | |
51 | } | 47 | this.$store.dispatch("user/resetState"); |
48 | this.$store.dispatch("permission/resetRoutes"); | ||
49 | this.$router.replace({ | ||
50 | path: "/sb", | ||
51 | query: { | ||
52 | redirect: this.$route.fullPath, | ||
53 | }, | ||
54 | }); | ||
55 | }) | ||
56 | .catch((error) => { | ||
57 | // console.dir(error); | ||
58 | }) | ||
52 | } | 59 | } |
53 | } | 60 | } |
54 | } | 61 | } |
... | @@ -79,45 +86,6 @@ export default { | ... | @@ -79,45 +86,6 @@ export default { |
79 | } | 86 | } |
80 | } | 87 | } |
81 | 88 | ||
82 | .NoticeBar { | ||
83 | position: absolute; | ||
84 | bottom: 0; | ||
85 | } | ||
86 | |||
87 | .el-dropdown-menu { | ||
88 | padding: 0 !important; | ||
89 | border: 1px solid #ebeef5; | ||
90 | box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.12); | ||
91 | border-radius: 4px 0 0 4px 4px; | ||
92 | |||
93 | .el-dropdown-menu__item { | ||
94 | text-align: center; | ||
95 | margin-top: 0 !important; | ||
96 | font-size: 14px; | ||
97 | font-weight: 400; | ||
98 | color: #4a4a4a; | ||
99 | width: 140px; | ||
100 | height: 36px; | ||
101 | line-height: 36px; | ||
102 | } | ||
103 | |||
104 | .el-dropdown-menu__item:nth-child(6) { | ||
105 | border-top: 1px solid #ebeef5; | ||
106 | } | ||
107 | |||
108 | .popper__arrow { | ||
109 | top: -11px !important; | ||
110 | left: 110px !important; | ||
111 | transform: rotate(0deg) scale(2); | ||
112 | } | ||
113 | |||
114 | .el-dropdown-menu__item:not(.is-disabled):hover, | ||
115 | .el-dropdown-menu__item:focus { | ||
116 | background: #f6f7f9; | ||
117 | color: #4a4a4a; | ||
118 | } | ||
119 | } | ||
120 | |||
121 | .navbar { | 89 | .navbar { |
122 | height: $headerHeight; | 90 | height: $headerHeight; |
123 | overflow: hidden; | 91 | overflow: hidden; |
... | @@ -133,117 +101,12 @@ export default { | ... | @@ -133,117 +101,12 @@ export default { |
133 | width: 300px; | 101 | width: 300px; |
134 | } | 102 | } |
135 | 103 | ||
136 | .backdrop { | 104 | .right-menu-item { |
137 | flex: 1; | 105 | &.hover-effect { |
138 | width: 60%; | ||
139 | background-size: 100% 100%; | ||
140 | height: $headerHeight; | ||
141 | display: flex; | ||
142 | align-items: center; | ||
143 | } | ||
144 | |||
145 | .hamburger-container { | ||
146 | line-height: 43px; | ||
147 | height: 100%; | ||
148 | float: left; | ||
149 | cursor: pointer; | ||
150 | transition: background 0.3s; | ||
151 | -webkit-tap-highlight-color: transparent; | ||
152 | |||
153 | &:hover { | ||
154 | background: rgba(0, 0, 0, 0.025); | ||
155 | } | ||
156 | } | ||
157 | |||
158 | .breadcrumb-container { | ||
159 | float: left; | ||
160 | } | ||
161 | |||
162 | .right-menu { | ||
163 | float: right; | ||
164 | height: 100%; | ||
165 | line-height: 50px; | ||
166 | display: flex; | ||
167 | align-items: center; | ||
168 | |||
169 | .function { | ||
170 | margin: 0 15px; | ||
171 | cursor: pointer; | ||
172 | } | ||
173 | |||
174 | .shutdown { | ||
175 | font-size: 20px; | ||
176 | margin-left: 15px; | ||
177 | cursor: pointer; | ||
178 | } | ||
179 | |||
180 | .organization-item { | ||
181 | margin-right: 40px; | ||
182 | margin-top: -40px !important; | ||
183 | } | ||
184 | |||
185 | .item { | ||
186 | margin-right: 40px; | ||
187 | margin-top: -20px; | ||
188 | line-height: 18.4px; | ||
189 | cursor: pointer; | 106 | cursor: pointer; |
190 | position: relative; | 107 | transition: background 0.3s; |
191 | |||
192 | .item-box { | ||
193 | position: absolute; | ||
194 | top: -5px; | ||
195 | left: 3px; | ||
196 | width: 100%; | ||
197 | min-width: 25px; | ||
198 | height: 25px; | ||
199 | cursor: pointer; | ||
200 | z-index: 100; | ||
201 | } | ||
202 | } | ||
203 | |||
204 | &:focus { | ||
205 | outline: none; | ||
206 | } | ||
207 | |||
208 | .right-menu-item { | ||
209 | display: inline-block; | ||
210 | height: 100%; | ||
211 | font-size: 18px; | ||
212 | color: #fff; | ||
213 | vertical-align: text-bottom; | ||
214 | |||
215 | &.hover-effect { | ||
216 | cursor: pointer; | ||
217 | transition: background 0.3s; | ||
218 | display: flex; | ||
219 | align-items: center; | ||
220 | |||
221 | &:hover { | ||
222 | background: rgba(0, 0, 0, 0.025); | ||
223 | } | ||
224 | } | ||
225 | } | ||
226 | |||
227 | .avatar-wrapper { | ||
228 | position: relative; | ||
229 | display: flex; | 108 | display: flex; |
230 | height: 40px; | ||
231 | align-items: center; | 109 | align-items: center; |
232 | |||
233 | .user-avatar { | ||
234 | cursor: pointer; | ||
235 | width: 35px; | ||
236 | height: 35px; | ||
237 | border-radius: 50%; | ||
238 | } | ||
239 | |||
240 | .el-icon-caret-bottom { | ||
241 | cursor: pointer; | ||
242 | position: absolute; | ||
243 | right: -15px; | ||
244 | top: 17px; | ||
245 | font-size: 12px; | ||
246 | } | ||
247 | } | 110 | } |
248 | } | 111 | } |
249 | } | 112 | } | ... | ... |
1 | <!-- | 1 | <!-- |
2 | * @Description: | 2 | * @Description: |
3 | * @Autor: renchao | 3 | * @Autor: renchao |
4 | * @LastEditTime: 2023-03-06 16:18:21 | 4 | * @LastEditTime: 2023-03-23 16:17:42 |
5 | --> | 5 | --> |
6 | <template> | 6 | <template> |
7 | <div> | 7 | <div> |
... | @@ -19,41 +19,38 @@ | ... | @@ -19,41 +19,38 @@ |
19 | </template> | 19 | </template> |
20 | 20 | ||
21 | <script> | 21 | <script> |
22 | import { mapGetters } from 'vuex' | 22 | import { mapGetters } from 'vuex' |
23 | import Logo from './Logo' | 23 | import Logo from './Logo' |
24 | import defaultSettings from '@/settings' | 24 | import defaultSettings from '@/settings' |
25 | import SidebarItem from './SidebarItem' | 25 | import SidebarItem from './SidebarItem' |
26 | import variables from '@/styles/variables.scss' | 26 | import variables from '@/styles/variables.scss' |
27 | import { asyncRoutes } from '@/router' | 27 | import { asyncRoutes } from '@/router' |
28 | export default { | 28 | export default { |
29 | components: { SidebarItem, Logo }, | 29 | components: { SidebarItem, Logo }, |
30 | data () { | 30 | data () { |
31 | return { | 31 | return { |
32 | title: defaultSettings.title | 32 | title: defaultSettings.title |
33 | } | ||
34 | }, | ||
35 | computed: { | ||
36 | ...mapGetters(['permission_routes', 'sidebar']), | ||
37 | activeMenu () { | ||
38 | const route = this.$route | ||
39 | const { meta, path } = route | ||
40 | if (meta.activeMenu) { | ||
41 | return meta.activeMenu | ||
33 | } | 42 | } |
43 | return path | ||
34 | }, | 44 | }, |
35 | created () { | 45 | variables () { |
36 | console.log(this.permission_routes); | 46 | return variables |
37 | }, | ||
38 | computed: { | ||
39 | ...mapGetters(['permission_routes', 'sidebar']), | ||
40 | activeMenu () { | ||
41 | const route = this.$route | ||
42 | const { meta, path } = route | ||
43 | if (meta.activeMenu) { | ||
44 | return meta.activeMenu | ||
45 | } | ||
46 | return path | ||
47 | }, | ||
48 | variables () { | ||
49 | return variables | ||
50 | }, | ||
51 | asyncRoutes () { | ||
52 | return asyncRoutes | ||
53 | } | ||
54 | }, | 47 | }, |
55 | mounted () { | 48 | asyncRoutes () { |
56 | 49 | return asyncRoutes | |
57 | } | 50 | } |
51 | }, | ||
52 | mounted () { | ||
53 | console.log(this.permission_routes, 'permission_routespermission_routes'); | ||
58 | } | 54 | } |
55 | } | ||
59 | </script> | 56 | </script> | ... | ... |
1 | <template> | 1 | <template> |
2 | <div id="tags-view-container" class="tags-view-container"> | 2 | <div id="tags-view-container" class="tags-view-container"> |
3 | <scroll-pane ref="scrollPane" class="tags-view-wrapper" @scroll="handleScroll"> | 3 | <scroll-pane ref="scrollPane" class="tags-view-wrapper" @scroll="handleScroll"> |
4 | <router-link v-for="tag in visitedViews" ref="tag" :key="tag.path" :class="isActive(tag)?'active':''" | 4 | <router-link v-for="tag in visitedViews" ref="tag" :key="tag.path" :class="isActive(tag) ? 'active' : ''" |
5 | :to="{ path: tag.path, query: tag.query, fullPath: tag.fullPath }" tag="span" class="tags-view-item" | 5 | :to="{ path: tag.path, query: tag.query, fullPath: tag.fullPath }" tag="span" class="tags-view-item" |
6 | @click.middle.native="!isAffix(tag)?closeSelectedTag(tag):''" | 6 | @click.middle.native="!isAffix(tag) ? closeSelectedTag(tag) : ''" @contextmenu.prevent.native="openMenu(tag, $event)"> |
7 | @contextmenu.prevent.native="openMenu(tag,$event)"> | ||
8 | {{ tag.title }} | 7 | {{ tag.title }} |
9 | <span v-if="!isAffix(tag)" class="el-icon-close" @click.prevent.stop="closeSelectedTag(tag)" /> | 8 | <span v-if="!isAffix(tag)" class="el-icon-close" @click.prevent.stop="closeSelectedTag(tag)" /> |
10 | </router-link> | 9 | </router-link> |
11 | </scroll-pane> | 10 | </scroll-pane> |
12 | <ul v-show="visible" :style="{left:left+'px',top:top+'px'}" class="contextmenu"> | 11 | <ul v-show="visible" :style="{ left: left + 'px', top: top + 'px' }" class="contextmenu"> |
13 | <li @click="refreshSelectedTag(selectedTag)">Refresh</li> | 12 | <li @click="refreshSelectedTag(selectedTag)">Refresh</li> |
14 | <li v-if="!isAffix(selectedTag)" @click="closeSelectedTag(selectedTag)">Close</li> | 13 | <li v-if="!isAffix(selectedTag)" @click="closeSelectedTag(selectedTag)">Close</li> |
15 | <li @click="closeOthersTags">Close Others</li> | 14 | <li @click="closeOthersTags">Close Others</li> |
... | @@ -200,6 +199,7 @@ export default { | ... | @@ -200,6 +199,7 @@ export default { |
200 | padding-top: 3px; | 199 | padding-top: 3px; |
201 | box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .12), 0 0 3px 0 rgba(0, 0, 0, .04); | 200 | box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .12), 0 0 3px 0 rgba(0, 0, 0, .04); |
202 | margin-bottom: 5px; | 201 | margin-bottom: 5px; |
202 | |||
203 | .tags-view-wrapper { | 203 | .tags-view-wrapper { |
204 | .tags-view-item { | 204 | .tags-view-item { |
205 | display: inline-block; | 205 | display: inline-block; | ... | ... |
... | @@ -2,7 +2,7 @@ | ... | @@ -2,7 +2,7 @@ |
2 | * @Author: yangwei | 2 | * @Author: yangwei |
3 | * @Date: 2023-01-16 09:10:12 | 3 | * @Date: 2023-01-16 09:10:12 |
4 | * @LastEditors: Please set LastEditors | 4 | * @LastEditors: Please set LastEditors |
5 | * @LastEditTime: 2023-03-21 15:00:04 | 5 | * @LastEditTime: 2023-03-23 15:15:02 |
6 | * @FilePath: \bdcjg-web\src\main.js | 6 | * @FilePath: \bdcjg-web\src\main.js |
7 | * @Description: | 7 | * @Description: |
8 | * | 8 | * | ... | ... |
src/mixins/login.js
0 → 100644
1 | /* | 1 | /* |
2 | * @Description: | 2 | * @Description: |
3 | * @Autor: renchao | 3 | * @Autor: renchao |
4 | * @LastEditTime: 2023-03-21 13:52:58 | 4 | * @LastEditTime: 2023-03-23 16:37:20 |
5 | */ | 5 | */ |
6 | import Vue from 'vue' | ||
6 | import router from "./router"; | 7 | import router from "./router"; |
7 | import store from "./store"; | 8 | import store from "./store"; |
8 | import { getMenuInfo } from "@/api/user"; | 9 | import { getMenuInfo } from "@/api/user"; |
... | @@ -14,7 +15,6 @@ import Cookies from "js-cookie"; | ... | @@ -14,7 +15,6 @@ import Cookies from "js-cookie"; |
14 | NProgress.configure({ showSpinner: false }); | 15 | NProgress.configure({ showSpinner: false }); |
15 | router.beforeEach(async (to, from, next) => { | 16 | router.beforeEach(async (to, from, next) => { |
16 | getTheme() | 17 | getTheme() |
17 | |||
18 | NProgress.start(); | 18 | NProgress.start(); |
19 | window.document.documentElement.setAttribute("data-theme", 'blue'); | 19 | window.document.documentElement.setAttribute("data-theme", 'blue'); |
20 | document.title = getPageTitle(to.meta.title); | 20 | document.title = getPageTitle(to.meta.title); |
... | @@ -23,17 +23,15 @@ router.beforeEach(async (to, from, next) => { | ... | @@ -23,17 +23,15 @@ router.beforeEach(async (to, from, next) => { |
23 | let hasAddRoute = store.state.permission.addRoutes; | 23 | let hasAddRoute = store.state.permission.addRoutes; |
24 | if (to.path == "/sb" || to.path == "/jg") { | 24 | if (to.path == "/sb" || to.path == "/jg") { |
25 | localStorage.removeItem("token"); | 25 | localStorage.removeItem("token"); |
26 | sessionStorage.setItem("psth", to.path) | ||
27 | next(); | 26 | next(); |
28 | } else { | 27 | } else { |
29 | let code = sessionStorage.getItem("psth") == "/sb" ? "BDCSBPT" : "BDCJGPT" | 28 | let code = Vue.prototype.BASE_API.THEME == "sb" ? "BDCSBPT" : "BDCJGPT" |
30 | //判断token是否存在 | 29 | //判断token是否存在 |
31 | const hasToken = localStorage.getItem("token"); | 30 | const hasToken = localStorage.getItem("token"); |
32 | if (hasToken) { | 31 | if (hasToken) { |
33 | //请求用户信息 | 32 | //请求用户信息 |
34 | if (!hasUser) { | 33 | if (!hasUser) { |
35 | store.dispatch("user/getUserInfo"); | 34 | store.dispatch("user/getUserInfo"); |
36 | // import("@/styles/public.scss"); | ||
37 | } | 35 | } |
38 | if (hasAddRoute) { | 36 | if (hasAddRoute) { |
39 | next(); | 37 | next(); |
... | @@ -52,19 +50,20 @@ router.beforeEach(async (to, from, next) => { | ... | @@ -52,19 +50,20 @@ router.beforeEach(async (to, from, next) => { |
52 | if (!hasAddDict) { | 50 | if (!hasAddDict) { |
53 | await store.dispatch("dict/generateDic"); | 51 | await store.dispatch("dict/generateDic"); |
54 | } | 52 | } |
55 | if (routeTo && routeTo !== "/") { | 53 | if (routeTo && routeTo !== "/" && routeTo !== "/sb" && routeTo !== "/jg") { |
56 | next({ ...to, replace: true }); | 54 | next({ ...to, replace: true }); |
57 | } else { | 55 | } else { |
58 | next("/home"); | 56 | next(); |
59 | } | 57 | } |
60 | } | 58 | } |
61 | } else if (sessionStorage.getItem("psth")) { | ||
62 | next(sessionStorage.getItem("psth")); | ||
63 | } else { | 59 | } else { |
64 | next("/jg"); | 60 | if (code == 'BDCSBPT') { |
61 | next('/sb'); | ||
62 | } else { | ||
63 | next('/jg'); | ||
64 | } | ||
65 | } | 65 | } |
66 | } | 66 | } |
67 | |||
68 | NProgress.done(); | 67 | NProgress.done(); |
69 | }); | 68 | }); |
70 | router.afterEach((to) => { | 69 | router.afterEach((to) => { | ... | ... |
... | @@ -29,15 +29,24 @@ export const constantRoutes = [ | ... | @@ -29,15 +29,24 @@ export const constantRoutes = [ |
29 | name: "loginsb", | 29 | name: "loginsb", |
30 | component: () => import("@/views/loginsb/index.vue"), | 30 | component: () => import("@/views/loginsb/index.vue"), |
31 | }, | 31 | }, |
32 | // 监管首页 | ||
33 | { | 32 | { |
34 | path: '/', | 33 | path: '/', |
34 | redirect: to => { | ||
35 | if (Vue.prototype.BASE_API.THEME == 'jg') { | ||
36 | return { path: '/jg' } | ||
37 | } else { | ||
38 | return { path: '/sb' } | ||
39 | } | ||
40 | }, | ||
41 | }, | ||
42 | // 监管首页 | ||
43 | { | ||
44 | path: '/home', | ||
35 | component: Layout, | 45 | component: Layout, |
36 | redirect: '/jg', | ||
37 | meta: { title: '首页' }, | 46 | meta: { title: '首页' }, |
38 | children: [ | 47 | children: [ |
39 | { | 48 | { |
40 | path: 'home', | 49 | path: '', |
41 | component: () => import('@/views/home/index'), | 50 | component: () => import('@/views/home/index'), |
42 | name: 'home', | 51 | name: 'home', |
43 | meta: { title: '工作台', icon: 'workbench', affix: true } | 52 | meta: { title: '工作台', icon: 'workbench', affix: true } | ... | ... |
1 | const state = { | 1 | const state = { |
2 | visitedViews: [{ | 2 | visitedViews: [] |
3 | 'fullPath': "/home", | ||
4 | 'meta': { | ||
5 | affix: true | ||
6 | }, | ||
7 | 'name': "Dashboard", | ||
8 | 'path': "/home", | ||
9 | 'title': "工作台" | ||
10 | }] | ||
11 | } | 3 | } |
12 | |||
13 | const mutations = { | 4 | const mutations = { |
14 | ADD_VISITED_VIEW: (state, view) => { | 5 | ADD_VISITED_VIEW: (state, view) => { |
15 | if (state.visitedViews.some(v => v.path === view.path)) return | 6 | if (state.visitedViews.some(v => v.path === view.path)) return | ... | ... |
1 | /* | ||
2 | * @Description: | ||
3 | * @Autor: renchao | ||
4 | * @LastEditTime: 2023-03-23 15:26:37 | ||
5 | */ | ||
1 | 6 | ||
2 | var Layout; | 7 | var Layout; |
3 | let ApiUrl = localStorage.getItem('ApiUrl') | 8 | let ApiUrl = localStorage.getItem('ApiUrl') |
... | @@ -19,7 +24,6 @@ export default function filterAsyncRouter (routers) { | ... | @@ -19,7 +24,6 @@ export default function filterAsyncRouter (routers) { |
19 | item.component = Layout | 24 | item.component = Layout |
20 | } else { | 25 | } else { |
21 | item.component = loadView(item.uri) | 26 | item.component = loadView(item.uri) |
22 | console.log(item.component, 'item.componentitem.component'); | ||
23 | } | 27 | } |
24 | item.meta = { | 28 | item.meta = { |
25 | title: item.name, | 29 | title: item.name, | ... | ... |
... | @@ -2,7 +2,7 @@ | ... | @@ -2,7 +2,7 @@ |
2 | <div class="bg"> | 2 | <div class="bg"> |
3 | <div class="login-logo"></div> | 3 | <div class="login-logo"></div> |
4 | <div class="login-inner-bg login"> | 4 | <div class="login-inner-bg login"> |
5 | <h2>{{ productName }}</h2> | 5 | <h2>{{ BASE_API.TITLE }}</h2> |
6 | <div class="user_style"> | 6 | <div class="user_style"> |
7 | <h3>欢迎登录</h3> | 7 | <h3>欢迎登录</h3> |
8 | <el-form :model="user" :rules="rules" ref="user" id="loginform" class="demo-ruleForm"> | 8 | <el-form :model="user" :rules="rules" ref="user" id="loginform" class="demo-ruleForm"> |
... | @@ -21,12 +21,11 @@ | ... | @@ -21,12 +21,11 @@ |
21 | </div> | 21 | </div> |
22 | </div> | 22 | </div> |
23 | </template> | 23 | </template> |
24 | |||
25 | <script> | 24 | <script> |
25 | import { getMenuInfo } from "@/api/user"; | ||
26 | import { loginIn } from "@/api/login.js"; | 26 | import { loginIn } from "@/api/login.js"; |
27 | import { api, getAction } from "@/api/manageApi"; | ||
28 | export default { | 27 | export default { |
29 | name: "Login", | 28 | name: "jgLogin", |
30 | data () { | 29 | data () { |
31 | return { | 30 | return { |
32 | user: { | 31 | user: { |
... | @@ -34,41 +33,11 @@ export default { | ... | @@ -34,41 +33,11 @@ export default { |
34 | password: "", | 33 | password: "", |
35 | checkStatus: false, | 34 | checkStatus: false, |
36 | }, | 35 | }, |
37 | productName: "", | ||
38 | rules: { | 36 | rules: { |
39 | account: [{ required: true, message: "请填写帐号", trigger: "blur" }], | 37 | account: [{ required: true, message: "请填写帐号", trigger: "blur" }], |
40 | password: [{ required: true, message: "请填写密码", trigger: "blur" }], | 38 | password: [{ required: true, message: "请填写密码", trigger: "blur" }], |
41 | }, | ||
42 | }; | ||
43 | }, | ||
44 | created () { | ||
45 | const params = {}; | ||
46 | const queryOptions = { | ||
47 | conditionGroup: { | ||
48 | conditions: [ | ||
49 | { | ||
50 | property: "code", | ||
51 | value: "BDCJGPT", | ||
52 | operator: "EQ", | ||
53 | }, | ||
54 | ], | ||
55 | queryRelation: "AND", | ||
56 | }, | ||
57 | }; | ||
58 | params.queryOptions = JSON.stringify(queryOptions); | ||
59 | //根据子系统code获取子系统详细信息 | ||
60 | getAction(api.subsystem, params).then((res) => { | ||
61 | if (res.status === 1) { | ||
62 | this.productName = res.content[0].name; | ||
63 | this.$store.dispatch("products/setData", res.content[0].code); | ||
64 | sessionStorage.setItem("products", res.content[0].code) | ||
65 | } else { | ||
66 | this.$message.error({ message: res.message, showClose: true }); | ||
67 | } | 39 | } |
68 | }); | 40 | } |
69 | }, | ||
70 | mounted () { | ||
71 | // this.checkUserName(); | ||
72 | }, | 41 | }, |
73 | methods: { | 42 | methods: { |
74 | //记住用户名 | 43 | //记住用户名 |
... | @@ -87,30 +56,20 @@ export default { | ... | @@ -87,30 +56,20 @@ export default { |
87 | } | 56 | } |
88 | }, | 57 | }, |
89 | login (user) { | 58 | login (user) { |
90 | var self = this; | 59 | var self = this |
91 | this.$refs[user].validate((valid) => { | 60 | this.$refs[user].validate(async (valid) => { |
92 | if (valid) { | 61 | if (valid) { |
93 | loginIn(self.user.account, self.user.password) | 62 | let res = await loginIn(self.user.account, self.user.password) |
94 | .then((res) => { | 63 | if (res.status == 1) { |
95 | if (res.status === 1) { | 64 | localStorage.setItem("token", `Bearer ${res.content}`); |
96 | //存储token | 65 | //登录成功后需判断有无重定向,没有重定向则跳转首页 |
97 | localStorage.setItem("token", `Bearer ${res.content}`); | 66 | this.$router.replace(this.$route.query.redirect || "/home"); |
98 | //登录成功后需判断有无重定向,没有重定向则跳转首页 | 67 | } |
99 | console.log(this.$route.query.redirect); | ||
100 | this.$router.replace(this.$route.query.redirect || "/home"); | ||
101 | } else { | ||
102 | //错误处理 | ||
103 | } | ||
104 | }) | ||
105 | .catch((error) => { | ||
106 | // console.dir(error); | ||
107 | }); | ||
108 | } | 68 | } |
109 | }); | 69 | }) |
110 | }, | 70 | } |
111 | }, | 71 | } |
112 | components: {}, | 72 | } |
113 | }; | ||
114 | </script> | 73 | </script> |
115 | <style scoped lang="scss"> | 74 | <style scoped lang="scss"> |
116 | .username, | 75 | .username, | ... | ... |
... | @@ -2,7 +2,7 @@ | ... | @@ -2,7 +2,7 @@ |
2 | <div class="bg"> | 2 | <div class="bg"> |
3 | <div class="title"> | 3 | <div class="title"> |
4 | <img src="../../image/bdclogo.png" alt=""> | 4 | <img src="../../image/bdclogo.png" alt=""> |
5 | <h2>{{ productName }}</h2> | 5 | <h2>{{ BASE_API.TITLE }}</h2> |
6 | </div> | 6 | </div> |
7 | <div class="login-inner-bg login"> | 7 | <div class="login-inner-bg login"> |
8 | <div class="user_style"> | 8 | <div class="user_style"> |
... | @@ -12,19 +12,21 @@ | ... | @@ -12,19 +12,21 @@ |
12 | <el-input class="username" v-model="user.account" placeholder="请输入用户名"></el-input> | 12 | <el-input class="username" v-model="user.account" placeholder="请输入用户名"></el-input> |
13 | </el-form-item> | 13 | </el-form-item> |
14 | <el-form-item prop="password"> | 14 | <el-form-item prop="password"> |
15 | <el-input type="password" class="password" @keyup.native="login('user')" v-model="user.password" | 15 | <el-input type="password" class="password" v-model="user.password" placeholder="请输入密码" |
16 | placeholder="请输入密码" show-password></el-input> | 16 | show-password></el-input> |
17 | </el-form-item> | 17 | </el-form-item> |
18 | <el-form-item prop="yz"> | 18 | <!-- <el-form-item prop="yz"> |
19 | <div class="flex-container"> | 19 | <div class="flex-container"> |
20 | <div class="flex-input"> | 20 | <div class="flex-input"> |
21 | <el-input class="yz" @keyup.native="login('user')" v-model="user.yz" placeholder="请输入验证码"></el-input> | 21 | <el-input class="yz" @keyup.native="login('user')" v-model="user.yz" placeholder="请输入验证码"></el-input> |
22 | </div> | 22 | </div> |
23 | <div class="flex-line"></div> | 23 | <div class="flex-line"></div> |
24 | <div class="flex-img"><canvas id="s-canvas" ref="s-canvas"></canvas></div> | 24 | <div class="flex-img"><canvas id="s-canvas" ref="s-canvas"></canvas></div> |
25 | <div class="flex-renovate"><font id="renovate" @click="verification">换一批</font></div> | 25 | <div class="flex-renovate"> |
26 | <font id="renovate" @click="verification">换一批</font> | ||
27 | </div> | ||
26 | </div> | 28 | </div> |
27 | </el-form-item> | 29 | </el-form-item> --> |
28 | <el-form-item class="login-btn"> | 30 | <el-form-item class="login-btn"> |
29 | <el-button type="primary" style="width: 100%" @click="login('user')">登录</el-button> | 31 | <el-button type="primary" style="width: 100%" @click="login('user')">登录</el-button> |
30 | </el-form-item> | 32 | </el-form-item> |
... | @@ -35,308 +37,283 @@ | ... | @@ -35,308 +37,283 @@ |
35 | </template> | 37 | </template> |
36 | 38 | ||
37 | <script> | 39 | <script> |
38 | import { loginIn } from "@/api/login.js"; | 40 | import { getMenuInfo } from "@/api/user"; |
39 | import { api, getAction } from "@/api/manageApi"; | 41 | import { loginIn } from "@/api/login.js"; |
40 | export default { | 42 | export default { |
41 | name: "Login", | 43 | name: "sbLogin", |
42 | data () { | 44 | data () { |
43 | return { | 45 | return { |
44 | user: { | 46 | user: { |
45 | account: "", | 47 | account: "", |
46 | password: "", | 48 | password: "", |
47 | yz: "", | 49 | yz: "", |
48 | checkStatus: false, | 50 | checkStatus: false, |
49 | }, | 51 | }, |
50 | productName: "", | 52 | productName: "", |
51 | rules: { | 53 | rules: { |
52 | account: [{ required: true, message: "请填写帐号", trigger: "blur" }], | 54 | account: [{ required: true, message: "请填写帐号", trigger: "blur" }], |
53 | password: [{ required: true, message: "请填写密码", trigger: "blur" }], | 55 | password: [{ required: true, message: "请填写密码", trigger: "blur" }], |
54 | }, | 56 | }, |
55 | }; | 57 | }; |
58 | }, | ||
59 | methods: { | ||
60 | verification () { | ||
61 | let str = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ', code = '', i = 0; | ||
62 | for (; i++ < 4;) code += str[Math.floor(Math.random() * (str.length - 0) + 0)]; | ||
63 | setTimeout(() => { | ||
64 | let canvas = document.getElementById("s-canvas"), ctx = canvas.getContext("2d"); | ||
65 | canvas.width = 80; | ||
66 | canvas.height = 28; | ||
67 | ctx.fillStyle = '#ffffff'; | ||
68 | ctx.fillRect(0, 0, 80, 28); | ||
69 | for (i = 0; i < code.length; i++) { this.drawText(ctx, code[i], i); } | ||
70 | }, 0); | ||
56 | }, | 71 | }, |
57 | created () { | 72 | drawText (ctx, txt, i) { |
58 | this.verification(); | 73 | ctx.fillStyle = this.randomColor(50, 160); |
59 | const params = {}; | 74 | ctx.font = "18px SimHei"; |
60 | const queryOptions = { | 75 | let x = (i + 1) * (80 / (4 + 1)), y = this.randomNum(18, 28 - 5); |
61 | conditionGroup: { | 76 | ctx.translate(x, y); |
62 | conditions: [ | 77 | ctx.fillText(txt, 0, 0); |
63 | { | 78 | ctx.rotate((-0 * Math.PI) / 180); |
64 | property: "code", | 79 | ctx.translate(-x, -y); |
65 | value: "BDCSBPT", | ||
66 | operator: "EQ", | ||
67 | }, | ||
68 | ], | ||
69 | queryRelation: "AND", | ||
70 | }, | ||
71 | }; | ||
72 | params.queryOptions = JSON.stringify(queryOptions); | ||
73 | //根据子系统code获取子系统详细信息 | ||
74 | getAction(api.subsystem, params).then((res) => { | ||
75 | if (res.status === 1) { | ||
76 | this.productName = res.content[0].name; | ||
77 | this.$store.dispatch("products/setData", res.content[0].code); | ||
78 | |||
79 | sessionStorage.setItem("products", res.content[0].code) | ||
80 | } else { | ||
81 | this.$message.error({ message: res.message, showClose: true }); | ||
82 | } | ||
83 | }); | ||
84 | }, | 80 | }, |
85 | mounted () { | 81 | randomColor (min, max) { |
86 | // this.checkUserName(); | 82 | let r = this.randomNum(min, max); |
83 | let g = this.randomNum(min, max); | ||
84 | let b = this.randomNum(min, max); | ||
85 | return "rgb(" + r + "," + g + "," + b + ")"; | ||
87 | }, | 86 | }, |
88 | methods: { | 87 | randomNum (min, max) { |
89 | verification() { | 88 | return Math.floor(Math.random() * (max - min) + min); |
90 | let str = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ', code = '', i = 0; | 89 | }, |
91 | for( ; i++ < 4 ; ) code += str[ Math.floor( Math.random() * ( str.length - 0 ) + 0 ) ]; | 90 | //记住用户名 |
92 | setTimeout( () => { | 91 | checkUserName: function (flag) { |
93 | let canvas = document.getElementById("s-canvas"), ctx = canvas.getContext("2d"); | 92 | this.user.checkStatus = flag; |
94 | canvas.width = 80; | 93 | if (this.user.checkStatus) { |
95 | canvas.height = 28; | 94 | localStorage.setItem("accountId", this.user.account); |
96 | ctx.fillStyle = '#ffffff'; | 95 | let name = localStorage.getItem("accountId"); |
97 | ctx.fillRect( 0, 0, 80, 28 ); | 96 | if (name === "") { |
98 | for ( i = 0; i < code.length; i++ ) { this.drawText( ctx, code[i], i ); } | 97 | return; |
99 | }, 0 ); | ||
100 | }, | ||
101 | drawText(ctx, txt, i) { | ||
102 | ctx.fillStyle = this.randomColor(50, 160); | ||
103 | ctx.font = "18px SimHei"; | ||
104 | let x = (i + 1) * (80 / (4 + 1)), y = this.randomNum( 18, 28 - 5 ); | ||
105 | ctx.translate(x, y); | ||
106 | ctx.fillText(txt, 0, 0); | ||
107 | ctx.rotate((-0 * Math.PI) / 180); | ||
108 | ctx.translate(-x, -y); | ||
109 | }, | ||
110 | randomColor(min, max) { | ||
111 | let r = this.randomNum(min, max); | ||
112 | let g = this.randomNum(min, max); | ||
113 | let b = this.randomNum(min, max); | ||
114 | return "rgb(" + r + "," + g + "," + b + ")"; | ||
115 | }, | ||
116 | randomNum(min, max) { | ||
117 | return Math.floor(Math.random() * (max - min) + min); | ||
118 | }, | ||
119 | //记住用户名 | ||
120 | checkUserName: function (flag) { | ||
121 | this.user.checkStatus = flag; | ||
122 | if (this.user.checkStatus) { | ||
123 | localStorage.setItem("accountId", this.user.account); | ||
124 | let name = localStorage.getItem("accountId"); | ||
125 | if (name === "") { | ||
126 | return; | ||
127 | } else { | ||
128 | this.user.account = name; | ||
129 | } | ||
130 | } else { | 98 | } else { |
131 | this.user.account = localStorage.getItem("accountId"); | 99 | this.user.account = name; |
132 | } | 100 | } |
133 | }, | 101 | } else { |
134 | login (user) { | 102 | this.user.account = localStorage.getItem("accountId"); |
135 | var self = this; | 103 | } |
136 | this.$refs[user].validate((valid) => { | ||
137 | if (valid) { | ||
138 | loginIn(self.user.account, self.user.password) | ||
139 | .then((res) => { | ||
140 | if (res.status === 1) { | ||
141 | this.$store.dispatch('business/setInitRules', "layout1") | ||
142 | //存储token | ||
143 | localStorage.setItem("token", `Bearer ${res.content}`); | ||
144 | this.$store.dispatch("products/setData", res.content[0].code); | ||
145 | sessionStorage.setItem("products", res.content[0].code) | ||
146 | //登录成功后需判断有无重定向,没有重定向则跳转首页 | ||
147 | this.$router.replace(this.$route.query.redirect || "/"); | ||
148 | } else { | ||
149 | console.log(res); | ||
150 | this.$message.error({ message: res.message }) | ||
151 | } | ||
152 | }) | ||
153 | .catch((error) => { | ||
154 | // console.dir(error); | ||
155 | }); | ||
156 | } | ||
157 | }); | ||
158 | }, | ||
159 | }, | 104 | }, |
160 | components: {}, | 105 | login (user) { |
161 | }; | 106 | var self = this |
162 | </script> | 107 | this.$refs[user].validate(async (valid) => { |
163 | <style scoped lang="scss"> | 108 | if (valid) { |
164 | .username, | 109 | let res = await loginIn(self.user.account, self.user.password) |
165 | .password, | 110 | if (res.status == 1) { |
166 | .yz { | 111 | let code = this.BASE_API.THEME == "sb" ? "BDCSBPT" : "BDCJGPT" |
167 | position: relative; | 112 | localStorage.setItem("token", `Bearer ${res.content}`); |
168 | &:before { | 113 | const { result: getMenuData } = (await getMenuInfo(code)) || []; |
169 | content: ""; | 114 | let path1 = JSON.parse(getMenuData[0].metadata)?.path + '/' + JSON.parse(getMenuData[0].children[0].metadata)?.path |
170 | display: block; | 115 | //登录成功后需判断有无重定向,没有重定向则跳转首页 |
171 | width: 16px; | 116 | const accessRoutes = await this.$store.dispatch( |
172 | height: 16px; | 117 | "permission/generateRoutes", |
173 | position: absolute; | 118 | getMenuData |
174 | left: 10px; | 119 | ); |
175 | top: 7px; | 120 | this.$router.addRoutes([ |
176 | background-size: 100% 100%; | 121 | ...accessRoutes, |
177 | } | 122 | { path: "*", redirect: "/404", hidden: true }, |
178 | 123 | ]); | |
179 | /deep/ .el-input__inner { | 124 | this.$router.replace(this.$route.query.redirect || path1); |
180 | color: #000 !important; | 125 | } |
181 | text-indent: 24px; | 126 | } |
182 | // border: 1px solid rgba(11, 161, 248, 0.4); | 127 | }) |
183 | // background-color: rgba(6, 135, 205, 0.3) !important; | ||
184 | } | 128 | } |
185 | } | 129 | } |
130 | } | ||
131 | </script> | ||
132 | <style scoped lang="scss"> | ||
133 | .username, | ||
134 | .password, | ||
135 | .yz { | ||
136 | position: relative; | ||
186 | 137 | ||
187 | .flex-container { | 138 | &:before { |
188 | position: relative; | 139 | content: ""; |
189 | display: -webkit-flex; | 140 | display: block; |
190 | display: flex; | 141 | width: 16px; |
191 | } | 142 | height: 16px; |
192 | |||
193 | .flex-input { | ||
194 | width: 100%; | ||
195 | } | ||
196 | .flex-line { | ||
197 | position: absolute; | ||
198 | width: 1px; | ||
199 | height: 64%; | ||
200 | margin: 5px; | ||
201 | right: 36%; | ||
202 | background-color: #CCCCCC; | ||
203 | } | ||
204 | .flex-img { | ||
205 | position: absolute; | 143 | position: absolute; |
206 | margin: 2px; | 144 | left: 10px; |
207 | right: 16%; | 145 | top: 7px; |
208 | } | 146 | background-size: 100% 100%; |
209 | .flex-renovate { | ||
210 | position: absolute; | ||
211 | margin: 1px; | ||
212 | right: 3%; | ||
213 | } | ||
214 | #renovate { | ||
215 | color: #3F8FEA; | ||
216 | font-size: 16px; | ||
217 | font-weight: 700; | ||
218 | cursor: pointer; | ||
219 | } | 147 | } |
220 | 148 | ||
221 | .username::before { | 149 | /deep/ .el-input__inner { |
222 | background-image: url(../../image/userlogo.png); | 150 | color: #000 !important; |
151 | text-indent: 24px; | ||
223 | } | 152 | } |
153 | } | ||
224 | 154 | ||
225 | .password::before { | 155 | .flex-container { |
226 | background-image: url(../../image/passlogo.png); | 156 | position: relative; |
227 | } | 157 | display: -webkit-flex; |
228 | .yz::before { | 158 | display: flex; |
229 | background-image: url(../../image/yzlogo.png); | 159 | } |
230 | } | ||
231 | 160 | ||
232 | .bg { | 161 | .flex-input { |
233 | width: 100%; | 162 | width: 100%; |
234 | height: 100%; | 163 | } |
235 | min-width: 1440px; | 164 | |
236 | min-height: 560px; | 165 | .flex-line { |
237 | background: url(../../image/loginBoxsb.png) no-repeat; | 166 | position: absolute; |
238 | background-size: 100% 100%; | 167 | width: 1px; |
239 | overflow: hidden; | 168 | height: 64%; |
240 | position: relative; | 169 | margin: 5px; |
241 | } | 170 | right: 36%; |
242 | .title { | 171 | background-color: #CCCCCC; |
243 | width: 24%; | 172 | } |
244 | height: 6%; | 173 | |
245 | top: 20%; | 174 | .flex-img { |
246 | right: 38%; | 175 | position: absolute; |
176 | margin: 2px; | ||
177 | right: 16%; | ||
178 | } | ||
179 | |||
180 | .flex-renovate { | ||
181 | position: absolute; | ||
182 | margin: 1px; | ||
183 | right: 3%; | ||
184 | } | ||
185 | |||
186 | #renovate { | ||
187 | color: #3F8FEA; | ||
188 | font-size: 16px; | ||
189 | font-weight: 700; | ||
190 | cursor: pointer; | ||
191 | } | ||
192 | |||
193 | .username::before { | ||
194 | background-image: url(../../image/userlogo.png); | ||
195 | } | ||
196 | |||
197 | .password::before { | ||
198 | background-image: url(../../image/passlogo.png); | ||
199 | } | ||
200 | |||
201 | .yz::before { | ||
202 | background-image: url(../../image/yzlogo.png); | ||
203 | } | ||
204 | |||
205 | .bg { | ||
206 | width: 100%; | ||
207 | height: 100%; | ||
208 | min-width: 1440px; | ||
209 | min-height: 560px; | ||
210 | background: url(../../image/loginBoxsb.png) no-repeat; | ||
211 | background-size: 100% 100%; | ||
212 | overflow: hidden; | ||
213 | position: relative; | ||
214 | } | ||
215 | |||
216 | .title { | ||
217 | width: 24%; | ||
218 | height: 6%; | ||
219 | top: 20%; | ||
220 | right: 38%; | ||
221 | position: absolute; | ||
222 | |||
223 | img { | ||
224 | width: 60px; | ||
225 | height: 60px; | ||
226 | top: 0%; | ||
227 | left: 2%; | ||
247 | position: absolute; | 228 | position: absolute; |
248 | img { | ||
249 | width: 60px; | ||
250 | height: 60px; | ||
251 | top: 0%; | ||
252 | left: 2%; | ||
253 | position: absolute; | ||
254 | } | ||
255 | h2 { | ||
256 | top: 25%; | ||
257 | left: 22%; | ||
258 | position: absolute; | ||
259 | width: 383px; | ||
260 | height: 42px; | ||
261 | font-size: 28px; | ||
262 | font-weight: 600; | ||
263 | color: #ffffff; | ||
264 | text-shadow: 0px 4px 4px #002c95; | ||
265 | } | ||
266 | } | 229 | } |
267 | .login-inner-bg { | 230 | |
268 | background: white; | 231 | h2 { |
269 | width: 24.6%; | 232 | top: 25%; |
270 | height: 47%; | 233 | left: 22%; |
271 | min-width: 360px; | ||
272 | min-height: 380px; | ||
273 | top: 30%; | ||
274 | right: 38%; | ||
275 | position: absolute; | 234 | position: absolute; |
276 | background-size: 100% 100%; | 235 | width: 383px; |
277 | box-sizing: border-box; | 236 | height: 42px; |
278 | padding: 56px; | 237 | font-size: 28px; |
238 | font-weight: 600; | ||
239 | color: #ffffff; | ||
240 | text-shadow: 0px 4px 4px #002c95; | ||
279 | } | 241 | } |
242 | } | ||
280 | 243 | ||
281 | .login { | 244 | .login-inner-bg { |
282 | .user_style { | 245 | background: white; |
283 | h3 { | 246 | width: 24.6%; |
284 | font-weight: normal; | 247 | height: 47%; |
285 | text-align: center; | 248 | min-width: 360px; |
286 | margin: -10px auto 28px; | 249 | min-height: 380px; |
287 | font-weight: 400; | 250 | top: 30%; |
288 | width: 125px; | 251 | right: 38%; |
289 | height: 29px; | 252 | position: absolute; |
290 | font-size: 20px; | 253 | background-size: 100% 100%; |
291 | font-family: Source Han Sans CN; | 254 | box-sizing: border-box; |
292 | font-weight: 400; | 255 | padding: 56px; |
293 | color: #333333; | 256 | } |
294 | } | ||
295 | } | ||
296 | 257 | ||
297 | .btn { | 258 | .login { |
298 | width: 100%; | 259 | .user_style { |
299 | height: 6vh; | 260 | h3 { |
300 | background-color: #00c2de; | 261 | font-weight: normal; |
301 | border-radius: 5px; | 262 | text-align: center; |
302 | font-size: 1.4vw; | 263 | margin: -10px auto 28px; |
303 | color: #000; | 264 | font-weight: 400; |
265 | width: 125px; | ||
266 | height: 29px; | ||
267 | font-size: 20px; | ||
268 | font-family: Source Han Sans CN; | ||
269 | font-weight: 400; | ||
270 | color: #333333; | ||
304 | } | 271 | } |
272 | } | ||
305 | 273 | ||
306 | .btn:hover { | 274 | .btn { |
307 | cursor: pointer; | 275 | width: 100%; |
308 | background-color: #2d8cf0; | 276 | height: 6vh; |
309 | } | 277 | background-color: #00c2de; |
278 | border-radius: 5px; | ||
279 | font-size: 1.4vw; | ||
280 | color: #000; | ||
310 | } | 281 | } |
311 | 282 | ||
312 | .login #loginform { | 283 | .btn:hover { |
313 | .el-form-item { | 284 | cursor: pointer; |
314 | margin-bottom: 24px !important; | 285 | background-color: #2d8cf0; |
315 | } | 286 | } |
287 | } | ||
316 | 288 | ||
317 | .login-btn { | 289 | .login #loginform { |
318 | margin-top: 30px !important; | 290 | .el-form-item { |
319 | } | 291 | margin-bottom: 24px !important; |
292 | } | ||
320 | 293 | ||
321 | .el-button { | 294 | .login-btn { |
322 | font-size: 18px; | 295 | margin-top: 30px !important; |
323 | border-radius: 0; | 296 | } |
324 | background: #4162d8 !important; | ||
325 | color: #ffffff !important; | ||
326 | cursor: pointer !important; | ||
327 | } | ||
328 | 297 | ||
329 | .el-input__inner { | 298 | .el-button { |
330 | width: 100% !important; | 299 | font-size: 18px; |
331 | } | 300 | border-radius: 0; |
301 | background: #4162d8 !important; | ||
302 | color: #ffffff !important; | ||
303 | cursor: pointer !important; | ||
304 | } | ||
332 | 305 | ||
333 | .el-checkbox__label { | 306 | .el-input__inner { |
334 | color: #fff; | 307 | width: 100% !important; |
335 | } | ||
336 | } | 308 | } |
337 | 309 | ||
338 | .inputUser .ivu-input { | 310 | .el-checkbox__label { |
339 | padding: 6px 24px !important; | 311 | color: #fff; |
340 | border: 1px solid #9f9f9f !important; | ||
341 | } | 312 | } |
313 | } | ||
314 | |||
315 | .inputUser .ivu-input { | ||
316 | padding: 6px 24px !important; | ||
317 | border: 1px solid #9f9f9f !important; | ||
318 | } | ||
342 | </style> | 319 | </style> | ... | ... |
-
Please register or sign in to post a comment