从0开始,重新赋能造数平台!(3)编写项目模块前端

142 阅读1分钟

项目地址

前端:gitee.com/luxinyu617/…

后端:gitee.com/luxinyu617/…

编写项目模块前端

今天主要做的是平台主页,和项目模块界面的编写,大概展示如下图:

image.png

image.png

由于前端笔者是纯自学的,所以大家看看就好,有一部分源码也是用的大神开源项目,(主要只是给一个展现和交互方式的参考,欢迎大家提出更多的想法=-=)

封装axios

import axios from "axios";
import router from "@/router";
import { Message } from 'element-ui'
export const requests = axios.create({
  baseURL: "http://127.0.0.1:8000/api",

  timeout: 30000,
  responseType: "json",
  withCredentials: true,
  headers: {
    "content-type": "application/json;charset=UTF-8",
  },
});
requests.interceptors.request.use(config => {
    config.headers = { AUTHORIZATION: localStorage.getItem('token') }
    return config
  },

  (error) => {
    return Promise.reject(error)

});

requests.interceptors.response.use(
   (response) => {

      return response
   },
   async (error) => {//   Message.error('报错了')

      if (error.response.status == 401) {
        router.app.$router.push({ path: '/login' })
      }}
);

export function get(url, params) {
   console.log(url, params)
   return new Promise((resolve, reject) => {
      requests
         .get(url, {
            params: params,
         })
         .then((res) => checkLogin(res))
         .then((res) => {
            resolve(res)
         })
         .catch((err) => {
            reject(err)
         })
   })
}
/**
 * post方法,对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function post(url, params) {


   return new Promise((resolve, reject) => {
      requests
         .post(url, params, {
            headers: {
               'Content-Type': 'application/json',
            },
         })
         .then((res) => {

      

         

            if (res.data["code"] == 400 || res.data["code"] == 401 ) {

               Message.error(res.data['message'])
            }
            else if (res.data["code"] == 200){

               Message.success(res.data['message'])
            }
            resolve(res)

            
         })
         .catch((err) => {
      
            reject(err)
         })
   })
}
export function put(url, params) {

   console.log(url, params)

   return new Promise((resolve, reject) => {
      requests
         .put(url, params, {
            headers: {
               'Content-Type': 'application/json',
            },
         })
         .then((res) => {
      

            if (res.data['code'] == 400) {
               Message.error(res.data['message'])
            }
            resolve(res)

         
         })
         .catch((err) => {
            console.log(err)
            reject(err)
         })
   })
}

编写router文件

import Vue from "vue";
import VueRouter from "vue-router";
import home from "@/views/home/HomeView";
import index from "@/views/home/index";
import workbench from "@/views/workbench/Workbench"
import datafactory from "@/views/datafactory/index"
import ProjectManage from "@/views/datafactory/ProjectManage";
import {getUserinfo} from "@/http/api/home/api";
Vue.use(VueRouter);

const routes = [

  {
    path: "/",
    name: "root",
    meta: {
      requireAuth: true,
    },
    component: index,
    redirect: "home",

    children: [
      {
        path:"home",
        name:"home",
        component:home
      },
      {
        path: "datafactory",
        name: "datafactory",
        meta: {
          title: "数据工厂",
        },
        component: datafactory,
        redirect: "datafactory/projectmanage",
        children: [


          {
            path: '/datafactory/projectmanage',
            name: 'datafactory.projectmanage',
            meta: {
              title: '项目管理'
            },
            component: () => import('@/views/datafactory/ProjectManage.vue')
          },

        ]
      },
      {
        path: "workbench",
        name: "workbench",
        meta: {
          title: "工作台",
        },
        component: workbench,
        // redirect: "workbench",
      },
    ],
  },

];

const router = new VueRouter({
  routes,
});

router.beforeEach((to, from, next) => {
  if (to.matched.some(auth => auth.meta.requireAuth)) {
    let token = localStorage.getItem("token");
    if (token) {



      getUserinfo().then(()=>{

        console.log('11')

      },
            (error) =>{
                // console.log(Object.keys(error));

              console.log(1)
              console.log(error)
            })
      next();

    } else {
      next({
        path: "/login",
      });
    }
  } else {
    next();
  }
});
export default router;

home页面

<template>
  <div class="app-container">
    <div class="header">
      <router-link :to="{ name: 'home' }" class="logo">
        <span>CDPT</span>
      </router-link>\
      <ul class="header-nav">
        <router-link
          tag="li"
          v-for="module in moduleList"
          :key="module.id"
          :to="{ name: module.id }"
          :class="{ current: currentActive(module.id) }"
        >
          <span>{{ module.name }}</span>
        </router-link>
      </ul>
    </div>
<el-main class="el-main">
      <router-view></router-view>
</el-main>
  </div>

</template>
<script>

import {getUserinfo} from "@/http/api/home/api";


export default {
  data() {
    return {

      loading: false,

            moduleList: [{id:'workbench',name:'工作台'},{id:'datafactory',name:'数据工厂'}],
    };
  },


  methods: {
    currentActive(id = "") {
      return this.$route.path.split("/")[1] === id;
    },
    initmodule() {
      const moduleArr = JSON.parse(localStorage.getItem("moduleMenus") || "[]");
      if (!moduleArr.length) {
        this.$notifyMessage("无菜单权限");
        this.$router.push("/login");
        return;
      }

      let moduleList = [];
      moduleArr.forEach(item => {
        let a = 1;
        if (a==1) {
          moduleList.push(item);
        }
      });
      this.moduleList = moduleList;
      if (!moduleList.length) {
        this.$notifyMessage("无可访问菜单");
        this.$router.push("/login");
      }
    },

    UserInfo(){
      getUserinfo().then((res)=>{

        console.log(res)

      },
            (error) =>{
                // console.log(Object.keys(error));

              console.log(1)
              console.log(error)
            })
    },
    logout() {
      let loginInfo = localStorage.getItem("loginInfo");
      let oldLoginTime = localStorage.getItem("loginTime");
      localStorage.clear();
      if (oldLoginTime) {
        localStorage.setItem("loginTime", new Date().getTime().toLocaleString());
      }
      if (loginInfo) {
        loginInfo = JSON.parse(loginInfo);
        loginInfo.userPWD = "";
        localStorage.setItem("loginInfo", JSON.stringify(loginInfo));
      }
      this.$router.push("/login");
    },

  },
  mounted() {
    let _this = this;
    window.addEventListener("resize", _this.$resize, true);

  },
  beforeDestroy() {
    window.removeEventListener("resize", this.$resize);
  },
};
</script>

然后还有封装的侧边栏和导航栏,这里就不贴了,可以直接在gitee里自取哈

【觉得有用就请给我点赞吧~】