@ -1,95 +0,0 @@ |
|||
<template> |
|||
<div :class="{'has-logo':showLogo}"> |
|||
<logo v-if="showLogo" :collapse="isCollapse" /> |
|||
<el-scrollbar wrap-class="scrollbar-wrapper"> |
|||
<!-- <el-menu |
|||
:default-active="activeMenu" |
|||
:collapse="isCollapse" |
|||
:background-color="variables.menuBg" |
|||
:text-color="variables.menuText" |
|||
:unique-opened="false" |
|||
:active-text-color="variables.menuActiveText" |
|||
:collapse-transition="false" |
|||
mode="vertical" |
|||
> |
|||
<sidebar-item v-for="route in menu" :key="route.path" :item="route" :base-path="route.path" /> |
|||
</el-menu> --> |
|||
<!-- <el-menu |
|||
:default-active="activeMenu" |
|||
:collapse="isCollapse" |
|||
:background-color="variables.menuBg" |
|||
:text-color="variables.menuText" |
|||
:unique-opened="false" |
|||
:active-text-color="variables.menuActiveText" |
|||
:collapse-transition="false" |
|||
mode="vertical" |
|||
> |
|||
<sidebar-item v-for="route in menu" :key="route.id" :item="route" :base-path="route.apiUrl" /> |
|||
</el-menu> --> |
|||
<el-menu |
|||
:background-color="variables.menuBg" |
|||
:text-color="variables.menuText" |
|||
:default-active="$route.meta.pageId" |
|||
> |
|||
<template v-for="item in menu"> |
|||
<router-link :to="item.apiUrl" :key="item.id" v-if="item.child.length===0"> |
|||
<el-menu-item :index="item.id.toString()"> |
|||
<i :class="item.icon"></i> |
|||
<span slot="title">{{item.title}}</span> |
|||
</el-menu-item> |
|||
</router-link> |
|||
<subMenu v-else :data="item" :key="item.id"></subMenu> |
|||
</template> |
|||
</el-menu> |
|||
</el-scrollbar> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import subMenu from "./subMenu"; |
|||
import { mapGetters } from 'vuex' |
|||
import Logo from './Logo' |
|||
import SidebarItem from './SidebarItem' |
|||
import variables from '@/styles/variables.scss' |
|||
import { getmenu } from '@/api/user' |
|||
export default { |
|||
components: { SidebarItem, Logo,subMenu }, |
|||
data () { |
|||
return { |
|||
menu:[], |
|||
} |
|||
}, |
|||
async created () { |
|||
console.log(this.$router.options.routes) |
|||
const res = await getmenu() |
|||
this.menu=res.data.list |
|||
}, |
|||
computed: { |
|||
...mapGetters([ |
|||
'sidebar' |
|||
]), |
|||
// routes() { |
|||
// return this.$router.options.routes |
|||
|
|||
// }, |
|||
activeMenu() { |
|||
const route = this.$route |
|||
const { meta, path } = route |
|||
// if set path, the sidebar will highlight the path you set |
|||
if (meta.activeMenu) { |
|||
return meta.activeMenu |
|||
} |
|||
return path |
|||
}, |
|||
showLogo() { |
|||
return this.$store.state.settings.sidebarLogo |
|||
}, |
|||
variables() { |
|||
return variables |
|||
}, |
|||
isCollapse() { |
|||
return !this.sidebar.opened |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
@ -0,0 +1,56 @@ |
|||
<template> |
|||
<div :class="{'has-logo':showLogo}"> |
|||
<logo v-if="showLogo" :collapse="isCollapse" /> |
|||
<el-scrollbar wrap-class="scrollbar-wrapper"> |
|||
<el-menu |
|||
:default-active="activeMenu" |
|||
:collapse="isCollapse" |
|||
:background-color="variables.menuBg" |
|||
:text-color="variables.menuText" |
|||
:unique-opened="false" |
|||
:active-text-color="variables.menuActiveText" |
|||
:collapse-transition="false" |
|||
mode="vertical" |
|||
> |
|||
<sidebar-item v-for="route in routes" :key="route.path" :item="route" :base-path="route.path" /> |
|||
</el-menu> |
|||
</el-scrollbar> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapGetters } from 'vuex' |
|||
import Logo from './Logo' |
|||
import SidebarItem from './SidebarItem' |
|||
import variables from '@/styles/variables.scss' |
|||
|
|||
export default { |
|||
components: { SidebarItem, Logo }, |
|||
computed: { |
|||
...mapGetters([ |
|||
'sidebar' |
|||
]), |
|||
routes() { |
|||
return this.$router.options.routes |
|||
}, |
|||
activeMenu() { |
|||
const route = this.$route |
|||
const { meta, path } = route |
|||
// if set path, the sidebar will highlight the path you set |
|||
if (meta.activeMenu) { |
|||
return meta.activeMenu |
|||
} |
|||
return path |
|||
}, |
|||
showLogo() { |
|||
return this.$store.state.settings.sidebarLogo |
|||
}, |
|||
variables() { |
|||
return variables |
|||
}, |
|||
isCollapse() { |
|||
return !this.sidebar.opened |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
@ -0,0 +1,265 @@ |
|||
import request from '@/utils/request' |
|||
//个人需要填写的考核项目
|
|||
export function myassessmentlist(params) { |
|||
return request({ |
|||
url: '/dutys/myassessmentlist', |
|||
method: 'post', |
|||
params |
|||
}) |
|||
} |
|||
//根据具体考核项目获取被考核部门
|
|||
export const getDutydepartlist = (data) => { |
|||
return request({ |
|||
url: '/dutys/getDutydepartlist', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//根据具体考核项目获取被考核部门
|
|||
export const addassessmentscore = (data) => { |
|||
return request({ |
|||
url: '/dutys/addassessmentscore', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//个人考核评价记录
|
|||
export const myevaluatelist = (data) => { |
|||
return request({ |
|||
url: '/dutys/myevaluatelist', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//根据部门和时间获取考核详情
|
|||
export const getdeparttimeassess = (data) => { |
|||
return request({ |
|||
url: '/dutys/getdeparttimeassess', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//获取企业微信发起基础配置
|
|||
export const getconfig = (data) => { |
|||
return request({ |
|||
url: '/examine/getconfig', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//以部门维度考核内容列表
|
|||
export const departmentassess = (data) => { |
|||
return request({ |
|||
url: '/dutys/departmentassess', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//根据部门和时间写入全部考核项分值
|
|||
export const departmentassessdata = (data) => { |
|||
return request({ |
|||
url: '/dutys/departmentassessdata', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//查看审批详细内容
|
|||
export const lookdepartmentassessinfo = (data) => { |
|||
return request({ |
|||
url: '/noverify/lookdepartmentassessinfo', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//查看本部门提交的和个人提交的审批
|
|||
export const lookpersonalordepartment = (data) => { |
|||
return request({ |
|||
url: '/dutys/lookpersonalordepartment', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//定性考核列表
|
|||
export const qualevalulist = (data) => { |
|||
return request({ |
|||
url: '/eval/qualevalulist', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//添加加分或减分
|
|||
export const additionandsubtractionscore = (data) => { |
|||
return request({ |
|||
url: '/eval/plusorminuspoints', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//流程列表
|
|||
export const seeflowlog = (data) => { |
|||
return request({ |
|||
url: '/eval/seeflowlog', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//文档上传
|
|||
export const upordown = (data) => { |
|||
return request({ |
|||
url: '/upordown', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
// @Tags Api
|
|||
// @Summary 获取集团架构人员信息对照表
|
|||
// @Security ApiKeyAuth
|
|||
// @accept application/json
|
|||
// @Produce application/json
|
|||
// @Param data body dbModel.Api true "获取集团架构"
|
|||
// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}"
|
|||
// @Router /group/grouplist [get]
|
|||
export const getgroupuser = (data) => { |
|||
return request({ |
|||
url: '/group/getgroupuser', |
|||
method: 'post', |
|||
data |
|||
}) |
|||
} |
|||
//划分责任人
|
|||
export const adddivisionresponsibility = (data) => { |
|||
return request({ |
|||
url: '/eval/rersonincharge', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//添加整改措施
|
|||
export const addcorrectivemeasures = (data) => { |
|||
return request({ |
|||
url: '/eval/rectificationmeasures', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//定量考核列表
|
|||
export const qualitativeevalration = (data) => { |
|||
return request({ |
|||
url: '/eval/qualitativeevalration', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//获取集团架构(集团+分厂)
|
|||
export const getgroupdepartmap = (data) => { |
|||
return request({ |
|||
url: '/group/getgroupdepartmap', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//获取分厂
|
|||
export const departmentlist = (data) => { |
|||
return request({ |
|||
url: '/group/departmentlist', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//定量考核打分
|
|||
export const addflowrationlog = (data) => { |
|||
return request({ |
|||
url: '/eval/addflowrationlog', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//提交定量审核
|
|||
export const quanOperation = (data) => { |
|||
return request({ |
|||
url: '/quan/operation', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//查看定性考核审批列表
|
|||
export const lookdutkscoreflow = (data) => { |
|||
return request({ |
|||
url: '/eval/lookdutkscoreflow', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//查看定量考核
|
|||
export const lookrationkscoreflow = (data) => { |
|||
return request({ |
|||
url: '/eval/lookrationkscoreflow', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//获取班组
|
|||
export const getteamlist = (data) => { |
|||
return request({ |
|||
url: '/noverify/getteamlist', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//获取人员
|
|||
export const stafflist = (data) => { |
|||
return request({ |
|||
url: '/staff/stafflist', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//新定性考核列表
|
|||
export const newqualitative = (data) => { |
|||
return request({ |
|||
url: '/eval/newqualitative', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//获取新定性考核详细指标
|
|||
export const newgetqualdetailedtarget = (data) => { |
|||
return request({ |
|||
url: '/eval/newgetqualdetailedtarget', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//加减分NEW
|
|||
export const plusorminuspoints = (data) => { |
|||
return request({ |
|||
url: '/eval/plusorminuspointsnew', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//流程图 1是整改2是不整改
|
|||
export const examineflow = (data) => { |
|||
return request({ |
|||
url: '/eval/examineflow', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//定性审批
|
|||
export const operation = (data) => { |
|||
return request({ |
|||
url: '/qual/operation', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//定量审批
|
|||
export const sanction = (data) => { |
|||
return request({ |
|||
url: '/quan/sanction', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
|
|||
@ -0,0 +1,24 @@ |
|||
import request from '@/utils/request' |
|||
// @Tags Api
|
|||
// @Summary 获取集团架构(集团+分厂)
|
|||
// @Security ApiKeyAuth
|
|||
// @accept application/json
|
|||
// @Produce application/json
|
|||
// @Param data body dbModel.Api true "获取集团架构"
|
|||
// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}"
|
|||
// @Router /group/grouplist [get]
|
|||
export const getgroupdepartmap = (data) => { |
|||
return request({ |
|||
url: '/group/getgroupdepartmap', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//以部门维度考核内容列表
|
|||
export const departmentassess = (data) => { |
|||
return request({ |
|||
url: '/dutys/departmentassess', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
@ -0,0 +1,26 @@ |
|||
import request from '@/utils/request' |
|||
//个人需要填写的考核项目
|
|||
export const oauth2 = (data) => { |
|||
return request({ |
|||
url: '/base/oauth2', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
// @Summary 用户端登录
|
|||
// @Produce application/json
|
|||
// @Param data body {username:"string",password:"string"}
|
|||
// @Router /base/login [post]
|
|||
export const mylogin = (data) => { |
|||
return request({ |
|||
url: '/base/mylogin', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
export function logout() { |
|||
return request({ |
|||
url: '/vue-admin-template/user/logout', |
|||
method: 'post' |
|||
}) |
|||
} |
|||
@ -0,0 +1,75 @@ |
|||
import request from '@/utils/request' |
|||
//注销接口
|
|||
export function logout(params) { |
|||
return request({ |
|||
url: '/logout.do', |
|||
method: 'get', |
|||
params |
|||
}) |
|||
} |
|||
//登录接口
|
|||
export const login = (data) => { |
|||
return request({ |
|||
url: '/login.do', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//注册
|
|||
export const register = (data) => { |
|||
return request({ |
|||
url: '/login/register', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//绑定提现账户
|
|||
export const accountBinding = (data) => { |
|||
return request({ |
|||
url: '/user/accountBinding', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//申请提现
|
|||
export const withdraw = (data) => { |
|||
return request({ |
|||
url: '/user/withdraw', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//激活码激活
|
|||
export const cdkActivation = (data) => { |
|||
return request({ |
|||
url: '/user/cdkActivation', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//主页
|
|||
export const index = (data) => { |
|||
return request({ |
|||
url: '/user/index', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//开始任务按钮
|
|||
export const start = (data) => { |
|||
return request({ |
|||
url: '/user/start', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//校验是否到期并且上传收益接口
|
|||
export const checkAndAdd = (data) => { |
|||
return request({ |
|||
url: '/user/checkAndAdd', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
|
|||
|
|||
@ -0,0 +1,9 @@ |
|||
import request from '@/utils/request' |
|||
|
|||
export function getList(params) { |
|||
return request({ |
|||
url: '/vue-admin-template/table/list', |
|||
method: 'get', |
|||
params |
|||
}) |
|||
} |
|||
@ -0,0 +1,73 @@ |
|||
import request from '@/utils/request' |
|||
|
|||
export function login(data) { |
|||
return request({ |
|||
url: '/vue-admin-template/user/login', |
|||
method: 'post', |
|||
data |
|||
}) |
|||
} |
|||
|
|||
export function getInfo(token) { |
|||
return request({ |
|||
url: '/vue-admin-template/user/info', |
|||
method: 'get', |
|||
params: { token } |
|||
}) |
|||
} |
|||
// @Summary 获取验证码
|
|||
// @Produce application/json
|
|||
// @Param data body {username:"string",password:"string"}
|
|||
// @Router /base/captcha [post]
|
|||
// export const captcha = (data) => {
|
|||
// return service({
|
|||
// url: '/base/captcha',
|
|||
// method: 'post',
|
|||
// data: data
|
|||
// })
|
|||
// }
|
|||
export function captcha() { |
|||
return request({ |
|||
url: '/base/captcha', |
|||
method: 'post' |
|||
}) |
|||
} |
|||
// @Summary 用户端登录
|
|||
// @Produce application/json
|
|||
// @Param data body {username:"string",password:"string"}
|
|||
// @Router /base/login [post]
|
|||
export const mylogin = (data) => { |
|||
return request({ |
|||
url: '/base/mylogin', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
// @Summary 超级登录
|
|||
// @Produce application/json
|
|||
// @Param data body {username:"string",password:"string"}
|
|||
// @Router /base/login [post]
|
|||
export const scancodelogin = (data) => { |
|||
return request({ |
|||
url: '/base/scancodelogin', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
export function logout() { |
|||
return request({ |
|||
url: '/vue-admin-template/user/logout', |
|||
method: 'post' |
|||
}) |
|||
} |
|||
// @Summary 查询个人信息
|
|||
// @Produce application/json
|
|||
// @Param data body {username:"string",password:"string"}
|
|||
// @Router /base/login [post]
|
|||
export const scancode = (data) => { |
|||
return request({ |
|||
url: '/noverify/scancode', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
@ -0,0 +1,33 @@ |
|||
import request from '@/utils/request' |
|||
//计算定量考核组织范围,及起止年份
|
|||
export const getquantechartorgandyear = (data) => { |
|||
return request({ |
|||
url: '/quant/getquantechartorgandyear', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//表格数据
|
|||
export const getplanversionvalid = (data) => { |
|||
return request({ |
|||
url: '/ststic/getplanversionvalid', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//计算定量考核数据
|
|||
export const quantechart = (data) => { |
|||
return request({ |
|||
url: '/quant/quantechart', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//成绩表查询
|
|||
export const departmenttranscript = (data) => { |
|||
return request({ |
|||
url: '/ststic/departmenttranscript', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
@ -0,0 +1,252 @@ |
|||
import request from '@/utils/request1' |
|||
//添加职位(岗位)
|
|||
export const addpositioncont = (data) => { |
|||
return request({ |
|||
url: '/org/addpositioncont', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//获取职位(岗位)详情
|
|||
export const getpositioncont = (data) => { |
|||
return request({ |
|||
url: '/org/getpositioncont', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//编辑职位(岗位)状态或删除
|
|||
export const eitepositionstateordel = (data) => { |
|||
return request({ |
|||
url: '/org/eitepositionstateordel', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//职位(岗位)列表
|
|||
export const positionlist = (data) => { |
|||
return request({ |
|||
url: '/org/positionlist', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//编辑职位(岗位)
|
|||
export const eitepositioncont = (data) => { |
|||
return request({ |
|||
url: '/org/eitepositioncont', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//职务列表
|
|||
export const dutieslist = (data) => { |
|||
return request({ |
|||
url: '/org/dutieslist', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//行政组织列表
|
|||
export const govlist = (data) => { |
|||
return request({ |
|||
url: '/org/govlist', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//行政组织树
|
|||
export const govthree = (data) => { |
|||
return request({ |
|||
url: '/org/govthree', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//岗位(职位)配权
|
|||
export const getpositionrole = (data) => { |
|||
return request({ |
|||
url: '/org/getpositionrole', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//岗位(职位)配权
|
|||
export const positionallotment = (data) => { |
|||
return request({ |
|||
url: '/permit/positionallotment', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//人员列表
|
|||
export const stafflist = (data) => { |
|||
return request({ |
|||
url: '/staff/stafflist', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//职务分类列表
|
|||
export const utiesclasslist = (data) => { |
|||
return request({ |
|||
url: '/org/utiesclasslist', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//添加职务分类
|
|||
export const adddutiesclass = (data) => { |
|||
return request({ |
|||
url: '/org/adddutiesclass', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//删除职务分类
|
|||
export const delutiesclassinfo = (data) => { |
|||
return request({ |
|||
url: '/org/delutiesclassinfo', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//修改职务分类详情
|
|||
export const eiteutiesclassinfo = (data) => { |
|||
return request({ |
|||
url: '/org/eiteutiesclassinfo', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//获取职务分类详情
|
|||
export const getutiesclassinfo = (data) => { |
|||
return request({ |
|||
url: '/org/getutiesclassinfo', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//编辑职务
|
|||
export const eitedutiescont = (data) => { |
|||
return request({ |
|||
url: '/org/eitedutiescont', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//编辑职务状态或删除
|
|||
export const eitedutiesstatordel = (data) => { |
|||
return request({ |
|||
url: '/org/eitedutiesstatordel', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
|
|||
//获取职务详情
|
|||
export const getdutiescont = (data) => { |
|||
return request({ |
|||
url: '/org/getdutiescont', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//添加职务
|
|||
export const adddutiescont = (data) => { |
|||
return request({ |
|||
url: '/org/adddutiescont', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//行政组织类型列表
|
|||
export const govclasslist = (data) => { |
|||
return request({ |
|||
url: '/org/govclasslist', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//添加行政组织类型
|
|||
export const addgovclass = (data) => { |
|||
return request({ |
|||
url: '/org/addgovclass', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//编辑行政组织类型
|
|||
export const eitegovclasscont = (data) => { |
|||
return request({ |
|||
url: '/org/eitegovclasscont', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//获取行政组织类型
|
|||
export const getgovclasscont = (data) => { |
|||
return request({ |
|||
url: '/org/getgovclasscont', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//编辑行政组织类型状态或删除
|
|||
export const eitegovclassstateordel = (data) => { |
|||
return request({ |
|||
url: '/org/eitegovclassstateordel', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//编辑行政组织状态或删除
|
|||
export const eitegovstateordel = (data) => { |
|||
return request({ |
|||
url: '/org/eitegovstateordel', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//添加行政组织
|
|||
export const addgovcont = (data) => { |
|||
return request({ |
|||
url: '/org/addgovcont', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//编辑行政组织
|
|||
export const eitegovcont = (data) => { |
|||
return request({ |
|||
url: '/org/eitegovcont', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//获取行政组织详情
|
|||
export const getgovcont = (data) => { |
|||
return request({ |
|||
url: '/org/getgovcont', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//人员列表(新)
|
|||
export const archiveslist = (data) => { |
|||
return request({ |
|||
url: '/staff/archiveslist', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
//个人档案
|
|||
export const archivescont = (data) => { |
|||
return request({ |
|||
url: '/staff/archivescont', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
|
|||
|
|||
@ -1,23 +1,23 @@ |
|||
<template> |
|||
<div> |
|||
<template v-if="hasOneShowingChild(item.child,item) && (!onlyOneChild.child||onlyOneChild.noShowingChildren)&&!item.alwaysShow"> |
|||
<app-link v-if="onlyOneChild.title" :to="resolvePath(onlyOneChild.apiUrl)"> |
|||
<el-menu-item :index="resolvePath(onlyOneChild.apiUrl)" :class="{'submenu-title-noDropdown':!isNest}"> |
|||
<item :title="onlyOneChild.title" /> |
|||
<div v-if="!item.hidden"> |
|||
<template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow"> |
|||
<app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path)"> |
|||
<el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}"> |
|||
<item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" /> |
|||
</el-menu-item> |
|||
</app-link> |
|||
</template> |
|||
|
|||
<el-submenu v-else ref="subMenu" :index="resolvePath(item.apiUrl)" popper-append-to-body> |
|||
<el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body> |
|||
<template slot="title"> |
|||
<item v-if="item.title" :title="item.title" /> |
|||
<item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="item.meta.title" /> |
|||
</template> |
|||
<sidebar-item |
|||
v-for="child in item.child" |
|||
:key="child.id" |
|||
v-for="child in item.children" |
|||
:key="child.path" |
|||
:is-nest="true" |
|||
:item="child" |
|||
:base-path="resolvePath(child.apiUrl)" |
|||
:base-path="resolvePath(child.path)" |
|||
class="nest-menu" |
|||
/> |
|||
</el-submenu> |
|||
@ -0,0 +1,94 @@ |
|||
<template> |
|||
<el-scrollbar ref="scrollContainer" :vertical="false" class="scroll-container" @wheel.native.prevent="handleScroll"> |
|||
<slot /> |
|||
</el-scrollbar> |
|||
</template> |
|||
|
|||
<script> |
|||
const tagAndTagSpacing = 4 // tagAndTagSpacing |
|||
|
|||
export default { |
|||
name: 'ScrollPane', |
|||
data() { |
|||
return { |
|||
left: 0 |
|||
} |
|||
}, |
|||
computed: { |
|||
scrollWrapper() { |
|||
return this.$refs.scrollContainer.$refs.wrap |
|||
} |
|||
}, |
|||
mounted() { |
|||
this.scrollWrapper.addEventListener('scroll', this.emitScroll, true) |
|||
}, |
|||
beforeDestroy() { |
|||
this.scrollWrapper.removeEventListener('scroll', this.emitScroll) |
|||
}, |
|||
methods: { |
|||
handleScroll(e) { |
|||
const eventDelta = e.wheelDelta || -e.deltaY * 40 |
|||
const $scrollWrapper = this.scrollWrapper |
|||
$scrollWrapper.scrollLeft = $scrollWrapper.scrollLeft + eventDelta / 4 |
|||
}, |
|||
emitScroll() { |
|||
this.$emit('scroll') |
|||
}, |
|||
moveToTarget(currentTag) { |
|||
const $container = this.$refs.scrollContainer.$el |
|||
const $containerWidth = $container.offsetWidth |
|||
const $scrollWrapper = this.scrollWrapper |
|||
const tagList = this.$parent.$refs.tag |
|||
|
|||
let firstTag = null |
|||
let lastTag = null |
|||
|
|||
// find first tag and last tag |
|||
if (tagList.length > 0) { |
|||
firstTag = tagList[0] |
|||
lastTag = tagList[tagList.length - 1] |
|||
} |
|||
|
|||
if (firstTag === currentTag) { |
|||
$scrollWrapper.scrollLeft = 0 |
|||
} else if (lastTag === currentTag) { |
|||
$scrollWrapper.scrollLeft = $scrollWrapper.scrollWidth - $containerWidth |
|||
} else { |
|||
// find preTag and nextTag |
|||
const currentIndex = tagList.findIndex(item => item === currentTag) |
|||
const prevTag = tagList[currentIndex - 1] |
|||
const nextTag = tagList[currentIndex + 1] |
|||
|
|||
// the tag's offsetLeft after of nextTag |
|||
const afterNextTagOffsetLeft = nextTag.$el.offsetLeft + nextTag.$el.offsetWidth + tagAndTagSpacing |
|||
|
|||
// the tag's offsetLeft before of prevTag |
|||
const beforePrevTagOffsetLeft = prevTag.$el.offsetLeft - tagAndTagSpacing |
|||
|
|||
if (afterNextTagOffsetLeft > $scrollWrapper.scrollLeft + $containerWidth) { |
|||
$scrollWrapper.scrollLeft = afterNextTagOffsetLeft - $containerWidth |
|||
} else if (beforePrevTagOffsetLeft < $scrollWrapper.scrollLeft) { |
|||
$scrollWrapper.scrollLeft = beforePrevTagOffsetLeft |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.scroll-container { |
|||
white-space: nowrap; |
|||
position: relative; |
|||
overflow: hidden; |
|||
width: 100%; |
|||
::v-deep { |
|||
.el-scrollbar__bar { |
|||
bottom: 0px; |
|||
} |
|||
.el-scrollbar__wrap { |
|||
height: 49px; |
|||
} |
|||
} |
|||
} |
|||
</style> |
|||
@ -0,0 +1,294 @@ |
|||
<template> |
|||
<div id="tags-view-container" class="tags-view-container"> |
|||
<scroll-pane ref="scrollPane" class="tags-view-wrapper" @scroll="handleScroll"> |
|||
<router-link |
|||
v-for="tag in visitedViews" |
|||
ref="tag" |
|||
:key="tag.path" |
|||
:class="isActive(tag)?'active':''" |
|||
:to="{ path: tag.path, query: tag.query, fullPath: tag.fullPath }" |
|||
tag="span" |
|||
class="tags-view-item" |
|||
@click.middle.native="!isAffix(tag)?closeSelectedTag(tag):''" |
|||
@contextmenu.prevent.native="openMenu(tag,$event)" |
|||
> |
|||
{{ generateTitle(tag.title) }} |
|||
<span v-if="!isAffix(tag)" class="el-icon-close" @click.prevent.stop="closeSelectedTag(tag)" /> |
|||
</router-link> |
|||
</scroll-pane> |
|||
<ul v-show="visible" :style="{left:left+'px',top:top+'px'}" class="contextmenu"> |
|||
<li @click="refreshSelectedTag(selectedTag)">{{ $t('tagsView.refresh') }}</li> |
|||
<li v-if="!isAffix(selectedTag)" @click="closeSelectedTag(selectedTag)">{{ $t('tagsView.close') }}</li> |
|||
<li @click="closeOthersTags">{{ $t('tagsView.closeOthers') }}</li> |
|||
<li @click="closeAllTags(selectedTag)">{{ $t('tagsView.closeAll') }}</li> |
|||
</ul> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import ScrollPane from './ScrollPane' |
|||
import { generateTitle } from '@/utils/i18n' |
|||
import path from 'path' |
|||
|
|||
export default { |
|||
components: { ScrollPane }, |
|||
data() { |
|||
return { |
|||
visible: false, |
|||
top: 0, |
|||
left: 0, |
|||
selectedTag: {}, |
|||
affixTags: [] |
|||
} |
|||
}, |
|||
computed: { |
|||
visitedViews() { |
|||
return this.$store.state.tagsView.visitedViews |
|||
}, |
|||
routes() { |
|||
return this.$store.state.permission.routes |
|||
} |
|||
}, |
|||
watch: { |
|||
$route() { |
|||
this.addTags() |
|||
this.moveToCurrentTag() |
|||
}, |
|||
visible(value) { |
|||
if (value) { |
|||
document.body.addEventListener('click', this.closeMenu) |
|||
} else { |
|||
document.body.removeEventListener('click', this.closeMenu) |
|||
} |
|||
} |
|||
}, |
|||
mounted() { |
|||
this.initTags() |
|||
this.addTags() |
|||
}, |
|||
methods: { |
|||
generateTitle, // generateTitle by vue-i18n |
|||
isActive(route) { |
|||
return route.path === this.$route.path |
|||
}, |
|||
isAffix(tag) { |
|||
return tag.meta && tag.meta.affix |
|||
}, |
|||
filterAffixTags(routes, basePath = '/') { |
|||
let tags = [] |
|||
routes.forEach(route => { |
|||
if (route.meta && route.meta.affix) { |
|||
const tagPath = path.resolve(basePath, route.path) |
|||
tags.push({ |
|||
fullPath: tagPath, |
|||
path: tagPath, |
|||
name: route.name, |
|||
meta: { ...route.meta } |
|||
}) |
|||
} |
|||
if (route.children) { |
|||
const tempTags = this.filterAffixTags(route.children, route.path) |
|||
if (tempTags.length >= 1) { |
|||
tags = [...tags, ...tempTags] |
|||
} |
|||
} |
|||
}) |
|||
return tags |
|||
}, |
|||
initTags() { |
|||
const affixTags = this.affixTags = this.filterAffixTags(this.routes) |
|||
for (const tag of affixTags) { |
|||
// Must have tag name |
|||
if (tag.name) { |
|||
this.$store.dispatch('tagsView/addVisitedView', tag) |
|||
} |
|||
} |
|||
}, |
|||
addTags() { |
|||
const { name } = this.$route |
|||
if (name) { |
|||
this.$store.dispatch('tagsView/addView', this.$route) |
|||
} |
|||
return false |
|||
}, |
|||
moveToCurrentTag() { |
|||
const tags = this.$refs.tag |
|||
this.$nextTick(() => { |
|||
for (const tag of tags) { |
|||
if (tag.to.path === this.$route.path) { |
|||
this.$refs.scrollPane.moveToTarget(tag) |
|||
// when query is different then update |
|||
if (tag.to.fullPath !== this.$route.fullPath) { |
|||
this.$store.dispatch('tagsView/updateVisitedView', this.$route) |
|||
} |
|||
break |
|||
} |
|||
} |
|||
}) |
|||
}, |
|||
refreshSelectedTag(view) { |
|||
this.$store.dispatch('tagsView/delCachedView', view).then(() => { |
|||
const { fullPath } = view |
|||
this.$nextTick(() => { |
|||
this.$router.replace({ |
|||
path: '/redirect' + fullPath |
|||
}) |
|||
}) |
|||
}) |
|||
}, |
|||
closeSelectedTag(view) { |
|||
this.$store.dispatch('tagsView/delView', view).then(({ visitedViews }) => { |
|||
if (this.isActive(view)) { |
|||
this.toLastView(visitedViews, view) |
|||
} |
|||
}) |
|||
}, |
|||
closeOthersTags() { |
|||
this.$router.push(this.selectedTag) |
|||
this.$store.dispatch('tagsView/delOthersViews', this.selectedTag).then(() => { |
|||
this.moveToCurrentTag() |
|||
}) |
|||
}, |
|||
closeAllTags(view) { |
|||
this.$store.dispatch('tagsView/delAllViews').then(({ visitedViews }) => { |
|||
if (this.affixTags.some(tag => tag.path === view.path)) { |
|||
return |
|||
} |
|||
this.toLastView(visitedViews, view) |
|||
}) |
|||
}, |
|||
toLastView(visitedViews, view) { |
|||
const latestView = visitedViews.slice(-1)[0] |
|||
if (latestView) { |
|||
this.$router.push(latestView.fullPath) |
|||
} else { |
|||
// now the default is to redirect to the home page if there is no tags-view, |
|||
// you can adjust it according to your needs. |
|||
if (view.name === 'Dashboard') { |
|||
// to reload home page |
|||
this.$router.replace({ path: '/redirect' + view.fullPath }) |
|||
} else { |
|||
this.$router.push('/') |
|||
} |
|||
} |
|||
}, |
|||
openMenu(tag, e) { |
|||
const menuMinWidth = 105 |
|||
const offsetLeft = this.$el.getBoundingClientRect().left // container margin left |
|||
const offsetWidth = this.$el.offsetWidth // container width |
|||
const maxLeft = offsetWidth - menuMinWidth // left boundary |
|||
const left = e.clientX - offsetLeft + 15 // 15: margin right |
|||
|
|||
if (left > maxLeft) { |
|||
this.left = maxLeft |
|||
} else { |
|||
this.left = left |
|||
} |
|||
|
|||
this.top = e.clientY |
|||
this.visible = true |
|||
this.selectedTag = tag |
|||
}, |
|||
closeMenu() { |
|||
this.visible = false |
|||
}, |
|||
handleScroll() { |
|||
this.closeMenu() |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.tags-view-container { |
|||
height: 34px; |
|||
width: 100%; |
|||
background: #fff; |
|||
border-bottom: 1px solid #d8dce5; |
|||
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .12), 0 0 3px 0 rgba(0, 0, 0, .04); |
|||
.tags-view-wrapper { |
|||
.tags-view-item { |
|||
display: inline-block; |
|||
position: relative; |
|||
cursor: pointer; |
|||
height: 26px; |
|||
line-height: 26px; |
|||
border: 1px solid #d8dce5; |
|||
color: #495060; |
|||
background: #fff; |
|||
padding: 0 8px; |
|||
font-size: 12px; |
|||
margin-left: 5px; |
|||
margin-top: 4px; |
|||
&:first-of-type { |
|||
margin-left: 15px; |
|||
} |
|||
&:last-of-type { |
|||
margin-right: 15px; |
|||
} |
|||
&.active { |
|||
background-color: #42b983; |
|||
color: #fff; |
|||
border-color: #42b983; |
|||
&::before { |
|||
content: ''; |
|||
background: #fff; |
|||
display: inline-block; |
|||
width: 8px; |
|||
height: 8px; |
|||
border-radius: 50%; |
|||
position: relative; |
|||
margin-right: 2px; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
.contextmenu { |
|||
margin: 0; |
|||
background: #fff; |
|||
z-index: 3000; |
|||
position: absolute; |
|||
list-style-type: none; |
|||
padding: 5px 0; |
|||
border-radius: 4px; |
|||
font-size: 12px; |
|||
font-weight: 400; |
|||
color: #333; |
|||
box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, .3); |
|||
li { |
|||
margin: 0; |
|||
padding: 7px 16px; |
|||
cursor: pointer; |
|||
&:hover { |
|||
background: #eee; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</style> |
|||
|
|||
<style lang="scss"> |
|||
//reset element css of el-icon-close |
|||
.tags-view-wrapper { |
|||
.tags-view-item { |
|||
.el-icon-close { |
|||
width: 16px; |
|||
height: 16px; |
|||
vertical-align: 2px; |
|||
border-radius: 50%; |
|||
text-align: center; |
|||
transition: all .3s cubic-bezier(.645, .045, .355, 1); |
|||
transform-origin: 100% 50%; |
|||
&:before { |
|||
transform: scale(.6); |
|||
display: inline-block; |
|||
vertical-align: -3px; |
|||
} |
|||
&:hover { |
|||
background-color: #b4bccc; |
|||
color: #fff; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</style> |
|||
@ -0,0 +1,326 @@ |
|||
<template> |
|||
<div class="router-history"> |
|||
<el-tabs |
|||
v-model="activeValue" |
|||
:closable="!(historys.length===1&&$route.name===defaultRouter)" |
|||
type="card" |
|||
@contextmenu.prevent="openContextMenu($event)" |
|||
@tab-click="changeTab" |
|||
@tab-remove="removeTab" |
|||
> |
|||
<el-tab-pane |
|||
v-for="item in historys" |
|||
:key="name(item)" |
|||
:label="item.meta.title" |
|||
:name="name(item)" |
|||
:tab="item" |
|||
class="gva-tab" |
|||
> |
|||
<!-- <template #label> |
|||
<span :style="{color: activeValue===name(item)?activeColor:'#333'}"><i class="dot" :style="{ backgroundColor:activeValue===name(item)?activeColor:'#ddd'}" /> {{ item.meta.title }}</span> |
|||
</template> --> |
|||
</el-tab-pane> |
|||
</el-tabs> |
|||
|
|||
<!--自定义右键菜单html代码--> |
|||
<ul v-show="contextMenuVisible" :style="{left:left+'px',top:top+'px'}" class="contextmenu"> |
|||
<li @click="closeAll">关闭所有</li> |
|||
<li @click="closeLeft">关闭左侧</li> |
|||
<li @click="closeRight">关闭右侧</li> |
|||
<li @click="closeOther">关闭其他</li> |
|||
</ul> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapGetters } from 'vuex' |
|||
import { emitter } from '@/utils/bus.js' |
|||
|
|||
const getFmtString = (item) => { |
|||
return item.name + |
|||
JSON.stringify(item.query) + |
|||
JSON.stringify(item.params) |
|||
} |
|||
export default { |
|||
name: 'HistoryComponent', |
|||
data() { |
|||
return { |
|||
historys: [], |
|||
activeValue: '', |
|||
contextMenuVisible: false, |
|||
left: 0, |
|||
top: 0, |
|||
isCollapse: false, |
|||
isMobile: false, |
|||
rightActive: '' |
|||
} |
|||
}, |
|||
computed: { |
|||
...mapGetters('user', ['userInfo', 'activeColor']), |
|||
// defaultRouter() { |
|||
// return this.userInfo.authority.defaultRouter |
|||
// } |
|||
}, |
|||
watch: { |
|||
contextMenuVisible() { |
|||
if (this.contextMenuVisible) { |
|||
document.body.addEventListener('click', () => { |
|||
this.contextMenuVisible = false |
|||
}) |
|||
} else { |
|||
document.body.removeEventListener('click', () => { |
|||
this.contextMenuVisible = false |
|||
}) |
|||
} |
|||
}, |
|||
$route(to, now) { |
|||
if (to.name === 'Login') { |
|||
return |
|||
} |
|||
this.historys = this.historys.filter(item => !item.meta.closeTab) |
|||
this.setTab(to) |
|||
sessionStorage.setItem('historys', JSON.stringify(this.historys)) |
|||
this.activeValue = window.sessionStorage.getItem('activeValue') |
|||
if (now && to && now.name === to.name) { |
|||
emitter.emit('reload') |
|||
} |
|||
} |
|||
}, |
|||
created() { |
|||
// 全局监听 关闭当前页面函数 |
|||
emitter.on('closeThisPage', () => { |
|||
this.removeTab(this.name(this.$route)) |
|||
}) |
|||
// 全局监听 关闭所有页面函数 |
|||
emitter.on('closeAllPage', () => { |
|||
this.closeAll() |
|||
}) |
|||
emitter.on('mobile', isMobile => { |
|||
this.isMobile = isMobile |
|||
}) |
|||
emitter.on('collapse', isCollapse => { |
|||
this.isCollapse = isCollapse |
|||
}) |
|||
const initHistorys = [ |
|||
{ |
|||
name: this.defaultRouter, |
|||
meta: { |
|||
title: '首页' |
|||
}, |
|||
query: {}, |
|||
params: {} |
|||
} |
|||
] |
|||
this.historys = |
|||
JSON.parse(sessionStorage.getItem('historys')) || initHistorys |
|||
if (!window.sessionStorage.getItem('activeValue')) { |
|||
this.activeValue = getFmtString(this.$route) |
|||
} else { |
|||
this.activeValue = window.sessionStorage.getItem('activeValue') |
|||
} |
|||
this.setTab(this.$route) |
|||
}, |
|||
beforeUnmount() { |
|||
emitter.off('collapse') |
|||
emitter.off('mobile') |
|||
}, |
|||
methods: { |
|||
name(item) { |
|||
return item.name + JSON.stringify(item.query) + JSON.stringify(item.params) |
|||
}, |
|||
openContextMenu(e) { |
|||
if (this.historys.length === 1 && this.$route.name === this.defaultRouter) { |
|||
return false |
|||
} |
|||
let id = '' |
|||
if (e.srcElement.nodeName === 'SPAN') { |
|||
id = e.srcElement.offsetParent.id |
|||
} else { |
|||
id = e.srcElement.id |
|||
} |
|||
if (id) { |
|||
this.contextMenuVisible = true |
|||
let width |
|||
if (this.isCollapse) { |
|||
width = 54 |
|||
} else { |
|||
width = 220 |
|||
} |
|||
if (this.isMobile) { |
|||
width = 0 |
|||
} |
|||
this.left = e.clientX - width |
|||
this.top = e.clientY + 10 |
|||
this.rightActive = id.split('-')[1] |
|||
} |
|||
}, |
|||
closeAll() { |
|||
this.historys = [ |
|||
{ |
|||
name: this.defaultRouter, |
|||
meta: { |
|||
title: '首页' |
|||
}, |
|||
query: {}, |
|||
params: {} |
|||
} |
|||
] |
|||
this.$router.push({ name: this.defaultRouter }) |
|||
this.contextMenuVisible = false |
|||
sessionStorage.setItem('historys', JSON.stringify(this.historys)) |
|||
}, |
|||
closeLeft() { |
|||
let right |
|||
const rightIndex = this.historys.findIndex(item => { |
|||
if (getFmtString(item) === this.rightActive) { |
|||
right = item |
|||
} |
|||
return ( |
|||
getFmtString(item) === this.rightActive |
|||
) |
|||
}) |
|||
const activeIndex = this.historys.findIndex( |
|||
item => getFmtString(item) === this.activeValue |
|||
) |
|||
this.historys.splice(0, rightIndex) |
|||
if (rightIndex > activeIndex) { |
|||
this.$router.push(right) |
|||
} |
|||
sessionStorage.setItem('historys', JSON.stringify(this.historys)) |
|||
}, |
|||
closeRight() { |
|||
let right |
|||
const leftIndex = this.historys.findIndex(item => { |
|||
if (getFmtString(item) === this.rightActive) { |
|||
right = item |
|||
} |
|||
return (getFmtString(item) === this.rightActive) |
|||
}) |
|||
const activeIndex = this.historys.findIndex( |
|||
item => getFmtString(item) === this.activeValue |
|||
) |
|||
this.historys.splice(leftIndex + 1, this.historys.length) |
|||
if (leftIndex < activeIndex) { |
|||
this.$router.push(right) |
|||
} |
|||
sessionStorage.setItem('historys', JSON.stringify(this.historys)) |
|||
}, |
|||
closeOther() { |
|||
let right |
|||
this.historys = this.historys.filter(item => { |
|||
if (getFmtString(item) === this.rightActive |
|||
) { |
|||
right = item |
|||
} |
|||
return (getFmtString(item) === this.rightActive |
|||
) |
|||
}) |
|||
this.$router.push(right) |
|||
sessionStorage.setItem('historys', JSON.stringify(this.historys)) |
|||
}, |
|||
isSame(route1, route2) { |
|||
if (route1.name !== route2.name) { |
|||
return false |
|||
} |
|||
for (const key in route1.query) { |
|||
if (route1.query[key] !== route2.query[key]) { |
|||
return false |
|||
} |
|||
} |
|||
for (const key in route1.params) { |
|||
if (route1.params[key] !== route2.params[key]) { |
|||
return false |
|||
} |
|||
} |
|||
return true |
|||
}, |
|||
setTab(route) { |
|||
if (!this.historys.some(item => this.isSame(item, route))) { |
|||
const obj = {} |
|||
obj.name = route.name |
|||
obj.meta = route.meta |
|||
obj.query = route.query |
|||
obj.params = route.params |
|||
this.historys.push(obj) |
|||
} |
|||
window.sessionStorage.setItem( |
|||
'activeValue', |
|||
getFmtString(this.$route) |
|||
) |
|||
}, |
|||
changeTab(component) { |
|||
const tab = component.instance.attrs.tab |
|||
this.$router.push({ |
|||
name: tab.name, |
|||
query: tab.query, |
|||
params: tab.params |
|||
}) |
|||
}, |
|||
removeTab(tab) { |
|||
const index = this.historys.findIndex( |
|||
item => getFmtString(item) === tab |
|||
) |
|||
if ( |
|||
getFmtString(this.$route) === tab |
|||
) { |
|||
if (this.historys.length === 1) { |
|||
this.$router.push({ name: this.defaultRouter }) |
|||
} else { |
|||
if (index < this.historys.length - 1) { |
|||
this.$router.push({ |
|||
name: this.historys[index + 1].name, |
|||
query: this.historys[index + 1].query, |
|||
params: this.historys[index + 1].params |
|||
}) |
|||
} else { |
|||
this.$router.push({ |
|||
name: this.historys[index - 1].name, |
|||
query: this.historys[index - 1].query, |
|||
params: this.historys[index - 1].params |
|||
}) |
|||
} |
|||
} |
|||
} |
|||
this.historys.splice(index, 1) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss"> |
|||
.contextmenu { |
|||
width: 100px; |
|||
margin: 0; |
|||
border: 1px solid #ccc; |
|||
background: #fff; |
|||
z-index: 3000; |
|||
position: absolute; |
|||
list-style-type: none; |
|||
padding: 5px 0; |
|||
border-radius: 4px; |
|||
font-size: 14px; |
|||
color: #333; |
|||
box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, 0.2); |
|||
} |
|||
.el-tabs__item .el-icon-close{ |
|||
color: initial !important; |
|||
} |
|||
.el-tabs__item .dot { |
|||
content: ""; |
|||
width: 9px; |
|||
height: 9px; |
|||
margin-right: 8px; |
|||
display: inline-block; |
|||
border-radius: 50%; |
|||
transition: background-color .2s; |
|||
} |
|||
|
|||
.contextmenu li { |
|||
margin: 0; |
|||
padding: 7px 16px; |
|||
} |
|||
.contextmenu li:hover { |
|||
background: #f2f2f2; |
|||
cursor: pointer; |
|||
} |
|||
</style> |
|||
@ -0,0 +1,6 @@ |
|||
|
|||
// using ES6 modules
|
|||
import mitt from 'mitt' |
|||
|
|||
export const emitter = mitt() |
|||
|
|||
@ -0,0 +1,12 @@ |
|||
// translate router.meta.title, be used in breadcrumb sidebar tagsview
|
|||
export function generateTitle(title) { |
|||
const hasKey = this.$te('route.' + title) |
|||
|
|||
if (hasKey) { |
|||
// $t :this method from vue-i18n, inject in @/lang/index.js
|
|||
const translatedTitle = this.$t('route.' + title) |
|||
|
|||
return translatedTitle |
|||
} |
|||
return title |
|||
} |
|||
@ -0,0 +1,89 @@ |
|||
import axios from 'axios' |
|||
import { MessageBox, Message } from 'element-ui' |
|||
import store from '@/store' |
|||
import { getToken,getKey } from '@/utils/auth' |
|||
|
|||
// create an axios instance
|
|||
const service = axios.create({ |
|||
baseURL: process.env.VUE_APP_BASE_API1, // url = base url + request url
|
|||
// withCredentials: true, // send cookies when cross-domain requests
|
|||
timeout: 180000 // request timeout
|
|||
}) |
|||
|
|||
// request interceptor
|
|||
service.interceptors.request.use( |
|||
config => { |
|||
// do something before request is sent
|
|||
|
|||
if (store.getters.token) { |
|||
// let each request carry token
|
|||
// ['X-Token'] is a custom headers key
|
|||
// please modify it according to the actual situation
|
|||
config.headers['user-token'] = getToken() |
|||
config.headers['user-key'] = getKey() |
|||
} |
|||
return config |
|||
}, |
|||
error => { |
|||
// do something with request error
|
|||
console.log(error) // for debug
|
|||
return Promise.reject(error) |
|||
} |
|||
) |
|||
|
|||
// response interceptor
|
|||
service.interceptors.response.use( |
|||
/** |
|||
* If you want to get http information such as headers or status |
|||
* Please return response => response |
|||
*/ |
|||
|
|||
/** |
|||
* Determine the request status by custom code |
|||
* Here is just an example |
|||
* You can also judge the status by HTTP Status Code |
|||
*/ |
|||
response => { |
|||
const res = response.data |
|||
|
|||
// if the custom code is not 20000, it is judged as an error.
|
|||
if (res.code !== 0) { |
|||
if(res.code === 7){ |
|||
store.commit('user/loginOut') |
|||
} |
|||
Message({ |
|||
message: res.msg || 'Error', |
|||
type: 'error', |
|||
duration: 5 * 1000 |
|||
}) |
|||
|
|||
// 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
|
|||
if (res.code === 50008 || res.code === 50012 || res.code === 50014) { |
|||
// to re-login
|
|||
MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', { |
|||
confirmButtonText: 'Re-Login', |
|||
cancelButtonText: 'Cancel', |
|||
type: 'warning' |
|||
}).then(() => { |
|||
store.dispatch('user/resetToken').then(() => { |
|||
location.reload() |
|||
}) |
|||
}) |
|||
} |
|||
return Promise.reject(new Error(res.msg || 'Error')) |
|||
} else { |
|||
return res |
|||
} |
|||
}, |
|||
error => { |
|||
console.log('err' + error) // for debug
|
|||
Message({ |
|||
message: error.msg, |
|||
type: 'error', |
|||
duration: 5 * 1000 |
|||
}) |
|||
return Promise.reject(error) |
|||
} |
|||
) |
|||
|
|||
export default service |
|||
@ -0,0 +1,743 @@ |
|||
<template> |
|||
<!-- 审批流程列表 --> |
|||
<div class="dashboard-container"> |
|||
<div class="gva-search-box"> |
|||
<el-form ref="searchForm" :inline="true" :model="searchInfo"> |
|||
<el-form-item label="流程状态"> |
|||
<el-select v-model="searchInfo.state" clearable placeholder="请选择状态"> |
|||
<el-option :value=1 label="审批中">审批中</el-option> |
|||
<el-option :value=2 label="通过">通过</el-option> |
|||
<el-option :value=3 label="驳回">驳回</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="审批状态"> |
|||
<el-select v-model="searchInfo.isset" clearable placeholder="请选择状态"> |
|||
<el-option :value=1 label="已处理">已处理</el-option> |
|||
<el-option :value=2 label="未处理">未处理</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button size="mini" type="primary" icon="el-icon-search" @click="onSubmit">查询</el-button> |
|||
<el-button size="mini" icon="el-icon-refresh" @click="onReset">重置</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</div> |
|||
<div class="gva-table-box"> |
|||
<!-- <div class="gva-btn-list"> |
|||
<el-button size="mini" type="primary" icon="el-icon-plus" @click="showAdd()">新增</el-button> |
|||
</div> --> |
|||
<el-table :data="tableData"> |
|||
<el-table-column align="left" label="审批编号" prop="outid"/> |
|||
<el-table-column align="left" label="审批名称" prop="tittle"/> |
|||
<el-table-column align="left" label="指标性质" prop="class"> |
|||
<template #default="scope"> |
|||
<div v-if="scope.row.class==1"> |
|||
定性考核 |
|||
</div> |
|||
<div v-if="scope.row.class==2"> |
|||
定量考核 |
|||
</div> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column align="left" label="当前节点" prop="node"/> |
|||
<el-table-column align="left" label="当前负责人" prop="currentpeo"/> |
|||
<el-table-column align="left" label="创建人" prop="founder"/> |
|||
<el-table-column align="left" label="审批状态" prop="condition"/> |
|||
<el-table-column align="left" label="审批结果" prop="result"/> |
|||
<el-table-column align="left" fixed="right" label="操作" width="200"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
icon="el-icon-view" |
|||
size="small" |
|||
type="text" |
|||
@click="showCe(scope.row)" |
|||
>查看详情</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<div class="gva-pagination"> |
|||
<el-pagination |
|||
@size-change="handleSizeChange" |
|||
@current-change="handleCurrentChange" |
|||
:page-sizes="[10, 30, 50, 100]" |
|||
:page-size="searchInfo.pagesize" |
|||
layout="total, sizes, prev, pager, next, jumper" |
|||
:total="total"> |
|||
</el-pagination> |
|||
</div> |
|||
</div> |
|||
<!-- 定性侧边框 --> |
|||
<el-drawer |
|||
title="详情" |
|||
:visible.sync="drawer" |
|||
direction="rtl" |
|||
> |
|||
<el-card class="box-card1" style="margin-bottom: 10px;" :body-style="{ padding: '10px' }"> |
|||
<p class="xiao">审批编号:{{xinglist.orderid}}</p> |
|||
<p class="da"> |
|||
{{xinglist.title}} |
|||
</p> |
|||
</el-card> |
|||
|
|||
<el-card class="box-card" style="margin-bottom: 10px;"> |
|||
<el-descriptions class="margin-top" :column="1"> |
|||
<el-descriptions-item label="考核纬度">{{xinglist.dimension}}</el-descriptions-item> |
|||
<el-descriptions-item label="考核指标">{{xinglist.target}}</el-descriptions-item> |
|||
<el-descriptions-item label="指标子类">{{xinglist.targetsun}}</el-descriptions-item> |
|||
<el-descriptions-item label="指标详情">{{xinglist.detailedtargent}}</el-descriptions-item> |
|||
<el-descriptions-item label="指标描述">{{xinglist.content}}</el-descriptions-item> |
|||
<el-descriptions-item label="操作">{{xinglist.reasoninfo}}</el-descriptions-item> |
|||
<el-descriptions-item label="原因">{{xinglist.reason}}</el-descriptions-item> |
|||
</el-descriptions> |
|||
</el-card> |
|||
<el-card class="box-card" v-for="(item,index) in xinglist.divresbil" :key="index" style="margin-bottom: 10px;"> |
|||
<div slot="header" class="clearfix"> |
|||
<span>责任划分</span> |
|||
</div> |
|||
<el-descriptions class="margin-top" :column="1"> |
|||
<el-descriptions-item label="责任类型">{{item.type}}</el-descriptions-item> |
|||
<el-descriptions-item label="姓名">{{item.username}}</el-descriptions-item> |
|||
<el-descriptions-item label="比重">{{item.weight}}</el-descriptions-item> |
|||
</el-descriptions> |
|||
</el-card> |
|||
<el-card class="box-card" v-for="(item,index) in xinglist.rectifmeasures" :key="index" style="margin-bottom: 10px;"> |
|||
<div slot="header" class="clearfix"> |
|||
<span>整改措施</span> |
|||
</div> |
|||
<el-descriptions class="margin-top" :column="1"> |
|||
<el-descriptions-item label="姓名">{{item.recname}}</el-descriptions-item> |
|||
<el-descriptions-item label="内容">{{item.reccont}}</el-descriptions-item> |
|||
<el-descriptions-item label="时间">{{item.timeval}}</el-descriptions-item> |
|||
</el-descriptions> |
|||
</el-card> |
|||
<el-card class="box-card" style="margin-bottom: 10px;" v-if="xinglist.enclosure!=null"> |
|||
<div slot="header" class="clearfix"> |
|||
<span>附件</span> |
|||
</div> |
|||
|
|||
<el-carousel v-if="imgList!=null" type="card" height="100px" :autoplay="false"> |
|||
<el-carousel-item v-for="(img,index) in imgList" :key="index"> |
|||
<el-image |
|||
style="width: 100px; height: 100px;" |
|||
:src="img" |
|||
:preview-src-list="imgList"> |
|||
</el-image> |
|||
</el-carousel-item> |
|||
</el-carousel> |
|||
<!-- <div style=""> |
|||
|
|||
<el-image |
|||
v-for="(img,index) in imgList" :key="index" |
|||
style="width: 100px; height: 100px;margin-right: 5px;" |
|||
:src="img" |
|||
:preview-src-list="imgList"> |
|||
</el-image> |
|||
</div> --> |
|||
|
|||
<el-row v-for="(itema,index) in xinglist.enclosure" :key="index"> |
|||
<el-col :span="24" v-if="itema.type!=1" style="margin-top: 10px;"> |
|||
<i class="el-icon-document"></i> |
|||
<a :href="itema.filepath" :download="itema.filename">{{itema.filename}}</a> |
|||
</el-col> |
|||
</el-row> |
|||
|
|||
|
|||
</el-card> |
|||
<el-card class="box-card" style="margin-bottom: 130px;"> |
|||
|
|||
<el-steps direction="vertical" :active="xingbuzhou"> |
|||
<el-step v-for="(item,index) in xinglist.flowmapall" :key="index" :title="item.nodename" icon="el-icon-circle-check" > |
|||
<template slot="description"> |
|||
<div style="color: rgb(153,153,153);" v-for="(a,userlistIndex) in item.userlist" :key="userlistIndex"> |
|||
<el-row style="margin-bottom: 10px;"> |
|||
<el-col :span="4" v-if="a.log!=null"> |
|||
<el-badge is-dot type="primary "> |
|||
<el-avatar style="margin-right: 5px;" shape="square" size="small" :src="a.icon"></el-avatar> |
|||
</el-badge> |
|||
</el-col> |
|||
<el-col :span="4" v-else> |
|||
<el-avatar style="margin-right: 5px;" shape="square" size="small" :src="a.icon"></el-avatar> |
|||
</el-col> |
|||
<el-col :span="20" style="margin-top: -5px;"> |
|||
{{a.workshopname}}-{{a.postname}}-{{a.name}} |
|||
<el-row> |
|||
<div v-for="(i,logIndex) in a.log" :key="logIndex" style="margin-top: -5px;"> |
|||
<div class="left" v-if="i.state==2">已同意 · </div> |
|||
<div class="left" v-if="i.state==1" type="info">未操作 · </div> |
|||
<div class="left" v-if="i.state==3" type="danger">驳回 · </div> |
|||
<div class="left">{{i.time}}</div> |
|||
</div> |
|||
</el-row> |
|||
</el-col> |
|||
</el-row> |
|||
|
|||
<!-- {{userlist.log}} --> |
|||
|
|||
<!-- <div class="left"> |
|||
<el-avatar style="margin-right: 5px;" shape="square" size="small" :src="a.icon"></el-avatar> |
|||
</div> |
|||
|
|||
|
|||
<div class="left">{{a.workshopname}}-{{a.postname}}-{{a.name}} </div> |
|||
|
|||
|
|||
<div class="left" v-for="(i,logIndex) in a.log"> |
|||
<el-tag v-if="i.state==2">通过</el-tag> |
|||
<el-tag v-if="i.state==1" type="info">未操作</el-tag> |
|||
<el-tag v-if="i.state==3" type="danger">驳回</el-tag> |
|||
<div>{{i.time}}</div> |
|||
</div> --> |
|||
|
|||
|
|||
|
|||
<!-- <template v-if="a.log!=null"> |
|||
<div v-for="(i,logIndex) in a.log"> |
|||
<el-tag v-if="i.state==2">通过</el-tag> |
|||
<el-tag v-if="i.state==1" type="info">未操作</el-tag> |
|||
<el-tag v-if="i.state==3" type="danger">驳回</el-tag> |
|||
<div>{{i.time}}</div> |
|||
</div> |
|||
</template> --> |
|||
|
|||
<!-- <el-tag v-if="a.log!=null||a.log.state==1" type="info">未操作</el-tag> |
|||
<el-tag v-if="a.log!=null||a.log.state==3" type="danger">驳回</el-tag> --> |
|||
<!-- <div>{{}}</div> --> |
|||
</div> |
|||
</template> |
|||
</el-step> |
|||
</el-steps> |
|||
</el-card> |
|||
|
|||
<el-card style="position: fixed;bottom: 0;width: 560px;z-index: 1000;" class="box-card" v-if="xinglist.isset==1"> |
|||
<el-input |
|||
style="margin-bottom:10px" |
|||
type="textarea" |
|||
autosize |
|||
placeholder="请输入审批意见" |
|||
v-model="opinionText"> |
|||
</el-input> |
|||
<el-button type="primary" @click="xingOperation(1)" plain>同意</el-button> |
|||
<el-button type="danger" @click="xingOperation(2)" plain>驳回</el-button> |
|||
</el-card> |
|||
</el-drawer> |
|||
<!-- 定量侧边框 --> |
|||
<el-drawer |
|||
title="详情" |
|||
:visible.sync="dingliangdrawer" |
|||
direction="rtl" |
|||
> |
|||
|
|||
<el-card :body-style="{ padding: '10px' }" class="box-card" style="margin-bottom: 10px;"> |
|||
<p class="xiao">审批编号:{{liangOutid}}</p> |
|||
<p class="da"> |
|||
{{lianglist.title}} |
|||
</p> |
|||
</el-card> |
|||
<el-card class="box-card" v-for="(item,index) in lianglist.List" :key="index" style="margin-bottom: 10px;"> |
|||
<el-descriptions class="margin-top" :column="1"> |
|||
<el-descriptions-item label="名称">{{item.title}}</el-descriptions-item> |
|||
<el-descriptions-item label="零奖值">{{item.zeroprize}}</el-descriptions-item> |
|||
<el-descriptions-item label="全奖值">{{item.allprize}}</el-descriptions-item> |
|||
<el-descriptions-item label="封顶值">{{item.CappingVal}}%</el-descriptions-item> |
|||
<el-descriptions-item label="实际值">{{item.Score}}</el-descriptions-item> |
|||
<el-descriptions-item label="权重分">{{item.weight}}</el-descriptions-item> |
|||
<el-descriptions-item label="达成率">{{item.achievement}}%</el-descriptions-item> |
|||
<el-descriptions-item label="指标得分">{{item.actual}}</el-descriptions-item> |
|||
<el-descriptions-item label="说明">{{item.content}}</el-descriptions-item> |
|||
</el-descriptions> |
|||
</el-card> |
|||
|
|||
|
|||
<el-card class="box-card" style="margin-bottom: 130px;"> |
|||
<el-steps direction="vertical" :active="liangbuzhou"> |
|||
<el-step v-for="(item,index) in lianglist.flowall" :key="index" :title="item.nodename" icon="el-icon-circle-check" > |
|||
<template slot="description"> |
|||
<div style="color: rgb(153,153,153);" v-for="(a,userlistIndex) in item.userlist" :key="userlistIndex"> |
|||
<el-row> |
|||
<el-col :span="4" v-if="a.log!=null"> |
|||
<el-badge is-dot type="primary "> |
|||
<el-avatar style="margin-right: 5px;" shape="square" size="small" :src="a.icon"></el-avatar> |
|||
</el-badge> |
|||
</el-col> |
|||
<el-col :span="4" v-else> |
|||
<el-avatar style="margin-right: 5px;" shape="square" size="small" :src="a.icon"></el-avatar> |
|||
</el-col> |
|||
<el-col :span="20" style="margin-top: -5px;"> |
|||
{{a.workshopname}}-{{a.postname}}-{{a.name}} |
|||
<el-row> |
|||
<div v-for="(i,logIndex) in a.log" :key="logIndex"> |
|||
<div class="left" v-if="i.state==2">已同意 · </div> |
|||
<div class="left" v-if="i.state==1" type="info">未操作 · </div> |
|||
<div class="left" v-if="i.state==3" type="danger">驳回 · </div> |
|||
<div class="left">{{i.time}}</div> |
|||
</div> |
|||
</el-row> |
|||
</el-col> |
|||
</el-row> |
|||
</div> |
|||
</template> |
|||
</el-step> |
|||
</el-steps> |
|||
<!-- <el-steps direction="vertical" :active="buzhou"> |
|||
<el-step v-for="(item,index) in list.flowall" :key="index" :title="item.nodename" icon="el-icon-circle-check" > |
|||
<template slot="description"> |
|||
<p style="color: rgb(153,153,153);" v-for="(a,index) in item.userlist" > |
|||
<el-avatar style="margin-right: 5px;" shape="square" size="small" :src="a.icon"></el-avatar> |
|||
{{a.workshopname}}-{{a.postname}}-{{a.name}} |
|||
<template v-if="a.log!=null"> |
|||
<el-tag v-if="a.log.state==2">通过</el-tag> |
|||
<el-tag v-if="a.log.state==1" type="info">未操作</el-tag> |
|||
<el-tag v-if="a.log.state==3" type="danger">驳回</el-tag> |
|||
<div>{{a.log.time}}</div> |
|||
</template> |
|||
</p> |
|||
</template> |
|||
</el-step> |
|||
</el-steps> --> |
|||
</el-card> |
|||
|
|||
<el-card class="box-card" style="position: fixed;bottom: 0;width: 560px;z-index: 1000;" v-if="lianglist.isset==1"> |
|||
<el-input |
|||
style="margin-bottom:10px;" |
|||
type="textarea" |
|||
autosize |
|||
placeholder="请输入备注" |
|||
v-model="opinionText1"> |
|||
</el-input> |
|||
<el-button type="primary" @click="liangOperation(1)" plain>同意</el-button> |
|||
<el-button type="danger" @click="liangOperation(2)" plain>驳回</el-button> |
|||
|
|||
</el-card> |
|||
|
|||
|
|||
|
|||
</el-drawer> |
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { seeflowlog,lookrationkscoreflow,lookdutkscoreflow,operation,sanction } from '@/api/api/dutys' |
|||
export default { |
|||
name: 'Dashboard', |
|||
data() { |
|||
return { |
|||
opinionText1:'', |
|||
opinionText:'', |
|||
liangOutid:'', |
|||
lianglist:[], |
|||
xinglist:[], |
|||
xingbuzhou:0, |
|||
liangbuzhou:0, |
|||
// 侧边栏控制 |
|||
drawer: false, |
|||
dingliangdrawer:false, |
|||
// 查询详情的数据 |
|||
editFrom:{}, |
|||
// 修改状态提交数据 |
|||
switchFrom:{}, |
|||
// 删除数据提交 |
|||
deleFrom:{}, |
|||
// 编辑时数据 |
|||
editAdd:{}, |
|||
assessList:{}, |
|||
// 添加数据 |
|||
form:{ |
|||
type:1, |
|||
}, |
|||
// 弹窗变量 |
|||
dialogFormVisible:false, |
|||
dingxingId:'', |
|||
// 修改弹窗 |
|||
editDialogFormVisible:false, |
|||
total: 0, |
|||
// 步骤显示 |
|||
buzhou:0, |
|||
tableData:[ |
|||
|
|||
], |
|||
imgList:[], |
|||
// 条件查询变量 |
|||
searchInfo: { |
|||
page: 1, |
|||
pagesize: 10 |
|||
}, |
|||
// 条件查询变量 |
|||
abc:{ |
|||
aaa:"111", |
|||
bbb:"222" |
|||
}, |
|||
// 添加时验证规则 |
|||
rules: { |
|||
title: [{ required: true, message: '请输入名称', trigger: 'blur' }], |
|||
}, |
|||
editRules:{ |
|||
title: [{ required: true, message: '请输入名称', trigger: 'blur' }], |
|||
} |
|||
} |
|||
}, |
|||
created() { |
|||
// if ((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))) { |
|||
// setToken(this.$route.query.token) |
|||
// setKey(this.$route.query.key) |
|||
// if (getToken()=='') { |
|||
// window.location.href = 'https://www.hxgk.group/jumpapiurl/?url=http://new.hxgk.group&controll=approvalList&id='+this.$route.query.id; |
|||
// }else if (typeof this.$route.query.token === 'undefined') { |
|||
// window.location.href = 'https://www.hxgk.group/jumpapiurl/?url=http://new.hxgk.group&controll=approvalList&id='+this.$route.query.id; |
|||
// }else{ |
|||
// this.getDataList() |
|||
// } |
|||
// }else{ |
|||
|
|||
// } |
|||
this.getDataList() |
|||
// if (sessionStorage.getItem('userinfo')==null) { |
|||
// this.$router.push('/dingxingLogin?id='+this.$route.query.id) |
|||
// }else if (sessionStorage.getItem('userinfo')==undefined) { |
|||
// this.$router.push('/dingxingLogin?id='+this.$route.query.id) |
|||
// }else if (sessionStorage.getItem('userinfo')=='') { |
|||
// this.$router.push('/dingxingLogin?id='+this.$route.query.id) |
|||
// }else if (this.$store.state.user.token=='') { |
|||
// this.$router.push('/dingxingLogin?id='+this.$route.query.id) |
|||
// }else if (this.$store.state.user.token==null) { |
|||
// this.$router.push('/dingxingLogin?id='+this.$route.query.id) |
|||
// }else if (this.$store.state.user.token===undefined) { |
|||
// this.$router.push('/dingxingLogin?id='+this.$route.query.id) |
|||
// }else if (typeof this.$store.state.user.token=="undefined") { |
|||
// this.$router.push('/dingxingLogin?id='+this.$route.query.id) |
|||
// }else{ |
|||
|
|||
// } |
|||
// 页面渲染时获取初始数据 |
|||
// this.getDataList() |
|||
}, |
|||
methods: { |
|||
// 定量审核同意 |
|||
async liangOperation(val){ |
|||
// 同意 |
|||
if (val==1) { |
|||
const from = { |
|||
orderid: this.liangOutid, //审批单ID |
|||
yesorno: 1, //1:同意;2:驳回 |
|||
content: this.opinionText1 //审批意见 |
|||
} |
|||
const res = await sanction(from) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '成功!' |
|||
}) |
|||
|
|||
this.getDataList() |
|||
} |
|||
this.opinionText1='' |
|||
this.dingliangdrawer=false |
|||
} |
|||
// 驳回 |
|||
if (val==2) { |
|||
const from = { |
|||
orderid: this.liangOutid, //审批单ID |
|||
yesorno: 2, //1:同意;2:驳回 |
|||
content: this.opinionText1 //审批意见 |
|||
} |
|||
const res = await sanction(from) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '成功!' |
|||
}) |
|||
|
|||
this.getDataList() |
|||
} |
|||
this.dingliangdrawer=false |
|||
this.opinionText1='' |
|||
} |
|||
}, |
|||
// 定性审核同意 |
|||
async xingOperation(val){ |
|||
// 同意 |
|||
if (val==1) { |
|||
const from = { |
|||
orderid: this.dingxingId, //审批单ID |
|||
yesorno: 1, //1:同意;2:驳回 |
|||
content: this.opinionText //审批意见 |
|||
} |
|||
const res = await operation(from) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '成功!' |
|||
}) |
|||
|
|||
this.getDataList() |
|||
} |
|||
this.opinionText='' |
|||
this.drawer=false |
|||
} |
|||
// 驳回 |
|||
if (val==2) { |
|||
const from = { |
|||
orderid: this.dingxingId, //审批单ID |
|||
yesorno: 2, //1:同意;2:驳回 |
|||
content: this.opinionText //审批意见 |
|||
} |
|||
const res = await operation(from) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '成功!' |
|||
}) |
|||
|
|||
this.getDataList() |
|||
} |
|||
this.drawer=false |
|||
this.opinionText='' |
|||
} |
|||
}, |
|||
// 点击侧边栏操作 |
|||
showCe(row){ |
|||
if (row.class==1) { |
|||
// 定性 |
|||
this.getdingxingData(row.outid) |
|||
this.dingxingId=row.outid |
|||
this.drawer=true |
|||
|
|||
}else if (row.class==2) { |
|||
// 定量 |
|||
this.liangOutid=row.outid |
|||
this.getdingliangData(row.outid) |
|||
this.dingliangdrawer=true |
|||
} |
|||
this.imgList=[] |
|||
}, |
|||
// 获取定性考核详情 |
|||
async getdingxingData(outid){ |
|||
this.xingbuzhou=0 |
|||
const from = { |
|||
outid:outid |
|||
} |
|||
const res = await lookdutkscoreflow(from) |
|||
this.xinglist=res.data |
|||
this.xinglist.flowmapall.forEach(element => { |
|||
if (element.state==2) { |
|||
this.xingbuzhou=this.xingbuzhou+1 |
|||
} |
|||
}); |
|||
this.xinglist.enclosure.forEach(element => { |
|||
if (element.type==1) { |
|||
this.imgList.push(element.filepath) |
|||
|
|||
} |
|||
}); |
|||
console.log(this.list) |
|||
}, |
|||
// 获取定量考核详情 |
|||
async getdingliangData(outId){ |
|||
this.liangbuzhou=0 |
|||
|
|||
const from = { |
|||
outid:outId |
|||
} |
|||
const res = await lookrationkscoreflow(from) |
|||
this.lianglist=res.data |
|||
this.lianglist.flowall.forEach(element => { |
|||
if (element.state==2) { |
|||
this.liangbuzhou=this.liangbuzhou+1 |
|||
} |
|||
}); |
|||
|
|||
}, |
|||
// 删除操作 |
|||
//删除操作 |
|||
async deleteOperate(row) { |
|||
this.$confirm('此操作将永久删除, 是否继续?', '提示', { |
|||
confirmButtonText: '确定', |
|||
cancelButtonText: '取消', |
|||
type: 'warning' |
|||
}) |
|||
.then(async() => { |
|||
this.deleFrom.state=3; |
|||
this.deleFrom.outid=row.outId; |
|||
const res = await statedutyclass(this.deleFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '删除成功!' |
|||
}) |
|||
|
|||
this.getDataList() |
|||
} |
|||
}) |
|||
}, |
|||
// 新增按钮 |
|||
showAdd(){ |
|||
this.dialogFormVisible=true; |
|||
console.log(this.dialogFormVisible) |
|||
}, |
|||
// 编辑按钮 |
|||
async showEdit(row){ |
|||
this.editFrom.outid=row.outId |
|||
const res = await getdutyclassinfo(this.editFrom) |
|||
this.editAdd = res.data |
|||
this.editDialogFormVisible=true; |
|||
|
|||
}, |
|||
// 开关状态监听 |
|||
async changeVal(val,id){ |
|||
console.log(val) |
|||
this.switchFrom.outid=id |
|||
if (val==1) { |
|||
this.switchFrom.state=1; |
|||
const res = await statedutyclass(this.switchFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '修改状态成功', |
|||
showClose: true |
|||
}) |
|||
this.getDataList() |
|||
} |
|||
} else { |
|||
this.switchFrom.state=2; |
|||
const res = await statedutyclass(this.switchFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '修改状态成功', |
|||
showClose: true |
|||
}) |
|||
this.getDataList() |
|||
} |
|||
} |
|||
}, |
|||
// 重置搜索条件 |
|||
onReset() { |
|||
this.searchInfo = {} |
|||
}, |
|||
// 条件搜索 |
|||
onSubmit() { |
|||
this.page = 1 |
|||
this.pageSize = 10 |
|||
this.getDataList() |
|||
}, |
|||
// 日期时间戳转日期格式 |
|||
formatDate(nS) { |
|||
return new Date(parseInt(nS) * 1000).toLocaleString().replace(/:\d{1,2}$/,' '); |
|||
}, |
|||
|
|||
// 提交按钮 |
|||
async enterDialog(){ |
|||
|
|||
this.$refs.addForm.validate(async valid => { |
|||
if (valid) { |
|||
const res = await adddutyclass(this.form) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '添加成功', |
|||
showClose: true |
|||
}) |
|||
} |
|||
this.getDataList(); |
|||
this.closeDialog(); |
|||
} |
|||
}) |
|||
}, |
|||
|
|||
// 编辑提交按钮 |
|||
async editEnterDialog(){ |
|||
this.$refs.editForm.validate(async valid => { |
|||
if (valid) { |
|||
const res = await eitedutyclassinfo(this.editAdd) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '编辑成功', |
|||
showClose: true |
|||
}) |
|||
} |
|||
this.getDataList(); |
|||
this.editCloseDialog(); |
|||
} |
|||
}) |
|||
}, |
|||
// 添加框关闭 |
|||
closeDialog() { |
|||
console.log("closeDialog") |
|||
this.initForm() |
|||
this.dialogFormVisible = false |
|||
}, |
|||
// 修改框关闭 |
|||
editCloseDialog() { |
|||
this.editInitForm() |
|||
this.editDialogFormVisible = false |
|||
}, |
|||
// 添加重置表单 |
|||
initForm() { |
|||
console.log("initForm") |
|||
this.$refs.addForm.resetFields() |
|||
this.form = {} |
|||
console.log(this.form) |
|||
}, |
|||
// 修改重置表单 |
|||
editInitForm() { |
|||
this.$refs.editForm.resetFields() |
|||
this.editAdd = {} |
|||
}, |
|||
// 改变pageSize |
|||
handleSizeChange(val) { |
|||
this.searchInfo.pagesize=val |
|||
this.getDataList(this.searchInfo) |
|||
}, |
|||
// 改变page |
|||
handleCurrentChange(val) { |
|||
this.searchInfo.page=val |
|||
this.getDataList(this.searchInfo) |
|||
}, |
|||
// 获取初始数据 |
|||
async getDataList() { |
|||
const res = await seeflowlog(this.searchInfo) |
|||
this.tableData = res.data.list |
|||
this.total = res.data.total |
|||
this.searchInfo.page = res.data.page |
|||
this.searchInfo.pagesize = res.data.pageSize |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
// .index { |
|||
// height: 100%; |
|||
// width: 100%; |
|||
// position: absolute; |
|||
// top: 0; |
|||
// left: 0; |
|||
// } |
|||
.el-container { |
|||
display: flex; |
|||
min-height: 100%; |
|||
justify-content:space-between; |
|||
} |
|||
.el-footer { |
|||
display: flex; |
|||
height: 4vh; |
|||
width: 100%; |
|||
align-items: center; |
|||
} |
|||
.el-drawer__body{ |
|||
padding: 10px !important; |
|||
} |
|||
.dashboard { |
|||
&-container { |
|||
margin: 30px; |
|||
} |
|||
&-text { |
|||
font-size: 30px; |
|||
line-height: 46px; |
|||
} |
|||
} |
|||
.left{ |
|||
float: left; |
|||
} |
|||
</style> |
|||
@ -0,0 +1,679 @@ |
|||
|
|||
<template> |
|||
|
|||
<div class="Echarts" style="padding:10px"> |
|||
<div> |
|||
<div class="gva-search-box"> |
|||
<el-form ref="searchForm" :inline="true" :model="searchInfo"> |
|||
<el-form-item label="考核指标"> |
|||
<el-select filterable multiple @change='clickTarget' v-model="searchInfo.targetid" clearable placeholder="请选择考核指标"> |
|||
<el-option |
|||
v-for="item in tableData" |
|||
:key="item.outid" |
|||
:label="item.title" |
|||
:value="item.outid"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="组织"> |
|||
<el-cascader filterable clearable v-model="searchInfo.org" :options="searchDataGrouplist" :show-all-levels="false" :props="props"></el-cascader> |
|||
<!-- <el-select multiple v-model="searchInfo.targetid" clearable placeholder="请选择组织"> |
|||
<el-option |
|||
v-for="item in grouplist" |
|||
:key="item.outid" |
|||
:label="item.title" |
|||
:value="item.outid"> |
|||
</el-option> |
|||
</el-select> --> |
|||
</el-form-item> |
|||
<el-form-item label="时间"> |
|||
<el-select multiple v-model="searchInfo.year" clearable placeholder="请选择时间"> |
|||
<el-option |
|||
v-for="(item,index) in searchDataTimelist" |
|||
:key="index" |
|||
:label="item" |
|||
:value="item"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="周期"> |
|||
<el-select v-model="timeattribute.class" clearable placeholder="请选择"> |
|||
<el-option label="全年" :value=0></el-option> |
|||
<el-option label="半年" :value=1></el-option> |
|||
<el-option label="季度" :value=2></el-option> |
|||
<el-option label="月度" :value=3></el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="周期详情" v-if="timeattribute.class==1"> |
|||
<el-select multiple v-model="banNianSele" clearable placeholder="请选择"> |
|||
<el-option |
|||
v-for="item in banNian" |
|||
:key="item.id" |
|||
:label="item.title" |
|||
:value="item.id"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="周期详情" v-if="timeattribute.class==2"> |
|||
<el-select multiple v-model="jiDuSele" clearable placeholder="请选择时间"> |
|||
<el-option |
|||
v-for="item in jiDu" |
|||
:key="item.id" |
|||
:label="item.title" |
|||
:value="item.id"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="周期详情" v-if="timeattribute.class==3"> |
|||
<el-select multiple v-model="yueSele" clearable placeholder="请选择时间"> |
|||
<el-option |
|||
v-for="item in yue" |
|||
:key="item.id" |
|||
:label="item.title" |
|||
:value="item.id"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="核算方式"> |
|||
<el-select multiple v-model="searchInfo.AccMethod" clearable placeholder="请选择核算方式"> |
|||
<el-option label="合计值" :value=1></el-option> |
|||
<el-option label="平均值" :value=2></el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="解析维度"> |
|||
<el-select v-model="searchInfo.analysisangle" clearable placeholder="请选择核算方式"> |
|||
<el-option label="行政组织" :value=1></el-option> |
|||
<el-option label="时间" :value=2></el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<!-- <el-form-item label="考核维度状态"> |
|||
<el-select v-model="searchInfo.state" clearable placeholder="请选择状态"> |
|||
<el-option :value=1 label="正常">正常</el-option> |
|||
<el-option :value=2 label="禁止">禁止</el-option> |
|||
</el-select> |
|||
</el-form-item> --> |
|||
<el-form-item> |
|||
<el-button size="mini" type="primary" icon="el-icon-search" @click="onSubmit">查询</el-button> |
|||
|
|||
</el-form-item> |
|||
</el-form> |
|||
</div> |
|||
<div id="main" style="width: 95%;height: 800px;margin:0 auto"></div> |
|||
</div> |
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import {getquantechartorgandyear,getplanversionvalid,quantechart} from '@/api/echarts/echarts' |
|||
import { |
|||
grouplist, |
|||
departmentlist, |
|||
getgroupdepartmap, |
|||
getgroupuser |
|||
} from '@/api/duty/group' |
|||
import { gettarget,addtarget,gettargetinfo,eiteassessinfo,eitetarget,deltarget } from '@/api/duty/project' |
|||
export default { |
|||
name: 'Echarts', |
|||
data(){ |
|||
return{ |
|||
searchDataTimelist:[], |
|||
aaa:'', |
|||
echartOption:{ |
|||
title: { |
|||
text: '' |
|||
}, |
|||
xAxis:{ |
|||
type: 'category', |
|||
data: [] |
|||
}, |
|||
yAxis: { |
|||
type: 'value' |
|||
}, |
|||
tooltip: { |
|||
trigger: 'axis', |
|||
axisPointer: { |
|||
type: 'shadow' |
|||
} |
|||
}, |
|||
legend: { |
|||
data: [] |
|||
}, |
|||
series:[], |
|||
}, |
|||
banNianSele:[], |
|||
jiDuSele:[], |
|||
yueSele:[], |
|||
timeattribute:{}, |
|||
banNian:[ |
|||
{ |
|||
id:1, |
|||
title:'上半年' |
|||
}, |
|||
{ |
|||
id:2, |
|||
title:'下半年' |
|||
}, |
|||
], |
|||
jiDu:[ |
|||
{ |
|||
id:1, |
|||
title:'第一季度' |
|||
}, |
|||
{ |
|||
id:2, |
|||
title:'第二季度' |
|||
}, |
|||
{ |
|||
id:3, |
|||
title:'第三季度' |
|||
}, |
|||
{ |
|||
id:4, |
|||
title:'第四季度' |
|||
}, |
|||
], |
|||
yue:[ |
|||
{ |
|||
id:1, |
|||
title:'1月' |
|||
}, |
|||
{ |
|||
id:2, |
|||
title:'2月' |
|||
}, |
|||
{ |
|||
id:3, |
|||
title:'3月' |
|||
}, |
|||
{ |
|||
id:4, |
|||
title:'4月' |
|||
}, |
|||
{ |
|||
id:5, |
|||
title:'5月' |
|||
}, |
|||
{ |
|||
id:6, |
|||
title:'6月' |
|||
}, |
|||
{ |
|||
id:7, |
|||
title:'7月' |
|||
}, |
|||
{ |
|||
id:8, |
|||
title:'8月' |
|||
}, |
|||
{ |
|||
id:9, |
|||
title:'9月' |
|||
}, |
|||
{ |
|||
id:10, |
|||
title:'10月' |
|||
}, |
|||
{ |
|||
id:11, |
|||
title:'11月' |
|||
}, |
|||
{ |
|||
id:12, |
|||
title:'12月' |
|||
}, |
|||
], |
|||
props: { |
|||
checkStrictly: true, |
|||
value: "id", |
|||
label: "name", |
|||
children: "child", |
|||
emitPath:false, |
|||
multiple: true |
|||
}, |
|||
lengthList:[], |
|||
props1: { |
|||
checkStrictly: true, |
|||
value: "id", |
|||
label: "name", |
|||
children: "children", |
|||
emitPath:false, |
|||
}, |
|||
// 新条件查询变量 |
|||
searchVersion: { |
|||
group: 2, |
|||
deaprtid:'', |
|||
year: "", //年 |
|||
}, |
|||
searchDataGrouplist:[], |
|||
// 公司列表 |
|||
companyList:[], |
|||
departmentList:[], |
|||
fenShow:false, |
|||
data:[], |
|||
echartsShow:2, |
|||
tableData:[], |
|||
searchInfo:{}, |
|||
searchData:{}, |
|||
pos:'', |
|||
pos1:'', |
|||
pos2:'', |
|||
spanArr:[], |
|||
spanArr1:[], |
|||
spanArr2:[], |
|||
lieArr:[], |
|||
liePos:'' |
|||
} |
|||
}, |
|||
created(){ |
|||
this.getDataList() |
|||
// this.getData() |
|||
this.getGrouplist() |
|||
this.initialDepartment() |
|||
}, |
|||
// 监听数据 |
|||
watch: { |
|||
data() { |
|||
this.$nextTick(() => { |
|||
this.spanArr=[], |
|||
this.spanArr1=[], |
|||
this.spanArr2=[], |
|||
this.pos2='', |
|||
this.pos='', |
|||
this.pos1='', |
|||
this.lieArr=[], |
|||
this.liePos='' |
|||
//此时就可以获取到在created赋值后的dataList了 |
|||
this.getSpanArr(this.data); |
|||
this.getSpanArr1(this.data); |
|||
this.getSpanArr2(this.data); |
|||
// this.getLieArr(this.data); |
|||
}); |
|||
}, |
|||
}, |
|||
methods: { |
|||
// 条件搜索 |
|||
async onSubmit() { |
|||
this.echartOption={ |
|||
title: { |
|||
text: '' |
|||
}, |
|||
xAxis:{ |
|||
type: 'category', |
|||
data: [] |
|||
}, |
|||
yAxis: { |
|||
type: 'value' |
|||
}, |
|||
tooltip: { |
|||
trigger: 'axis', |
|||
axisPointer: { |
|||
type: 'shadow' |
|||
} |
|||
}, |
|||
legend: { |
|||
data: [] |
|||
}, |
|||
series:[], |
|||
} |
|||
console.log("this.timeattribute.class") |
|||
console.log(this.timeattribute.class) |
|||
if (this.timeattribute.class==0) { |
|||
this.timeattribute.time=[0] |
|||
} |
|||
if (this.timeattribute.class==1) { |
|||
this.timeattribute.time=this.banNianSele |
|||
} |
|||
if (this.timeattribute.class==2) { |
|||
this.timeattribute.time=this.jiDuSele |
|||
} |
|||
if (this.timeattribute.class==3) { |
|||
this.timeattribute.time=this.yueSele |
|||
} |
|||
if (this.timeattribute.class!=undefined&&this.timeattribute.class!='') { |
|||
this.searchInfo.timeattribute=this.timeattribute |
|||
} |
|||
const res = await quantechart(this.searchInfo) |
|||
this.echartOption.xAxis.data=res.data.xAxis |
|||
this.echartOption.legend.data=res.data.legend |
|||
this.cylindricaldata=res.data.series |
|||
this.cylindricaldata.forEach(ele=>{ |
|||
this.$set(ele, 'type', 'bar') |
|||
this.$set(ele, 'barWidth', '25') |
|||
this.$set(ele, 'showBackground', true) |
|||
this.$set(ele, 'backgroundStyle', { |
|||
color: 'rgba(180, 180, 180, 0.2)' |
|||
}) |
|||
this.$set(ele, 'formatter', function(params){ |
|||
let txtArry = params.seriesName.split(''); |
|||
let rs = ""; |
|||
for(var i=0;i < txtArry.length; i++ ){ |
|||
rs += txtArry[i] + "\n"; |
|||
} |
|||
return rs; |
|||
} |
|||
) |
|||
this.echartOption.series.push(ele) |
|||
}) |
|||
this.myEcharts(); |
|||
|
|||
}, |
|||
// 初始化部门 |
|||
async initialDepartment(){ |
|||
const departmentFrom={ |
|||
id:2 |
|||
} |
|||
const res = await departmentlist(departmentFrom) |
|||
this.departmentList=res.data |
|||
this.echartsOption |
|||
}, |
|||
// 获取公司 |
|||
async getGrouplist(){ |
|||
const idFrom = { |
|||
id:1 |
|||
} |
|||
const res = await getgroupdepartmap(idFrom) |
|||
this.companyList=res.data |
|||
}, |
|||
// 选中的公司值 |
|||
async selectGroup(val){ |
|||
if (val!='') { |
|||
const departmentFrom={ |
|||
id:parseInt(val) |
|||
} |
|||
const res = await departmentlist(departmentFrom) |
|||
this.departmentList=res.data |
|||
} |
|||
}, |
|||
// 查看分数 |
|||
showFenList(row){ |
|||
this.fenShow=true |
|||
}, |
|||
// 查询 |
|||
// onSubmit(){ |
|||
// }, |
|||
async clickTarget(val){ |
|||
const from = { |
|||
targetid:val |
|||
} |
|||
const res = await getquantechartorgandyear(from) |
|||
if (res.data.grouplist!=null) { |
|||
this.searchDataGrouplist = res.data.grouplist |
|||
}else{ |
|||
this.searchDataGrouplist = [] |
|||
} |
|||
if (res.data.timelist!=null) { |
|||
this.searchDataTimelist = res.data.timelist |
|||
}else{ |
|||
this.searchDataTimelist = [] |
|||
} |
|||
console.log("this.searchData") |
|||
console.log(this.searchData.grouplist) |
|||
console.log(this.searchData.timelist) |
|||
}, |
|||
// 获取初始数据 |
|||
async getDataList() { |
|||
const searchInfo = { |
|||
page: 1, |
|||
pagesize: 10000, |
|||
} |
|||
const res = await gettarget(searchInfo) |
|||
this.tableData = res.data.list |
|||
}, |
|||
myEcharts(){ |
|||
// var myChart = this.$echarts.init(this.$refs.myChart); |
|||
var myChart = this.$echarts.init(document.getElementById('main')); |
|||
myChart.clear(); |
|||
//配置图表 |
|||
var option = { |
|||
title: { |
|||
text: '' |
|||
}, |
|||
xAxis: { |
|||
type: 'category', |
|||
data: [ |
|||
"2021年", |
|||
"2022年" |
|||
] |
|||
}, |
|||
yAxis: { |
|||
type: 'value' |
|||
}, |
|||
tooltip: {}, |
|||
legend: { |
|||
data: [ |
|||
"恒信高科 用电单耗达成率总值", |
|||
"恒信高科 用电单耗达成率平均值", |
|||
"恒信高科生产部 用电单耗达成率总值", |
|||
"恒信高科生产部 用电单耗达成率平均值", |
|||
"恒信高科 蒸汽单耗达成率总值", |
|||
"恒信高科 蒸汽单耗达成率平均值", |
|||
"恒信高科生产部 蒸汽单耗达成率总值", |
|||
"恒信高科生产部 蒸汽单耗达成率平均值" |
|||
] |
|||
}, |
|||
series: [ |
|||
{ |
|||
name:"恒信高科 用电单耗达成率总值", |
|||
|
|||
data: [ |
|||
0, |
|||
50 |
|||
], |
|||
type: 'bar', |
|||
showBackground: true, |
|||
backgroundStyle: { |
|||
color: 'rgba(180, 180, 180, 0.2)' |
|||
}, |
|||
label:{ |
|||
show:true, |
|||
position:'insideBottom', |
|||
color:'#000000', |
|||
formatter:function(params){ |
|||
let txtArry = params.seriesName.split(''); |
|||
let rs = ""; |
|||
for(var i=0;i < txtArry.length; i++ ){ |
|||
rs += txtArry[i] + "\n"; |
|||
} |
|||
return rs; |
|||
} |
|||
} |
|||
}, |
|||
{ |
|||
name:"恒信高科 用电单耗达成率平均值", |
|||
data: [ |
|||
0, |
|||
50 |
|||
], |
|||
type: 'bar', |
|||
showBackground: true, |
|||
backgroundStyle: { |
|||
color: 'rgba(180, 180, 180, 0.2)' |
|||
}, |
|||
label:{ |
|||
show:true, |
|||
position:'insideBottom', |
|||
color:'#000000', |
|||
formatter:function(params){ |
|||
let txtArry = params.seriesName.split(''); |
|||
let rs = ""; |
|||
for(var i=0;i < txtArry.length; i++ ){ |
|||
rs += txtArry[i] + "\n"; |
|||
} |
|||
return rs; |
|||
} |
|||
} |
|||
}, |
|||
, |
|||
{ |
|||
name:"恒信高科生产部 用电单耗达成率总值", |
|||
data: [ |
|||
0, |
|||
50 |
|||
], |
|||
type: 'bar', |
|||
showBackground: true, |
|||
backgroundStyle: { |
|||
color: 'rgba(180, 180, 180, 0.2)' |
|||
}, |
|||
label:{ |
|||
show:true, |
|||
position:'insideBottom', |
|||
color:'#000000', |
|||
formatter:function(params){ |
|||
let txtArry = params.seriesName.split(''); |
|||
let rs = ""; |
|||
for(var i=0;i < txtArry.length; i++ ){ |
|||
rs += txtArry[i] + "\n"; |
|||
} |
|||
return rs; |
|||
} |
|||
} |
|||
}, |
|||
{ |
|||
name:"恒信高科生产部 用电单耗达成率平均值", |
|||
data: [ |
|||
0, |
|||
50 |
|||
], |
|||
type: 'bar', |
|||
showBackground: true, |
|||
backgroundStyle: { |
|||
color: 'rgba(180, 180, 180, 0.2)' |
|||
}, |
|||
label:{ |
|||
show:true, |
|||
position:'insideBottom', |
|||
color:'#000000', |
|||
formatter:function(params){ |
|||
let txtArry = params.seriesName.split(''); |
|||
let rs = ""; |
|||
for(var i=0;i < txtArry.length; i++ ){ |
|||
rs += txtArry[i] + "\n"; |
|||
} |
|||
return rs; |
|||
} |
|||
} |
|||
}, |
|||
{ |
|||
name:"恒信高科 蒸汽单耗达成率总值", |
|||
data: [ |
|||
0, |
|||
60 |
|||
], |
|||
type: 'bar', |
|||
showBackground: true, |
|||
backgroundStyle: { |
|||
color: 'rgba(180, 180, 180, 0.2)' |
|||
}, |
|||
label:{ |
|||
show:true, |
|||
position:'insideBottom', |
|||
color:'#000000', |
|||
formatter:function(params){ |
|||
let txtArry = params.seriesName.split(''); |
|||
let rs = ""; |
|||
for(var i=0;i < txtArry.length; i++ ){ |
|||
rs += txtArry[i] + "\n"; |
|||
} |
|||
return rs; |
|||
} |
|||
} |
|||
}, |
|||
{ |
|||
name:"恒信高科 蒸汽单耗达成率平均值", |
|||
data: [ |
|||
0, |
|||
60 |
|||
], |
|||
type: 'bar', |
|||
showBackground: true, |
|||
backgroundStyle: { |
|||
color: 'rgba(180, 180, 180, 0.2)' |
|||
}, |
|||
label:{ |
|||
show:true, |
|||
position:'insideBottom', |
|||
color:'#000000', |
|||
formatter:function(params){ |
|||
let txtArry = params.seriesName.split(''); |
|||
let rs = ""; |
|||
for(var i=0;i < txtArry.length; i++ ){ |
|||
rs += txtArry[i] + "\n"; |
|||
} |
|||
return rs; |
|||
} |
|||
} |
|||
}, |
|||
{ |
|||
name:"恒信高科生产部 蒸汽单耗达成率总值", |
|||
data: [ |
|||
0, |
|||
60 |
|||
], |
|||
type: 'bar', |
|||
showBackground: true, |
|||
backgroundStyle: { |
|||
color: 'rgba(180, 180, 180, 0.2)' |
|||
}, |
|||
label:{ |
|||
show:true, |
|||
position:'insideBottom', |
|||
color:'#000000', |
|||
formatter:function(params){ |
|||
let txtArry = params.seriesName.split(''); |
|||
let rs = ""; |
|||
for(var i=0;i < txtArry.length; i++ ){ |
|||
rs += txtArry[i] + "\n"; |
|||
} |
|||
return rs; |
|||
} |
|||
} |
|||
}, |
|||
{ |
|||
name:"恒信高科生产部 蒸汽单耗达成率平均值", |
|||
data: [ |
|||
0, |
|||
1069.67 |
|||
], |
|||
type: 'bar', |
|||
showBackground: true, |
|||
backgroundStyle: { |
|||
color: 'rgba(180, 180, 180, 0.2)' |
|||
}, |
|||
label:{ |
|||
show:true, |
|||
position:'insideBottom', |
|||
color:'#000000', |
|||
formatter:function(params){ |
|||
let txtArry = params.seriesName.split(''); |
|||
let rs = ""; |
|||
for(var i=0;i < txtArry.length; i++ ){ |
|||
rs += txtArry[i] + "\n"; |
|||
} |
|||
return rs; |
|||
} |
|||
} |
|||
} |
|||
|
|||
] |
|||
}; |
|||
console.log("this.echartOption") |
|||
console.log(this.echartOption) |
|||
// myChart = this.$echarts.init(this.$refs.myChart); |
|||
myChart.setOption(this.echartOption); |
|||
} |
|||
}, |
|||
mounted(){ |
|||
// this.myEcharts(); |
|||
}, |
|||
|
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
::v-deep.el-table .cell{ |
|||
padding-right: 0px !important; |
|||
padding-left: 0px !important; |
|||
} |
|||
</style> |
|||
@ -0,0 +1,824 @@ |
|||
|
|||
<template> |
|||
|
|||
<div class="Echarts"> |
|||
<div v-if="echartsShow==1"> |
|||
<div class="gva-search-box"> |
|||
<el-form ref="searchForm" :inline="true" :model="searchInfo"> |
|||
<el-form-item label="考核指标"> |
|||
<el-select multiple @change='clickTarget' v-model="searchInfo.targetid" clearable placeholder="请选择考核维度"> |
|||
<el-option |
|||
v-for="item in tableData" |
|||
:key="item.outid" |
|||
:label="item.title" |
|||
:value="item.outid"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="组织"> |
|||
<el-select multiple v-model="searchInfo.targetid" clearable placeholder="请选择组织"> |
|||
<el-option |
|||
v-for="item in grouplist" |
|||
:key="item.outid" |
|||
:label="item.title" |
|||
:value="item.outid"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="时间"> |
|||
<el-select multiple v-model="searchInfo.targetid" clearable placeholder="请选择时间"> |
|||
<el-option |
|||
v-for="item in timelist" |
|||
:key="item.outid" |
|||
:label="item.title" |
|||
:value="item.outid"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="计数方式"> |
|||
<el-select multiple v-model="searchInfo.targetid" clearable placeholder="请选择考核维度"> |
|||
<el-option |
|||
v-for="item in timelist" |
|||
:key="item.outid" |
|||
:label="item.title" |
|||
:value="item.outid"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<!-- <el-form-item label="考核维度状态"> |
|||
<el-select v-model="searchInfo.state" clearable placeholder="请选择状态"> |
|||
<el-option :value=1 label="正常">正常</el-option> |
|||
<el-option :value=2 label="禁止">禁止</el-option> |
|||
</el-select> |
|||
</el-form-item> --> |
|||
<el-form-item> |
|||
<el-button size="mini" type="primary" icon="el-icon-search" @click="onSubmit">查询</el-button> |
|||
|
|||
</el-form-item> |
|||
</el-form> |
|||
</div> |
|||
<div id="main" style="width: 80%;height: 800px;"></div> |
|||
</div> |
|||
<div v-if="echartsShow==2" style="padding:50px;"> |
|||
<div class="gva-search-box"> |
|||
<el-form ref="searchForm" :inline="true" :model="searchVersion"> |
|||
<el-form-item label="所属公司"> |
|||
<el-select filterable v-model="searchVersion.group" clearable placeholder="请选择" @change="selectGroup"> |
|||
<el-option |
|||
v-for="item in companyList" |
|||
:key="item.id" |
|||
:label="item.name" |
|||
:value="item.id"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="所属部门"> |
|||
<el-cascader filterable clearable v-model="searchVersion.deaprtid" :options="departmentList" :show-all-levels="false" :props="props1"></el-cascader> |
|||
|
|||
</el-form-item> |
|||
<el-form-item label="年度"> |
|||
<el-select v-model="searchVersion.year" placeholder="请选择"> |
|||
<el-option |
|||
v-for="item in yearList" |
|||
:key="item.value" |
|||
:label="item.label" |
|||
:value="item.value"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button size="mini" type="primary" icon="el-icon-search" @click="onSubmit">查询</el-button> |
|||
|
|||
</el-form-item> |
|||
</el-form> |
|||
</div> |
|||
<el-table height='725' style="width: 100%" :data="data" border :span-method="objectSpanMethod" :cell-style="{padding:'0px'}" > |
|||
<el-table-column prop="departmentname" align="center" label="部门" width="80"></el-table-column> |
|||
<el-table-column prop="dimensionname" align="center" label="考核维度" width="80"></el-table-column> |
|||
<el-table-column prop="dimensionweight" label="维度权重" align="center" width="50"></el-table-column> |
|||
<el-table-column prop="targetname" align="center" label="考核指标" width="100"> |
|||
<template slot-scope="scope"> |
|||
<el-link v-if="scope.row.type==1" type="primary" >{{scope.row.targetname}}</el-link> |
|||
<div v-if="scope.row.type==2">{{scope.row.targetname}}</div> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="targetweight" label="指标权重" align="center" width="50"></el-table-column> |
|||
|
|||
<el-table-column prop="unit" label="单位" align="center" width="50"/> |
|||
|
|||
<el-table-column prop="cycle" label="周期" align="center" width="80"> |
|||
<template slot-scope="scope"> |
|||
<el-tag v-if="scope.row.cycle==1">班</el-tag> |
|||
<el-tag v-if="scope.row.cycle==2">天</el-tag> |
|||
<el-tag v-if="scope.row.cycle==3">周</el-tag> |
|||
<el-tag v-if="scope.row.cycle==4">月</el-tag> |
|||
<el-tag v-if="scope.row.cycle==5">季度</el-tag> |
|||
<el-tag v-if="scope.row.cycle==6">年</el-tag> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column align="center" prop="cycleattr" label="频次" width="80"> |
|||
<template slot-scope="scope"> |
|||
<div v-if="scope.row.cycle==1">每班{{scope.row.cycleattr}}次</div> |
|||
<div v-if="scope.row.cycle==2">每天{{scope.row.cycleattr}}次</div> |
|||
<div v-if="scope.row.cycle==3">每周{{scope.row.cycleattr}}次</div> |
|||
<div v-if="scope.row.cycle==4">每月{{scope.row.cycleattr}}次</div> |
|||
<div v-if="scope.row.cycle==5">每季度{{scope.row.cycleattr}}次</div> |
|||
<div v-if="scope.row.cycle==6">每年{{scope.row.cycleattr}}次</div> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column align="center" label="执行部门" width="100"> |
|||
<template #default="scope"> |
|||
<el-collapse> |
|||
<el-collapse-item title="详情"> |
|||
<div v-for="(iteam,index) in scope.row.executivedepartment"> |
|||
{{iteam}} |
|||
</div> |
|||
</el-collapse-item> |
|||
</el-collapse> |
|||
<!-- <div v-for="item in scope.row.relevantdepartmentsmap" :key="item.key">{{item.title}}</div> --> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column align="center" label="分值名称" width="70"> |
|||
<template #default="scope"> |
|||
<div style='border-bottom: 1px solid #EBEEF5;' v-for='(item,index) in scope.row.statisticsname' :key='index'> |
|||
{{item}} |
|||
</div> |
|||
<!-- <el-descriptions :column="1" border> |
|||
<el-descriptions-item v-for='(item,index) in scope.row.statisticsname' :key='index'>{{item}}</el-descriptions-item> |
|||
|
|||
</el-descriptions> --> |
|||
<!-- <div v-for="item in scope.row.relevantdepartmentsmap" :key="item.key">{{item.title}}</div> --> |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<!-- <el-table-column align="center" v-for="(iteam,index) in yueList" :key="index" :label="iteam"> |
|||
<template slot-scope="scope"> |
|||
<el-descriptions direction="vertical" :column="1" border> |
|||
<el-descriptions-item :label="全奖值">{{scope.row}}</el-descriptions-item> |
|||
</el-descriptions> |
|||
</template> |
|||
</el-table-column> --> |
|||
<el-table-column align="center" v-for="(iteam,index) in yueList" :key="index" :label="iteam.title" width="50"> |
|||
<el-table-column |
|||
v-for="(iteam1,index1) in iteam.child" |
|||
:key="index1" |
|||
|
|||
:label="iteam1.title" |
|||
> |
|||
<template slot-scope="scope"> |
|||
{{scope.row}} |
|||
<!-- <template v-for="(g,index2) in scope.row.score" > |
|||
{{g.score[index].allprize}} |
|||
</template> --> |
|||
|
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<!-- <template slot-scope="scope"> |
|||
<div style='border-bottom: 1px solid #EBEEF5;'> |
|||
{{scope.row.score[index].allprize}} |
|||
</div> |
|||
<div style='border-bottom: 1px solid #EBEEF5;'> |
|||
{{scope.row.score[index].zeroprize}} |
|||
</div> |
|||
<div style='border-bottom: 1px solid #EBEEF5;'> |
|||
{{scope.row.score[index].scoreval}} |
|||
</div> |
|||
<div style='border-bottom: 1px solid #EBEEF5;'> |
|||
{{scope.row.score[index].achievement}} |
|||
</div> |
|||
<div style='border-bottom: 1px solid #EBEEF5;'> |
|||
{{scope.row.score[index].actualscore}} |
|||
</div> |
|||
|
|||
</template> --> |
|||
<!-- <el-descriptions :column="1" border> |
|||
<el-descriptions-item ></el-descriptions-item> |
|||
<el-descriptions-item >{{scope.row.score[index].zeroprize}}</el-descriptions-item> |
|||
<el-descriptions-item >{{scope.row.score[index].scoreval}}</el-descriptions-item> |
|||
<el-descriptions-item >{{scope.row.score[index].achievement}}%</el-descriptions-item> |
|||
<el-descriptions-item >{{scope.row.score[index].actualscore}}</el-descriptions-item> |
|||
</el-descriptions> --> |
|||
</el-table-column> |
|||
|
|||
</el-table> |
|||
|
|||
</div> |
|||
<!-- 得分弹框 --> |
|||
<!-- <el-dialog :visible.sync="showUser" title="得分详情" width="50%"> |
|||
|
|||
<el-table |
|||
:data="userlistary" |
|||
style="width: 100%"> |
|||
<el-table-column |
|||
prop="date" |
|||
label="头像"> |
|||
<template slot-scope="scope"> |
|||
<el-avatar shape="square" size="large" :src="scope.row.icon"></el-avatar> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
prop="number" |
|||
label="工号"> |
|||
</el-table-column> |
|||
<el-table-column |
|||
prop="address" |
|||
label="部门"> |
|||
<template slot-scope="scope"> |
|||
{{scope.row.groupname}}{{scope.row.departmentname}} |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
prop="name" |
|||
label="姓名"> |
|||
</el-table-column> |
|||
</el-table> |
|||
</el-dialog> --> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import {getquantechartorgandyear,getplanversionvalid} from '@/api/echarts/echarts' |
|||
import { |
|||
grouplist, |
|||
departmentlist, |
|||
getgroupdepartmap, |
|||
getgroupuser |
|||
} from '@/api/duty/group' |
|||
import { gettarget,addtarget,gettargetinfo,eiteassessinfo,eitetarget,deltarget } from '@/api/duty/project' |
|||
export default { |
|||
name: 'Echarts', |
|||
data(){ |
|||
return{ |
|||
lengthList:[], |
|||
props1: { |
|||
checkStrictly: true, |
|||
value: "id", |
|||
label: "name", |
|||
children: "children", |
|||
emitPath:false, |
|||
}, |
|||
// 新条件查询变量 |
|||
searchVersion: { |
|||
group: 2, |
|||
deaprtid:'', |
|||
year: "", //年 |
|||
}, |
|||
|
|||
yueList:[ |
|||
// { |
|||
// title:'一月', |
|||
|
|||
// }, |
|||
// { |
|||
// title:'二月', |
|||
|
|||
// }, |
|||
// { |
|||
// title:'三月', |
|||
|
|||
// }, |
|||
// { |
|||
// title:'四月', |
|||
|
|||
// }, |
|||
// { |
|||
// title:'5月', |
|||
|
|||
// }, |
|||
{ |
|||
title:'1月', |
|||
child:[ |
|||
{title:'全奖值',prop:'scoreval'}, |
|||
{title:'零奖值',prop:'zeroprize'}, |
|||
{title:'封顶值',prop:'cappingval'}, |
|||
{title:'实际得分',prop:'actualscore'} |
|||
] |
|||
}, |
|||
{ |
|||
title:'2月', |
|||
child:[ |
|||
{title:'全奖值',prop:'scoreval'}, |
|||
{title:'零奖值',prop:'zeroprize'}, |
|||
{title:'封顶值',prop:'cappingval'}, |
|||
{title:'实际得分',prop:'actualscore'} |
|||
] |
|||
}, |
|||
{ |
|||
title:'3月', |
|||
child:[ |
|||
{title:'全奖值',prop:'scoreval'}, |
|||
{title:'零奖值',prop:'zeroprize'}, |
|||
{title:'封顶值',prop:'cappingval'}, |
|||
{title:'实际得分',prop:'actualscore'} |
|||
] |
|||
}, |
|||
{ |
|||
title:'3月', |
|||
child:[ |
|||
{title:'全奖值',prop:'scoreval'}, |
|||
{title:'零奖值',prop:'zeroprize'}, |
|||
{title:'封顶值',prop:'cappingval'}, |
|||
{title:'实际得分',prop:'actualscore'} |
|||
] |
|||
}, |
|||
], |
|||
yearList:[{ |
|||
value: '2021', |
|||
label: '2021' |
|||
}, { |
|||
value: '2022', |
|||
label: '2022' |
|||
}, { |
|||
value: '2023', |
|||
label: '2023' |
|||
}, { |
|||
value: '2024', |
|||
label: '2024' |
|||
}, { |
|||
value: '2025', |
|||
label: '2025' |
|||
}, { |
|||
value: '2026', |
|||
label: '2026' |
|||
}, { |
|||
value: '2027', |
|||
label: '2027' |
|||
}, { |
|||
value: '2028', |
|||
label: '2028' |
|||
}, { |
|||
value: '2029', |
|||
label: '2029' |
|||
}, { |
|||
value: '2030', |
|||
label: '2030' |
|||
}], |
|||
// 公司列表 |
|||
companyList:[], |
|||
departmentList:[], |
|||
fenShow:false, |
|||
data:[], |
|||
echartsShow:2, |
|||
tableData:[], |
|||
searchInfo:{}, |
|||
searchData:'', |
|||
pos:'', |
|||
pos1:'', |
|||
pos2:'', |
|||
spanArr:[], |
|||
spanArr1:[], |
|||
spanArr2:[], |
|||
} |
|||
}, |
|||
created(){ |
|||
this.getDataList() |
|||
this.getData() |
|||
this.getGrouplist() |
|||
this.initialDepartment() |
|||
}, |
|||
// 监听数据 |
|||
watch: { |
|||
data() { |
|||
this.$nextTick(() => { |
|||
this.spanArr=[], |
|||
this.spanArr1=[], |
|||
this.spanArr2=[], |
|||
this.pos2='', |
|||
this.pos='', |
|||
this.pos1='', |
|||
|
|||
//此时就可以获取到在created赋值后的dataList了 |
|||
this.getSpanArr(this.data); |
|||
this.getSpanArr1(this.data); |
|||
this.getSpanArr2(this.data); |
|||
}); |
|||
}, |
|||
}, |
|||
methods: { |
|||
// 条件搜索 |
|||
onSubmit() { |
|||
// this.page = 1 |
|||
// this.pageSize = 10 |
|||
// this.searchInfo.parentId=this.childInfo.outId |
|||
this.getData() |
|||
}, |
|||
// 初始化部门 |
|||
async initialDepartment(){ |
|||
|
|||
const departmentFrom={ |
|||
id:2 |
|||
} |
|||
const res = await departmentlist(departmentFrom) |
|||
this.departmentList=res.data |
|||
|
|||
|
|||
}, |
|||
// 获取公司 |
|||
async getGrouplist(){ |
|||
const idFrom = { |
|||
id:1 |
|||
} |
|||
const res = await getgroupdepartmap(idFrom) |
|||
this.companyList=res.data |
|||
|
|||
}, |
|||
// 选中的公司值 |
|||
async selectGroup(val){ |
|||
if (val!='') { |
|||
const departmentFrom={ |
|||
id:parseInt(val) |
|||
} |
|||
const res = await departmentlist(departmentFrom) |
|||
this.departmentList=res.data |
|||
} |
|||
|
|||
}, |
|||
// 查看分数 |
|||
showFenList(row){ |
|||
this.fenShow=true |
|||
}, |
|||
|
|||
// 部门合并 |
|||
getSpanArr(data) { |
|||
// data就是我们从后台拿到的数据 |
|||
for (var i = 0; i < data.length; i++) { |
|||
if (i === 0) { |
|||
this.spanArr.push(1); |
|||
this.pos = 0; |
|||
} else { |
|||
// 判断当前元素与上一个元素是否相同 |
|||
if (data[i].departmentid === data[i - 1].departmentid) { |
|||
this.spanArr[this.pos] += 1; |
|||
this.spanArr.push(0); |
|||
} else { |
|||
this.spanArr.push(1); |
|||
this.pos = i; |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
// 纬度合并 |
|||
getSpanArr1(data) { |
|||
// data就是我们从后台拿到的数据 |
|||
for (var i = 0; i < data.length; i++) { |
|||
if (i === 0) { |
|||
this.spanArr1.push(1); |
|||
this.pos1 = 0; |
|||
} else { |
|||
// 判断当前元素与上一个元素是否相同 |
|||
if (data[i].dimension === data[i - 1].dimension) { |
|||
this.spanArr1[this.pos1] += 1; |
|||
this.spanArr1.push(0); |
|||
} else { |
|||
this.spanArr1.push(1); |
|||
this.pos1 = i; |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
// 指标合并 |
|||
getSpanArr2(data) { |
|||
// data就是我们从后台拿到的数据 |
|||
for (var i = 0; i < data.length; i++) { |
|||
if (i === 0) { |
|||
this.spanArr2.push(1); |
|||
this.pos2 = 0; |
|||
} else { |
|||
// 判断当前元素与上一个元素是否相同 |
|||
if (data[i].target === data[i - 1].target) { |
|||
this.spanArr2[this.pos2] += 1; |
|||
this.spanArr2.push(0); |
|||
} else { |
|||
this.spanArr2.push(1); |
|||
this.pos2 = i; |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
// 合并行 |
|||
objectSpanMethod({ row, column, rowIndex, columnIndex }) { |
|||
if (columnIndex === 0) { |
|||
const _row = this.spanArr[rowIndex]; |
|||
const _col = _row > 0 ? 1 : 0; |
|||
return { |
|||
// [0,0] 表示这一行不显示, [2,1]表示行的合并数 |
|||
rowspan: _row, |
|||
colspan: _col |
|||
}; |
|||
} |
|||
if (columnIndex === 1||columnIndex === 2) { |
|||
const _row = this.spanArr1[rowIndex]; |
|||
const _col = _row > 0 ? 1 : 0; |
|||
return { |
|||
// [0,0] 表示这一行不显示, [2,1]表示行的合并数 |
|||
rowspan: _row, |
|||
colspan: _col |
|||
}; |
|||
} |
|||
if (columnIndex === 3||columnIndex === 4||columnIndex === 5||columnIndex === 6||columnIndex === 7||columnIndex === 8||columnIndex === 9||columnIndex === 10) { |
|||
const _row = this.spanArr2[rowIndex]; |
|||
const _col = _row > 0 ? 1 : 0; |
|||
return { |
|||
// [0,0] 表示这一行不显示, [2,1]表示行的合并数 |
|||
rowspan: _row, |
|||
colspan: _col |
|||
}; |
|||
} |
|||
}, |
|||
|
|||
// 查询 |
|||
// onSubmit(){ |
|||
|
|||
// }, |
|||
async clickTarget(val){ |
|||
const from = { |
|||
targetid:val |
|||
} |
|||
const res = await getquantechartorgandyear(from) |
|||
this.searchData = res.data.list |
|||
}, |
|||
// 获取初始表格数据 |
|||
async getData() { |
|||
this.searchVersion.group=this.searchVersion.group.toString() |
|||
if (this.searchVersion.deaprtid!=null) { |
|||
this.searchVersion.deaprtid=this.searchVersion.deaprtid.toString() |
|||
} |
|||
|
|||
const res = await getplanversionvalid(this.searchVersion) |
|||
this.data = res.data |
|||
console.log(this.data) |
|||
this.data.forEach(ele=>{ |
|||
this.lengthList.push(ele.score.length) |
|||
|
|||
}) |
|||
console.log("this.lengthList") |
|||
console.log(this.lengthList) |
|||
this.searchVersion= { |
|||
group: 2, |
|||
deaprtid:'', |
|||
year: "", //年 |
|||
} |
|||
}, |
|||
// 获取初始数据 |
|||
async getDataList() { |
|||
const searchInfo = { |
|||
page: 1, |
|||
pagesize: 10000 |
|||
} |
|||
const res = await gettarget(searchInfo) |
|||
this.tableData = res.data |
|||
}, |
|||
myEcharts(){ |
|||
var myChart = this.$echarts.init(document.getElementById('main')); |
|||
//配置图表 |
|||
var option = { |
|||
title: { |
|||
text: '' |
|||
}, |
|||
xAxis: { |
|||
type: 'category', |
|||
data: [ |
|||
"2021年", |
|||
"2022年" |
|||
] |
|||
}, |
|||
yAxis: { |
|||
type: 'value' |
|||
}, |
|||
tooltip: {}, |
|||
legend: { |
|||
data: [ |
|||
"恒信高科 用电单耗达成率总值", |
|||
"恒信高科 用电单耗达成率平均值", |
|||
"恒信高科生产部 用电单耗达成率总值", |
|||
"恒信高科生产部 用电单耗达成率平均值", |
|||
"恒信高科 蒸汽单耗达成率总值", |
|||
"恒信高科 蒸汽单耗达成率平均值", |
|||
"恒信高科生产部 蒸汽单耗达成率总值", |
|||
"恒信高科生产部 蒸汽单耗达成率平均值" |
|||
] |
|||
}, |
|||
series: [ |
|||
{ |
|||
name:"恒信高科 用电单耗达成率总值", |
|||
|
|||
data: [ |
|||
0, |
|||
50 |
|||
], |
|||
type: 'bar', |
|||
showBackground: true, |
|||
backgroundStyle: { |
|||
color: 'rgba(180, 180, 180, 0.2)' |
|||
}, |
|||
label:{ |
|||
show:true, |
|||
position:'insideBottom', |
|||
color:'#000000', |
|||
formatter:function(params){ |
|||
let txtArry = params.seriesName.split(''); |
|||
let rs = ""; |
|||
for(var i=0;i < txtArry.length; i++ ){ |
|||
rs += txtArry[i] + "\n"; |
|||
} |
|||
return rs; |
|||
} |
|||
} |
|||
}, |
|||
{ |
|||
name:"恒信高科 用电单耗达成率平均值", |
|||
data: [ |
|||
0, |
|||
50 |
|||
], |
|||
type: 'bar', |
|||
showBackground: true, |
|||
backgroundStyle: { |
|||
color: 'rgba(180, 180, 180, 0.2)' |
|||
}, |
|||
label:{ |
|||
show:true, |
|||
position:'insideBottom', |
|||
color:'#000000', |
|||
formatter:function(params){ |
|||
let txtArry = params.seriesName.split(''); |
|||
let rs = ""; |
|||
for(var i=0;i < txtArry.length; i++ ){ |
|||
rs += txtArry[i] + "\n"; |
|||
} |
|||
return rs; |
|||
} |
|||
} |
|||
}, |
|||
, |
|||
{ |
|||
name:"恒信高科生产部 用电单耗达成率总值", |
|||
data: [ |
|||
0, |
|||
50 |
|||
], |
|||
type: 'bar', |
|||
showBackground: true, |
|||
backgroundStyle: { |
|||
color: 'rgba(180, 180, 180, 0.2)' |
|||
}, |
|||
label:{ |
|||
show:true, |
|||
position:'insideBottom', |
|||
color:'#000000', |
|||
formatter:function(params){ |
|||
let txtArry = params.seriesName.split(''); |
|||
let rs = ""; |
|||
for(var i=0;i < txtArry.length; i++ ){ |
|||
rs += txtArry[i] + "\n"; |
|||
} |
|||
return rs; |
|||
} |
|||
} |
|||
}, |
|||
{ |
|||
name:"恒信高科生产部 用电单耗达成率平均值", |
|||
data: [ |
|||
0, |
|||
50 |
|||
], |
|||
type: 'bar', |
|||
showBackground: true, |
|||
backgroundStyle: { |
|||
color: 'rgba(180, 180, 180, 0.2)' |
|||
}, |
|||
label:{ |
|||
show:true, |
|||
position:'insideBottom', |
|||
color:'#000000', |
|||
formatter:function(params){ |
|||
let txtArry = params.seriesName.split(''); |
|||
let rs = ""; |
|||
for(var i=0;i < txtArry.length; i++ ){ |
|||
rs += txtArry[i] + "\n"; |
|||
} |
|||
return rs; |
|||
} |
|||
} |
|||
}, |
|||
{ |
|||
name:"恒信高科 蒸汽单耗达成率总值", |
|||
data: [ |
|||
0, |
|||
60 |
|||
], |
|||
type: 'bar', |
|||
showBackground: true, |
|||
backgroundStyle: { |
|||
color: 'rgba(180, 180, 180, 0.2)' |
|||
}, |
|||
label:{ |
|||
show:true, |
|||
position:'insideBottom', |
|||
color:'#000000', |
|||
formatter:function(params){ |
|||
let txtArry = params.seriesName.split(''); |
|||
let rs = ""; |
|||
for(var i=0;i < txtArry.length; i++ ){ |
|||
rs += txtArry[i] + "\n"; |
|||
} |
|||
return rs; |
|||
} |
|||
} |
|||
}, |
|||
{ |
|||
name:"恒信高科 蒸汽单耗达成率平均值", |
|||
data: [ |
|||
0, |
|||
60 |
|||
], |
|||
type: 'bar', |
|||
showBackground: true, |
|||
backgroundStyle: { |
|||
color: 'rgba(180, 180, 180, 0.2)' |
|||
}, |
|||
label:{ |
|||
show:true, |
|||
position:'insideBottom', |
|||
color:'#000000', |
|||
formatter:function(params){ |
|||
let txtArry = params.seriesName.split(''); |
|||
let rs = ""; |
|||
for(var i=0;i < txtArry.length; i++ ){ |
|||
rs += txtArry[i] + "\n"; |
|||
} |
|||
return rs; |
|||
} |
|||
} |
|||
}, |
|||
{ |
|||
name:"恒信高科生产部 蒸汽单耗达成率总值", |
|||
data: [ |
|||
0, |
|||
60 |
|||
], |
|||
type: 'bar', |
|||
showBackground: true, |
|||
backgroundStyle: { |
|||
color: 'rgba(180, 180, 180, 0.2)' |
|||
}, |
|||
label:{ |
|||
show:true, |
|||
position:'insideBottom', |
|||
color:'#000000', |
|||
formatter:function(params){ |
|||
let txtArry = params.seriesName.split(''); |
|||
let rs = ""; |
|||
for(var i=0;i < txtArry.length; i++ ){ |
|||
rs += txtArry[i] + "\n"; |
|||
} |
|||
return rs; |
|||
} |
|||
} |
|||
}, |
|||
{ |
|||
name:"恒信高科生产部 蒸汽单耗达成率平均值", |
|||
data: [ |
|||
0, |
|||
1069.67 |
|||
], |
|||
type: 'bar', |
|||
showBackground: true, |
|||
backgroundStyle: { |
|||
color: 'rgba(180, 180, 180, 0.2)' |
|||
}, |
|||
label:{ |
|||
show:true, |
|||
position:'insideBottom', |
|||
color:'#000000', |
|||
formatter:function(params){ |
|||
let txtArry = params.seriesName.split(''); |
|||
let rs = ""; |
|||
for(var i=0;i < txtArry.length; i++ ){ |
|||
rs += txtArry[i] + "\n"; |
|||
} |
|||
return rs; |
|||
} |
|||
} |
|||
} |
|||
|
|||
] |
|||
}; |
|||
myChart.setOption(option); |
|||
} |
|||
}, |
|||
mounted(){ |
|||
// this.myEcharts(); |
|||
|
|||
}, |
|||
|
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
::v-deep.el-table .cell{ |
|||
padding-right: 0px !important; |
|||
padding-left: 0px !important; |
|||
} |
|||
</style> |
|||
@ -0,0 +1,883 @@ |
|||
|
|||
<template> |
|||
|
|||
<div class="Echarts"> |
|||
<div v-if="echartsShow==1"> |
|||
<div class="gva-search-box"> |
|||
<el-form ref="searchForm" :inline="true" :model="searchInfo"> |
|||
<el-form-item label="表格类型"> |
|||
<el-select v-model="searchInfo.state" clearable placeholder="请选择状态"> |
|||
<el-option value='1' label="汇总表">汇总表</el-option> |
|||
<el-option value='2' label="成绩表">成绩表</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="所属部门"> |
|||
<el-cascader filterable clearable v-model="searchVersion.deaprtid" :options="departmentList" :show-all-levels="false" :props="props1"></el-cascader> |
|||
|
|||
</el-form-item> |
|||
<!-- <el-form-item label="考核维度状态"> |
|||
<el-select v-model="searchInfo.state" clearable placeholder="请选择状态"> |
|||
<el-option :value=1 label="正常">正常</el-option> |
|||
<el-option :value=2 label="禁止">禁止</el-option> |
|||
</el-select> |
|||
</el-form-item> --> |
|||
<el-form-item> |
|||
<el-button size="mini" type="primary" icon="el-icon-search" @click="onSubmit">查询</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</div> |
|||
<div id="main" style="width: 80%;height: 800px;"></div> |
|||
</div> |
|||
<div v-if="echartsShow==2" style="padding:50px;"> |
|||
<div class="gva-search-box"> |
|||
<el-form ref="searchForm" :inline="true" :model="searchVersion"> |
|||
<el-form-item label="表格类型"> |
|||
<el-select v-model="searchVersion.state" clearable placeholder="请选择状态"> |
|||
<el-option value='1' label="汇总表">汇总表</el-option> |
|||
<el-option value='2' label="成绩表">成绩表</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="所属公司"> |
|||
<el-select filterable v-model="searchVersion.group" clearable placeholder="请选择" @change="selectGroup"> |
|||
<el-option |
|||
v-for="item in companyList" |
|||
:key="item.id" |
|||
:label="item.name" |
|||
:value="item.id"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="所属部门"> |
|||
<el-cascader filterable clearable v-model="searchVersion.deaprtid" :options="departmentList" :show-all-levels="false" :props="props1"></el-cascader> |
|||
</el-form-item> |
|||
<el-button size="mini" type="primary" icon="el-icon-search" @click="onSubmit">查询</el-button> |
|||
</el-form> |
|||
</div> |
|||
<el-table style="width: 100%" :data="data" border :span-method="objectSpanMethod" :cell-style="{padding:'0px'}" > |
|||
<el-table-column prop="departmentname" align="center" label="部门"></el-table-column> |
|||
<el-table-column prop="dimensionname" align="center" label="考核维度"></el-table-column> |
|||
<el-table-column prop="dimensionweight" label="维度权重" align="center"></el-table-column> |
|||
<el-table-column prop="targetname" align="center" label="考核指标"> |
|||
<template slot-scope="scope"> |
|||
<el-link v-if="scope.row.type==1" type="primary" >{{scope.row.targetname}}</el-link> |
|||
<div v-if="scope.row.type==2">{{scope.row.targetname}}</div> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="targetweight" label="指标权重" align="center"></el-table-column> |
|||
|
|||
<el-table-column prop="unit" label="单位" align="center"/> |
|||
|
|||
<el-table-column prop="cycle" label="周期" align="center"> |
|||
<template slot-scope="scope"> |
|||
<el-tag v-if="scope.row.cycle==1">班</el-tag> |
|||
<el-tag v-if="scope.row.cycle==2">天</el-tag> |
|||
<el-tag v-if="scope.row.cycle==3">周</el-tag> |
|||
<el-tag v-if="scope.row.cycle==4">月</el-tag> |
|||
<el-tag v-if="scope.row.cycle==5">季度</el-tag> |
|||
<el-tag v-if="scope.row.cycle==6">年</el-tag> |
|||
<el-tag v-if="scope.row.cycle==7">半年</el-tag> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column align="center" prop="cycleattr" label="频次"> |
|||
<template slot-scope="scope"> |
|||
<div v-if="scope.row.cycle==1">每班{{scope.row.cycleattr}}次</div> |
|||
<div v-if="scope.row.cycle==2">每天{{scope.row.cycleattr}}次</div> |
|||
<div v-if="scope.row.cycle==3">每周{{scope.row.cycleattr}}次</div> |
|||
<div v-if="scope.row.cycle==4">每月{{scope.row.cycleattr}}次</div> |
|||
<div v-if="scope.row.cycle==5">每季度{{scope.row.cycleattr}}次</div> |
|||
<div v-if="scope.row.cycle==6">每年{{scope.row.cycleattr}}次</div> |
|||
<div v-if="scope.row.cycle==7">每半年{{scope.row.cycleattr}}次</div> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column align="center" label="执行部门"> |
|||
<template #default="scope"> |
|||
<el-collapse> |
|||
<el-collapse-item title="详情"> |
|||
<div v-for="(iteam,index) in scope.row.executivedepartment"> |
|||
{{iteam}} |
|||
</div> |
|||
</el-collapse-item> |
|||
</el-collapse> |
|||
<!-- <div v-for="item in scope.row.relevantdepartmentsmap" :key="item.key">{{item.title}}</div> --> |
|||
</template> |
|||
</el-table-column> |
|||
<!-- <el-table-column align="center" label="分值名称" width="70"> |
|||
<template #default="scope"> |
|||
<div style='border-bottom: 1px solid #EBEEF5;' v-for='(item,index) in scope.row.statisticsname' :key='index'> |
|||
{{item}} |
|||
</div> |
|||
</template> |
|||
</el-table-column> --> |
|||
|
|||
<!-- <el-table-column align="center" v-for="(iteam,index) in yueList" :key="index" :label="iteam"> |
|||
<template slot-scope="scope"> |
|||
<el-descriptions direction="vertical" :column="1" border> |
|||
<el-descriptions-item :label="全奖值">{{scope.row}}</el-descriptions-item> |
|||
</el-descriptions> |
|||
</template> |
|||
</el-table-column> --> |
|||
<el-table-column align="center" v-for="(iteam,index) in yueList" :key="index" :label="iteam.title" width="60"> |
|||
<!-- <el-table-column |
|||
v-for="(iteam1,index1) in iteam.child" |
|||
:key="index1" |
|||
:label="iteam1.title" |
|||
> |
|||
<template slot-scope="scope"> |
|||
<template v-for="(g,index2) in scope.row.score" > |
|||
{{g.class[1]}} |
|||
</template> |
|||
</template> |
|||
</el-table-column> --> |
|||
|
|||
<template slot-scope="scope"> |
|||
<!-- <div style='border-bottom: 1px solid #EBEEF5;'> |
|||
{{scope.row.score[index].allprize}} |
|||
</div> |
|||
<div style='border-bottom: 1px solid #EBEEF5;'> |
|||
{{scope.row.score[index].zeroprize}} |
|||
</div> |
|||
<div style='border-bottom: 1px solid #EBEEF5;'> |
|||
{{scope.row.score[index].scoreval}} |
|||
</div> |
|||
<div style='border-bottom: 1px solid #EBEEF5;'> |
|||
{{scope.row.score[index].achievement}} |
|||
</div> --> |
|||
<div v-if="scope.row.manualgear==1" style=''> |
|||
{{scope.row.score[index].actualscore}} |
|||
</div> |
|||
<div v-if="scope.row.manualgear==2" style='color: blue;'> |
|||
{{scope.row.score[index].actualscore}} |
|||
</div> |
|||
</template> |
|||
<!-- <el-descriptions :column="1" border> |
|||
<el-descriptions-item ></el-descriptions-item> |
|||
<el-descriptions-item >{{scope.row.score[index].zeroprize}}</el-descriptions-item> |
|||
<el-descriptions-item >{{scope.row.score[index].scoreval}}</el-descriptions-item> |
|||
<el-descriptions-item >{{scope.row.score[index].achievement}}%</el-descriptions-item> |
|||
<el-descriptions-item >{{scope.row.score[index].actualscore}}</el-descriptions-item> |
|||
</el-descriptions> --> |
|||
</el-table-column> |
|||
</el-table> |
|||
</div> |
|||
<!-- 得分弹框 --> |
|||
<!-- <el-dialog :visible.sync="showUser" title="得分详情" width="50%"> |
|||
|
|||
<el-table |
|||
:data="userlistary" |
|||
style="width: 100%"> |
|||
<el-table-column |
|||
prop="date" |
|||
label="头像"> |
|||
<template slot-scope="scope"> |
|||
<el-avatar shape="square" size="large" :src="scope.row.icon"></el-avatar> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
prop="number" |
|||
label="工号"> |
|||
</el-table-column> |
|||
<el-table-column |
|||
prop="address" |
|||
label="部门"> |
|||
<template slot-scope="scope"> |
|||
{{scope.row.groupname}}{{scope.row.departmentname}} |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
prop="name" |
|||
label="姓名"> |
|||
</el-table-column> |
|||
</el-table> |
|||
</el-dialog> --> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import {getquantechartorgandyear,getplanversionvalid} from '@/api/echarts/echarts' |
|||
import { |
|||
grouplist, |
|||
departmentlist, |
|||
getgroupdepartmap, |
|||
getgroupuser |
|||
} from '@/api/duty/group' |
|||
import { gettarget,addtarget,gettargetinfo,eiteassessinfo,eitetarget,deltarget } from '@/api/duty/project' |
|||
export default { |
|||
name: 'Echarts', |
|||
data(){ |
|||
return{ |
|||
lengthList:[], |
|||
props1: { |
|||
checkStrictly: true, |
|||
value: "id", |
|||
label: "name", |
|||
children: "children", |
|||
emitPath:false, |
|||
}, |
|||
// 新条件查询变量 |
|||
searchVersion: { |
|||
group: 2, |
|||
deaprtid:'', |
|||
year: "", //年 |
|||
class:'', |
|||
title:'' |
|||
}, |
|||
|
|||
yueList:[ |
|||
{ |
|||
title:'1月', |
|||
|
|||
}, |
|||
{ |
|||
title:'2月', |
|||
|
|||
}, |
|||
{ |
|||
title:'3月', |
|||
|
|||
}, |
|||
{ |
|||
title:'4月', |
|||
|
|||
}, |
|||
{ |
|||
title:'5月', |
|||
|
|||
}, |
|||
{ |
|||
title:'6月', |
|||
|
|||
}, |
|||
{ |
|||
title:'7月', |
|||
|
|||
}, |
|||
{ |
|||
title:'8月', |
|||
|
|||
}, |
|||
{ |
|||
title:'9月', |
|||
|
|||
}, |
|||
{ |
|||
title:'10月', |
|||
|
|||
}, |
|||
{ |
|||
title:'11月', |
|||
|
|||
}, |
|||
{ |
|||
title:'12月', |
|||
|
|||
}, |
|||
// { |
|||
// title:'五月', |
|||
// child:[ |
|||
// {title:'全奖值',prop:'scoreval'}, |
|||
// {title:'零奖值',prop:'zeroprize'}, |
|||
// {title:'封顶值',prop:'cappingval'}, |
|||
// {title:'实际得分',prop:'actualscore'} |
|||
// ] |
|||
// }, |
|||
], |
|||
yearList:[{ |
|||
value: '2021', |
|||
label: '2021' |
|||
}, { |
|||
value: '2022', |
|||
label: '2022' |
|||
}, { |
|||
value: '2023', |
|||
label: '2023' |
|||
}, { |
|||
value: '2024', |
|||
label: '2024' |
|||
}, { |
|||
value: '2025', |
|||
label: '2025' |
|||
}, { |
|||
value: '2026', |
|||
label: '2026' |
|||
}, { |
|||
value: '2027', |
|||
label: '2027' |
|||
}, { |
|||
value: '2028', |
|||
label: '2028' |
|||
}, { |
|||
value: '2029', |
|||
label: '2029' |
|||
}, { |
|||
value: '2030', |
|||
label: '2030' |
|||
}], |
|||
// 公司列表 |
|||
companyList:[], |
|||
departmentList:[], |
|||
fenShow:false, |
|||
data:[], |
|||
echartsShow:2, |
|||
tableData:[], |
|||
searchInfo:{}, |
|||
searchData:'', |
|||
pos:'', |
|||
pos1:'', |
|||
pos2:'', |
|||
spanArr:[], |
|||
spanArr1:[], |
|||
spanArr2:[], |
|||
lieArr:[], |
|||
liePos:'' |
|||
} |
|||
}, |
|||
created(){ |
|||
this.getDataList() |
|||
this.getData1() |
|||
this.getGrouplist() |
|||
this.initialDepartment() |
|||
}, |
|||
// 监听数据 |
|||
watch: { |
|||
data() { |
|||
|
|||
this.$nextTick(() => { |
|||
this.spanArr=[], |
|||
this.spanArr1=[], |
|||
this.spanArr2=[], |
|||
this.pos2='', |
|||
this.pos='', |
|||
this.pos1='', |
|||
this.lieArr=[], |
|||
this.liePos='' |
|||
//此时就可以获取到在created赋值后的dataList了 |
|||
this.getSpanArr(this.data); |
|||
this.getSpanArr1(this.data); |
|||
this.getSpanArr2(this.data); |
|||
// this.getLieArr(this.data); |
|||
}); |
|||
}, |
|||
}, |
|||
methods: { |
|||
// 条件搜索 |
|||
onSubmit() { |
|||
// this.page = 1 |
|||
// this.pageSize = 10 |
|||
// this.searchInfo.parentId=this.childInfo.outId |
|||
this.getData() |
|||
}, |
|||
// 初始化部门 |
|||
async initialDepartment(){ |
|||
|
|||
const departmentFrom={ |
|||
id:2 |
|||
} |
|||
const res = await departmentlist(departmentFrom) |
|||
this.departmentList=res.data |
|||
|
|||
|
|||
}, |
|||
|
|||
// 获取公司 |
|||
async getGrouplist(){ |
|||
const idFrom = { |
|||
id:1 |
|||
} |
|||
const res = await getgroupdepartmap(idFrom) |
|||
this.companyList=res.data |
|||
|
|||
}, |
|||
// 选中的公司值 |
|||
async selectGroup(val){ |
|||
if (val!='') { |
|||
const departmentFrom={ |
|||
id:parseInt(val) |
|||
} |
|||
const res = await departmentlist(departmentFrom) |
|||
this.departmentList=res.data |
|||
} |
|||
|
|||
}, |
|||
// 查看分数 |
|||
showFenList(row){ |
|||
this.fenShow=true |
|||
}, |
|||
|
|||
// 通过周期列合并 |
|||
getLieArr(data) { |
|||
this.lieArr = []; |
|||
for (var i = 0; i < data.length; i++) { |
|||
if (i === 0) { |
|||
// 如果是第一条记录(即索引是0的时候),向数组中加入1 |
|||
this.lieArr.push(1); |
|||
this.liePos = 0; |
|||
} else { |
|||
// console.log(data[i].id, data[i - 1].id) |
|||
if (data[i].cycle === data[i - 1].cycle) { |
|||
// 如果parent相等就累加,并且push 0 这里是根据一样的parent匹配 |
|||
this.lieArr[this.liePos] += 1; |
|||
this.lieArr.push(0); |
|||
} else { |
|||
// 不相等push 1 |
|||
this.lieArr.push(1); |
|||
this.liePos = i; |
|||
} |
|||
} |
|||
} |
|||
console.log("this.lieArr") |
|||
console.log(this.lieArr) |
|||
}, |
|||
// 部门合并 |
|||
getSpanArr(data) { |
|||
// data就是我们从后台拿到的数据 |
|||
for (var i = 0; i < data.length; i++) { |
|||
if (i === 0) { |
|||
this.spanArr.push(1); |
|||
this.pos = 0; |
|||
} else { |
|||
// 判断当前元素与上一个元素是否相同 |
|||
if (data[i].departmentid === data[i - 1].departmentid) { |
|||
this.spanArr[this.pos] += 1; |
|||
this.spanArr.push(0); |
|||
} else { |
|||
this.spanArr.push(1); |
|||
this.pos = i; |
|||
} |
|||
} |
|||
} |
|||
console.log("hangArr") |
|||
console.log(this.spanArr) |
|||
}, |
|||
// 纬度合并 |
|||
getSpanArr1(data) { |
|||
// data就是我们从后台拿到的数据 |
|||
for (var i = 0; i < data.length; i++) { |
|||
if (i === 0) { |
|||
this.spanArr1.push(1); |
|||
this.pos1 = 0; |
|||
} else { |
|||
// 判断当前元素与上一个元素是否相同 |
|||
if (data[i].dimension === data[i - 1].dimension) { |
|||
this.spanArr1[this.pos1] += 1; |
|||
this.spanArr1.push(0); |
|||
} else { |
|||
this.spanArr1.push(1); |
|||
this.pos1 = i; |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
// 指标合并 |
|||
getSpanArr2(data) { |
|||
// data就是我们从后台拿到的数据 |
|||
for (var i = 0; i < data.length; i++) { |
|||
if (i === 0) { |
|||
this.spanArr2.push(1); |
|||
this.pos2 = 0; |
|||
} else { |
|||
// 判断当前元素与上一个元素是否相同 |
|||
if (data[i].target === data[i - 1].target) { |
|||
this.spanArr2[this.pos2] += 1; |
|||
this.spanArr2.push(0); |
|||
} else { |
|||
this.spanArr2.push(1); |
|||
this.pos2 = i; |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
// 合并列 |
|||
// spanMethod({ row, column, rowIndex, columnIndex }) { |
|||
// if(columnIndex === 0) { |
|||
// const _row = this.lieArr[rowIndex]; |
|||
// const _col = _row > 0 ? 1 : 0; |
|||
// return { |
|||
// rowspan: _row, |
|||
// colspan: _col |
|||
// } |
|||
// } |
|||
// }, |
|||
// spanMethod({ row, column, rowIndex, columnIndex }) { |
|||
|
|||
// if (columnIndex === 0) { |
|||
// const _row = this.lieArr[rowIndex]; |
|||
// const _col = _row > 0 ? 1 : 0; |
|||
// return { |
|||
// rowspan: _row, |
|||
// colspan: _col |
|||
// } |
|||
// } |
|||
|
|||
// }, |
|||
// 合并行 |
|||
objectSpanMethod({ row, column, rowIndex, columnIndex }) { |
|||
if (columnIndex === 0) { |
|||
const _row = this.spanArr[rowIndex]; |
|||
const _col = _row > 0 ? 1 : 0; |
|||
return { |
|||
// [0,0] 表示这一行不显示, [2,1]表示行的合并数 |
|||
rowspan: _row, |
|||
colspan: _col |
|||
}; |
|||
} |
|||
if (columnIndex === 1||columnIndex === 2) { |
|||
const _row = this.spanArr1[rowIndex]; |
|||
const _col = _row > 0 ? 1 : 0; |
|||
return { |
|||
// [0,0] 表示这一行不显示, [2,1]表示行的合并数 |
|||
rowspan: _row, |
|||
colspan: _col |
|||
}; |
|||
} |
|||
if (columnIndex === 3||columnIndex === 4||columnIndex === 5||columnIndex === 6||columnIndex === 7||columnIndex === 8||columnIndex === 9||columnIndex === 10) { |
|||
const _row = this.spanArr2[rowIndex]; |
|||
const _col = _row > 0 ? 1 : 0; |
|||
return { |
|||
// [0,0] 表示这一行不显示, [2,1]表示行的合并数 |
|||
rowspan: _row, |
|||
colspan: _col |
|||
}; |
|||
} |
|||
// if (columnIndex === 10||columnIndex === 11||columnIndex === 12||columnIndex === 13) { |
|||
// const _col = this.lieArr[rowIndex]; |
|||
// const _row = _col > 0 ? 1 : 0; |
|||
// return { |
|||
// rowspan: _row, |
|||
// colspan: _col |
|||
// } |
|||
// } |
|||
}, |
|||
|
|||
// 查询 |
|||
// onSubmit(){ |
|||
|
|||
// }, |
|||
async clickTarget(val){ |
|||
const from = { |
|||
targetid:val |
|||
} |
|||
const res = await getquantechartorgandyear(from) |
|||
this.searchData = res.data.list |
|||
}, |
|||
// 月份数据处理 |
|||
monthProcess(){ |
|||
|
|||
}, |
|||
// 获取初始表格数据 |
|||
async getData1() { |
|||
var userInfo=JSON.parse(sessionStorage.getItem('userinfo')); |
|||
this.searchVersion.group=userInfo.company |
|||
this.searchVersion.deaprtid=userInfo.deparment |
|||
// if (this.searchVersion.deaprtid!=null) { |
|||
// this.searchVersion.deaprtid=this.searchVersion.deaprtid.toString() |
|||
// } |
|||
console.log("this.searchVersion") |
|||
console.log(this.searchVersion) |
|||
const res = await getplanversionvalid(this.searchVersion) |
|||
this.data = res.data |
|||
console.log(this.data) |
|||
this.data.forEach(ele=>{ |
|||
// 未知的话 |
|||
if (ele.cycle==0) { |
|||
|
|||
for (let i = 0; i < 12; i++) { |
|||
if (ele.score.length>11) { |
|||
return; |
|||
} |
|||
let newObj = { |
|||
class: ele.type, |
|||
scoreval:'-', |
|||
allprize: '-', |
|||
zeroprize: '-', |
|||
cappingval: '-', |
|||
actualscore: '-', |
|||
achievement: '-' |
|||
}; |
|||
ele.score.push(newObj); |
|||
} |
|||
} |
|||
// 月份的话 |
|||
if (ele.cycle==4) { |
|||
|
|||
for (let i = 0; i < 12; i++) { |
|||
if (ele.score.length>11) { |
|||
return; |
|||
} |
|||
let newObj = { |
|||
class: ele.type, |
|||
scoreval: '-', |
|||
allprize: '-', |
|||
zeroprize: '-', |
|||
cappingval: '-', |
|||
actualscore: '-', |
|||
achievement: '-' |
|||
}; |
|||
ele.score.push(newObj); |
|||
} |
|||
} |
|||
// 季度的话 |
|||
if (ele.cycle==5) { |
|||
let newObj = { |
|||
class: ele.type, |
|||
scoreval: '-', |
|||
allprize: '-', |
|||
zeroprize: '-', |
|||
cappingval: '-', |
|||
actualscore: '-', |
|||
achievement: '-' |
|||
}; |
|||
ele.score.splice(0,0,newObj); |
|||
ele.score.splice(1,0,newObj); |
|||
ele.score.splice(3,0,newObj); |
|||
ele.score.splice(4,0,newObj); |
|||
ele.score.splice(6,0,newObj); |
|||
ele.score.splice(7,0,newObj); |
|||
ele.score.splice(9,0,newObj); |
|||
ele.score.splice(10,0,newObj); |
|||
|
|||
} |
|||
// 半年的话 |
|||
if (ele.cycle==7) { |
|||
let newObj = { |
|||
class: ele.type, |
|||
scoreval: '-', |
|||
allprize: '-', |
|||
zeroprize: '-', |
|||
cappingval: '-', |
|||
actualscore: '-', |
|||
achievement: '-' |
|||
}; |
|||
ele.score.splice(0,0,newObj); |
|||
ele.score.splice(1,0,newObj); |
|||
ele.score.splice(2,0,newObj); |
|||
ele.score.splice(3,0,newObj); |
|||
ele.score.splice(4,0,newObj); |
|||
ele.score.splice(6,0,newObj); |
|||
ele.score.splice(7,0,newObj); |
|||
ele.score.splice(8,0,newObj); |
|||
ele.score.splice(9,0,newObj); |
|||
ele.score.splice(10,0,newObj); |
|||
|
|||
} |
|||
// 年度的话 |
|||
if (ele.cycle==6) { |
|||
let newObj = { |
|||
class: ele.type, |
|||
scoreval: '-', |
|||
allprize: '-', |
|||
zeroprize: '-', |
|||
cappingval: '-', |
|||
actualscore: '-', |
|||
achievement: '-' |
|||
}; |
|||
for (let i = 0; i < 12; i++) { |
|||
if (ele.score.length>11) { |
|||
return; |
|||
} |
|||
let newObj = { |
|||
class: ele.type, |
|||
scoreval: '-', |
|||
allprize: '-', |
|||
zeroprize: '-', |
|||
cappingval: '-', |
|||
actualscore: '-', |
|||
achievement: '-' |
|||
}; |
|||
ele.score.unshift(newObj); |
|||
} |
|||
|
|||
} |
|||
console.log("ele.score.length") |
|||
console.log(ele.score.length) |
|||
this.lengthList.push(ele.score.length) |
|||
|
|||
}) |
|||
console.log("this.lengthList") |
|||
console.log(this.lengthList) |
|||
console.log("this.data") |
|||
console.log(this.data) |
|||
var scoreLength = [] |
|||
this.data.forEach(a=>{ |
|||
scoreLength.push(a.score.length) |
|||
|
|||
}) |
|||
console.log("scoreLength") |
|||
console.log(scoreLength) |
|||
this.searchVersion.group=2 |
|||
// this.searchVersion= { |
|||
// group: 2, |
|||
// deaprtid:'', |
|||
// year: "", //年 |
|||
// } |
|||
}, |
|||
// 获取初始表格数据 |
|||
async getData() { |
|||
this.searchVersion.group=this.searchVersion.group.toString() |
|||
if (this.searchVersion.deaprtid!=null) { |
|||
this.searchVersion.deaprtid=this.searchVersion.deaprtid.toString() |
|||
} |
|||
console.log("this.searchVersion") |
|||
console.log(this.searchVersion) |
|||
const res = await getplanversionvalid(this.searchVersion) |
|||
this.data = res.data |
|||
console.log(this.data) |
|||
this.data.forEach(ele=>{ |
|||
// 未知的话 |
|||
if (ele.cycle==0) { |
|||
|
|||
for (let i = 0; i < 12; i++) { |
|||
if (ele.score.length>11) { |
|||
return; |
|||
} |
|||
let newObj = { |
|||
class: ele.type, |
|||
scoreval:'-', |
|||
allprize: '-', |
|||
zeroprize: '-', |
|||
cappingval: '-', |
|||
actualscore: '-', |
|||
achievement: '-' |
|||
}; |
|||
ele.score.push(newObj); |
|||
} |
|||
} |
|||
// 月份的话 |
|||
if (ele.cycle==4) { |
|||
|
|||
for (let i = 0; i < 12; i++) { |
|||
if (ele.score.length>11) { |
|||
return; |
|||
} |
|||
let newObj = { |
|||
class: ele.type, |
|||
scoreval: '-', |
|||
allprize: '-', |
|||
zeroprize: '-', |
|||
cappingval: '-', |
|||
actualscore: '-', |
|||
achievement: '-' |
|||
}; |
|||
ele.score.push(newObj); |
|||
} |
|||
} |
|||
// 季度的话 |
|||
if (ele.cycle==5) { |
|||
let newObj = { |
|||
class: ele.type, |
|||
scoreval: '-', |
|||
allprize: '-', |
|||
zeroprize: '-', |
|||
cappingval: '-', |
|||
actualscore: '-', |
|||
achievement: '-' |
|||
}; |
|||
ele.score.splice(0,0,newObj); |
|||
ele.score.splice(1,0,newObj); |
|||
ele.score.splice(3,0,newObj); |
|||
ele.score.splice(4,0,newObj); |
|||
ele.score.splice(6,0,newObj); |
|||
ele.score.splice(7,0,newObj); |
|||
ele.score.splice(9,0,newObj); |
|||
ele.score.splice(10,0,newObj); |
|||
|
|||
} |
|||
// 半年的话 |
|||
if (ele.cycle==7) { |
|||
let newObj = { |
|||
class: ele.type, |
|||
scoreval: '-', |
|||
allprize: '-', |
|||
zeroprize: '-', |
|||
cappingval: '-', |
|||
actualscore: '-', |
|||
achievement: '-' |
|||
}; |
|||
ele.score.splice(0,0,newObj); |
|||
ele.score.splice(1,0,newObj); |
|||
ele.score.splice(2,0,newObj); |
|||
ele.score.splice(3,0,newObj); |
|||
ele.score.splice(4,0,newObj); |
|||
ele.score.splice(6,0,newObj); |
|||
ele.score.splice(7,0,newObj); |
|||
ele.score.splice(8,0,newObj); |
|||
ele.score.splice(9,0,newObj); |
|||
ele.score.splice(10,0,newObj); |
|||
|
|||
} |
|||
// 年度的话 |
|||
if (ele.cycle==6) { |
|||
let newObj = { |
|||
class: ele.type, |
|||
scoreval: '-', |
|||
allprize: '-', |
|||
zeroprize: '-', |
|||
cappingval: '-', |
|||
actualscore: '-', |
|||
achievement: '-' |
|||
}; |
|||
for (let i = 0; i < 12; i++) { |
|||
if (ele.score.length>11) { |
|||
return; |
|||
} |
|||
let newObj = { |
|||
class: ele.type, |
|||
scoreval: '-', |
|||
allprize: '-', |
|||
zeroprize: '-', |
|||
cappingval: '-', |
|||
actualscore: '-', |
|||
achievement: '-' |
|||
}; |
|||
ele.score.unshift(newObj); |
|||
} |
|||
|
|||
} |
|||
console.log("ele.score.length") |
|||
console.log(ele.score.length) |
|||
this.lengthList.push(ele.score.length) |
|||
|
|||
}) |
|||
console.log("this.lengthList") |
|||
console.log(this.lengthList) |
|||
console.log("this.data") |
|||
console.log(this.data) |
|||
var scoreLength = [] |
|||
this.data.forEach(a=>{ |
|||
scoreLength.push(a.score.length) |
|||
|
|||
}) |
|||
console.log("scoreLength") |
|||
console.log(scoreLength) |
|||
this.searchVersion.group=2 |
|||
// this.searchVersion= { |
|||
// group: 2, |
|||
// deaprtid:'', |
|||
// year: "", //年 |
|||
// } |
|||
}, |
|||
// 获取初始数据 |
|||
async getDataList() { |
|||
var userInfo=JSON.parse(sessionStorage.getItem('userinfo')); |
|||
const searchInfo = { |
|||
page: 1, |
|||
pagesize: 10000 |
|||
} |
|||
|
|||
const res = await gettarget(searchInfo) |
|||
this.tableData = res.data |
|||
}, |
|||
}, |
|||
mounted(){ |
|||
// this.myEcharts(); |
|||
|
|||
}, |
|||
|
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
::v-deep.el-table .cell{ |
|||
padding-right: 0px !important; |
|||
padding-left: 0px !important; |
|||
} |
|||
</style> |
|||
@ -0,0 +1,386 @@ |
|||
<template> |
|||
<!-- hr职务 --> |
|||
<div class="dashboard-container"> |
|||
<div class="gva-search-box"> |
|||
<el-form ref="searchForm" :inline="true" :model="searchInfo"> |
|||
<el-form-item label="职务名称"> |
|||
<el-input |
|||
placeholder="请输入名称" |
|||
v-model="searchInfo.name" |
|||
clearable> |
|||
</el-input> |
|||
</el-form-item> |
|||
<el-form-item label="职务分类" prop="dimension"> |
|||
<el-select filterable v-model="searchInfo.jobid" clearable placeholder="请选择职务分类"> |
|||
<el-option |
|||
v-for="item in jobList" |
|||
:key="item.id" |
|||
:label="item.name" |
|||
:value="item.id"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<!-- <el-form-item label="考核维度状态"> |
|||
<el-select v-model="searchInfo.state" clearable placeholder="请选择状态"> |
|||
<el-option :value=1 label="正常">正常</el-option> |
|||
<el-option :value=2 label="禁止">禁止</el-option> |
|||
</el-select> |
|||
</el-form-item> --> |
|||
<el-form-item> |
|||
<el-button size="mini" type="primary" icon="el-icon-search" @click="onSubmit">查询</el-button> |
|||
<!-- <el-button size="mini" icon="el-icon-refresh" @click="onReset">重置</el-button> --> |
|||
</el-form-item> |
|||
</el-form> |
|||
</div> |
|||
<div class="gva-table-box"> |
|||
<div class="gva-btn-list"> |
|||
<el-button size="mini" type="primary" icon="el-icon-plus" @click="showAdd()">新增</el-button> |
|||
</div> |
|||
<el-table :data="tableData"> |
|||
<el-table-column align="left" label="职务编号" prop="number"/> |
|||
<el-table-column align="left" label="所属分类" prop="dutiesclassname"/> |
|||
<el-table-column align="left" label="职务名称" prop="name"/> |
|||
<el-table-column align="left" label="职务状态"> |
|||
<template #default="scope"> |
|||
<el-switch |
|||
inline-prompt |
|||
active-text="正常" |
|||
inactive-text="禁止" |
|||
v-model="scope.row.state" |
|||
active-color="#13ce66" |
|||
inactive-color="#ff4949" |
|||
:active-value=1 |
|||
:inactive-value=2 |
|||
@change="changeVal($event,scope.row.id)" |
|||
/> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column align="left" fixed="right" label="操作" width="200"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
icon="el-icon-edit" |
|||
size="small" |
|||
type="text" |
|||
@click="showEdit(scope.row)" |
|||
>编辑</el-button> |
|||
<el-button |
|||
icon="el-icon-delete" |
|||
size="small" |
|||
type="text" |
|||
@click="deleteOperate(scope.row)" |
|||
>删除</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<div class="gva-pagination"> |
|||
<el-pagination |
|||
@size-change="handleSizeChange" |
|||
@current-change="handleCurrentChange" |
|||
:page-sizes="[10, 30, 50, 100]" |
|||
:page-size="searchInfo.pagesize" |
|||
layout="total, sizes, prev, pager, next, jumper" |
|||
:total="total"> |
|||
</el-pagination> |
|||
</div> |
|||
</div> |
|||
<!-- 新增弹框 --> |
|||
<el-dialog :visible.sync="dialogFormVisible" :before-close="closeDialog" title="新增" width="20%"> |
|||
<el-form ref="addForm" :model="form" :rules="rules" label-width="150px"> |
|||
<el-form-item label="职务名称" prop="name"> |
|||
<el-input v-model="form.name" autocomplete="off" /> |
|||
</el-form-item> |
|||
<el-form-item label="所属职务分类" prop="dimension"> |
|||
<el-select filterable v-model="form.jobtype" clearable placeholder="请选择职务分类"> |
|||
<el-option |
|||
v-for="item in jobList" |
|||
:key="item.id" |
|||
:label="item.name" |
|||
:value="item.id"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="权重" prop="weight"> |
|||
<el-input type="number" v-model.number="form.weight" autocomplete="off" /> |
|||
</el-form-item> |
|||
<el-form-item label="编号" prop="weight"> |
|||
<el-input v-model="form.number" autocomplete="off" /> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template #footer> |
|||
<div class="dialog-footer"> |
|||
<el-button size="small" @click="closeDialog">取 消</el-button> |
|||
<el-button size="small" type="primary" @click="enterDialog">确 定</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
<!-- 编辑弹框 --> |
|||
<el-dialog :visible.sync="editDialogFormVisible" :before-close="editCloseDialog" title="修改" width="20%"> |
|||
<el-form ref="editForm" :model="editAdd" :rules="editRules" label-width="150px"> |
|||
<!-- <el-form-item label="职务分类名称" prop="name"> |
|||
<el-input v-model="editAdd.name" autocomplete="off" /> |
|||
</el-form-item> --> |
|||
<el-form-item label="职务名称" prop="name"> |
|||
<el-input v-model="editAdd.name" autocomplete="off" /> |
|||
</el-form-item> |
|||
<el-form-item label="所属职务分类" prop="dimension"> |
|||
<el-select filterable v-model="editAdd.jobtype" clearable placeholder="请选择职务分类"> |
|||
<el-option |
|||
v-for="item in jobList" |
|||
:key="item.id" |
|||
:label="item.name" |
|||
:value="item.id"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="权重" prop="weight"> |
|||
<el-input type="number" v-model.number="editAdd.weight" autocomplete="off" /> |
|||
</el-form-item> |
|||
<el-form-item label="编号" prop="weight"> |
|||
<el-input v-model="editAdd.number" autocomplete="off" /> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template #footer> |
|||
<div class="dialog-footer"> |
|||
<el-button size="small" @click="editCloseDialog">取 消</el-button> |
|||
<el-button size="small" type="primary" @click="editEnterDialog">确 定</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { dutyclasslist,statedutyclass,eitedutyclassinfo,getdutyclassinfo,adddutyclass } from '@/api/duty/dimension' |
|||
import { utiesclasslist,dutieslist,eitedutiescont,eitedutiesstatordel,getdutiescont,adddutiescont } from '@/api/personnel/post' |
|||
export default { |
|||
name: 'Dashboard', |
|||
data() { |
|||
return { |
|||
// 职务分类列表 |
|||
jobList:[], |
|||
// 查询详情的数据 |
|||
editFrom:{}, |
|||
// 修改状态提交数据 |
|||
switchFrom:{}, |
|||
// 删除数据提交 |
|||
deleFrom:{}, |
|||
// 编辑时数据 |
|||
editAdd:{}, |
|||
assessList:{}, |
|||
// 添加数据 |
|||
form:{}, |
|||
// 弹窗变量 |
|||
dialogFormVisible:false, |
|||
// 修改弹窗 |
|||
editDialogFormVisible:false, |
|||
total: 0, |
|||
tableData:[], |
|||
// 条件查询变量 |
|||
searchInfo: { |
|||
page: 1, |
|||
pagesize: 10 |
|||
}, |
|||
// 条件查询变量 |
|||
abc:{ |
|||
aaa:"111", |
|||
bbb:"222" |
|||
}, |
|||
// 添加时验证规则 |
|||
rules: { |
|||
title: [{ required: true, message: '请输入名称', trigger: 'blur' }], |
|||
}, |
|||
editRules:{ |
|||
title: [{ required: true, message: '请输入名称', trigger: 'blur' }], |
|||
} |
|||
} |
|||
}, |
|||
created() { |
|||
console.log(this.$store.state.user.token) |
|||
if (this.$store.state.user.token=='') { |
|||
this.$router.push('/login') |
|||
} |
|||
// 页面渲染时获取初始数据 |
|||
this.getDataList() |
|||
this.getJobList() |
|||
}, |
|||
methods: { |
|||
// 获取职务分类 |
|||
async getJobList(){ |
|||
const searchInfo = { |
|||
page: 1, //分页页码,数字类型 |
|||
pagesize: 100000, |
|||
} |
|||
const res = await utiesclasslist(searchInfo) |
|||
this.jobList = res.data.list |
|||
}, |
|||
// 删除操作 |
|||
//删除操作 |
|||
async deleteOperate(row) { |
|||
this.$confirm('此操作将永久删除, 是否继续?', '提示', { |
|||
confirmButtonText: '确定', |
|||
cancelButtonText: '取消', |
|||
type: 'warning' |
|||
}) |
|||
.then(async() => { |
|||
this.deleFrom.state=3; |
|||
this.deleFrom.id=row.id; |
|||
const res = await eitedutiesstatordel(this.deleFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '删除成功!' |
|||
}) |
|||
|
|||
this.getDataList() |
|||
} |
|||
}) |
|||
}, |
|||
// 新增按钮 |
|||
showAdd(){ |
|||
this.dialogFormVisible=true; |
|||
console.log(this.dialogFormVisible) |
|||
}, |
|||
// 编辑按钮 |
|||
async showEdit(row){ |
|||
this.editFrom.id=row.id |
|||
const res = await getdutiescont(this.editFrom) |
|||
this.editAdd = res.data |
|||
this.editAdd.jobtype=this.editAdd.jobtype.toString() |
|||
this.editDialogFormVisible=true; |
|||
|
|||
}, |
|||
// 开关状态监听 |
|||
async changeVal(val,id){ |
|||
console.log(val) |
|||
this.switchFrom.id=id |
|||
if (val==1) { |
|||
this.switchFrom.state=1; |
|||
const res = await eitedutiesstatordel(this.switchFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '修改状态成功', |
|||
showClose: true |
|||
}) |
|||
this.getDataList() |
|||
} |
|||
} else { |
|||
this.switchFrom.state=2; |
|||
const res = await eitedutiesstatordel(this.switchFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '修改状态成功', |
|||
showClose: true |
|||
}) |
|||
this.getDataList() |
|||
} |
|||
} |
|||
}, |
|||
// 重置搜索条件 |
|||
onReset() { |
|||
this.searchInfo = {} |
|||
}, |
|||
// 条件搜索 |
|||
onSubmit() { |
|||
this.page = 1 |
|||
this.pageSize = 10 |
|||
this.getDataList() |
|||
}, |
|||
// 日期时间戳转日期格式 |
|||
formatDate(nS) { |
|||
return new Date(parseInt(nS) * 1000).toLocaleString().replace(/:\d{1,2}$/,' '); |
|||
}, |
|||
|
|||
// 提交按钮 |
|||
async enterDialog(){ |
|||
this.$refs.addForm.validate(async valid => { |
|||
if (valid) { |
|||
this.form.weight |
|||
const res = await adddutiescont(this.form) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '添加成功', |
|||
showClose: true |
|||
}) |
|||
} |
|||
this.getDataList(); |
|||
this.closeDialog(); |
|||
} |
|||
}) |
|||
}, |
|||
|
|||
// 编辑提交按钮 |
|||
async editEnterDialog(){ |
|||
this.$refs.editForm.validate(async valid => { |
|||
if (valid) { |
|||
const res = await eitedutiescont(this.editAdd) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '编辑成功', |
|||
showClose: true |
|||
}) |
|||
} |
|||
this.getDataList(); |
|||
this.editCloseDialog(); |
|||
} |
|||
}) |
|||
}, |
|||
// 添加框关闭 |
|||
closeDialog() { |
|||
console.log("closeDialog") |
|||
this.initForm() |
|||
this.dialogFormVisible = false |
|||
}, |
|||
// 修改框关闭 |
|||
editCloseDialog() { |
|||
this.editInitForm() |
|||
this.editDialogFormVisible = false |
|||
}, |
|||
// 添加重置表单 |
|||
initForm() { |
|||
console.log("initForm") |
|||
this.$refs.addForm.resetFields() |
|||
this.form = {} |
|||
console.log(this.form) |
|||
}, |
|||
// 修改重置表单 |
|||
editInitForm() { |
|||
this.$refs.editForm.resetFields() |
|||
this.editAdd = {} |
|||
}, |
|||
// 改变pageSize |
|||
handleSizeChange(val) { |
|||
this.searchInfo.pagesize=val |
|||
this.getDataList(this.searchInfo) |
|||
}, |
|||
// 改变page |
|||
handleCurrentChange(val) { |
|||
this.searchInfo.page=val |
|||
this.getDataList(this.searchInfo) |
|||
}, |
|||
// 获取初始数据 |
|||
async getDataList() { |
|||
const res = await dutieslist(this.searchInfo) |
|||
this.tableData = res.data.list |
|||
this.total = res.data.total |
|||
this.searchInfo.page = res.data.page |
|||
this.searchInfo.pagesize = res.data.pageSize |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.dashboard { |
|||
&-container { |
|||
margin: 30px; |
|||
} |
|||
&-text { |
|||
font-size: 30px; |
|||
line-height: 46px; |
|||
} |
|||
} |
|||
</style> |
|||
@ -0,0 +1,484 @@ |
|||
<template> |
|||
<!-- 行政组织 --> |
|||
<div class="dashboard-container"> |
|||
<!-- <div class="gva-search-box"> |
|||
<el-form ref="searchForm" :inline="true" :model="searchInfo"> |
|||
<el-form-item label="考核维度名称"> |
|||
<el-input |
|||
placeholder="请输入名称" |
|||
v-model="searchInfo.title" |
|||
clearable> |
|||
</el-input> |
|||
</el-form-item> |
|||
<el-form-item label="考核维度状态"> |
|||
<el-select v-model="searchInfo.state" clearable placeholder="请选择状态"> |
|||
<el-option :value=1 label="正常">正常</el-option> |
|||
<el-option :value=2 label="禁止">禁止</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button size="mini" type="primary" icon="el-icon-search" @click="onSubmit">查询</el-button> |
|||
<el-button size="mini" icon="el-icon-refresh" @click="onReset">重置</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</div> --> |
|||
<div class="gva-table-box"> |
|||
<div class="gva-btn-list"> |
|||
<el-button size="mini" type="primary" icon="el-icon-plus" @click="showAdd()">新增首级组织</el-button> |
|||
</div> |
|||
<el-table :data="tableData" row-key="id" :tree-props="{children: 'child'}"> |
|||
<el-table-column label="编号" min-width="100" prop="number" /> |
|||
<el-table-column label="名称" show-overflow-tooltip min-width="160" prop="name" /> |
|||
<el-table-column label="行政类别" prop="classname" /> |
|||
<el-table-column label="状态" min-width="140" prop="authorityName"> |
|||
<template #default="scope"> |
|||
<el-switch |
|||
inline-prompt |
|||
active-text="正常" |
|||
inactive-text="禁止" |
|||
v-model="scope.row.state" |
|||
active-color="#13ce66" |
|||
inactive-color="#ff4949" |
|||
:active-value=1 |
|||
:inactive-value=2 |
|||
@change="changeVal($event,scope.row.id)" |
|||
/> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column align="left" fixed="right" label="操作" width="300"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
size="mini" |
|||
type="text" |
|||
icon="el-icon-plus" |
|||
@click="addSonMenu(scope.row)" |
|||
>添加子组织</el-button> |
|||
<el-button |
|||
size="mini" |
|||
type="text" |
|||
icon="el-icon-edit" |
|||
@click="editMenu(scope.row)" |
|||
>编辑</el-button> |
|||
<el-button |
|||
size="mini" |
|||
type="text" |
|||
icon="el-icon-delete" |
|||
@click="deleteMenu(scope.row)" |
|||
>删除</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- <div class="gva-pagination"> |
|||
<el-pagination |
|||
@size-change="handleSizeChange" |
|||
@current-change="handleCurrentChange" |
|||
:page-sizes="[10, 30, 50, 100]" |
|||
:page-size="searchInfo.pagesize" |
|||
layout="total, sizes, prev, pager, next, jumper" |
|||
:total="total"> |
|||
</el-pagination> |
|||
</div> --> |
|||
</div> |
|||
<!-- 新增弹框 --> |
|||
<el-dialog :visible.sync="dialogFormVisible" :before-close="closeDialog" title="新增首级行政组织" width="20%"> |
|||
<el-form ref="addForm" :model="form" :rules="rules" label-width="150px"> |
|||
<el-form-item label="名称"> |
|||
<el-input v-model="form.name"/> |
|||
</el-form-item> |
|||
<el-form-item label="所属分类" prop="dimension"> |
|||
<el-select filterable v-model="form.organizationtype" clearable placeholder="请选择分类"> |
|||
<el-option |
|||
v-for="item in typeData" |
|||
:key="item.id" |
|||
:label="item.name" |
|||
:value="item.id"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="编号"> |
|||
<el-input v-model="form.number"/> |
|||
</el-form-item> |
|||
<el-form-item label="简称"> |
|||
<el-input v-model="form.abbreviation"/> |
|||
</el-form-item> |
|||
<el-form-item label="对应的企业微信ID"> |
|||
<el-input v-model.number="form.wechatid"/> |
|||
</el-form-item> |
|||
<!-- <el-form-item label="所属栏目"> |
|||
<el-cascader |
|||
:options="options" |
|||
:props="{ checkStrictly: true }" |
|||
clearable></el-cascader> |
|||
</el-form-item> --> |
|||
</el-form> |
|||
<template #footer> |
|||
<div class="dialog-footer"> |
|||
<el-button size="small" @click="closeDialog">取 消</el-button> |
|||
<el-button size="small" type="primary" @click="enterDialog">确 定</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
<!-- 新增子菜单弹框 --> |
|||
<el-dialog :visible.sync="addSonShow" :before-close="closeSonDialog" title="新增子组织" width="20%"> |
|||
<el-form :model="addSonMenuData" label-width="150px"> |
|||
<el-form-item label="名称"> |
|||
<el-input v-model="addSonMenuData.name"/> |
|||
</el-form-item> |
|||
<el-form-item label="所属分类" prop="dimension"> |
|||
<el-select filterable v-model="addSonMenuData.govclass" clearable placeholder="请选择分类"> |
|||
<el-option |
|||
v-for="item in typeData" |
|||
:key="item.id" |
|||
:label="item.name" |
|||
:value="item.id"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="编号"> |
|||
<el-input v-model="addSonMenuData.number"/> |
|||
</el-form-item> |
|||
<el-form-item label="简称"> |
|||
<el-input v-model="addSonMenuData.abbreviation"/> |
|||
</el-form-item> |
|||
<el-form-item label="对应的企业微信ID"> |
|||
<el-input v-model.number="addSonMenuData.wechatid"/> |
|||
</el-form-item> |
|||
<!-- <el-form-item label="所属栏目"> |
|||
<el-cascader |
|||
:options="options" |
|||
:props="{ checkStrictly: true }" |
|||
clearable></el-cascader> |
|||
</el-form-item> --> |
|||
</el-form> |
|||
<template #footer> |
|||
<div class="dialog-footer"> |
|||
<el-button size="small" @click="closeSonDialog">取 消</el-button> |
|||
<el-button size="small" type="primary" @click="enterSonDialog">确 定</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
<!-- 编辑弹框 --> |
|||
<el-dialog :visible.sync="editDialogFormVisible" :before-close="editCloseDialog" title="修改" width="20%"> |
|||
<el-form ref="editForm" :model="editAdd" :rules="editRules" label-width="150px"> |
|||
<el-form-item label="名称"> |
|||
<el-input v-model="editAdd.name"/> |
|||
</el-form-item> |
|||
<el-form-item label="所属分类" prop="dimension"> |
|||
<el-select filterable v-model="editAdd.govclass" clearable placeholder="请选择分类"> |
|||
<el-option |
|||
v-for="item in typeData" |
|||
:key="item.id" |
|||
:label="item.name" |
|||
:value="item.id"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="编号"> |
|||
<el-input v-model="editAdd.number"/> |
|||
</el-form-item> |
|||
<el-form-item label="简称"> |
|||
<el-input v-model="editAdd.abbreviation"/> |
|||
</el-form-item> |
|||
<el-form-item label="对应的企业微信ID"> |
|||
<el-input v-model.number="editAdd.wechatid"/> |
|||
</el-form-item> |
|||
<!-- <el-form-item label="栏目名称"> |
|||
<el-input v-model="editAdd.title"/> |
|||
</el-form-item> --> |
|||
<!-- <el-form-item label="所属栏目"> |
|||
<el-cascader |
|||
:options="options" |
|||
:props="{ checkStrictly: true }" |
|||
clearable></el-cascader> |
|||
</el-form-item> --> |
|||
<!-- <el-form-item label="栏目路径"> |
|||
<el-input v-model="editAdd.apiUrl"/> |
|||
</el-form-item> |
|||
<el-form-item label="排序"> |
|||
<el-input v-model="editAdd.sort"/> |
|||
</el-form-item> --> |
|||
</el-form> |
|||
<template #footer> |
|||
<div class="dialog-footer"> |
|||
<el-button size="small" @click="editCloseDialog">取 消</el-button> |
|||
<el-button size="small" type="primary" @click="editEnterDialog">确 定</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { dutyclasslist,statedutyclass,eitedutyclassinfo,getdutyclassinfo,adddutyclass } from '@/api/duty/dimension' |
|||
import { systemmenulist,addmenu,eitemenu,delmenu,addmenuoperation,delmenuperation } from '@/api/user' |
|||
import { govthree,govclasslist,addgovcont,eitegovcont,getgovcont,govlist,eitegovstateordel } from '@/api/personnel/post' |
|||
export default { |
|||
name: 'Dashboard', |
|||
data() { |
|||
return { |
|||
// 首级id |
|||
baseId:'', |
|||
// 行政类别数据 |
|||
typeData:[], |
|||
// 查询详情的数据 |
|||
editFrom:{}, |
|||
// 修改状态提交数据 |
|||
switchFrom:{}, |
|||
// 删除数据提交 |
|||
deleFrom:{}, |
|||
// 编辑时数据 |
|||
editAdd:{ |
|||
|
|||
}, |
|||
assessList:{}, |
|||
// 添加数据 |
|||
form:{ |
|||
type:1, |
|||
}, |
|||
// 弹窗变量 |
|||
dialogFormVisible:false, |
|||
addSonMenuData:{}, |
|||
// 修改弹窗 |
|||
editDialogFormVisible:false, |
|||
// 添加子菜单弹窗 |
|||
addSonShow:false, |
|||
total: 0, |
|||
tableData:[], |
|||
// 条件查询变量 |
|||
searchInfo: { |
|||
page: 1, |
|||
pagesize: 10 |
|||
}, |
|||
// 条件查询变量 |
|||
abc:{ |
|||
aaa:"111", |
|||
bbb:"222" |
|||
}, |
|||
// 添加时验证规则 |
|||
rules: { |
|||
title: [{ required: true, message: '请输入名称', trigger: 'blur' }], |
|||
}, |
|||
// 修改时的验证规则 |
|||
editRules:{ |
|||
title: [{ required: true, message: '请输入名称', trigger: 'blur' }], |
|||
} |
|||
} |
|||
}, |
|||
created() { |
|||
console.log(this.$store.state.user.token) |
|||
if (this.$store.state.user.token=='') { |
|||
this.$router.push('/login') |
|||
} |
|||
// 页面渲染时获取初始数据 |
|||
this.getDataList() |
|||
this.getTypeData() |
|||
}, |
|||
methods: { |
|||
// 获取行政类别 |
|||
async getTypeData() { |
|||
const searchInfo = { |
|||
page:1, |
|||
pagesize:100000, |
|||
} |
|||
const res = await govclasslist(this.searchInfo) |
|||
this.typeData = res.data.list |
|||
|
|||
}, |
|||
// 添加子组织 |
|||
addSonMenu(row){ |
|||
this.addSonMenuData.superior=row.id |
|||
this.addSonShow=true |
|||
}, |
|||
//删除操作 |
|||
async deleteMenu(row) { |
|||
this.$confirm('此操作将永久删除, 是否继续?', '提示', { |
|||
confirmButtonText: '确定', |
|||
cancelButtonText: '取消', |
|||
type: 'warning' |
|||
}) |
|||
.then(async() => { |
|||
this.deleFrom.state=3; |
|||
this.deleFrom.id=row.id; |
|||
const res = await eitegovstateordel(this.deleFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '删除成功!' |
|||
}) |
|||
this.getDataList() |
|||
} |
|||
}) |
|||
}, |
|||
// 新增按钮 |
|||
showAdd(){ |
|||
this.dialogFormVisible=true; |
|||
console.log(this.dialogFormVisible) |
|||
}, |
|||
// 编辑按钮 |
|||
async editMenu(row){ |
|||
this.editFrom={ |
|||
id:row.id |
|||
} |
|||
const res = await getgovcont(this.editFrom) |
|||
this.editAdd = res.data |
|||
// this.editAdd.menuurl=row.apiUrl |
|||
this.editAdd.govclass=this.editAdd.organizationtype |
|||
this.editAdd.superior=this.editAdd.superior.toString() |
|||
this.editDialogFormVisible=true; |
|||
}, |
|||
// 开关状态监听 |
|||
async changeVal(val,id){ |
|||
console.log(val) |
|||
this.switchFrom.id=id |
|||
if (val==1) { |
|||
this.switchFrom.state=1; |
|||
const res = await eitegovstateordel(this.switchFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '修改状态成功', |
|||
showClose: true |
|||
}) |
|||
this.getDataList() |
|||
} |
|||
} else { |
|||
this.switchFrom.state=2; |
|||
const res = await eitegovstateordel(this.switchFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '修改状态成功', |
|||
showClose: true |
|||
}) |
|||
this.getDataList() |
|||
} |
|||
} |
|||
}, |
|||
// 重置搜索条件 |
|||
onReset() { |
|||
this.searchInfo = {} |
|||
}, |
|||
// 条件搜索m |
|||
onSubmit() { |
|||
this.page = 1 |
|||
this.pageSize = 10 |
|||
this.getDataList() |
|||
}, |
|||
// 日期时间戳转日期格式 |
|||
formatDate(nS) { |
|||
return new Date(parseInt(nS) * 1000).toLocaleString().replace(/:\d{1,2}$/,' '); |
|||
}, |
|||
|
|||
// 提交按钮 |
|||
async enterDialog(){ |
|||
|
|||
this.form.superior=this.baseId.toString() |
|||
this.form.govclass=this.form.govclass.toString() |
|||
const res = await addgovcont(this.form) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '添加成功', |
|||
showClose: true |
|||
}) |
|||
} |
|||
this.getDataList(); |
|||
this.closeDialog(); |
|||
|
|||
}, |
|||
// 提交子菜单按钮 |
|||
async enterSonDialog(){ |
|||
|
|||
this.addSonMenuData.superior=this.addSonMenuData.superior.toString() |
|||
this.addSonMenuData.govclass=this.addSonMenuData.govclass.toString() |
|||
const res = await addgovcont(this.addSonMenuData) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '添加成功', |
|||
showClose: true |
|||
}) |
|||
} |
|||
this.getDataList(); |
|||
this.closeSonDialog(); |
|||
|
|||
}, |
|||
// 编辑提交按钮 |
|||
async editEnterDialog(){ |
|||
|
|||
this.editAdd.govclass=this.editAdd.govclass.toString() |
|||
const res = await eitegovcont(this.editAdd) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '编辑成功', |
|||
showClose: true |
|||
}) |
|||
} |
|||
this.getDataList(); |
|||
this.editCloseDialog(); |
|||
|
|||
}, |
|||
// 添加框关闭 |
|||
closeDialog() { |
|||
console.log("closeDialog") |
|||
this.initForm() |
|||
this.dialogFormVisible = false |
|||
}, |
|||
// 添加子框关闭 |
|||
closeSonDialog() { |
|||
this.addSonMenuData={} |
|||
this.addSonShow = false |
|||
}, |
|||
// 修改框关闭 |
|||
editCloseDialog() { |
|||
this.editInitForm() |
|||
this.editDialogFormVisible = false |
|||
}, |
|||
// 添加重置表单 |
|||
initForm() { |
|||
this.$refs.addForm.resetFields() |
|||
this.form = {} |
|||
console.log(this.form) |
|||
}, |
|||
// 修改重置表单 |
|||
editInitForm() { |
|||
this.$refs.editForm.resetFields() |
|||
this.editAdd = {} |
|||
}, |
|||
// 改变pageSize |
|||
handleSizeChange(val) { |
|||
this.searchInfo.pagesize=val |
|||
this.getDataList(this.searchInfo) |
|||
}, |
|||
// 改变page |
|||
handleCurrentChange(val) { |
|||
this.searchInfo.page=val |
|||
this.getDataList(this.searchInfo) |
|||
}, |
|||
// 获取初始数据 |
|||
async getDataList() { |
|||
const res = await govthree(this.searchInfo) |
|||
this.tableData = res.data[0].child |
|||
this.baseId = res.data[0].id |
|||
console.log('this.baseId'+this.baseId) |
|||
console.log(this.tableData[0]) |
|||
this.total = res.data.total |
|||
this.searchInfo.page = res.data.page |
|||
this.searchInfo.pagesize = res.data.pageSize |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.dashboard { |
|||
&-container { |
|||
margin: 30px; |
|||
} |
|||
&-text { |
|||
font-size: 30px; |
|||
line-height: 46px; |
|||
} |
|||
} |
|||
</style> |
|||
@ -0,0 +1,360 @@ |
|||
<template> |
|||
<!-- hr职务 --> |
|||
<div class="dashboard-container"> |
|||
<div class="gva-search-box"> |
|||
<el-form ref="searchForm" :inline="true" :model="searchInfo"> |
|||
<el-form-item label="名称"> |
|||
<el-input |
|||
placeholder="请输入名称" |
|||
v-model="searchInfo.name" |
|||
clearable> |
|||
</el-input> |
|||
</el-form-item> |
|||
<el-form-item label="级别值"> |
|||
<el-input |
|||
placeholder="请输入级别值" |
|||
v-model.number="searchInfo.level" |
|||
clearable> |
|||
</el-input> |
|||
</el-form-item> |
|||
<!-- <el-form-item label="考核维度状态"> |
|||
<el-select v-model="searchInfo.state" clearable placeholder="请选择状态"> |
|||
<el-option :value=1 label="正常">正常</el-option> |
|||
<el-option :value=2 label="禁止">禁止</el-option> |
|||
</el-select> |
|||
</el-form-item> --> |
|||
<el-form-item> |
|||
<el-button size="mini" type="primary" icon="el-icon-search" @click="onSubmit">查询</el-button> |
|||
<!-- <el-button size="mini" icon="el-icon-refresh" @click="onReset">重置</el-button> --> |
|||
</el-form-item> |
|||
</el-form> |
|||
</div> |
|||
<div class="gva-table-box"> |
|||
<div class="gva-btn-list"> |
|||
<el-button size="mini" type="primary" icon="el-icon-plus" @click="showAdd()">新增</el-button> |
|||
</div> |
|||
<el-table :data="tableData"> |
|||
<el-table-column align="left" label="ID" prop="id"/> |
|||
<el-table-column align="left" label="名称" prop="name"/> |
|||
<el-table-column align="left" label="级别值" prop="level"/> |
|||
<el-table-column align="left" label="状态"> |
|||
<template #default="scope"> |
|||
<el-switch |
|||
inline-prompt |
|||
active-text="正常" |
|||
inactive-text="禁止" |
|||
v-model="scope.row.state" |
|||
active-color="#13ce66" |
|||
inactive-color="#ff4949" |
|||
:active-value=1 |
|||
:inactive-value=2 |
|||
@change="changeVal($event,scope.row.id)" |
|||
/> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column align="left" fixed="right" label="操作" width="200"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
icon="el-icon-edit" |
|||
size="small" |
|||
type="text" |
|||
@click="showEdit(scope.row)" |
|||
>编辑</el-button> |
|||
<el-button |
|||
icon="el-icon-delete" |
|||
size="small" |
|||
type="text" |
|||
@click="deleteOperate(scope.row)" |
|||
>删除</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<div class="gva-pagination"> |
|||
<el-pagination |
|||
@size-change="handleSizeChange" |
|||
@current-change="handleCurrentChange" |
|||
:page-sizes="[10, 30, 50, 100]" |
|||
:page-size="searchInfo.pagesize" |
|||
layout="total, sizes, prev, pager, next, jumper" |
|||
:total="total"> |
|||
</el-pagination> |
|||
</div> |
|||
</div> |
|||
<!-- 新增弹框 --> |
|||
<el-dialog :visible.sync="dialogFormVisible" :before-close="closeDialog" title="新增" width="20%"> |
|||
<el-form ref="addForm" :model="form" :rules="rules" label-width="150px"> |
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input v-model="form.name" autocomplete="off" /> |
|||
</el-form-item> |
|||
<el-form-item label="级别值" prop="level"> |
|||
<el-input type="number" v-model.number="form.level" autocomplete="off" /> |
|||
</el-form-item> |
|||
<!-- <el-form-item label="编号" prop="weight"> |
|||
<el-input v-model="form.number" autocomplete="off" /> |
|||
</el-form-item> --> |
|||
</el-form> |
|||
<template #footer> |
|||
<div class="dialog-footer"> |
|||
<el-button size="small" @click="closeDialog">取 消</el-button> |
|||
<el-button size="small" type="primary" @click="enterDialog">确 定</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
<!-- 编辑弹框 --> |
|||
<el-dialog :visible.sync="editDialogFormVisible" :before-close="editCloseDialog" title="修改" width="20%"> |
|||
<el-form ref="editForm" :model="editAdd" :rules="editRules" label-width="150px"> |
|||
<!-- <el-form-item label="职务分类名称" prop="name"> |
|||
<el-input v-model="editAdd.name" autocomplete="off" /> |
|||
</el-form-item> --> |
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input v-model="editAdd.name" autocomplete="off" /> |
|||
</el-form-item> |
|||
<el-form-item label="级别值" prop="level"> |
|||
<el-input type="number" v-model.number="editAdd.level" autocomplete="off" /> |
|||
</el-form-item> |
|||
|
|||
</el-form> |
|||
<template #footer> |
|||
<div class="dialog-footer"> |
|||
<el-button size="small" @click="editCloseDialog">取 消</el-button> |
|||
<el-button size="small" type="primary" @click="editEnterDialog">确 定</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { dutyclasslist,statedutyclass,eitedutyclassinfo,getdutyclassinfo,adddutyclass } from '@/api/duty/dimension' |
|||
import { govclasslist,addgovclass,eitegovclasscont,getgovclasscont,eitegovclassstateordel } from '@/api/personnel/post' |
|||
export default { |
|||
name: 'Dashboard', |
|||
data() { |
|||
return { |
|||
// 职务分类列表 |
|||
jobList:[], |
|||
// 查询详情的数据 |
|||
editFrom:{}, |
|||
// 修改状态提交数据 |
|||
switchFrom:{}, |
|||
// 删除数据提交 |
|||
deleFrom:{}, |
|||
// 编辑时数据 |
|||
editAdd:{}, |
|||
assessList:{}, |
|||
// 添加数据 |
|||
form:{}, |
|||
// 弹窗变量 |
|||
dialogFormVisible:false, |
|||
// 修改弹窗 |
|||
editDialogFormVisible:false, |
|||
total: 0, |
|||
tableData:[], |
|||
// 条件查询变量 |
|||
searchInfo: { |
|||
page: 1, |
|||
pagesize: 10 |
|||
}, |
|||
// 条件查询变量 |
|||
abc:{ |
|||
aaa:"111", |
|||
bbb:"222" |
|||
}, |
|||
// 添加时验证规则 |
|||
rules: { |
|||
title: [{ required: true, message: '请输入名称', trigger: 'blur' }], |
|||
}, |
|||
editRules:{ |
|||
title: [{ required: true, message: '请输入名称', trigger: 'blur' }], |
|||
} |
|||
} |
|||
}, |
|||
created() { |
|||
console.log(this.$store.state.user.token) |
|||
if (this.$store.state.user.token=='') { |
|||
this.$router.push('/login') |
|||
} |
|||
// 页面渲染时获取初始数据 |
|||
this.getDataList() |
|||
this.getJobList() |
|||
}, |
|||
methods: { |
|||
// 获取职务分类 |
|||
async getJobList(){ |
|||
const searchInfo = { |
|||
page: 1, //分页页码,数字类型 |
|||
pagesize: 100000, |
|||
} |
|||
const res = await utiesclasslist(searchInfo) |
|||
this.jobList = res.data.list |
|||
}, |
|||
// 删除操作 |
|||
//删除操作 |
|||
async deleteOperate(row) { |
|||
this.$confirm('此操作将永久删除, 是否继续?', '提示', { |
|||
confirmButtonText: '确定', |
|||
cancelButtonText: '取消', |
|||
type: 'warning' |
|||
}) |
|||
.then(async() => { |
|||
this.deleFrom.state=3; |
|||
this.deleFrom.id=row.id; |
|||
const res = await eitegovclassstateordel(this.deleFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '删除成功!' |
|||
}) |
|||
|
|||
this.getDataList() |
|||
} |
|||
}) |
|||
}, |
|||
// 新增按钮 |
|||
showAdd(){ |
|||
this.dialogFormVisible=true; |
|||
console.log(this.dialogFormVisible) |
|||
}, |
|||
// 编辑按钮 |
|||
async showEdit(row){ |
|||
this.editFrom.id=row.id |
|||
const res = await getgovclasscont(this.editFrom) |
|||
this.editAdd = res.data |
|||
// this.editAdd.jobtype=this.editAdd.jobtype.toString() |
|||
this.editDialogFormVisible=true; |
|||
|
|||
}, |
|||
// 开关状态监听 |
|||
async changeVal(val,id){ |
|||
console.log(val) |
|||
this.switchFrom.id=id |
|||
if (val==1) { |
|||
this.switchFrom.state=1; |
|||
const res = await eitegovclassstateordel(this.switchFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '修改状态成功', |
|||
showClose: true |
|||
}) |
|||
this.getDataList() |
|||
} |
|||
} else { |
|||
this.switchFrom.state=2; |
|||
const res = await eitegovclassstateordel(this.switchFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '修改状态成功', |
|||
showClose: true |
|||
}) |
|||
this.getDataList() |
|||
} |
|||
} |
|||
}, |
|||
// 重置搜索条件 |
|||
onReset() { |
|||
this.searchInfo = {} |
|||
}, |
|||
// 条件搜索 |
|||
onSubmit() { |
|||
this.page = 1 |
|||
this.pageSize = 10 |
|||
this.getDataList() |
|||
}, |
|||
// 日期时间戳转日期格式 |
|||
formatDate(nS) { |
|||
return new Date(parseInt(nS) * 1000).toLocaleString().replace(/:\d{1,2}$/,' '); |
|||
}, |
|||
|
|||
// 提交按钮 |
|||
async enterDialog(){ |
|||
this.$refs.addForm.validate(async valid => { |
|||
if (valid) { |
|||
const res = await addgovclass(this.form) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '添加成功', |
|||
showClose: true |
|||
}) |
|||
} |
|||
this.getDataList(); |
|||
this.closeDialog(); |
|||
} |
|||
}) |
|||
}, |
|||
|
|||
// 编辑提交按钮 |
|||
async editEnterDialog(){ |
|||
this.$refs.editForm.validate(async valid => { |
|||
if (valid) { |
|||
const res = await eitegovclasscont(this.editAdd) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '编辑成功', |
|||
showClose: true |
|||
}) |
|||
} |
|||
this.getDataList(); |
|||
this.editCloseDialog(); |
|||
} |
|||
}) |
|||
}, |
|||
// 添加框关闭 |
|||
closeDialog() { |
|||
console.log("closeDialog") |
|||
this.initForm() |
|||
this.dialogFormVisible = false |
|||
}, |
|||
// 修改框关闭 |
|||
editCloseDialog() { |
|||
this.editInitForm() |
|||
this.editDialogFormVisible = false |
|||
}, |
|||
// 添加重置表单 |
|||
initForm() { |
|||
console.log("initForm") |
|||
this.$refs.addForm.resetFields() |
|||
this.form = {} |
|||
console.log(this.form) |
|||
}, |
|||
// 修改重置表单 |
|||
editInitForm() { |
|||
this.$refs.editForm.resetFields() |
|||
this.editAdd = {} |
|||
}, |
|||
// 改变pageSize |
|||
handleSizeChange(val) { |
|||
this.searchInfo.pagesize=val |
|||
this.getDataList(this.searchInfo) |
|||
}, |
|||
// 改变page |
|||
handleCurrentChange(val) { |
|||
this.searchInfo.page=val |
|||
this.getDataList(this.searchInfo) |
|||
}, |
|||
// 获取初始数据 |
|||
async getDataList() { |
|||
const res = await govclasslist(this.searchInfo) |
|||
this.tableData = res.data.list |
|||
this.total = res.data.total |
|||
this.searchInfo.page = res.data.page |
|||
this.searchInfo.pagesize = res.data.pageSize |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.dashboard { |
|||
&-container { |
|||
margin: 30px; |
|||
} |
|||
&-text { |
|||
font-size: 30px; |
|||
line-height: 46px; |
|||
} |
|||
} |
|||
</style> |
|||
@ -0,0 +1,330 @@ |
|||
<template> |
|||
<!-- hr职务分类 --> |
|||
<div class="dashboard-container"> |
|||
<div class="gva-search-box"> |
|||
<el-form ref="searchForm" :inline="true" :model="searchInfo"> |
|||
<el-form-item label="职务分类名称"> |
|||
<el-input |
|||
placeholder="请输入名称" |
|||
v-model="searchInfo.name" |
|||
clearable> |
|||
</el-input> |
|||
</el-form-item> |
|||
<!-- <el-form-item label="考核维度状态"> |
|||
<el-select v-model="searchInfo.state" clearable placeholder="请选择状态"> |
|||
<el-option :value=1 label="正常">正常</el-option> |
|||
<el-option :value=2 label="禁止">禁止</el-option> |
|||
</el-select> |
|||
</el-form-item> --> |
|||
<el-form-item> |
|||
<el-button size="mini" type="primary" icon="el-icon-search" @click="onSubmit">查询</el-button> |
|||
<!-- <el-button size="mini" icon="el-icon-refresh" @click="onReset">重置</el-button> --> |
|||
</el-form-item> |
|||
</el-form> |
|||
</div> |
|||
<div class="gva-table-box"> |
|||
<div class="gva-btn-list"> |
|||
<el-button size="mini" type="primary" icon="el-icon-plus" @click="showAdd()">新增</el-button> |
|||
</div> |
|||
<el-table :data="tableData"> |
|||
<el-table-column align="left" label="职务分类ID" prop="id"/> |
|||
<el-table-column align="left" label="职务分类名称" prop="name"/> |
|||
<el-table-column align="left" label="职务分类状态"> |
|||
<template #default="scope"> |
|||
<el-switch |
|||
inline-prompt |
|||
active-text="正常" |
|||
inactive-text="禁止" |
|||
v-model="scope.row.state" |
|||
active-color="#13ce66" |
|||
inactive-color="#ff4949" |
|||
:active-value=1 |
|||
:inactive-value=2 |
|||
@change="changeVal($event,scope.row.id)" |
|||
/> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column align="left" fixed="right" label="操作" width="200"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
icon="el-icon-edit" |
|||
size="small" |
|||
type="text" |
|||
@click="showEdit(scope.row)" |
|||
>编辑</el-button> |
|||
<el-button |
|||
icon="el-icon-delete" |
|||
size="small" |
|||
type="text" |
|||
@click="deleteOperate(scope.row)" |
|||
>删除</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<div class="gva-pagination"> |
|||
<el-pagination |
|||
@size-change="handleSizeChange" |
|||
@current-change="handleCurrentChange" |
|||
:page-sizes="[10, 30, 50, 100]" |
|||
:page-size="searchInfo.pagesize" |
|||
layout="total, sizes, prev, pager, next, jumper" |
|||
:total="total"> |
|||
</el-pagination> |
|||
</div> |
|||
</div> |
|||
<!-- 新增弹框 --> |
|||
<el-dialog :visible.sync="dialogFormVisible" :before-close="closeDialog" title="新增" width="20%"> |
|||
<el-form ref="addForm" :model="form" :rules="rules" label-width="150px"> |
|||
<el-form-item label="职务分类名称" prop="name"> |
|||
<el-input v-model="form.name" autocomplete="off" /> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template #footer> |
|||
<div class="dialog-footer"> |
|||
<el-button size="small" @click="closeDialog">取 消</el-button> |
|||
<el-button size="small" type="primary" @click="enterDialog">确 定</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
<!-- 编辑弹框 --> |
|||
<el-dialog :visible.sync="editDialogFormVisible" :before-close="editCloseDialog" title="修改" width="20%"> |
|||
<el-form ref="editForm" :model="editAdd" :rules="editRules" label-width="150px"> |
|||
<el-form-item label="职务分类名称" prop="name"> |
|||
<el-input v-model="editAdd.name" autocomplete="off" /> |
|||
</el-form-item> |
|||
<!-- <el-form-item label="排序" prop="sort"> |
|||
<el-input v-model.number="editAdd.sort" autocomplete="off" /> |
|||
</el-form-item> --> |
|||
</el-form> |
|||
<template #footer> |
|||
<div class="dialog-footer"> |
|||
<el-button size="small" @click="editCloseDialog">取 消</el-button> |
|||
<el-button size="small" type="primary" @click="editEnterDialog">确 定</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { dutyclasslist,statedutyclass,eitedutyclassinfo,getdutyclassinfo,adddutyclass } from '@/api/duty/dimension' |
|||
import { utiesclasslist,delutiesclassinfo,eiteutiesclassinfo,getutiesclassinfo,adddutiesclass } from '@/api/personnel/post' |
|||
export default { |
|||
name: 'Dashboard', |
|||
data() { |
|||
return { |
|||
// 查询详情的数据 |
|||
editFrom:{}, |
|||
// 修改状态提交数据 |
|||
switchFrom:{}, |
|||
// 删除数据提交 |
|||
deleFrom:{}, |
|||
// 编辑时数据 |
|||
editAdd:{}, |
|||
assessList:{}, |
|||
// 添加数据 |
|||
form:{}, |
|||
// 弹窗变量 |
|||
dialogFormVisible:false, |
|||
// 修改弹窗 |
|||
editDialogFormVisible:false, |
|||
total: 0, |
|||
tableData:[], |
|||
// 条件查询变量 |
|||
searchInfo: { |
|||
page: 1, |
|||
pagesize: 10 |
|||
}, |
|||
// 条件查询变量 |
|||
abc:{ |
|||
aaa:"111", |
|||
bbb:"222" |
|||
}, |
|||
// 添加时验证规则 |
|||
rules: { |
|||
title: [{ required: true, message: '请输入名称', trigger: 'blur' }], |
|||
}, |
|||
editRules:{ |
|||
title: [{ required: true, message: '请输入名称', trigger: 'blur' }], |
|||
} |
|||
} |
|||
}, |
|||
created() { |
|||
console.log(this.$store.state.user.token) |
|||
if (this.$store.state.user.token=='') { |
|||
this.$router.push('/login') |
|||
} |
|||
// 页面渲染时获取初始数据 |
|||
this.getDataList() |
|||
}, |
|||
methods: { |
|||
// 删除操作 |
|||
//删除操作 |
|||
async deleteOperate(row) { |
|||
this.$confirm('此操作将永久删除, 是否继续?', '提示', { |
|||
confirmButtonText: '确定', |
|||
cancelButtonText: '取消', |
|||
type: 'warning' |
|||
}) |
|||
.then(async() => { |
|||
this.deleFrom.state=3; |
|||
this.deleFrom.id=row.id; |
|||
const res = await delutiesclassinfo(this.deleFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '删除成功!' |
|||
}) |
|||
|
|||
this.getDataList() |
|||
} |
|||
}) |
|||
}, |
|||
// 新增按钮 |
|||
showAdd(){ |
|||
this.dialogFormVisible=true; |
|||
console.log(this.dialogFormVisible) |
|||
}, |
|||
// 编辑按钮 |
|||
async showEdit(row){ |
|||
this.editFrom.id=row.id |
|||
const res = await getutiesclassinfo(this.editFrom) |
|||
this.editAdd = res.data |
|||
this.editDialogFormVisible=true; |
|||
|
|||
}, |
|||
// 开关状态监听 |
|||
async changeVal(val,id){ |
|||
console.log(val) |
|||
this.switchFrom.id=id |
|||
if (val==1) { |
|||
this.switchFrom.state=1; |
|||
const res = await eiteutiesclassinfo(this.switchFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '修改状态成功', |
|||
showClose: true |
|||
}) |
|||
this.getDataList() |
|||
} |
|||
} else { |
|||
this.switchFrom.state=2; |
|||
const res = await eiteutiesclassinfo(this.switchFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '修改状态成功', |
|||
showClose: true |
|||
}) |
|||
this.getDataList() |
|||
} |
|||
} |
|||
}, |
|||
// 重置搜索条件 |
|||
onReset() { |
|||
this.searchInfo = {} |
|||
}, |
|||
// 条件搜索 |
|||
onSubmit() { |
|||
this.page = 1 |
|||
this.pageSize = 10 |
|||
this.getDataList() |
|||
}, |
|||
// 日期时间戳转日期格式 |
|||
formatDate(nS) { |
|||
return new Date(parseInt(nS) * 1000).toLocaleString().replace(/:\d{1,2}$/,' '); |
|||
}, |
|||
|
|||
// 提交按钮 |
|||
async enterDialog(){ |
|||
|
|||
this.$refs.addForm.validate(async valid => { |
|||
if (valid) { |
|||
const res = await adddutiesclass(this.form) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '添加成功', |
|||
showClose: true |
|||
}) |
|||
} |
|||
this.getDataList(); |
|||
this.closeDialog(); |
|||
} |
|||
}) |
|||
}, |
|||
|
|||
// 编辑提交按钮 |
|||
async editEnterDialog(){ |
|||
this.$refs.editForm.validate(async valid => { |
|||
if (valid) { |
|||
const res = await eiteutiesclassinfo(this.editAdd) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '编辑成功', |
|||
showClose: true |
|||
}) |
|||
} |
|||
this.getDataList(); |
|||
this.editCloseDialog(); |
|||
} |
|||
}) |
|||
}, |
|||
// 添加框关闭 |
|||
closeDialog() { |
|||
console.log("closeDialog") |
|||
this.initForm() |
|||
this.dialogFormVisible = false |
|||
}, |
|||
// 修改框关闭 |
|||
editCloseDialog() { |
|||
this.editInitForm() |
|||
this.editDialogFormVisible = false |
|||
}, |
|||
// 添加重置表单 |
|||
initForm() { |
|||
console.log("initForm") |
|||
this.$refs.addForm.resetFields() |
|||
this.form = {} |
|||
console.log(this.form) |
|||
}, |
|||
// 修改重置表单 |
|||
editInitForm() { |
|||
this.$refs.editForm.resetFields() |
|||
this.editAdd = {} |
|||
}, |
|||
// 改变pageSize |
|||
handleSizeChange(val) { |
|||
this.searchInfo.pagesize=val |
|||
this.getDataList(this.searchInfo) |
|||
}, |
|||
// 改变page |
|||
handleCurrentChange(val) { |
|||
this.searchInfo.page=val |
|||
this.getDataList(this.searchInfo) |
|||
}, |
|||
// 获取初始数据 |
|||
async getDataList() { |
|||
const res = await utiesclasslist(this.searchInfo) |
|||
this.tableData = res.data.list |
|||
this.total = res.data.total |
|||
this.searchInfo.page = res.data.page |
|||
this.searchInfo.pagesize = res.data.pageSize |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.dashboard { |
|||
&-container { |
|||
margin: 30px; |
|||
} |
|||
&-text { |
|||
font-size: 30px; |
|||
line-height: 46px; |
|||
} |
|||
} |
|||
</style> |
|||
@ -0,0 +1,581 @@ |
|||
<template> |
|||
<!-- 定量考核打分 --> |
|||
<div class="dashboard-container"> |
|||
<div class="gva-search-box"> |
|||
<el-form ref="searchForm" :inline="true" :model="searchInfo"> |
|||
|
|||
<el-form-item label="所属部门" prop="title"> |
|||
<el-cascader filterable clearable v-model="searchInfo.departmentid" :options="departmentList" :show-all-levels="false" :props="props1"></el-cascader> |
|||
|
|||
</el-form-item> |
|||
<el-form-item label="指标名称"> |
|||
<el-input |
|||
placeholder="请输入名称" |
|||
v-model="searchInfo.title" |
|||
clearable> |
|||
</el-input> |
|||
</el-form-item> |
|||
<!-- <el-cascader clearable v-model="searchInfo.departmentid" :options="grouplist" :show-all-levels="false" :props="props"></el-cascader> --> |
|||
|
|||
<el-form-item> |
|||
<el-button size="mini" type="primary" icon="el-icon-search" @click="onSubmit">查询</el-button> |
|||
<!-- <el-button size="mini" icon="el-icon-refresh" @click="onReset">重置</el-button> --> |
|||
</el-form-item> |
|||
</el-form> |
|||
</div> |
|||
<div class="gva-table-box"> |
|||
<!-- <div class="gva-btn-list"> |
|||
<el-button size="mini" type="primary" icon="el-icon-plus" @click="showAdd()">新增</el-button> |
|||
</div> --> |
|||
<el-table :data="tableData" border :span-method="objectSpanMethod"> |
|||
<el-table-column align="left" label="部门" prop="parentname"/> |
|||
<el-table-column align="left" label="考核指标" prop="targetname"/> |
|||
|
|||
<el-table-column align="left" label="全奖值" prop="unit" width="65"> |
|||
<template slot-scope="scope"> |
|||
{{scope.row.allprize}} |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column align="left" label="零奖值" prop="unit" width="65"> |
|||
<template slot-scope="scope"> |
|||
{{scope.row.zeroprize}} |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column align="left" label="封顶值" prop="unit" width="65"> |
|||
<template slot-scope="scope"> |
|||
{{scope.row.cappingcal}}% |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column align="left" label="考核说明" prop="content"/> |
|||
<el-table-column align="left" label="指标权重分" prop="targetweight" width="100"/> |
|||
<el-table-column align="left" label="实际值" prop="actual"> |
|||
<template slot-scope="scope"> |
|||
<el-input @input="inputActual(scope.row,scope.$index)" v-model="scope.row.actual" autocomplete="off"/> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column align="left" label="得分" prop="actual"> |
|||
<template slot-scope="scope"> |
|||
<el-input v-if="scope.row.scoringmethod==2" v-model="scope.row.scoringscore" autocomplete="off"/> |
|||
<div v-if="scope.row.scoringmethod==1">{{scope.row.scoringscore}}</div> |
|||
|
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column align="left" label="达成率" prop="reach"/> |
|||
<!-- <el-table-column align="left" label="单位" prop="unit"/> |
|||
<el-table-column align="left" label="分数" prop="score"> |
|||
<template slot-scope="scope"> |
|||
<el-input v-model.number="scope.row.score" autocomplete="off"/> |
|||
</template> |
|||
</el-table-column> --> |
|||
<el-table-column align="left" label="说明" prop="score"> |
|||
<template slot-scope="scope"> |
|||
<el-input v-model="scope.row.reason" autocomplete="off"/> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column align="left" label="流程" width="100"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
icon="el-icon-view" |
|||
size="small" |
|||
type="text" |
|||
@click="showProcess(scope.row)" |
|||
>查看流程</el-button> |
|||
<!-- <el-button |
|||
icon="el-icon-remove-outline" |
|||
size="small" |
|||
type="text" |
|||
@click="showJian(scope.row)" |
|||
>减分</el-button> --> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column align="left" label="考核周期"> |
|||
<template slot-scope="scope"> |
|||
<el-date-picker |
|||
style="width:120px" |
|||
v-model="scope.row.month" |
|||
type="month" |
|||
value-format="yyyy-MM" |
|||
placeholder="请选择"> |
|||
</el-date-picker> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column align="left" fixed="right" label="操作"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
icon="el-icon-circle-plus-outline" |
|||
size="small" |
|||
type="text" |
|||
@click="tijiao(scope.row)" |
|||
>提交</el-button> |
|||
<!-- <el-button |
|||
icon="el-icon-remove-outline" |
|||
size="small" |
|||
type="text" |
|||
@click="showJian(scope.row)" |
|||
>减分</el-button> --> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- <el-button size="small" type="primary" @click="tijiao">提 交</el-button> --> |
|||
</div> |
|||
<!-- 新增弹框 --> |
|||
<el-dialog :close-on-click-modal="false" :visible.sync="dialogFormVisible" title="流程详情" width="20%"> |
|||
<el-card class="box-card"> |
|||
<el-steps direction="vertical" :active="buzhou"> |
|||
<el-step v-for="(item,index) in processData" :key="index" :title="item.nodename" icon="el-icon-circle-check" > |
|||
<template slot="description"> |
|||
<div style="color: rgb(153,153,153);" v-for="(a,userlistIndex) in item.userlist" :key="userlistIndex"> |
|||
<el-row> |
|||
<el-col :span="4" v-if="a.log!=null"> |
|||
<el-badge is-dot type="primary "> |
|||
<el-avatar style="margin-right: 5px;" shape="square" size="small" :src="a.icon"></el-avatar> |
|||
</el-badge> |
|||
</el-col> |
|||
<el-col :span="4" v-else> |
|||
<el-avatar style="margin-right: 5px;" shape="square" size="small" :src="a.icon"></el-avatar> |
|||
</el-col> |
|||
<el-col :span="20" style="margin-top: -5px;"> |
|||
{{a.workshopname}}-{{a.postname}}-{{a.name}} |
|||
<el-row> |
|||
<div v-for="(i,logIndex) in a.log" :key="logIndex"> |
|||
<div class="left" v-if="i.state==2">已同意 · </div> |
|||
<div class="left" v-if="i.state==1" type="info">未操作 · </div> |
|||
<div class="left" v-if="i.state==3" type="danger">驳回 · </div> |
|||
<div class="left">{{i.time}}</div> |
|||
</div> |
|||
</el-row> |
|||
</el-col> |
|||
</el-row> |
|||
</div> |
|||
</template> |
|||
</el-step> |
|||
</el-steps> |
|||
|
|||
</el-card> |
|||
</el-dialog> |
|||
<!-- 编辑弹框 --> |
|||
<el-dialog :close-on-click-modal="false" :visible.sync="editDialogFormVisible" :before-close="editCloseDialog" title="修改" width="20%"> |
|||
<el-form ref="editForm" :model="editAdd" :rules="editRules" label-width="150px"> |
|||
<el-form-item label="考核维度名称" prop="title"> |
|||
<el-input v-model="editAdd.title" autocomplete="off" /> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template #footer> |
|||
<div class="dialog-footer"> |
|||
<el-button size="small" @click="editCloseDialog">取 消</el-button> |
|||
<el-button size="small" type="primary" @click="editEnterDialog">确 定</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { examineflow,qualitativeevalration,getgroupdepartmap,addflowrationlog,departmentlist,quanOperation } from '@/api/api/dutys' |
|||
export default { |
|||
name: 'Dashboard', |
|||
data() { |
|||
return { |
|||
month:'', |
|||
fromData:[], |
|||
buzhou:0, |
|||
props1: { |
|||
checkStrictly: true, |
|||
value: "id", |
|||
label: "name", |
|||
children: "children", |
|||
emitPath:false, |
|||
}, |
|||
props: { |
|||
value: "id", |
|||
label: "name", |
|||
children: "children", |
|||
emitPath:false, |
|||
multiple: false |
|||
}, |
|||
processData:[], |
|||
// 部门列表 |
|||
grouplist:[], |
|||
// 查询详情的数据 |
|||
editFrom:{}, |
|||
// 修改状态提交数据 |
|||
switchFrom:{}, |
|||
// 删除数据提交 |
|||
deleFrom:{}, |
|||
// 编辑时数据 |
|||
editAdd:{}, |
|||
assessList:{}, |
|||
// 添加数据 |
|||
form:{}, |
|||
spanArr:[], |
|||
pos:'', |
|||
// 弹窗变量 |
|||
dialogFormVisible:false, |
|||
// 修改弹窗 |
|||
editDialogFormVisible:false, |
|||
total: 0, |
|||
tableData:[], |
|||
// 条件查询变量 |
|||
searchInfo: { |
|||
groupid:'', |
|||
departmentid:'' |
|||
}, |
|||
// 部门列表 |
|||
departmentList:[], |
|||
// 条件查询变量 |
|||
abc:{ |
|||
aaa:"111", |
|||
bbb:"222" |
|||
}, |
|||
// 添加时验证规则 |
|||
rules: { |
|||
title: [{ required: true, message: '请输入名称', trigger: 'blur' }], |
|||
}, |
|||
editRules:{ |
|||
title: [{ required: true, message: '请输入名称', trigger: 'blur' }], |
|||
} |
|||
} |
|||
}, |
|||
async created() { |
|||
console.log(this.$store.state.user.token) |
|||
if (this.$store.state.user.token=='') { |
|||
this.$router.push('/login') |
|||
} |
|||
this.getGrouplist() |
|||
// this.$alert('请选择部门后再操作', '提示', { |
|||
// confirmButtonText: '确定', |
|||
|
|||
// }); |
|||
this.getChuDataList() |
|||
// this.getDataList() |
|||
}, |
|||
// 监听数据 |
|||
watch: { |
|||
tableData() { |
|||
this.$nextTick(() => { |
|||
this.spanArr=[], |
|||
this.pos='', |
|||
//此时就可以获取到在created赋值后的dataList了 |
|||
this.getSpanArr(this.tableData); |
|||
}); |
|||
}, |
|||
// } |
|||
}, |
|||
methods: { |
|||
// 查看流程 |
|||
async showProcess(row){ |
|||
this.buzhou=0 |
|||
const processFrom ={ |
|||
id:row.id |
|||
} |
|||
const res = await examineflow(processFrom) |
|||
this.processData=res.data |
|||
this.processData.forEach(element => { |
|||
if (element.state==2) { |
|||
this.buzhou=this.buzhou+1 |
|||
} |
|||
}); |
|||
this.dialogFormVisible=true |
|||
}, |
|||
// 公式换算 |
|||
// (实际值—零奖值)/(全奖值-零奖值)*100+‘%’ |
|||
inputActual(val,index){ |
|||
console.log(val) |
|||
console.log(index) |
|||
var a = val.actual-val.zeroprize |
|||
var b = val.allprize-val.zeroprize |
|||
// var a = 5-2 |
|||
// var b = 6-1 |
|||
console.log(a/b*100+'%') |
|||
if (a/b*100!=Infinity) { |
|||
var e =a/b*100 |
|||
var d |
|||
console.log("e") |
|||
console.log(e) |
|||
if (e>this.tableData[index].cappingcal) { |
|||
d=this.tableData[index].targetweight*this.tableData[index].cappingcal/100 |
|||
} else{ |
|||
var d =parseFloat(this.tableData[index].targetweight*(a/b)).toFixed(2) |
|||
} |
|||
var c =parseFloat(a/b*100).toFixed(2) |
|||
this.tableData[index].reach=c+'%' |
|||
this.tableData[index].scoringscore=d |
|||
if (c<0) { |
|||
this.tableData[index].reach=0+'%' |
|||
} |
|||
if (d<0) { |
|||
this.tableData[index].scoringscore=0 |
|||
} |
|||
// this.tableData[index].reach=a/b*100+'%' |
|||
// this.tableData[index].scoringscore=this.tableData[index].targetweight*a/b |
|||
} |
|||
if (a/b*100==Infinity) { |
|||
this.tableData[index].reach="数据错误/未设置全奖值,零奖值" |
|||
this.tableData[index].scoringscore="数据错误/未设置全奖值,零奖值" |
|||
} |
|||
}, |
|||
// 获取部门 |
|||
async getGrouplist(){ |
|||
const departmentFrom={ |
|||
id:2 |
|||
} |
|||
const res = await departmentlist(departmentFrom) |
|||
this.departmentList=res.data |
|||
|
|||
}, |
|||
// 提交 |
|||
tijiao(row){ |
|||
this.$confirm('批量提交, 是否继续?', '提示', { |
|||
confirmButtonText: '确定', |
|||
cancelButtonText: '取消', |
|||
type: 'warning' |
|||
}).then(async() => { |
|||
this.fromData=[], |
|||
this.tableData.forEach(ele=>{ |
|||
if (ele.parentid==row.parentid) { |
|||
this.fromData.push(ele) |
|||
} |
|||
}) |
|||
console.log("提交") |
|||
this.fromData.forEach(ele=>{ |
|||
ele.scoringscore=parseFloat(ele.scoringscore) |
|||
}) |
|||
console.log(this.fromData) |
|||
console.log(this.fromData[0].month,) |
|||
const from ={ |
|||
groupid: '2', |
|||
departmentid: row.parentid.toString(), |
|||
planversionnumber:this.fromData[0].planversionnumber, |
|||
time:this.fromData[0].month, |
|||
list:this.fromData |
|||
} |
|||
|
|||
const res = await quanOperation(from) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: res.msg |
|||
}) |
|||
} |
|||
}) |
|||
|
|||
|
|||
}, |
|||
// 部门列合并 |
|||
getSpanArr(data) { |
|||
// data就是我们从后台拿到的数据 |
|||
for (var i = 0; i < data.length; i++) { |
|||
if (i === 0) { |
|||
this.spanArr.push(1); |
|||
this.pos = 0; |
|||
} else { |
|||
// 判断当前元素与上一个元素是否相同 |
|||
if (data[i].parentid === data[i - 1].parentid) { |
|||
this.spanArr[this.pos] += 1; |
|||
this.spanArr.push(0); |
|||
} else { |
|||
this.spanArr.push(1); |
|||
this.pos = i; |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
// 合并行 |
|||
objectSpanMethod({ row, column, rowIndex, columnIndex }) { |
|||
if (columnIndex === 0||columnIndex ===12||columnIndex ===13) { |
|||
const _row = this.spanArr[rowIndex]; |
|||
const _col = _row > 0 ? 1 : 0; |
|||
console.log(`rowspan:${_row} colspan:${_col}`); |
|||
return { |
|||
// [0,0] 表示这一行不显示, [2,1]表示行的合并数 |
|||
rowspan: _row, |
|||
colspan: _col |
|||
}; |
|||
} |
|||
}, |
|||
// 删除操作 |
|||
//删除操作 |
|||
async deleteOperate(row) { |
|||
this.$confirm('此操作将永久删除, 是否继续?', '提示', { |
|||
confirmButtonText: '确定', |
|||
cancelButtonText: '取消', |
|||
type: 'warning' |
|||
}) |
|||
.then(async() => { |
|||
this.deleFrom.state=3; |
|||
this.deleFrom.outid=row.outId; |
|||
const res = await statedutyclass(this.deleFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '删除成功!' |
|||
}) |
|||
|
|||
this.getDataList() |
|||
} |
|||
}) |
|||
}, |
|||
// 新增按钮 |
|||
showAdd(){ |
|||
this.dialogFormVisible=true; |
|||
console.log(this.dialogFormVisible) |
|||
}, |
|||
// 编辑按钮 |
|||
async showEdit(row){ |
|||
this.editFrom.outid=row.outId |
|||
const res = await getdutyclassinfo(this.editFrom) |
|||
this.editAdd = res.data |
|||
this.editDialogFormVisible=true; |
|||
|
|||
}, |
|||
// 开关状态监听 |
|||
async changeVal(val,id){ |
|||
console.log(val) |
|||
this.switchFrom.outid=id |
|||
if (val==1) { |
|||
this.switchFrom.state=1; |
|||
const res = await statedutyclass(this.switchFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '修改状态成功', |
|||
showClose: true |
|||
}) |
|||
this.getDataList() |
|||
} |
|||
} else { |
|||
this.switchFrom.state=2; |
|||
const res = await statedutyclass(this.switchFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '修改状态成功', |
|||
showClose: true |
|||
}) |
|||
this.getDataList() |
|||
} |
|||
} |
|||
}, |
|||
// 重置搜索条件 |
|||
onReset() { |
|||
this.searchInfo = {} |
|||
}, |
|||
// 条件搜索 |
|||
onSubmit() { |
|||
this.getDataList() |
|||
}, |
|||
// 日期时间戳转日期格式 |
|||
formatDate(nS) { |
|||
return new Date(parseInt(nS) * 1000).toLocaleString().replace(/:\d{1,2}$/,' '); |
|||
}, |
|||
|
|||
// 提交按钮 |
|||
async enterDialog(){ |
|||
const res = await adddutyclass(this.form) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '添加成功', |
|||
showClose: true |
|||
}) |
|||
} |
|||
this.getDataList(); |
|||
this.closeDialog(); |
|||
|
|||
}, |
|||
|
|||
// 编辑提交按钮 |
|||
async editEnterDialog(){ |
|||
this.$refs.editForm.validate(async valid => { |
|||
if (valid) { |
|||
const res = await eitedutyclassinfo(this.editAdd) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '编辑成功', |
|||
showClose: true |
|||
}) |
|||
} |
|||
this.getDataList(); |
|||
this.editCloseDialog(); |
|||
} |
|||
}) |
|||
}, |
|||
// 添加框关闭 |
|||
closeDialog() { |
|||
console.log("closeDialog") |
|||
this.initForm() |
|||
this.dialogFormVisible = false |
|||
}, |
|||
// 修改框关闭 |
|||
editCloseDialog() { |
|||
this.editInitForm() |
|||
this.editDialogFormVisible = false |
|||
}, |
|||
// 添加重置表单 |
|||
initForm() { |
|||
console.log("initForm") |
|||
this.$refs.addForm.resetFields() |
|||
this.form = {} |
|||
console.log(this.form) |
|||
}, |
|||
// 修改重置表单 |
|||
editInitForm() { |
|||
this.$refs.editForm.resetFields() |
|||
this.editAdd = {} |
|||
}, |
|||
// 改变pageSize |
|||
handleSizeChange(val) { |
|||
this.searchInfo.pagesize=val |
|||
this.getDataList(this.searchInfo) |
|||
}, |
|||
// 改变page |
|||
handleCurrentChange(val) { |
|||
this.searchInfo.page=val |
|||
this.getDataList(this.searchInfo) |
|||
}, |
|||
// 获取初始数据 |
|||
async getDataList() { |
|||
const bumen =JSON.parse(JSON.stringify(this.searchInfo.departmentid)) |
|||
|
|||
const from={ |
|||
groupid:'2', |
|||
departmentid:'', |
|||
title:'' |
|||
} |
|||
console.log(bumen+'') |
|||
from.title=this.searchInfo.title |
|||
from.departmentid=bumen.toString(); |
|||
const res = await qualitativeevalration(from) |
|||
this.tableData = res.data |
|||
}, |
|||
// 获取初始数据 |
|||
async getChuDataList() { |
|||
|
|||
|
|||
const from={ |
|||
groupid:'2', |
|||
|
|||
} |
|||
|
|||
const res = await qualitativeevalration(from) |
|||
this.tableData = res.data |
|||
this.tableData.forEach(ele=>{ |
|||
this.$set(ele, 'scoringscore', 0) |
|||
}) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.dashboard { |
|||
&-container { |
|||
margin: 30px; |
|||
} |
|||
&-text { |
|||
font-size: 30px; |
|||
line-height: 46px; |
|||
} |
|||
} |
|||
</style> |
|||
@ -0,0 +1,657 @@ |
|||
<template> |
|||
<!-- 岗位设置 --> |
|||
<div class="dashboard-container"> |
|||
<div class="gva-search-box"> |
|||
<el-form ref="searchForm" :inline="true" :model="searchInfo"> |
|||
<el-form-item label="名称"> |
|||
<el-input |
|||
placeholder="请输入名称" |
|||
v-model="searchInfo.name" |
|||
clearable> |
|||
</el-input> |
|||
</el-form-item> |
|||
<!-- <el-form-item label="考核维度状态"> |
|||
<el-select v-model="searchInfo.state" clearable placeholder="请选择状态"> |
|||
<el-option :value=1 label="正常">正常</el-option> |
|||
<el-option :value=2 label="禁止">禁止</el-option> |
|||
</el-select> |
|||
</el-form-item> --> |
|||
<el-form-item> |
|||
<el-button size="mini" type="primary" icon="el-icon-search" @click="onSubmit">查询</el-button> |
|||
<el-button size="mini" icon="el-icon-refresh" @click="onReset">重置</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</div> |
|||
<div class="gva-table-box"> |
|||
<div class="gva-btn-list"> |
|||
<el-button size="mini" type="primary" icon="el-icon-plus" @click="showAdd()">新增</el-button> |
|||
</div> |
|||
<el-table :data="tableData"> |
|||
<el-table-column align="left" label="编号" min-width="100" prop="number" /> |
|||
<el-table-column align="left" label="职务名称" prop="name" /> |
|||
<el-table-column align="left" label="归属行政组织名称"> |
|||
<template #default="scope"> |
|||
{{scope.row.departmentname}} / {{scope.row.aoname}} |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column align="left" label="归属职务类别" prop="jobname" /> |
|||
<el-table-column align="left" label="权限设置" prop="jobname"> |
|||
<template #default="scope"> |
|||
<el-button icon="el-icon-s-tools" @click="setting(scope.row)"></el-button> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column align="left" label="状态" min-width="140" prop="authorityName"> |
|||
<template #default="scope"> |
|||
<el-switch |
|||
inline-prompt |
|||
active-text="正常" |
|||
inactive-text="禁止" |
|||
v-model="scope.row.state" |
|||
active-color="#13ce66" |
|||
inactive-color="#ff4949" |
|||
:active-value=1 |
|||
:inactive-value=2 |
|||
@change="changeVal($event,scope.row.id)" |
|||
/> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column align="left" fixed="right" label="操作" width="300"> |
|||
<template #default="scope"> |
|||
<!-- <el-button |
|||
size="mini" |
|||
type="text" |
|||
icon="el-icon-plus" |
|||
@click="addSonMenu(scope.row)" |
|||
>添加子菜单</el-button> --> |
|||
<el-button |
|||
size="mini" |
|||
type="text" |
|||
icon="el-icon-edit" |
|||
@click="editMenu(scope.row)" |
|||
>编辑</el-button> |
|||
<el-button |
|||
size="mini" |
|||
type="text" |
|||
icon="el-icon-delete" |
|||
@click="deleteMenu(scope.row)" |
|||
>删除</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<div class="gva-pagination"> |
|||
<el-pagination |
|||
@size-change="handleSizeChange" |
|||
@current-change="handleCurrentChange" |
|||
:page-sizes="[10, 30, 50, 100]" |
|||
:page-size="searchInfo.pagesize" |
|||
layout="total, sizes, prev, pager, next, jumper" |
|||
:total="total"> |
|||
</el-pagination> |
|||
</div> |
|||
</div> |
|||
<!-- 新增弹框 --> |
|||
<el-dialog :visible.sync="dialogFormVisible" :before-close="closeDialog" :close-on-click-modal="false" title="新增" width="20%"> |
|||
<el-form ref="addForm" :model="form" :rules="rules" label-width="150px"> |
|||
<el-form-item label="岗位名称"> |
|||
<el-input v-model="form.name"/> |
|||
</el-form-item> |
|||
<!-- <el-form-item label="所属栏目"> |
|||
<el-cascader |
|||
:options="options" |
|||
:props="{ checkStrictly: true }" |
|||
clearable></el-cascader> |
|||
</el-form-item> --> |
|||
<el-form-item label="岗位编号"> |
|||
<el-input v-model="form.number"/> |
|||
</el-form-item> |
|||
<el-form-item label="负责人"> |
|||
<el-select v-model="form.incharge" clearable placeholder="请选择状态"> |
|||
<el-option :value=1 label="是">是</el-option> |
|||
<el-option :value=2 label="否">否</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="职务"> |
|||
<el-select v-model="form.duties" filterable clearable placeholder="请选择职务"> |
|||
<el-option |
|||
v-for="item in JobTitleList" |
|||
:key="item.id" |
|||
:label="item.name" |
|||
:value="item.id"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="组织机构"> |
|||
<!-- <el-cascader clearable v-model="form.organization" :options="GovthreeList" :show-all-levels="false" :props="userProps"></el-cascader> --> |
|||
<el-cascader |
|||
filterable |
|||
:show-all-levels="false" |
|||
v-model="form.organization" |
|||
:options="GovthreeList" |
|||
:props="userProps" |
|||
clearable></el-cascader> |
|||
</el-form-item> |
|||
<el-form-item label="部门"> |
|||
<!-- <el-cascader clearable v-model="form.organization" :options="GovthreeList" :show-all-levels="false" :props="userProps"></el-cascader> --> |
|||
<el-cascader |
|||
filterable |
|||
:show-all-levels="false" |
|||
v-model="form.department" |
|||
:options="BuMenthreeList" |
|||
:props="userProps1" |
|||
@change="departmentSelect" |
|||
clearable></el-cascader> |
|||
</el-form-item> |
|||
<el-form-item label="上级职务"> |
|||
<el-select filterable v-model="form.superior" clearable placeholder="请选择职务"> |
|||
<el-option :value=1 label="总经理">总经理</el-option> |
|||
<el-option |
|||
v-for="item in PostList" |
|||
:key="item.id" |
|||
:label="item.name+item.number" |
|||
:value="item.id"> |
|||
</el-option> |
|||
|
|||
</el-select> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template #footer> |
|||
<div class="dialog-footer"> |
|||
<el-button size="small" @click="closeDialog">取 消</el-button> |
|||
<el-button size="small" type="primary" @click="enterDialog">确 定</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
<!-- 新增子菜单弹框 --> |
|||
<el-dialog :visible.sync="addSonShow" :before-close="closeSonDialog" title="新增子菜单" width="20%"> |
|||
<el-form :model="addSonMenuData" label-width="150px"> |
|||
<el-form-item label="栏目名称"> |
|||
<el-input v-model="addSonMenuData.title"/> |
|||
</el-form-item> |
|||
<!-- <el-form-item label="所属栏目"> |
|||
<el-cascader |
|||
:options="options" |
|||
:props="{ checkStrictly: true }" |
|||
clearable></el-cascader> |
|||
</el-form-item> --> |
|||
|
|||
<el-form-item label="栏目路径"> |
|||
<el-input v-model="addSonMenuData.menuurl"/> |
|||
</el-form-item> |
|||
<el-form-item label="排序"> |
|||
<el-input v-model="addSonMenuData.sort"/> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template #footer> |
|||
<div class="dialog-footer"> |
|||
<el-button size="small" @click="closeSonDialog">取 消</el-button> |
|||
<el-button size="small" type="primary" @click="enterSonDialog">确 定</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
<!-- 编辑弹框 --> |
|||
<el-dialog :visible.sync="editDialogFormVisible" :before-close="editCloseDialog" title="修改" width="20%"> |
|||
<el-form ref="editForm" :model="editAdd" :rules="editRules" label-width="150px"> |
|||
<el-form-item label="栏目名称"> |
|||
<el-input v-model="editAdd.title"/> |
|||
</el-form-item> |
|||
<!-- <el-form-item label="所属栏目"> |
|||
<el-cascader |
|||
:options="options" |
|||
:props="{ checkStrictly: true }" |
|||
clearable></el-cascader> |
|||
</el-form-item> --> |
|||
|
|||
<el-form-item label="栏目路径"> |
|||
<el-input v-model="editAdd.apiUrl"/> |
|||
</el-form-item> |
|||
<el-form-item label="排序"> |
|||
<el-input v-model="editAdd.sort"/> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template #footer> |
|||
<div class="dialog-footer"> |
|||
<el-button size="small" @click="editCloseDialog">取 消</el-button> |
|||
<el-button size="small" type="primary" @click="editEnterDialog">确 定</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
<!-- 权限设置弹窗 --> |
|||
<el-dialog :visible.sync="settingTree" title="权限配置" width="40%"> |
|||
<el-form ref="editForm" :model="editAdd" :rules="editRules" label-width="150px"> |
|||
|
|||
</el-form> |
|||
<el-tree |
|||
:data="positionroleList" |
|||
check-strictly=true |
|||
show-checkbox |
|||
default-expand-all |
|||
node-key="id" |
|||
ref="tree" |
|||
:default-checked-keys="checkList" |
|||
highlight-current |
|||
:props="defaultProps"> |
|||
</el-tree> |
|||
<template #footer> |
|||
<div class="dialog-footer"> |
|||
<el-button size="small" @click="editCloseDialog">取 消</el-button> |
|||
<el-button size="small" type="primary" @click="settingFrom">确 定</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { dutyclasslist,statedutyclass,eitedutyclassinfo,getdutyclassinfo,adddutyclass } from '@/api/duty/dimension' |
|||
import { systemmenulist,addmenu,eitemenu,delmenu,addmenuoperation,delmenuperation } from '@/api/user' |
|||
import { getpositionrole,positionlist,addpositioncont,getpositioncont,eitepositionstateordel,eitepositioncont,dutieslist,govthree,positionallotment } from '@/api/personnel/post' |
|||
|
|||
export default { |
|||
name: 'Dashboard', |
|||
data() { |
|||
return { |
|||
// 回显选中 |
|||
checkList:[], |
|||
// 权限树配置 |
|||
defaultProps:{ |
|||
children: 'child', |
|||
label: 'title', |
|||
|
|||
}, |
|||
// 权限树 |
|||
positionroleList:[], |
|||
// 权限设置弹窗布尔 |
|||
settingTree:false, |
|||
// 职务列表 |
|||
PostList:[], |
|||
// 多级选择配置 |
|||
userProps: { |
|||
value: "id", |
|||
label: "name", |
|||
children: "child", |
|||
checkStrictly: true, |
|||
emitPath:false, |
|||
}, |
|||
// 多级选择配置 |
|||
userProps1: { |
|||
value: "id", |
|||
label: "name", |
|||
children: "child", |
|||
checkStrictly: true, |
|||
emitPath:false, |
|||
}, |
|||
// 部门树 |
|||
BuMenthreeList:[], |
|||
// 行政组织树 |
|||
GovthreeList:[], |
|||
// 职务列表数据 |
|||
JobTitleList:[], |
|||
// 查询详情的数据 |
|||
editFrom:{}, |
|||
// 修改状态提交数据 |
|||
switchFrom:{}, |
|||
// 删除数据提交 |
|||
deleFrom:{}, |
|||
// 编辑时数据 |
|||
editAdd:{ |
|||
|
|||
}, |
|||
assessList:{}, |
|||
// 添加数据 |
|||
form:{ |
|||
type:1, |
|||
}, |
|||
settingId:'', |
|||
// 弹窗变量 |
|||
dialogFormVisible:false, |
|||
addSonMenuData:{}, |
|||
// 修改弹窗 |
|||
editDialogFormVisible:false, |
|||
// 添加子菜单弹窗 |
|||
addSonShow:false, |
|||
total: 0, |
|||
tableData:[], |
|||
// 条件查询变量 |
|||
searchInfo: { |
|||
page: 1, |
|||
pagesize: 10 |
|||
}, |
|||
// 条件查询变量 |
|||
abc:{ |
|||
aaa:"111", |
|||
bbb:"222" |
|||
}, |
|||
// 添加时验证规则 |
|||
rules: { |
|||
title: [{ required: true, message: '请输入名称', trigger: 'blur' }], |
|||
}, |
|||
editRules:{ |
|||
title: [{ required: true, message: '请输入名称', trigger: 'blur' }], |
|||
} |
|||
} |
|||
}, |
|||
created() { |
|||
console.log(this.$store.state.user.token) |
|||
if (this.$store.state.user.token=='') { |
|||
this.$router.push('/login') |
|||
} |
|||
// 页面渲染时获取初始数据 |
|||
this.getPostList() |
|||
this.getDataList() |
|||
this.getJobTitleList() |
|||
this.getGovthree() |
|||
this.getBuMenthree() |
|||
}, |
|||
methods: { |
|||
// 权限设置提交 |
|||
async settingFrom(){ |
|||
const from = { |
|||
id: this.settingId.toString(), //岗位(职位) ID |
|||
menupermit: this.$refs.tree.getCheckedKeys(), //菜单权限 |
|||
buttonpermit: [] //按钮权限 |
|||
} |
|||
|
|||
const res = await positionallotment(from) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '设置成功!' |
|||
}) |
|||
|
|||
this.getDataList() |
|||
} |
|||
this.settingTree = false |
|||
console.log(); |
|||
|
|||
}, |
|||
// 获取权限设置树 |
|||
async setting(row){ |
|||
const from = { |
|||
id: row.id, //二者必填一个 |
|||
} |
|||
this.settingId=row.id |
|||
const res = await getpositionrole(from) |
|||
this.positionroleList = res.data |
|||
this.setName(this.positionroleList) |
|||
console.log(this.checkList) |
|||
this.settingTree = true |
|||
|
|||
}, |
|||
setName(datas){ //遍历树 获取id数组 |
|||
for(var i in datas){ |
|||
if (i.istrue==true) { |
|||
console.log("456") |
|||
this.checkList.push(i.id) |
|||
} |
|||
console.log("setName") |
|||
// 遍历项目满足条件后的操作 |
|||
if(datas[i].child){ //存在子节点就递归 |
|||
this.setName(datas[i].child); |
|||
} |
|||
} |
|||
}, |
|||
// 树形结构递归 |
|||
digui (item) { |
|||
|
|||
// 一层一层往下面执行,循环,直到不满足情况的条件下,会自动跳出这个递归方法,然后又到上面方法的源头处,开始执行下一个对象。。。 |
|||
if (item.child != []) { |
|||
|
|||
// 因为三级联动的数据格式是value和label,所以需要自己手动添加,没有的忽略。 |
|||
item.child.forEach(ff => { |
|||
if (ff.istrue==true) { |
|||
this.checkList.push(ff.id) |
|||
} |
|||
// 这里就是判断他的children下面还有没有值,有的话我就要往下挖,就又开始自己调用自己了 |
|||
this.digui(ff) |
|||
}) |
|||
} else { |
|||
// 这里就是判断,如果我这一层的children下面没有东西的时候该做什么操作 |
|||
// 要添加value和label,否则会看不到标签名字和值 |
|||
// --------------------------分割线--------------------------------- |
|||
if (item.istrue==true) { |
|||
this.checkList.push(item.id) |
|||
} |
|||
// item.govlist=item.child |
|||
|
|||
} |
|||
// 到这里为止,不能在这里打印数据,不然数据就是个断层的,因为在这里打印的数据是当前循环的这一层的数据,如果想看完整数据效果,那么就需要在递归方法第一次调用的地方打印需要递归的值,即上一个方法中。 |
|||
}, |
|||
// 获取行政组织树 |
|||
async getGovthree(){ |
|||
const searchData = { |
|||
|
|||
} |
|||
const res = await govthree() |
|||
this.GovthreeList = res.data |
|||
}, |
|||
// 获取部门组织树 |
|||
async getBuMenthree(){ |
|||
const searchData = { |
|||
level:4 |
|||
} |
|||
const res = await govthree(searchData) |
|||
this.BuMenthreeList = res.data |
|||
}, |
|||
// 获取职务列表 |
|||
async getJobTitleList(){ |
|||
const searchData = { |
|||
page: 1, //分页页码,数字类型 |
|||
pagesize: 10000, //每页显示多少条数据 |
|||
} |
|||
const res = await dutieslist(searchData) |
|||
this.JobTitleList = res.data.list |
|||
}, |
|||
// 添加子菜单 |
|||
addSonMenu(row){ |
|||
this.addSonMenuData.parentId=row.id |
|||
this.addSonShow=true |
|||
}, |
|||
//删除操作 |
|||
async deleteMenu(row) { |
|||
this.$confirm('此操作将永久删除, 是否继续?', '提示', { |
|||
confirmButtonText: '确定', |
|||
cancelButtonText: '取消', |
|||
type: 'warning' |
|||
}) |
|||
.then(async() => { |
|||
this.deleFrom.state=3; |
|||
this.deleFrom.id=row.id; |
|||
const res = await eitepositionstateordel(this.deleFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '删除成功!' |
|||
}) |
|||
|
|||
this.getDataList() |
|||
} |
|||
}) |
|||
}, |
|||
// 新增按钮 |
|||
showAdd(){ |
|||
this.dialogFormVisible=true; |
|||
console.log(this.dialogFormVisible) |
|||
}, |
|||
// 编辑按钮 |
|||
async editMenu(row){ |
|||
// this.editFrom=row |
|||
// const res = await getdutyclassinfo(this.editFrom) |
|||
this.editAdd = row |
|||
// this.editAdd.menuurl=row.apiUrl |
|||
this.editDialogFormVisible=true; |
|||
|
|||
}, |
|||
// 开关状态监听 |
|||
async changeVal(val,id){ |
|||
console.log(val) |
|||
this.switchFrom.id=id |
|||
if (val==1) { |
|||
this.switchFrom.state=1; |
|||
const res = await eitepositionstateordel(this.switchFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '修改状态成功', |
|||
showClose: true |
|||
}) |
|||
this.getDataList() |
|||
} |
|||
} else { |
|||
this.switchFrom.state=2; |
|||
const res = await eitepositionstateordel(this.switchFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '修改状态成功', |
|||
showClose: true |
|||
}) |
|||
this.getDataList() |
|||
} |
|||
} |
|||
}, |
|||
// 重置搜索条件 |
|||
onReset() { |
|||
this.searchInfo = {} |
|||
}, |
|||
// 条件搜索m |
|||
onSubmit() { |
|||
this.page = 1 |
|||
this.pageSize = 10 |
|||
this.getDataList() |
|||
}, |
|||
// 日期时间戳转日期格式 |
|||
formatDate(nS) { |
|||
return new Date(parseInt(nS) * 1000).toLocaleString().replace(/:\d{1,2}$/,' '); |
|||
}, |
|||
|
|||
// 提交按钮 |
|||
async enterDialog(){ |
|||
const fromCopy=JSON.parse(JSON.stringify(this.form)) |
|||
fromCopy.duties=fromCopy.duties.toString() |
|||
fromCopy.organization=fromCopy.organization.toString() |
|||
fromCopy.superior=fromCopy.superior.toString() |
|||
fromCopy.department=fromCopy.department.toString() |
|||
// this.form.parentId=0 |
|||
// this.form.sort=parseInt(this.form.sort) |
|||
const res = await addpositioncont(fromCopy) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '添加成功', |
|||
showClose: true |
|||
}) |
|||
} |
|||
this.getDataList(); |
|||
this.closeDialog(); |
|||
|
|||
}, |
|||
// 提交子菜单按钮 |
|||
async enterSonDialog(){ |
|||
|
|||
|
|||
this.addSonMenuData.sort=parseInt(this.addSonMenuData.sort) |
|||
const res = await addmenu(this.addSonMenuData) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '添加成功', |
|||
showClose: true |
|||
}) |
|||
} |
|||
this.getDataList(); |
|||
this.closeSonDialog(); |
|||
|
|||
}, |
|||
// 编辑提交按钮 |
|||
async editEnterDialog(){ |
|||
this.editAdd.menuurl=this.editAdd.apiUrl |
|||
const res = await eitemenu(this.editAdd) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '编辑成功', |
|||
showClose: true |
|||
}) |
|||
} |
|||
this.getDataList(); |
|||
this.editCloseDialog(); |
|||
|
|||
}, |
|||
// 添加框关闭 |
|||
closeDialog() { |
|||
console.log("closeDialog") |
|||
this.initForm() |
|||
this.dialogFormVisible = false |
|||
}, |
|||
// 添加子框关闭 |
|||
closeSonDialog() { |
|||
this.addSonMenuData={} |
|||
this.addSonShow = false |
|||
}, |
|||
// 修改框关闭 |
|||
editCloseDialog() { |
|||
this.editInitForm() |
|||
this.editDialogFormVisible = false |
|||
}, |
|||
// 添加重置表单 |
|||
initForm() { |
|||
this.$refs.addForm.resetFields() |
|||
this.form = {} |
|||
console.log(this.form) |
|||
}, |
|||
// 修改重置表单 |
|||
editInitForm() { |
|||
this.$refs.editForm.resetFields() |
|||
this.editAdd = {} |
|||
}, |
|||
// 改变pageSize |
|||
handleSizeChange(val) { |
|||
this.searchInfo.pagesize=val |
|||
this.getDataList(this.searchInfo) |
|||
}, |
|||
// 改变page |
|||
handleCurrentChange(val) { |
|||
this.searchInfo.page=val |
|||
this.getDataList(this.searchInfo) |
|||
}, |
|||
// 获取初始数据 |
|||
async getDataList() { |
|||
const res = await positionlist(this.searchInfo) |
|||
this.tableData = res.data.list |
|||
this.total = res.data.total |
|||
this.searchInfo.page = res.data.page |
|||
this.searchInfo.pagesize = res.data.pageSize |
|||
}, |
|||
async departmentSelect(val){ |
|||
const searchInfo={ |
|||
page: 1, //分页页码,数字类型 |
|||
pagesize: 100000, //每页显示数量 |
|||
department:val.toString() |
|||
} |
|||
const res = await positionlist(searchInfo) |
|||
this.PostList = res.data.list |
|||
}, |
|||
// 获取职务数据 |
|||
async getPostList() { |
|||
const searchInfo={ |
|||
page: 1, //分页页码,数字类型 |
|||
pagesize: 100000, //每页显示数量 |
|||
} |
|||
const res = await positionlist(searchInfo) |
|||
this.PostList = res.data.list |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.dashboard { |
|||
&-container { |
|||
margin: 30px; |
|||
} |
|||
&-text { |
|||
font-size: 30px; |
|||
line-height: 46px; |
|||
} |
|||
} |
|||
</style> |
|||
@ -0,0 +1,518 @@ |
|||
<template> |
|||
<!-- 定性考核打分 --> |
|||
<div class="dashboard-container"> |
|||
<!-- <div class="gva-search-box"> |
|||
<el-form ref="searchForm" :inline="true" :model="searchInfo"> |
|||
<el-form-item label="考核维度名称"> |
|||
<el-input |
|||
placeholder="请输入名称" |
|||
v-model="searchInfo.title" |
|||
clearable> |
|||
</el-input> |
|||
</el-form-item> |
|||
<el-form-item label="考核维度状态"> |
|||
<el-select v-model="searchInfo.state" clearable placeholder="请选择状态"> |
|||
<el-option :value=1 label="正常">正常</el-option> |
|||
<el-option :value=2 label="禁止">禁止</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button size="mini" type="primary" icon="el-icon-search" @click="onSubmit">查询</el-button> |
|||
<el-button size="mini" icon="el-icon-refresh" @click="onReset">重置</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</div> --> |
|||
<div class="gva-table-box"> |
|||
<!-- <div class="gva-btn-list"> |
|||
<el-button size="mini" type="primary" icon="el-icon-plus" @click="showAdd()">新增</el-button> |
|||
</div> --> |
|||
<el-table :data="tableData" border :span-method="objectSpanMethod"> |
|||
<el-table-column align="left" label="部门" prop="parentname"/> |
|||
<el-table-column align="left" label="考核标准" prop="detailedtargetname"/> |
|||
<el-table-column align="left" label="考核办法" prop="content"/> |
|||
|
|||
<el-table-column align="left" fixed="right" label="操作" width="200"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
icon="el-icon-circle-plus-outline" |
|||
size="small" |
|||
type="text" |
|||
@click="showJia(scope.row)" |
|||
>加分</el-button> |
|||
<el-button |
|||
icon="el-icon-remove-outline" |
|||
size="small" |
|||
type="text" |
|||
@click="showJian(scope.row)" |
|||
>减分</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
</div> |
|||
<!-- 加分弹框 --> |
|||
<el-dialog :visible.sync="dialogFormVisible" :before-close="closeDialog" title="加分" width="30%"> |
|||
<el-form ref="addForm" :model="form" :rules="rules" label-width="150px"> |
|||
<el-form-item label="分值"> |
|||
<el-input v-model.number="form.score" autocomplete="off" /> |
|||
</el-form-item> |
|||
<el-form-item label="原因"> |
|||
<el-input |
|||
type="textarea" |
|||
:rows="4" |
|||
placeholder="请输入内容" |
|||
v-model="form.reason"> |
|||
</el-input> |
|||
|
|||
</el-form-item> |
|||
<el-form-item label="发生时间"> |
|||
<el-date-picker |
|||
v-model="form.time" |
|||
value-format="yyyy-MM-dd HH:mm:ss" |
|||
type="datetime" |
|||
placeholder="选择日期时间"> |
|||
</el-date-picker> |
|||
</el-form-item> |
|||
<el-form-item label="是否整改"> |
|||
<el-select v-model="form.rectification" clearable placeholder="请选择状态"> |
|||
<el-option :value=1 label="是">是</el-option> |
|||
<el-option :value=2 label="否">否</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template #footer> |
|||
<div class="dialog-footer"> |
|||
<el-button size="small" @click="closeDialog">取 消</el-button> |
|||
<el-button size="small" type="primary" @click="enterDialog">确 定</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
<!-- 减分弹框 --> |
|||
<el-dialog :visible.sync="jiandialogFormVisible" :before-close="jiancloseDialog" title="减分" width="30%"> |
|||
<el-form ref="jianForm" :model="jianForm" label-width="150px"> |
|||
<el-form-item label="分值"> |
|||
<el-input v-model.number="jianForm.score" autocomplete="off" /> |
|||
</el-form-item> |
|||
<el-form-item label="原因"> |
|||
<el-input |
|||
type="textarea" |
|||
:rows="4" |
|||
placeholder="请输入内容" |
|||
v-model="jianForm.reason"> |
|||
</el-input> |
|||
|
|||
</el-form-item> |
|||
<el-form-item label="发生时间"> |
|||
<el-date-picker |
|||
v-model="jianForm.time" |
|||
value-format="yyyy-MM-dd HH:mm:ss" |
|||
type="datetime" |
|||
placeholder="选择日期时间"> |
|||
</el-date-picker> |
|||
</el-form-item> |
|||
<el-form-item label="是否整改"> |
|||
<el-select v-model="jianForm.rectification" clearable placeholder="请选择状态"> |
|||
<el-option :value=1 label="是">是</el-option> |
|||
<el-option :value=2 label="否">否</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-form> |
|||
<!-- <el-upload |
|||
:action="uploadActionUrl" |
|||
accept="image/jpeg,image/gif,image/png" |
|||
multiple |
|||
:limit="3" |
|||
|
|||
:file-list="files"> |
|||
<el-button size="small" type="primary">点击上传</el-button> |
|||
<div slot="tip" class="el-upload__tip">请上传图片格式文件</div> |
|||
</el-upload> --> |
|||
<template #footer> |
|||
<div class="dialog-footer"> |
|||
<el-button size="small" @click="jiancloseDialog">取 消</el-button> |
|||
<el-button size="small" type="primary" @click="jianenterDialog">确 定</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
<!-- 编辑弹框 --> |
|||
<el-dialog :visible.sync="editDialogFormVisible" :before-close="editCloseDialog" title="修改" width="20%"> |
|||
<el-form ref="editForm" :model="editAdd" :rules="editRules" label-width="150px"> |
|||
<el-form-item label="考核维度名称" prop="title"> |
|||
<el-input v-model="editAdd.title" autocomplete="off" /> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template #footer> |
|||
<div class="dialog-footer"> |
|||
<el-button size="small" @click="editCloseDialog">取 消</el-button> |
|||
<el-button size="small" type="primary" @click="editEnterDialog">确 定</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { qualevalulist,additionandsubtractionscore,upordown } from '@/api/dutys' |
|||
export default { |
|||
|
|||
name: 'Qualitative', |
|||
data() { |
|||
return { |
|||
files:[], |
|||
uploadActionUrl:'http://gin.admin.net/upordown', |
|||
jianForm:{}, |
|||
jiandialogFormVisible:false, |
|||
fileList:[], |
|||
spanArr:[], |
|||
pos:'', |
|||
// 查询详情的数据 |
|||
editFrom:{}, |
|||
// 修改状态提交数据 |
|||
switchFrom:{}, |
|||
// 删除数据提交 |
|||
deleFrom:{}, |
|||
// 编辑时数据 |
|||
editAdd:{}, |
|||
assessList:{}, |
|||
// 添加数据 |
|||
form:{}, |
|||
// 弹窗变量 |
|||
dialogFormVisible:false, |
|||
// 修改弹窗 |
|||
editDialogFormVisible:false, |
|||
total: 0, |
|||
tableData:[], |
|||
// 条件查询变量 |
|||
searchInfo: { |
|||
page: 1, |
|||
pagesize: 10 |
|||
}, |
|||
// 条件查询变量 |
|||
abc:{ |
|||
aaa:"111", |
|||
bbb:"222" |
|||
}, |
|||
// 添加时验证规则 |
|||
rules: { |
|||
title: [{ required: true, message: '请输入名称', trigger: 'blur' }], |
|||
}, |
|||
editRules:{ |
|||
title: [{ required: true, message: '请输入名称', trigger: 'blur' }], |
|||
} |
|||
} |
|||
}, |
|||
created() { |
|||
console.log(this.$store.state.user.token) |
|||
if (this.$store.state.user.token=='') { |
|||
this.$router.push('/login') |
|||
} |
|||
// 页面渲染时获取初始数据 |
|||
this.getDataList() |
|||
}, |
|||
// 监听数据 |
|||
watch: { |
|||
tableData() { |
|||
this.$nextTick(() => { |
|||
this.spanArr=[], |
|||
this.pos='', |
|||
//此时就可以获取到在created赋值后的dataList了 |
|||
this.getSpanArr(this.tableData); |
|||
}); |
|||
}, |
|||
// } |
|||
}, |
|||
methods: { |
|||
fileImage:function(e){ |
|||
var that=this; |
|||
var file = e.target.files[0]; |
|||
var imgSize=file.size/1024; |
|||
if(imgSize>200){ |
|||
alert('请上传大小不要超过200KB的图片') |
|||
}else{ |
|||
var reader = new FileReader(); |
|||
reader.readAsDataURL(file); // 读出 base64 |
|||
reader.onloadend = async function () { |
|||
// 图片的 base64 格式, 可以直接当成 img 的 src 属性值 |
|||
var dataURL = reader.result; |
|||
// 下面逻辑处理 |
|||
const from={ |
|||
file:dataURL, |
|||
} |
|||
const res = await upordown(from) |
|||
// $.ajax({ |
|||
// type:"post", |
|||
// url:"/v1/userSet", |
|||
// async:true, |
|||
// data:{ |
|||
// avatar:dataURL, |
|||
// avatar_wx:1, |
|||
// token:token, |
|||
// uid:uid, |
|||
// }, |
|||
// success:function(e){ |
|||
// that.avatar=dataURL; |
|||
// alert('修改成功'); |
|||
// $(".tsk").show().delay(1500).hide(0); |
|||
// } |
|||
// }); |
|||
}; |
|||
} |
|||
|
|||
}, |
|||
async aaaaa(){ |
|||
// const res = await upordown() |
|||
}, |
|||
changeFile(file, fileList){ |
|||
|
|||
console.log("file") |
|||
console.log(file) |
|||
console.log("fileList") |
|||
console.log(fileList) |
|||
|
|||
}, |
|||
handleRemove(file, fileList) { |
|||
console.log(file, fileList); |
|||
}, |
|||
handlePreview(file) { |
|||
console.log(file); |
|||
}, |
|||
handleExceed(files, fileList) { |
|||
this.$message.warning(`当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`); |
|||
}, |
|||
beforeRemove(file, fileList) { |
|||
return this.$confirm(`确定移除 ${ file.name }?`); |
|||
}, |
|||
// 加分弹窗 |
|||
showJia(row){ |
|||
this.form.planid=row.id |
|||
this.dialogFormVisible=true |
|||
}, |
|||
// 减分弹窗 |
|||
showJian(row){ |
|||
this.jianForm.planid=row.id |
|||
this.jiandialogFormVisible=true |
|||
}, |
|||
// 部门列合并 |
|||
getSpanArr(data) { |
|||
// data就是我们从后台拿到的数据 |
|||
for (var i = 0; i < data.length; i++) { |
|||
if (i === 0) { |
|||
this.spanArr.push(1); |
|||
this.pos = 0; |
|||
} else { |
|||
// 判断当前元素与上一个元素是否相同 |
|||
if (data[i].parentid === data[i - 1].parentid) { |
|||
this.spanArr[this.pos] += 1; |
|||
this.spanArr.push(0); |
|||
} else { |
|||
this.spanArr.push(1); |
|||
this.pos = i; |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
// 合并行 |
|||
objectSpanMethod({ row, column, rowIndex, columnIndex }) { |
|||
if (columnIndex === 0) { |
|||
const _row = this.spanArr[rowIndex]; |
|||
const _col = _row > 0 ? 1 : 0; |
|||
console.log(`rowspan:${_row} colspan:${_col}`); |
|||
return { |
|||
// [0,0] 表示这一行不显示, [2,1]表示行的合并数 |
|||
rowspan: _row, |
|||
colspan: _col |
|||
}; |
|||
} |
|||
}, |
|||
// 删除操作 |
|||
//删除操作 |
|||
async deleteOperate(row) { |
|||
this.$confirm('此操作将永久删除, 是否继续?', '提示', { |
|||
confirmButtonText: '确定', |
|||
cancelButtonText: '取消', |
|||
type: 'warning' |
|||
}) |
|||
.then(async() => { |
|||
this.deleFrom.state=3; |
|||
this.deleFrom.outid=row.outId; |
|||
const res = await statedutyclass(this.deleFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '删除成功!' |
|||
}) |
|||
|
|||
this.getDataList() |
|||
} |
|||
}) |
|||
}, |
|||
// 新增按钮 |
|||
showAdd(){ |
|||
this.dialogFormVisible=true; |
|||
console.log(this.dialogFormVisible) |
|||
}, |
|||
// 编辑按钮 |
|||
async showEdit(row){ |
|||
this.editFrom.outid=row.outId |
|||
const res = await getdutyclassinfo(this.editFrom) |
|||
this.editAdd = res.data |
|||
this.editDialogFormVisible=true; |
|||
|
|||
}, |
|||
// 开关状态监听 |
|||
async changeVal(val,id){ |
|||
console.log(val) |
|||
this.switchFrom.outid=id |
|||
if (val==1) { |
|||
this.switchFrom.state=1; |
|||
const res = await statedutyclass(this.switchFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '修改状态成功', |
|||
showClose: true |
|||
}) |
|||
this.getDataList() |
|||
} |
|||
} else { |
|||
this.switchFrom.state=2; |
|||
const res = await statedutyclass(this.switchFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '修改状态成功', |
|||
showClose: true |
|||
}) |
|||
this.getDataList() |
|||
} |
|||
} |
|||
}, |
|||
// 重置搜索条件 |
|||
onReset() { |
|||
this.searchInfo = {} |
|||
}, |
|||
// 条件搜索 |
|||
onSubmit() { |
|||
this.page = 1 |
|||
this.pageSize = 10 |
|||
this.getDataList() |
|||
}, |
|||
// 日期时间戳转日期格式 |
|||
formatDate(nS) { |
|||
return new Date(parseInt(nS) * 1000).toLocaleString().replace(/:\d{1,2}$/,' '); |
|||
}, |
|||
|
|||
// 提交按钮 |
|||
async enterDialog(){ |
|||
this.$refs.addForm.validate(async valid => { |
|||
if (valid) { |
|||
this.form.type=1 |
|||
const res = await additionandsubtractionscore(this.form) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '成功', |
|||
showClose: true |
|||
}) |
|||
} |
|||
this.getDataList(); |
|||
this.closeDialog(); |
|||
} |
|||
}) |
|||
}, |
|||
// 减分提交按钮 |
|||
async jianenterDialog(){ |
|||
this.jianForm.type=2 |
|||
const res = await additionandsubtractionscore(this.jianForm) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '成功', |
|||
showClose: true |
|||
}) |
|||
} |
|||
this.getDataList(); |
|||
this.jiancloseDialog(); |
|||
|
|||
|
|||
|
|||
}, |
|||
|
|||
// 编辑提交按钮 |
|||
async editEnterDialog(){ |
|||
this.$refs.editForm.validate(async valid => { |
|||
if (valid) { |
|||
const res = await eitedutyclassinfo(this.editAdd) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '编辑成功', |
|||
showClose: true |
|||
}) |
|||
} |
|||
this.getDataList(); |
|||
this.editCloseDialog(); |
|||
} |
|||
}) |
|||
}, |
|||
// 加分框关闭 |
|||
closeDialog() { |
|||
console.log("closeDialog") |
|||
this.initForm() |
|||
this.dialogFormVisible = false |
|||
}, |
|||
// 减分框关闭 |
|||
jiancloseDialog() { |
|||
console.log("closeDialog") |
|||
this.jianInitForm() |
|||
this.jiandialogFormVisible = false |
|||
}, |
|||
// 修改框关闭 |
|||
editCloseDialog() { |
|||
this.editInitForm() |
|||
this.editDialogFormVisible = false |
|||
}, |
|||
// 加分重置表单 |
|||
initForm() { |
|||
this.$refs.addForm.resetFields() |
|||
this.form = {} |
|||
}, |
|||
// 减分重置表单 |
|||
jianInitForm() { |
|||
this.$refs.jianForm.resetFields() |
|||
this.jianForm = {} |
|||
}, |
|||
// 修改重置表单 |
|||
editInitForm() { |
|||
this.$refs.editForm.resetFields() |
|||
this.editAdd = {} |
|||
}, |
|||
// 改变pageSize |
|||
handleSizeChange(val) { |
|||
this.searchInfo.pagesize=val |
|||
this.getDataList(this.searchInfo) |
|||
}, |
|||
// 改变page |
|||
handleCurrentChange(val) { |
|||
this.searchInfo.page=val |
|||
this.getDataList(this.searchInfo) |
|||
}, |
|||
// 获取初始数据 |
|||
async getDataList() { |
|||
const res = await qualevalulist() |
|||
this.tableData = res.data |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.dashboard { |
|||
&-container { |
|||
margin: 30px; |
|||
} |
|||
&-text { |
|||
font-size: 30px; |
|||
line-height: 46px; |
|||
} |
|||
} |
|||
</style> |
|||
@ -0,0 +1,416 @@ |
|||
<template> |
|||
<!-- 角色设置 --> |
|||
<div class="dashboard-container"> |
|||
<!-- <div class="gva-search-box"> |
|||
<el-form ref="searchForm" :inline="true" :model="searchInfo"> |
|||
<el-form-item label="考核维度名称"> |
|||
<el-input |
|||
placeholder="请输入名称" |
|||
v-model="searchInfo.title" |
|||
clearable> |
|||
</el-input> |
|||
</el-form-item> |
|||
<el-form-item label="考核维度状态"> |
|||
<el-select v-model="searchInfo.state" clearable placeholder="请选择状态"> |
|||
<el-option :value=1 label="正常">正常</el-option> |
|||
<el-option :value=2 label="禁止">禁止</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button size="mini" type="primary" icon="el-icon-search" @click="onSubmit">查询</el-button> |
|||
<el-button size="mini" icon="el-icon-refresh" @click="onReset">重置</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</div> --> |
|||
<div class="gva-table-box"> |
|||
<div class="gva-btn-list"> |
|||
<el-button size="mini" type="primary" icon="el-icon-plus" @click="showAdd()">新增根目录</el-button> |
|||
</div> |
|||
<el-table :data="tableData" row-key="id" :tree-props="{children: 'child'}"> |
|||
<el-table-column align="left" label="ID" min-width="100" prop="id" /> |
|||
<el-table-column align="left" label="名称" show-overflow-tooltip min-width="160" prop="title" /> |
|||
<el-table-column align="left" label="路由Path" prop="apiUrl" /> |
|||
<el-table-column align="left" label="状态" min-width="140" prop="authorityName"> |
|||
<template #default="scope"> |
|||
<el-switch |
|||
inline-prompt |
|||
active-text="正常" |
|||
inactive-text="禁止" |
|||
v-model="scope.row.state" |
|||
active-color="#13ce66" |
|||
inactive-color="#ff4949" |
|||
:active-value=1 |
|||
:inactive-value=2 |
|||
@change="changeVal($event,scope.row.id)" |
|||
/> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column align="left" fixed="right" label="操作" width="300"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
size="mini" |
|||
type="text" |
|||
icon="el-icon-plus" |
|||
@click="addSonMenu(scope.row)" |
|||
>添加子菜单</el-button> |
|||
<el-button |
|||
size="mini" |
|||
type="text" |
|||
icon="el-icon-edit" |
|||
@click="editMenu(scope.row)" |
|||
>编辑</el-button> |
|||
<el-button |
|||
size="mini" |
|||
type="text" |
|||
icon="el-icon-delete" |
|||
@click="deleteMenu(scope.row)" |
|||
>删除</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- <div class="gva-pagination"> |
|||
<el-pagination |
|||
@size-change="handleSizeChange" |
|||
@current-change="handleCurrentChange" |
|||
:page-sizes="[10, 30, 50, 100]" |
|||
:page-size="searchInfo.pagesize" |
|||
layout="total, sizes, prev, pager, next, jumper" |
|||
:total="total"> |
|||
</el-pagination> |
|||
</div> --> |
|||
</div> |
|||
<!-- 新增弹框 --> |
|||
<el-dialog :visible.sync="dialogFormVisible" :before-close="closeDialog" title="新增根目录" width="20%"> |
|||
<el-form ref="addForm" :model="form" :rules="rules" label-width="150px"> |
|||
<el-form-item label="栏目名称"> |
|||
<el-input v-model="form.title"/> |
|||
</el-form-item> |
|||
<!-- <el-form-item label="所属栏目"> |
|||
<el-cascader |
|||
:options="options" |
|||
:props="{ checkStrictly: true }" |
|||
clearable></el-cascader> |
|||
</el-form-item> --> |
|||
|
|||
<el-form-item label="栏目路径"> |
|||
<el-input v-model="form.menuurl"/> |
|||
</el-form-item> |
|||
<el-form-item label="排序"> |
|||
<el-input v-model="form.sort"/> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template #footer> |
|||
<div class="dialog-footer"> |
|||
<el-button size="small" @click="closeDialog">取 消</el-button> |
|||
<el-button size="small" type="primary" @click="enterDialog">确 定</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
<!-- 新增子菜单弹框 --> |
|||
<el-dialog :visible.sync="addSonShow" :before-close="closeSonDialog" title="新增子菜单" width="20%"> |
|||
<el-form :model="addSonMenuData" label-width="150px"> |
|||
<el-form-item label="栏目名称"> |
|||
<el-input v-model="addSonMenuData.title"/> |
|||
</el-form-item> |
|||
<!-- <el-form-item label="所属栏目"> |
|||
<el-cascader |
|||
:options="options" |
|||
:props="{ checkStrictly: true }" |
|||
clearable></el-cascader> |
|||
</el-form-item> --> |
|||
|
|||
<el-form-item label="栏目路径"> |
|||
<el-input v-model="addSonMenuData.menuurl"/> |
|||
</el-form-item> |
|||
<el-form-item label="排序"> |
|||
<el-input v-model="addSonMenuData.sort"/> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template #footer> |
|||
<div class="dialog-footer"> |
|||
<el-button size="small" @click="closeSonDialog">取 消</el-button> |
|||
<el-button size="small" type="primary" @click="enterSonDialog">确 定</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
<!-- 编辑弹框 --> |
|||
<el-dialog :visible.sync="editDialogFormVisible" :before-close="editCloseDialog" title="修改" width="20%"> |
|||
<el-form ref="editForm" :model="editAdd" :rules="editRules" label-width="150px"> |
|||
<el-form-item label="栏目名称"> |
|||
<el-input v-model="editAdd.title"/> |
|||
</el-form-item> |
|||
<!-- <el-form-item label="所属栏目"> |
|||
<el-cascader |
|||
:options="options" |
|||
:props="{ checkStrictly: true }" |
|||
clearable></el-cascader> |
|||
</el-form-item> --> |
|||
|
|||
<el-form-item label="栏目路径"> |
|||
<el-input v-model="editAdd.apiUrl"/> |
|||
</el-form-item> |
|||
<el-form-item label="排序"> |
|||
<el-input v-model="editAdd.sort"/> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template #footer> |
|||
<div class="dialog-footer"> |
|||
<el-button size="small" @click="editCloseDialog">取 消</el-button> |
|||
<el-button size="small" type="primary" @click="editEnterDialog">确 定</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { dutyclasslist,statedutyclass,eitedutyclassinfo,getdutyclassinfo,adddutyclass } from '@/api/duty/dimension' |
|||
import { systemmenulist,addmenu,eitemenu,delmenu,addmenuoperation,delmenuperation } from '@/api/user' |
|||
export default { |
|||
name: 'Dashboard', |
|||
data() { |
|||
return { |
|||
// 查询详情的数据 |
|||
editFrom:{}, |
|||
// 修改状态提交数据 |
|||
switchFrom:{}, |
|||
// 删除数据提交 |
|||
deleFrom:{}, |
|||
// 编辑时数据 |
|||
editAdd:{ |
|||
|
|||
}, |
|||
assessList:{}, |
|||
// 添加数据 |
|||
form:{ |
|||
type:1, |
|||
}, |
|||
// 弹窗变量 |
|||
dialogFormVisible:false, |
|||
addSonMenuData:{}, |
|||
// 修改弹窗 |
|||
editDialogFormVisible:false, |
|||
// 添加子菜单弹窗 |
|||
addSonShow:false, |
|||
total: 0, |
|||
tableData:[], |
|||
// 条件查询变量 |
|||
searchInfo: { |
|||
page: 1, |
|||
pagesize: 10 |
|||
}, |
|||
// 条件查询变量 |
|||
abc:{ |
|||
aaa:"111", |
|||
bbb:"222" |
|||
}, |
|||
// 添加时验证规则 |
|||
rules: { |
|||
title: [{ required: true, message: '请输入名称', trigger: 'blur' }], |
|||
}, |
|||
editRules:{ |
|||
title: [{ required: true, message: '请输入名称', trigger: 'blur' }], |
|||
} |
|||
} |
|||
}, |
|||
created() { |
|||
console.log(this.$store.state.user.token) |
|||
if (this.$store.state.user.token=='') { |
|||
this.$router.push('/login') |
|||
} |
|||
// 页面渲染时获取初始数据 |
|||
this.getDataList() |
|||
}, |
|||
methods: { |
|||
// 添加子菜单 |
|||
addSonMenu(row){ |
|||
this.addSonMenuData.parentId=row.id |
|||
this.addSonShow=true |
|||
}, |
|||
//删除操作 |
|||
async deleteMenu(row) { |
|||
this.$confirm('此操作将永久删除, 是否继续?', '提示', { |
|||
confirmButtonText: '确定', |
|||
cancelButtonText: '取消', |
|||
type: 'warning' |
|||
}) |
|||
.then(async() => { |
|||
this.deleFrom.state=3; |
|||
this.deleFrom.id=row.id; |
|||
const res = await delmenu(this.deleFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '删除成功!' |
|||
}) |
|||
|
|||
this.getDataList() |
|||
} |
|||
}) |
|||
}, |
|||
// 新增按钮 |
|||
showAdd(){ |
|||
this.dialogFormVisible=true; |
|||
console.log(this.dialogFormVisible) |
|||
}, |
|||
// 编辑按钮 |
|||
async editMenu(row){ |
|||
// this.editFrom=row |
|||
// const res = await getdutyclassinfo(this.editFrom) |
|||
this.editAdd = row |
|||
// this.editAdd.menuurl=row.apiUrl |
|||
this.editDialogFormVisible=true; |
|||
|
|||
}, |
|||
// 开关状态监听 |
|||
async changeVal(val,id){ |
|||
console.log(val) |
|||
this.switchFrom.id=id |
|||
if (val==1) { |
|||
this.switchFrom.state=1; |
|||
const res = await delmenu(this.switchFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '修改状态成功', |
|||
showClose: true |
|||
}) |
|||
this.getDataList() |
|||
} |
|||
} else { |
|||
this.switchFrom.state=2; |
|||
const res = await delmenu(this.switchFrom) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '修改状态成功', |
|||
showClose: true |
|||
}) |
|||
this.getDataList() |
|||
} |
|||
} |
|||
}, |
|||
// 重置搜索条件 |
|||
onReset() { |
|||
this.searchInfo = {} |
|||
}, |
|||
// 条件搜索m |
|||
onSubmit() { |
|||
this.page = 1 |
|||
this.pageSize = 10 |
|||
this.getDataList() |
|||
}, |
|||
// 日期时间戳转日期格式 |
|||
formatDate(nS) { |
|||
return new Date(parseInt(nS) * 1000).toLocaleString().replace(/:\d{1,2}$/,' '); |
|||
}, |
|||
|
|||
// 提交按钮 |
|||
async enterDialog(){ |
|||
|
|||
this.form.parentId=0 |
|||
this.form.sort=parseInt(this.form.sort) |
|||
const res = await addmenu(this.form) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '添加成功', |
|||
showClose: true |
|||
}) |
|||
} |
|||
this.getDataList(); |
|||
this.closeDialog(); |
|||
|
|||
}, |
|||
// 提交子菜单按钮 |
|||
async enterSonDialog(){ |
|||
|
|||
|
|||
this.addSonMenuData.sort=parseInt(this.addSonMenuData.sort) |
|||
const res = await addmenu(this.addSonMenuData) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '添加成功', |
|||
showClose: true |
|||
}) |
|||
} |
|||
this.getDataList(); |
|||
this.closeSonDialog(); |
|||
|
|||
}, |
|||
// 编辑提交按钮 |
|||
async editEnterDialog(){ |
|||
this.editAdd.menuurl=this.editAdd.apiUrl |
|||
const res = await eitemenu(this.editAdd) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '编辑成功', |
|||
showClose: true |
|||
}) |
|||
} |
|||
this.getDataList(); |
|||
this.editCloseDialog(); |
|||
|
|||
}, |
|||
// 添加框关闭 |
|||
closeDialog() { |
|||
console.log("closeDialog") |
|||
this.initForm() |
|||
this.dialogFormVisible = false |
|||
}, |
|||
// 添加子框关闭 |
|||
closeSonDialog() { |
|||
this.addSonMenuData={} |
|||
this.addSonShow = false |
|||
}, |
|||
// 修改框关闭 |
|||
editCloseDialog() { |
|||
this.editInitForm() |
|||
this.editDialogFormVisible = false |
|||
}, |
|||
// 添加重置表单 |
|||
initForm() { |
|||
this.$refs.addForm.resetFields() |
|||
this.form = {} |
|||
console.log(this.form) |
|||
}, |
|||
// 修改重置表单 |
|||
editInitForm() { |
|||
this.$refs.editForm.resetFields() |
|||
this.editAdd = {} |
|||
}, |
|||
// 改变pageSize |
|||
handleSizeChange(val) { |
|||
this.searchInfo.pagesize=val |
|||
this.getDataList(this.searchInfo) |
|||
}, |
|||
// 改变page |
|||
handleCurrentChange(val) { |
|||
this.searchInfo.page=val |
|||
this.getDataList(this.searchInfo) |
|||
}, |
|||
// 获取初始数据 |
|||
async getDataList() { |
|||
const res = await systemmenulist(this.searchInfo) |
|||
this.tableData = res.data.list |
|||
this.total = res.data.total |
|||
this.searchInfo.page = res.data.page |
|||
this.searchInfo.pagesize = res.data.pageSize |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.dashboard { |
|||
&-container { |
|||
margin: 30px; |
|||
} |
|||
&-text { |
|||
font-size: 30px; |
|||
line-height: 46px; |
|||
} |
|||
} |
|||
</style> |
|||
|
Before Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 72 KiB |
@ -1 +0,0 @@ |
|||
.dashboard-container[data-v-951e1a82]{margin:30px}.dashboard-text[data-v-951e1a82]{font-size:30px;line-height:46px} |
|||
@ -1 +0,0 @@ |
|||
.wscn-http404-container[data-v-c095f994]{-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);position:absolute;top:40%;left:50%}.wscn-http404[data-v-c095f994]{position:relative;width:1200px;padding:0 50px;overflow:hidden}.wscn-http404 .pic-404[data-v-c095f994]{position:relative;float:left;width:600px;overflow:hidden}.wscn-http404 .pic-404__parent[data-v-c095f994]{width:100%}.wscn-http404 .pic-404__child[data-v-c095f994]{position:absolute}.wscn-http404 .pic-404__child.left[data-v-c095f994]{width:80px;top:17px;left:220px;opacity:0;-webkit-animation-name:cloudLeft-data-v-c095f994;animation-name:cloudLeft-data-v-c095f994;-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-delay:1s;animation-delay:1s}.wscn-http404 .pic-404__child.mid[data-v-c095f994]{width:46px;top:10px;left:420px;opacity:0;-webkit-animation-name:cloudMid-data-v-c095f994;animation-name:cloudMid-data-v-c095f994;-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-delay:1.2s;animation-delay:1.2s}.wscn-http404 .pic-404__child.right[data-v-c095f994]{width:62px;top:100px;left:500px;opacity:0;-webkit-animation-name:cloudRight-data-v-c095f994;animation-name:cloudRight-data-v-c095f994;-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-delay:1s;animation-delay:1s}@-webkit-keyframes cloudLeft-data-v-c095f994{0%{top:17px;left:220px;opacity:0}20%{top:33px;left:188px;opacity:1}80%{top:81px;left:92px;opacity:1}to{top:97px;left:60px;opacity:0}}@keyframes cloudLeft-data-v-c095f994{0%{top:17px;left:220px;opacity:0}20%{top:33px;left:188px;opacity:1}80%{top:81px;left:92px;opacity:1}to{top:97px;left:60px;opacity:0}}@-webkit-keyframes cloudMid-data-v-c095f994{0%{top:10px;left:420px;opacity:0}20%{top:40px;left:360px;opacity:1}70%{top:130px;left:180px;opacity:1}to{top:160px;left:120px;opacity:0}}@keyframes cloudMid-data-v-c095f994{0%{top:10px;left:420px;opacity:0}20%{top:40px;left:360px;opacity:1}70%{top:130px;left:180px;opacity:1}to{top:160px;left:120px;opacity:0}}@-webkit-keyframes cloudRight-data-v-c095f994{0%{top:100px;left:500px;opacity:0}20%{top:120px;left:460px;opacity:1}80%{top:180px;left:340px;opacity:1}to{top:200px;left:300px;opacity:0}}@keyframes cloudRight-data-v-c095f994{0%{top:100px;left:500px;opacity:0}20%{top:120px;left:460px;opacity:1}80%{top:180px;left:340px;opacity:1}to{top:200px;left:300px;opacity:0}}.wscn-http404 .bullshit[data-v-c095f994]{position:relative;float:left;width:300px;padding:30px 0;overflow:hidden}.wscn-http404 .bullshit__oops[data-v-c095f994]{font-size:32px;line-height:40px;color:#1482f0;margin-bottom:20px;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}.wscn-http404 .bullshit__headline[data-v-c095f994],.wscn-http404 .bullshit__oops[data-v-c095f994]{font-weight:700;opacity:0;-webkit-animation-name:slideUp-data-v-c095f994;animation-name:slideUp-data-v-c095f994;-webkit-animation-duration:.5s;animation-duration:.5s}.wscn-http404 .bullshit__headline[data-v-c095f994]{font-size:20px;line-height:24px;color:#222;margin-bottom:10px;-webkit-animation-delay:.1s;animation-delay:.1s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}.wscn-http404 .bullshit__info[data-v-c095f994]{font-size:13px;line-height:21px;color:grey;margin-bottom:30px;-webkit-animation-delay:.2s;animation-delay:.2s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}.wscn-http404 .bullshit__info[data-v-c095f994],.wscn-http404 .bullshit__return-home[data-v-c095f994]{opacity:0;-webkit-animation-name:slideUp-data-v-c095f994;animation-name:slideUp-data-v-c095f994;-webkit-animation-duration:.5s;animation-duration:.5s}.wscn-http404 .bullshit__return-home[data-v-c095f994]{display:block;float:left;width:110px;height:36px;background:#1482f0;border-radius:100px;text-align:center;color:#fff;font-size:14px;line-height:36px;cursor:pointer;-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@-webkit-keyframes slideUp-data-v-c095f994{0%{-webkit-transform:translateY(60px);transform:translateY(60px);opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes slideUp-data-v-c095f994{0%{-webkit-transform:translateY(60px);transform:translateY(60px);opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}} |
|||
@ -1 +0,0 @@ |
|||
#userLayout[data-v-60b05bce]{margin:0;padding:0;background-image:url(../../static/img/login_background.f437e390.jpg);background-size:cover;width:100%;height:100%;position:relative}#userLayout .login_panle[data-v-60b05bce]{position:absolute;top:3vh;left:2vw;width:96vw;height:94vh;background-color:hsla(0,0%,100%,.8);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);border-radius:10px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly}#userLayout .login_panle .login_panle_right[data-v-60b05bce]{background-image:url(../../static/img/login_left.b6bb2261.svg);background-size:cover;width:40%;height:60%;float:right!important}#userLayout .login_panle .login_panle_form[data-v-60b05bce]{width:420px;background-color:#fff;padding:40px 40px 40px 40px;border-radius:10px;-webkit-box-shadow:2px 3px 7px rgba(0,0,0,.2);box-shadow:2px 3px 7px rgba(0,0,0,.2)}#userLayout .login_panle .login_panle_form .login_panle_form_title[data-v-60b05bce]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:30px 0}#userLayout .login_panle .login_panle_form .login_panle_form_title .login_panle_form_title_logo[data-v-60b05bce]{width:90px;height:72px}#userLayout .login_panle .login_panle_form .login_panle_form_title .login_panle_form_title_p[data-v-60b05bce]{font-size:30px;padding-left:20px}#userLayout .login_panle .login_panle_form .vPic[data-v-60b05bce]{width:33%;height:38px;float:right!important;background:#ccc}#userLayout .login_panle .login_panle_form .vPic img[data-v-60b05bce]{width:100%;height:100%;cursor:pointer;vertical-align:middle}#userLayout .login_panle .login_panle_foot[data-v-60b05bce]{position:absolute;bottom:20px}#userLayout .login_panle .login_panle_foot .links[data-v-60b05bce]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}#userLayout .login_panle .login_panle_foot .links .link-icon[data-v-60b05bce]{width:30px;height:30px}#userLayout .login_panle .login_panle_foot .copyright[data-v-60b05bce]{color:#777;margin-top:5px}@media(max-width:750px){.login_panle_right[data-v-60b05bce]{display:none}.login_panle[data-v-60b05bce]{width:100vw;height:100vh;top:0;left:0}.login_panle_form[data-v-60b05bce]{width:100%}} |
|||
@ -1 +0,0 @@ |
|||
.dashboard-container[data-v-4da0aaa8]{margin:30px}.dashboard-text[data-v-4da0aaa8]{font-size:30px;line-height:46px}.kuang[data-v-4da0aaa8]{border-bottom:1px solid}.cluster-rs[data-v-4da0aaa8]{text-align:center}.annotation-rs[data-v-4da0aaa8]{width:100%;height:100%;border:none}.annotation-rs td[data-v-4da0aaa8]{width:155px;padding:5px;border-right:none;text-align:center;vertical-align:middle}tr:last-child td[data-v-4da0aaa8]{border-bottom:none}.first[data-v-4da0aaa8]{height:600px}.two[data-v-4da0aaa8]{height:400px}.three[data-v-4da0aaa8]{height:300px}.four[data-v-4da0aaa8]{height:200px}.fives[data-v-4da0aaa8]{height:100px} |
|||
@ -1 +0,0 @@ |
|||
.dashboard-container[data-v-38769d00]{margin:30px}.dashboard-text[data-v-38769d00]{font-size:30px;line-height:46px} |
|||
@ -1 +0,0 @@ |
|||
.page[data-v-d5a883fa]{background:#f0f2f5;padding:0}.page .gva-card-box[data-v-d5a883fa]{padding:12px 16px}.page .gva-card-box+.gva-card-box[data-v-d5a883fa]{padding-top:0}.page .gva-card[data-v-d5a883fa]{-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff;border-radius:2px;height:auto;padding:26px 30px;overflow:hidden;-webkit-box-shadow:0 0 7px 1px rgba(0,0,0,.03);box-shadow:0 0 7px 1px rgba(0,0,0,.03)}.page .gva-top-card[data-v-d5a883fa]{height:260px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;color:#777}.page .gva-top-card-left[data-v-d5a883fa]{height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.page .gva-top-card-left-title[data-v-d5a883fa]{font-size:22px;color:#343844}.page .gva-top-card-left-dot[data-v-d5a883fa]{font-size:14px;color:#6b7687;margin-top:24px}.page .gva-top-card-left-rows[data-v-d5a883fa]{margin-top:18px;color:#6b7687;width:600px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.page .gva-top-card-left-item[data-v-d5a883fa]{margin-top:14px}.page .gva-top-card-left-item+.gva-top-card-left-item[data-v-d5a883fa]{margin-top:24px}.page .gva-top-card-right[data-v-d5a883fa]{height:600px;width:600px;margin-top:28px}.page[data-v-d5a883fa](.el-card__header){padding:0;border-bottom:none}.page .card-header[data-v-d5a883fa]{padding-bottom:20px;border-bottom:1px solid #e8e8e8}.page .quick-entrance-title[data-v-d5a883fa]{height:30px;font-size:22px;color:#333;width:100%;border-bottom:1px solid #eee}.page .quick-entrance-items[data-v-d5a883fa]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;text-align:center;color:#333}.page .quick-entrance-items .quick-entrance-item[data-v-d5a883fa]{padding:16px 28px;margin-top:-16px;margin-bottom:-16px;border-radius:4px;-webkit-transition:all .2s;transition:all .2s;cursor:pointer;height:auto;text-align:center}.page .quick-entrance-items .quick-entrance-item[data-v-d5a883fa]:hover{-webkit-box-shadow:0 0 7px 0 hsla(0,0%,85.1%,.55);box-shadow:0 0 7px 0 hsla(0,0%,85.1%,.55)}.page .quick-entrance-items .quick-entrance-item-icon[data-v-d5a883fa]{width:50px;height:50px!important;border-radius:8px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin:0 auto}.page .quick-entrance-items .quick-entrance-item-icon i[data-v-d5a883fa]{font-size:24px}.page .quick-entrance-items .quick-entrance-item p[data-v-d5a883fa]{margin-top:10px}.page .echart-box[data-v-d5a883fa]{padding:14px}.icon[data-v-d5a883fa]{font-size:20px;color:#55a0f8;width:30px;height:30px;margin-right:10px}.flex-center[data-v-d5a883fa],.icon[data-v-d5a883fa]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}@media(max-width:750px){.gva-card[data-v-d5a883fa]{padding:20px 10px!important}.gva-card .gva-top-card[data-v-d5a883fa]{height:auto}.gva-card .gva-top-card-left-title[data-v-d5a883fa]{font-size:20px!important}.gva-card .gva-top-card-left-rows[data-v-d5a883fa]{margin-top:15px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.gva-card .gva-top-card-right[data-v-d5a883fa]{display:none}.gva-card .gva-middle-card-item[data-v-d5a883fa]{line-height:20px}.gva-card .icon[data-v-d5a883fa]{font-size:18px}} |
|||
@ -1 +0,0 @@ |
|||
.dashboard-container[data-v-51432242]{margin:30px}.dashboard-text[data-v-51432242]{font-size:30px;line-height:46px} |
|||
@ -1 +0,0 @@ |
|||
.dashboard-container[data-v-5fb11e1e]{margin:30px}.dashboard-text[data-v-5fb11e1e]{font-size:30px;line-height:46px} |
|||
@ -1 +0,0 @@ |
|||
.dashboard-container[data-v-c6cbae0e]{margin:30px}.dashboard-text[data-v-c6cbae0e]{font-size:30px;line-height:46px} |
|||
@ -1 +0,0 @@ |
|||
.home-container[data-v-5bd69acc]{height:100%}.el-header[data-v-5bd69acc]{background-color:#373d41;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding-left:0;color:#fff;font-size:20px}.el-header[data-v-5bd69acc],.el-header div[data-v-5bd69acc]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-header div span[data-v-5bd69acc]{margin-left:15px}.el-aside[data-v-5bd69acc]{background-color:#333744}.el-aside .el-menu[data-v-5bd69acc]{border-right:none}.el-main[data-v-5bd69acc]{background-color:#eaedf1}.iconfont[data-v-5bd69acc]{margin-right:10px}.toggle-button[data-v-5bd69acc]{background-color:#4a5064;font-size:10px;line-height:24px;color:#fff;text-align:center;letter-spacing:.2em;cursor:pointer} |
|||
|
Before Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 44 KiB |
@ -1 +0,0 @@ |
|||
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-15ac51ae"],{"0148":function(t,s,a){},"26fc":function(t,s,a){t.exports=a.p+"static/img/404_cloud.0f4bc32b.png"},"8cdb":function(t,s,a){"use strict";a.r(s);var e=function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("div",{staticClass:"wscn-http404-container"},[a("div",{staticClass:"wscn-http404"},[t._m(0),a("div",{staticClass:"bullshit"},[a("div",{staticClass:"bullshit__oops"},[t._v("OOPS!")]),t._m(1),a("div",{staticClass:"bullshit__headline"},[t._v(t._s(t.message))]),a("div",{staticClass:"bullshit__info"},[t._v("Please check that the URL you entered is correct, or click the button below to return to the homepage.")]),a("a",{staticClass:"bullshit__return-home",attrs:{href:""}},[t._v("Back to home")])])])])},c=[function(){var t=this,s=t.$createElement,e=t._self._c||s;return e("div",{staticClass:"pic-404"},[e("img",{staticClass:"pic-404__parent",attrs:{src:a("a36b"),alt:"404"}}),e("img",{staticClass:"pic-404__child left",attrs:{src:a("26fc"),alt:"404"}}),e("img",{staticClass:"pic-404__child mid",attrs:{src:a("26fc"),alt:"404"}}),e("img",{staticClass:"pic-404__child right",attrs:{src:a("26fc"),alt:"404"}})])},function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("div",{staticClass:"bullshit__info"},[t._v("All rights reserved "),a("a",{staticStyle:{color:"#20a0ff"},attrs:{href:"https://wallstreetcn.com",target:"_blank"}},[t._v("wallstreetcn")])])}],i={name:"Page404",computed:{message:function(){return"The webmaster said that you can not enter this page..."}}},l=i,n=(a("97ef"),a("cba8")),r=Object(n["a"])(l,e,c,!1,null,"c095f994",null);s["default"]=r.exports},"97ef":function(t,s,a){"use strict";a("0148")},a36b:function(t,s,a){t.exports=a.p+"static/img/404.a57b6f31.png"}}]); |
|||