| | |
| | | | |--æä½è®°å½ç®¡ç |
| | | |--ç³»ç»çé¢è®¾ç½® |
| | | | |--宿¶çæµé
ç½® |
| | | ``` |
| | | ``` |
| | | #### V2.1.1 |
| | | ##### 1.é¦é¡µå°å¾å¼æ¾æ·»å ï¼å é¤ç«ç¹çåè½ã |
| | | ##### 2.æ·»å éå¶ç¨æ·å¯ä¸ç»å½çéå¶ |
| | | ##### 3.æ ¹æ®æéå
容æ¾ç¤ºé¡µé¢å弿¾é¡µé¢åè½ |
| | | ##### 4.ä¿®å¤ä¸äºå¿å·²ç¥çbug |
| | |
| | | { |
| | | "name": "admin_manage", |
| | | "version": "2.1.0", |
| | | "version": "2.1.1", |
| | | "private": true, |
| | | "scripts": { |
| | | "serve": "vue-cli-service serve --mode dev", |
| | |
| | | "vue-jsonp": "^0.1.8", |
| | | "vue-layer": "^1.2.0", |
| | | "vue-router": "^3.4.3", |
| | | "vuejs-progress-bar": "^1.2.2" |
| | | "vuejs-progress-bar": "^1.2.2", |
| | | "vuex": "^3.5.1" |
| | | }, |
| | | "devDependencies": { |
| | | "@vue/cli-plugin-babel": "^4.5.0", |
| | |
| | | url: 'User_permitgroup_dataAction!batchDelete', |
| | | data: "json="+JSON.stringify(data) |
| | | }); |
| | | }, |
| | | /** |
| | | * æ¥è¯¢å½åç¨æ·çæé |
| | | * æ å |
| | | */ |
| | | getPermits() { |
| | | return axios({ |
| | | method: 'post', |
| | | url: 'User_permitgroupAction!getPermit', |
| | | data: null |
| | | }); |
| | | } |
| | | } |
| | |
| | | import axios from 'axios'; |
| | | if(process.env.NODE_ENV == 'dev') { |
| | | // è·¨åè¯·æ± |
| | | axios.defaults.baseURL = 'http://127.0.0.1:8919/fg/'; |
| | | axios.defaults.baseURL = 'http://localhost:8919/fg/'; |
| | | axios.defaults.withCredentials = true; // ä¿æè¯·æ±å¤´ |
| | | } |
| | | |
| | | // axios.defaults.withCredentials = true; |
| | | |
| | | |
| | | // æ·»å è¯·æ±æ¦æªå¨ |
| | | axios.interceptors.request.use(function (config) { |
| | |
| | | import testVal from './testVal' |
| | | import LinkagePlus from './LinkagePlus' |
| | | import extend from './extend' |
| | | import isHasPermit from "@/assets/js/tools/isHasPermit"; |
| | | |
| | | export { |
| | | formatSeconds, |
| | |
| | | getBarNum, |
| | | testVal, |
| | | LinkagePlus, |
| | | extend |
| | | extend, |
| | | isHasPermit |
| | | } |
New file |
| | |
| | | /** |
| | | * æ ¡éªæé忝妿æ |
| | | * @param permitName æéåç§° |
| | | * @param permitList æéå表 |
| | | * @returns {boolean} æ¥è¯¢ç»æ |
| | | */ |
| | | function isHasPermit(permitName, permitList) { |
| | | let result = false; |
| | | // éåå
¨æ°å |
| | | for(let i=0; i<permitList.length; i++) { |
| | | let permit = permitList[i]; |
| | | if(permit.permit_item_name === permitName && permit.permit_item_value === 1) { |
| | | result = true; |
| | | break; |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | export default isHasPermit; |
| | |
| | | <template> |
| | | <el-menu :default-active="acTabs"> |
| | | <template v-for="menu in menus"> |
| | | <template v-for="menu in permitMenu"> |
| | | <el-submenu v-if="menu.childrens" :key="menu.name" :index="menu.name"> |
| | | <template slot="title"> |
| | | <i v-if="menu.icon" :class="menu.icon"></i> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import {isHasPermit} from "@/assets/js/tools"; |
| | | |
| | | export default { |
| | | props: { |
| | | acTabs: { |
| | |
| | | name: "index", |
| | | src: "#/index", |
| | | icon: "el-icon-s-home", |
| | | closable: false |
| | | noChild: true, |
| | | closable: false, |
| | | }, |
| | | { |
| | | label: "æµè¯æ°æ®", |
| | |
| | | label: "çµæ± ä¿¡æ¯é
ç½®", |
| | | name: "battGroupMager", |
| | | src: "#/dataMager/battGroupMager", |
| | | permitName: 'batttest_data_query_permit', |
| | | closable: true |
| | | }, |
| | | { |
| | | label: "线ç¨ä¿¡æ¯ç®¡ç", |
| | | name: 'threadMager', |
| | | src: '#/dataMager/threadMager', |
| | | permitName: 'batttest_data_query_permit', |
| | | closable: true, |
| | | }, |
| | | { |
| | | label: "æºæ¿åçµæ¥è¯¢", |
| | | name: "powercutMager", |
| | | src: "#/dataMager/powercut", |
| | | permitName: 'batttest_data_query_permit', |
| | | closable: true |
| | | }, |
| | | // { |
| | |
| | | label: "çµæ± å
³æ³¨ç®¡ç", |
| | | name: "batteryMager", |
| | | src: "#/batteryMager", |
| | | permitName: 'batttest_data_query_permit', |
| | | closable: true |
| | | } |
| | | ] |
| | |
| | | ] |
| | | }, |
| | | { |
| | | label: "ä½ä¸ç®¡ç", |
| | | name: "jobManage", |
| | | src: "", |
| | | icon: "el-icon-s-cooperation", |
| | | closable: false, |
| | | childrens: [ |
| | | { |
| | | label: "æ¾çµè®¡å管ç", |
| | | name: "planManage", |
| | | src: "#/jobManage/planManage", |
| | | closable: true |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: "ç¨æ·ç®¡ç", |
| | | name: "userMager", |
| | | src: "", |
| | |
| | | ] |
| | | }, |
| | | { |
| | | label: "大屿°æ®çæ§", |
| | | name: "bigScreen", |
| | | src: "", |
| | | icon: "el-icon-s-platform", |
| | | closable: false, |
| | | childrens: [ |
| | | { |
| | | label: "宿¶çæµé
ç½®", |
| | | name: "bigScreenSetting", |
| | | src: "#/", |
| | | target: true, |
| | | closable: true |
| | | }, |
| | | { |
| | | label: "çµæ± ç³»ç»çæ§", |
| | | name: "bigScreenBatt", |
| | | src: "#/screen", |
| | | target: true, |
| | | closable: true |
| | | }, |
| | | { |
| | | label: "çµæºç³»ç»çæ§", |
| | | name: "bigScreenEle", |
| | | src: "#/screen2", |
| | | target: true, |
| | | closable: true |
| | | }, |
| | | ] |
| | | }, |
| | | { |
| | | label: "ç³»ç»çé¢è®¾ç½®", |
| | | name: "systemPageSetting", |
| | | src: "", |
| | |
| | | methods: { |
| | | select(data) { |
| | | if (data.name !== this.acTabs) { |
| | | let url = 'big-screen/index.html'; |
| | | |
| | | if(process.env.NODE_ENV == 'dev') { |
| | | url = " http://localhost:8081/" |
| | | } |
| | | // æ ¹æ®æ°æ®è·³è½¬ |
| | | if(data.target) { |
| | | window.open(url+data.src); |
| | | return; |
| | | } |
| | | this.$emit("select", data); |
| | | } else { |
| | | console.log("èåå·²æ¿æ´»"); |
| | | } |
| | | } |
| | | }, |
| | | }, |
| | | computed: { |
| | | permitMenu() { |
| | | let permits = this.$store.state.user.permits; |
| | | let menus = this.menus.map(item=>{ |
| | | let tmp = { |
| | | label: item.label, |
| | | name: item.name, |
| | | src: item.src, |
| | | icon: item.icon, |
| | | noChild: item.noChild?true:false, |
| | | closable: item.closable, |
| | | }; |
| | | if(!tmp.noChild) { |
| | | tmp.childrens = item.childrens.filter(child=>{ |
| | | if(child.permitName) { |
| | | return isHasPermit(child.permitName, permits); |
| | | }else { |
| | | return true; |
| | | } |
| | | }); |
| | | } |
| | | return tmp; |
| | | }); |
| | | return menus.filter(item=>{ |
| | | return item.noChild || item.childrens.length>0; |
| | | }); |
| | | }, |
| | | }, |
| | | mounted() { |
| | | |
| | | } |
| | | }; |
| | | </script> |
| | |
| | | Vue.prototype.$axios = axios; |
| | | Vue.prototype.$apis = apis; |
| | | |
| | | // å¼å
¥vuex |
| | | import store from './store' |
| | | |
| | | //æ ¼å¼åæ¶é´ |
| | | Date.prototype.format =function(format) |
| | | { |
| | |
| | | |
| | | new Vue({ |
| | | router, |
| | | store, |
| | | render: h => h(App), |
| | | }).$mount('#app') |
| | |
| | | |
| | | import { |
| | | checkUserLogin |
| | | } from '../assets//js/api' |
| | | |
| | | } from '@/assets/js/api' |
| | | let timer; |
| | | export default { |
| | | components: { |
| | | PageHeader, |
| | |
| | | // è®¾ç½®æ¿æ´»çå¯¼èª |
| | | this.acTabs = menu.name; |
| | | }, |
| | | checkUserLogin() { |
| | | checkUserLogin().then(res=>{ |
| | | let rs = JSON.parse(res.data.result); |
| | | if(rs.code === 1) { |
| | | alert(rs.msg); |
| | | this.$router.push('/login'); |
| | | }else { |
| | | clearTimeout(timer); |
| | | timer = setTimeout(()=>{ |
| | | this.checkUserLogin(); |
| | | }, 3000); |
| | | } |
| | | }).catch(error=>{ |
| | | clearTimeout(timer); |
| | | timer = setTimeout(()=>{ |
| | | this.checkUserLogin(); |
| | | }, 3000); |
| | | }) |
| | | }, |
| | | }, |
| | | mounted() { |
| | | // å¯å¨ç¨æ·äºæ¥ç»å½æ¨¡å |
| | | this.checkUserLogin(); |
| | | // ç嬿¥èªåiframeçæä»¤ |
| | | window.addEventListener('message', (msg)=>{ |
| | | // å¤çæ°æ® |
| | | this.handleMessage(msg.data); |
New file |
| | |
| | | <template> |
| | | <div>æ¾çµè®¡å管ç</div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: "planManage" |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | |
| | | </style> |
| | |
| | | <template> |
| | | <div class="login_container"> |
| | | <div class="login_box"> |
| | | <!-- 头ååº --> |
| | | <div class="avatar"> |
| | | <img src="@/assets/images/login_logo.jpg"> |
| | | </div> |
| | | <!-- ç»å½è¡¨ååº --> |
| | | <div style="margin: 20px;"></div> |
| | | <el-form label-width="0px" class="login_from" :model="loginForm" ref="loginFormRef"> |
| | | <!-- ç¨æ·å --> |
| | | <el-form-item prop="username"> |
| | | <el-input v-model="loginForm.username" prefix-icon="el-icon-user"></el-input> |
| | | </el-form-item> |
| | | <!-- å¯ç --> |
| | | <el-form-item prop="password"> |
| | | <el-input |
| | | v-model="loginForm.password" |
| | | prefix-icon="el-icon-lock" |
| | | type="password"></el-input> |
| | | </el-form-item> |
| | | <el-form-item class="btns"> |
| | | <el-button type="primary" @click="onSubmit">ç»å½</el-button> |
| | | <el-button type="info">注å</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div class="login_container"> |
| | | <div class="login_box"> |
| | | <!-- 头ååº --> |
| | | <div class="avatar"> |
| | | <img src="@/assets/images/login_logo.jpg"> |
| | | </div> |
| | | <!-- ç»å½è¡¨ååº --> |
| | | <div style="margin: 20px;"></div> |
| | | <el-form label-width="0px" class="login_from" :model="loginForm" ref="loginFormRef"> |
| | | <!-- ç¨æ·å --> |
| | | <el-form-item prop="username"> |
| | | <el-input |
| | | v-model="loginForm.username" |
| | | prefix-icon="el-icon-user" |
| | | @keyup.enter.native.stop="onSubmit"></el-input> |
| | | </el-form-item> |
| | | <!-- å¯ç --> |
| | | <el-form-item prop="password"> |
| | | <el-input |
| | | v-model="loginForm.password" |
| | | prefix-icon="el-icon-lock" |
| | | type="password" |
| | | @keyup.enter.native.stop="onSubmit"></el-input> |
| | | </el-form-item> |
| | | <el-form-item class="btns"> |
| | | <el-button type="primary" @click="onSubmit">ç»å½</el-button> |
| | | <el-button type="info">注å</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { login,initDBPool,checkLoginSession } from "@/assets/js/api"; |
| | | import {login, initDBPool, checkLoginSession} from "@/assets/js/api"; |
| | | |
| | | export default { |
| | | data() { |
| | | return { |
| | | labelPosition: "right" /* ç»å½è¡¨å */, |
| | | formLabelAlign: { |
| | | name: "", |
| | | region: "", |
| | | type: "" |
| | | }, |
| | | /* ç»å½è¡¨åel-form ç æ°æ®ç»å® */ |
| | | loginForm: { |
| | | username: "", |
| | | password: "" |
| | | } |
| | | }; |
| | | }, |
| | | methods: { |
| | | /* åå§åè¿æ¥æ± æ£æµåå°session*/ |
| | | async woData(){ |
| | | const [pool,sessions] =await Promise.all([initDBPool,checkLoginSession ]) |
| | | data() { |
| | | return { |
| | | labelPosition: "right" /* ç»å½è¡¨å */, |
| | | formLabelAlign: { |
| | | name: "", |
| | | region: "", |
| | | type: "" |
| | | }, |
| | | /* ç»å½è¡¨åel-form ç æ°æ®ç»å® */ |
| | | loginForm: { |
| | | username: "", |
| | | password: "" |
| | | } |
| | | }; |
| | | }, |
| | | methods: { |
| | | /* åå§åè¿æ¥æ± æ£æµåå°session*/ |
| | | async woData() { |
| | | const [pool, sessions] = await Promise.all([initDBPool, checkLoginSession]) |
| | | /* console.log('pool',pool); |
| | | console.log('sessions',sessions); */ |
| | | }, |
| | | onSubmit() { |
| | | this.$refs.loginFormRef.validate(async valid => { |
| | | if (!valid) return; |
| | | const {data: res} = await login( |
| | | this.loginForm.username, |
| | | this.loginForm.password |
| | | ); |
| | | if (res.result && JSON.parse(res.result).code == 0) |
| | | return this.$message.error(JSON.parse(res.result).msg); |
| | | this.$message.success("ç»å½æå"); |
| | | sessionStorage.setItem('username', this.loginForm.username); |
| | | this.$router.push("/home"); |
| | | // è®¾ç½®ç¨æ·çæé |
| | | this.$store.dispatch('user/getPermits'); |
| | | }); |
| | | }, |
| | | }, |
| | | onSubmit() { |
| | | this.$refs.loginFormRef.validate(async valid => { |
| | | if (!valid) return; |
| | | const { data: res } = await login( |
| | | this.loginForm.username, |
| | | this.loginForm.password |
| | | ); |
| | | if (res.result && JSON.parse(res.result).code == 0) |
| | | return this.$message.error(JSON.parse(res.result).msg); |
| | | this.$message.success("ç»å½æå"); |
| | | sessionStorage.setItem('username', this.loginForm.username); |
| | | this.$router.push("/home"); |
| | | }); |
| | | }, |
| | | }, |
| | | mounted() { |
| | | // åå§åç»å½ç¶æ |
| | | sessionStorage.setItem('username', ""); |
| | | } |
| | | mounted() { |
| | | // åå§åuserçä¿¡æ¯ |
| | | this.$store.commit('user/init'); |
| | | // åå§åç»å½ç¶æ |
| | | sessionStorage.setItem('username', ""); |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="less" scoped> |
| | | <style lang="less" scoped> |
| | | /* ç»å½å¤§çåèæ¯ */ |
| | | .login_container { |
| | | width: 100%; |
| | | width: 100%; |
| | | } |
| | | |
| | | /* ç»å½æ¡ */ |
| | | .login_box { |
| | | width: 450px; |
| | | height: 320px; |
| | | background-color: #fff; |
| | | border-radius: 3px; |
| | | position: absolute; |
| | | left: 50%; |
| | | top: 50%; |
| | | transform: translate(-50%, -50%); |
| | | |
| | | /* vå¾çççå */ |
| | | .avatar { |
| | | height: 130px; |
| | | width: 130px; |
| | | border: 1px solid #eee; |
| | | border-radius: 50%; /* è¾¹æ¡åè§ */ |
| | | padding: 10px; |
| | | box-shadow: 0 0 10px #ddd; |
| | | width: 450px; |
| | | height: 320px; |
| | | background-color: #fff; |
| | | border-radius: 3px; |
| | | position: absolute; |
| | | left: 50%; |
| | | top: 50%; |
| | | transform: translate(-50%, -50%); |
| | | background-color: #fff; |
| | | /* vå¾ç */ |
| | | img { |
| | | width: 130px; |
| | | height: 130px; |
| | | border-radius: 50%; |
| | | background-color: #eeeeee; |
| | | |
| | | /* vå¾çççå */ |
| | | |
| | | .avatar { |
| | | height: 130px; |
| | | width: 130px; |
| | | border: 1px solid #eee; |
| | | border-radius: 50%; /* è¾¹æ¡åè§ */ |
| | | padding: 10px; |
| | | box-shadow: 0 0 10px #ddd; |
| | | position: absolute; |
| | | left: 50%; |
| | | transform: translate(-50%, -50%); |
| | | background-color: #fff; |
| | | /* vå¾ç */ |
| | | |
| | | img { |
| | | width: 130px; |
| | | height: 130px; |
| | | border-radius: 50%; |
| | | background-color: #eeeeee; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /* ç»å½è¡¨åæ¡ */ |
| | | .login_from { |
| | | position: absolute; |
| | | bottom: 0; |
| | | width: 100%; |
| | | padding: 0 20px; |
| | | box-sizing: border-box; |
| | | position: absolute; |
| | | bottom: 0; |
| | | width: 100%; |
| | | padding: 0 20px; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | /* ç»å½æé® */ |
| | | .btns { |
| | | text-align: center; |
| | | text-align: center; |
| | | } |
| | | </style> |
| | |
| | | component: (resolve)=>require(['../pages/pageSetting/realTime.vue'], resolve) |
| | | }, |
| | | { |
| | | path: '/jobManage/planManage', |
| | | meta: { |
| | | title: 'æ¾çµè®¡å管ç' |
| | | }, |
| | | component: (resolve)=>require(['../pages/jobManage/planManage.vue'], resolve) |
| | | }, |
| | | { |
| | | path: '/userMager/userInfo', |
| | | meta: { |
| | | title: 'ç¨æ·ä¿¡æ¯ç®¡ç', |
New file |
| | |
| | | import Vue from 'vue'; |
| | | import Vuex from 'vuex'; |
| | | import user from '@/store/modules/user'; |
| | | |
| | | |
| | | Vue.use(Vuex); |
| | | |
| | | const store = new Vuex.Store({ |
| | | modules: { |
| | | user |
| | | }, |
| | | }); |
| | | |
| | | export default store; |
New file |
| | |
| | | import powerMager from "@/assets/js/apis/userMager/powerMager"; |
| | | |
| | | export default { |
| | | namespaced: true, |
| | | state() { |
| | | let permits = sessionStorage.getItem('permits'); |
| | | return { |
| | | permits: Array.isArray(permits)?permits:[], |
| | | } |
| | | }, |
| | | mutations: { |
| | | setPermits(state, data) { |
| | | state.permits = Array.isArray(data)?data:[]; |
| | | sessionStorage.setItem('permits', data); |
| | | }, |
| | | init(state) { |
| | | state.permits = []; |
| | | }, |
| | | }, |
| | | actions: { |
| | | getPermits(context) { |
| | | powerMager.getPermits().then(res=>{ |
| | | let rs = JSON.parse(res.data.result); |
| | | context.commit('setPermits', rs); |
| | | }).catch(error=>{ |
| | | console.log(error); |
| | | }); |
| | | } |
| | | }, |
| | | }; |
| | |
| | | 5.å岿°æ®ççµæ± çµæµæçº¿å¾ä½¿ç¨æ¸åè² |
| | | 6.宿¶æ°æ®çæ±ç¶å¾æ·»å è¶å¿æçº¿å¾ |
| | | ``` |
| | | ####2020-10-10 |
| | | ``` |
| | | 1.éåä¿¡æ¯ï¼éä¿¡è®¡æ° |
| | | 2.ææå¾åä½è°å¤§ |
| | | ``` |
| | | |