whychdw
2020-10-12 a9f86cabcb042fd4e4ce026bb189ba2fb0d4d3e3
内容提交
4个文件已添加
11个文件已修改
260 ■■■■■ 已修改文件
VERSION.md 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/apis/userMager/powerMager.js 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/axios.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/tools/index.js 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/tools/isHasPermit.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/PageMenu.vue 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/home.vue 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/jobManage/planManage.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/login.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/routes.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/index.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/modules/user.js 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目需求.md 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VERSION.md
@@ -41,3 +41,8 @@
|--系统界面设置
|  |--实时监测配置
```
#### V2.1.1
##### 1.首页地图开放添加,删除站点的功能。
##### 2.添加限制用户唯一登录的限制
##### 3.根据权限内容显示页面和开放页面功能
##### 4.修复一些儿已知的bug
package.json
@@ -1,6 +1,6 @@
{
  "name": "admin_manage",
  "version": "2.1.0",
  "version": "2.1.1",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve --mode dev",
@@ -19,7 +19,8 @@
    "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",
src/assets/js/apis/userMager/powerMager.js
@@ -101,5 +101,16 @@
            url: 'User_permitgroup_dataAction!batchDelete',
            data: "json="+JSON.stringify(data)
        });
    },
    /**
     * æŸ¥è¯¢å½“前用户的权限
     * æ— å‚
     */
    getPermits() {
        return axios({
            method: 'post',
            url: 'User_permitgroupAction!getPermit',
            data: null
        });
    }
}
src/assets/js/axios.js
@@ -2,10 +2,11 @@
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) {
src/assets/js/tools/index.js
@@ -11,6 +11,7 @@
import testVal from './testVal'
import LinkagePlus from './LinkagePlus'
import extend from './extend'
import isHasPermit from "@/assets/js/tools/isHasPermit";
export {
    formatSeconds,
@@ -25,5 +26,6 @@
    getBarNum,
    testVal,
    LinkagePlus,
    extend
    extend,
    isHasPermit
}
src/assets/js/tools/isHasPermit.js
New file
@@ -0,0 +1,19 @@
/**
 * æ ¡éªŒæƒé™åæ˜¯å¦æœ‰æ•ˆ
 * @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;
src/components/PageMenu.vue
@@ -1,6 +1,6 @@
<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>
@@ -22,6 +22,8 @@
</template>
<script>
import {isHasPermit} from "@/assets/js/tools";
export default {
    props: {
        acTabs: {
@@ -37,7 +39,8 @@
                    name: "index",
                    src: "#/index",
                    icon: "el-icon-s-home",
                    closable: false
                    noChild: true,
                    closable: false,
                },
                {
                    label: "测试数据",
@@ -83,18 +86,21 @@
                            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
                        },
                        // {
@@ -113,6 +119,7 @@
                            label: "电池关注管理",
                            name: "batteryMager",
                            src: "#/batteryMager",
                            permitName: 'batttest_data_query_permit',
                            closable: true
                        }
                    ]
@@ -163,6 +170,21 @@
                    ]
                },
                {
                    label: "作业管理",
                    name: "jobManage",
                    src: "",
                    icon: "el-icon-s-cooperation",
                    closable: false,
                    childrens: [
                        {
                            label: "放电计划管理",
                            name: "planManage",
                            src: "#/jobManage/planManage",
                            closable: true
                        },
                    ],
                },
                {
                    label: "用户管理",
                    name: "userMager",
                    src: "",
@@ -196,6 +218,36 @@
                    ]
                },
                {
                    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: "",
@@ -216,11 +268,52 @@
    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>
src/main.js
@@ -34,6 +34,9 @@
Vue.prototype.$axios = axios;
Vue.prototype.$apis = apis;
// å¼•å…¥vuex
import store from './store'
//格式化时间
Date.prototype.format =function(format)
{
@@ -58,5 +61,6 @@
new Vue({
    router,
    store,
    render: h => h(App),
}).$mount('#app')
src/pages/home.vue
@@ -37,8 +37,8 @@
import {
    checkUserLogin
} from '../assets//js/api'
} from '@/assets/js/api'
let timer;
export default {
    components: {
        PageHeader,
@@ -140,8 +140,30 @@
            // è®¾ç½®æ¿€æ´»çš„导航
            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);
src/pages/jobManage/planManage.vue
New file
@@ -0,0 +1,13 @@
<template>
    <div>放电计划管理</div>
</template>
<script>
export default {
    name: "planManage"
}
</script>
<style scoped>
</style>
src/pages/login.vue
@@ -10,14 +10,18 @@
      <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-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"></el-input>
                    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>
@@ -66,10 +70,14 @@
        this.$message.success("登录成功");
        sessionStorage.setItem('username', this.loginForm.username);
        this.$router.push("/home");
                // è®¾ç½®ç”¨æˆ·çš„æƒé™
                this.$store.dispatch('user/getPermits');
      });
    },
  },
  mounted() {
        // åˆå§‹åŒ–user的信息
        this.$store.commit('user/init');
    // åˆå§‹åŒ–登录状态
    sessionStorage.setItem('username', "");
  }
@@ -94,6 +102,7 @@
  transform: translate(-50%, -50%);
  /* v图片的盒子 */
  .avatar {
    height: 130px;
    width: 130px;
@@ -106,6 +115,7 @@
    transform: translate(-50%, -50%);
    background-color: #fff;
    /* v图片 */
    img {
      width: 130px;
      height: 130px;
src/router/routes.js
@@ -139,6 +139,13 @@
        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: '用户信息管理',
src/store/index.js
New file
@@ -0,0 +1,14 @@
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;
src/store/modules/user.js
New file
@@ -0,0 +1,30 @@
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);
            });
        }
    },
};
ÏîÄ¿ÐèÇó.md
@@ -7,3 +7,9 @@
5.历史数据的电池电流折线图使用渐变色
6.实时数据的柱状图添加趋势折线图
```
####2020-10-10
```
1.逆变信息,通信计数
2.拓扑图字体调大
```