Browse Source

hr管理模块20220705

main
renguanyu111 3 years ago
parent
commit
1a1ec567f1
  1. 1
      .env.development
  2. 1
      .env.production
  3. 3
      .env.staging
  4. 1
      package.json
  5. 95
      src/--layout/components/Sidebar/index.vue
  6. 32
      src/App.vue
  7. 6
      src/__layout/components/AppMain.vue
  8. 2
      src/__layout/components/Navbar.vue
  9. 0
      src/__layout/components/Sidebar/FixiOSBug.js
  10. 0
      src/__layout/components/Sidebar/Item.vue
  11. 5
      src/__layout/components/Sidebar/Link.vue
  12. 0
      src/__layout/components/Sidebar/Logo.vue
  13. 0
      src/__layout/components/Sidebar/SidebarItem.vue
  14. 56
      src/__layout/components/Sidebar/index.vue
  15. 0
      src/__layout/components/index.js
  16. 12
      src/__layout/index.vue
  17. 0
      src/__layout/mixin/ResizeHandler copy.js
  18. 0
      src/__layout/mixin/ResizeHandler.js
  19. 265
      src/api/api/dutys.js
  20. 24
      src/api/api/group.js
  21. 26
      src/api/api/login/login.js
  22. 75
      src/api/api/renwu.js
  23. 9
      src/api/api/table.js
  24. 73
      src/api/api/user.js
  25. 33
      src/api/duty/duty.js
  26. 8
      src/api/dutys.js
  27. 33
      src/api/echarts/echarts.js
  28. 252
      src/api/personnel/post.js
  29. 11
      src/api/user.js
  30. 6
      src/layout/components/AppMain.vue
  31. 7
      src/layout/components/Navbar.vue
  32. 5
      src/layout/components/Sidebar/Link.vue
  33. 20
      src/layout/components/Sidebar/SidebarItem copy.vue
  34. 20
      src/layout/components/Sidebar/SidebarItem.vue
  35. 55
      src/layout/components/Sidebar/index.vue
  36. 0
      src/layout/components/Sidebar/subMenu copy.vue
  37. 3
      src/layout/components/Sidebar/subMenu.vue
  38. 94
      src/layout/components/TagsView/ScrollPane.vue
  39. 294
      src/layout/components/TagsView/index.vue
  40. 326
      src/layout/components/historyComponent/history.vue
  41. 18
      src/layout/index.vue
  42. 20
      src/main.js
  43. 2
      src/router/__index.js
  44. 147
      src/router/index.js
  45. 6
      src/utils/bus.js
  46. 12
      src/utils/i18n.js
  47. 31
      src/utils/request.js
  48. 89
      src/utils/request1.js
  49. 743
      src/views/approvalData/index.vue
  50. 4
      src/views/assessmentProgram/assessmentDimension.vue
  51. 440
      src/views/assessmentProgram/departmentalAssessment.vue
  52. 222
      src/views/assessmentProgram/qualitativeIndicators.vue
  53. 98
      src/views/basicInfo/project.vue
  54. 323
      src/views/basicInfo/target.vue
  55. 679
      src/views/echarts/echarts.vue
  56. 824
      src/views/echarts/echarts1.vue
  57. 1196
      src/views/echarts/table.vue
  58. 883
      src/views/echarts/total.vue
  59. 1650
      src/views/frontPage/index.vue
  60. 386
      src/views/hr/jobTitle.vue
  61. 484
      src/views/hr/organization.vue
  62. 360
      src/views/hr/organizeType.vue
  63. 1072
      src/views/hr/personnel.vue
  64. 330
      src/views/hr/position.vue
  65. 4
      src/views/login/wxLogin.vue
  66. 105
      src/views/menuSettings/index.vue
  67. 581
      src/views/mete/index.vue
  68. 657
      src/views/personnel/post/index.vue
  69. 518
      src/views/qualitative/index copy.vue
  70. 1298
      src/views/qualitative/index.vue
  71. 416
      src/views/roleSetting/index.vue
  72. BIN
      ————dist/--favicon.ico
  73. BIN
      ————dist/favicon.ico
  74. 1
      ————dist/index.html
  75. 1
      ————dist/static/css/app.96fd0a63.css
  76. 1
      ————dist/static/css/chunk-0552f3a2.044e060a.css
  77. 1
      ————dist/static/css/chunk-15ac51ae.3c7f5ad9.css
  78. 1
      ————dist/static/css/chunk-2312d406.0133c0c0.css
  79. 1
      ————dist/static/css/chunk-26198766.4146676d.css
  80. 1
      ————dist/static/css/chunk-29a1f3a9.ac8fd10d.css
  81. 1
      ————dist/static/css/chunk-35bbcdde.4d1bad9a.css
  82. 1
      ————dist/static/css/chunk-3b70a03b.6dcad223.css
  83. 1
      ————dist/static/css/chunk-72d93496.7fac38e6.css
  84. 1
      ————dist/static/css/chunk-73917472.77b2620b.css
  85. 1
      ————dist/static/css/chunk-e7b2d2a4.fd28563b.css
  86. 1
      ————dist/static/css/chunk-elementUI.5dea96f6.css
  87. 50
      ————dist/static/css/chunk-libs.1002c752.css
  88. BIN
      ————dist/static/fonts/element-icons.535877f5.woff
  89. BIN
      ————dist/static/fonts/element-icons.732389de.ttf
  90. BIN
      ————dist/static/img/404.a57b6f31.png
  91. BIN
      ————dist/static/img/404_cloud.0f4bc32b.png
  92. BIN
      ————dist/static/img/dashbord.e74f8e90.png
  93. BIN
      ————dist/static/img/login_background.f437e390.jpg
  94. 123
      ————dist/static/img/login_left.b6bb2261.svg
  95. 1
      ————dist/static/js/app.92ea709b.js
  96. 1
      ————dist/static/js/chunk-0552f3a2.533f0e59.js
  97. 1
      ————dist/static/js/chunk-15ac51ae.8df86837.js
  98. 1
      ————dist/static/js/chunk-2312d406.f43a9621.js
  99. 1
      ————dist/static/js/chunk-26198766.850d6c09.js
  100. 1
      ————dist/static/js/chunk-29a1f3a9.2245688f.js

1
.env.development

@ -3,3 +3,4 @@ ENV = 'development'
# base api
VUE_APP_BASE_API = 'http://vue.admin.net/api'
VUE_APP_BASE_API1 = 'http://vue.admin.net/hrapi'

1
.env.production

@ -3,4 +3,5 @@ ENV = 'production'
# base api
VUE_APP_BASE_API = 'http://ginadmin.hxgk.group/api'
VUE_APP_BASE_API1 = 'http://ginadmin.hxgk.group/hrapi'

3
.env.staging

@ -4,5 +4,6 @@ NODE_ENV = production
ENV = 'staging'
# base api
VUE_APP_BASE_API = 'http://new.hxgk.group/api'
VUE_APP_BASE_API = '172.0.0.1:8888/api'
VUE_APP_BASE_API1 = '172.0.0.1:8888/hrapi'

1
package.json

@ -16,6 +16,7 @@
"dependencies": {
"axios": "0.18.1",
"core-js": "^3.20.2",
"echarts": "^5.3.2",
"element-ui": "2.15.6",
"js-cookie": "2.2.0",
"normalize.css": "7.0.0",

95
src/--layout/components/Sidebar/index.vue

@ -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>

32
src/App.vue

@ -9,10 +9,41 @@ export default {
name: 'App',
data () {
return {
sjUrl:'https://www.hxgk.group/jumpapiurl/webindex?url=http://new.hxgk.group/sj/index.html'
}
},
beforeCreate(){
if (
navigator.userAgent.match(
/(Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
)
) {
window.open('https://www.hxgk.group/jumpapiurl/webindex?url=http://new.hxgk.group/sj/index.html','_blank')
//return true; //
} else {
console.log("PC端");
//return false; // alert('PC')
}
if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) { //iPhone|iPad|iPod|iOS
window.location.href = 'https://www.hxgk.group/jumpapiurl/webindex?url=http://new.hxgk.group/sj/index.html';
}
},
created(){
// let flag = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i)
// if (flag) {
// //
// window.open(this.sjUrl,'_blank')
// } else {
// // pc
// }
},
mounted(){
window.addEventListener('hashchange',()=>{
var currentPath = window.location.hash.slice(1); //
@ -24,5 +55,6 @@ this.$router.push(currentPath); // 动态跳转
},false);
}
}
</script>

6
src/--layout/components/AppMain.vue → src/__layout/components/AppMain.vue

@ -3,8 +3,6 @@
<transition name="fade-transform" mode="out-in">
<router-view :key="key" />
</transition>
<!-- <router-view /> -->
<!-- <router-view :key="key" /> -->
</section>
</template>
@ -16,9 +14,7 @@ export default {
console.log("AppMain")
console.log("AppMain")
console.log(this.$route.path)
console.log(this.$route.fullPath)
return this.$route.fullPath
return this.$route.path
}
}
}

2
src/--layout/components/Navbar.vue → src/__layout/components/Navbar.vue

@ -60,6 +60,8 @@ export default {
this.$router.push('/login')
}
this.userInfo=JSON.parse(sessionStorage.getItem('userinfo'));
console.log(this.userInfo)
console.log("this.userInfo")
},
methods: {
toggleSideBar() {

0
src/--layout/components/Sidebar/FixiOSBug.js → src/__layout/components/Sidebar/FixiOSBug.js

0
src/--layout/components/Sidebar/Item.vue → src/__layout/components/Sidebar/Item.vue

5
src/--layout/components/Sidebar/Link.vue → src/__layout/components/Sidebar/Link.vue

@ -14,6 +14,10 @@ export default {
required: true
}
},
created () {
console.log("tiaozhuan")
},
computed: {
isExternal() {
return isExternal(this.to)
@ -34,6 +38,7 @@ export default {
console.log("this.type")
console.log(this.type)
if (this.isExternal) {
console.log("isExternal")
return {
href: to,
target: '_blank',

0
src/--layout/components/Sidebar/Logo.vue → src/__layout/components/Sidebar/Logo.vue

0
src/--layout/components/Sidebar/SidebarItem copy.vue → src/__layout/components/Sidebar/SidebarItem.vue

56
src/__layout/components/Sidebar/index.vue

@ -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
src/--layout/components/index.js → src/__layout/components/index.js

12
src/--layout/index.vue → src/__layout/index.vue

@ -6,7 +6,7 @@
<div :class="{'fixed-header':fixedHeader}">
<navbar />
</div>
<router-view key="/characterlist/index"/>
<app-main />
</div>
</div>
</template>
@ -24,16 +24,6 @@ export default {
},
mixins: [ResizeMixin],
computed: {
key() {
console.log("AppMain")
console.log("AppMain")
console.log(this.$route.path)
console.log(this.$route.fullPath)
return this.$route.fullPath
},
sidebar() {
return this.$store.state.app.sidebar
},

0
src/--layout/mixin/ResizeHandler copy.js → src/__layout/mixin/ResizeHandler copy.js

0
src/--layout/mixin/ResizeHandler.js → src/__layout/mixin/ResizeHandler.js

265
src/api/api/dutys.js

@ -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
})
}

24
src/api/api/group.js

@ -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
})
}

26
src/api/api/login/login.js

@ -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'
})
}

75
src/api/api/renwu.js

@ -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
})
}

9
src/api/api/table.js

@ -0,0 +1,9 @@
import request from '@/utils/request'
export function getList(params) {
return request({
url: '/vue-admin-template/table/list',
method: 'get',
params
})
}

73
src/api/api/user.js

@ -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
})
}

33
src/api/duty/duty.js

@ -8,6 +8,14 @@ export const getqualevallist = (data) => {
data: data
})
}
//获取正在激活的考核方案
export const getactivationplanversion = (data) => {
return request({
url: '/admin/getactivationplanversion',
method: 'post',
data: data
})
}
//添加定性考核
export const addqualeval = (data) => {
return request({
@ -384,4 +392,27 @@ export const geteitesuntarterinfo = (data) => {
data: data
})
}
//复制部门考核版本
export const copydepartdutyversio = (data) => {
return request({
url: '/admin/copydepartdutyversio',
method: 'post',
data: data
})
}
//删除定量考核目标设定
export const delquantitativeconfig = (data) => {
return request({
url: '/admin/delquantitativeconfig',
method: 'post',
data: data
})
}
//编辑定量考核目标设定
export const eitequantitativeconfig = (data) => {
return request({
url: '/admin/eitequantitativeconfig',
method: 'post',
data: data
})
}

8
src/api/dutys.js

@ -79,3 +79,11 @@ export const lookpersonalordepartment = (data) => {
data: data
})
}
//获取正在激活的考核方案
export const getactivationplanversion = (data) => {
return request({
url: '/admin/getactivationplanversion',
method: 'post',
data: data
})
}

33
src/api/echarts/echarts.js

@ -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
})
}

252
src/api/personnel/post.js

@ -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
})
}

11
src/api/user.js

@ -159,3 +159,14 @@ export const scancodelogin = (data) => {
data: data
})
}
// @Summary 登出
// @Produce application/json
// @Param data body {username:"string",password:"string"}
// @Router /base/login [post]
export const signout = (data) => {
return request({
url: '/base/signout',
method: 'post',
data: data
})
}

6
src/layout/components/AppMain.vue

@ -3,6 +3,8 @@
<transition name="fade-transform" mode="out-in">
<router-view :key="key" />
</transition>
<!-- <router-view /> -->
<!-- <router-view :key="key" /> -->
</section>
</template>
@ -14,7 +16,9 @@ export default {
console.log("AppMain")
console.log("AppMain")
console.log(this.$route.path)
return this.$route.path
console.log(this.$route.fullPath)
return this.$route.fullPath
}
}
}

7
src/layout/components/Navbar.vue

@ -9,7 +9,7 @@
<div class="avatar-wrapper">
<!-- <img :src="avatar+'?imageView2/1/w/80/h/80'" class="user-avatar"> -->
<div>
{{userInfo.groupName}}{{userInfo.roleName}}
{{userInfo.name}}{{userInfo.number}}
</div>
<i class="el-icon-caret-bottom" />
</div>
@ -38,6 +38,7 @@
import { mapGetters } from 'vuex'
import Breadcrumb from '@/components/Breadcrumb'
import Hamburger from '@/components/Hamburger'
import { signout } from '@/api/user'
export default {
data () {
@ -60,13 +61,13 @@ export default {
this.$router.push('/login')
}
this.userInfo=JSON.parse(sessionStorage.getItem('userinfo'));
},
methods: {
toggleSideBar() {
this.$store.dispatch('app/toggleSideBar')
},
logout() {
async logout() {
const res = await signout()
this.$store.commit('user/loginOut')
}
}

5
src/layout/components/Sidebar/Link.vue

@ -14,10 +14,6 @@ export default {
required: true
}
},
created () {
console.log("tiaozhuan")
},
computed: {
isExternal() {
return isExternal(this.to)
@ -38,7 +34,6 @@ export default {
console.log("this.type")
console.log(this.type)
if (this.isExternal) {
console.log("isExternal")
return {
href: to,
target: '_blank',

20
src/--layout/components/Sidebar/SidebarItem.vue → src/layout/components/Sidebar/SidebarItem copy.vue

@ -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>

20
src/layout/components/Sidebar/SidebarItem.vue

@ -1,23 +1,23 @@
<template>
<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" />
<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" />
</el-menu-item>
</app-link>
</template>
<el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body>
<el-submenu v-else ref="subMenu" :index="resolvePath(item.apiUrl)" popper-append-to-body>
<template slot="title">
<item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="item.meta.title" />
<item v-if="item.title" :title="item.title" />
</template>
<sidebar-item
v-for="child in item.children"
:key="child.path"
v-for="child in item.child"
:key="child.id"
:is-nest="true"
:item="child"
:base-path="resolvePath(child.path)"
:base-path="resolvePath(child.apiUrl)"
class="nest-menu"
/>
</el-submenu>

55
src/layout/components/Sidebar/index.vue

@ -2,7 +2,7 @@
<div :class="{'has-logo':showLogo}">
<logo v-if="showLogo" :collapse="isCollapse" />
<el-scrollbar wrap-class="scrollbar-wrapper">
<el-menu
<!-- <el-menu
:default-active="activeMenu"
:collapse="isCollapse"
:background-color="variables.menuBg"
@ -12,27 +12,66 @@
:collapse-transition="false"
mode="vertical"
>
<sidebar-item v-for="route in routes" :key="route.path" :item="route" :base-path="route.path" />
</el-menu>
<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 },
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
},
// routes() {
// return this.$router.options.routes
// },
activeMenu() {
const route = this.$route
const { meta, path } = route

0
src/--layout/components/Sidebar/subMenu copy.vue → src/layout/components/Sidebar/subMenu copy.vue

3
src/--layout/components/Sidebar/subMenu.vue → src/layout/components/Sidebar/subMenu.vue

@ -22,7 +22,8 @@
<span slot="title">{{item.title}}</span>
</el-menu-item>
</applink> -->
<sub-menu v-else :data="item" :key="item.id"></sub-menu>
<!-- <sub-menu v-else :data="item" :key="item.id"></sub-menu> -->
<sub-menu v-else :data="item" ></sub-menu>
</template>
</el-submenu>
</template>

94
src/layout/components/TagsView/ScrollPane.vue

@ -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>

294
src/layout/components/TagsView/index.vue

@ -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>

326
src/layout/components/historyComponent/history.vue

@ -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>

18
src/layout/index.vue

@ -5,14 +5,17 @@
<div class="main-container">
<div :class="{'fixed-header':fixedHeader}">
<navbar />
<tags-view />
</div>
<app-main />
<!-- <HistoryComponent ref="layoutHistoryComponent" /> -->
<router-view key="/characterlist/index"/>
</div>
</div>
</template>
<script>
import { Navbar, Sidebar, AppMain } from './components'
import TagsView from './components/TagsView/index.vue'
import ResizeMixin from './mixin/ResizeHandler'
export default {
@ -20,10 +23,21 @@ export default {
components: {
Navbar,
Sidebar,
AppMain
AppMain,
TagsView
},
mixins: [ResizeMixin],
computed: {
key() {
console.log("AppMain")
console.log("AppMain")
console.log(this.$route.path)
console.log(this.$route.fullPath)
return this.$route.fullPath
},
sidebar() {
return this.$store.state.app.sidebar
},

20
src/main.js

@ -3,11 +3,12 @@ import Vue from 'vue'
import 'normalize.css/normalize.css' // A modern alternative to CSS resets
import ElementUI from 'element-ui'
import * as echarts from 'echarts';
import 'element-ui/lib/theme-chalk/index.css'
// import locale from 'element-ui/lib/locale/lang/en' // lang i18n
import '@/styles/index.scss' // global css
import { Loading } from 'element-ui';
import App from './App'
import store from './store'
import router from './router'
@ -33,8 +34,23 @@ if (process.env.NODE_ENV === 'production') {
// Vue.use(ElementUI, { locale })
// 如果想要中文版 element-ui,按如下方式声明
Vue.use(ElementUI)
Vue.prototype.$echarts = echarts
Vue.config.productionTip = false
Vue.prototype.openLoading = function() {
const loading = this.$loading({ // 声明一个loading对象
lock: true, // 是否锁屏
text: '加载中', // 加载动画的文字
spinner: 'el-icon-loading', // 引入的loading图标
background: 'rgba(0, 0, 0, 0.8)', // 背景颜色
target: '.el-table, .table-flex, .region', // **需要遮罩的区域,这里写要添加loading的选择器**
fullscreen: false,
customClass: 'loadingclass' // **遮罩层新增类名,如果需要修改loading的样式**
})
setTimeout(function () { // 设定定时器,超时5S后自动关闭遮罩层,避免请求失败时,遮罩层一直存在的问题
loading.close(); // 关闭遮罩层
},5000)
return loading;
}
new Vue({
el: '#app',

2
src/router/index1.js → src/router/__index.js

@ -11,7 +11,7 @@ import Layout from '@/layout'
export const constantRoutes = [
{
path: '/login',
component: () => import('@/views/login/index'),
component: () => import('@/views/login/wxLogin'),
hidden: true
},
{

147
src/router/index.js

@ -81,6 +81,153 @@ export const constantRoutes = [
{
path: 'systemmenulist',
component: () => import('@/views/menuSettings/index'),
meta: { title: '菜单管理'}
},
],
},
// 考核数据
{
path: '/echarts',
component: Layout,
children: [
// 当 /user/:id 匹配成功
// UserHome 将被渲染到 User 的 <router-view> 内部
{
path: 'table',
component: () => import('@/views/echarts/table'),
meta: { title: '明细表'}
},
{
path: 'echarts',
component: () => import('@/views/echarts/echarts'),
meta: { title: '图表信息'}
},
{
path: 'total',
component: () => import('@/views/echarts/total'),
meta: { title: '成绩表'}
},
],
},
// hr设置
{
path: '/personnel',
component: Layout,
children: [
// 当 /user/:id 匹配成功
// UserHome 将被渲染到 User 的 <router-view> 内部
{
path: 'post',
component: () => import('@/views/personnel/post/index'),
meta: { title: '岗位管理'}
},
],
},
// hr设置
{
path: '/hr',
component: Layout,
children: [
// 当 /user/:id 匹配成功
// UserHome 将被渲染到 User 的 <router-view> 内部
{
path: 'personnel',
component: () => import('@/views/hr/personnel.vue'),
meta: { title: '人员管理'}
},
{
path: 'position',
component: () => import('@/views/hr/position.vue'),
meta: { title: '职务分类'}
},
{
path: 'jobTitle',
component: () => import('@/views/hr/jobTitle.vue'),
},
{
path: 'organizeType',
component: () => import('@/views/hr/organizeType.vue'),
},
{
path: 'organization',
component: () => import('@/views/hr/organization.vue'),
},
],
},
// 数据提报
{
path: '/qualitative',
component: Layout,
children: [
// 当 /user/:id 匹配成功
// UserHome 将被渲染到 User 的 <router-view> 内部
{
path: 'qualitative',
component: () => import('@/views/qualitative/index'),
meta: { title: '定性考核'}
},
{
path: 'mete',
component: () => import('@/views/mete/index'),
meta: { title: '定量考核'}
},
],
},
// 审核记录
{
path: '/approvalData',
component: Layout,
children: [
// 当 /user/:id 匹配成功
// UserHome 将被渲染到 User 的 <router-view> 内部
{
path: 'approvalData',
component: () => import('@/views/approvalData/index'),
meta: { title: '审核记录'}
},
],
},
// 考核方案
{
path: '/assessmentProgram',
component: Layout,
children: [
// 当 /user/:id 匹配成功
// UserHome 将被渲染到 User 的 <router-view> 内部
{
path: 'departmentalAssessment',
component: () => import('@/views/assessmentProgram/departmentalAssessment'),
meta: { title: '定量考核'}
},
{
path: 'qualitativeIndicators',
component: () => import('@/views/assessmentProgram/qualitativeIndicators'),
meta: { title: '定性考核'}
},
],
},
// 基础信息
{
path: '/basicInfo',
component: Layout,
children: [
// 当 /user/:id 匹配成功
// UserHome 将被渲染到 User 的 <router-view> 内部
{
path: 'assessmentDimension',
component: () => import('@/views/basicInfo/assessmentDimension.vue'),
meta: { title: '考核维度'}
},
{
path: 'project',
component: () => import('@/views/basicInfo/project'),
meta: { title: '考核指标'}
},
{
path: 'Target',
component: () => import('@/views/basicInfo/target'),
meta: { title: '考核目标'}
},
],
},

6
src/utils/bus.js

@ -0,0 +1,6 @@
// using ES6 modules
import mitt from 'mitt'
export const emitter = mitt()

12
src/utils/i18n.js

@ -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
}

31
src/utils/request.js

@ -1,8 +1,21 @@
import axios from 'axios'
import { MessageBox, Message } from 'element-ui'
import store from '@/store'
import { Loading } from 'element-ui';
import { getToken,getKey } from '@/utils/auth'
import Vue from 'vue'
function showloading() {
//因为是全局导入ui,所以直接使用Vue.prototype,如果是局部导入可以命名为对应名称
Vue.prototype.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
}
function endLoading() { //使用Element loading-close 方法
Vue.prototype.$loading().close()
}
// create an axios instance
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
@ -45,19 +58,19 @@ service.interceptors.response.use(
*/
response => {
const res = response.data
// if the custom code is not 20000, it is judged as an error.
if (res.code !== 0) {
endLoading()
if(res.code === 7){
store.commit('user/loginOut')
}
Message({
message: res.msg || 'Error',
type: 'error',
duration: 5 * 1000
})
if(res.code === 7){
store.commit('user/loginOut')
}
// 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
// to re-login
@ -71,7 +84,9 @@ service.interceptors.response.use(
})
})
}
return Promise.reject(new Error(res.msg || 'Error'))
return res
// return Promise.reject(Error).catch(Error=>{console.log(Error)})
// return Promise.reject(new Error(res.msg || 'Error'))
} else {
return res
}

89
src/utils/request1.js

@ -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

743
src/views/approvalData/index.vue

@ -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">已同意&nbsp·&nbsp</div>
<div class="left" v-if="i.state==1" type="info">未操作&nbsp·&nbsp</div>
<div class="left" v-if="i.state==3" type="danger">驳回&nbsp·&nbsp</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">已同意&nbsp·&nbsp</div>
<div class="left" v-if="i.state==1" type="info">未操作&nbsp·&nbsp</div>
<div class="left" v-if="i.state==3" type="danger">驳回&nbsp·&nbsp</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, //12
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, //12
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, //12
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, //12
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>

4
src/views/assessmentProgram/assessmentDimension.vue

@ -73,7 +73,7 @@
</div>
</div>
<!-- 新增弹框 -->
<el-dialog :visible.sync="dialogFormVisible" :before-close="closeDialog" title="新增" width="20%">
<el-dialog :close-on-click-modal="false" :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="title">
<el-input v-model="form.title" autocomplete="off" />
@ -87,7 +87,7 @@
</template>
</el-dialog>
<!-- 编辑弹框 -->
<el-dialog :visible.sync="editDialogFormVisible" :before-close="editCloseDialog" title="修改" width="20%">
<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" />

440
src/views/assessmentProgram/departmentalAssessment.vue

@ -4,17 +4,17 @@
<div class="gva-search-box">
<el-form ref="searchForm" :inline="true" :model="searchVersion">
<el-form-item label="所属公司">
<el-select v-model="searchVersion.group" clearable placeholder="请选择" @change="selectGroup">
<el-select filterable v-model="searchVersion.group" clearable placeholder="请选择" @change="selectGroup">
<el-option
v-for="item in companyList"
:key="item.wxId"
:key="item.id"
:label="item.name"
:value="item.wxId">
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="所属部门">
<el-cascader clearable v-model="searchVersion.deaprtid" :options="departmentList" :show-all-levels="false" :props="props1"></el-cascader>
<el-cascader filterable clearable v-model="searchVersion.deaprtid" :options="departmentList" :show-all-levels="false" :props="props1"></el-cascader>
<!-- <el-select v-model="searchVersion.deaprtid" clearable placeholder="请选择">
<el-option
v-for="item in departmentList"
@ -43,7 +43,7 @@
<div class="gva-table-box">
<div class="gva-btn-list">
<!-- <el-button size="mini" type="primary" icon="el-icon-setting" @click="showDimension()">设置维度权重</el-button> -->
<el-button size="mini" type="primary" icon="el-icon-setting" @click="showIndex()">生成部门考核方案</el-button></el-button>
<el-button size="mini" type="primary" icon="el-icon-setting" @click="showIndex()">生成部门考核方案</el-button>
</div>
<el-table border :data="versionData" :span-method="versionSpanMethod">
<el-table-column align="left" label="部门">
@ -81,12 +81,12 @@
type="text"
@click="showDetails(scope.row)"
>查看详情</el-button>
<!-- <el-button
icon="el-icon-edit"
<el-button
icon="el-icon-document-checked"
size="small"
type="text"
@click="showEdit(scope.row)"
>编辑</el-button> -->
@click="copyShow(scope.row)"
>复制</el-button>
<el-button
icon="el-icon-delete"
size="small"
@ -161,12 +161,12 @@
</el-table> -->
</div>
<!-- 新增弹框 -->
<el-dialog :visible.sync="dialogFormVisible" :before-close="closeDialog" title="新增" width="100%">
<el-dialog :close-on-click-modal="false" :visible.sync="dialogFormVisible" :before-close="closeDialog" title="新增" width="100%">
<el-form ref="addForm" :model="form" :rules="rules" label-width="150px">
<el-row>
<el-col :span="12">
<el-form-item label="所属公司" prop="title">
<el-select v-model="form.group" clearable placeholder="请选择" @change="selectGroup">
<el-select filterable v-model="form.group" clearable placeholder="请选择" @change="selectGroup">
<el-option
v-for="item in companyList"
:key="item.id"
@ -178,7 +178,7 @@
</el-col>
<el-col :span="12">
<el-form-item label="所属部门" prop="title" v-if="form.group!=''">
<el-cascader clearable v-model="form.parentid" :options="departmentList" :show-all-levels="false" :props="props1" @change="selectDepartment"></el-cascader>
<el-cascader filterable clearable v-model="form.parentid" :options="departmentList" :show-all-levels="false" :props="props1" @change="selectDepartment"></el-cascader>
<!-- <el-select multiple v-model="form.parentid" clearable placeholder="请选择" @change="selectDepartment">
<el-option
v-for="item in departmentList"
@ -335,7 +335,7 @@
<el-row>
<el-col :span="6">
<el-form-item label="所属公司" prop="title">
<el-select v-model="form.group" clearable placeholder="请选择" @change="selectGroup">
<el-select filterable v-model="form.group" clearable placeholder="请选择" @change="selectGroup">
<el-option
v-for="item in companyList"
:key="item.id"
@ -347,15 +347,8 @@
</el-col>
<el-col :span="6">
<el-form-item label="所属部门" prop="title" v-if="form.group!=''">
<el-cascader clearable v-model="form.parentid" :options="departmentList" :show-all-levels="false" :props="props1" @change="shouWei"></el-cascader>
<!-- <el-select v-model="form.parentid" clearable placeholder="请选择" @change="shouWei">
<el-option
v-for="item in departmentList"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select> -->
<el-cascader filterable clearable v-model="form.parentid" :options="departmentList" :show-all-levels="false" :props="props1" @change="shouWei"></el-cascader>
</el-form-item>
</el-col>
<el-col :span="6">
@ -424,7 +417,7 @@
prop="referencescore"
>
<template slot-scope="scope">
<el-input v-model.number="scope.row.referencescore" autocomplete="off" @change="zhibiaofen" />
<el-input v-model.number="scope.row.referencescore" autocomplete="off" @input="zhibiaofen" />
<!-- <el-input v-if="scope.row.istrue==1" v-model.number="scope.row.referencescore" autocomplete="off" @change="zhibiaofen" /> -->
<!-- <div v-if="scope.row.istrue==2">{{scope.row.referencescore}}</div> -->
</template>
@ -436,9 +429,10 @@
prop="status"
>
<template slot-scope="scope">
<el-select v-model="scope.row.status" clearable placeholder="请选择">
<el-select v-model="scope.row.status" clearable placeholder="请选择" @change="zhibiaostatus(scope.row)">
<el-option :value=1 label="使用">使用</el-option>
<el-option :value=2 label="禁用">禁用</el-option>
<el-option :value=3 label="观察">观察</el-option>
</el-select>
<!-- <div v-if="scope.row.targetweight!=0">{{scope.row.targetweight}}</div> -->
</template>
@ -510,6 +504,13 @@
<el-table-column prop="targetweight" label="指标权重" align="center" width="80"></el-table-column>
<el-table-column prop="content" label="说明"></el-table-column>
<el-table-column prop="unit" label="单位" align="center" width="80"/>
<el-table-column prop="unit" label="指标状态" align="center" width="80">
<template slot-scope="scope">
<el-tag v-if="scope.row.state==1">使用</el-tag>
<el-tag type="danger" v-if="scope.row.state==2">禁用</el-tag>
<el-tag type="warning" v-if="scope.row.state==3">观察</el-tag>
</template>
</el-table-column>
<el-table-column prop="cycle" label="周期" align="center" width="80">
<template slot-scope="scope">
<el-tag v-if="scope.row.cycle==1"></el-tag>
@ -518,9 +519,10 @@
<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 prop="cycleattr" label="频次" width="80">
<el-table-column prop="cycleattr" label="频次" width="90">
<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>
@ -528,6 +530,7 @@
<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 prop="userlist" label="执行人" width="80">
@ -569,7 +572,7 @@
</el-table>
</el-dialog>
<!-- 修改指标说明 -->
<el-dialog :visible.sync="contentShow" title="修改" width="40%">
<el-dialog :close-on-click-modal="false" :visible.sync="contentShow" title="修改" width="40%">
<el-form :model="editTargerFrom" label-width="150px">
<el-form-item label="说明" prop="content">
<el-input
@ -580,6 +583,17 @@
</el-input>
<!-- <el-input v-model="editTargerFrom.content"/> -->
</el-form-item>
<el-form-item label="状态" prop="content">
<el-select v-model="editTargerFrom.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="执行人" prop="content">
<el-cascader filterable clearable v-model="editTargerFrom.operator" :options="grouplistBackup" :show-all-levels="false" :props="userProps"></el-cascader>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
@ -587,6 +601,107 @@
</div>
</template>
</el-dialog>
<!-- 复制弹窗 -->
<el-dialog :close-on-click-modal="false" :visible.sync="copyDialogFormVisible" title="方案复制" width="70%">
<el-form ref="addForm" :model="form" :rules="rules" label-width="150px">
<el-row>
<el-col :span="6">
<el-form-item label="年度">
<el-select v-model="copyForm1.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-col>
<el-col :span="6">
<div style="width: 200px;height: 40px;line-height: 40px;margin: 0 auto;">
纬度合计分{{weiduFractionCopy}}
</div>
</el-col>
</el-row>
<el-form-item>
<!-- 表格表单提交 -->
<el-card class="box-card" v-for="(item,index) in weiDuCopyList" :key="item.id">
<el-row>
<el-col :span="8">
<span>考核纬度{{item.name}}</span>
</el-col>
<el-col :span="8">
<!-- <el-select v-model="item.ordering" clearable placeholder="请选择顺序">
<el-option :value=1 label="1">1</el-option>
<el-option :value=2 label="2">2</el-option>
<el-option :value=3 label="3">3</el-option>
<el-option :value=4 label="4">4</el-option>
<el-option :value=5 label="5">5</el-option>
<el-option :value=6 label="2">6</el-option>
</el-select> -->
</el-col>
<el-col :span="8">
指标合计分{{item.zhiFraction}}
</el-col>
</el-row>
<el-table
border
:data="item.child"
style="width: 100%">
<el-table-column
label="指标名称"
align="center"
prop="name"
>
</el-table-column>
<el-table-column
label="说明"
align="center"
prop="illustrate"
>
<template slot-scope="scope">
<el-input v-model="scope.row.content" autocomplete="off" />
<!-- <div v-if="scope.row.targetweight!=0">{{scope.row.targetweight}}</div> -->
</template>
</el-table-column>
<el-table-column
label="指标权重"
align="center"
prop="referencescore"
>
<template slot-scope="scope">
<el-input v-model.number="scope.row.referencescore" autocomplete="off" @input="zhibiaofenCopy" />
<!-- <el-input v-if="scope.row.istrue==1" v-model.number="scope.row.referencescore" autocomplete="off" @change="zhibiaofen" /> -->
<!-- <div v-if="scope.row.istrue==2">{{scope.row.referencescore}}</div> -->
</template>
</el-table-column>
<el-table-column
label="状态"
align="center"
prop="status"
>
<template slot-scope="scope">
<el-select v-model="scope.row.status" clearable placeholder="请选择" @change="zhibiaostatusCopy(scope.row)">
<el-option :value=1 label="使用">使用</el-option>
<el-option :value=2 label="禁用">禁用</el-option>
<el-option :value=3 label="观察">观察</el-option>
</el-select>
<!-- <div v-if="scope.row.targetweight!=0">{{scope.row.targetweight}}</div> -->
</template>
</el-table-column>
</el-table>
</el-card>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button size="small" type="primary" @click="zhuheTiCopy"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
@ -595,7 +710,7 @@ import { dutyclasslist } from '@/api/duty/dimension'
import { gettasktarget,gettasktargetsun,gettasktargetcontary,addqualeval,
addration,departmenttasklist,addqubatch,bumenList,departmentlistnew,adddepartmentdutyinfo,
newgerderpattarlist,newadddepartduty,deldepartdutytarger,deldepartduty,departdutyplanversion,adddepartdutyversio,
lookdepartdutyversio,onoffdepartdutyversio,eitedepartexplain
lookdepartdutyversio,onoffdepartdutyversio,eitedepartexplain,copydepartdutyversio
} from '@/api/duty/duty'
import projectDialog from '@/components/projectDialog/index.vue'
import { dutylist,getdutyinfo,eitedutyinfo,eitedutystate } from '@/api/duty/quantitativeIndicators'
@ -612,7 +727,12 @@ export default {
},
data() {
return {
copyDialogFormVisible:false,
weiduFractionCopy:0,
weiDuCopyList:[],
copyForm1:{},
props1: {
checkStrictly: true,
value: "id",
label: "name",
@ -636,9 +756,9 @@ export default {
showUser:false,
//
userProps: {
value: "id",
value: "key",
label: "name",
children: "groupUser",
children: "govlist",
emitPath:false,
multiple: true
},
@ -777,7 +897,7 @@ export default {
},
//
searchVersion: {
group: '',
group: 2,
deaprtid:'',
year: "", //
},
@ -887,6 +1007,36 @@ export default {
this.detailsShow=true
},
//
async copyShow(row){
const that = this
const from = {
key:row.key
}
const res = await copydepartdutyversio(from)
this.copyForm1=res.data
this.weiDuCopyList=res.data.child
this.weiduFractionCopy=0
this.weiDuCopyList.forEach(function(element) {
element.zhiFraction=0
});
this.weiDuCopyList.forEach(function(element) {
if (element.child!=null) {
element.child.forEach(function(iteam){
if(iteam.status!=2){
element.zhiFraction+=iteam.referencescore
}
})
}
});
this.weiduFractionCopy=0
this.weiDuCopyList.forEach(function(element) {
that.weiduFractionCopy+=element.zhiFraction
});
this.copyDialogFormVisible=true
},
//
async deldetePartDuty(row){
const deleFrom = {
@ -918,7 +1068,9 @@ export default {
qualevalid:row.qualevalid,
deaprtid:row.parentid,
dimension:row.dimension,
targetid:row.target
targetid:row.target,
state:row.state,
operator:row.userlist
},
// this.editTargerFrom.content=row.content
// this.editTargerFrom.group=row.group
@ -944,7 +1096,13 @@ export default {
},
//
async deldepTarger(row){
const deleFrom = {
this.$confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(async() => {
const deleFrom = {
group: row.group,
deaprtid: row.parentid,
dimension: "1", //
@ -958,18 +1116,89 @@ export default {
})
this.getDataList()
}
})
},
//
zhibiaofen(){
const that=this
this.Fraction=0
this.weiDuList.forEach(function(element) {
element.zhiFraction=0
});
this.weiDuList.forEach(function(element) {
if (element.child!=null) {
element.child.forEach(function(iteam){
if(iteam.status!=2){
element.zhiFraction+=iteam.referencescore
}
})
}
});
this.weiduFraction=0
this.weiDuList.forEach(function(element) {
that.weiduFraction+=element.zhiFraction
});
},
//
zhibiaofenCopy(){
const that=this
this.weiduFractionCopy=0
this.weiDuCopyList.forEach(function(element) {
element.zhiFraction=0
});
this.weiDuCopyList.forEach(function(element) {
if (element.child!=null) {
element.child.forEach(function(iteam){
if(iteam.status!=2){
element.zhiFraction+=iteam.referencescore
}
})
}
});
this.weiduFractionCopy=0
this.weiDuCopyList.forEach(function(element) {
that.weiduFractionCopy+=element.zhiFraction
});
},
//
zhibiaostatusCopy(row){
const that=this
this.weiduFractionCopy=0
this.weiDuCopyList.forEach(function(element) {
element.zhiFraction=0
});
this.weiDuCopyList.forEach(function(element) {
if (element.child!=null) {
element.child.forEach(function(iteam){
if(iteam.status!=2){
element.zhiFraction+=iteam.referencescore
}
})
}
});
this.weiduFractionCopy=0
this.weiDuCopyList.forEach(function(element) {
that.weiduFractionCopy+=element.zhiFraction
});
},
//
zhibiaostatus(row){
const that=this
this.Fraction=0
this.weiDuList.forEach(function(element) {
element.zhiFraction=0
});
});
this.weiDuList.forEach(function(element) {
if (element.child!=null) {
element.child.forEach(function(iteam){
element.zhiFraction+=iteam.referencescore
if(iteam.status!=2){
element.zhiFraction+=iteam.referencescore
}
})
}
});
@ -983,32 +1212,81 @@ export default {
},
//
async zhuheTi(){
if (this.weiduFraction==100) {
console.log(this.weiDuList)
const loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
this.form.group=this.form.group.toString()
this.form.parentid=this.form.parentid.toString()
this.form.child=this.weiDuList
// const res = await adddepartmentdutyinfo(this.form)
// const res = await newadddepartduty(this.form)
// this.demDialogFormVisible=false
const res = await adddepartdutyversio(this.form)
if (res.code === 0) {
this.$message({
type: 'success',
message: '操作成功!'
})
this.demDialogFormVisible=false
this.getVersionDataList()
this.form={
group:'',
parentid:'',
child:[]
}
group:'',
parentid:'',
child:[]
}
}
this.weiduFraction=0
this.form={
group:'',
parentid:'',
child:[]
group:'',
parentid:'',
child:[]
}
loading.close();
}else{
this.$message({
type: 'error',
message: '总分不是100!'
})
}
},
//
async zhuheTiCopy(){
if (this.weiduFractionCopy==100) {
const loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
const from ={
group:this.copyForm1.group.toString(),
parentid:this.copyForm1.department.toString(),
child:this.weiDuCopyList,
year:this.copyForm1.year
}
// const res = await adddepartmentdutyinfo(this.form)
// const res = await newadddepartduty(this.form)
// this.demDialogFormVisible=false
const res = await adddepartdutyversio(from)
if (res.code === 0) {
this.$message({
type: 'success',
message: '操作成功!'
})
this.getVersionDataList()
}
this.weiduFractionCopy=0
loading.close();
}else{
this.$message({
type: 'error',
@ -1072,6 +1350,7 @@ export default {
departmentid: row.parentid, //
dimension: row.dimension, //
target: row.target, //
versionnumber: row.qualevalid //
}
const res = await departmenttasklist(methodData)
if (res.code==0) {
@ -1150,15 +1429,15 @@ export default {
// colspan: _col
// };
// }
if (columnIndex === 10) {
const _row = this.spanArr[rowIndex];
const _col = _row > 0 ? 1 : 0;
return {
// [0,0] [2,1]
rowspan: _row,
colspan: _col
};
}
// if (columnIndex === 10) {
// const _row = this.spanArr[rowIndex];
// const _col = _row > 0 ? 1 : 0;
// return {
// // [0,0] [2,1]
// rowspan: _row,
// colspan: _col
// };
// }
if (columnIndex === 0||columnIndex === 1) {
const _row = this.spanArr1[rowIndex];
const _col = _row > 0 ? 1 : 0;
@ -1168,7 +1447,7 @@ export default {
colspan: _col
};
}
if (columnIndex === 2||columnIndex === 3||columnIndex === 4||columnIndex === 5||columnIndex === 6||columnIndex === 7||columnIndex === 8||columnIndex === 9) {
if (columnIndex === 2||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 {
@ -1226,6 +1505,24 @@ export default {
})
}
});
this.Fraction=0
this.weiDuList.forEach(function(element) {
element.zhiFraction=0
});
this.weiDuList.forEach(function(element) {
if (element.child!=null) {
element.child.forEach(function(iteam){
if(iteam.status!=2){
element.zhiFraction+=iteam.referencescore
}
})
}
});
this.weiduFraction=0
this.weiDuList.forEach(function(element) {
that.weiduFraction+=element.zhiFraction
});
console.log(this.weiDuList)
}
},
@ -1287,8 +1584,42 @@ export default {
//
async getSystemadminlist(){
const res = await getgroupuser()
this.grouplistBackup=res.data.list
this.grouplistBackup=res.data
this.grouplistBackup.forEach(item => {
if (item.govlist != null) {
// this.digui(item);
item.govlist.forEach(items => {
// forEach,itemthis.digui(item);
this.digui(items); //
//
console.log(items, '看我查看完整的数据哦')
// children
})
} else {
item.govlist=item.child
//
}
})
},
//
digui (item) {
//
if (item.govlist != null) {
// valuelabel,
item.govlist.forEach(ff => {
// children
this.digui(ff)
})
} else {
// children西
// valuelabel,
// --------------------------线---------------------------------
item.govlist=item.child
}
//
},
//
async getGrouplist(){
const idFrom = {
@ -1368,6 +1699,7 @@ export default {
this.getVersionDataList()
}
}
this.getVersionDataList()
},
//
onReset() {

222
src/views/assessmentProgram/qualitativeIndicators.vue

@ -99,7 +99,7 @@
</template>
</el-table-column>
<el-table-column prop="dimensionname" label="度"/>
<el-table-column prop="dimensionname" label="考核维度"/>
<el-table-column align="left" label="部门">
<template #default="scope">
<el-collapse>
@ -179,7 +179,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="所属公司" prop="title" v-show="parentidShow">
<el-select v-model="form.group" clearable placeholder="请选择">
<el-select filterable v-model="form.group" clearable placeholder="请选择">
<el-option
v-for="item in companyList"
:key="item.id"
@ -191,7 +191,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="所属部门" prop="title" v-show="parentidShow">
<el-cascader clearable v-model="form.parentid" :options="departmentList" :show-all-levels="false" :props="props"></el-cascader>
<el-cascader filterable clearable v-model="form.parentid" :options="departmentList" :show-all-levels="false" :props="props"></el-cascader>
<!-- <el-select multiple v-model="form.parentid" clearable placeholder="请选择">
<el-option
v-for="item in departmentList"
@ -287,7 +287,7 @@
label="操作类型"
align="center">
<template slot-scope="scope">
<el-select v-model="scope.row.addorreduce" clearable placeholder="请选择">
<el-select v-model="scope.row.addorreduce" placeholder="请选择">
<el-option label="加分" :value=2></el-option>
<el-option label="减分" :value=1></el-option>
<el-option label="加减分" :value=3></el-option>
@ -329,7 +329,7 @@
label="客观证据"
align="center">
<template slot-scope="scope">
<el-input v-model="scope.row.detailedtargetcontent"></el-input>
<el-input v-model="scope.row.censorcont"></el-input>
</template>
</el-table-column>
<el-table-column
@ -342,7 +342,7 @@
type="textarea"
autosize
placeholder="请输入内容"
v-model="scope.row.detailedtargetcontent">
v-model="scope.row.content">
</el-input>
<!-- <el-input v-model="scope.row.content" autocomplete="off" /> -->
</template>
@ -372,7 +372,7 @@
label="执行人"
align="center">
<template slot-scope="scope">
<el-cascader clearable v-model="scope.row.userlist" :options="grouplistBackup" :show-all-levels="false" :props="userProps"></el-cascader>
<el-cascader filterable clearable v-model="scope.row.userlist" :options="grouplistBackup" :show-all-levels="false" :props="userProps"></el-cascader>
</template>
</el-table-column>
<el-table-column align="left" fixed="right" label="操作">
@ -459,7 +459,7 @@
label="执行人"
align="center">
<template slot-scope="scope">
<el-cascader clearable v-model="scope.row.userlist" :options="grouplistBackup" :show-all-levels="false" :props="userProps"></el-cascader>
<el-cascader filterable clearable v-model="scope.row.userlist" :options="grouplistBackup" :show-all-levels="false" :props="userProps"></el-cascader>
</template>
</el-table-column>
<!-- <el-table-column align="left" fixed="right" label="操作">
@ -520,9 +520,9 @@
</el-table>
</el-dialog>
<!-- 编辑部门弹框 -->
<el-dialog :visible.sync="buMenEditDialog" :before-close="bumeneditCloseDialog" title="修改" width="20%">
<el-dialog :close-on-click-modal="false" :visible.sync="buMenEditDialog" :before-close="bumeneditCloseDialog" title="修改" width="20%">
<el-form :model="bumenEdit" label-width="150px">
<el-form-item label="部门">
<el-form-item label="被考核部门">
<el-cascader clearable v-model="bumenEdit.departmentid" :options="grouplist" :show-all-levels="false" :props="props"></el-cascader>
</el-form-item>
</el-form>
@ -536,19 +536,19 @@
<!-- 考核办法弹框 -->
<el-dialog :visible.sync="methodShow" title="考核办法" width="75%">
<div class="gva-search-box">
<el-form :inline="true" :model="searchfu">
<el-form-item label="所属公司">
<el-select v-model="searchfu.group" clearable placeholder="请选择" @change="selectGroup">
<el-option
v-for="item in companyList"
:key="item.wxId"
:label="item.name"
:value="item.wxId">
</el-option>
</el-select>
<el-form :inline="true" :model="rowZhiData">
<el-form-item label="所属公司">
<el-select filterable v-model="methodData.group" clearable placeholder="请选择" @change="selectGroup">
<el-option
v-for="item in companyList"
:key="item.wxId"
:label="item.name"
:value="item.wxId">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="所属部门">
<el-cascader clearable v-model="searchfu.deaprtid" :options="searchDepartmentList" :show-all-levels="false" :props="props1"></el-cascader>
<el-cascader filterable clearable v-model="methodData.departid" :options="searchDepartmentList" :show-all-levels="false" :props="props1"></el-cascader>
<!-- <el-select v-model="searchfu.deaprtid" clearable placeholder="请选择">
<el-option
@ -560,18 +560,18 @@
</el-select> -->
</el-form-item>
<el-form-item label="检查方式">
<el-select multiple v-model="searchfu.censortype" clearable placeholder="请选择">
<el-option label="现场检查" :value="1"></el-option>
<el-option label="资料审查" :value="2"></el-option>
<el-option label="事件触发" :value="3"></el-option>
<el-select multiple v-model="methodData.censortype" clearable placeholder="请选择">
<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="检查周期">
<el-select v-model="searchfu.censorrate" clearable placeholder="请选择">
<el-option label="月" :value=4></el-option>
<el-option label="季度" :value=5></el-option>
<el-option label="半年" :value=7></el-option>
<el-option label="年" :value=6></el-option>
<el-select v-model="methodData.censorrate" clearable placeholder="请选择">
<el-option label="月" :value="4"></el-option>
<el-option label="季度" :value="5"></el-option>
<el-option label="半年" :value="7"></el-option>
<el-option label="年" :value="6"></el-option>
</el-select>
</el-form-item>
@ -596,12 +596,20 @@
<!-- <el-table-column prop="targetsunname" label="权重"></el-table-column> -->
<el-table-column prop="detailedtargetname" label="考核内容"></el-table-column>
<el-table-column prop="scoreing" label="考核标准" width="80" align="center"></el-table-column>
<el-table-column prop="unit" label="单位" width="80" align="center"/>
<el-table-column prop="unit" label="单位" width="80" align="center">
<template #default="scope">
<div v-if="scope.row.unit==0">
</div>
<div v-if="scope.row.unit!=0">
{{scope.row.unit}}
</div>
</template>
</el-table-column>
<el-table-column prop="unit" label="检查方式" width="120" align="center">
<template #default="scope">
<div v-for="(iteam,index) in scope.row.censortype" :key="index">
<el-tag v-if="iteam==1">现场检查</el-tag>
<el-tag v-if="iteam==2">资料检查</el-tag>
<el-tag v-if="iteam==2">资料</el-tag>
<el-tag v-if="iteam==3">事件触发</el-tag>
</div>
</template>
@ -609,19 +617,19 @@
<el-table-column prop="censorcont" label="客观证据" width="120" align="center"/>
<el-table-column label="检查周期" width="80" align="center">
<template #default="scope">
{{scope.row.cycleattrdettar}}/
<span v-if="scope.row.cycledettar==4">
</span>
<span v-if="scope.row.cycledettar==5">
季度
</span>
<span v-if="scope.row.cycledettar==7">
半年
</span>
<span v-if="scope.row.cycledettar==6">
</span>
<div v-if="scope.row.censorrate==='0'"></div>
<div v-else-if="scope.row.cycledettar==='0'"></div>
<div v-else>
{{scope.row.censorrate}} /
<span v-if="scope.row.cycledettar==1"></span>
<span v-if="scope.row.cycledettar==2"></span>
<span v-if="scope.row.cycledettar==3"></span>
<span v-if="scope.row.cycledettar==4"></span>
<span v-if="scope.row.cycledettar==5">季度</span>
<span v-if="scope.row.cycledettar==7">半年</span>
<span v-if="scope.row.cycledettar==6"></span>
</div>
</template>
</el-table-column>
<el-table-column prop="content" label="备注说明" width="120"/>
@ -673,16 +681,16 @@
</el-table>
</el-dialog>
<!-- 修改子栏目名称 -->
<el-dialog :visible.sync="showzhiming" title="修改" width="40%">
<el-dialog :close-on-click-modal="false" :visible.sync="showzhiming" title="修改" width="40%">
<el-form :model="nameFrom" label-width="150px">
<el-form-item label="考核项目名称" prop="title">
<el-input v-model="nameFrom.name" autocomplete="off" />
</el-form-item>
<el-form-item label="部门">
<el-cascader clearable v-model="nameFrom.departmentmap" :options="grouplist" :show-all-levels="false" :props="props"></el-cascader>
<el-form-item label="被考核部门">
<el-cascader filterable clearable v-model="nameFrom.departmentmap" :options="grouplist" :show-all-levels="false" :props="props"></el-cascader>
</el-form-item>
<el-form-item label="执行人">
<el-cascader clearable v-model="nameFrom.operator" :options="grouplistBackup" :show-all-levels="false" :props="userProps"></el-cascader>
<el-cascader filterable clearable v-model="nameFrom.operator" :options="grouplistBackup" :show-all-levels="false" :props="userProps"></el-cascader>
</el-form-item>
</el-form>
<template #footer>
@ -692,7 +700,7 @@
</template>
</el-dialog>
<!-- 修改细则 -->
<el-dialog :visible.sync="xizeDig" title="修改" width="40%">
<el-dialog :close-on-click-modal="false" :visible.sync="xizeDig" title="修改" width="40%">
<el-form :model="xizeData" label-width="150px">
<el-form-item label="考核内容" prop="title">
<el-input
@ -720,6 +728,13 @@
</el-option>
</el-select>
</el-form-item>
<el-form-item label="操作类型" prop="addorreduce">
<el-select v-model="xizeData.addreduce" placeholder="请选择">
<el-option label="加分" :value=2></el-option>
<el-option label="减分" :value=1></el-option>
<el-option label="加减分" :value=3></el-option>
</el-select>
</el-form-item>
<el-form-item label="检查方式">
<el-select multiple v-model="xizeData.censortype" clearable placeholder="请选择">
@ -755,11 +770,11 @@
v-model="xizeData.detailedtargetcontent">
</el-input>
</el-form-item>
<el-form-item label="部门">
<el-form-item label="被考核部门">
<el-cascader clearable v-model="xizeData.departmentid" :options="grouplist" :show-all-levels="false" :props="props"></el-cascader>
</el-form-item>
<el-form-item label="执行人" prop="title">
<el-cascader clearable v-model="xizeData.operator" :options="grouplistBackup" :show-all-levels="false" :props="userProps"></el-cascader>
<el-cascader filterable clearable v-model="xizeData.operator" :options="grouplistBackup" :show-all-levels="false" :props="userProps"></el-cascader>
</el-form-item>
</el-form>
<template #footer>
@ -769,7 +784,7 @@
</template>
</el-dialog>
<!-- 新增 -->
<el-dialog :visible.sync="addbiao" title="新增" width="40%">
<el-dialog :close-on-click-modal="false" :visible.sync="addbiao" title="新增" width="40%">
<el-form :model="xizeDataFrom" label-width="150px">
<el-form-item label="考核内容" prop="detailedtargetname">
<el-input
@ -806,7 +821,7 @@
</el-input>
</el-form-item>
<el-form-item label="执行人" prop="operator">
<el-cascader clearable v-model="xizeDataFrom.operator" :options="grouplistBackup" :show-all-levels="false" :props="userProps"></el-cascader>
<el-cascader filterable clearable v-model="xizeDataFrom.operator" :options="grouplistBackup" :show-all-levels="false" :props="userProps"></el-cascader>
</el-form-item>
</el-form>
<template #footer>
@ -842,6 +857,7 @@ export default {
},
data() {
return {
methodData:{},
searchfu:{},
searchDepartmentList:[],
unitDataList:[
@ -1075,7 +1091,7 @@ export default {
this.getDataList()
this.getGrouplist()
this.getbumenlist()
// this.initialDepartment()
this.initialDepartment()
//
// this.departmentlist()
this.getDutyclasslist()
@ -1117,7 +1133,13 @@ export default {
methods: {
//
async deleteSun(row){
const deleFrom={
this.$confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(async() => {
const deleFrom={
// id: row.targetsun
id: row.targetsun, //ID
assid: row.target //Id
@ -1130,6 +1152,8 @@ export default {
})
this.getzhilanmuList()
}
})
},
//
async addxize(){
@ -1146,6 +1170,14 @@ export default {
},
//
async xiuxize(){
if (this.xizeData.cycle=='') {
this.xizeData.cycle=0
}
if (this.xizeData.censorrate=='') {
this.xizeData.censorrate=0
}
this.xizeData.departmentid=this.xizeData.departmentid.map(String)
this.xizeData.censortype=this.xizeData.censortype.map(String)
const resa = await neweitedetailedtarget(this.xizeData)
this.getzhilanmuList()
@ -1189,7 +1221,7 @@ export default {
cycleattr: this.targetsunList.cycleattr, //
userlist: this.targetsunList.reportmap//
}
this.RulesList.push(JSON.parse(JSON.stringify(this.rulesObject )))
this.RulesList.push(JSON.parse(JSON.stringify(this.rulesObject)))
console.log("gettargetinfo")
console.log(this.RulesList)
this.cardShow=true
@ -1202,7 +1234,13 @@ export default {
},
//
async deleteSmall(row){
console.log(row)
this.$confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(async() => {
console.log(row)
const deleFrom={
// outid: row.id
id: row.detailedtarget, //ID
@ -1216,6 +1254,8 @@ export default {
})
this.getzhilanmuList()
}
})
},
//
FractionBian(){
@ -1250,32 +1290,52 @@ export default {
// }
// },
async onSubmitsearchfu(){
const methodData={
//type: 1, //12
group: this.searchfu.group, //
//departmentid: this.rowZhiData.parentid, //
departid:this.searchfu.deaprtid.toString(),
dimension: this.rowZhiData.dimension, //
targetid: this.rowZhiData.target, //
censortype: this.rowZhiData.censortype, //123
censorcont: this.rowZhiData.censorcont //
// const methodData={
// //type: 1, //12
// group: this.searchfu.group, //
// //departmentid: this.rowZhiData.parentid, //
// departid:this.searchfu.deaprtid,
// dimension: this.rowZhiData.dimension, //
// targetid: this.rowZhiData.target, //
// censortype: this.searchfu.censortype.map(String), //123
// censorrate: this.searchfu.censorrate //
// }
// console.log("methodData.departid")
// console.log(methodData.departid)
// this.methodData.censortype=this.methodData.censortype.map(String)
// this.methodData.departid=this.methodData.departid.toString()
console.log(this.methodData.departid)
if (this.methodData.departid!=undefined) {
this.methodData.departid=this.methodData.departid.toString()
console.log("departid.toString")
}
if (this.methodData.censorrate=="") {
this.methodData.censorrate=0
// this.$delete(this.methodData,'censorrate')
}
const res = await lookdutytargetinfo(methodData)
// const res = await lookdutytargetinfo(methodData)
const res = await lookdutytargetinfo(this.methodData)
// this.methodData.censortype=this.methodData.censortype.map(Number)
// this.$delete(this.methodData,'censorrate')
if (res.code==0) {
this.methodList=res.data
}
console.log(this.methodData)
},
//
async getzhilanmuList(){
const methodData={
this.methodData={
//type: 1, //12
group: this.rowZhiData.group, //
//departmentid: this.rowZhiData.parentid, //
dimension: this.rowZhiData.dimension, //
targetid: this.rowZhiData.target, //
}
const res = await lookdutytargetinfo(methodData)
const res = await lookdutytargetinfo(this.methodData)
if (res.code==0) {
this.methodList=res.data
@ -1622,7 +1682,7 @@ export default {
async initialDepartment(){
const departmentFrom={
id:2
}
const res = await departmentlist(departmentFrom)
this.searchDepartmentList=res.data
@ -1699,6 +1759,9 @@ export default {
}
const res = await getneweitedetailedtarget(from)
this.xizeData=res.data
console.log("this.xizeData.addorreduce")
console.log(this.xizeData.addorreduce)
console.log(this.xizeData.addorreduce)
this.xizeData.censortype=this.xizeData.censortype.map(Number)
this.xizeDig=true
},
@ -1782,9 +1845,20 @@ export default {
async enterDialog(){
console.log("this.rulesCopyList")
console.log(this.rulesCopyList)
const rLoading = this.openLoading();
this.RulesList.forEach(element=>{
element.censortype=element.censortype.map(String)
})
this.RulesList.forEach(element=>{
if (element.cycle=='') {
element.cycle=0
}
if (element.censorrate=='') {
element.censorrate=0
}
})
this.$refs.addForm.validate(async valid => {
if (valid) {
this.form.evaluationlist=this.RulesList
@ -1811,10 +1885,12 @@ export default {
this.Fraction=0;
this.form.targetsuntitle='';
this.getDataList();
rLoading.close();
}else{
}
this.form.group=parseInt(this.form.group);
this.form.target=parseInt(this.form.target);
console.log(this.form)
}
})
},

98
src/views/basicInfo/project.vue

@ -20,7 +20,7 @@
<el-cascader clearable v-model="searchInfo.relevantdepartments" :options="grouplist" :show-all-levels="false" :props="props"></el-cascader>
</el-form-item> -->
<el-form-item label="关联部门" prop="relevantdepartments">
<el-cascader clearable v-model="searchInfo.relevantdepartments" :options="grouplist" :show-all-levels="false" :props="props"></el-cascader>
<el-cascader filterable clearable v-model="searchInfo.relevantdepartments" :options="grouplist" :show-all-levels="false" :props="props"></el-cascader>
</el-form-item>
<el-form-item label="指标维度" prop="dimension">
<el-select v-model="searchInfo.dimension" clearable placeholder="请选择考核维度">
@ -80,7 +80,13 @@
<el-tag v-if="scope.row.cycle==6"></el-tag>
</template>
</el-table-column>
<el-table-column align="left" label="计分方式" prop="outId">
<template #default="scope">
<el-tag v-if="scope.row.scoringmethod==1">自动计分</el-tag>
<el-tag v-if="scope.row.scoringmethod==2">手动计分</el-tag>
</template>
</el-table-column>
<el-table-column align="left" label="关联部门">
<template #default="scope">
@ -157,7 +163,7 @@
<el-cascader clearable v-model="form.relevantdepartments" :options="grouplist" :show-all-levels="false" :props="props"></el-cascader>
</el-form-item> -->
<el-form-item label="关联部门" prop="relevantdepartments">
<el-cascader clearable v-model="form.relevantdepartments" :options="grouplist" :show-all-levels="false" :props="props"></el-cascader>
<el-cascader filterable clearable v-model="form.relevantdepartments" :options="grouplist" :show-all-levels="false" :props="props"></el-cascader>
</el-form-item>
<el-form-item label="指标维度" prop="dimension">
<el-select v-model="form.dimension" clearable placeholder="请选择考核维度">
@ -179,11 +185,18 @@
<el-input v-model="form.unites" autocomplete="off" />
</el-form-item>
<el-form-item label="数据提交" prop="report">
<el-cascader clearable v-model="form.report" :options="grouplistBackup" :show-all-levels="false" :props="userProps"></el-cascader>
<!-- <el-cascader clearable v-model="form.report" :options="grouplistBackup" :show-all-levels="false" :props="userProps"></el-cascader> -->
<el-cascader filterable clearable v-model="form.report" :options="grouplistBackup" :show-all-levels="false" :props="userProps"></el-cascader>
</el-form-item>
<el-form-item label="辅助计数" prop="cycleattr">
<el-input v-model="form.cycleattr" autocomplete="off" />
</el-form-item>
<el-form-item label="计分方式" prop="type">
<el-select v-model="form.scoringmethod" placeholder="请选择指标性质">
<el-option label="自动计分" :value=1></el-option>
<el-option label="手动计分" :value=2></el-option>
</el-select>
</el-form-item>
<el-form-item label="考核周期" prop="cycle">
<el-select v-model="form.cycle" placeholder="请选择考核周期">
<el-option
@ -205,7 +218,6 @@
<!-- 编辑弹框 -->
<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>
@ -220,7 +232,7 @@
<el-cascader clearable v-model="editAdd.relevantdepartmentsmap" :options="grouplist" :show-all-levels="false" :props="props"></el-cascader>
</el-form-item> -->
<el-form-item label="关联部门" prop="relevantdepartmentsmap">
<el-cascader clearable v-model="editAdd.relevantdepartmentsmap" :options="grouplist" :show-all-levels="false" :props="props"></el-cascader>
<el-cascader filterable clearable v-model="editAdd.relevantdepartmentsmap" :options="grouplist" :show-all-levels="false" :props="props"></el-cascader>
</el-form-item>
<el-form-item label="指标维度" prop="dimensionidstr">
<el-select v-model="editAdd.dimensionidstr" clearable placeholder="请选择考核维度">
@ -243,11 +255,17 @@
</el-form-item>
<el-form-item label="数据提交" prop="report">
<el-cascader clearable v-model="editAdd.reportmap" :options="grouplistBackup" :show-all-levels="false" :props="userProps"></el-cascader>
<el-cascader filterable clearable v-model="editAdd.reportmap" :options="grouplistBackup" :show-all-levels="false" :props="userProps"></el-cascader>
</el-form-item>
<el-form-item label="辅助计数" prop="cycleattr">
<el-input v-model="editAdd.cycleattr" autocomplete="off" />
</el-form-item>
<el-form-item label="计分方式" prop="type">
<el-select v-model="editAdd.scoringmethod" placeholder="请选择指标性质">
<el-option label="自动计分" :value=1></el-option>
<el-option label="手动计分" :value=2></el-option>
</el-select>
</el-form-item>
<el-form-item label="考核周期" prop="cycle">
<el-select v-model="editAdd.cycle" placeholder="请选择考核周期">
<el-option
@ -283,16 +301,18 @@ export default {
grouplistBackup:[],
grouplist:[],
// 123456
options: [{
value: 1,
label: '班'
}, {
value: 2,
label: '天'
}, {
value: 3,
label: '周'
}, {
options: [
// {
// value: 1,
// label: ''
// }, {
// value: 2,
// label: ''
// }, {
// value: 3,
// label: ''
// },
{
value: 4,
label: '月'
}, {
@ -311,9 +331,9 @@ export default {
multiple: true
},
userProps: {
value: "id",
value: "key",
label: "name",
children: "groupUser",
children: "govlist",
emitPath:false,
multiple: true
},
@ -338,6 +358,7 @@ export default {
form:{
share:2,
cycleattr:1,
scoringmethod:1
},
//
dialogFormVisible:false,
@ -393,10 +414,26 @@ export default {
},
methods: {
//
//
async getSystemadminlist(){
const res = await getgroupuser()
this.grouplistBackup=res.data.list
this.grouplistBackup=res.data
this.grouplistBackup.forEach(item => {
if (item.govlist != null) {
// this.digui(item);
item.govlist.forEach(items => {
// forEach,itemthis.digui(item);
this.digui(items); //
//
console.log(items, '看我查看完整的数据哦')
// children
})
} else {
item.govlist=item.child
//
}
})
console.log(this.grouplistBackup)
},
//
async getGrouplist(){
@ -430,6 +467,25 @@ export default {
}
})
},
//
digui (item) {
//
if (item.govlist != null) {
// valuelabel,
item.govlist.forEach(ff => {
// children
this.digui(ff)
})
} else {
// children西
// valuelabel,
// --------------------------线---------------------------------
item.govlist=item.child
}
//
},
//
showAdd(){
this.dialogFormVisible=true;

323
src/views/basicInfo/target.vue

@ -4,14 +4,15 @@
<div class="gva-search-box">
<el-form ref="searchForm" :inline="true" :model="searchInfo">
<el-form-item label="部门">
<el-select v-model.string="searchInfo.departmentid" clearable placeholder="请选择">
<el-cascader filterable clearable v-model.string="searchInfo.departmentid" :options="buMenList" :show-all-levels="false" :props="props1"></el-cascader>
<!-- <el-select filterable v-model.string="searchInfo.departmentid" clearable placeholder="请选择">
<el-option
v-for="item in buMenList"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-select> -->
</el-form-item>
<el-form-item label="年度">
@ -24,9 +25,16 @@
</el-option>
</el-select>
</el-form-item>
<el-form-item label="指标名称">
<el-input
placeholder="请输入名称"
v-model="searchInfo.title"
clearable>
</el-input>
</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-button size="mini" icon="el-icon-refresh" @click="onReset">重置</el-button> -->
</el-form-item>
</el-form>
</div>
@ -52,14 +60,20 @@
icon="el-icon-view"
size="small"
type="text"
@click="showJiang(scope.row)"
@click="showJiangZhi(scope.row)"
>查看</el-button>
<!-- <el-button
<el-button
icon="el-icon-edit"
size="small"
type="text"
@click="showJiang(scope.row)"
>编辑</el-button>
<el-button
icon="el-icon-delete"
size="small"
type="text"
@click="deleteOperate(scope.row)"
>删除</el-button> -->
>删除</el-button>
</template>
</el-table-column>
</el-table>
@ -71,7 +85,7 @@
<el-row>
<el-col :span="12">
<el-form-item label="所属公司">
<el-select v-model="form.group" clearable placeholder="请选择" @change="selectGroup">
<el-select filterable v-model="form.group" clearable placeholder="请选择" @change="selectGroup">
<el-option
v-for="item in companyList"
:key="item.wxId"
@ -83,14 +97,15 @@
</el-col>
<el-col :span="12">
<el-form-item label="所属部门">
<el-select v-model="form.department" clearable placeholder="请选择">
<el-cascader @change="selectDepartment" filterable clearable v-model="form.department" :options="departmentList" :show-all-levels="false" :props="props1"></el-cascader>
<!-- <el-select filterable v-model="form.department" clearable placeholder="请选择" @change="selectDepartment">
<el-option
v-for="item in departmentList"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-select> -->
</el-form-item>
</el-col>
</el-row>
@ -177,6 +192,7 @@
v-model="fengDing"
clearable>
<template slot="prepend">封顶值</template>
<template slot="append">%</template>
</el-input>
</el-col>
<el-col :span="6">
@ -194,11 +210,11 @@
</el-col>
</el-row> -->
<el-form-item label="" v-if="form.cycle==1">
<el-table
v-if="form.cycle==1"
border
:data="nian"
style="width: 100%">
style="width:85%;margin: 0 auto;">
<el-table-column
label="零奖值"
align="center"
@ -220,16 +236,18 @@
align="center"
>
<template slot-scope="scope">
<el-input v-model.number="scope.row.capping" autocomplete="off" />
<el-input v-model.number="scope.row.capping" autocomplete="off">
<template slot="append">%</template>
</el-input>
</template>
</el-table-column>
</el-table>
</el-form-item>
<el-form-item label="" v-if="form.cycle==2">
<el-table
v-if="form.cycle==2"
border
:data="jidu"
style="width: 100%">
style="width:85%;margin: 0 auto;">
<el-table-column
label="季度"
align="center"
@ -259,16 +277,19 @@
align="center"
>
<template slot-scope="scope">
<el-input v-model.number="scope.row.capping" autocomplete="off" />
<el-input v-model.number="scope.row.capping" autocomplete="off">
<template slot="append">%</template>
</el-input>
</template>
</el-table-column>
</el-table>
</el-form-item>
<el-form-item label="" v-if="form.cycle==3">
<el-table
v-if="form.cycle==3"
border
:data="yue"
style="width: 100%">
style="width:85%;margin: 0 auto;">
<el-table-column
label="月份"
align="center"
@ -298,11 +319,13 @@
align="center"
>
<template slot-scope="scope">
<el-input v-model.number="scope.row.capping" autocomplete="off" />
<el-input v-model.number="scope.row.capping" autocomplete="off">
<template slot="append">%</template>
</el-input>
</template>
</el-table-column>
</el-table>
</el-form-item>
</el-form>
<template #footer>
@ -313,7 +336,7 @@
</template>
</el-dialog>
<!-- 编辑弹框 -->
<el-dialog :visible.sync="editDialogFormVisible" :before-close="editCloseDialog" title="修改" width="20%">
<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" />
@ -329,8 +352,48 @@
</div>
</template>
</el-dialog>
<!-- 奖值弹窗 -->
<el-dialog :visible.sync="jiangZhiDialogFormVisible" title="奖值" width="40%">
<!-- 奖值编辑弹窗 -->
<el-dialog :close-on-click-modal="false" :visible.sync="jiangZhiDialogFormVisible" title="编辑" width="50%">
<el-card class="box-card" style="width:100%;margin: 0 auto;">
<div slot="header" class="clearfix">
<span>批量修改目标值</span>
</div>
<!-- <div v-for="o in 4" :key="o" class="text item">
{{'列表内容 ' + o }}
</div> -->
<div>
<el-row :gutter="20">
<el-col :span="6">
<el-input
placeholder="零奖值"
v-model.number="lingJiang"
clearable>
<template slot="prepend">零奖值</template>
</el-input>
</el-col>
<el-col :span="6">
<el-input
placeholder="全奖值"
v-model.number="quanJiang"
clearable>
<template slot="prepend">全奖值</template>
</el-input>
</el-col>
<el-col :span="6">
<el-input
placeholder="封顶值"
v-model.number="fengDing"
clearable>
<template slot="prepend">封顶值</template>
<template slot="append">%</template>
</el-input>
</el-col>
<el-col :span="6">
<el-button type="primary" round @click="xiuBatch">确定</el-button>
</el-col>
</el-row>
</div>
</el-card>
<el-table
border
:data="jiangzhiList"
@ -351,21 +414,98 @@
align="center"
prop="zeroprize"
>
<template slot-scope="scope">
<el-input v-model.number="scope.row.zeroprize" autocomplete="off" />
</template>
</el-table-column>
<el-table-column
label="全奖值"
align="center"
prop="allprize"
>
<template slot-scope="scope">
<el-input v-model.number="scope.row.allprize" autocomplete="off" />
</template>
</el-table-column>
<el-table-column
label="封顶值"
align="center"
prop="allprize"
>
<template slot-scope="scope">
<el-input v-model.number="scope.row.cappingval" autocomplete="off">
<template slot="append">%</template>
</el-input>
</template>
</el-table-column>
</el-table>
<template #footer>
<div class="dialog-footer">
<el-button size="small" type="primary" @click="editEnterDialog"> </el-button>
</div>
</template>
</el-dialog>
<!-- 奖值弹窗 -->
<el-dialog :visible.sync="jiangZhiDialog" title="奖值" width="40%">
<el-table
border
:data="jiangList"
style="width: 100%">
<el-table-column
label="月份"
align="center"
>
<template slot-scope="scope">
<div v-if="scope.row.type==3">{{scope.row.timecopy}}</div>
<div v-if="scope.row.type==2">{{scope.row.timecopy}}季度</div>
<div v-if="scope.row.type==1">{{scope.row.timecopy}}</div>
</template>
</el-table-column>
<el-table-column
label="零奖值"
align="center"
prop="zeroprize"
>
<!-- <template slot-scope="scope">
<el-input v-model.number="scope.row.zeroprize" autocomplete="off" />
</template> -->
</el-table-column>
<el-table-column
label="全奖值"
align="center"
prop="allprize"
>
<!-- <template slot-scope="scope">
<el-input v-model.number="scope.row.allprize" autocomplete="off" />
</template> -->
</el-table-column>
<el-table-column
label="封顶值"
align="center"
prop="cappingval"
>
<template slot-scope="scope">
{{scope.row.cappingval}}%
</template>
<!-- <template slot-scope="scope">
<el-input v-model.number="scope.row.cappingval" autocomplete="off" />
</template> -->
</el-table-column>
</el-table>
<template #footer>
<div class="dialog-footer">
<el-button size="small" type="primary" @click="editEnterDialog"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script>
import { gettasktarget,gettasktargetsun,gettasktargetcontary,addqualeval,addration,departmenttasklist,addqubatch,bumenList,departmentlistnew,adddepartmentdutyinfo,lookquantitativeconfig,setevaluationobjectives } from '@/api/duty/duty'
import { gettasktarget,gettasktargetsun,gettasktargetcontary,addqualeval,addration,departmenttasklist,addqubatch,bumenList,departmentlistnew,adddepartmentdutyinfo,lookquantitativeconfig,setevaluationobjectives,getactivationplanversion,delquantitativeconfig,eitequantitativeconfig } from '@/api/duty/duty'
import { dutyclasslist,statedutyclass,eitedutyclassinfo,getdutyclassinfo,adddutyclass } from '@/api/duty/dimension'
import {
grouplist,
@ -378,6 +518,15 @@ export default {
name: 'Dashboard',
data() {
return {
jiangList:[],
props1: {
checkStrictly: true,
value: "id",
label: "name",
children: "children",
emitPath:false,
},
banben:'',
fengDing:0,
//
jiangZhiDialogFormVisible:false,
@ -554,6 +703,7 @@ export default {
form:{
// group:'3',
},
jiangZhiDialog:false,
buMenList:[],
//
dialogFormVisible:false,
@ -615,6 +765,17 @@ export default {
},
},
methods: {
//
async selectDepartment(val){
const from = {
group: this.form.group.toString(), //
deaprtid: val.toString() //
}
const res = await getactivationplanversion(from)
this.banben=res.data[0].key
console.log(this.banben)
},
//
batch(){
//
if (this.form.cycle==1) {
@ -641,6 +802,15 @@ export default {
})
}
},
//
xiuBatch(){
console.log(this.jiangList)
this.jiangzhiList.forEach(element => {
element.zeroprize=this.lingJiang
element.allprize=this.quanJiang
element.cappingval=this.fengDing
})
},
//
async getGrouplist(){
const idFrom = {
@ -676,6 +846,24 @@ export default {
},
//
async showJiangZhi(row){
const from = {
groupid: row.group.toString(), //
departmentid: row.departmentid.toString(), //
dimension: row.dimensionid, //
target: row.target.toString(), //
year: row.year, //
}
const res = await lookquantitativeconfig(from)
this.jiangList=res.data
this.jiangList.forEach(item=>{
item.id=item.id.toString()
})
this.jiangZhiDialog=true
console.log("showJiang")
console.log(res)
},
//
async showJiang(row){
const from = {
groupid: row.group.toString(), //
@ -686,6 +874,9 @@ export default {
}
const res = await lookquantitativeconfig(from)
this.jiangzhiList=res.data
this.jiangzhiList.forEach(item=>{
item.id=item.id.toString()
})
this.jiangZhiDialogFormVisible=true
console.log("showJiang")
console.log(res)
@ -698,7 +889,7 @@ export default {
this.pos = 0;
} else {
//
if (data[i].dimension === data[i - 1].dimension) {
if (data[i].departmentid === data[i - 1].departmentid) {
this.spanArr[this.pos] += 1;
this.spanArr.push(0);
} else {
@ -761,11 +952,13 @@ export default {
},
//
async shouZhi(val){
console.log("shouZhi")
const methodData={
type: 2, //12
group: "3", //
group: "2", //
departmentid: this.form.department.toString(), //
dimension: this.form.dimension, //
versionnumber: this.banben,
}
const res = await departmenttasklist(methodData)
if (res.code==0) {
@ -793,6 +986,7 @@ export default {
departmentid: row.parentid, //
dimension: row.dimension, //
target: row.target, //
versionnumber: this.banben, //
}
const res = await departmenttasklist(methodData)
if (res.code==0) {
@ -809,10 +1003,26 @@ export default {
type: 'warning'
})
.then(async() => {
this.deleFrom.state=3;
this.deleFrom.outid=row.outId;
const res = await statedutyclass(this.deleFrom)
if (res.code === 0) {
const from = {
groupid: row.group.toString(), //
departmentid: row.departmentid.toString(), //
dimension: row.dimensionid, //
target: row.target.toString(), //
year: row.year, //
}
const res = await lookquantitativeconfig(from)
this.deleFrom = []
if (res.code===0) {
console.log(res)
res.data.forEach(element=>{
element.id=element.id.toString()
this.deleFrom.push(element.id)
console.log(this.deleFrom)
})
console.log(this.deleFrom)
// this.deleFrom=this.deleFrom.split(',');
const respon = await delquantitativeconfig(this.deleFrom)
if (respon.code === 0) {
this.$message({
type: 'success',
message: '删除成功!'
@ -820,6 +1030,8 @@ export default {
this.getDataList()
}
}
})
},
//
@ -902,12 +1114,19 @@ export default {
const res = await setevaluationobjectives(this.form)
if (res.code === 0) {
this.$message({
type: 'success',
message: '添加成功',
showClose: true
})
}
this.$message({
type: 'success',
message: '添加成功',
showClose: true
})
}
this.form.group=this.form.group.toString()
this.nian = this.$options.data().nian
this.jidu = this.$options.data().jidu
this.yue = this.$options.data().yue
this.lingJiang = this.$options.data().lingJiang
this.quanJiang = this.$options.data().quanJiang
this.fengDing = this.$options.data().fengDing
this.getDataList();
this.closeDialog();
}
@ -916,9 +1135,11 @@ export default {
//
async editEnterDialog(){
this.$refs.editForm.validate(async valid => {
if (valid) {
const res = await eitedutyclassinfo(this.editAdd)
this.jiangzhiList.forEach(ele=>{
ele.capping=ele.cappingval
})
const res = await eitequantitativeconfig(this.jiangzhiList)
if (res.code === 0) {
this.$message({
type: 'success',
@ -927,14 +1148,16 @@ export default {
})
}
this.getDataList();
this.editCloseDialog();
}
})
this.jiangZhiDialogFormVisible=false
this.lingJiang = this.$options.data().lingJiang
this.quanJiang = this.$options.data().quanJiang
this.fengDing = this.$options.data().fengDing
},
//
closeDialog() {
console.log("closeDialog")
this.initForm()
// this.initForm()
this.dialogFormVisible = false
},
//
@ -971,13 +1194,13 @@ export default {
if (this.searchInfo.departmentid!=undefined) {
this.searchInfo.departmentid=this.searchInfo.departmentid.toString()
}
const res = await lookquantitativeconfig(this.searchInfo)
this.tableData = res.data
this.searchInfo = {
groupid:"3",
departmentid:''
}
this.searchInfo.groupid="2"
// this.searchInfo = {
// groupid:"2",
// departmentid:''
// }
}
}
}

679
src/views/echarts/echarts.vue

@ -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=''
//createddataList
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>

824
src/views/echarts/echarts1.vue

@ -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='',
//createddataList
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>

1196
src/views/echarts/table.vue

File diff suppressed because it is too large

883
src/views/echarts/total.vue

@ -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=''
//createddataList
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
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) {
// parentpush 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>

1650
src/views/frontPage/index.vue

File diff suppressed because it is too large

386
src/views/hr/jobTitle.vue

@ -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>

484
src/views/hr/organization.vue

@ -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>

360
src/views/hr/organizeType.vue

@ -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>

1072
src/views/hr/personnel.vue

File diff suppressed because it is too large

330
src/views/hr/position.vue

@ -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>

4
src/views/login/wxLogin.vue

@ -91,6 +91,7 @@
扫码登录
</el-col>
</el-row>
<!-- <el-button type="primary" round @click="qyWx">授权</el-button> -->
</div>
<div class="login_panle_right" />
</div>
@ -208,6 +209,9 @@ export default {
// async login() {
// return await this.myLoginIn(this.loginForm)
// },
qyWx(){
window.location.href="https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww02f310301953277a&redirect_uri=https%3A%2F%2Fwww.hxgk.group%2Fjumpapiurl%2Fscancode%3Fcontroll%3Dshiyan%26id%3D123456%26num%3D654321&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect"
},
async submitForm() {
this.$refs.loginForm.validate(async(v) => {
if (v) {

105
src/views/menuSettings/index.vue

@ -41,29 +41,29 @@
inactive-color="#ff4949"
:active-value=1
:inactive-value=2
@change="changeVal($event,scope.row.outId)"
@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
<el-button
size="mini"
type="text"
icon="el-icon-plus"
@click="addMenu(scope.row.ID)"
>添加子菜单</el-button> -->
@click="addSonMenu(scope.row)"
>添加子菜单</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="editMenu(scope.row.ID)"
@click="editMenu(scope.row)"
>编辑</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="deleteMenu(scope.row.ID)"
@click="deleteMenu(scope.row)"
>删除</el-button>
</template>
</el-table-column>
@ -107,10 +107,10 @@
</template>
</el-dialog>
<!-- 新增子菜单弹框 -->
<el-dialog :visible.sync="dialogFormVisible" :before-close="closeDialog" title="新增" width="20%">
<el-form ref="addForm" :model="form" :rules="rules" label-width="150px">
<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="form.title"/>
<el-input v-model="addSonMenuData.title"/>
</el-form-item>
<!-- <el-form-item label="所属栏目">
<el-cascader
@ -120,27 +120,37 @@
</el-form-item> -->
<el-form-item label="栏目路径">
<el-input v-model="form.menuurl"/>
<el-input v-model="addSonMenuData.menuurl"/>
</el-form-item>
<el-form-item label="排序">
<el-input v-model="form.sort"/>
<el-input v-model="addSonMenuData.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>
<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="考核维度名称" prop="title">
<el-input v-model="editAdd.title" autocomplete="off" />
<el-form-item label="栏目名称">
<el-input v-model="editAdd.title"/>
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input v-model.number="editAdd.sort" autocomplete="off" />
<!-- <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>
@ -167,7 +177,9 @@ export default {
//
deleFrom:{},
//
editAdd:{},
editAdd:{
},
assessList:{},
//
form:{
@ -175,8 +187,11 @@ export default {
},
//
dialogFormVisible:false,
addSonMenuData:{},
//
editDialogFormVisible:false,
//
addSonShow:false,
total: 0,
tableData:[],
//
@ -207,7 +222,11 @@ export default {
this.getDataList()
},
methods: {
//
//
addSonMenu(row){
this.addSonMenuData.parentId=row.id
this.addSonShow=true
},
//
async deleteMenu(row) {
this.$confirm('此操作将永久删除, 是否继续?', '提示', {
@ -217,7 +236,7 @@ export default {
})
.then(async() => {
this.deleFrom.state=3;
this.deleFrom.outid=row.outId;
this.deleFrom.id=row.id;
const res = await delmenu(this.deleFrom)
if (res.code === 0) {
this.$message({
@ -235,17 +254,18 @@ export default {
console.log(this.dialogFormVisible)
},
//
async showEdit(row){
this.editFrom.outid=row.outId
const res = await getdutyclassinfo(this.editFrom)
this.editAdd = res.data
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.outid=id
this.switchFrom.id=id
if (val==1) {
this.switchFrom.state=1;
const res = await delmenu(this.switchFrom)
@ -274,7 +294,7 @@ export default {
onReset() {
this.searchInfo = {}
},
//
// m
onSubmit() {
this.page = 1
this.pageSize = 10
@ -302,12 +322,28 @@ export default {
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.$refs.editForm.validate(async valid => {
if (valid) {
const res = await eitedutyclassinfo(this.editAdd)
this.editAdd.menuurl=this.editAdd.apiUrl
this.editAdd.sort=Number(this.editAdd.sort)
const res = await eitemenu(this.editAdd)
if (res.code === 0) {
this.$message({
type: 'success',
@ -317,8 +353,7 @@ export default {
}
this.getDataList();
this.editCloseDialog();
}
})
},
//
closeDialog() {
@ -326,6 +361,11 @@ export default {
this.initForm()
this.dialogFormVisible = false
},
//
closeSonDialog() {
this.addSonMenuData={}
this.addSonShow = false
},
//
editCloseDialog() {
this.editInitForm()
@ -333,7 +373,6 @@ export default {
},
//
initForm() {
console.log("initForm")
this.$refs.addForm.resetFields()
this.form = {}
console.log(this.form)

581
src/views/mete/index.vue

@ -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">已同意&nbsp·&nbsp</div>
<div class="left" v-if="i.state==1" type="info">未操作&nbsp·&nbsp</div>
<div class="left" v-if="i.state==3" type="danger">驳回&nbsp·&nbsp</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='',
//createddataList
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>

657
src/views/personnel/post/index.vue

@ -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 != []) {
// valuelabel,
item.child.forEach(ff => {
if (ff.istrue==true) {
this.checkList.push(ff.id)
}
// children
this.digui(ff)
})
} else {
// children西
// valuelabel,
// --------------------------线---------------------------------
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>

518
src/views/qualitative/index copy.vue

@ -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='',
//createddataList
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>

1298
src/views/qualitative/index.vue

File diff suppressed because it is too large

416
src/views/roleSetting/index.vue

@ -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>

BIN
————dist/--favicon.ico

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

BIN
————dist/favicon.ico

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

1
————dist/index.html

File diff suppressed because one or more lines are too long

1
————dist/static/css/app.96fd0a63.css

File diff suppressed because one or more lines are too long

1
————dist/static/css/chunk-0552f3a2.044e060a.css

@ -1 +0,0 @@
.dashboard-container[data-v-951e1a82]{margin:30px}.dashboard-text[data-v-951e1a82]{font-size:30px;line-height:46px}

1
————dist/static/css/chunk-15ac51ae.3c7f5ad9.css

@ -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
————dist/static/css/chunk-2312d406.0133c0c0.css

@ -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
————dist/static/css/chunk-26198766.4146676d.css

@ -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
————dist/static/css/chunk-29a1f3a9.ac8fd10d.css

@ -1 +0,0 @@
.dashboard-container[data-v-38769d00]{margin:30px}.dashboard-text[data-v-38769d00]{font-size:30px;line-height:46px}

1
————dist/static/css/chunk-35bbcdde.4d1bad9a.css

@ -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
————dist/static/css/chunk-3b70a03b.6dcad223.css

@ -1 +0,0 @@
.dashboard-container[data-v-51432242]{margin:30px}.dashboard-text[data-v-51432242]{font-size:30px;line-height:46px}

1
————dist/static/css/chunk-72d93496.7fac38e6.css

@ -1 +0,0 @@
.dashboard-container[data-v-5fb11e1e]{margin:30px}.dashboard-text[data-v-5fb11e1e]{font-size:30px;line-height:46px}

1
————dist/static/css/chunk-73917472.77b2620b.css

@ -1 +0,0 @@
.dashboard-container[data-v-c6cbae0e]{margin:30px}.dashboard-text[data-v-c6cbae0e]{font-size:30px;line-height:46px}

1
————dist/static/css/chunk-e7b2d2a4.fd28563b.css

@ -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}

1
————dist/static/css/chunk-elementUI.5dea96f6.css

File diff suppressed because one or more lines are too long

50
————dist/static/css/chunk-libs.1002c752.css

File diff suppressed because one or more lines are too long

BIN
————dist/static/fonts/element-icons.535877f5.woff

Binary file not shown.

BIN
————dist/static/fonts/element-icons.732389de.ttf

Binary file not shown.

BIN
————dist/static/img/404.a57b6f31.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

BIN
————dist/static/img/404_cloud.0f4bc32b.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

BIN
————dist/static/img/dashbord.e74f8e90.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

BIN
————dist/static/img/login_background.f437e390.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

123
————dist/static/img/login_left.b6bb2261.svg

@ -1,123 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="600px" height="400px" viewBox="0 0 600 400" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>搭建网站</title>
<g id="搭建网站" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="plant_14_" transform="translate(460.407080, 84.286076)" fill-rule="nonzero">
<path d="M6.00259646,105.330035 C6.00259646,105.330035 1.84230973,-7.8292962 69.9789416,0.726420253 C77.8013257,4.31886582 64.1880531,16.8041013 56.9170106,19.4970835 C47.509069,22.9804759 53.7747239,35.7991797 43.601931,40.9868658 C31.1228726,47.3507038 34.275069,56.1659848 32.8093292,70.5177418 C31.7543929,80.8417418 10.7340442,87.5300354 6.00259646,105.330035 Z" id="Path" fill="#F3F9FF"></path>
<path d="M0.51440531,138.928324 C0.51440531,138.928324 38.1236496,40.5109975 92.8416,86.7062785 C98.1748389,94.224638 82.0814301,97.0428962 74.9320071,95.1736709 C65.6808195,92.7546734 66.3384655,107.213681 55.8188319,105.804101 C42.9145558,104.074572 42.3848354,113.35761 35.9227876,124.700041 C31.2733204,132.860101 11.0007062,126.525104 0.51440531,138.928324 Z" id="Path" fill="#E7F4FE"></path>
<path d="M8.45390442,132.267068 C8.45390442,132.267068 18.6906602,6.36023291 81.8670195,35.9181468 C87.3029593,39.0338228 77.5076372,49.6381165 68.456446,50.3645367 C59.4061558,51.090957 62.246646,68.606157 55.6071239,78.2605165 C48.237885,88.9774684 34.5723611,87.3542886 32.0372708,103.647372 C30.2147805,115.370137 14.933069,112.333772 8.45390442,132.267068 Z" id="Path" fill="#DCEEFD"></path>
</g>
<g id="cog_4_" transform="translate(291.941593, 205.055696)" fill="#F3F9FF" fill-rule="nonzero">
<path d="M120.51048,32.7700253 C119.524011,30.3879797 116.994326,29.0342785 114.467343,29.534481 L106.4828,31.1144 C104.59995,31.4875241 102.652237,30.8314025 101.381088,29.3938835 C100.034265,27.8716456 98.6072637,26.4386329 97.1054885,25.1011544 C95.6739823,23.8267646 95.0253451,21.8881418 95.3965097,20.0072 L96.9739593,12.0328 C97.4739504,9.5038481 96.1199204,6.97309367 93.7397823,5.98710886 L81.9508018,1.1022481 C79.5706637,0.115362025 76.8247664,0.94723038 75.3905575,3.08953924 L70.8690159,9.84362532 C69.8041699,11.4343595 67.970869,12.348243 66.060092,12.2373873 C64.0529204,12.1202228 62.0313345,12.1247291 60.0034425,12.2482025 C58.0854584,12.3644658 56.2494549,11.4523848 55.1801044,9.85534177 L50.6513558,3.08953924 C49.2171469,0.94723038 46.4712496,0.116263291 44.0911115,1.1022481 L32.3030319,5.98710886 C29.9219929,6.97399494 28.5688637,9.5038481 29.0688549,12.0328 L30.6490071,20.020719 C31.0210726,21.9043646 30.3661292,23.852 28.9292177,25.1245873 C27.407623,26.4719797 25.9752159,27.8995848 24.6383027,29.4019949 C23.3644513,30.8341063 21.4257469,31.4830177 19.5465009,31.1116962 L11.5754708,29.534481 C9.04758761,29.0342785 6.51790265,30.388881 5.53233451,32.7700253 L0.649538053,44.5639899 C-0.336930973,46.9451342 0.494585841,49.6921924 2.63598938,51.1270076 L9.38722124,55.6495595 C10.9772832,56.7148557 11.8907805,58.5489316 11.7790708,60.4605165 C11.6628566,62.4685367 11.6664602,64.4918785 11.7898814,66.5206278 C11.9069965,68.4394228 10.9944,70.2771038 9.39803186,71.3460051 L2.6350885,75.8766684 C0.493684956,77.3105823 -0.336930973,80.0585418 0.648637168,82.4396861 L5.53143363,94.2327494 C6.51790265,96.6147949 9.04668673,97.9684962 11.5745699,97.4682937 L19.5591133,95.8874734 C21.4419628,95.5152506 23.3896761,96.1704709 24.6608248,97.6079899 C26.0076478,99.1302278 27.4346496,100.563241 28.9364248,101.900719 C30.367931,103.175109 31.017469,105.114633 30.6454035,106.994673 L29.0688549,114.968172 C28.5688637,117.497124 29.9219929,120.027878 32.3030319,121.014765 L44.0911115,125.899625 C46.4721504,126.886511 49.2171469,126.054643 50.6513558,123.912334 L55.1719965,117.158248 C56.2368425,115.567514 58.0701434,114.65363 59.9809204,114.764486 C61.988092,114.881651 64.0096779,114.877144 66.0384708,114.753671 C67.9564549,114.637408 69.7924584,115.548587 70.8618088,117.146532 L75.3905575,123.912334 C76.8247664,126.053742 79.5706637,126.88561 81.9508018,125.899625 L93.7388814,121.014765 C96.1199204,120.027878 97.4730496,117.498025 96.9730584,114.969073 L95.3929062,106.981154 C95.0208407,105.097509 95.6757841,103.149873 97.1126956,101.877286 C98.6342903,100.529894 100.066697,99.1022886 101.403611,97.5998785 C102.677462,96.1677671 104.616166,95.5188557 106.496313,95.8901772 L114.467343,97.4673924 C116.995227,97.9675949 119.524912,96.6138937 120.51048,94.2318481 L125.393276,82.4387848 C126.378844,80.0567392 125.548228,77.309681 123.406825,75.8757671 L116.655593,71.3532152 C115.065531,70.287919 114.152034,68.453843 114.262842,66.5422582 C114.379958,64.534238 114.375453,62.5117975 114.252032,60.4830481 C114.135818,58.5642532 115.047513,56.7265722 116.643881,55.6576709 L123.406825,51.1270076 C125.547327,49.6921924 126.378844,46.9451342 125.393276,44.5639899 L120.51048,32.7700253 Z M73.3635664,88.4835747 C59.5719186,94.1985013 43.7613876,87.6462987 38.0488761,73.8497215 C32.3363646,60.052243 38.8857982,44.2350278 52.6765451,38.5201013 C66.4681929,32.8051747 82.2787239,39.3573772 87.9912354,53.1539544 C93.7037469,66.9505316 87.1552142,82.7686481 73.3635664,88.4835747 Z" id="Shape"></path>
</g>
<g id="window" transform="translate(116.269027, 38.321519)" fill-rule="nonzero">
<g id="Group">
<rect id="Rectangle" fill="#F3F9FF" x="11.4115097" y="11.7164557" width="342.937173" height="202.78481"></rect>
<path d="M355.838747,0.450632911 L9.92054513,0.450632911 C4.52424425,0.450632911 0.150447788,4.82627848 0.150447788,10.2248608 L0.150447788,215.992861 C0.150447788,221.391443 4.52424425,225.767089 9.92054513,225.767089 L355.839648,225.767089 C361.235949,225.767089 365.609745,221.391443 365.609745,215.992861 L365.609745,10.2248608 C365.609745,4.82627848 361.235048,0.450632911 355.838747,0.450632911 Z M354.348683,214.501266 L11.4115097,214.501266 L11.4115097,11.7164557 L354.348683,11.7164557 L354.348683,214.501266 L354.348683,214.501266 Z" id="Shape" fill="#224380"></path>
</g>
<g id="Group" transform="translate(25.224779, 23.432911)">
<path d="M307.56843,179.926005 L119.367257,179.926005 C116.879913,179.926005 114.862832,177.908071 114.862832,175.419676 L114.862832,9.01265823 C114.862832,6.52426329 116.879913,4.50632911 119.367257,4.50632911 L307.56843,4.50632911 C310.055773,4.50632911 312.072855,6.52426329 312.072855,9.01265823 L312.072855,175.419676 C312.072855,177.908071 310.055773,179.926005 307.56843,179.926005 Z" id="Path" fill="#DAE7FF"></path>
<path d="M307.56843,175.419676 L119.367257,175.419676 C116.879913,175.419676 114.862832,173.401742 114.862832,170.913347 L114.862832,4.50632911 C114.862832,2.01793418 116.879913,0 119.367257,0 L307.56843,0 C310.055773,0 312.072855,2.01793418 312.072855,4.50632911 L312.072855,170.913347 C312.072855,173.401742 310.055773,175.419676 307.56843,175.419676 Z" id="Path" fill="#FFFFFF"></path>
<path d="M101.296405,44.7667747 L5.21161947,44.7667747 C2.72427611,44.7667747 0.70719469,42.7488405 0.70719469,40.2604456 L0.70719469,9.01265823 C0.70719469,6.52426329 2.72427611,4.50632911 5.21161947,4.50632911 L101.296405,4.50632911 C103.783749,4.50632911 105.80083,6.52426329 105.80083,9.01265823 L105.80083,40.2604456 C105.80083,42.7497418 103.78465,44.7667747 101.296405,44.7667747 Z" id="Path" fill="#DAE7FF"></path>
<path d="M101.296405,40.2604456 L5.21161947,40.2604456 C2.72427611,40.2604456 0.70719469,38.2425114 0.70719469,35.7541165 L0.70719469,4.50632911 C0.70719469,2.01793418 2.72427611,0 5.21161947,0 L101.296405,0 C103.783749,0 105.80083,2.01793418 105.80083,4.50632911 L105.80083,35.7541165 C105.80083,38.2434127 103.78465,40.2604456 101.296405,40.2604456 Z" id="Path" fill="#FFFFFF"></path>
<path d="M101.296405,106.279068 L5.21161947,106.279068 C2.72427611,106.279068 0.70719469,104.261134 0.70719469,101.772739 L0.70719469,70.5249519 C0.70719469,68.036557 2.72427611,66.0186228 5.21161947,66.0186228 L101.296405,66.0186228 C103.783749,66.0186228 105.80083,68.036557 105.80083,70.5249519 L105.80083,101.772739 C105.80083,104.261134 103.78465,106.279068 101.296405,106.279068 Z" id="Path" fill="#DAE7FF"></path>
<path d="M101.296405,101.772739 L5.21161947,101.772739 C2.72427611,101.772739 0.70719469,99.7548051 0.70719469,97.2664101 L0.70719469,66.0186228 C0.70719469,63.5302278 2.72427611,61.5122937 5.21161947,61.5122937 L101.296405,61.5122937 C103.783749,61.5122937 105.80083,63.5302278 105.80083,66.0186228 L105.80083,97.2664101 C105.80083,99.7548051 103.78465,101.772739 101.296405,101.772739 Z" id="Path" fill="#FFFFFF"></path>
<path d="M226.222122,22.7272203 L133.116563,22.7272203 C132.121085,22.7272203 131.314793,21.9205873 131.314793,20.9246886 L131.314793,13.3116962 C131.314793,12.3157975 132.121085,11.5091646 133.116563,11.5091646 L226.222122,11.5091646 C227.2176,11.5091646 228.023892,12.3157975 228.023892,13.3116962 L228.023892,20.9246886 C228.023892,21.9205873 227.2176,22.7272203 226.222122,22.7272203 Z" id="Path" fill="#1B90FB"></path>
<path d="M170.846526,80.5434228 L133.117464,80.5434228 C132.121986,80.5434228 131.315694,79.7367899 131.315694,78.7408911 L131.315694,71.1278987 C131.315694,70.132 132.121986,69.3253671 133.117464,69.3253671 L170.846526,69.3253671 C171.842004,69.3253671 172.648296,70.132 172.648296,71.1278987 L172.648296,78.7408911 C172.648296,79.7358886 171.841103,80.5434228 170.846526,80.5434228 Z" id="Path" fill="#7266D5"></path>
<g transform="translate(130.628319, 29.741772)" fill="#DCEEFD" id="Path">
<path d="M163.352064,3.56540759 L2.32608496,3.56540759 C1.42069558,3.56540759 0.686474336,2.83087595 0.686474336,1.9251038 L0.686474336,1.91879494 C0.686474336,1.01302278 1.42069558,0.278491139 2.32608496,0.278491139 L163.352064,0.278491139 C164.257453,0.278491139 164.991674,1.01302278 164.991674,1.91879494 L164.991674,1.9251038 C164.991674,2.83177722 164.258354,3.56540759 163.352064,3.56540759 Z"></path>
<path d="M163.352064,13.1404557 L2.32608496,13.1404557 C1.42069558,13.1404557 0.686474336,12.4059241 0.686474336,11.5001519 L0.686474336,11.493843 C0.686474336,10.5880709 1.42069558,9.85353924 2.32608496,9.85353924 L163.352064,9.85353924 C164.257453,9.85353924 164.991674,10.5880709 164.991674,11.493843 L164.991674,11.5001519 C164.991674,12.4059241 164.258354,13.1404557 163.352064,13.1404557 Z"></path>
<path d="M163.352064,22.7155038 L2.32608496,22.7155038 C1.42069558,22.7155038 0.686474336,21.9809722 0.686474336,21.0752 L0.686474336,21.0688911 C0.686474336,20.163119 1.42069558,19.4285873 2.32608496,19.4285873 L163.352064,19.4285873 C164.257453,19.4285873 164.991674,20.163119 164.991674,21.0688911 L164.991674,21.0752 C164.991674,21.9809722 164.258354,22.7155038 163.352064,22.7155038 Z"></path>
<path d="M63.241223,32.2896506 L2.32608496,32.2896506 C1.42069558,32.2896506 0.686474336,31.555119 0.686474336,30.6493468 L0.686474336,30.643038 C0.686474336,29.7372658 1.42069558,29.0027342 2.32608496,29.0027342 L63.241223,29.0027342 C64.1466124,29.0027342 64.8808336,29.7372658 64.8808336,30.643038 L64.8808336,30.6493468 C64.8808336,31.5560203 64.1475133,32.2896506 63.241223,32.2896506 Z"></path>
</g>
</g>
</g>
<g id="chevron_arrow_2_" transform="translate(61.315044, 96.903797)" fill-rule="nonzero">
<polygon id="Path" fill="#F3F9FF" points="19.8068566 71.8750481 38.8335469 90.9097823 38.8335469 104.425165 19.8068566 85.3904304 0.781067257 104.425165 0.781067257 90.9097823"></polygon>
<polygon id="Path" fill="#E7F4FE" points="19.8068566 48.0825316 38.8335469 67.1163646 38.8335469 80.6317468 19.8068566 61.5970127 0.781067257 80.6317468 0.781067257 67.1163646"></polygon>
<polygon id="Path" fill="#DCEEFD" points="19.8068566 24.2891139 38.8335469 43.3238481 38.8335469 56.8383291 19.8068566 37.8035949 0.781067257 56.8383291 0.781067257 43.3238481"></polygon>
<polygon id="Path" fill="#D0E7FE" points="19.8068566 0.495696203 38.8335469 19.5304304 38.8335469 33.0449114 19.8068566 14.0110785 0.781067257 33.0449114 0.781067257 19.5304304"></polygon>
</g>
<g id="woman_7_" transform="translate(138.791150, 38.321519)" fill-rule="nonzero">
<rect id="Rectangle" fill="#0D1F42" x="8.16652212" y="0.450632911" width="2.57022478" height="156.781499"></rect>
<g id="Group" transform="translate(9.008850, 72.101266)">
<path d="M76.4626106,27.1326076 L65.7285664,27.1326076 C65.2510973,27.1326076 64.8637168,26.7450633 64.8637168,26.2673924 L64.8637168,26.2628861 C64.8637168,25.7852152 65.2510973,25.3976709 65.7285664,25.3976709 L76.4626106,25.3976709 L78.714823,26.2646886 L76.4626106,27.1326076 Z" id="Path" fill="#224380"></path>
<polygon id="Path" fill="#F1B282" points="23.8941717 111.707392 24.5590248 114.999716 20.2473894 115.60717 18.9420071 112.501408"></polygon>
<path d="M24.6527168,114.604962 C24.6527168,114.604962 20.5636,115.675666 19.2212814,115.806349 C17.8789628,115.937033 15.6015257,118.817478 14.2249735,119.255494 C12.5547327,119.786339 12.7511257,121.708739 14.0159681,122.049418 C15.802423,122.529792 26.1932301,122.361256 26.2202566,118.839109 C26.2481841,115.10877 24.6527168,114.604962 24.6527168,114.604962 Z" id="Path" fill="#102B5E"></path>
<polygon id="Path" fill="#F1B282" points="31.0661168 110.626775 29.2409239 113.484689 33.2084212 115.548587 35.5894602 113.08723"></polygon>
<path d="M12.8195929,82.2080608 C11.4817788,83.8438582 15.0916248,112.72402 17.2681628,114.131797 C19.4447009,115.539575 24.9346938,112.509519 24.9346938,112.509519 C24.9346938,112.509519 28.4364336,85.8059139 26.8274531,82.2071595 C25.2193735,78.6102076 14.1574071,80.5722633 12.8195929,82.2080608 Z" id="Path" fill="#0B224E"></path>
<path d="M59.1998531,83.8177215 C57.5908726,74.8221873 38.5470655,67.4354127 33.2084212,67.1515139 C27.869777,66.8676152 8.66921593,73.2828253 7.34221239,74.5139544 C6.01520885,75.7450835 5.43684071,85.1434835 17.1744708,84.8595848 C28.9121009,84.5756861 34.4011929,82.8713924 34.4011929,82.8713924 C34.4011929,82.8713924 41.3794478,85.7013671 45.7226142,87.4930835 C41.6380018,92.0300557 30.3481115,105.116435 30.4255876,111.090025 C30.8039593,112.794319 35.2525292,114.594147 36.4831381,114.025448 C37.7137469,113.456749 60.8097345,92.814157 59.1998531,83.8177215 Z" id="Path" fill="#102B5E"></path>
<path d="M29.1949788,24.0187342 C29.1949788,24.0187342 27.3968124,30.6475443 26.2607965,32.1625722 C25.1247805,33.6776 34.0228212,35.9505924 34.9687504,35.003362 C35.9146796,34.0561316 36.1047664,27.6174886 36.1047664,27.6174886 C36.1047664,27.6174886 40.837115,28.7467747 42.0677239,27.7328506 C43.2983327,26.7189266 43.6767044,24.8713316 43.7712973,24.3035342 C43.8658903,23.7357367 45.5694637,23.1201722 45.5694637,22.2675747 C45.5694637,21.4149772 44.7172265,15.5360203 43.0614,14.1715038 C42.1406956,13.4135392 31.4661097,10.0995848 30.4255876,16.1596962 C29.3841646,22.2198076 29.1949788,24.0187342 29.1949788,24.0187342 Z" id="Path" fill="#F1B282"></path>
<path d="M30.2364018,25.7239291 C33.1705841,25.7239291 37.9984265,24.8713316 37.9984265,21.9359089 C37.9984265,19.0004861 34.2120071,14.7393013 37.9984265,15.2124658 C41.784846,15.6856304 44.7172265,15.6901367 44.7190283,11.7092456 C44.7208301,6.21693165 30.3192832,0.219007595 25.1256814,12.7420962 C21.5284478,21.4149772 26.4725044,25.7239291 30.2364018,25.7239291 Z" id="Path" fill="#102B5E"></path>
<path d="M62.1601611,33.5811646 C62.1601611,33.5811646 65.9087434,29.8958886 66.3483752,29.365043 C68.3321239,26.9685772 67.5024088,24.0358582 70.2699274,24.0358582 C71.7906212,24.0358582 74.5076903,25.177762 74.5860673,27.0956557 C74.6203009,27.9221165 74.8950708,30.9557772 72.4284478,31.3442228 C70.3645204,31.6686785 64.8330867,37.3926177 64.8330867,37.3926177 L62.1601611,33.5811646 Z" id="Path" fill="#F1B282"></path>
<path d="M67.5258319,34.2661266 C67.0528673,31.2360709 63.5376142,30.7475848 61.4682814,32.6564658 C60.806131,33.2675241 52.9008655,37.2925772 49.451377,39.8017013 C46.444223,35.9731241 38.7758903,29.748081 29.067954,29.748081 C15.2808106,29.748081 0.136033628,43.2896 0.136033628,52.6636658 C0.136033628,59.1960405 3.8386708,59.6340557 7.24311504,58.6588861 C6.12151327,63.0868051 4.64135929,70.6421165 5.90800354,75.9586835 C6.88005841,80.0396152 18.2149929,75.200719 22.7581558,74.5382886 C27.3013186,73.8758582 36.6723239,74.159757 36.2939522,69.5200405 C35.9155805,64.8803241 34.9939752,50.2086177 42.9109522,50.565519 C46.5081858,50.565519 47.1730389,53.0430987 50.3027133,53.0430987 C56.2656708,53.0421975 68.1915858,38.5273114 67.5258319,34.2661266 Z" id="Path" fill="#1B90FB"></path>
<path d="M26.5923221,6.78472911 C26.5923221,6.78472911 26.7724991,0.0612860759 17.1744708,0.0612860759 C-2.32428319,0.0612860759 5.43774159,18.2425215 5.15306195,27.7121215 C4.8683823,37.1817215 0.326120354,36.5183899 0.136033628,39.8332456 C-0.0531522124,43.1472 18.5933646,40.4956759 19.9185664,27.6174886 C21.2437681,14.7393013 22.1896973,8.80716962 24.9355947,9.90941772 C27.681492,11.0125671 26.5923221,6.78472911 26.5923221,6.78472911 Z" id="Path" fill="#102B5E"></path>
<path d="M29.1526372,5.0948557 C31.0309823,5.98891139 26.6860142,13.8064911 24.0518265,12.785357 C21.4176389,11.7642228 26.7040319,3.92951899 29.1526372,5.0948557 Z" id="Path" fill="#1B90FB"></path>
<path d="M7.22059292,58.7472101 C7.22059292,58.7472101 10.453869,46.5089215 15.1393717,43.3842329 C15.1393717,43.3842329 9.3178531,58.7472101 5.51161416,73.4017924 C5.51161416,73.4017924 5.26567257,64.6342785 7.22059292,58.7472101 Z" id="Path" fill="#1277D7"></path>
<path d="M45.5703646,87.6625215 L48.2676142,88.5529722 C48.2676142,88.5529722 41.6551186,94.9123038 37.5551912,97.3430177 C37.5551912,97.3430177 43.5803097,88.4961924 45.5703646,87.6625215 Z" id="Path" fill="#0B224E"></path>
<path d="M29.2265097,112.703291 C29.2265097,112.703291 33.6705752,115.496314 35.2291062,116.174066 C36.7867363,116.852719 38.2443681,120.878673 39.7065044,121.903413 C41.4803469,123.146258 40.3875735,125.147068 38.7137292,125.010076 C36.3489062,124.816304 23.9184956,120.478511 25.4554053,116.657144 C27.0815027,112.610461 29.2265097,112.703291 29.2265097,112.703291 Z" id="Path" fill="#102B5E"></path>
</g>
<path d="M4.07650442,162.738866 L70.4573115,162.738866 C72.2392619,162.738866 73.6833805,161.294137 73.6833805,159.511433 L73.6833805,159.206805 C73.6833805,157.424101 72.2392619,155.979372 70.4573115,155.979372 L4.07650442,155.979372 C2.29455398,155.979372 0.850435398,157.424101 0.850435398,159.206805 L0.850435398,159.511433 C0.850435398,161.294137 2.29455398,162.738866 4.07650442,162.738866 Z" id="Path" fill="#0D1F42"></path>
<rect id="Rectangle" fill="#0D1F42" x="65.3069522" y="0.450632911" width="2.57022478" height="156.781499"></rect>
</g>
<g id="man_on_ladder_1_" transform="translate(377.525664, 121.237975)" fill-rule="nonzero">
<rect id="Rectangle" fill="#183168" x="46.2235062" y="14.6356557" width="41.7163788" height="3.60506329"></rect>
<rect id="Rectangle" fill="#183168" x="45.943331" y="41.523119" width="41.0064814" height="3.60506329"></rect>
<rect id="Rectangle" fill="#183168" x="46.2235062" y="76.2317671" width="42.0704265" height="3.60506329"></rect>
<rect id="Rectangle" fill="#183168" x="52.0098903" y="107.820233" width="35.6840531" height="3.60506329"></rect>
<rect id="Rectangle" fill="#183168" x="46.3613416" y="206.888273" width="41.3605292" height="3.60506329"></rect>
<rect id="Rectangle" fill="#183168" x="46.3613416" y="239.241013" width="41.3605292" height="3.60506329"></rect>
<rect id="Rectangle" fill="#183168" x="46.5784549" y="138.928324" width="41.3605292" height="3.60506329"></rect>
<rect id="Rectangle" fill="#183168" x="86.2282035" y="0.89315443" width="3.60353982" height="256.868871"></rect>
<rect id="Rectangle" fill="#183168" x="45.4856814" y="0.89315443" width="3.60353982" height="256.868871"></rect>
<g id="Group" transform="translate(0.000000, 14.420253)">
<path d="M11.6682619,19.8963443 L12.5195982,18.2290025 C12.8105841,17.6585013 12.8628354,17.0095899 12.6646407,16.4003342 C12.4673469,15.7919797 12.0448319,15.2962835 11.4754726,15.0051747 L1.85131858,10.0887696 C1.08556637,9.69762025 0.781067257,8.75669873 1.17115044,7.99062278 L3.18823186,4.03857215 C3.37831858,3.66725063 3.7008354,3.39236456 4.09632389,3.26438481 C4.49271327,3.13460253 4.91703009,3.1670481 5.28549204,3.35901772 L8.88452743,5.1976 L9.26470088,4.45225316 L5.66566549,2.61367089 C5.09360354,2.32526582 4.44676814,2.27118987 3.8386708,2.46946835 C3.22967257,2.66684557 2.73508673,3.08953924 2.44410088,3.65913924 L0.427019469,7.61209114 C-0.172969912,8.7891443 0.295490265,10.2347747 1.47114513,10.835919 L11.0952991,15.7523241 C11.4664637,15.9406886 11.7412336,16.2633418 11.8691593,16.6598987 C11.997085,17.0564557 11.9637522,17.4791494 11.7745664,17.8495696 L10.9232301,19.5169114 L11.6682619,19.8963443 Z" id="Path" fill="#4D78CC"></path>
<path d="M6.84762655,8.24027342 L23.1878779,16.5868962 C24.2734442,17.1411747 25.6022496,16.7103696 26.1571947,15.6243443 L27.8373451,12.3320203 C28.3913894,11.2459949 27.9607664,9.91662785 26.8752,9.3614481 L10.5349487,1.01482532 C9.4493823,0.460546835 8.12057699,0.891351899 7.56563186,1.97737722 L5.88548142,5.26970127 C5.33143717,6.35662785 5.76206018,7.68599494 6.84762655,8.24027342 Z" id="Path" fill="#7266D5"></path>
<path d="M9.85297876,27.6463291 L13.5087699,20.4830684 C14.0628142,19.397043 13.6321912,18.0676759 12.5466248,17.5124962 L12.3385204,17.4061468 C11.252954,16.8518684 9.92414867,17.2826734 9.36920354,18.3686987 L5.71341239,25.5319595 C5.15936814,26.6179848 5.58999115,27.9473519 6.67555752,28.5025316 L6.88366195,28.608881 C7.96922832,29.1631595 9.29893451,28.7323544 9.85297876,27.6463291 Z" id="Path" fill="#224380"></path>
</g>
<rect id="Rectangle" fill="#183168" x="48.0324832" y="174.534633" width="41.3605292" height="3.60506329"></rect>
<path d="M62.5376319,165.929347 L64.1970619,170.75923 C64.1970619,170.75923 67.5699752,173.811818 69.317692,169.460506 C69.317692,169.460506 68.7744584,166.525084 68.5762637,165.453478 C68.378069,164.380972 62.5376319,165.929347 62.5376319,165.929347 Z" id="Path" fill="#F1B282"></path>
<path d="M69.8465115,166.232172 L61.3826973,166.232172 C61.3826973,166.232172 53.460315,135.112365 51.2567504,126.868486 C49.5207451,120.375767 47.5027628,98.9157266 48.3036496,88.9197873 C49.0676,79.3898025 65.2727186,84.5513519 66.1177487,91.2441519 C68.5960832,110.863808 63.9835522,125.415646 64.220485,128.846765 C68.2411345,139.022056 69.8465115,166.232172 69.8465115,166.232172 Z" id="Path" fill="#102B5E"></path>
<path d="M46.6280035,27.6598481 C45.6045982,29.859838 46.1063912,31.0576203 45.8550442,31.9841215 C45.6036973,32.9115241 44.6424531,34.7825519 44.6019133,35.6702987 C44.5613735,36.5580456 45.5036991,36.6788152 45.7072991,37.8387443 C45.9108991,38.9986734 45.3766743,40.5100962 46.083869,41.7259038 C46.7910637,42.9417114 49.5351593,42.6605165 49.373,43.8339646 C49.2117416,45.0074127 47.4820425,49.3623291 47.4820425,49.3623291 L58.7656265,49.5434835 C58.7656265,49.5434835 58.3151841,43.204881 58.8890478,40.5849013 C59.4629115,37.9649215 60.7349611,28.3394025 58.3917593,27.1722633 C56.0485575,26.0051241 47.7144708,25.3246684 46.6280035,27.6598481 Z" id="Path" fill="#F1B282"></path>
<path d="M52.8224885,22.6695392 C62.2097097,22.9624506 65.5033451,25.3291747 65.3961398,32.667281 C65.332177,37.0411241 62.9196071,43.0949266 59.7520956,43.0751473 C57.4683522,43.0606785 52.9657292,42.8065215 52.176554,41.5582684 C50.3036142,38.5949063 51.9071894,34.5040608 50.6522566,33.0917772 C48.8685044,31.0846582 44.815423,32.1184101 45.3721699,25.2038987 C45.9289168,18.2893873 49.6982195,22.5713013 52.8224885,22.6695392 Z" id="Path" fill="#0B224E"></path>
<path d="M74.1401292,20.5768 C74.1401292,20.5768 75.7401009,16.118238 75.4545204,13.7343899 C74.9941681,9.89319494 65.856492,9.87607089 65.4628053,13.202643 C65.0456956,16.7347038 66.6916124,17.6585013 67.7663681,18.5804962 C68.8411239,19.5024911 70.069931,21.115757 70.3771327,21.7304203 C70.6843345,22.3450835 73.6788761,22.3441823 74.1401292,20.5768 Z" id="Path" fill="#F1B282"></path>
<path d="M9.9646885,46.2709873 C9.9646885,46.2709873 5.46656991,44.7902076 3.76389735,43.0985316 C1.02070265,40.3722025 6.62781062,33.1548658 9.49082301,34.8907038 C12.5313097,36.7337924 12.2466301,38.6003139 12.3114938,40.0153013 C12.3763575,41.4302886 12.8925646,43.391443 13.1880549,44.0124152 C13.4835451,44.6324861 11.6412354,46.9938025 9.9646885,46.2709873 Z" id="Path" fill="#F1B282"></path>
<path d="M40.234423,158.566005 L42.6650106,163.057013 C42.6650106,163.057013 46.4937717,165.513863 47.5027628,160.934532 C47.5027628,160.934532 46.4847628,158.128891 46.1126973,157.103251 C45.7406319,156.078511 40.234423,158.566005 40.234423,158.566005 Z" id="Path" fill="#F1B282"></path>
<path d="M40.4794637,89.3334684 C40.4794637,89.3334684 24.1797522,112.419392 23.7833628,117.053701 C23.0671593,125.416547 39.0173274,158.62639 39.0173274,158.62639 L47.266731,156.855403 C47.266731,156.855403 41.7416035,131.821843 37.375915,123.286856 C45.7721628,111.929104 59.0728283,105.586896 59.0728283,90.7520608 C59.0737292,86.7297114 40.4794637,89.3334684 40.4794637,89.3334684 Z" id="Path" fill="#0B224E"></path>
<path d="M57.6548354,47.6616405 C55.2386619,47.4985114 50.7414442,47.7454582 48.1225717,47.6958886 C41.4163841,47.5697114 32.3552832,53.5342886 25.0923487,55.6657823 C20.3464867,50.5267646 13.3880513,42.3730127 13.3880513,42.3730127 L7.53590265,45.9888911 C7.53590265,45.9888911 17.9825646,64.0142076 24.4040726,65.0479595 C28.2904903,65.673438 34.5381274,65.4337013 39.3866903,63.4229772 C39.3866903,69.4596557 31.6561965,93.1169823 37.3362761,94.3219747 C43.0163558,95.5269671 51.9675487,93.4612658 57.4755593,94.3219747 C62.9835699,95.1826835 69.0077876,99.3158886 67.6312354,88.9837772 C66.2537823,78.6516658 60.2286637,79.7629266 73.1383451,60.0513418 C76.5193664,54.8888911 80.4553327,47.3687291 79.8589469,41.0625722 C78.6923009,28.7368608 75.6986602,19.4718481 75.6986602,19.4718481 L69.2933681,20.5046987 C69.2933681,20.5046987 69.8465115,33.4811241 71.2230637,41.0580658 C69.8456106,44.7045873 67.7681699,47.2137114 65.3961398,49.8075544 C64.0970637,51.2288506 61.4376513,47.5255494 57.6548354,47.6616405 Z" id="Path" fill="#FFCB01"></path>
<path d="M69.4618336,168.30959 C70.1293894,168.222167 70.8347823,168.939575 70.8068549,171.602815 C70.7789274,174.266056 70.9014478,175.676537 68.8366195,175.962238 C67.5393451,176.14159 62.6502425,174.847372 57.8872637,174.932992 C56.1665735,174.963635 53.0044673,174.156101 51.8954779,172.677124 C51.6693558,172.3752 51.6189062,171.939889 51.7675522,171.571271 C51.9161982,171.202653 52.2360124,170.969225 52.5801504,170.979139 C56.4170195,171.08639 56.483685,171.459514 59.5890354,169.253215 C60.7160425,168.45199 61.6574673,167.703038 62.2520513,167.662481 C63.4087876,167.58317 63.9439133,169.124334 65.8285646,168.923352 C67.7150177,168.721468 68.3078,168.461003 69.4618336,168.30959 Z" id="Path" fill="#0B224E"></path>
<path d="M47.5622212,159.639413 C48.2604071,159.50242 49.1703009,160.431625 49.5207451,162.892081 C49.8711894,165.353438 50.5801858,167.32 48.4207646,167.758916 C47.0649327,168.034704 40.0074,167.316395 34.9471292,167.800375 C33.1192336,167.97522 30.9769292,167.088375 29.5850619,165.81759 C29.3003823,165.558025 29.185069,165.160567 29.2913735,164.807271 C29.3976779,164.453975 29.7048796,164.211534 30.0724407,164.190805 C34.1741699,163.963686 34.2993929,164.302562 37.2921327,162.002532 C38.3786,161.167058 39.2740796,160.395575 39.9019965,160.308152 C41.1226956,160.136911 41.8569168,161.186886 43.8361611,160.8408 C45.8154053,160.494714 46.3541345,159.877347 47.5622212,159.639413 Z" id="Path" fill="#0B224E"></path>
</g>
<g id="man_with_paper" transform="translate(204.555752, 213.167089)">
<path d="M24.5076743,4.49641519 C27.5787912,4.09174684 30.3147788,6.04569114 30.3147788,8.43404557 C30.3147788,8.95407595 30.1111788,9.89229367 30.508469,11.0810633 C30.7742301,11.8759797 31.8886248,12.9025215 31.8787807,13.985843 C31.8688053,15.0691646 30.249915,14.8249215 30.3787416,15.7937823 C30.5075681,16.7617418 31.1535027,18.7634532 30.7012584,19.5376405 C30.249915,20.3127291 25.2166708,19.4087595 25.0878442,21.2157975 C24.9590177,23.0228354 26.249085,26.4990177 26.249085,26.4990177 L15.4087363,25.6698532 C15.4087363,25.6698532 14.5033469,8.93064304 15.4087363,7.65895696 C16.9258265,5.52926582 22.0554655,4.81906835 24.5076743,4.49641519 Z" id="Path" fill="#F1B282" fill-rule="nonzero"></path>
<path d="M4.81072566,153.006096 C4.81072566,153.006096 2.79995044,161.619494 4.79541062,163.34722 L9.20163894,163.750086 C9.60343363,163.787038 9.9583823,163.490522 9.99531858,163.088557 L10.0583805,162.39999 C10.0583805,162.39999 11.9042938,164.207028 13.359223,164.339514 C14.8141522,164.472 22.5743752,164.531484 22.5743752,164.531484 C22.5743752,164.531484 24.3635327,165.012759 24.5220885,163.273316 C24.7491115,160.782218 18.4041788,160.457762 15.9816991,158.191078 C13.5592195,155.924395 12.4322124,153.701873 12.4322124,153.701873 L4.81072566,153.006096 Z" id="Path" fill="#0B224E"></path>
<path d="M28.0544584,155.318744 C28.0544584,155.318744 26.8355611,164.079949 28.9796673,165.61841 L33.4048142,165.61841 C33.8084106,165.61841 34.1354319,165.291251 34.1354319,164.887484 L34.1354319,164.196213 C34.1354319,164.196213 36.1380991,165.827504 37.5984336,165.827504 C39.0587681,165.827504 48.4054496,165.81038 48.4054496,165.81038 C48.4054496,165.81038 50.2306425,166.126724 50.2306425,164.380071 C50.2306425,161.879058 42.2695221,161.502329 39.6506496,159.465468 C37.031777,157.428608 35.7074761,155.317843 35.7074761,155.317843 L28.0544584,155.317843 L28.0544584,155.318744 Z" id="Path" fill="#0B224E"></path>
<path d="M66.1042354,54.1687797 C66.1042354,54.8068759 65.8420779,55.4170329 65.379023,55.8559494 C49.6603823,70.7583797 22.9167115,70.6430313 22.9167115,70.6430313 L22.9167115,36.7103595 C22.9167115,36.7103595 47.0676354,38.9427949 64.8033575,22.4712608 C65.0285788,22.2612658 65.3574018,22.2053873 65.6393788,22.3288608 C65.9213558,22.4523342 66.1042354,22.7308253 66.1042354,23.0390582 L66.1042354,54.1687797 Z" id="Path" fill="#1B90FB" fill-rule="nonzero"></path>
<path d="M57.7800584,41.8836253 C57.7800584,41.8836253 60.1998354,39.075281 60.6836106,38.4948658 C61.1673858,37.9135494 61.5628743,34.5247899 62.4295257,33.6532658 C63.296177,32.7817418 66.0339664,31.2739241 66.757377,31.355038 C67.7798814,31.4704 68.8699522,35.8550582 68.4978867,39.0013772 C68.1555504,41.8944405 66.5501735,42.8741165 64.142108,43.2616608 C62.888977,43.4635443 60.5124425,46.2637772 60.3187522,47.0379646 L57.7800584,41.8836253 Z" id="Path" fill="#F1B282" fill-rule="nonzero"></path>
<path d="M27.5085221,31.9309468 C27.5085221,31.9309468 27.8409487,26.9343291 26.1130513,26.3872608 C24.385154,25.8401924 16.1871009,23.3860456 15.0826159,25.0326582 C13.9790319,26.6792709 13.8150708,30.9999392 13.8150708,30.9999392 L27.5085221,31.9309468 Z" id="Path" fill="#1EAF69" fill-rule="nonzero"></path>
<path d="M33.0913062,4.272 C32.9489664,-0.794916456 11.855646,-1.93141266 11.3988973,9.17398481 C11.1358389,15.5846886 12.8168903,20.892243 14.2952425,20.8733165 C18.1726513,20.8228456 15.8015221,14.053438 18.0447257,13.7542177 C20.5392761,13.4207494 18.0231044,24.7920203 24.3563257,24.123281 C34.9786602,23.0003038 32.2057363,15.0691646 25.6256726,16.3372456 C19.0456088,17.6053266 20.6951292,10.2726278 26.1788159,8.90090127 C31.6616018,7.52737215 33.194908,7.96538734 33.0913062,4.272 Z" id="Path" fill="#0B224E" fill-rule="nonzero"></path>
<path d="M7.34941947,79.5511291 C7.34941947,79.5511291 6.88546372,96.574238 9.19082832,113.829873 L3.74768142,153.827149 C3.70353805,154.149803 3.79723009,154.475159 4.00443363,154.725711 C4.21163717,154.976263 4.5152354,155.127676 4.83955398,155.1448 L14.0781292,155.614359 C14.6186602,155.641397 15.1042372,155.292608 15.2528832,154.772577 C16.7123168,149.656992 23.9617381,123.890704 24.4833504,115.185377 C25.0644212,105.502177 27.1932124,79.7449013 22.5473487,77.0338937 C17.901485,74.3228861 7.94490442,71.5983595 7.34941947,79.5511291 Z" id="Path" fill="#0B224E" fill-rule="nonzero"></path>
<path d="M13.0628319,78.5831696 C14.3592053,88.772881 23.3230106,117.509742 25.4518018,121.382481 L26.7553823,155.848689 C26.7851115,156.627382 27.3869027,157.262775 28.1625646,157.333073 L35.8615274,158.033357 C36.2786372,158.07121 36.6939451,157.938724 37.0119575,157.664739 C37.3299699,157.390754 37.5227593,157.000506 37.5479841,156.581418 L39.7767735,118.846319 C39.7767735,118.846319 37.2606018,80.7119595 32.6138372,76.8392203 C27.9670726,72.966481 12.3970779,73.3513215 13.0628319,78.5831696 Z" id="Path" fill="#102B5E" fill-rule="nonzero"></path>
<path d="M12.9592301,52.5113519 C15.7285504,50.4420456 18.9293947,47.7193215 19.9978442,45.5139241 C22.0113221,41.3563848 20.8464779,23.5464709 13.4312938,28.9684861 C6.01610973,34.3905013 0.362155752,50.7241418 0.665753982,56.2452962 C0.969352212,61.7664506 25.7806248,72.8943797 25.7806248,72.8943797 L27.9031097,63.9087595 C27.9031097,63.9078582 17.8528372,56.1569722 12.9592301,52.5113519 Z" id="Path" fill="#1EAF69" fill-rule="nonzero"></path>
<path d="M63.0241097,45.171443 L59.0079646,39.8674937 C58.7548159,39.5331241 58.2818513,39.4610228 57.9404159,39.7052658 C55.9945044,41.0977215 49.8567752,45.5788152 45.6649575,49.5768304 C42.1596142,43.3589975 33.1904035,28.3736506 27.9688743,28.0365772 C25.1067628,27.1650532 15.9663841,25.9059848 12.2889717,29.392081 C8.61065841,32.8781772 9.96558938,41.3996456 9.38541947,54.5680405 C8.80434867,67.7373367 3.19093451,79.9377722 7.64310796,81.8745924 C12.0952814,83.8114127 16.5474549,78.9698127 22.5491504,79.1635848 C28.5499451,79.357357 35.9209858,82.8434532 36.4948496,78.0018532 C37.0110566,73.6415291 32.3705982,62.8497722 32.8525717,54.2390785 C37.1993416,58.9328709 42.5028513,63.8159291 45.1982991,63.0904101 C49.7153363,61.8737013 60.7791044,48.8044456 63.0024885,46.1348962 C63.2313133,45.8582076 63.241223,45.4589468 63.0241097,45.171443 Z" id="Path" fill="#2CCD7F" fill-rule="nonzero"></path>
<path d="M33.9003009,64.2827848 C30.4391009,61.5483443 23.8653434,54.6852051 25.6463929,42.9489215 C25.6463929,42.9489215 26.3202549,43.9871797 27.4661805,45.7915139 C28.7436354,47.7824101 30.610269,50.7187342 32.8318513,54.2201519 C32.8318513,54.2201519 32.8318513,54.2282633 32.8399593,54.2282633 L32.8399593,54.2363747 C32.6534761,57.4268557 33.1877009,60.9282734 33.9003009,64.2827848 Z" id="Path" fill="#1EAF69" fill-rule="nonzero"></path>
</g>
<g id="check_2_" transform="translate(446.893805, 23.000000)" fill-rule="nonzero">
<ellipse id="Oval" fill="#DBFEED" cx="25.0725292" cy="24.9245063" rx="24.7743363" ry="24.7848101"></ellipse>
<ellipse id="Oval" fill="#9AEEC5" cx="25.0725292" cy="24.9245063" rx="19.2690283" ry="19.2771747"></ellipse>
<ellipse id="Oval" fill="#60DFA0" cx="25.0725292" cy="24.9245063" rx="13.7637204" ry="13.7695392"></ellipse>
<path d="M23.6383204,30.4321418 C23.6194018,30.4321418 23.5995823,30.4321418 23.5806637,30.4321418 C23.1986885,30.415919 22.8410372,30.2410734 22.5941947,29.9508658 L18.4654389,25.1317975 C17.9690513,24.5558886 18.0366177,23.6852658 18.6149858,23.1904709 C19.1942549,22.7010835 20.0609062,22.7659747 20.5545912,23.3409823 L23.7230035,27.0379747 L31.0453965,19.8116253 C31.5841257,19.2789772 32.4597858,19.2870886 32.991308,19.8251443 C33.5246319,20.3686076 33.5192265,21.2401316 32.9777947,21.7745823 L24.604069,30.0364861 C24.3473168,30.2897418 24.0004761,30.4321418 23.6383204,30.4321418 Z" id="Path" fill="#FFFFFF"></path>
</g>
<g id="plant_13_" transform="translate(46.000000, 234.797468)" fill-rule="nonzero">
<path d="M69.5330035,53.0530127 C69.1789558,53.0530127 68.8726549,52.7889418 68.8240071,52.4275342 C65.7591965,27.7085165 68.1564513,12.8727797 75.9482053,8.33941266 C83.4336584,3.98629873 92.8938513,10.8981063 93.2830336,11.1973266 C93.6028478,11.4298532 93.6650088,11.8786835 93.428977,12.1914228 C93.1929451,12.5077671 92.7334938,12.5735595 92.4353009,12.3374278 C92.3452124,12.2680304 83.3579841,5.67617215 76.6581027,9.57324557 C71.6744071,12.4762228 66.5177416,22.2387342 70.2429009,52.2535899 C70.2915487,52.6429367 70.0131752,52.9980354 69.6239929,53.0467038 C69.5888584,53.0494076 69.560931,53.0530127 69.5330035,53.0530127 Z" id="Path" fill="#2CCD7F"></path>
<path d="M54.1738159,114.058795 L61.3106265,139.114886 C61.8250319,140.921023 66.3871133,142.334208 71.9383664,142.334208 C77.4896195,142.334208 82.0517009,140.921023 82.5661062,139.114886 L89.7029168,114.058795 L54.1738159,114.058795 Z" id="Path" fill="#C3D3F3"></path>
<path d="M89.7317451,113.853306 C89.7317451,113.922704 89.7218354,113.9912 89.7029168,114.058795 C89.1704938,115.928922 81.4210814,117.413306 71.9392673,117.413306 C62.4574531,117.413306 54.7080407,115.929823 54.1756177,114.058795 C54.1566991,113.990299 54.1467894,113.921803 54.1467894,113.853306 C54.1467894,111.886744 62.113315,110.293306 71.9401681,110.293306 C81.7670212,110.293306 89.7317451,111.887646 89.7317451,113.853306 Z" id="Path" fill="#DAE7FF"></path>
<path d="M70.4528071,113.826268 C70.7627115,96.5814481 70.6203717,79.2627241 69.4005735,62.0611646 C68.6807664,53.5036456 67.9627611,44.8001215 65.5105522,36.6842228 C64.8267805,34.7474025 64.0745416,32.6348354 62.7277186,31.4064101 C61.4881009,30.002238 59.6611062,30.8070684 58.3214903,32.4311494 C55.5638814,35.4548962 53.7693186,39.5015797 51.9477292,43.3454785 L51.9288106,43.3851342 C51.7603451,43.7402329 51.3360283,43.8916456 50.9810796,43.7231089 C50.6288336,43.5554734 50.477485,43.1363848 50.6396442,42.7821873 C52.4612336,38.8265316 54.1242673,34.7582177 57.1575469,31.3090734 C57.8719487,30.4177215 58.8890478,29.7048203 60.0674053,29.1676658 C61.4340478,28.8107646 62.9493363,29.1965063 63.8565274,30.1176 C65.7402779,31.8597468 66.4276531,34.0408101 67.2258372,36.1074127 C69.9086726,44.557681 70.7248743,53.2476861 71.5897239,61.8818127 C73.0752832,79.1924253 73.4743752,96.5219646 73.4221239,113.881246 C73.4194212,114.702299 72.7527664,115.364729 71.9320602,115.36293 C71.111354,115.360223 70.4492035,114.693286 70.4510053,113.872233 C70.4528071,113.866825 70.4528071,113.831676 70.4528071,113.826268 Z" id="Path" fill="#2CCD7F"></path>
<path d="M71.8266566,90.3095392 C71.4302673,90.3095392 71.1176602,89.9895899 71.1176602,89.596638 C71.1176602,70.4537519 73.7167133,59.9053367 78.840046,58.2434025 C83.5732956,56.6932253 88.3137522,63.1904506 88.5155504,63.4653367 C88.7452761,63.7852861 88.6750071,64.2269063 88.3560938,64.4594329 C88.0362796,64.6892557 87.5912425,64.618957 87.3624177,64.2999089 C87.3137699,64.2404253 83.053485,58.3930127 79.278777,59.5962025 C76.2067593,60.5975089 72.536554,66.612557 72.536554,89.596638 C72.5356531,89.9895899 72.223046,90.3095392 71.8266566,90.3095392 Z" id="Path" fill="#2CCD7F"></path>
<path d="M68.3411327,40.6407797 C68.3411327,40.6407797 70.7230726,25.8329823 58.4845504,11.307281 C58.4845504,11.307281 65.0159664,26.8577215 68.3411327,40.6407797 Z" id="Path" fill="#2CCD7F"></path>
<path d="M87.939885,63.8817215 C83.3850106,55.6937215 92.2028726,46.1267848 98.9450956,46.1267848 C105.687319,46.1267848 114.907876,56.2371848 114.907876,56.2371848 C114.907876,56.2371848 98.9450956,54.5581266 98.9450956,56.8401316 C98.9450956,59.1221367 112.528639,55.1538633 117.981696,57.8324253 C123.434752,60.5109873 124.327529,68.3465924 124.327529,68.3465924 C124.327529,68.3465924 102.018915,63.1886481 101.919818,64.9740557 C101.82072,66.7594633 124.228432,66.9577418 125.715793,71.4217114 C127.203154,75.885681 126.707667,80.0513316 126.707667,80.0513316 C126.707667,80.0513316 105.787317,70.7277367 105.191832,73.9010937 C104.597248,77.0753519 126.786945,77.6701873 126.786945,83.7212861 C126.786945,89.7723848 123.039264,101.476223 123.93114,103.46081 C123.93114,103.46081 111.041278,107.825641 107.869262,103.46081 C104.696345,99.0959797 104.101761,86.5981266 101.523428,86.5981266 C98.9450956,86.5981266 100.036067,102.181914 105.985512,105.400334 C105.985512,105.400334 94.2857186,107.824739 93.0956496,100.48483 C91.9055805,93.1449215 94.7812053,80.4478886 92.6992602,79.5556354 C90.617315,78.6633823 85.7588425,92.9538532 92.0055788,103.163392 C92.0055788,103.163392 83.0823133,104.849661 82.0904389,96.9140152 C81.0985646,88.9783696 86.2543292,75.9559797 84.767869,75.9559797 C83.2814088,75.9559797 75.1500212,88.0861165 75.7455062,95.0294684 C75.7455062,95.0294684 66.0285611,87.9869772 68.0114088,83.2255899 C69.9942566,78.4642025 77.5301593,72.9097013 76.2409929,71.8182684 C74.9518265,70.7268354 66.2267558,77.1744911 65.731269,80.9435848 C65.731269,80.9435848 61.0709912,70.2311392 70.1933522,61.7006582 C77.0490867,55.2872506 87.939885,63.8817215 87.939885,63.8817215 Z" id="Path" fill="#45D48F"></path>
<path d="M118.215025,36.6139241 C118.215025,36.6139241 123.626641,27.639119 119.994273,22.8921519 C111.987207,12.3599595 104.054014,15.1782177 104.128788,13.3243139 C104.20266,11.4704101 116.806041,12.5825722 119.40149,16.5138937 C119.40149,16.5138937 119.253745,6.27821772 114.656529,6.27821772 C110.059313,6.27821772 104.20266,8.50344304 103.758524,7.09386329 C103.313487,5.68428354 113.989874,4.64602532 113.989874,4.64602532 C113.989874,4.64602532 106.138662,-0.397458228 99.4252673,0.195574684 C91.165954,0.9256 92.8605186,11.7660253 92.8605186,11.7660253 C92.8605186,11.7660253 86.4849558,0.6408 80.6274018,6.20341266 C74.7707487,11.7660253 76.8463876,17.9225722 79.2184177,21.631281 C80.7012743,17.403443 85.1489434,11.6182177 86.1876637,13.1386532 C87.2254832,14.6590886 75.512177,25.0425722 83.7408602,30.9765063 C85.0750708,24.7460557 90.0425504,15.3269266 91.4515345,17.2547342 C93.0587133,17.688243 83.6669876,29.9094076 86.3363097,34.3138937 C89.0056319,37.2808608 92.8605186,38.8382481 92.8605186,38.8382481 C92.8605186,38.8382481 94.3433752,20.8147342 97.3090885,22.6695392 C100.274802,24.5243443 91.0073982,35.0556354 95.7523593,40.2478278 C100.49732,45.4400203 109.319687,44.9947949 110.134988,47.5904405 C110.134988,47.5904405 118.142053,41.5086987 116.807842,36.9843443 C115.002469,30.8638481 105.835064,27.639119 106.502619,26.1186835 C107.168373,24.5982481 117.473596,27.0460861 118.215025,36.6139241 Z M104.128788,18.3677975 C103.906269,17.1808304 105.018862,16.1425722 110.134087,17.6999595 C115.249312,19.2573468 118.511416,27.0451848 118.511416,27.0451848 C114.730402,20.1477975 104.351306,19.5547646 104.128788,18.3677975 Z" id="Shape" fill="#7BE6B1"></path>
<path d="M25.3373894,64.1214582 C26.1238619,66.812638 10.0763982,70.216719 5.72332212,80.069357 C2.50536106,87.3524861 14.5871292,99.2762329 14.5871292,99.2762329 C16.5168248,95.1078785 31.1895381,97.7729215 40.2614496,90.1139646 C49.3333611,82.4550076 36.1092708,62.8074127 41.4767434,60.3478582 C46.8442159,57.8892051 45.4082053,88.3835342 45.4082053,88.3835342 C45.4082053,88.3835342 52.2008779,86.6152506 57.3134,82.2296911 C62.7394301,75.4368506 49.6747965,52.9349468 52.458531,52.5582177 C55.2359593,49.6363139 61.5034159,66.4863797 62.3826796,77.2069367 C77.4490796,69.0649013 60.0971345,49.1325063 62.1655664,46.8126481 C64.2339982,44.4927899 70.4230779,55.1457519 71.9852124,62.5460456 C76.7635062,56.8536506 81.5769345,47.0001114 72.9815912,36.4129418 C64.3862478,25.8257722 51.2936867,43.0633823 51.2936867,43.0633823 C51.2936867,43.0633823 56.4872885,25.2850127 42.8190619,22.2648709 C31.7093487,19.8107241 17.4699611,26.5449823 17.4699611,26.5449823 C17.4699611,26.5449823 35.1164956,30.6069873 34.0651628,32.8691646 C33.0138301,35.1313418 23.6932743,30.1320203 15.997915,29.1316152 C8.30255575,28.1312101 5.83052743,45.2345316 5.83052743,45.2345316 C11.0286336,39.2185823 32.3696973,40.0982177 32.090423,43.2184 C31.8111487,46.3385823 19.1447062,39.8945316 3.45038938,55.7829468 C-3.66299823,62.9389975 3.44588496,79.1410532 3.44588496,79.1410532 C6.7665469,63.2850835 24.5509168,61.4302785 25.3373894,64.1214582 Z M5.02964071,63.0597671 C5.02964071,63.0597671 12.1835681,50.7322532 21.0861133,49.2379544 C29.9886584,47.7436557 31.6246655,49.7237367 30.994046,51.6623595 C30.3634265,53.600081 12.8592319,52.3347038 5.02964071,63.0597671 Z" id="Shape" fill="#9AEEC5"></path>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 44 KiB

1
————dist/static/js/app.92ea709b.js

File diff suppressed because one or more lines are too long

1
————dist/static/js/chunk-0552f3a2.533f0e59.js

File diff suppressed because one or more lines are too long

1
————dist/static/js/chunk-15ac51ae.8df86837.js

@ -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"}}]);

1
————dist/static/js/chunk-2312d406.f43a9621.js

File diff suppressed because one or more lines are too long

1
————dist/static/js/chunk-26198766.850d6c09.js

File diff suppressed because one or more lines are too long

1
————dist/static/js/chunk-29a1f3a9.2245688f.js

File diff suppressed because one or more lines are too long

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save