Commit c2974b0c by 林永鑫

初始化

初始化
parents
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
# important_personnel_control_platform
## Project setup
```
npm install
```
### Compiles and hot-reloads for development
```
npm run serve
```
### Compiles and minifies for production
```
npm run build
```
### Run your unit tests
```
npm run test:unit
```
### Lints and fixes files
```
npm run lint
```
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).
module.exports = {
presets: ["@vue/cli-plugin-babel/preset"],
};
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"name": "control_platform",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"test:unit": "vue-cli-service test:unit",
"lint": "vue-cli-service lint"
},
"dependencies": {
"core-js": "^3.6.5",
"js-cookie": "^2.2.1",
"nprogress": "^0.2.0",
"vue": "^2.6.11",
"vue-router": "^3.2.0",
"vuex": "^3.4.0"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0",
"@vue/cli-plugin-eslint": "~4.5.0",
"@vue/cli-plugin-router": "~4.5.0",
"@vue/cli-plugin-unit-mocha": "~4.5.0",
"@vue/cli-plugin-vuex": "~4.5.0",
"@vue/cli-service": "~4.5.0",
"@vue/eslint-config-prettier": "^6.0.0",
"@vue/test-utils": "^1.0.3",
"axios": "^0.21.1",
"babel-eslint": "^10.1.0",
"chai": "^4.1.2",
"echarts": "^5.1.1",
"element-ui": "^2.15.1",
"eslint": "^6.7.2",
"eslint-plugin-prettier": "^3.3.1",
"eslint-plugin-vue": "^6.2.2",
"node-sass": "^4.12.0",
"prettier": "^2.2.1",
"sass-loader": "^8.0.2",
"vue-awesome": "^4.3.1",
"vue-template-compiler": "^2.6.11"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/essential",
"eslint:recommended",
"@vue/prettier"
],
"parserOptions": {
"parser": "babel-eslint"
},
"rules": {},
"overrides": [
{
"files": [
"**/__tests__/*.{j,t}s?(x)",
"**/tests/unit/**/*.spec.{j,t}s?(x)"
],
"env": {
"mocha": true
}
}
]
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
]
}
\ No newline at end of file
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
<template>
<div id="app">
<router-view />
</div>
</template>
<style lang="scss">
/*每个页面公共css */
@import "assets/styles/main.scss";
</style>
\ No newline at end of file
var relUrlIp = window.location.host.substring(
0,
window.location.host.length - 5
);
let base = {
BaseURL: '',//命案管理后台IP
qdLink: "",//前端访问链接
xzxt: '',
arcgisUrl:'',//map
dwcxURL:"",
};
if (relUrlIp == "133.8.5.1" ||
relUrlIp == "68.174.69.46" ||
relUrlIp == "68.175.7.118" ||
relUrlIp == "65.65.100.205" ||
relUrlIp == "68.175.7.150" ||
relUrlIp == "68.175.7.95" ||
relUrlIp == "68.174.25.98" ||
relUrlIp == "26.8.175.240" ||
relUrlIp == "133.8.5.67" ||
relUrlIp == "26.3.14.61") {
//------------------------------命案管理后台IP**公安网**--------------------------------
base.BaseURL = "/apiMaxtGaw";
base.qdLink = 'http:26.3.14.61:9101/';
base.xzxt = 'http://26.3.13.120:8051/#';
base.tjbh = 'http://80.2.21.62:8080/WebReport/ReportServer?reportlet=scjwzh%5B5b9a%5D%5B65f6%5D%2Fsc073_%5B5211%5D%5B4fa6%5D_%5B547d%5D%5B6848%5D%5B7edf%5D%5B8ba1%5D%5B62a5%5D%5B8868%5D%2Fsc073_xz_matj.cpt&op=view&tjdw=150000000000';
base.sjksh = 'http://68.174.69.46:8052/#/SpaceTimeCombat/HomicideCase/';
//内蒙公安网行政区划
base.arcgisUrl="http://26.3.12.43";
base.dwcxURL="/apiDwcxGaw"
} else {
//------------------------------命案管理后台IP**阿里云**--------------------------------
base.BaseURL = "/apiMaxt";
base.qdLink = 'http:39.99.155.173:9022/';
base.xzxt = 'http://47.92.225.109:8004/#';
base.tjbh = 'http://80.2.21.62:8080/WebReport/ReportServer?reportlet=scjwzh%5B5b9a%5D%5B65f6%5D%2Fsc073_%5B5211%5D%5B4fa6%5D_%5B547d%5D%5B6848%5D%5B7edf%5D%5B8ba1%5D%5B62a5%5D%5B8868%5D%2Fsc073_xz_matj.cpt&op=view&tjdw=150000000000';
base.sjksh = 'http://68.174.69.46:8052/#/SpaceTimeCombat/HomicideCase/';
//内蒙公安网行政区划
base.arcgisUrl="http://26.3.12.43";
base.dwcxURL='/apiDwcx'
}
export default base;
import base from "@/api/base";
import Http from "@/utils/axiosHttp.js";
export const login = (account, password) =>Http({
url: base.BaseURL+'/blade-auth/token',
method: 'post',
params: {
account, password
}
});
/*参考文档:https://element.faas.ele.me/#/zh-CN/component/color#fu-zhu-se*/
/*
主色调,蓝色:#1AB1E1,绿色 #4CAF50,蓝色:#03A9F4,黄色:#FF9800,粉色:#FF547B,棕色:#C3A769,浅绿色:#65C4AA,黑色:#333333,紫色:#B323B4,淡粉色:#FF8B8B,element UI:#409eff
*/
$base-color: #126CE4;
$base-color-success: #0BD9B6;
$base-color-warning: #F56C6C;
$base-color-info: #FE9200;
$body-bg: #E3E3E3;
$delete-color:#F56C6C;
/* 文字基本颜色 */
$ns-text-color: #333333; /*基本色*/
$ns-text-color2:#8C97A0;
$ns-text-color3:#999;
/* 文字尺寸 */
$ns-font-size-sm: 12px;
$ns-font-size-base: 14px;
$ns-font-size-lg: 16px;
$ns-font-size-tab-title: 24px;
$ns-font-size-title: 30px;
// 通用dom元素样式 **************************start
body {
line-height: 1.8;
font-family: 'Microsoft YaHei';
background-color: $body-bg;
font-size: $ns-font-size-sm;
color: $ns-text-color;
}
html,
body,
dl,
dt,
dd,
ol,
ul,
h1,
h2,
h3,
h4,
h5,
h6,
p {
margin: 0;
padding: 0;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
display: block;
}
ol,
ul,
li {
list-style: none;
}
i,
em {
font-style: normal;
}
body{
background: $body-bg;
}
/*去掉a标签的默认样式*/
a {
text-decoration: none;
color: $ns-text-color;
&:hover {
color: $base-color;
}
}
.ar{text-align: right;}
.ac{text-align: center;}
.al{text-align: left;}
.el-main {
border-top: solid 1px #f2f2f2;
overflow: initial;
background-color: #fff;
padding: 0;
}
img {
border-style: none;
max-width: 100%;
vertical-align: middle;
}
// 通用dom元素样式 **************************end
<template>
<div class="hello">
<h1>{{ msg }}</h1>
<p>
For a guide and recipes on how to configure / customize this project,<br />
check out the
<a href="https://cli.vuejs.org" target="_blank" rel="noopener"
>vue-cli documentation</a
>.
</p>
<h3>Installed CLI Plugins</h3>
<ul>
<li>
<a
href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel"
target="_blank"
rel="noopener"
>babel</a
>
</li>
<li>
<a
href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router"
target="_blank"
rel="noopener"
>router</a
>
</li>
<li>
<a
href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-vuex"
target="_blank"
rel="noopener"
>vuex</a
>
</li>
<li>
<a
href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint"
target="_blank"
rel="noopener"
>eslint</a
>
</li>
<li>
<a
href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-unit-mocha"
target="_blank"
rel="noopener"
>unit-mocha</a
>
</li>
</ul>
<h3>Essential Links</h3>
<ul>
<li>
<a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a>
</li>
<li>
<a href="https://forum.vuejs.org" target="_blank" rel="noopener"
>Forum</a
>
</li>
<li>
<a href="https://chat.vuejs.org" target="_blank" rel="noopener"
>Community Chat</a
>
</li>
<li>
<a href="https://twitter.com/vuejs" target="_blank" rel="noopener"
>Twitter</a
>
</li>
<li>
<a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a>
</li>
</ul>
<h3>Ecosystem</h3>
<ul>
<li>
<a href="https://router.vuejs.org" target="_blank" rel="noopener"
>vue-router</a
>
</li>
<li>
<a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a>
</li>
<li>
<a
href="https://github.com/vuejs/vue-devtools#vue-devtools"
target="_blank"
rel="noopener"
>vue-devtools</a
>
</li>
<li>
<a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener"
>vue-loader</a
>
</li>
<li>
<a
href="https://github.com/vuejs/awesome-vue"
target="_blank"
rel="noopener"
>awesome-vue</a
>
</li>
</ul>
</div>
</template>
<script>
export default {
name: "HelloWorld",
props: {
msg: String,
},
};
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="scss">
h3 {
margin: 40px 0 0;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>
import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store";
// 按需引入vue-awesome图标
import Icon from 'vue-awesome/components/Icon';
import 'vue-awesome/icons/chart-bar.js';
import 'vue-awesome/icons/chart-area.js';
import 'vue-awesome/icons/chart-pie.js';
import 'vue-awesome/icons/chart-line.js';
import 'vue-awesome/icons/align-left.js';
//引用elementui
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.use(ElementUI);
// 全局注册图标
Vue.component('icon', Icon);
//引入echart(5.0版本后改为了require模式)
var echarts = require('echarts');
Vue.prototype.$echarts = echarts
//全局引入vueX
Vue.prototype.$store = store;
Vue.config.productionTip = false;
new Vue({
router,
store,
render: (h) => h(App),
}).$mount("#app");
import Vue from "vue";
import VueRouter from "vue-router";
// 进度条
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'// progress bar style
NProgress.configure({ showSpinner: false })// NProgress Configuration
import { getToken } from '@/utils/auth' // getToken from cookie
import indexRoutes from "./modules/index";
//重写push方法,添加传统方式的路由跳转
const originalPush = VueRouter.prototype.push;
VueRouter.prototype.push = function push(location) {
if (location && typeof location == "string" && location.indexOf("http") != -1)
return window.location.open(location, "_self");
return originalPush.call(this, location).catch(err => err);
};
Vue.use(VueRouter);
const routes = [
...indexRoutes,
{
path: '/',
redirect: '/login'
},
{
path: "/login",
name: "Login",
meta: {
auth: "5"
},
component: () => import("@/views/Login/login.vue")
},
];
const router = new VueRouter({
mode: "history",
base: process.env.BASE_URL,
routes,
});
//路由守卫拦截白名单
const whiteList = ['/login']
//路由拦截
router.beforeEach((to, from, next) => {
//根据路由配置设置页面的title
if (to.meta.title) {
document.title = to.meta.title
}
//路由跳转进度条
NProgress.start();
//判断是否已经登录
if (getToken()) {
// 已登录且要跳转的页面是登录页
if (to.path === '/login') {
next()
NProgress.done()
} else {
next()
}
} else {
/* has no token*/
if (whiteList.indexOf(to.path) !== -1) { // 在免登录白名单,直接进入
next()
} else {
next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页
NProgress.done()
}
}
})
router.afterEach(() => {
NProgress.done() // finish progress bar
})
export default router;
export default [
//首页大屏截面
{
path: "/home",
name: "Home",
meta: {
title: "Home",
},
component: () => import("@/views/Home.vue")
},
{
path: "/PlatFormCenter",
name: "PlatFormCenter",
meta: {
title: '管控平台',
},
redirect: '/EarlyWarningControl',//设置,默认的子路由
component: () => import("@/views/PlatFormCenter/PlatFormCenter.vue"),
children:
[
{
path: "/EarlyWarningControl",
name: "EarlyWarningControl",
component: () => import("@/views/PlatFormCenter/EarlyWarningControl/EarlyWarningControl.vue"),
meta: {
title: "预警防控"
}
}
]
}
]
module.exports = {
/**
* @description 网站标题
*/
title: 'Founder',
/**
* @description 路由模式("hash","history")
*/
routerMode: 'history',
}
import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);
export default new Vuex.Store({
state: {},
mutations: {},
actions: {},
modules: {},
});
import Cookies from "js-cookie";
const TokenKey = "SDrxEA%_tWW6ezd3";
export function getToken() {
return Cookies.get(TokenKey);
}
export function setToken(token, expires = 0) {
if (expires) return Cookies.set(TokenKey, token, { expires });
return Cookies.set(TokenKey, token);
}
export function removeToken() {
return Cookies.remove(TokenKey);
}
var getBase64=(url, callback) =>{
var Img = new Image(),
dataURL = '';
Img.src = url + '?v=' + Math.random();
Img.setAttribute('crossOrigin', 'Anonymous');
Img.onload = function() {
var canvas = document.createElement('canvas'),
width = Img.width,
height = Img.height;
canvas.width = width;
canvas.height = height;
canvas.getContext('2d').drawImage(Img, 0, 0, width, height);
dataURL = canvas.toDataURL('image/jpeg');
return callback ? callback(dataURL) : null;
};
};
export {
getBase64
}
const Base64 = {
//加密
encode(str) {
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,
function toSolidBytes(match, p1) {
return String.fromCharCode('0x' + p1);
}));
},
//解密
decode(str) {
// Going backwards: from bytestream, to percent-encoding, to original string.
return decodeURIComponent(atob(str).split('').map(function (c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
}
}
export default Base64
import axios from "axios";
// import { getToken } from "./auth.js";
import { Message } from "element-ui";
import store from "@/store";
/*import qs from "qs";*/
axios.defaults.timeout = 50000;
axios.defaults.headers = {
"X-Requested-With": "XMLHttpRequest"
};
axios.defaults.responseType = "json";
axios.defaults.withCredentials = true;
// request 请求拦截器
axios.interceptors.request.use(
config => {
config.headers["Content-Type"] = "application/json;charset=utf-8";
// config.headers['Content-Type'] = 'multipart/form-data';
// 请求前进行拦截, 验证是否已经登录等
// const token = getToken();
// if (token) {
// if (config.url.indexOf("/login") === -1) {
// config.headers["Authorization"] = token;
// }
// }
return config;
},
error => {
return Promise.reject(error);
}
);
// response 响应拦截器
axios.interceptors.response.use(
response => {
const status = response.data.code;
const message = response.data.message;
if (status < 0) {
Message({
message: message,
type: "error"
});
return Promise.reject(new Error(message));
}
return response.data;
},
error => {
return Promise.reject(new Error(error));
}
);
/**
* 封装get方法
* @param url
* @param data
* @returns {Promise}
*/
export function get(url, params) {
return new Promise((resolve, reject) => {
axios
.get(url, {
params: params
})
.then(res => {
resolve(res);
})
.catch(err => {
reject(err);
});
});
}
/**
* 封装post请求
* @param url
* @param data
* @returns {Promise}
*/
export function post(url, params) {
return new Promise((resolve, reject) => {
axios
.post(url, JSON.parse(params))
.then(response => {
resolve(response);
var urlIp = window.location.host.substring(
0,
window.location.host.length - 5
);
var logs = {
ip: urlIp,
request: url,
params: params
};
store.commit("user/SET_Logs", logs);
})
.catch(err => {
reject(err.data);
});
});
}
export function postForm(url, params) {
return new Promise((resolve, reject) => {
axios
.post(url, params)
.then(response => {
resolve(response);
var urlIp = window.location.host.substring(
0,
window.location.host.length - 5
);
var logs = {
ip: urlIp,
request: url,
params: params
};
store.commit("user/SET_Logs", logs);
})
.catch(err => {
reject(err.data);
});
});
}
/*export function post(url, params) {
debugger
return new Promise((resolve, reject) => {
axios.post(url, qs.stringify(params)).then(
response => {
resolve(response);
var urlIp = window.location.host.substring(
0,
window.location.host.length - 5
);
var logs = {
ip: urlIp,
request: url,
params: params
};
store.commit("user/SET_Logs", logs);
}).catch(err => {
reject(err.data);
});
});
}*/
export default axios;
var checkSfzhm = (rule, value, callback) => {//身份证号码
let reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
if (value) {
if (!reg.test(value)) {
return callback(new Error("请输入正确的身份证号"));
} else {
callback();
}
}
};
var checkSjhm = (rule, value, callback) => {//手机号码
let reg = /^1[345789]\d{9}$/;
if (value) {
if (!reg.test(value)) {
return callback(new Error("请输入正确的手机号码"));
} else {
callback();
}
}
};
var checkNumber = (rule, value, callback) => {//数字
let reg = /^[0-9]*$/;
if (value) {
if (!reg.test(value)) {
return callback(new Error("由数字组成"));
} else {
callback();
}
}
};
var checkJyaq = (rule, value, callback) => {//简要案情
if(value){
if ((value.indexOf("and")!= -1|| value.indexOf("AND")!= -1) &&(value.indexOf("or")!= -1 || value.indexOf("OR")!= -1) ) {
return callback(new Error("只可以使用 and 和 or 中的其中一个"));
}else {
callback();
}
}else{
callback();
}
};
export {
checkSfzhm,
checkSjhm,
checkNumber,
checkJyaq
}
export default {
/**
* 时间戳转日期格式
* @param {Object} timeStamp
*/
timeStampTurnTime(timeStamp) {
if (timeStamp != undefined && timeStamp != "" && timeStamp > 0) {
var date = new Date();
date.setTime(timeStamp);
var y = date.getFullYear();
var m = date.getMonth() + 1;
m = m < 10 ? "0" + m : m;
var d = date.getDate();
d = d < 10 ? "0" + d : d;
var h = date.getHours();
h = h < 10 ? "0" + h : h;
var minute = date.getMinutes();
var second = date.getSeconds();
minute = minute < 10 ? "0" + minute : minute;
second = second < 10 ? "0" + second : second;
return y + "-" + m + "-" + d + " " + h + ":" + minute + ":" + second;
} else {
return "";
}
},
/**
* 数值去重
* @param {Array} arr 数组
* @param {string} field 字段
*/
unique(arr, field) {
const res = new Map();
return arr.filter(a => !res.has(a[field]) && res.set(a[field], 1));
},
/**
* 判断值是否在数组中
* @param {Object} elem
* @param {Object} arr
* @param {Object} i
*/
inArray: function(elem, arr) {
return arr == null ? -1 : arr.indexOf(elem);
},
/**
* 获取某天日期
* @param {Object} day
*/
getDay: function(day) {
var today = new Date();
var targetday_milliseconds = today.getTime() + 1000 * 60 * 60 * 24 * day;
today.setTime(targetday_milliseconds);
const doHandleMonth = function(month) {
var m = month;
if (month.toString().length == 1) {
m = "0" + month;
}
return m;
};
var tYear = today.getFullYear();
var tMonth = today.getMonth();
var tDate = today.getDate();
var tWeek = today.getDay();
var time = parseInt(today.getTime() / 1000);
tMonth = doHandleMonth(tMonth + 1);
tDate = doHandleMonth(tDate);
const week = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"];
return {
t: time,
y: tYear,
m: tMonth,
d: tDate,
w: week[tWeek]
};
},
/**
* 深度拷贝对象
* @param {Object} obj
*/
deepClone(obj) {
const isObject = function(obj) {
return typeof obj == "object";
};
if (!isObject(obj)) {
throw new Error("obj 不是一个对象!");
}
//判断传进来的是对象还是数组
let isArray = Array.isArray(obj);
let cloneObj = isArray ? [] : {};
//通过for...in来拷贝
for (let key in obj) {
cloneObj[key] = isObject(obj[key]) ? this.deepClone(obj[key]) : obj[key];
}
return cloneObj;
}
};
let watermark = {}
let setWatermark = (str1,str2,str3,str4,str5) => {
let id = '1.23452384164.123412415'
if (document.getElementById(id) !== null) {
document.body.removeChild(document.getElementById(id))
}
let can = document.createElement('canvas')
can.width = 600
can.height = 400
let cans = can.getContext('2d')
cans.rotate(-20 * Math.PI / 180)
cans.font = '16px Vedana'
cans.fillStyle = 'rgba(0, 0, 0, 0.35)'
cans.textAlign = 'left'
cans.textBaseline = 'Middle'
cans.fillText(str1, can.width / 3, can.height / 2)
cans.fillText(str2, can.width / 3, can.height / 1.7)
cans.fillText(str3, can.width / 3, can.height / 1.5)
cans.fillText(str4, can.width / 3, can.height / 1.35)
cans.fillText(str5, can.width / 3, can.height / 1.23)
let div = document.createElement('div')
div.id = id
div.style.pointerEvents = 'none'
div.style.top = '10px'
div.style.left = '0px'
div.style.position = 'fixed'
div.style.zIndex = '100000'
div.style.width = document.documentElement.clientWidth - 10 + 'px'
div.style.height = document.documentElement.clientHeight - 10 + 'px'
div.style.background = 'url(' + can.toDataURL('image/png') + ') left top repeat'
document.body.appendChild(div)
return id
}
// 该方法只允许调用一次
watermark.set = (str1,str2,str3,str4,str5) => {
let id = setWatermark(str1,str2,str3,str4,str5)
setInterval(() => {
if (document.getElementById(id) === null) {
id = setWatermark(str1,str2,str3,str4,str5)
}
}, 500)
window.onresize = () => {
setWatermark(str1,str2,str3,str4,str5)
}
}
export default watermark
<template>
<div class="about">
<h1>This is an about page</h1>
</div>
</template>
<template>
<div class="home">
<img alt="Vue logo" src="../assets/logo.png" />
<HelloWorld msg="Welcome to Your Vue.js App" />
</div>
</template>
<script>
// @ is an alias to /src
import HelloWorld from "@/components/HelloWorld.vue";
export default {
name: "Home",
components: {
HelloWorld,
},
};
</script>
<template>
<div id="home">
<div class="login-container">
<el-form :model="ruleForm2"
:rules="rules2"
status-icon
ref="ruleForm2"
label-position="left"
label-width="0px"
class="demo-ruleForm login-page">
<div>
<div style="position: absolute;top: -35px;left: 166px;">
<img src="../../assets/images/login/jinhui.png"
alt="">
</div>
<img src="../../assets/images/login/title.png"
alt=""
style="margin-top: 25px;">
</div>
<div class="el-input el-input-div"
style="position: relative;margin-top: 15px;">
<el-form-item prop="account"
class="inputs">
<el-input type="text"
v-model="ruleForm2.account"
auto-complete="off"
placeholder="用户名"></el-input>
</el-form-item>
<span style="position: absolute;top: 14px;left:12px;height: 100%"><img src="../../assets/images/login/user.png"
alt=""></span>
</div>
<div class="el-input el-input-div"
style="position: relative">
<el-form-item prop="password"
class="inputs">
<el-input type="password"
v-model="ruleForm2.password"
auto-complete="off"
placeholder="用户密码"></el-input>
</el-form-item>
<span style="position: absolute;top: 14px;left:12px;height: 100%"><img src="../../assets/images/login/pwd.png"
alt=""></span>
</div>
<el-form-item style="width:100%;"
class="loginBtn">
<el-button style="width:100%;height:44px;background: #2962FF;color: #fff;
box-shadow: 0px 4px 4px rgba(3, 56, 145, 0.16);"
@click="handleSubmit"
:loading="logining">登录</el-button>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import { getToken, removeToken, setToken } from "@/utils/auth";
import url from "@/api/base";
export default {
data() {
return {
logining: false,
ruleForm2: {
account: "",
password: ""
},
rules2: {
account: [{ required: true, message: "请输入账号", trigger: "blur" }],
password: [{ required: true, message: "请输入密码", trigger: "blur" }]
},
checked: false
};
},
methods: {
handleSubmit() {
let self = this;
self.$refs.ruleForm2.validate(valid => {
if (valid) {
self.logining = true;
var myJson = {
status: 200,
msg:
"eyJhbGciOiJIUzI1NiJ9.eyJ1aWQiOiJEU1NGQVdEV0FEQVMuLi4iLCJzdWIiOiJ7XCJ0cnVlbmFtZVwiOlwiYWRtaW5cIixcImp1cmlzZGljdGlvblwiOlwiMFwiLFwicG9saWNlbWFuaWRcIjpcImFkbWluXCIsXCJ4eHpqYmhcIjpcIjEwMFwiLFwicGFzc3dvcmRcIjpcIlptOTFibVJsY2pRME1Uaz1cIixcImd4c2pcIjoxNTg3MDQ4MjE3MDAwLFwiaWRlbnRpdHljYXJkXCI6XCJhZG1pblwiLFwidXNlcm5hbWVcIjpcImFkbWluXCJ9IiwidXNlcl9uYW1lIjoiYWRtaW4iLCJuaWNrX25hbWUiOiJEQVNEQTEyMSIsImV4cCI6MTU5OTgxNjU0MCwiaWF0IjoxNTk5ODEyOTQwfQ.mzixfUIqL2lmGkLfheqpkx4VIa6sOuGDT7iQtJKzuPc",
data: [
{
xxzjbh: "100",
policemanid: "admin",
truename: "admin",
telephone: null,
identitycard: "admin",
unitcode: null,
unitname: null,
username: "admin",
password: "Zm91bmRlcjQ0MTk=",
jurisdiction: "0",
gxsj: 1587048217000,
xxlyms: null,
jobname: null,
lrr: null,
lrdwdm: null,
lrdwmc: null,
gxr: null,
gxdwdm: null,
gxdwmc: null,
role_id: null,
permission_id: null,
},
],
rediskey: "",
};
/*登陆成功存储token*/
sessionStorage.setItem("token", myJson.msg);
setToken(myJson.msg, 0);
self.logining = false;
self.$router.push("EarlyWarningControl")
} else {
return false;
}
});
}
},
computed: {
...mapGetters(["token"])
},
created() {
var lett = this;
document.onkeydown = function (e) {
var key = window.event.keyCode;
if (key == 13) {
lett.handleSubmit();
}
}
}
};
</script>
<style lang="scss" scoped>
#home {
width: 100%;
height: 100%;
position: fixed;
background-image: url(../../assets/images/login/bg.png);
background-repeat: no-repeat;
background-size: 100% 100%;
z-index: 100;
}
.common-lay .el-main {
line-height: 0px;
}
.el-input-div /deep/ .el-input__inner {
padding: 0 33px;
}
.loginBtn /deep/ .el-button {
border: none;
}
.inputs /deep/ input {
height: 44px;
background: rgba(255, 255, 255, 1) !important;
}
.login-container {
position: absolute;
/*top: 138px;*/
bottom: 50px;
right: -20%;
width: 100%;
height: 100%;
/* 登录框上下对齐 */
display: flex;
align-items: center;
}
.login-page {
position: relative;
-webkit-border-radius: 5px;
border-radius: 5px;
margin: 0px auto;
width: 350px;
padding: 20px 35px 35px 15px;
z-index: 100;
padding: 45px;
background-color: rgba(255, 255, 255, 0.3);
/*background: #fff;*/
/*border: 1px solid #eaeaea;*/
/*box-shadow: 0 0 25px #cac6c6;*/
}
label.el-checkbox.rememberme {
margin: 0px 0px 15px;
text-align: left;
}
</style>
<template>
<div id="CaseInvestigation">
ceshi哈哈哈哈
</div>
</template>
<script>
export default {
name: "CaseInvestigation",
components: {
},
data() {
return {
}
},
methods: {
},
mounted() {
var self = this;
}
}
</script>
<style scoped>
</style>
<template>
<div class="decision">
<!-- 顶部 -->
<div class="header">
</div>
<div class="content">
<transition name="fade"
mode="out-in">
<router-view />
</transition>
</div>
<div class="bottom">
</div>
</div>
</template>
<script>
import Vue from 'vue'
export default {
name: 'Decision',
data() {
return {
navList: [
[
{
id: 'A01',
name: '人员管控',
link: '/SpaceTimeCombat/CaseInvestigation',
active: true
}
],
[
{
id: 'B01',
name: '预警防控',
link: '/SpaceTimeCombat/HumanDetection',
active: false
}
],
[
{
id: 'C01',
name: '实时轨迹',
link: '/SpaceTimeCombat/VehicleDetection',
active: false
}
],
[
{
id: 'D01',
name: '用户管理',
link: '/SpaceTimeCombat/ComprehensiveTactics',
active: false
}
]
]
}
},
computed: {
currentLink() {
return this.$route.path
}
},
methods: {
to(item) {
var self = this
debugger
self.navList.forEach(items => {
if (items[0].id == item[0].id) {
items[0].active = true
} else {
items[0].active = false
}
});
if (item[0].id == "F01") {
window.open(item[0].link, '_blank');
} else {
self.$router.push(item[0].link)
}
},
tuichu() {
console.log(this.$route.fullPath)
const { href } = this.$router.resolve({
path: "/login",
})
window.open(href, '_self')
},
userPermissions() {
var self = this;
var myJson = { "status": 200, "msg": "成功获取用户权限信息", "data": { "map": { "sysuser": { "truename": "admin", "password": "Zm91bmRlcjQ0MTk=", "jurisdiction": "0", "policemanid": "admin", "gxsj": 1587048217000, "identitycard": "admin", "xxzjbh": "100", "username": "admin" }, "ROLE_NAME": "超级管理员,", "PERMISSION_ID": "A01,A0101,B01,C01,D01,E01,F01," } }, "rediskey": null }
if (myJson.status == 200 && myJson.data && myJson.data.map) {
var buttomPermisssion = {}
var buttonArry = myJson.data.map.PERMISSION_ID.split(",")
// buttonArry=['A01','B01','C01','D01','E01','F01','A0101']
for (var i = 0; i < buttonArry.length; i++) {
buttomPermisssion[buttonArry[i]] = true
}
sessionStorage.setItem('ButtonPermissions', JSON.stringify(buttomPermisssion));
if (self.$asjbh) {
self.$set(buttomPermisssion, "A01", true)
self.$set(buttomPermisssion, "B01", false)
self.$set(buttomPermisssion, "C01", false)
self.$set(buttomPermisssion, "D01", false)
self.$set(buttomPermisssion, "E01", false)
self.$set(buttomPermisssion, "F01", false);
self.$forceUpdate()
};
if (self.$sfzh || self.$shouJiHao) {
self.$set(buttomPermisssion, "A01", false)
self.$set(buttomPermisssion, "B01", true)
self.$set(buttomPermisssion, "C01", false)
self.$set(buttomPermisssion, "D01", false)
self.$set(buttomPermisssion, "E01", false)
self.$set(buttomPermisssion, "F01", false);
self.$forceUpdate()
}
Vue.prototype.$ButtonData = buttomPermisssion;
var { href } = self.$router.resolve({
path: self.$ButtonRouting['A01'],
})
if (self.$sfzh || self.$shouJiHao) {
const { href } = self.$router.resolve({
path: self.$ButtonRouting['B01'],
})
window.open(href, '_self');
} else {
const { href } = self.$router.resolve({
path: self.$ButtonRouting['A01'],
})
window.open(href, '_self');
}
} else {
window.open("/#/login", '_self');
}
// $.ajax({
// type: 'post',
// url: JuLogin_url,
// headers:{"token":this.$token},
// success: function (myJson) {
// if(myJson.status==200&&myJson.data&&myJson.data.map){
// var buttomPermisssion={}
// var buttonArry=myJson.data.map.PERMISSION_ID.split(",")
// // buttonArry=['A01','B01','C01','D01','E01','F01','A0101']
// for(var i=0;i<buttonArry.length;i++){
// buttomPermisssion[buttonArry[i]]=true
// }
// sessionStorage.setItem('ButtonPermissions', JSON.stringify(buttomPermisssion));
// if(self.$asjbh){
// self.$set(buttomPermisssion,"A01",true)
// self.$set(buttomPermisssion,"B01",false)
// self.$set(buttomPermisssion,"C01",false)
// self.$set(buttomPermisssion,"D01",false)
// self.$set(buttomPermisssion,"E01",false)
// self.$set(buttomPermisssion,"F01",false);
// self.$forceUpdate()
// };
// if(self.$sfzh||self.$shouJiHao){
// self.$set(buttomPermisssion,"A01",false)
// self.$set(buttomPermisssion,"B01",true)
// self.$set(buttomPermisssion,"C01",false)
// self.$set(buttomPermisssion,"D01",false)
// self.$set(buttomPermisssion,"E01",false)
// self.$set(buttomPermisssion,"F01",false);
// self.$forceUpdate()
// }
// Vue.prototype.$ButtonData=buttomPermisssion;
// var {href} = self.$router.resolve({
// path: self.$ButtonRouting['A01'],
// })
// if(self.$sfzh||self.$shouJiHao){
// const {href} = self.$router.resolve({
// path: self.$ButtonRouting['B01'],
// })
// window.open(href, '_self');
// }else {
// const {href} = self.$router.resolve({
// path: self.$ButtonRouting['A01'],
// })
// window.open(href, '_self');
// }
//
// }else{
// window.open("/#/login", '_self');
// }
// }
// });
}
},
mounted() {
/*水印*/
}
}
</script>
<style lang="scss" scoped>
.decision {
height: 100vh;
//background: url('../../assets/images/decision-bg.jpg') no-repeat center;
background-size: 100%;
overflow: hidden;
}
.decision-header {
//background:#284872 url('../../../static/img/jdtitle.png') no-repeat left top;
background-size: 1282px 84px;
height: 80px;
text-align: center;
.title {
padding: 12px 0;
}
.titlemn {
height: 84px;
width: 268px;
position: absolute;
left: 0px;
top: 0px;
}
.tit {
.link {
font-size: 22px;
color: #0eddff;
line-height: 1;
letter-spacing: 4px;
}
}
}
.decision-nav {
width: 100%;
.left {
display: table;
width: 100%;
}
&:after {
content: "";
display: table;
clear: both;
}
.item:last-child .borderRight {
background: none !important;
}
.right {
float: right;
> .item {
margin-left: 40px;
}
}
}
.decision-content {
height: calc(100% - 50px);
position: relative;
}
</style>
<style lang="scss">
// 公共样式
.com-c-number {
border-top: 2px solid #eeeeee30;
margin-top: 10px;
&:after {
content: "";
display: table;
clear: both;
}
.c-item {
float: left;
width: 33.33%;
margin-top: 10px;
font-size: 16px;
text-align: center;
.c-title {
font-size: 18px;
line-height: 1.4;
}
.c-cont {
span {
font-size: 28px;
color: yellow;
}
}
}
&.green .c-cont span {
color: #00ff06;
}
}
</style>
import { expect } from "chai";
import { shallowMount } from "@vue/test-utils";
import HelloWorld from "@/components/HelloWorld.vue";
describe("HelloWorld.vue", () => {
it("renders props.msg when passed", () => {
const msg = "new message";
const wrapper = shallowMount(HelloWorld, {
propsData: { msg },
});
expect(wrapper.text()).to.include(msg);
});
});
const path = require("path");
//全局的配置文件
const defaultSettings = require('./src/settings.js')
module.exports = {
//公共根目录(历史模式的生产环境下需要加“./dist”)
publicPath: (process.env.NODE_ENV === 'production' && defaultSettings.routerMode == 'history') ? './dist' : '/',
//输出路径
outputDir: 'dist',
//是否在保存的时候检查代码
lintOnSave: false,
//启用开发模式下的样式源(用于在f12下调试查看样式源)
css: {
sourceMap: true
},
chainWebpack: config => {
//配置别名
config.resolve.alias
.set('@c', path.resolve('./src/components'))
config.resolve.alias
.set('@', path.resolve('./src'))
},
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment