floatButton
This commit is contained in:
parent
5ac6a2b1bf
commit
ba69ce62de
|
|
@ -14,9 +14,19 @@ export default {
|
||||||
},
|
},
|
||||||
data(){
|
data(){
|
||||||
return{
|
return{
|
||||||
isRouterAlive:true
|
isRouterAlive:true,
|
||||||
|
timer:null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
mounted(){
|
||||||
|
this.$store.dispatch("user/getCount", {})
|
||||||
|
this.timer = window.setInterval(() => {
|
||||||
|
setTimeout(() => {
|
||||||
|
this.$store.dispatch("user/getCount", {})
|
||||||
|
},0)
|
||||||
|
},30000)
|
||||||
|
|
||||||
|
},
|
||||||
methods:{
|
methods:{
|
||||||
reload(){
|
reload(){
|
||||||
this.isRouterAlive=false;
|
this.isRouterAlive=false;
|
||||||
|
|
@ -24,6 +34,9 @@ export default {
|
||||||
this.isRouterAlive=true;
|
this.isRouterAlive=true;
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
destroyed() {
|
||||||
|
clearInterval(this.timer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
@ -36,4 +49,9 @@ export default {
|
||||||
.el-step__title.is-process{
|
.el-step__title.is-process{
|
||||||
color: #409EFF;
|
color: #409EFF;
|
||||||
}
|
}
|
||||||
|
.navbarBadge .el-badge__content.is-fixed{
|
||||||
|
top: 15px;
|
||||||
|
right: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
export function faceLogin(data) {
|
export function faceLogin(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/system/facelogin/',
|
url: '/hrm/facelogin/',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -225,3 +225,11 @@ export function getTicketFlowlog(id) {
|
||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
//工单代办数量
|
||||||
|
export function getCount(data) {
|
||||||
|
return request({
|
||||||
|
url: `/wf/ticket/duty_agg/`,
|
||||||
|
method: 'get',
|
||||||
|
params:data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,9 @@
|
||||||
|
|
||||||
<div class="right-menu">
|
<div class="right-menu">
|
||||||
<template>
|
<template>
|
||||||
|
<el-badge v-if="count>0" :value="count" class="item right-menu-item navbarBadge" @click.native="gotoTicketPage">
|
||||||
|
<el-icon class="el-icon-s-management" @click.native="gotoTicketPage" style="font-size: 25px;color: #409EFF;padding-top: 12px;cursor: pointer;"></el-icon>
|
||||||
|
</el-badge>
|
||||||
<search id="header-search" class="right-menu-item" />
|
<search id="header-search" class="right-menu-item" />
|
||||||
<el-tooltip content="全局组件大小" effect="dark" placement="bottom">
|
<el-tooltip content="全局组件大小" effect="dark" placement="bottom">
|
||||||
<size-select id="size-select" class="right-menu-item hover-effect" />
|
<size-select id="size-select" class="right-menu-item hover-effect" />
|
||||||
|
|
@ -69,9 +72,14 @@ export default {
|
||||||
'sidebar',
|
'sidebar',
|
||||||
'avatar',
|
'avatar',
|
||||||
'name',
|
'name',
|
||||||
|
'count',
|
||||||
])
|
])
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
gotoTicketPage(){
|
||||||
|
debugger;
|
||||||
|
this.$router.push({name:'ticket',params:{}})
|
||||||
|
},
|
||||||
toggleSideBar() {
|
toggleSideBar() {
|
||||||
this.$store.dispatch('app/toggleSideBar')
|
this.$store.dispatch('app/toggleSideBar')
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,12 @@
|
||||||
<tags-view />
|
<tags-view />
|
||||||
</div>
|
</div>
|
||||||
<app-main />
|
<app-main />
|
||||||
|
|
||||||
|
<div class="floatDiv" @click="gotoTicketPage" v-if="count>0">
|
||||||
|
<el-badge :value="count" class="item ">
|
||||||
|
<el-icon class="el-icon-s-management" style="font-size: 30px;color: #409EFF;padding-top: 12px;"></el-icon>
|
||||||
|
</el-badge>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -15,6 +21,7 @@
|
||||||
<script>
|
<script>
|
||||||
import { Navbar, Sidebar, AppMain,TagsView } from './components'
|
import { Navbar, Sidebar, AppMain,TagsView } from './components'
|
||||||
import ResizeMixin from './mixin/ResizeHandler'
|
import ResizeMixin from './mixin/ResizeHandler'
|
||||||
|
import { mapGetters } from 'vuex'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Layout',
|
name: 'Layout',
|
||||||
|
|
@ -26,6 +33,9 @@ export default {
|
||||||
},
|
},
|
||||||
mixins: [ResizeMixin],
|
mixins: [ResizeMixin],
|
||||||
computed: {
|
computed: {
|
||||||
|
...mapGetters([
|
||||||
|
'count',
|
||||||
|
]),
|
||||||
sidebar() {
|
sidebar() {
|
||||||
return this.$store.state.app.sidebar
|
return this.$store.state.app.sidebar
|
||||||
},
|
},
|
||||||
|
|
@ -47,7 +57,10 @@ export default {
|
||||||
methods: {
|
methods: {
|
||||||
handleClickOutside() {
|
handleClickOutside() {
|
||||||
this.$store.dispatch('app/closeSideBar', { withoutAnimation: false })
|
this.$store.dispatch('app/closeSideBar', { withoutAnimation: false })
|
||||||
}
|
},
|
||||||
|
gotoTicketPage(){
|
||||||
|
this.$router.push({name:'ticket',params:{}})
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
@ -92,4 +105,17 @@ export default {
|
||||||
.mobile .fixed-header {
|
.mobile .fixed-header {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
.floatDiv{
|
||||||
|
position: fixed;
|
||||||
|
z-index: 3000;
|
||||||
|
bottom: 10vh;
|
||||||
|
right: 5vh;
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
cursor: pointer;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 50px;
|
||||||
|
border-radius: 26px;
|
||||||
|
border: 2px solid #409EFF;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ const getters = {
|
||||||
avatar: state => state.user.avatar,
|
avatar: state => state.user.avatar,
|
||||||
name: state => state.user.name,
|
name: state => state.user.name,
|
||||||
perms: state => state.user.perms,
|
perms: state => state.user.perms,
|
||||||
|
count: state => state.user.count,
|
||||||
size: state => state.app.size,
|
size: state => state.app.size,
|
||||||
permission_routes: state => state.permission.routes,
|
permission_routes: state => state.permission.routes,
|
||||||
visitedViews: state => state.tagsView.visitedViews,
|
visitedViews: state => state.tagsView.visitedViews,
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import { login, logout, getInfo } from '@/api/user'
|
import { login, logout, getInfo } from '@/api/user'
|
||||||
|
import { getCount } from '@/api/workflow'
|
||||||
import { getToken, setToken, removeToken } from '@/utils/auth'
|
import { getToken, setToken, removeToken } from '@/utils/auth'
|
||||||
import { resetRouter } from '@/router'
|
import { resetRouter } from '@/router'
|
||||||
|
|
||||||
|
|
@ -7,6 +8,7 @@ const getDefaultState = () => {
|
||||||
token: getToken(),
|
token: getToken(),
|
||||||
name: '',
|
name: '',
|
||||||
avatar: '',
|
avatar: '',
|
||||||
|
count: '',
|
||||||
perms: []
|
perms: []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -28,6 +30,9 @@ const mutations = {
|
||||||
},
|
},
|
||||||
SET_PERMS: (state, perms) => {
|
SET_PERMS: (state, perms) => {
|
||||||
state.perms = perms
|
state.perms = perms
|
||||||
|
},
|
||||||
|
SET_COUNT: (state, count) => {
|
||||||
|
state.count = count
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -90,15 +95,27 @@ const actions = {
|
||||||
},
|
},
|
||||||
|
|
||||||
// remove token
|
// remove token
|
||||||
resetToken({ commit }) {
|
resetToken({ commit },data) {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
removeToken() // must remove token first
|
removeToken(); // must remove token first
|
||||||
commit('RESET_STATE')
|
commit('RESET_STATE');
|
||||||
|
commit('SET_TOKEN', data.access);
|
||||||
|
setToken(data.access);
|
||||||
resolve()
|
resolve()
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
setSize({ commit }, size) {
|
setSize({ commit }, size) {
|
||||||
commit('SET_SIZE', size)
|
commit('SET_SIZE', size)
|
||||||
|
},
|
||||||
|
getCount({ commit }) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
getCount({}).then((res) => {
|
||||||
|
commit('SET_COUNT', res.data.total_count);
|
||||||
|
resolve()
|
||||||
|
}).catch(error => {
|
||||||
|
reject(error)
|
||||||
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,9 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="dashboard-container">
|
<div class="dashboard-container">
|
||||||
|
<el-badge v-if="count>0" :value="count" class="item" @click.native="gotoTicketPage">
|
||||||
|
<el-icon class="el-icon-s-management" @click.native="gotoTicketPage" style="font-size: 70px;color: #d29898"></el-icon>
|
||||||
|
</el-badge>
|
||||||
|
<div></div>
|
||||||
<div class="dashboard-text">name: {{ name }}</div>
|
<div class="dashboard-text">name: {{ name }}</div>
|
||||||
<div class="dashboard-text">perms: <span v-for="perm in perms" :key="perm">{{ perm }}</span></div>
|
<div class="dashboard-text">perms: <span v-for="perm in perms" :key="perm">{{ perm }}</span></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -13,8 +17,15 @@ export default {
|
||||||
computed: {
|
computed: {
|
||||||
...mapGetters([
|
...mapGetters([
|
||||||
'name',
|
'name',
|
||||||
'perms'
|
'perms',
|
||||||
|
'count'
|
||||||
])
|
])
|
||||||
|
},
|
||||||
|
methods:{
|
||||||
|
gotoTicketPage(){
|
||||||
|
debugger;
|
||||||
|
this.$router.push({name:'ticket',params:{}})
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -140,6 +140,7 @@
|
||||||
this.$store
|
this.$store
|
||||||
.dispatch("user/login", this.loginForm)
|
.dispatch("user/login", this.loginForm)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
|
this.$store.dispatch("user/getCount", {})
|
||||||
this.$router.push({ path: this.redirect || "/" });
|
this.$router.push({ path: this.redirect || "/" });
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
localStorage.setItem("rem_username", this.loginForm.username);
|
localStorage.setItem("rem_username", this.loginForm.username);
|
||||||
|
|
@ -148,6 +149,7 @@
|
||||||
.catch(() => {
|
.catch(() => {
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
});
|
});
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
console.log("error submit!!");
|
console.log("error submit!!");
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -13,13 +13,15 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import {faceLogin} from "@/api/testModel";
|
import {faceLogin} from "@/api/testModel";
|
||||||
|
import { setToken, removeToken } from '@/utils/auth'
|
||||||
|
import { login, getInfo } from '@/api/user'
|
||||||
// import "tracking/build/data/face-min.js";
|
// import "tracking/build/data/face-min.js";
|
||||||
// import "tracking/build/data/mouth-min.js";
|
// import "tracking/build/data/mouth-min.js";
|
||||||
// import "tracking/build/data/tracking-min.js";
|
// import "tracking/build/data/tracking-min.js";
|
||||||
// import "tracking/examples/assets/stats.min.js";
|
// import "tracking/examples/assets/stats.min.js";
|
||||||
// import "tracking/examples/assets/stats.min.js";
|
|
||||||
export default {
|
export default {
|
||||||
props:['src'],
|
props:['src'],
|
||||||
|
inject:['reload'],
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
videoWidth: 500,
|
videoWidth: 500,
|
||||||
|
|
@ -69,9 +71,25 @@
|
||||||
let image = new Image();
|
let image = new Image();
|
||||||
image = canvas.toDataURL('image/png');
|
image = canvas.toDataURL('image/png');
|
||||||
document.getElementById('res').innerHTML = '<img src="'+image+'">';
|
document.getElementById('res').innerHTML = '<img src="'+image+'">';
|
||||||
let imgData = {base64:image};
|
let img = image.split(',')[1];
|
||||||
|
let imgData = {base64:img};
|
||||||
faceLogin(imgData).then((res) => {
|
faceLogin(imgData).then((res) => {
|
||||||
if (res.code >= 200) {
|
if (res.code >= 200) {
|
||||||
|
debugger;
|
||||||
|
console.log(res);
|
||||||
|
let data = res.data;
|
||||||
|
this.$confirm("是否切换登陆人?", "提示", {
|
||||||
|
confirmButtonText: "确认",
|
||||||
|
cancelButtonText: "取消",
|
||||||
|
type: "warning",
|
||||||
|
}).then(async () => {
|
||||||
|
await this.$store.dispatch("user/resetToken",data);
|
||||||
|
await this.$store.dispatch("user/getInfo",data.access);
|
||||||
|
window.location.reload();
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.error(err);
|
||||||
|
});
|
||||||
this.$message.success("成功");
|
this.$message.success("成功");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue