add metemask-login connect local
This commit is contained in:
parent
c021e6ce48
commit
e6b3e08387
4
.env
4
.env
@ -1,3 +1,3 @@
|
|||||||
VUE_APP_API_HOST=10.0.235.4:9000
|
VUE_APP_API_HOST=127.0.0.1:8000
|
||||||
VUE_APP_TITLE=包管理系统
|
VUE_APP_TITLE=管理平台
|
||||||
VUE_APP_TITLE_EN=PROJECT PACKAGE MANAGER
|
VUE_APP_TITLE_EN=PROJECT PACKAGE MANAGER
|
@ -8,8 +8,6 @@ import {
|
|||||||
import { Table, TableColumn } from "view-design";
|
import { Table, TableColumn } from "view-design";
|
||||||
import Events from "@/utils/Events";
|
import Events from "@/utils/Events";
|
||||||
import { TableExportCsvParams } from "view-design/types/table";
|
import { TableExportCsvParams } from "view-design/types/table";
|
||||||
import { stringify } from "postcss";
|
|
||||||
import Project from "@/views/home/pages/project/project";
|
|
||||||
|
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
|
@ -2,104 +2,16 @@
|
|||||||
* 前台地址
|
* 前台地址
|
||||||
*/
|
*/
|
||||||
export default class Url {
|
export default class Url {
|
||||||
static readonly WORK_LOGIN : string = 'work/login'
|
static readonly GET_NONCE : string = 'get-nonce'
|
||||||
static readonly LOGIN : string = "login";
|
static readonly METAMASK_LOGIN : string = 'metamask-login'
|
||||||
static readonly LOGOUT : string = "logout";
|
static readonly LOGOUT : string = "logout";
|
||||||
// TODO 菜单
|
// TODO 菜单
|
||||||
static readonly MENUS : string = "menu";
|
static readonly MENUS : string = "menu";
|
||||||
static readonly DELETE_MENU : string = "menu/%d";
|
static readonly DELETE_MENU : string = "menu/%d";
|
||||||
static readonly SHOW_MENU : string = "menu/%d";
|
static readonly SHOW_MENU : string = "menu/%d";
|
||||||
static readonly UPDATE_MENU : string = "menu/%d";
|
static readonly UPDATE_MENU : string = "menu/%d";
|
||||||
// TODO 用户
|
|
||||||
static readonly USERS : string = "user";
|
|
||||||
static readonly DISABLE_USER : string = 'user/%d';
|
|
||||||
static readonly ENABLE_USER : string = "user/start/%d";
|
|
||||||
static readonly SHOW_USER : string = 'user/%d';
|
|
||||||
static readonly UPDATE_USER : string = 'user/%d';
|
|
||||||
static readonly UPDATE_USERNAME : string = 'user/update_name/%d';
|
|
||||||
|
|
||||||
|
|
||||||
static readonly MY_MENUS : string = "my_menu";
|
|
||||||
static readonly MY_POWER : string = "my_power";
|
|
||||||
static readonly MY_PROJECT : string = "my_project";
|
|
||||||
static readonly UPDATE_MY_NAME : string = "update/my/name";
|
|
||||||
|
|
||||||
|
|
||||||
// TODO 权限
|
|
||||||
static readonly POWER : string = "power";
|
|
||||||
static readonly SHOW_POWER : string = "power/%d";
|
|
||||||
static readonly UPDATE_POWER : string = "power/%d";
|
|
||||||
static readonly DELETE_POWER : string = "power/%d";
|
|
||||||
|
|
||||||
// TODO 权限组
|
|
||||||
static readonly POWER_GROUP : string = "power_group";
|
|
||||||
static readonly SHOW_POWER_GROUP : string = "power_group/%d";
|
|
||||||
static readonly UPDATE_POWER_GROUP : string = "power_group/%d";
|
|
||||||
static readonly DELETE_POWER_GROUP : string = "power_group/%d";
|
|
||||||
|
|
||||||
// TODO 项目
|
|
||||||
static readonly PROJECT : string = 'project';
|
|
||||||
static readonly SHOW_PROJECT : string = "project/%d";
|
|
||||||
static readonly UPDATE_PROJECT : string = "project/%d";
|
|
||||||
static readonly DELETE_PROJECT : string = "project/%d";
|
|
||||||
|
|
||||||
static readonly WATCH_PROJECT : string = "project/watch/%d";
|
|
||||||
static readonly UN_WATCH_PROJECT : string = "project/watch/%d";
|
|
||||||
static readonly SHOW_PROJECT_ITEM : string = "project_item/%d";
|
|
||||||
static readonly DElETE_PROJECT_ITEM : string = "project_item/%d";
|
|
||||||
static readonly DElETE_PROJECT_PRODUCT : string = "project_product/%d";
|
|
||||||
static readonly UPDATE_PROJECT_PRODUCT : string = "project_product/%d";
|
|
||||||
static readonly SHOW_PROJECT_PRODUCT : string = "project_product/%d";
|
|
||||||
static readonly DOWNLOAD_PROJECT_PRODUCT : string = "project_product/download/%d";
|
|
||||||
static readonly SHOW_PRODUCT_Log : string = "show_log/%d";
|
|
||||||
static readonly SHOW_DOWNLOAD_IP : string = "product/download_ip/%d";
|
|
||||||
static readonly DOWNLOAD_IP : string = "download_ip";
|
|
||||||
static readonly DELETE_DOWNLOAD_IP : string = "download_ip/%d";
|
|
||||||
static readonly UPDATE_DOWNLOAD_IP : string = "download_ip/%d";
|
|
||||||
|
|
||||||
|
|
||||||
//TODO 用户分配
|
|
||||||
static readonly ALLOT_MENT : string = 'allot_menu/%d';
|
|
||||||
static readonly ALLOT_POWER : string = 'allot_power/%d';
|
|
||||||
static readonly ALLOT_PROJECT : string = 'allot_project/%d';
|
|
||||||
|
|
||||||
|
|
||||||
//TODO 自动化(设备)
|
|
||||||
static readonly DEVICE : string = 'device';
|
|
||||||
static readonly UPLOAD_IMAGE : string = 'device/upload_pic';
|
|
||||||
static readonly DELETE_DEVICE : string = 'device/%d';
|
|
||||||
static readonly UPDATE_DEVICE : string = 'device/%d';
|
|
||||||
|
|
||||||
//TODO 自动化(脚本)
|
|
||||||
static readonly SCRIPT : string = 'script';
|
|
||||||
static readonly UPLOAD_SCRIPT : string = 'script/upload';
|
|
||||||
static readonly UPDATE_SCRIPT : string = 'script/%d';
|
|
||||||
static readonly DELETE_SCRIPT : string = 'script/%d';
|
|
||||||
static readonly DOWNLOAD_SCRIPT : string = 'script/download/%d';
|
|
||||||
|
|
||||||
//TODO 自动化(脚本集)
|
|
||||||
static readonly SCRIPT_COLLECTION : string = 'collection';
|
|
||||||
static readonly UPDATE_SCRIPT_COLLECTION : string = 'collection/%d';
|
|
||||||
static readonly DELETE_SCRIPT_COLLECTION : string = 'collection/%d';
|
|
||||||
static readonly DOWNLOAD_SCRIPT_COLLECTION : string = 'collection/download/%d';
|
|
||||||
|
|
||||||
//TODO 自动化(任务)
|
|
||||||
static readonly TASK : string = 'task';
|
|
||||||
static readonly UPDATE_TASK : string = 'task/%d';
|
|
||||||
static readonly DELETE_TASK : string = 'task/%d';
|
|
||||||
static readonly TASK_LOG : string = 'task_log';
|
|
||||||
static readonly TASK_DEFAULT_STATUS_CHANGE : string = 'task/set_default/%d'
|
|
||||||
static readonly TASK_REPORT : string = 'task_report/%d'
|
|
||||||
|
|
||||||
//TODO 自动化(数据仓库)
|
|
||||||
static readonly DATA :string = 'data'
|
|
||||||
static readonly DELETE_DATA :string = 'data/%d'
|
|
||||||
|
|
||||||
//TODO 首页
|
|
||||||
static readonly OVERVIEW : string = 'overview'
|
|
||||||
static readonly OVERVIEW_SCRIPT : string = 'overview_scripts'
|
|
||||||
static readonly OVERVIEW_PRODUCT : string = 'overview_products'
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -39,14 +39,14 @@ instance.interceptors.response.use(
|
|||||||
)
|
)
|
||||||
export const Http_getNonce = (params) =>
|
export const Http_getNonce = (params) =>
|
||||||
instance({
|
instance({
|
||||||
url: 'https://market.cebg.games/webapp/index.php?c=Market&a=getNonce',
|
url: 'http://127.0.0.1:8000/api/get-nonce',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: params
|
params: params
|
||||||
})
|
})
|
||||||
|
|
||||||
export const Http_login = (data) =>
|
export const Http_login = (data) =>
|
||||||
instance({
|
instance({
|
||||||
url: 'https://market.cebg.games/webapp/index.php?c=Market&a=auth',
|
url: 'http://127.0.0.1:8000/api/metamask-login',
|
||||||
method: 'get',
|
method: 'post',
|
||||||
params: data
|
params: data
|
||||||
})
|
})
|
@ -7,58 +7,6 @@ export interface MenuInterface {
|
|||||||
children? : MenuInterface[]
|
children? : MenuInterface[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface PowerInterface {
|
|
||||||
id? : number;
|
|
||||||
name : string;
|
|
||||||
pid : number;
|
|
||||||
controller : string;
|
|
||||||
action : string;
|
|
||||||
children? : PowerInterface[]
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface PowerGroupInterface {
|
|
||||||
id? : number;
|
|
||||||
name : string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ProjectInterface {
|
|
||||||
name : string;
|
|
||||||
tapd_id : any;
|
|
||||||
id? : number;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ProjectItemInterface {
|
|
||||||
id? : number;
|
|
||||||
name : string;
|
|
||||||
type : string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ProjectProductInterface {
|
|
||||||
id? : number;
|
|
||||||
name : string;
|
|
||||||
commit_message : string;
|
|
||||||
days : number;
|
|
||||||
download_times : number;
|
|
||||||
build_result?: string;
|
|
||||||
state ?: boolean;
|
|
||||||
}
|
|
||||||
export interface ProjectProductLogInterface {
|
|
||||||
id? : number;
|
|
||||||
userName : string;
|
|
||||||
addTime : any;
|
|
||||||
productName : string;
|
|
||||||
days : number;
|
|
||||||
content : string
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ProductIpsInterface {
|
|
||||||
id? : number;
|
|
||||||
project_item_id ?: number;
|
|
||||||
server_ip :string;
|
|
||||||
created_at ?: string;
|
|
||||||
old_ip ?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface UserInterface {
|
export interface UserInterface {
|
||||||
id? : number;
|
id? : number;
|
||||||
username : string;
|
username : string;
|
||||||
|
@ -13,7 +13,7 @@ import '@/icons'
|
|||||||
|
|
||||||
Http.store = store;
|
Http.store = store;
|
||||||
Http.router = router;
|
Http.router = router;
|
||||||
Http.baseUri = '/rest/'
|
Http.baseUri = '/api/'
|
||||||
Vue.prototype.$http = Http;
|
Vue.prototype.$http = Http;
|
||||||
Vue.config.devtools = process.env.NODE_ENV !== 'production';
|
Vue.config.devtools = process.env.NODE_ENV !== 'production';
|
||||||
// Vue.config.devtools = true;
|
// Vue.config.devtools = true;
|
||||||
|
@ -1,87 +0,0 @@
|
|||||||
.boxx{
|
|
||||||
margin: 0 0 18px 20px;
|
|
||||||
font-size: 40px
|
|
||||||
}
|
|
||||||
.demo-split1{
|
|
||||||
height: 450px;
|
|
||||||
|
|
||||||
}
|
|
||||||
.demo-split-pane1{
|
|
||||||
padding: 10px;
|
|
||||||
|
|
||||||
}
|
|
||||||
.demo-split{
|
|
||||||
height: 680px;
|
|
||||||
margin-top: 50px;
|
|
||||||
background-color: #FFFFFF;
|
|
||||||
|
|
||||||
}
|
|
||||||
.demo-split-pane{
|
|
||||||
padding: 10px;
|
|
||||||
//border: 1px solid red;
|
|
||||||
}
|
|
||||||
.demo-split-pane.no-padding{
|
|
||||||
height: 680px;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
.tag{
|
|
||||||
background-color: #374151;
|
|
||||||
color: white;
|
|
||||||
padding: 8px 100px 8px 20px;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.arrow1 {
|
|
||||||
padding: 15px 0;
|
|
||||||
margin-left: 20px;
|
|
||||||
&-wrap {
|
|
||||||
//margin: 0 auto;
|
|
||||||
width: 120px;
|
|
||||||
height: 34px;
|
|
||||||
background-image: linear-gradient(to right, #227190 , #63c7ed);
|
|
||||||
color: #FFFFFF;
|
|
||||||
line-height: 34px;
|
|
||||||
text-align: start;
|
|
||||||
position: relative;
|
|
||||||
&::after {
|
|
||||||
content: '';
|
|
||||||
position: absolute;
|
|
||||||
right: -34px;
|
|
||||||
border: 17px solid transparent;
|
|
||||||
border-left: 17px solid #63c7ed;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.arrow2 {
|
|
||||||
padding: 15px 0;
|
|
||||||
margin-left: 20px;
|
|
||||||
&-wrap {
|
|
||||||
//margin: 0 auto;
|
|
||||||
width: 180px;
|
|
||||||
height: 34px;
|
|
||||||
background-image: linear-gradient(to right, #008B8B , #7FFFD4);
|
|
||||||
color: #FFFFFF;
|
|
||||||
line-height: 34px;
|
|
||||||
text-align: start;
|
|
||||||
position: relative;
|
|
||||||
&::after {
|
|
||||||
content: '';
|
|
||||||
position: absolute;
|
|
||||||
right: -34px;
|
|
||||||
border: 17px solid transparent;
|
|
||||||
border-left: 17px solid #7FFFD4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.progress:hover:before{
|
|
||||||
content:attr(content);
|
|
||||||
background:#585e6b;
|
|
||||||
color:#fff;
|
|
||||||
padding:.8em 1em;
|
|
||||||
position:absolute;
|
|
||||||
bottom: -35px;
|
|
||||||
border-radius: 5px;
|
|
||||||
margin-left:30%;
|
|
||||||
|
|
||||||
}
|
|
@ -9,184 +9,58 @@ import {
|
|||||||
import HomeParent from "@/views/home/Common/HomeParent";
|
import HomeParent from "@/views/home/Common/HomeParent";
|
||||||
import CustomPage from "@/components/page.vue";
|
import CustomPage from "@/components/page.vue";
|
||||||
import SvgIcon from '@/components/SvgIcon.vue'
|
import SvgIcon from '@/components/SvgIcon.vue'
|
||||||
import * as echarts from 'echarts'
|
import { TableColumn } from "view-design"
|
||||||
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
components : {
|
components : {
|
||||||
SvgIcon
|
SvgIcon,CustomPage
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
export default class Home extends HomeParent {
|
export default class Home extends HomeParent {
|
||||||
name : string = 'home'
|
name : string = 'home'
|
||||||
public scriptList :any = [{ script_name: undefined, date: undefined,content:undefined}];
|
public noDataText = '没有数据的提示语'
|
||||||
public projectList :any = [{ product_name: undefined, date: undefined}]
|
public List :any = []
|
||||||
public myChart;
|
public columns: TableColumn[] = [{
|
||||||
public cardProductData:object = {
|
width: 80,
|
||||||
product_count_trashed:undefined,
|
key: 'id',
|
||||||
product_today:undefined,
|
align: 'center',
|
||||||
day_rate:undefined,
|
}, {
|
||||||
day_icon:undefined,
|
title: "名称",
|
||||||
week_rate:undefined,
|
key: "name"
|
||||||
week_icon:undefined,
|
}, {
|
||||||
|
title: "TAPD",
|
||||||
|
key: "tapd_id"
|
||||||
|
}, {
|
||||||
|
title: "操作",
|
||||||
|
slot: "operation"
|
||||||
|
}]
|
||||||
|
|
||||||
|
public total: number = 0;
|
||||||
|
public search: { page: number, size: number , keywords? : string } = {
|
||||||
|
page: 1, size: 10 , keywords : ""
|
||||||
}
|
}
|
||||||
public cardScriptData:object = {
|
|
||||||
script_week:undefined,
|
|
||||||
use_rate:undefined
|
|
||||||
}
|
|
||||||
public cardTaskData:object = {
|
|
||||||
day_rate:undefined,
|
|
||||||
task_count:undefined,
|
|
||||||
task_month_sum:undefined
|
|
||||||
}
|
|
||||||
public userNumber:number=0;
|
|
||||||
|
|
||||||
public created() {
|
public created() {
|
||||||
// this._getData()
|
// this._getData()
|
||||||
// this._getScriptLog()
|
// this._getScriptLog()
|
||||||
// this._getProductLog()
|
// this._getProductLog()
|
||||||
}
|
this.List = [
|
||||||
|
{id:1,name:'tom',tapd_id:10086},
|
||||||
|
{id:2,name:'jam',tapd_id:10086},
|
||||||
private createChart(data) {
|
{id:3,name:'any',tapd_id:10086},
|
||||||
this.myChart = echarts.init(this.$refs['myChart'] as HTMLCanvasElement);
|
{id:4,name:'som',tapd_id:10086},
|
||||||
this.myChart.setOption(this.option(data));
|
|
||||||
this.myChart.on('updateAxisPointer', (event)=> {
|
|
||||||
const xAxisInfo = event.axesInfo[0];
|
|
||||||
if (xAxisInfo) {
|
|
||||||
const dimension = xAxisInfo.value + 1;
|
|
||||||
this.myChart.setOption({
|
|
||||||
series: {
|
|
||||||
id: 'pie',
|
|
||||||
label: {
|
|
||||||
formatter: '{b}: {@[' + dimension + ']} ({d}%)'
|
|
||||||
},
|
|
||||||
encode: {
|
|
||||||
value: dimension,
|
|
||||||
tooltip: dimension
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public shortcut(str){
|
|
||||||
this._push({name:str})
|
|
||||||
}
|
|
||||||
|
|
||||||
private option(data) {
|
|
||||||
return {
|
|
||||||
legend: {},
|
|
||||||
tooltip: {
|
|
||||||
trigger: 'axis',
|
|
||||||
showContent: false
|
|
||||||
},
|
|
||||||
dataset: {
|
|
||||||
source: data
|
|
||||||
},
|
|
||||||
xAxis: { type: 'category' },
|
|
||||||
yAxis: { gridIndex: 0 },
|
|
||||||
grid: { top: '55%' },
|
|
||||||
series: [
|
|
||||||
{
|
|
||||||
type: 'line',
|
|
||||||
smooth: true,
|
|
||||||
seriesLayoutBy: 'row',
|
|
||||||
emphasis: { focus: 'series' }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'line',
|
|
||||||
smooth: true,
|
|
||||||
seriesLayoutBy: 'row',
|
|
||||||
emphasis: { focus: 'series' }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'line',
|
|
||||||
smooth: true,
|
|
||||||
seriesLayoutBy: 'row',
|
|
||||||
emphasis: { focus: 'series' }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'line',
|
|
||||||
smooth: true,
|
|
||||||
seriesLayoutBy: 'row',
|
|
||||||
emphasis: { focus: 'series' }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'pie',
|
|
||||||
id: 'pie',
|
|
||||||
radius: '30%',
|
|
||||||
center: ['50%', '25%'],
|
|
||||||
emphasis: {
|
|
||||||
focus: 'self'
|
|
||||||
},
|
|
||||||
label: {
|
|
||||||
formatter: '{b}: {@2012} ({d}%)'
|
|
||||||
},
|
|
||||||
encode: {
|
|
||||||
itemName: 'product',
|
|
||||||
value: '2012',
|
|
||||||
tooltip: '2012'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private _getData():void{
|
private _getData():void{
|
||||||
this.$http.get(Url.OVERVIEW).then((res)=>{
|
|
||||||
this.createChart(res.data.recent_task_logs)
|
|
||||||
|
|
||||||
this.cardProductData = this.alterProduct(res.data.card_data.product)
|
|
||||||
this.cardTaskData = this.alterTask(res.data.card_data.task)
|
|
||||||
this.cardScriptData = this.alterScript(res.data.card_data.script)
|
|
||||||
this.userNumber = res.data.card_data.user
|
|
||||||
|
|
||||||
}).catch((msg:string)=>{
|
|
||||||
this.error(msg)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private _getScriptLog():void{
|
|
||||||
this.$http.get(Url.OVERVIEW_SCRIPT).then((res)=>{
|
|
||||||
this.scriptList = res.data
|
|
||||||
}).catch((msg:string)=>{
|
|
||||||
this.error(msg)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
private _getProductLog():void{
|
|
||||||
this.$http.get(Url.OVERVIEW_PRODUCT).then((res)=>{
|
|
||||||
this.projectList = res.data
|
|
||||||
}).catch((msg:string)=>{
|
|
||||||
this.error(msg)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
private alterProduct(data):object{
|
|
||||||
return {
|
|
||||||
product_count_trashed:data.product_count_trashed,
|
|
||||||
product_today:data.product_today,
|
|
||||||
day_rate:data.product_yesterday==0?'(昨日无构建)':Math.abs(Math.floor(((parseInt(data.product_today)-parseInt(data.product_yesterday)) / parseInt(data.product_yesterday ))*100))+'%',
|
|
||||||
day_icon:parseInt(data.product_today) > parseInt(data.product_yesterday)?1:2,
|
|
||||||
week_rate:Math.abs(Math.floor(((parseInt(data.product_current_week)-parseInt(data.product_last_week)) / parseInt(data.product_last_week ))*100))+'%',
|
|
||||||
week_icon:parseInt(data.product_current_week) > parseInt(data.product_last_week)?1:2,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private alterTask(data):object{
|
|
||||||
return {
|
|
||||||
task_count:data.task_count,
|
|
||||||
task_month_sum:data.task_month_sum,
|
|
||||||
day_rate:Math.abs(Math.floor((parseInt(data.task_end_sum)/ parseInt(data.task_logs_sum ))*100))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private alterScript(data):object{
|
|
||||||
return {
|
|
||||||
script_week:data.script_week,
|
|
||||||
use_rate:Math.abs(Math.floor((parseInt(data.script_used)/ parseInt(data.script_count ))*100))+'%'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -1,184 +1,20 @@
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<!-- <project-list is-my-project></project-list>-->
|
<div class="space-x-5 my-2 h-11">
|
||||||
|
<Input v-model="search.keywords" class="w-80 " clearable placeholder="请输入项目名称"></Input>
|
||||||
|
<Button type="primary" icon="ios-search-outline" :loading="loading">搜索</Button>
|
||||||
|
</div>
|
||||||
|
<custom-page :data-list="List" :page.sync="search.page" :page-size.sync="search.size"
|
||||||
|
:total="total" row-key="id" :columns="columns" :no-data-text="noDataText">
|
||||||
|
|
||||||
|
<template slot="operation" slot-scope="{row}">
|
||||||
<div class="demo-split1">
|
<div class="space-x-2">
|
||||||
<Split v-model="0.5" mode="vertical">
|
<Button type="success" >查看</Button>
|
||||||
<div slot="top" class="demo-split-pane1">
|
<Button type="error" >删除</Button>
|
||||||
<Row>
|
|
||||||
<Col span="5" style="margin-left: 20px">
|
|
||||||
<Card >
|
|
||||||
<p slot="title" style="font-weight: bold;">构建量</p>
|
|
||||||
<p slot="extra"><Icon type="ios-keypad" style="font-size: 24px;color: #36cfc9"/></p>
|
|
||||||
<p > <span style="font-size: 28px">{{cardProductData.product_today}}</span>
|
|
||||||
<Tag type="border" color="success" style="width: 20px;float: right"> <span style="margin-left: -5px">日</span></Tag></p>
|
|
||||||
<p>
|
|
||||||
<span>日同比 {{cardProductData.day_rate}}
|
|
||||||
<Icon type="md-arrow-dropup" color="#19be6b" v-if="cardProductData.day_icon==1"/>
|
|
||||||
<Icon type="md-arrow-dropdown" color="#ed4014" v-else/>
|
|
||||||
</span> 
|
|
||||||
<span>周同比 {{cardProductData.week_rate}}
|
|
||||||
<Icon type="md-arrow-dropup" color="#19be6b" v-if="cardProductData.week_icon==1"/>
|
|
||||||
<Icon type="md-arrow-dropdown" color="#ed4014" v-else/>
|
|
||||||
</span>
|
|
||||||
</p>
|
|
||||||
<div style="border-top: 1px solid #e8eaec;margin: 10px -16px 0 -16px;">
|
|
||||||
<div style="height:24px;padding-top:10px;display: flex;justify-content: space-between;">
|
|
||||||
<span style="margin-left: 10px">总构建量</span>
|
|
||||||
<span style="margin-right: 10px">{{cardProductData.product_count_trashed}}</span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</Card>
|
|
||||||
</Col>
|
|
||||||
<Col span="5" offset="1">
|
|
||||||
<Card >
|
|
||||||
<p slot="title" style="font-weight: bold;">任务量</p>
|
|
||||||
<p slot="extra"><Icon type="ios-clipboard" style="font-size: 24px;color: #ff7a45" /></p>
|
|
||||||
<p>
|
|
||||||
<span style="font-size: 28px">{{cardTaskData.task_month_sum}}</span>
|
|
||||||
<Tag type="border" color="primary" style="width: 20px;float: right"> <span style="margin-left: -5px">月</span></Tag>
|
|
||||||
</p>
|
|
||||||
<Progress :percent="cardTaskData.day_rate" hide-info class="progress" :content="'已完成'+cardTaskData.day_rate+'%'"/>
|
|
||||||
<div style="border-top: 1px solid #e8eaec;margin: 10px -16px 0 -16px;">
|
|
||||||
<div style="height:24px;padding-top:10px;display: flex;justify-content: space-between;">
|
|
||||||
<span style="margin-left: 10px">总任务数</span>
|
|
||||||
<span style="margin-right: 10px">{{cardTaskData.task_count}}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</Card>
|
|
||||||
</Col>
|
|
||||||
<Col span="5" offset="1">
|
|
||||||
<Card >
|
|
||||||
<p slot="title" style="font-weight: bold;">脚本数</p>
|
|
||||||
<p slot="extra"><Icon type="logo-python" style="font-size: 24px;color: #47cb89"></Icon></p>
|
|
||||||
<p>
|
|
||||||
<span style="font-size: 28px">{{cardScriptData.script_week}}</span>
|
|
||||||
<Tag type="border" color="error" style="width: 20px;float: right"> <span style="margin-left: -5px">周</span></Tag>
|
|
||||||
</p>
|
|
||||||
<p> </p>
|
|
||||||
<div style="border-top: 1px solid #e8eaec;margin: 10px -16px 0 -16px;">
|
|
||||||
<div style="height:24px;padding-top:10px;display: flex;justify-content: space-between;">
|
|
||||||
<span style="margin-left: 10px">使用率</span>
|
|
||||||
<span style="margin-right: 10px">{{cardScriptData.use_rate}}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</Card>
|
|
||||||
</Col>
|
|
||||||
<Col span="5" offset="1">
|
|
||||||
<Card >
|
|
||||||
<p slot="title" style="font-weight: bold;">用户量</p>
|
|
||||||
<p slot="extra"><Icon type="ios-people" style="font-size: 24px;color: #57a3f3"/></p>
|
|
||||||
<p style="font-size: 28px">{{userNumber}}位</p>
|
|
||||||
<p> </p>
|
|
||||||
<div style="border-top: 1px solid #e8eaec;margin: 10px -16px 0 -16px;">
|
|
||||||
<div style="height:24px;padding-top:10px;display: flex;justify-content: space-between;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</Card>
|
|
||||||
</Col>
|
|
||||||
</Row>
|
|
||||||
</div>
|
|
||||||
<div slot="bottom" class="demo-split-pane1">
|
|
||||||
<div style="margin-top: 50px;display: flex;justify-content: space-around">
|
|
||||||
<Card style="width:120px;border-radius: 5px">
|
|
||||||
<div style="text-align:center" @click="shortcut('my_project')">
|
|
||||||
<div class="boxx"><svg-icon icon-class="project" /></div>
|
|
||||||
<h3>我的项目</h3>
|
|
||||||
</div>
|
|
||||||
</Card>
|
|
||||||
<Card style="width:120px;" >
|
|
||||||
<div style="text-align:center;" @click="shortcut('task')">
|
|
||||||
<div class="boxx"><svg-icon icon-class="task" /></div>
|
|
||||||
<h3>任务中心</h3>
|
|
||||||
</div>
|
|
||||||
</Card>
|
|
||||||
<Card style="width:120px;" >
|
|
||||||
<div style="text-align:center" @click="shortcut('script')">
|
|
||||||
<div class="boxx"><svg-icon icon-class="script" /></div>
|
|
||||||
<h3>脚本市场</h3>
|
|
||||||
</div>
|
|
||||||
</Card>
|
|
||||||
<Card style="width:120px;" >
|
|
||||||
<div style="text-align:center" @click="shortcut('device')">
|
|
||||||
<div class="boxx"><svg-icon icon-class="device" /></div>
|
|
||||||
<h3>设备大全</h3>
|
|
||||||
</div>
|
|
||||||
</Card>
|
|
||||||
<Card style="width:120px;" v-for="item in 4">
|
|
||||||
<div style="text-align:center">
|
|
||||||
<img src="@/assets/image/edit.png" width="40" style="margin-left: 20px"/><br >
|
|
||||||
<h3>尽情期待...</h3>
|
|
||||||
</div>
|
|
||||||
</Card>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</Split>
|
|
||||||
</div>
|
|
||||||
<div class="demo-split">
|
|
||||||
<Split v-model="0.5">
|
|
||||||
<div slot="left" class="demo-split-pane no-padding">
|
|
||||||
<Split v-model="0.5" mode="vertical" >
|
|
||||||
<div slot="top" class="demo-split-pane">
|
|
||||||
<section class="arrow1">
|
|
||||||
<div class="arrow1-wrap"><span style="padding-left:22px ">构建动态</span></div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<List item-layout="horizontal" size="small">
|
|
||||||
<ListItem v-for="item in projectList">
|
|
||||||
<ListItemMeta :title="item.product_name" />
|
|
||||||
<template slot="action">
|
|
||||||
<li>
|
|
||||||
<span>{{item.date}}</span>
|
|
||||||
</li>
|
|
||||||
</template>
|
</template>
|
||||||
</ListItem>
|
</custom-page>
|
||||||
<ListItem v-show="projectList.length>=5">
|
|
||||||
<ListItemMeta />
|
|
||||||
<template slot="action">
|
|
||||||
<li>
|
|
||||||
<a href="my_project">更多</a>
|
|
||||||
</li>
|
|
||||||
</template>
|
|
||||||
</ListItem>
|
|
||||||
|
|
||||||
</List>
|
|
||||||
</div>
|
|
||||||
<div slot="bottom" class="demo-split-pane">
|
|
||||||
<section class="arrow2">
|
|
||||||
<div class="arrow2-wrap"><span style="padding-left:22px ">脚本动态</span></div>
|
|
||||||
</section>
|
|
||||||
<List item-layout="horizontal" size="small">
|
|
||||||
<ListItem v-for="item in scriptList">
|
|
||||||
<ListItemMeta :title="item.content" />
|
|
||||||
<template slot="action">
|
|
||||||
<li>
|
|
||||||
<span>{{item.date}}</span>
|
|
||||||
</li>
|
|
||||||
</template>
|
|
||||||
</ListItem>
|
|
||||||
<ListItem v-show="scriptList.length>=5">
|
|
||||||
<ListItemMeta />
|
|
||||||
<template slot="action">
|
|
||||||
<li>
|
|
||||||
<a href="auto-test/script">更多</a>
|
|
||||||
</li>
|
|
||||||
</template>
|
|
||||||
</ListItem>
|
|
||||||
</List>
|
|
||||||
</div>
|
|
||||||
</Split>
|
|
||||||
</div>
|
|
||||||
<div slot="right" class="demo-split-pane">
|
|
||||||
<p style="text-align: center;font-size: 20px;font-weight: bolder;margin-top: 15px">任务执行情况</p>
|
|
||||||
<div ref="myChart" style="width: 800px; height:550px;margin-top:40px" ></div>
|
|
||||||
</div>
|
|
||||||
</Split>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
<script src="./home.ts"></script>
|
||||||
<script lang="ts" src="./home.ts"></script>
|
|
||||||
<style lang="less" src="./home.less" scoped></style>
|
|
@ -11,6 +11,7 @@ import HomeParent, { BreadItem } from "@/views/home/Common/HomeParent";
|
|||||||
import { EVENT_TYPE, MenuInterface, ProjectInterface } from "@/views/home/Common/Types";
|
import { EVENT_TYPE, MenuInterface, ProjectInterface } from "@/views/home/Common/Types";
|
||||||
import { Route, RouteRecord } from "vue-router";
|
import { Route, RouteRecord } from "vue-router";
|
||||||
import { Menu } from "view-design";
|
import { Menu } from "view-design";
|
||||||
|
import store from "@/views/home/store";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -51,53 +52,16 @@ export default class Layout extends HomeParent {
|
|||||||
public onDropdownEvent(name: string): void {
|
public onDropdownEvent(name: string): void {
|
||||||
switch (name) {
|
switch (name) {
|
||||||
case "logout" : this.logout();break;
|
case "logout" : this.logout();break;
|
||||||
case "updateName" : this.updateName();break;
|
// case "updateName" : this.updateName();break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public logout() {
|
public logout() {
|
||||||
this.$http.get(Url.LOGOUT).then(res => {
|
store.commit('del_token')
|
||||||
this._push('/login')
|
this.goPage("login");
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public updateName(){
|
|
||||||
let self = this;
|
|
||||||
this.$Modal.confirm({
|
|
||||||
title:"修改昵称",
|
|
||||||
render: function(h) {
|
|
||||||
return h('Input', {
|
|
||||||
props: {
|
|
||||||
value: self.$store.getters.user.name,
|
|
||||||
autofocus: true,
|
|
||||||
placeholder: 'Please enter your name...'
|
|
||||||
},
|
|
||||||
on: {
|
|
||||||
input: (val) => {
|
|
||||||
this.value = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
onOk :function() {
|
|
||||||
self.onVisibleChange(true)
|
|
||||||
if (!this.value || this.value == self.$store.getters.user.name || this.value == '') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let data = {name:this.value};
|
|
||||||
self.$http.put(Url.UPDATE_MY_NAME,data).then(res=>{
|
|
||||||
self.success('修改成功',()=>{
|
|
||||||
self.$store.getters.user.name = res.data.name
|
|
||||||
let obj = JSON.parse(window.localStorage.getItem('home'));
|
|
||||||
obj.user.user.name = res.data.name
|
|
||||||
window.localStorage.setItem('home',JSON.stringify(obj));
|
|
||||||
})
|
|
||||||
}).catch((err)=>{
|
|
||||||
self.error(err)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 跳转页面时关闭dropdown
|
* 跳转页面时关闭dropdown
|
||||||
@ -130,11 +94,7 @@ export default class Layout extends HomeParent {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
private _getMyProject() {
|
|
||||||
this.$http.get(Url.MY_PROJECT).then(res => {
|
|
||||||
this.myProject = res.data;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private _parseTreeData(list: any[]) {
|
private _parseTreeData(list: any[]) {
|
||||||
return list.map((item: any) => {
|
return list.map((item: any) => {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="layout w-screen h-screen bg-white" >
|
<div class="layout w-screen h-screen bg-white" >
|
||||||
<Sider :style="{position: 'fixed', height: '100vh', left: 0, overflow: 'auto'}" width="300" class="bg-white" style="margin-top: -2px">
|
<Sider :style="{position: 'fixed', height: '100vh', left: 0, overflow: 'auto'}" width="300" class="bg-white" style="margin-top: -2px">
|
||||||
<h2 class="text-3xl italic pl-8 text-center " style="height: 80px;line-height: 80px;">系统</h2>
|
<h2 class="text-3xl italic text-center " style="height: 80px;line-height: 80px;">管理品台</h2>
|
||||||
<Menu width="300">
|
<Menu width="300">
|
||||||
<Submenu :name="item.id" v-for="item in myMenus" :key="item.id" accordion >
|
<Submenu :name="item.id" v-for="item in myMenus" :key="item.id" accordion >
|
||||||
<template slot="title">
|
<template slot="title">
|
||||||
@ -29,7 +29,7 @@
|
|||||||
<Dropdown ref="dropdown" trigger="custom" @on-click="onDropdownEvent" :visible="visible">
|
<Dropdown ref="dropdown" trigger="custom" @on-click="onDropdownEvent" :visible="visible">
|
||||||
<a href="javascript:void(0)" @click="onVisibleChange">
|
<a href="javascript:void(0)" @click="onVisibleChange">
|
||||||
<Icon class="text-4xl " type="ios-contacts"/>
|
<Icon class="text-4xl " type="ios-contacts"/>
|
||||||
<!-- <span>{{this.$store.getters.user.name}}</span>-->
|
<!-- <span>{{this.$store.getters.user.name}}</span>-->
|
||||||
<Icon type="ios-arrow-down"></Icon>
|
<Icon type="ios-arrow-down"></Icon>
|
||||||
</a>
|
</a>
|
||||||
<DropdownMenu slot="list" >
|
<DropdownMenu slot="list" >
|
||||||
|
@ -90,10 +90,10 @@
|
|||||||
margin-left: 7px;
|
margin-left: 7px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.slideSty .slide-verify {
|
.slideSty .slide-verify {
|
||||||
margin: 13px auto 0 auto;
|
margin: 13px auto 0 auto;
|
||||||
width: 350px !important;
|
width: 350px !important;
|
||||||
}
|
}
|
||||||
.slideSty .slide-verify-slider {
|
.slideSty .slide-verify-slider {
|
||||||
width: 100% !important;
|
width: 100% !important;
|
||||||
}
|
}
|
||||||
|
@ -32,72 +32,51 @@ declare let window: Window
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
export default class Login extends HomeParent {
|
export default class Login extends HomeParent {
|
||||||
@Action('Login') Login;
|
// @Action('Login') Login
|
||||||
public context : ActionContext<UserState, any>
|
|
||||||
public provider:any
|
public provider:any
|
||||||
public web3:Web3
|
public web3:Web3
|
||||||
public chainId:number
|
public chainId:number
|
||||||
public account:string
|
public account:string
|
||||||
public nonce:string
|
public nonce:string
|
||||||
|
public isLogin:boolean
|
||||||
|
|
||||||
public async btn(){
|
public created(){
|
||||||
if (!this.$store.getters.step){
|
if (store.state.token){
|
||||||
try {
|
this.isLogin = true
|
||||||
|
}else {
|
||||||
|
this.isLogin = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async doLogin(){
|
||||||
|
// let apiHost = process.env.NODE_ENV !== 'production' ? process.env.VUE_APP_API_HOST : document.location.host;
|
||||||
|
// let scheme = document.location.protocol;
|
||||||
|
// console.log(scheme + "//" + apiHost);return
|
||||||
|
if (!this.isLogin){
|
||||||
|
try{
|
||||||
await this.connect()
|
await this.connect()
|
||||||
await this.checkNance()
|
await this.checkNance()
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
Message({
|
Message({
|
||||||
message: err.message,
|
message: err.message,
|
||||||
type: 'error',
|
type: 'error',
|
||||||
duration: 5 * 1000
|
duration: 3 * 1000,
|
||||||
})
|
})
|
||||||
Promise.reject(err)
|
Promise.reject(err)
|
||||||
}
|
}
|
||||||
|
}else {
|
||||||
|
Message({
|
||||||
|
message: '已经登录过了!',
|
||||||
|
type: 'warning',
|
||||||
|
duration:2*1000,
|
||||||
|
onClose:()=>{
|
||||||
|
this.goPage('home')
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public get accessToken(): string {
|
|
||||||
let token: string = this.$route.query.access_token as string;
|
|
||||||
return token;
|
|
||||||
}
|
|
||||||
|
|
||||||
public rules: object = {
|
|
||||||
username: [{required: true, trigger: 'blur', message: "请输入登录名"}],
|
|
||||||
password: [{required: true, trigger: 'blur', message: "请输入登录密码"}],
|
|
||||||
}
|
|
||||||
|
|
||||||
public created() {
|
|
||||||
// if(!this.accessToken) {
|
|
||||||
// this._getData();
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
private _getData(): void {
|
|
||||||
this.$http.get(Url.WORK_LOGIN).then(res => {
|
|
||||||
window["WwLogin"]({
|
|
||||||
id: "loginPage",
|
|
||||||
goto: res.data
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// public doLogin(): void {
|
|
||||||
// let form: Form = this.$refs["login"] as Form;
|
|
||||||
// form.validate((valid: boolean) => {
|
|
||||||
// if (!valid) {
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// // this.Login(this.form).then((user) => {
|
|
||||||
// // this.goPage("home");
|
|
||||||
// // }).catch((msg: string) => {
|
|
||||||
// // this.error(msg);
|
|
||||||
// // })
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
private async login( account, chainId, nonce) {
|
private async login( account, chainId, nonce) {
|
||||||
nonce += ''
|
nonce += ''
|
||||||
const tips = 'This signature is only used for verify your account'
|
const tips = 'This signature is only used for verify your account'
|
||||||
@ -134,21 +113,26 @@ export default class Login extends HomeParent {
|
|||||||
net_id: chainId
|
net_id: chainId
|
||||||
}
|
}
|
||||||
const res:any = await Http_login(authData)
|
const res:any = await Http_login(authData)
|
||||||
if (!res.errcode && res.token) {
|
if (res.code == 200) {
|
||||||
store.commit('set_token',res.token)
|
store.commit('set_token',res.data.token)
|
||||||
console.log(store.getters)
|
this.goPage("home");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private async checkNance() {
|
private async checkNance() {
|
||||||
try {
|
try {
|
||||||
|
// store.commit('del_nonce');return
|
||||||
let nonce = store.getters.nonce
|
let nonce = store.getters.nonce
|
||||||
if (!nonce) {
|
if (!nonce) {
|
||||||
let params = {account:this.account, net_id:this.chainId}
|
let params = {account:this.account, net_id:this.chainId}
|
||||||
|
// await this.$http.get(Url.GET_NONCE,params).then(res => {
|
||||||
|
// console.log(res.data)
|
||||||
|
// })
|
||||||
const res:any = await Http_getNonce(params);
|
const res:any = await Http_getNonce(params);
|
||||||
store.commit('set_nonce',res.nonce)
|
// console.log('@@@',res)
|
||||||
this.nonce = res.nonce
|
store.commit('set_nonce',res.data)
|
||||||
|
this.nonce = res.data
|
||||||
}
|
}
|
||||||
this.login(this.account,this.chainId,this.nonce)
|
this.login(this.account,this.chainId,store.getters.nonce)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
Promise.reject(err)
|
Promise.reject(err)
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<div class="login">
|
<div class="login">
|
||||||
<div class="w-full h-3/5 flex items-center justify-center align-middle">系统</div>
|
<div class="w-full h-3/5 flex items-center justify-center align-middle">系统</div>
|
||||||
<div class="w-full flex justify-center align-middle">
|
<div class="w-full flex justify-center align-middle">
|
||||||
<div class=" rounded-xl" @click="btn">
|
<div class=" rounded-xl" @click="doLogin">
|
||||||
<svg-icon icon-class="login" style="width: 100px;height: 100px;cursor:pointer"/>
|
<svg-icon icon-class="login" style="width: 100px;height: 100px;cursor:pointer"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -12,26 +12,29 @@ const routes : Array<RouteConfig> = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
const router = new VueRouter({
|
const router = new VueRouter({
|
||||||
base : "/dashboard/",
|
// base : "/dashboard/",
|
||||||
mode : "history",
|
mode : "history",
|
||||||
routes,
|
routes,
|
||||||
})
|
})
|
||||||
|
|
||||||
function setTitle(title : string) : void {
|
function setTitle(title : string) : void {
|
||||||
window.document.title = title;
|
window.document.title = '管理平台';
|
||||||
}
|
}
|
||||||
|
|
||||||
router.beforeEach((to, from, next) => {
|
router.beforeEach((to, from, next) => {
|
||||||
LoadingBar.start();
|
LoadingBar.start();
|
||||||
let title : string = process.env.VUE_APP_TITLE;
|
if (to.path === '/login') {
|
||||||
setTitle(to.meta.title + '-' + title);
|
|
||||||
let token : string = to.query.access_token as string;
|
|
||||||
if (token) {
|
|
||||||
Store.commit(Types.SET_USER_TOKEN, token);
|
|
||||||
next({name : to.name === 'login'? 'home' : to.name})
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
next();
|
next();
|
||||||
|
} else {
|
||||||
|
// 从本地存储里获取token
|
||||||
|
let token = Store.state.token as string
|
||||||
|
// 判断token是否为空如果为空则跳转到登录页 如果有则放行
|
||||||
|
if (!token) {
|
||||||
|
next({path:'/login'});
|
||||||
|
} else {
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
router.afterEach((to, from) => {
|
router.afterEach((to, from) => {
|
||||||
|
@ -15,7 +15,6 @@ export default new Vuex.Store({
|
|||||||
getters : {
|
getters : {
|
||||||
token : (state : StateInterface) => state.user.token,
|
token : (state : StateInterface) => state.user.token,
|
||||||
user : (state : StateInterface) => state.user.user,
|
user : (state : StateInterface) => state.user.user,
|
||||||
step:state => state.step,
|
|
||||||
nonce:state => state.nonce
|
nonce:state => state.nonce
|
||||||
},
|
},
|
||||||
modules : {
|
modules : {
|
||||||
@ -42,13 +41,17 @@ export default new Vuex.Store({
|
|||||||
state.nonce = nonce
|
state.nonce = nonce
|
||||||
// sessionStorage.nonce = nonce
|
// sessionStorage.nonce = nonce
|
||||||
},
|
},
|
||||||
|
del_nonce(state) {
|
||||||
|
state.nonce = ''
|
||||||
|
// sessionStorage.nonce = nonce
|
||||||
|
},
|
||||||
set_token(state, token) {
|
set_token(state, token) {
|
||||||
state.token = token
|
state.token = token
|
||||||
sessionStorage.token = token
|
// sessionStorage.token = token
|
||||||
},
|
},
|
||||||
del_token(state) {
|
del_token(state) {
|
||||||
state.token = ''
|
state.token = ''
|
||||||
sessionStorage.removeItem('token')
|
// sessionStorage.removeItem('token')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -9,7 +9,6 @@ const sprintf = require('sprintf-js');
|
|||||||
export interface UserState {
|
export interface UserState {
|
||||||
user : UserInterface,
|
user : UserInterface,
|
||||||
token : string | undefined,
|
token : string | undefined,
|
||||||
isLogin : boolean,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
@ -22,17 +21,15 @@ export default {
|
|||||||
},
|
},
|
||||||
actions : {
|
actions : {
|
||||||
Login(context : ActionContext<UserState, any>, form : any) {
|
Login(context : ActionContext<UserState, any>, form : any) {
|
||||||
return Http.post(Url.LOGIN, form).then((res : ResponseInterface) => {
|
// return Http.post(Url.LOGIN, form).then((res : ResponseInterface) => {
|
||||||
context.commit(Types.SET_USER_INFO, res.data);
|
// context.commit(Types.SET_USER_INFO, res.data);
|
||||||
context.commit(Types.SET_USER_TOKEN, res.data.access_token);
|
// context.commit(Types.SET_USER_TOKEN, res.data.access_token);
|
||||||
return Promise.resolve(res.data);
|
// return Promise.resolve(res.data);
|
||||||
}).catch((err : string) => {
|
// }).catch((err : string) => {
|
||||||
return Promise.reject(err);
|
// return Promise.reject(err);
|
||||||
})
|
// })
|
||||||
},
|
},
|
||||||
getMenus() {
|
|
||||||
// return Http.get()
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
mutations : {
|
mutations : {
|
||||||
[Types.SET_USER_INFO](state : UserState, user : UserInterface) {
|
[Types.SET_USER_INFO](state : UserState, user : UserInterface) {
|
||||||
@ -40,7 +37,7 @@ export default {
|
|||||||
},
|
},
|
||||||
[Types.SET_USER_TOKEN](state : UserState, token : string) {
|
[Types.SET_USER_TOKEN](state : UserState, token : string) {
|
||||||
state.token = token;
|
state.token = token;
|
||||||
state.isLogin = token.length > 0;
|
// state.isLogin = token.length > 0;
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user