Commit a081d480 authored by xulili's avatar xulili

token 失效退出

parent 35b05ad6
......@@ -96,6 +96,7 @@ export default {
message: resData.message,
});
localStorage.setItem("user", resData.user.userName);
localStorage.setItem("userId",resData.user.id)
localStorage.setItem("backToken", resData.token);
localStorage.setItem(
"menuList",
......
......@@ -3,6 +3,13 @@ let statusOption = [
{ label: "禁用", value: 'DISABLE' },
{ label: "待审核", value: 'TBC' },
]
let accoutType = [
{ label: "用户账号", value: 1 },
{ label: "单位管理员账号", value: 2 },
{ label: "机顶盒账号", value: 3 },
{ label: "运维账号", value: 4 },
{ label: "统计账号", value: 5 }
]
export {
statusOption
}
/**
* Created by supervisor on 2017/11/3.
*/
// import Vue from 'vue'
import axios from 'axios'
// import qs from 'qs'
import store from '../store'
import {Message, MessageBox, Loading} from 'element-ui';
import { Message, MessageBox, Loading } from 'element-ui';
import router from '../router'
import {baseUrl} from './env'
import { baseUrl } from './env'
import MyLocalStorage from './myLocalStorage'
// Vue.use($msg)
import { loginOut } from './loginOut'
//axios 拦截器 请求时的拦截
axios.interceptors.request.use(config=>{
axios.interceptors.request.use(config => {
// 发送请求之前做一些处理
store.commit('UPDATE_LOADING',true) //显示loading
store.commit('UPDATE_LOADING', true) //显示loading
// config.headers = {
// 'Content-Type': 'application/json'
// };
return config
},error => {
}, error => {
// 当请求异常时做一些处理
return new Promise.reject(error)
})
// 响应时拦截
axios.interceptors.response.use(response=>{
axios.interceptors.response.use(response => {
// 返回响应时做一些处理
return response
},error=>{
}, error => {
// 当响应异常时做一些处理
return Promise.resolve(error.response)
})
// let isOpen=false;
function errorState(status, data) {
store.commit('UPDATE_LOADING',false)
if(status === 500 && data.message.indexOf("token invalid")!==-1){
// if(status == 500 && data == "sessionTimeOut"){
if(store.state.isOpen){
return ;
}
store.commit('setIsOpen',true)
store.commit('UPDATE_LOADING', false)
if (data.resultCode == '1109') {
loginOut()
MessageBox.alert('您的登录过期,请重新登录!', '提示', {
confirmButtonText: '确定',
callback: () => {
//清除用户信息
localStorage.removeItem('backToken')
localStorage.removeItem('userId')
router.push({path: '/',query: {redirect: router.history.current.fullPath}})
router.push({ path: '/', query: { redirect: router.history.current.fullPath } })
}
});
}else if(status===401){
} else if (status === 401) {
MessageBox.alert('您的用户权限已被禁用,请联系管理员!', '提示', {
confirmButtonText: '确定',
callback: () => {
//这个时候点击确定后清除用户信息
localStorage.removeItem('backToken')
localStorage.removeItem('userId')
router.push({path: '/',query: {redirect: router.history.current.fullPath}})
store.commit('isAdminInfo',false);
router.push({ path: '/', query: { redirect: router.history.current.fullPath } })
store.commit('isAdminInfo', false);
}
});
} else if (status === 500 && data.message.indexOf("not have permission") !== -1) {
// router.push({path: 'page403'})
Message.error("抱歉,你无权访问该页面!")
}else if (!data) {
} else if (!data) {
Message.error("网络出小差咯~")
}
}
function successState(res) {
store.commit('UPDATE_LOADING',false) //隐藏loading
store.commit('UPDATE_LOADING', false) //隐藏loading
}
const httpServer = (opts,data,file,timeout)=>{
const httpServer = (opts, data, file, timeout) => {
//如果是不需要登录就可以访问的接口 需要设置opts.open
let Public = {} //公共参数
let httpDefaultOpts={
let httpDefaultOpts = {
method: opts.method,
url: baseUrl + opts.url,
timeout:timeout?timeout:20000,
params:Object.assign(Public,data),
data:data,
timeout: timeout ? timeout : 20000,
params: Object.assign(Public, data),
data: data,
headers: opts.headers || {},
};
httpDefaultOpts.headers["Access-control-Allow-Origin"] = "*";
httpDefaultOpts.headers["Access-Control-Allow-Headers"] = "content-type,x-requested-with";
let authToken="";
if(opts.authType && opts.authType!=""){
let authToken = "";
if (opts.authType && opts.authType != "") {
// Authorization
if(opts.authType==="back"){
authToken=localStorage.getItem('backToken');
}else if(opts.authType==="front"){
if (opts.authType === "back") {
authToken = localStorage.getItem('backToken');
} else if (opts.authType === "front") {
authToken = localStorage.getItem("token") || MyLocalStorage.Cache.get('token');
}
httpDefaultOpts.headers["Authorization"]=authToken
}
if(opts.method==='get'){
if (opts.method === 'get') {
delete httpDefaultOpts.data
httpDefaultOpts.params.timestamp_static = new Date().getTime();
// httpDefaultOpts.params.roleId = localStorage.getItem('roleId');
// httpDefaultOpts.params.bankBranchId = localStorage.getItem('bankBranchId');
}else{
} else {
delete httpDefaultOpts.params
if(file){
httpDefaultOpts.data=data;
// httpDefaultOpts.headers["X-Requested-With"]="multipart/form-data";
if (file) {
httpDefaultOpts.data = data;
}
}
let promise = new Promise(function (resolve,reject) {
let promise = new Promise(function (resolve, reject) {
let loadingInstance = Loading.service({
fullscreen: true,
lock: true,
......@@ -115,29 +101,31 @@ const httpServer = (opts,data,file,timeout)=>{
text: 'Loading',
spinner: 'el-icon-loading'
})
let markIndex= setTimeout(function () {
let markIndex = setTimeout(function () {
loadingInstance.close();
},10000)
axios(httpDefaultOpts).then((res)=>{
}, 10000)
axios(httpDefaultOpts).then((res) => {
loadingInstance.close();
clearTimeout(markIndex)
if (res.data.resultCode == '1109' && localStorage.getItem('backToken')) {
//清除用户信息
errorState(res.status, res.data)
} else {
successState(res)
if(res){
resolve(res)
errorState(res.status, res.data)
}
}).catch((response)=>{
}).catch((response) => {
loadingInstance.close();
clearTimeout(markIndex)
console.log("catch")
if(response && response.response && response.response.status && response.response.data){
if (response && response.response && response.response.status && response.response.data) {
errorState(response.response.status, response.response.data)
}
reject(response)
if(response.response.data){
if(response.response.data.message){
if (response.response.data) {
if (response.response.data.message) {
Message.error(response.response.data.message)
}else{
} else {
Message.error("操作失败!")
}
}
......
export function loginOut(){
localStorage.removeItem("user")
localStorage.removeItem("backToken")
localStorage.removeItem("menuList")
export function loginOut() {
const list = ['user', 'userId', 'backToken', 'menuList']
list.forEach(v => {
localStorage.removeItem(v)
})
}
\ No newline at end of file
......@@ -18,6 +18,7 @@
:prop="item.prop"
:label="item.label"
:width="item.width"
>
<template slot-scope="scope">
<div v-if="item.isEdit" class="table-btn-group">
......@@ -68,8 +69,8 @@
</el-tooltip>
</div>
<div v-else>
<span v-if="item.prop === 'type'">
{{ scope.row[item.prop] | accoutType }}
<span v-if="item.prop === 'roleList'">
{{ accoutRoleList(scope.row[item.prop]) }}
</span>
<span v-else>{{ scope.row[item.prop] }}</span>
</div>
......@@ -103,29 +104,29 @@ export default {
return [];
},
},
rolesList: {
type: Array,
default: () => {
return [];
},
filters: {
accoutType(type) {
switch (type) {
case "1":
return "平台账号";
break;
case "2":
return "用户账号";
break;
case "3":
return "机顶盒账号";
break;
case "4":
return "运维账号";
break;
default:
return "";
}
},
},
components: { auditInfo },
components:{auditInfo},
methods: {
accoutRoleList(roleArray) {
if (!this.rolesList.length || !roleArray) {
return false;
}
let roleName = [];
this.rolesList.forEach((r) => {
roleArray.forEach((a) => {
if (r.id == a) {
roleName.push(r.name);
}
});
});
return roleName.join("、");
},
handleOperate(row, type) {
if (type != "edit" && type != "examine") {
this.$confirm("确认进行此操作?", "提示", {
......
......@@ -21,12 +21,16 @@
>
<template slot-scope="scope">
<div v-if="item.isEdit" class="table-btn-group">
<el-tooltip content="修改" placement="top" v-if="userId === scope.row.id">
<el-button circle @click="handleOperate(scope.row, 'edit')" >
<el-tooltip
content="修改"
placement="top"
v-if="userId === scope.row.id"
>
<el-button circle @click="handleOperate(scope.row, 'edit')">
<i class="icon-table icon-edit"></i>
</el-button>
</el-tooltip>
<el-tooltip content="查看" placement="top" v-else>
<el-tooltip content="查看" placement="top">
<el-button circle @click="handleOperate(scope.row, 'detail')">
<i class="icon-table icon-detail"></i>
</el-button>
......@@ -48,9 +52,14 @@
export default {
data() {
return {
userId:localStorage.getItem('userId') || "1375705092221669378"
};
},
computed:{
userId(){
return localStorage.getItem('userId') || ''
}
},
props: {
currentPage: {
type: Number,
......
......@@ -36,7 +36,7 @@ export default {
{ prop: "telephone", label: "固定电话" },
{ prop: "weChat", label: "微信号" },
{ prop: "email", label: "邮箱" },
{ prop: "", label: "操作", isEdit: true, width: 120 },
{ prop: "", label: "操作", isEdit: true, width: 180 },
],
list: [],
page: {
......
......@@ -58,7 +58,7 @@
<el-button type="primary" @click="handleSubmit()">确 定</el-button>
</div>
<div v-else>
<el-button type="primary">确 定</el-button>
<el-button type="primary" @click="dialogVisible = false">确 定</el-button>
</div>
</div>
</el-dialog>
......@@ -90,6 +90,7 @@ export default {
phone: "",
weChat: "",
email: "",
roleList:[],
type: 2, //1.用户账号 2.平台单位管理员账号 3.机顶盒账号 4.运维账号
},
rules: {
......@@ -155,6 +156,7 @@ export default {
phone: "",
weChat: "",
email: "",
roleList:[],
type: 2, //1.用户账号 2.平台单位管理员账号 3.机顶盒账号 4.运维账号
}
},
......@@ -172,6 +174,7 @@ export default {
user.email = _this.form.email;
user.id = _this.id;
user.type = this.form.type;
user.roleList = this.form.roleList
this.$https(
{
method: "put",
......
......@@ -103,7 +103,7 @@ export default {
},
handleReset() {
this.form.userName = "";
this.form.user = "";
this.form.status = "";
this.getFirstPageList();
},
getFirstPageList() {
......
......@@ -146,6 +146,15 @@ export default {
.catch((err) => {
console.log(err);
});
},
// 页面返回值为空
getResWithOutData() {
this.list = [];
this.page = {
_index: 1,
_size: 10,
total: 0,
};
},
// 新增账号
handleAdd() {
......
......@@ -109,6 +109,7 @@ export default {
// 根据id获取获取详情内容
getDetailById() {
let _this = this;
debugger
this.$https(
{
method: "get",
......@@ -126,7 +127,6 @@ export default {
this.form[key] = resData[key];
}
}
// _this.form.areaId = resData.areas
if (!_this.form.permanent) {
_this.form.date = [resData.effectiveDate, resData.exiredDate];
}
......
......@@ -44,14 +44,15 @@
value-format="yyyy-MM-dd"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
end-placeholder="结束日期"
>
</el-date-picker>
</div>
</el-form-item>
<el-form-item label="账号类型" prop="roleList">
<el-checkbox-group v-model="form.roleList" :min="1">
<el-checkbox
v-for="(item,index) in rolesList"
v-for="(item, index) in rolesList"
:key="index"
:label="item.id"
>
......@@ -68,21 +69,17 @@
</el-dialog>
</template>
<script>
import { getOrgListWithOutPage } from "@/config/organ";
import { getRoles } from "@/config/roles";
export default {
data() {
return {
dialogVisible: false,
organList: [],
rolesList: [],
form: {
userName: "",
orgId: "",
permanent: true,
date: "",
roleList: [],
type: 1 //1.用户账号 2.平台单位单位管理员账号 3.机顶盒账号 4.运维账号
type: 1, //1.用户账号 2.平台单位单位管理员账号 3.机顶盒账号 4.运维账号
},
rules: {
userName: [
......@@ -95,48 +92,51 @@ export default {
{ required: true, message: "请选择账号有效期", trigger: "change" },
],
roleList: [
{ type: 'array',required: true, message: "请选择账号类型", trigger: "change" },
]
{
type: "array",
required: true,
message: "请选择账号类型",
trigger: "change",
},
],
},
};
},
mounted() {
this.getOrgList();
this.getRolesList();
props: {
organList: {
type: Array,
default: () => {
return [];
},
methods: {
// 获取机构列表
getOrgList() {
getOrgListWithOutPage().then((res) => {
this.organList = res;
});
},
// 获取角色列表
getRolesList() {
getRoles().then((res) => {
this.rolesList = res;
});
rolesList: {
type: Array,
default: () => {
return [];
},
},
},
mounted() {},
methods: {
// 弹窗关闭
handleClose() {
this.$confirm("确认关闭?")
.then((_) => {
this.handleReset()
this.handleReset();
})
.catch((_) => {});
},
handleReset(){
this.dialogVisible = false
this.$refs.form.resetFields()
handleReset() {
this.dialogVisible = false;
this.$refs.form.resetFields();
this.form = {
userName: "",
orgId: "",
permanent: true,
date: "",
roleList: [],
type:1
}
type: 1,
};
},
// 提交
handleSubmit() {
......@@ -144,11 +144,11 @@ export default {
this.$refs.form.validate((valid) => {
if (valid) {
let user = {};
if(!this.form.permanent && !this.form.date){
this.$message.error('请选择有效期')
return false
if (!this.form.permanent && !this.form.date) {
this.$message.error("请选择有效期");
return false;
}
if(!this.form.permanent){
if (!this.form.permanent) {
user.effectiveDate = this.form.date[0];
user.exiredDate = this.form.date[1];
}
......@@ -156,7 +156,7 @@ export default {
user.orgId = this.form.orgId;
user.roleList = this.form.roleList;
user.permanent = this.form.permanent;
user.type = this.form.type
user.type = this.form.type;
this.$https(
{
method: "post",
......@@ -166,14 +166,14 @@ export default {
user
)
.then((res) => {
if(res.status == 200 ){
if (res.data.resultCode == 200 ) {
if (res.status == 200) {
if (res.data.resultCode == 200) {
this.$message({
type: "success",
message: res.data.message,
});
this.handleReset()
this.$emit('success',true)
this.handleReset();
this.$emit("success", true);
} else {
this.$message.error(res.data.message);
}
......
......@@ -68,14 +68,10 @@
</el-dialog>
</template>
<script>
import { getOrgListWithOutPage } from "@/config/organ";
import { getRoles } from "@/config/roles";
export default {
data() {
return {
dialogVisible: false,
organList: [],
rolesList: [],
id:'',
form: {
id:'',
......@@ -102,23 +98,24 @@ export default {
},
};
},
mounted() {
this.getOrgList();
this.getRolesList();
props: {
organList: {
type: Array,
default: () => {
return [];
},
methods: {
// 获取机构列表
getOrgList() {
getOrgListWithOutPage().then((res) => {
this.organList = res;
});
},
// 获取角色列表
getRolesList() {
getRoles().then((res) => {
this.rolesList = res;
});
rolesList: {
type: Array,
default: () => {
return [];
},
},
},
mounted() {
},
methods: {
// 根据id获取获取详情内容
getDetailById(){
let _this = this
......@@ -140,7 +137,7 @@ export default {
if(!this.form.permanent){
this.form.date = [
resData.effectiveDate,
exiredDate
resData.exiredDate
]
}
} else {
......
......@@ -31,12 +31,13 @@
<account-table
:feildList="feildList"
:list="list"
:rolesList="rolesList"
@action="handleAction"
/>
<party-pagination :page="page" @changePage="handleChangeCurrent" />
</div>
<add-dialog ref="addDialog" @success="getFirstPageList()" />
<edit-dialog ref="editDialog" @success="getFirstPageList()" />
<add-dialog ref="addDialog" :organList="organList" :rolesList="rolesList" @success="getFirstPageList()" />
<edit-dialog ref="editDialog" :organList="organList" :rolesList="rolesList" @success="getFirstPageList()" />
<msg-dialog ref="msgDilaog" :msgInfo="msgInfo" />
</div>
</template>
......@@ -45,6 +46,8 @@ import { partyPagination } from "@/components/index";
import accountTable from "./components/accountTable";
import { addDialog, editDialog } from "./userDialog/index";
import msgDialog from "./msgDialog.vue";
import { getOrgListWithOutPage } from "@/config/organ";
import { getRoles } from "@/config/roles";
export default {
data() {
return {
......@@ -56,7 +59,7 @@ export default {
{ prop: "userName", label: "平台用户名" },
{ prop: "orgName", label: "所在机构" },
{ prop: "exiredDate", label: "到期时间" },
{ prop: "type", label: "账号类型" },
{ prop: "roleList", label: "账号类型" },
{ prop: "statusName", label: "账号状态" },
{ prop: "", label: "操作", isEdit: true, width: 280 },
],
......@@ -68,6 +71,8 @@ export default {
},
activeRow: {},
msgInfo: {},
organList:[],
rolesList:[]
};
},
components: {
......@@ -78,9 +83,23 @@ export default {
msgDialog,
},
mounted() {
this.getOrgList();
this.getRolesList();
this.getFirstPageList();
},
methods: {
// 获取机构列表
getOrgList() {
getOrgListWithOutPage().then((res) => {
this.organList = res;
});
},
// 获取角色列表
getRolesList() {
getRoles().then((res) => {
this.rolesList = res;
});
},
getFirstPageList() {
this.page._index = 1;
this.getPageList();
......@@ -124,6 +143,15 @@ export default {
.catch((err) => {
console.log(err);
});
},
// 页面返回值为空
getResWithOutData() {
this.list = [];
this.page = {
_index: 1,
_size: 10,
total: 0,
};
},
// 新增账号
handleAdd() {
......
......@@ -5,6 +5,7 @@
<el-form :inline="true" :model="form">
<el-form-item>
<el-input
clearable
v-model="form.userName"
placeholder="请输入运维者账号"
suffix-icon="el-icon-search"
......@@ -12,12 +13,14 @@
</el-form-item>
<el-form-item>
<el-date-picker
clearable
v-model="form.date"
type="daterange"
range-separator="至"
value-format="yyyy-MM-dd"
start-placeholder="开始日期"
end-placeholder="结束日期">
end-placeholder="结束日期"
>
</el-date-picker>
</el-form-item>
<el-form-item>
......@@ -29,7 +32,9 @@
</el-form>
<div class="page-tip">
<span class="page-tip-title">页面说明:</span>
<span class="page-tips">可查看所有账号在系统上的操作信息,可根据操作类型、操作时间段查询等方式对日志信息进行筛选</span>
<span class="page-tips"
>可查看所有账号在系统上的操作信息,可根据操作类型、操作时间段查询等方式对日志信息进行筛选</span
>
</div>
</div>
<div class="table-content hasTabs">
......@@ -37,105 +42,109 @@
class="noAdd"
:currentPage="page._index"
:feildList="feildList"
:list="list">
:list="list"
>
</party-table>
<party-pagination
:page="page"
@changePage="handleChangeCurrent"
/>
<party-pagination :page="page" @changePage="handleChangeCurrent" />
</div>
</div>
</template>
<script>
import { partyPagination,partyTable } from '@/components/index'
import { partyPagination, partyTable } from "@/components/index";
export default {
data(){
return{
form:{
userName:'',
date:'',
startDate:'',
endDate:''
data() {
return {
form: {
userName: "",
date: "",
startDate: "",
endDate: "",
},
feildList:[
{prop:'userName',label:'运维账号'},
{prop:'area',label:'运维区域'},
{prop:'operationType',label:'操作类型'},
{prop:'createTime',label:'操作时间'}
feildList: [
{ prop: "userName", label: "运维账号" },
{ prop: "area", label: "运维区域" },
{ prop: "operationType", label: "操作类型" },
{ prop: "createTime", label: "操作时间" },
],
list: [],
page:{
_index:1,
_size:10,
total:0
}
}
page: {
_index: 1,
_size: 10,
total: 0,
},
};
},
components:{ partyTable, partyPagination},
mounted(){
this.getLog()
components: { partyTable, partyPagination },
mounted() {
this.getFirstPageList();
},
methods:{
handleSubmit(){
this.getLog()
methods: {
handleSubmit() {
this.getPageList();
},
handleReset(){
for(let key in this.form){
this.form[key] = ""
getFirstPageList() {
this.page._index = 1;
this.getPageList();
},
handleReset() {
for (let key in this.form) {
this.form[key] = "";
}
this.getLog()
this.getFirstPageList();
},
getLog(){
let requestParams = {}
requestParams._index = this.page._index
requestParams._size = this.page._size
if(this.form.userName){
requestParams.userName = this.form.userName
getPageList() {
let requestParams = {};
requestParams._index = this.page._index;
requestParams._size = this.page._size;
if (this.form.userName) {
requestParams.userName = this.form.userName;
}
if(this.form.date){
requestParams.startDate = this.form.date[0]
requestParams.endDate = this.form.date[1]
if (this.form.date) {
requestParams.startDate = this.form.date[0];
requestParams.endDate = this.form.date[1];
}
this.$https({
method:'get',
url: 'sysLog/OperationLog',
this.$https(
{
method: "get",
url: "sysLog/OperationLog",
authType: this.backToken,
},requestParams).then(res=>{
if(res.status != 200){
this.getResWithOutData()
}else{
if(res.data.resultCode == 200){
this.list = res.data.data.records
this.page._size = res.data.data.size
this.page.total = res.data.data.total
}else{
this.getResWithOutData()
},
requestParams
)
.then((res) => {
if (res.status != 200) {
this.getResWithOutData();
} else {
if (res.data.resultCode == 200) {
this.list = res.data.data.records;
this.page._size = res.data.data.size;
this.page.total = res.data.data.total;
} else {
this.getResWithOutData();
}
}
}).catch(err=>{
console.log(err)
})
.catch((err) => {
console.log(err);
});
},
// 页面返回值为空
getResWithOutData(){
this.list = []
getResWithOutData() {
this.list = [];
this.page = {
_index:1,
_size:10,
total:0
}
_index: 1,
_size: 10,
total: 0,
};
},
// 翻页
handleChangeCurrent(val){
this.page._index = val
this.getLog()
}
handleChangeCurrent(val) {
this.page._index = val;
this.getPageList();
},
watch:{
}
}
},
watch: {},
};
</script>
<style lang="less" scoped>
</style>
\ No newline at end of file
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