| | |
| | | # 开发环境配置 |
| | | ENV = 'development' |
| | | |
| | | # 若依管理系统/开发环境 |
| | | VUE_APP_BASE_API = '/dev-api' |
| | | # 开发环境 |
| | | VUE_APP_BASE_API = '/api' |
| | | |
| | | # 路由懒加载 |
| | | VUE_CLI_BABEL_TRANSPILE_MODULES = true |
| | |
| | | "name": "my-app", |
| | | "version": "0.1.0", |
| | | "dependencies": { |
| | | "axios": "^0.27.2", |
| | | "core-js": "^3.8.3", |
| | | "normalize.css": "^8.0.1", |
| | | "sass": "^1.54.8", |
| | |
| | | "babel-runtime": "6.x" |
| | | } |
| | | }, |
| | | "node_modules/asynckit": { |
| | | "version": "0.4.0", |
| | | "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", |
| | | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" |
| | | }, |
| | | "node_modules/at-least-node": { |
| | | "version": "1.0.0", |
| | | "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz", |
| | |
| | | }, |
| | | "peerDependencies": { |
| | | "postcss": "^8.1.0" |
| | | } |
| | | }, |
| | | "node_modules/axios": { |
| | | "version": "0.27.2", |
| | | "resolved": "https://registry.npmmirror.com/axios/-/axios-0.27.2.tgz", |
| | | "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", |
| | | "dependencies": { |
| | | "follow-redirects": "^1.14.9", |
| | | "form-data": "^4.0.0" |
| | | } |
| | | }, |
| | | "node_modules/babel-helper-vue-jsx-merge-props": { |
| | |
| | | "resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.19.tgz", |
| | | "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", |
| | | "dev": true |
| | | }, |
| | | "node_modules/combined-stream": { |
| | | "version": "1.0.8", |
| | | "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", |
| | | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", |
| | | "dependencies": { |
| | | "delayed-stream": "~1.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 0.8" |
| | | } |
| | | }, |
| | | "node_modules/commander": { |
| | | "version": "8.3.0", |
| | |
| | | }, |
| | | "engines": { |
| | | "node": ">=0.10.0" |
| | | } |
| | | }, |
| | | "node_modules/delayed-stream": { |
| | | "version": "1.0.0", |
| | | "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", |
| | | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", |
| | | "engines": { |
| | | "node": ">=0.4.0" |
| | | } |
| | | }, |
| | | "node_modules/depd": { |
| | |
| | | "version": "1.15.1", |
| | | "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.1.tgz", |
| | | "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", |
| | | "dev": true, |
| | | "engines": { |
| | | "node": ">=4.0" |
| | | }, |
| | |
| | | "dev": true, |
| | | "engines": { |
| | | "node": ">=0.10.0" |
| | | } |
| | | }, |
| | | "node_modules/form-data": { |
| | | "version": "4.0.0", |
| | | "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz", |
| | | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", |
| | | "dependencies": { |
| | | "asynckit": "^0.4.0", |
| | | "combined-stream": "^1.0.8", |
| | | "mime-types": "^2.1.12" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 6" |
| | | } |
| | | }, |
| | | "node_modules/forwarded": { |
| | |
| | | "babel-runtime": "6.x" |
| | | } |
| | | }, |
| | | "asynckit": { |
| | | "version": "0.4.0", |
| | | "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", |
| | | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" |
| | | }, |
| | | "at-least-node": { |
| | | "version": "1.0.0", |
| | | "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz", |
| | |
| | | "normalize-range": "^0.1.2", |
| | | "picocolors": "^1.0.0", |
| | | "postcss-value-parser": "^4.2.0" |
| | | } |
| | | }, |
| | | "axios": { |
| | | "version": "0.27.2", |
| | | "resolved": "https://registry.npmmirror.com/axios/-/axios-0.27.2.tgz", |
| | | "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", |
| | | "requires": { |
| | | "follow-redirects": "^1.14.9", |
| | | "form-data": "^4.0.0" |
| | | } |
| | | }, |
| | | "babel-helper-vue-jsx-merge-props": { |
| | |
| | | "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", |
| | | "dev": true |
| | | }, |
| | | "combined-stream": { |
| | | "version": "1.0.8", |
| | | "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", |
| | | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", |
| | | "requires": { |
| | | "delayed-stream": "~1.0.0" |
| | | } |
| | | }, |
| | | "commander": { |
| | | "version": "8.3.0", |
| | | "resolved": "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz", |
| | |
| | | "requires": { |
| | | "is-descriptor": "^1.0.0" |
| | | } |
| | | }, |
| | | "delayed-stream": { |
| | | "version": "1.0.0", |
| | | "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", |
| | | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" |
| | | }, |
| | | "depd": { |
| | | "version": "2.0.0", |
| | |
| | | "follow-redirects": { |
| | | "version": "1.15.1", |
| | | "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.1.tgz", |
| | | "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", |
| | | "dev": true |
| | | "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" |
| | | }, |
| | | "for-in": { |
| | | "version": "1.0.2", |
| | |
| | | "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", |
| | | "dev": true |
| | | }, |
| | | "form-data": { |
| | | "version": "4.0.0", |
| | | "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz", |
| | | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", |
| | | "requires": { |
| | | "asynckit": "^0.4.0", |
| | | "combined-stream": "^1.0.8", |
| | | "mime-types": "^2.1.12" |
| | | } |
| | | }, |
| | | "forwarded": { |
| | | "version": "0.2.0", |
| | | "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", |
| | |
| | | "build:stage": "vue-cli-service build --mode staging" |
| | | }, |
| | | "dependencies": { |
| | | "axios": "^0.27.2", |
| | | "core-js": "^3.8.3", |
| | | "normalize.css": "^8.0.1", |
| | | "sass": "^1.54.8", |
New file |
| | |
| | | import axios from "axios"; |
| | | export default { |
| | | login: (data) => axios.post('/sccg/admin/login', data), |
| | | }; |
| | |
| | | height="64" |
| | | > |
| | | <path |
| | | d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z" |
| | | d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z" fill="#fff" |
| | | /> |
| | | </svg> |
| | | </el-radio-button> |
| | |
| | | import './assets/icons' |
| | | // 引入全局样式 |
| | | import '@/styles/index.scss' |
| | | import axios from "axios" |
| | | Vue.prototype.$axios=axios |
| | | console.log(process.env.VUE_APP_BASE_API); |
| | | Vue.use(ElementUI) |
| | | new Vue({ |
| | | router, |
| | |
| | | import Vue from 'vue' |
| | | import VueRouter from 'vue-router' |
| | | Vue.use(VueRouter) |
| | | |
| | | const routes = [ |
| | | // { |
| | | // path: '/', |
| | | // component: Layout, |
| | | // redirect: '/home', |
| | | // children: [{ |
| | | // path: 'home', |
| | | // name: 'home', |
| | | // component: () => import('@/views/layout'), |
| | | // }] |
| | | // }, |
| | | { |
| | | path:'/home', |
| | | name:'home', |
| | |
| | | import Vue from 'vue' |
| | | import Vuex from 'vuex' |
| | | |
| | | import users from "./users" |
| | | Vue.use(Vuex) |
| | | |
| | | export default new Vuex.Store({ |
| | |
| | | actions: { |
| | | }, |
| | | modules: { |
| | | users |
| | | } |
| | | }) |
New file |
| | |
| | | import usersApi from "@/api/users"; |
| | | // import { Message } from "element-ui"; |
| | | export default { |
| | | namespaced: true, |
| | | state: { |
| | | userInfo: {}, |
| | | }, |
| | | actions: { |
| | | async login({ state }, params) { |
| | | console.log("store login"); |
| | | const res = await usersApi.login(params); |
| | | console.log(res); |
| | | const { data } = res; |
| | | return res; |
| | | }, |
| | | }, |
| | | }; |
| | |
| | | // import Cookies from 'js-cookie' |
| | | import Cookies from 'js-cookie' |
| | | |
| | | // const TokenKey = 'loginToken' |
| | | const TokenKey = 'loginToken' |
| | | |
| | | // export function getToken() { |
| | | // return Cookies.get(TokenKey) |
| | | // } |
| | | export function getToken() { |
| | | return Cookies.get(TokenKey) |
| | | } |
| | | |
| | | // export function setToken(token) { |
| | | // return Cookies.set(TokenKey, token) |
| | | // } |
| | | export function setToken(token) { |
| | | return Cookies.set(TokenKey, token) |
| | | } |
| | | |
| | | // export function removeToken() { |
| | | // return Cookies.remove(TokenKey) |
| | | // } |
| | | export function removeToken() { |
| | | return Cookies.remove(TokenKey) |
| | | } |
| | |
| | | import axios from 'axios' |
| | | import { Message, MessageBox } from 'element-ui' |
| | | import store from '../store' |
| | | import { getToken } from '@/utils/auth' |
| | | |
| | | // 创建axios实例 |
| | | const service = axios.create({ |
| | | baseURL: process.env.BASE_API, // api的base_url |
| | | timeout: 15000 // 请求超时时间 |
| | | }) |
| | | |
| | | // request拦截器 |
| | | service.interceptors.request.use(config => { |
| | | if (store.getters.token) { |
| | | config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 |
| | | } |
| | | return config |
| | | }, error => { |
| | | // Do something with request error |
| | | console.log(error) // for debug |
| | | Promise.reject(error) |
| | | }) |
| | | |
| | | // respone拦截器 |
| | | service.interceptors.response.use( |
| | | response => { |
| | | /** |
| | | * code为非200是抛错 可结合自己业务进行修改 |
| | | */ |
| | | const res = response.data |
| | | if (res.code !== 200) { |
| | | Message({ |
| | | message: res.message, |
| | | type: 'error', |
| | | duration: 3 * 1000 |
| | | }) |
| | | |
| | | // 401:未登录; |
| | | if (res.code === 401) { |
| | | MessageBox.confirm('你已被登出,可以取消继续留在该页面,或者重新登录', '确定登出', { |
| | | confirmButtonText: '重新登录', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | store.dispatch('FedLogOut').then(() => { |
| | | location.reload()// 为了重新实例化vue-router对象 避免bug |
| | | }) |
| | | }) |
| | | } |
| | | return Promise.reject('error') |
| | | } else { |
| | | return response.data |
| | | } |
| | | import axios from 'axios'; |
| | | // 拦截器 |
| | | // 请求 |
| | | axios.interceptors.request.use( |
| | | // 请求之前的回调函数 |
| | | function (config) { |
| | | config['baseURL'] = '/api'; |
| | | return config; |
| | | }, |
| | | error => { |
| | | console.log('err' + error)// for debug |
| | | Message({ |
| | | message: error.message, |
| | | type: 'error', |
| | | duration: 3 * 1000 |
| | | }) |
| | | return Promise.reject(error) |
| | | function (error) { |
| | | // Do something with request error |
| | | return Promise.reject(error); |
| | | } |
| | | ) |
| | | |
| | | export default service |
| | | ); |
| | | // 响应 |
| | | axios.interceptors.response.use( |
| | | function (response) { |
| | | return response.data; |
| | | }, |
| | | function (error) { |
| | | return Promise.reject(error); |
| | | } |
| | | ); |
| | |
| | | export function isvalidUsername(str) { |
| | | // const valid_map = ['admin', 'test'] |
| | | // return valid_map.indexOf(str.trim()) >= 0 |
| | | return str.trim().length>=3 |
| | | return str.trim().length |
| | | } |
| | | |
| | | /* 合法uri*/ |
| | |
| | | return urlregex.test(textval) |
| | | } |
| | | |
| | | /* 小写字母*/ |
| | | export function validateLowerCase(str) { |
| | | const reg = /^[a-z]+$/ |
| | | return reg.test(str) |
| | | } |
| | | |
| | | /* 大写字母*/ |
| | | export function validateUpperCase(str) { |
| | | const reg = /^[A-Z]+$/ |
| | | return reg.test(str) |
| | | } |
| | | |
| | | /* 大小写字母*/ |
| | | export function validatAlphabets(str) { |
| | | const reg = /^[A-Za-z]+$/ |
| | | return reg.test(str) |
| | | } |
| | | |
| | |
| | | <template> |
| | | <!-- 头部 --> |
| | | <el-header> |
| | | <!-- 展开控制按钮 --> |
| | | <!-- <hamburger :is-active="opened" class="hamburger-container" @toggleClick="toggleSideBar" /> --> |
| | | <!-- 右侧菜单 --> |
| | | <div class="header-title"> |
| | | <div class="bell"> |
| | | <el-icon class="el-icon-bell" style="color: white"></el-icon> |
| | | <div> |
| | | <!-- 头部 --> |
| | | <el-header> |
| | | <!-- 右侧菜单 --> |
| | | <div class="header-title"> |
| | | <div class="bell"> |
| | | <el-icon class="el-icon-bell" style="color: white"></el-icon> |
| | | </div> |
| | | <div class="userinfo"> |
| | | <div class="avatar"></div> |
| | | <span class="username">admin</span> |
| | | </div> |
| | | <div class="loginout" @click="loginout">退出登录</div> |
| | | </div> |
| | | <div class="userinfo"> |
| | | <div class="avatar"></div> |
| | | <span class="username">admin</span> |
| | | </div> |
| | | <div class="loginout">退出登录</div> |
| | | </div> |
| | | </el-header> |
| | | </el-header> |
| | | <NavBar /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import hamburger from "@/components/hamburger" |
| | | import hamburger from "@/components/hamburger"; |
| | | import NavBar from "../NavBar"; |
| | | export default { |
| | | data(){ |
| | | data() { |
| | | return { |
| | | opened:false |
| | | } |
| | | opened: false, |
| | | }; |
| | | }, |
| | | components:{ |
| | | hamburger |
| | | components: { |
| | | hamburger, |
| | | NavBar, |
| | | }, |
| | | methods:{ |
| | | loginout(){ |
| | | this.$router.push({path:"/login"}) |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | |
| | | <template> |
| | | <el-main> |
| | | <NavBar/> |
| | | <router-view></router-view> |
| | | </el-main> |
| | | </template> |
| | |
| | | <template> |
| | | <el-breadcrumb separator-class="el-icon-arrow-right"> |
| | | <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item> |
| | | <el-breadcrumb-item>活动管理</el-breadcrumb-item> |
| | | <el-breadcrumb-item>活动列表</el-breadcrumb-item> |
| | | <el-breadcrumb-item>活动详情</el-breadcrumb-item> |
| | | <el-breadcrumb class="app-breadcrumb" separator="/"> |
| | | <transition-group name="breadcrumb"> |
| | | <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path"> |
| | | <span v-if="item.redirect==='noRedirect'||index==levelList.length-1" class="no-redirect">{{ item.meta.title }}</span> |
| | | <a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a> |
| | | </el-breadcrumb-item> |
| | | </transition-group> |
| | | </el-breadcrumb> |
| | | </template> |
| | | |
| | | <script> |
| | | export default {}; |
| | | import pathToRegexp from 'path-to-regexp' |
| | | |
| | | export default { |
| | | data() { |
| | | return { |
| | | levelList: null |
| | | } |
| | | }, |
| | | watch: { |
| | | $route() { |
| | | this.getBreadcrumb() |
| | | } |
| | | }, |
| | | created() { |
| | | this.getBreadcrumb() |
| | | }, |
| | | methods: { |
| | | getBreadcrumb() { |
| | | // only show routes with meta.title |
| | | let matched = this.$route.matched.filter(item => item.meta && item.meta.title) |
| | | const first = matched[0] |
| | | |
| | | if (!this.isDashboard(first)) { |
| | | matched = [{ path: '/dashboard', meta: { title: 'Dashboard' }}].concat(matched) |
| | | } |
| | | |
| | | this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false) |
| | | }, |
| | | isDashboard(route) { |
| | | const name = route && route.name |
| | | if (!name) { |
| | | return false |
| | | } |
| | | return name.trim().toLocaleLowerCase() === 'Dashboard'.toLocaleLowerCase() |
| | | }, |
| | | pathCompile(path) { |
| | | const { params } = this.$route |
| | | var toPath = pathToRegexp.compile(path) |
| | | return toPath(params) |
| | | }, |
| | | handleLink(item) { |
| | | const { redirect, path } = item |
| | | if (redirect) { |
| | | this.$router.push(redirect) |
| | | return |
| | | } |
| | | this.$router.push(this.pathCompile(path)) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .el-breadcrumb{ |
| | | background-color: #09152F; |
| | | border: 1px dotted #081F31; |
| | | height: 50px; |
| | | .app-breadcrumb.el-breadcrumb { |
| | | display: inline-block; |
| | | font-size: 14px; |
| | | line-height: 30px; |
| | | margin-left: 8px; |
| | | .no-redirect { |
| | | color: #97a8be; |
| | | cursor: text; |
| | | } |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | <template> |
| | | <!-- 侧边导航栏 --> |
| | | <el-aside width="200px"> |
| | | <h2 class="siderbar-title">遂昌执法平台</h2> |
| | | <el-scrollbar> |
| | | <!-- 路由 --> |
| | | <el-menu router class="el-menu-vertical" :default-active="$route.path"> |
| | | <!-- 视频巡查 --> |
| | | <el-submenu index="/home/video"> |
| | | <template slot="title"> |
| | | <span slot="prefix" class="icon-padding"> |
| | | <svg-icon icon-class="video"></svg-icon> |
| | | </span> |
| | | <span slot="title">视频巡查</span> |
| | | </template> |
| | | <el-menu-item index="/home/video">视频巡查</el-menu-item> |
| | | </el-submenu> |
| | | <!-- 智能巡查 --> |
| | | <el-submenu index="/admin/article1"> |
| | | <template slot="title"> |
| | | <span slot="prefix" class="icon-padding"> |
| | | <svg-icon icon-class="intelligence"></svg-icon> |
| | | </span> |
| | | <span>智能巡查</span> |
| | | </template> |
| | | <el-menu-item index="/admin/article/add">预警研判</el-menu-item> |
| | | <el-menu-item index="/admin/article">违规检索</el-menu-item> |
| | | <el-menu-item index="/admin/article">趋势分析</el-menu-item> |
| | | <el-menu-item index="/admin/article">数据统计</el-menu-item> |
| | | <el-menu-item index="/admin/article">运行报告</el-menu-item> |
| | | </el-submenu> |
| | | <!-- 运营管理 --> |
| | | <el-submenu index="/admin/article2"> |
| | | <template slot="title"> |
| | | <span slot="prefix" class="icon-padding"> |
| | | <svg-icon icon-class="operate"></svg-icon> |
| | | </span> |
| | | <span>运营管理</span> |
| | | </template> |
| | | <el-menu-item index="/admin/article/add">执法管理</el-menu-item> |
| | | <el-menu-item index="/admin/article/add">调度管理</el-menu-item> |
| | | <el-menu-item index="/admin/article/add">店铺管理</el-menu-item> |
| | | <el-menu-item index="/admin/article/add">车辆管理</el-menu-item> |
| | | <el-menu-item index="/admin/article/add">图片管理</el-menu-item> |
| | | <el-menu-item index="/admin/article/add">视频管理</el-menu-item> |
| | | <el-menu-item index="/admin/article/add">消息管理</el-menu-item> |
| | | <el-menu-item index="/admin/article/add">审核管理</el-menu-item> |
| | | <el-menu-item index="/admin/article/add">短信管理</el-menu-item> |
| | | <el-menu-item index="/admin/article">算法模型管理</el-menu-item> |
| | | <el-menu-item index="/admin/article">日志管理</el-menu-item> |
| | | </el-submenu> |
| | | <!-- 系统设置 --> |
| | | <el-submenu index="/admin/article3"> |
| | | <template slot="title"> |
| | | <!-- <i class="el-icon-reading"></i> --> |
| | | <span slot="prefix" class="icon-padding"> |
| | | <svg-icon icon-class="system"></svg-icon> |
| | | </span> |
| | | <span>系统设置</span> |
| | | </template> |
| | | <!-- 基本设置 --> |
| | | <el-submenu index="/admin/article/add"> |
| | | <div> |
| | | <!-- 侧边导航栏 --> |
| | | <el-aside width="200px"> |
| | | <h2 class="siderbar-title">遂昌执法平台</h2> |
| | | <el-scrollbar> |
| | | <!-- 路由 --> |
| | | <el-menu router class="el-menu-vertical" :default-active="$route.path" > |
| | | <!-- 视频巡查 --> |
| | | <el-submenu index="/home/video"> |
| | | <template slot="title"> |
| | | <span>基本设置</span> |
| | | <span slot="prefix" class="icon-padding"> |
| | | <svg-icon icon-class="video"></svg-icon> |
| | | </span> |
| | | <span slot="title">视频巡查</span> |
| | | </template> |
| | | <el-menu-item index="/admin/article">用户管理</el-menu-item> |
| | | <el-menu-item index="/admin/article">角色管理</el-menu-item> |
| | | <el-menu-item index="/admin/article">权限管理</el-menu-item> |
| | | <el-menu-item index="/admin/article">部门管理</el-menu-item> |
| | | <el-menu-item index="/home/video">视频巡查</el-menu-item> |
| | | </el-submenu> |
| | | <!-- 平台设置 --> |
| | | <el-submenu index="/admin/article/add"> |
| | | <!-- 智能巡查 --> |
| | | <el-submenu index="/admin/article1"> |
| | | <template slot="title"> |
| | | <span>平台设置</span> |
| | | <span slot="prefix" class="icon-padding"> |
| | | <svg-icon icon-class="intelligence"></svg-icon> |
| | | </span> |
| | | <span>智能巡查</span> |
| | | </template> |
| | | <el-menu-item index="/admin/article">门户设置</el-menu-item> |
| | | <el-menu-item index="/admin/article">第三方接口管理</el-menu-item> |
| | | <el-menu-item index="/admin/article/add">预警研判</el-menu-item> |
| | | <el-menu-item index="/admin/article">违规检索</el-menu-item> |
| | | <el-menu-item index="/admin/article">趋势分析</el-menu-item> |
| | | <el-menu-item index="/admin/article">数据统计</el-menu-item> |
| | | <el-menu-item index="/admin/article">运行报告</el-menu-item> |
| | | </el-submenu> |
| | | </el-submenu> |
| | | </el-menu> |
| | | </el-scrollbar> |
| | | </el-aside> |
| | | <!-- 运营管理 --> |
| | | <el-submenu index="/admin/article2"> |
| | | <template slot="title"> |
| | | <span slot="prefix" class="icon-padding"> |
| | | <svg-icon icon-class="operate"></svg-icon> |
| | | </span> |
| | | <span>运营管理</span> |
| | | </template> |
| | | <el-menu-item index="/admin/article/add">执法管理</el-menu-item> |
| | | <el-menu-item index="/admin/article/add">调度管理</el-menu-item> |
| | | <el-menu-item index="/admin/article/add">店铺管理</el-menu-item> |
| | | <el-menu-item index="/admin/article/add">车辆管理</el-menu-item> |
| | | <el-menu-item index="/admin/article/add">图片管理</el-menu-item> |
| | | <el-menu-item index="/admin/article/add">视频管理</el-menu-item> |
| | | <el-menu-item index="/admin/article/add">消息管理</el-menu-item> |
| | | <el-menu-item index="/admin/article/add">审核管理</el-menu-item> |
| | | <el-menu-item index="/admin/article/add">短信管理</el-menu-item> |
| | | <el-menu-item index="/admin/article">算法模型管理</el-menu-item> |
| | | <el-menu-item index="/admin/article">日志管理</el-menu-item> |
| | | </el-submenu> |
| | | <!-- 系统设置 --> |
| | | <el-submenu index="/admin/article3"> |
| | | <template slot="title"> |
| | | <!-- <i class="el-icon-reading"></i> --> |
| | | <span slot="prefix" class="icon-padding"> |
| | | <svg-icon icon-class="system"></svg-icon> |
| | | </span> |
| | | <span>系统设置</span> |
| | | </template> |
| | | <!-- 基本设置 --> |
| | | <el-submenu index="/admin/article/add"> |
| | | <template slot="title"> |
| | | <span>基本设置</span> |
| | | </template> |
| | | <el-menu-item index="/admin/article">用户管理</el-menu-item> |
| | | <el-menu-item index="/admin/article">角色管理</el-menu-item> |
| | | <el-menu-item index="/admin/article">权限管理</el-menu-item> |
| | | <el-menu-item index="/admin/article">部门管理</el-menu-item> |
| | | </el-submenu> |
| | | <!-- 平台设置 --> |
| | | <el-submenu index="/admin/article/add"> |
| | | <template slot="title"> |
| | | <span>平台设置</span> |
| | | </template> |
| | | <el-menu-item index="/admin/article">门户设置</el-menu-item> |
| | | <el-menu-item index="/admin/article">第三方接口管理</el-menu-item> |
| | | </el-submenu> |
| | | </el-submenu> |
| | | </el-menu> |
| | | </el-scrollbar> |
| | | </el-aside> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default {}; |
| | | export default { |
| | | |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss" scpoed> |
| | |
| | | ref="loginForm" |
| | | label-position="left" |
| | | > |
| | | <!-- title --> |
| | | <!-- title --> |
| | | <h2 class="login-title">用户登录 / USER LOGIN</h2> |
| | | <el-form-item prop="username"> |
| | | <!-- 用户名输入框 --> |
| | |
| | | autoComplete="on" |
| | | placeholder="请输入登录密码" |
| | | > |
| | | <!-- 输入框前icon --> |
| | | <!-- 输入框前icon --> |
| | | <span slot="prefix"> |
| | | <svg-icon icon-class="password" class="color"></svg-icon> |
| | | <svg-icon icon-class="password" class="color"></svg-icon> |
| | | </span> |
| | | <!-- 输入框后icon --> |
| | | <span slot="suffix" @click="showPwd"> |
| | |
| | | |
| | | <script> |
| | | import { isvalidUsername } from "@/utils/validate"; |
| | | |
| | | import { createNamespacedHelpers } from "vuex"; |
| | | const { mapActions } = createNamespacedHelpers("users"); |
| | | export default { |
| | | name: "login", |
| | | data() { |
| | |
| | | }; |
| | | return { |
| | | loginForm: { |
| | | username: "", |
| | | password: "", |
| | | username: "admin", |
| | | password: "macro123", |
| | | }, |
| | | loginRules: { |
| | | username: [ |
| | |
| | | pwdType: false, |
| | | }; |
| | | }, |
| | | created() { |
| | | // this.loginForm.username = getCookie("username"); |
| | | // this.loginForm.password = getCookie("password"); |
| | | // if ( |
| | | // this.loginForm.username === undefined || |
| | | // this.loginForm.username == null || |
| | | // this.loginForm.username === "" |
| | | // ) { |
| | | // this.loginForm.username = "admin"; |
| | | // } |
| | | // if ( |
| | | // this.loginForm.password === undefined || |
| | | // this.loginForm.password == null |
| | | // ) { |
| | | // this.loginForm.password = ""; |
| | | // } |
| | | }, |
| | | created() {}, |
| | | methods: { |
| | | showPwd() { |
| | | if (!this.pwdType) { |
| | |
| | | this.pwdType = false; |
| | | } |
| | | }, |
| | | ...mapActions(["login"]), |
| | | handleLogin() { |
| | | this.$router.push({ path: "/home" }); |
| | | // this.$refs.loginForm.validate((valid) => { |
| | | // if (valid) { |
| | | // console.log(valid); |
| | | // this.loading = true; |
| | | // this.$store |
| | | // .dispatch("Login", this.loginForm) |
| | | // .then(() => { |
| | | // this.loading = false; |
| | | // setCookie("username", this.loginForm.username, 15); |
| | | // setCookie("password", this.loginForm.password, 15); |
| | | // this.$router.push({ path: "/" }); |
| | | // }) |
| | | // .catch(() => { |
| | | // this.loading = false; |
| | | // }); |
| | | // } else { |
| | | // console.log("参数验证不合法!"); |
| | | // return false; |
| | | // } |
| | | // }); |
| | | console.log("in login"); |
| | | const { username, password } = this.loginForm; |
| | | this.$axios |
| | | .post("http://42.193.1.25:8082/sccg/admin/login", { |
| | | password, |
| | | username, |
| | | }) |
| | | .then(function (response) { |
| | | console.log(response); |
| | | }) |
| | | .catch(function (error) { |
| | | console.log(error); |
| | | }); |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .color{ |
| | | .color { |
| | | color: red; |
| | | } |
| | | #background { |
| | | width: 100vw; |
| | | height: 100vh; |
| | | background: url("@/assets/imgs/login/login_bg.jpg"); |
| | | background-size: cover ; |
| | | background-size: cover; |
| | | position: relative; |
| | | display: flex; |
| | | min-width: 800px; |
| | | } |
| | | .login-form-layout { |
| | | position: absolute; |
| | | top: 20%; |
| | | right: 5%; |
| | | width: 360px; |
| | | align-self: center; |
| | | } |
| | | .text { |
| | | align-self: flex-start; |
| | | position: absolute; |
| | | top:20%; |
| | | top: 20%; |
| | | left: 5%; |
| | | // margin-top: 180px; |
| | | // margin-left: 50px; |
| | | display: flex; |
| | | width: 400px; |
| | | justify-content: space-between; |
| | |
| | | host: 'localhost', |
| | | port: port, |
| | | open: true, |
| | | headers: { |
| | | "Access-Control-Allow-Origin": "*", |
| | | }, |
| | | proxy: { |
| | | // 跨域配置 |
| | | [process.env.VUE_APP_BASE_API]: { |
| | | target: `http://localhost:8080`, |
| | | "/api": { |
| | | target: `http://42.193.1.25:8082`, |
| | | changeOrigin: true, |
| | | pathRewrite: { |
| | | ['^' + process.env.VUE_APP_BASE_API]: '' |
| | | "^/api": '' |
| | | } |
| | | } |
| | | }, |