You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1490 lines
48 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="container">
<!-- 查询配置 -->
<div style="padding: 0px 20px 20px 20px;background: #EFF2F9;">
<!-- <div @click='logout'>退出</div> -->
<el-row :gutter="20" class='elrows'>
<el-col :span="24">
<div ref="lxTable" stripe class="table-tree">
<div style="display:flex;justify-content: space-between;padding: 15px;background-color: #fff;padding-bottom:5px;" class="form-sub-title">
<el-link icon='el-icon-user-solid' type="primary" style="font-size:18px">科室任务统计</el-link>
<div>
<el-date-picker
@change="changeDepYear"
v-model="depYear"
type="year"
format="yyyy"
value-format="yyyy"
placeholder="选择年">
</el-date-picker>
</div>
</div>
<div style="height:450px;background-color: #fff;padding: 15px;padding-top:0">
<div style="height:450px">
<!-- :showSummary='true' :summaryMethod="summaryDep" -->
<xy-table :list="depList" :showIndex="false" stripe :isPage="false" :height="'423px'" :table-item="depTable">
<template v-slot:btns>
<div></div>
</template>
</xy-table>
</div>
</div>
</div>
</el-col>
<el-col :span="24">
<div ref="lxTable" stripe class="table-tree">
<div style="padding: 15px;background-color: #fff;padding-bottom:5px;" class="form-sub-title">
<el-link icon='el-icon-user-solid' type="primary" style="font-size:18px">待办事项</el-link>
</div>
<div style="height:420px;background-color: #fff;padding: 15px;padding-top:0">
<el-tabs v-model="activeName">
<el-tab-pane name="first">
<span slot="label">
我的任务
<el-badge :value="myselfTotal" class="item"></el-badge>
</span>
<div style="height:350px">
<xy-table :list="myselfList" stripe :isPage="false" :height="'350px'" :table-item="myselfTable">
<template v-slot:btns>
<el-table-column align='center' label="操作" width="100" header-align="center">
<template slot-scope="scope">
<!-- <div v-for="item in unitTypeList">
<Button v-if="scope.row.unit_type==item.id" type="primary" size="small"
style="margin-right:5px;margin-bottom:5px;"
@click="openMyMission(item.value,scope.row)">{{item.remark}}</Button>
</div> -->
<div>
<Button style='margin-right:5px;margin-bottom:5px;' type="primary" size="small"
@click="checkUnits(scope.row.id,'show',5)">查看任务</Button>
</div>
</template>
</el-table-column>
</template>
</xy-table>
</div>
</el-tab-pane>
</el-tabs>
</div>
</div>
</el-col>
<el-col :span="12">
<div ref="lxTable" class="table-tree">
<div
style="display:flex;justify-content: space-between;;padding: 15px;padding-left: 20px;background-color: #fff;"
class="form-sub-title">
<el-link type="primary" icon="el-icon-s-data" style="font-size:18px"
href="#/lawsfile/article">综合数据</el-link>
<el-radio-group v-model="showData" size="small">
<el-radio-button label="month">月度</el-radio-button>
<el-radio-button label="dep">科室</el-radio-button>
<el-radio-button label="mission">任务类型</el-radio-button>
</el-radio-group>
</div>
<div class="overall">
<el-descriptions title="" :column="3" class="margin-top"
:labelStyle="{'color':'#2c2d2f','font-size':'16px'}"
:contentStyle="{'color':'#333333','font-size':'16px'}">
<el-descriptions-item label="" span='1'>
<template slot='label'>
<div style='display: flex;'>
<p>
年度计划任务
</p>
</div>
</template>
<div>{{overallObj.mission_plan.total}}项</div>
</el-descriptions-item>
<el-descriptions-item label="" span='1'>
<template slot='label'>
<img src="icon1" alt="">
已完成/已开展
</template>
<div>
<p>{{overallObj.mission_plan.end}}/{{overallObj.mission_plan.ing}}项</p>
</div>
</el-descriptions-item>
<el-descriptions-item label="" span='1'>
<template slot='label'>
未按时完成
</template>
<div>
<p>{{overallObj.mission_plan.no_end}}项</p>
</div>
</el-descriptions-item>
<el-descriptions-item label="" span='1'>
<template slot='label'>
<img src="icon1" alt="">
专项专题任务
</template>
<div>
<p>{{overallObj.mission.total}}项</p>
</div>
</el-descriptions-item>
<el-descriptions-item label="" span='1'>
<template slot='label'>
<img src="icon1" alt="">
当前开展
</template>
<div>
<p>{{overallObj.mission.ing}}项</p>
</div>
</el-descriptions-item>
<el-descriptions-item label="" span='1'>
<template slot='label'>
<img src="icon1" alt="">
未按时完成
</template>
<div>
<p>{{overallObj.mission.no_end}}项</p>
</div>
</el-descriptions-item>
</el-descriptions>
<myecharts v-if="showData==='month'" :width="'100%'" :height="'272px'" :data="overall_month_data"></myecharts>
<myecharts v-if="showData==='dep'" :width="'100%'" :height="'272px'" :data="overall_dep_data">
</myecharts>
<myecharts v-if="showData==='mission'" :width="'100%'" :height="'272px'" :data="overall_type_data">
</myecharts>
</div>
</div>
</el-col>
<el-col :span="12">
<div ref="lxTable" class="table-tree">
<div style="padding: 15px;background-color: #fff;" class="form-sub-title">
<div style="display: flex;justify-content: space-between;">
<el-link icon="el-icon-s-marketing" type="primary" style="font-size:18px">检查整改</el-link>
<el-radio-group v-model="showAskData" size="small">
<el-radio-button :label="false">责任科室</el-radio-button>
<el-radio-button :label="true">问题类型</el-radio-button>
</el-radio-group>
</div>
<div>
</div>
</div>
<div style="display: flex;">
<myecharts v-if="!showAskData" :width="'60%'" :height="'345px'" :data="inspection_dep_data"></myecharts>
<myecharts v-if="showAskData" :width="'60%'" :height="'345px'" :data="inspection_ask_data"></myecharts>
<myecharts :width="'40%'" :height="'345px'" :data="inspection_all_data"></myecharts>
</div>
</div>
</el-col>
<el-col :span="24">
<div ref="lxTable" class="table-tree" style="padding: 15px;background-color: #fff;">
<div style="padding-bottom: 15px;background-color: #fff;display: flex;align-items: center;"
class="form-sub-title">
<el-link icon="el-icon-s-opportunity" type="primary" style="font-size:18px;margin-right:5px"
href="#">动态信息</el-link>
</div>
<div>
<div>
<!-- <el-carousel arrow="nerver" trigger="click" height="310px" :autoplay='isautoplay' :interval="5000" direction="vertical">
<el-carousel-item v-for="item in activeAllList"> -->
<xy-table :list="activeAllList" stripe ref="activeTable" :isPage="false" :height="'310px'" id="boxed"
:table-item="activeTable">
<template v-slot:btns>
<el-table-column align='center' label="操作" width="80" header-align="center">
<template slot-scope="scope">
<Button v-if="scope.row.is_id=='mission'" type="primary" size="small" @click="checkUnits(scope.row.mission_id,'show')">查看</Button>
<Button v-else-if="scope.row.is_id=='plan'" type="primary" size="small" @click="showPlan(scope.row.mission_id,'show')">查看</Button>
<Button v-else type="primary" size="small" @click="showArticle(scope.row.id)">查看</Button>
</template>
</el-table-column>
</template>
</xy-table>
<!-- </el-carousel-item>
</el-carousel> -->
</div>
</div>
</div>
</el-col>
</el-row>
<showPlan ref='showPlan'></showPlan>
<checkUnit ref='checkUnit' @refresh='getMyselfList'></checkUnit>
<addPatrol ref='addPatrol' @refresh='getMyselfList'></addPatrol>
<answerQuestion ref='answerQuestion' @refresh='getMyselfList'></answerQuestion>
<!-- <showPatrol ref='showPatrol' @refresh='getMyselfList'></showPatrol> -->
<showArticle ref='showArticle' @refresh="refreshIsshow"></showArticle>
</div>
</div>
</template>
<script>
import {
getparameteritem
} from "@/api/system/dictionary.js";
import {
getInfo
} from "@/api/user.js";
import {
listunit,
updatemission
} from '@/api/task/unit.js'
import {
updateplan
} from '@/api/task/plan.js'
import {
listarticle,
get
} from "@/api/lawsfile/article.js";
import {
listnotice,
listoverall,
chartinspection,
chartDepartment
} from "@/api/chart.js";
import {
mapGetters
} from 'vuex'
import myecharts from '@/components/myecharts';
import viewInfo from '../lawsfile/index/components/viewInfo.vue'
import checkUnit from '@/views/task/list/components/checkUnit.vue'
import addPatrol from '@/views/task/list/components/addPatrol.vue'
import answerQuestion from '@/views/task/list/components/answerQuestion.vue'
import showPlan from '@/views/task/list/components/showPlan.vue'
import showArticle from '@/views/dashboard/components/showArticle.vue'
import state from '@/store/modules/user.js'
export default {
name: 'Dashboard',
computed: {
...mapGetters([
'name',
'roles'
])
},
components: {
viewInfo,
myecharts,
checkUnit,
addPatrol,
answerQuestion,
showArticle,
showPlan
},
data() {
return {
login_id: '',
department_id: '',
isautoplay:true,
activeCount:1,
activeName: 'first',
activeAllList:[],
activeList: [],
articleList:[],
lawList:[],
filesList:[],
planStatus:["未完成","发起了一项","开展了一项","完成了一项"],
missionStatus:['',"开展了一项","未完成","完成了一项任务","发起了一项"],
activeAllObj:{
inspection_id:"检查",
mission_plan_id:"年度计划任务",
mission_study_feedback_id:"学习",
mission_ask_id:"答题",
mission_material_feedback_id:'资料收集',
mission_train_feedback_id:'培训反馈',
id:"专项专题任务"
},
activeTable: [{
prop: "created_at",
label: "日期",
width: 170,
align: "center",
formatter: (cell, data, value, index) => {
return value ? value.substring(0, 16) : ''
}
},
{
prop: "active_type",
label: "类型",
width: 120,
align: "center",
},
{
prop: "department.name",
label: "部门",
width: 120,
align: "center",
},
{
prop: "admin.name",
label: "操作人",
width: 120,
align: "center",
},
{
prop: "title",
label: "详情",
align: "left"
}
],
// 我的任务
unitTypeList: [],
myselfList: [],
myselfTotal: '',
stateObj:{},
auditStatusList: [{
id:4,
value:'待开展',
type:'info'
},{
id:1,
value:'未完成',
type:''
},{
id:5,
value:'已归档',
type:'success'
},{
id:3,
value:'待归档',
type:'danger'
}],
myselfTable: [{
label: "任务名称",
prop: 'name',
width: 200,
// fixed:'left',
align: 'left',
}, {
label: "任务内容及要求",
prop: 'content',
minWidth: 200,
align: 'left',
}, {
label: "开始日期",
prop: 'start_date',
width: 120,
align: 'center'
}, {
label: "要求完成日期",
prop: 'end_date',
width: 120,
align: 'center'
}, {
label: "状态",
prop: 'audit_status',
width: 120,
align: 'center',
customFn: (row) => {
return ( <div> {
this.auditStatusList.map(item => {
if (item.id == row.audit_status) {
return ( <el-tag type = {
item.type
}> {
item.value
} </el-tag>)
}
})
} </div>)
}
}, {
label: "责任人(科室)",
prop: 'main_admin.name',
width: 120,
align: 'center',
}],
depYear:'',
depList:[],
auditTable:{
1:'未完成',
3:'待归档',
4:'待开展',
5:'已归档'
},
depTable:[{
prop:'name',
label:'月份/科室',
},{
prop:'01',
label:'一月',
customFn:row=>{
return(<div>
{
parseInt(row['01']['data'])>0?
<el-popover
placement={'top'}
width={'300'}
trigger={'click'}>
{
row['01']['mission'].map((item,index)=>{
return(<div
style={{'margin':'5px','cursor': 'pointer'}}
on={
{
['click']: (e) => {
this.checkUnits(item.id,'show')
}
}
}
>{index+1}、({this.auditTable[item.audit_status]})-{item.name}</div>)
})
}
<span slot={"reference"} style={{'color':'blue','cursor': 'pointer'}}>{row['01']['data']}</span>
</el-popover>
:<span>{row['01']['data']}</span>
}
</div>)
}
},{
prop:'02',
label:'二月',
customFn:row=>{
return(<div>
{
parseInt(row['02']['data'])>0?
<el-popover
placement={'top'}
width={'300'}
trigger={'click'}>
{
row['02']['mission'].map((item,index)=>{
return(<div
style={{'margin':'5px','cursor': 'pointer'}}
on={
{
['click']: (e) => {
this.checkUnits(item.id,'show')
}
}
}
>{index+1}、({this.auditTable[item.audit_status]})-{item.name}</div>)
})
}
<span slot={"reference"} style={{'color':'blue','cursor': 'pointer'}}>{row['02']['data']}</span>
</el-popover>
:<span>{row['02']['data']}</span>
}
</div>)
}
},{
prop:'03',
label:'三月',
customFn:row=>{
return(<div>
{
parseInt(row['03']['data'])>0?
<el-popover
placement={'top'}
width={'300'}
trigger={'click'}>
{
row['03']['mission'].map((item,index)=>{
return(<div
style={{'margin':'5px','cursor': 'pointer'}}
on={
{
['click']: (e) => {
this.checkUnits(item.id,'show')
}
}
}
>{index+1}、({this.auditTable[item.audit_status]})-{item.name}</div>)
})
}
<span slot={"reference"} style={{'color':'blue','cursor': 'pointer'}}>{row['03']['data']}</span>
</el-popover>
:<span>{row['03']['data']}</span>
}
</div>)
}
},{
prop:'04',
label:'四月',
customFn:row=>{
return(<div>
{
parseInt(row['04']['data'])>0?
<el-popover
placement={'top'}
width={'300'}
trigger={'click'}>
{
row['04']['mission'].map((item,index)=>{
return(<div
style={{'margin':'5px','cursor': 'pointer'}}
on={
{
['click']: (e) => {
this.checkUnits(item.id,'show')
}
}
}
>{index+1}、({this.auditTable[item.audit_status]})-{item.name}</div>)
})
}
<span slot={"reference"} style={{'color':'blue','cursor': 'pointer'}}>{row['04']['data']}</span>
</el-popover>
:<span>{row['04']['data']}</span>
}
</div>)
}
},{
prop:'05',
label:'五月',
customFn:row=>{
return(<div>
{
parseInt(row['05']['data'])>0?
<el-popover
placement={'top'}
width={'300'}
trigger={'click'}>
{
row['05']['mission'].map((item,index)=>{
return(<div
style={{'margin':'5px','cursor': 'pointer'}}
on={
{
['click']: (e) => {
this.checkUnits(item.id,'show')
}
}
}
>{index+1}、({this.auditTable[item.audit_status]})-{item.name}</div>)
})
}
<span slot={"reference"} style={{'color':'blue','cursor': 'pointer'}}>{row['05']['data']}</span>
</el-popover>
:<span>{row['05']['data']}</span>
}
</div>)
}
},{
prop:'06',
label:'六月',
customFn:row=>{
return(<div>
{
parseInt(row['06']['data'])>0?
<el-popover
placement={'top'}
width={'300'}
trigger={'click'}>
{
row['06']['mission'].map((item,index)=>{
return(<div
style={{'margin':'5px','cursor': 'pointer'}}
on={
{
['click']: (e) => {
this.checkUnits(item.id,'show')
}
}
}
>{index+1}、({this.auditTable[item.audit_status]})-{item.name}</div>)
})
}
<span slot={"reference"} style={{'color':'blue','cursor': 'pointer'}}>{row['06']['data']}</span>
</el-popover>
:<span>{row['06']['data']}</span>
}
</div>)
}
},{
prop:'07',
label:'七月',
customFn:row=>{
return(<div>
{
parseInt(row['07']['data'])>0?
<el-popover
placement={'top'}
width={'300'}
trigger={'click'}>
{
row['07']['mission'].map((item,index)=>{
return(<div
style={{'margin':'5px','cursor': 'pointer'}}
on={
{
['click']: (e) => {
this.checkUnits(item.id,'show')
}
}
}
>{index+1}、({this.auditTable[item.audit_status]})-{item.name}</div>)
})
}
<span slot={"reference"} style={{'color':'blue','cursor': 'pointer'}}>{row['07']['data']}</span>
</el-popover>
:<span>{row['07']['data']}</span>
}
</div>)
}
},{
prop:'08',
label:'八月',
customFn:row=>{
return(<div>
{
parseInt(row['08']['data'])>0?
<el-popover
placement={'top'}
width={'300'}
trigger={'click'}>
{
row['08']['mission'].map((item,index)=>{
return(<div
style={{'margin':'5px','cursor': 'pointer'}}
on={
{
['click']: (e) => {
this.checkUnits(item.id,'show')
}
}
}
>{index+1}、({this.auditTable[item.audit_status]})-{item.name}</div>)
})
}
<span slot={"reference"} style={{'color':'blue','cursor': 'pointer'}}>{row['08']['data']}</span>
</el-popover>
:<span>{row['08']['data']}</span>
}
</div>)
}
},{
prop:'09',
label:'九月',
customFn:row=>{
return(<div>
{
parseInt(row['09']['data'])>0?
<el-popover
placement={'top'}
width={'300'}
trigger={'click'}>
{
row['09']['mission'].map((item,index)=>{
return(<div
style={{'margin':'5px','cursor': 'pointer'}}
on={
{
['click']: (e) => {
this.checkUnits(item.id,'show')
}
}
}
>{index+1}、({this.auditTable[item.audit_status]})-{item.name}</div>)
})
}
<span slot={"reference"} style={{'color':'blue','cursor': 'pointer'}}>{row['09']['data']}</span>
</el-popover>
:<span>{row['09']['data']}</span>
}
</div>)
}
},{
prop:'10',
label:'十月',
customFn:row=>{
return(<div>
{
parseInt(row['10']['data'])>0?
<el-popover
placement={'top'}
width={'300'}
trigger={'click'}>
{
row['10']['mission'].map((item,index)=>{
return(<div
style={{'margin':'5px','cursor': 'pointer'}}
on={
{
['click']: (e) => {
this.checkUnits(item.id,'show')
}
}
}
>{index+1}、({this.auditTable[item.audit_status]})-{item.name}</div>)
})
}
<span slot={"reference"} style={{'color':'blue','cursor': 'pointer'}}>{row['10']['data']}</span>
</el-popover>
:<span>{row['10']['data']}</span>
}
</div>)
}
},{
prop:'11',
label:'十一月',
customFn:row=>{
return(<div>
{
parseInt(row['11']['data'])>0?
<el-popover
placement={'top'}
width={'300'}
trigger={'click'}>
{
row['11']['mission'].map((item,index)=>{
return(<div
style={{'margin':'5px','cursor': 'pointer'}}
on={
{
['click']: (e) => {
this.checkUnits(item.id,'show')
}
}
}
>{index+1}、({this.auditTable[item.audit_status]})-{item.name}
</div>)
})
}
<span slot={"reference"} style={{'color':'blue','cursor': 'pointer'}}>{row['11']['data']}</span>
</el-popover>
:<span>{row['11']['data']}</span>
}
</div>)
}
},{
prop:'12',
label:'十二月',
customFn:row=>{
return(<div>
{
parseInt(row['12']['data'])>0?
<el-popover
placement={'top'}
width={'300'}
trigger={'click'}>
{
row['12']['mission'].map((item,index)=>{
return(<div
style={{'margin':'5px','cursor': 'pointer'}}
on={
{
['click']: (e) => {
this.checkUnits(item.id,'show')
}
}
}
>{index+1}、({this.auditTable[item.audit_status]})-{item.name}</div>)
})
}
<span slot={"reference"} style={{'color':'blue','cursor': 'pointer'}}>{row['12']['data']}</span>
</el-popover>
:<span>{row['12']['data']}</span>
}
</div>)
}
}],
icon1: require('@/assets/index/icon1.png'),
icon2: require('@/assets/index/icon2.png'),
icon3: require('@/assets/index/icon3.png'),
icon4: require('@/assets/index/icon4.png'),
icon5: require('@/assets/index/icon5.png'),
icon6: require('@/assets/index/icon6.png'),
icon7: require('@/assets/index/icon7.png'),
icon8: require('@/assets/index/icon8.png'),
icon9: require('@/assets/index/icon9.png'),
showData:'month',
monthArr:['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'],
overallObj:{
mission:{
total:0,
ing:0,
no_end:0
},
mission_plan:{
total:0,
ing:0,
no_end:0,
end:0
}
},
overall_month_data: {},
overall_dep_data: {},
overall_type_data: {},
showAskData: false,
inspection_dep_data: {},
inspection_ask_data: {},
inspection_all_data: {},
}
},
created() {
// this.initLoad();
// this.getLeads()
this.depYear = (new Date()).getFullYear() + ''
console.log(this.depYear)
this.stateObj = state.state
console.log("this.stateObj",this.stateObj)
// this.updateMissionPlan()
this.getUserId()
this.getUnitTypeList()
// this.getQuestion()
// this.getActiveList()
this.loadChartDepartment()
this.getArticleList()
this.getMyselfList()
this.getOverAllData()
this.getInspectionAll()
// this.load();
},
methods: {
async logout(){
await this.$store.dispatch("user/logout")
this.$router.push(`/login?redirect=${this.$route.fullPath}`)
},
async getLeads(){
await this.$store.dispatch("user/getLeads")
},
async updateMissionPlan(){
await updatemission()
// await updateplan()
},
async getUserId() {
let res = await getInfo()
this.login_id = res.id
this.department_id = res.department_id
},
async getUnitTypeList() {
const res = await getparameteritem('unitTypeList')
this.unitTypeList = res.detail
},
// 科室任务
changeDepYear(e){
if(e){
this.depYear = e
this.loadChartDepartment()
}
},
summaryDep(val){
const { columns, data } = val;
const sums = [];
columns.forEach((item, index) => {
if (index === 0) {
sums[index] = '总计';
return;
}
console.log(data,item,columns)
const values = data.map(item => Number(item[columns.property]['data'].split('/')[1]));
if (!values.every(value => isNaN(value))) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] += ' 元';
} else {
sums[index] = 'N/A';
}
});
return sums
},
async loadChartDepartment(){
await chartDepartment({
year:this.depYear
}).then(res=>{
// 遍历数组并处理每个对象
let arr = res.department.map(obj => {
let newData = obj.data;
// let sumTotal = 0
// let sumNodo = 0
for(let key in newData) {
// 提取月份数字作为新键名
let monthNumber = key.split("-")[1];
let total = newData[key]['type_1_total']+newData[key]['type_4_total']
let noDo = newData[key]['audit_status_1_total']
let mission = newData[key]['mission']
// sumTotal+=total
// sumNodo+=noDo
// obj['sumTotal'] = sumTotal
// obj['sumNodo'] = sumNodo
obj[monthNumber] = {
'data':total>0?total + '/' + noDo:'',
'mission':mission
}
}
return obj;
});
this.depList = arr
}).catch(error => {
});
},
// 动态信息
async getActiveList() {
// let arr = ["完成了一项任务", "提交了一条检查", "发起了一项任务", "上传了一条附件"]
// for (var k of res.data) {
// this.activeList.push({
// created_at: '2023-04-24 12:00:00',
// admin: k.admin,
// department:k.department,
// active_type: k.unit_type_detail ? k.unit_type_detail.value : '',
// title: `${k.department?k.department.name:''}${k.admin.name}${arr[Math.floor(Math.random() * arr.length)]}`
// })
// }
// console.log("res",res)
},
async getArticleList(){
let allArr = []
await listarticle(1, '', '', 20, '').then(res => {
let arr = []
for(var k of res.data){
arr.push({active_type:k.menu?k.menu.name:'',...k})
}
this.articleList = arr;
allArr.push(...arr)
}).catch(error => {
});
// await listarticle(1, '', '', 6, 1).then(res => {
// let arr = []
// for(var k of res.data){
// arr.push({active_type:k.menu?k.menu.name:'',...k})
// }
// this.lawList = arr;
// allArr.push(...arr)
// }).catch(error => {
// });
// await listarticle(1, '', '', 6, 3).then(res => {
// let arr1 = []
// for(var k of res.data){
// arr1.push({active_type:k.menu?k.menu.name:'',...k})
// }
// this.filesList = arr1;
// allArr.push(...arr1)
// }).catch(error => {
// });
const res = await listnotice()
let active_arr = []
for(var k of res){
for(var a in this.activeAllObj){
let status_name = '提交了一条'
let toid = k.mission_id?k.mission_id:''
let is_mission = 'mission'
if(Object.prototype.hasOwnProperty.call(k,a)){
if(a=="mission_plan_id"){
status_name = this.planStatus[k.status]
toid = k.mission_plan_id
is_mission = 'plan'
}
if(a=="id"){
status_name = this.missionStatus[k.audit_status]
toid = k.id
}
this.activeList.push({
created_at: k.created_at,
admin: {
name:k.admin
},
department:{
name:k.department
},
is_id:is_mission,
mission_id:toid,
active_type:this.activeAllObj[a],
title: `${k.department?k.department:''}${k.admin}${status_name}${this.activeAllObj[a]}`
})
}
}
}
allArr.push(...this.activeList)
let arrs = allArr.sort(this.dateData("created_at",false))
// this.activeAllList = this.division(arrs,6)
if(arrs.length>30){
arrs.splice(30,arrs.length-1)
}
this.activeAllList = arrs
},
dateData(property, bol) {
return function(a, b) {
var value1 = a[property];
var value2 = b[property];
if (bol) {
// 升序
return Date.parse(value1) - Date.parse(value2);
} else {
// 降序
return Date.parse(value2) - Date.parse(value1)
}
}
},
division(arr, N) {
var result = [];
for (var i = 0; i < arr.length; i += N) {
result.push(arr.slice(i, i + N));
}
return result
},
showPlan(id) {
this.$refs.showPlan.id = id
this.isautoplay = false
this.$refs.showPlan.isShow = true
},
showArticle(id){
this.$refs.showArticle.id = id
this.isautoplay = false
this.$refs.showArticle.isShow = true
},
refreshIsshow(e){
if(!e){
this.isautoplay = true
}
},
// 我的任务
async getMyselfList() {
const res = await listunit({
page: 1,
page_size: 99,
myself: 1,
audit_status: '',
pid:''
})
// 我的任务中 选择accept_department_ids部门的只有选择到的科室负责人能看到 is_manger = true
// 且具体执行人为空
let spliceIndex = []
let _arr = []
res.data.map((r,index)=>{
let doAdmins = r.do_admin_ids ? r.do_admin_ids : []
if(this.path_type == 5 && r.accept_department_ids.length > 0){
let isDepartment = r.accept_department_ids.indexOf(this.stateObj.department_id)!=-1 ? true : false
let isDomains = doAdmins.indexOf(this.stateObj.login_id)!=-1 ? true : false
if(doAdmins.length==0){
if(!(isDepartment && this.stateObj.is_manger)){
spliceIndex.push(index)
}
}else{
if(!((isDepartment && this.stateObj.is_manger)||isDomains)){
spliceIndex.push(index)
}
}
}
})
const newArr = res.data.filter((_, index) => !spliceIndex.includes(index));
this.myselfList = newArr
this.myselfTotal = res.total
// this.activeCount = parseInt(this.activeList.length/6)==1?1:parseInt(this.activeList.length/6)+1
// this.autoScroll()
},
openMyMission(remark, e) {
switch (remark) {
case '检查':
this.addPatrol(e)
break;
case '学习':
this.openStudy(e)
break;
case '答题':
this.openAnswers(e)
break;
case '培训':
this.openTrain(e)
break;
case '资料收集':
this.openUploads(e)
break;
}
},
checkUnits(id, type,url_type) {
if(url_type){
this.$refs.checkUnit.url_type = url_type
}
this.$refs.checkUnit.id = id
this.$refs.checkUnit.type = type
this.isautoplay = false
this.$refs.checkUnit.isShow = true
},
addPatrol(scope) {
this.$refs['addPatrol'].login_id = this.login_id
this.$refs['addPatrol'].department_id = this.department_id
this.$refs['addPatrol'].mission_id = scope.id
this.$refs['addPatrol'].isShow = true
this.$refs['addPatrol'].type = 'add'
},
openAnswers(scope) {
this.$refs['answerQuestion'].mission_id = scope.id
this.$refs['answerQuestion'].askList = scope.ask
this.$refs['answerQuestion'].isShow = true
},
openTrain(e) {
this.$refs.checkUnit.id = e.id
this.$refs.checkUnit.type = 'train'
this.$refs.checkUnit.isShow = true
},
openUploads(e) {
this.$refs.checkUnit.id = e.id
this.$refs.checkUnit.type = 'uploads'
this.$refs.checkUnit.isShow = true
},
openStudy(e) {
this.$refs.checkUnit.id = e.id
this.$refs.checkUnit.type = 'study'
this.$refs.checkUnit.isShow = true
},
// 综合数据
async getOverAllData(){
let that = this
const res = await listoverall()
this.overallObj = res.list
// 月份
let all_mon = []
let end_mon=[]
let no_mon = []
let x_mon = []
for(var m in res.month){
let monIndex = parseInt(m.split("-")[1])-1
x_mon.push(this.monthArr[monIndex])
all_mon.push({
value:res.month[m].mission.total+res.month[m].mission_plan.total,
plan:res.month[m].mission_plan.total,
unit:res.month[m].mission.total
})
end_mon.push(res.month[m].mission.end+res.month[m].mission_plan.end)
no_mon.push(res.month[m].mission.no_end+res.month[m].mission_plan.no_end)
}
this.overall_month_data = {
xShow: true,
yShow: true,
rotate: 0,
formatter:function(params){
return that.chartFomatter(params)
},
x: x_mon,
list: [{
name: "总数",
data: all_mon,
type: 'bar',
barGap:'0%',
}, {
name: "已完成",
data: end_mon,
type: 'bar',
barGap:'0%',
}, {
name: "未完成",
data: no_mon,
type: 'bar',
barGap:'0%',
}]
}
// 科室
let all_dep = []
let end_dep=[]
let no_dep = []
let x_dep = []
for(var d of res.department){
x_dep.push(d.name)
all_dep.push({
value:d.mission.total+d.mission_plan.total,
plan:d.mission_plan.total,
unit:d.mission.total
})
end_dep.push(d.mission.end+d.mission_plan.end)
no_dep.push(d.mission.no_end+d.mission_plan.no_end)
}
this.overall_dep_data = {
xShow: true,
yShow: true,
rotate: 50,
formatter:function(params){
return that.chartFomatter(params)
},
x: x_dep,
list: [{
name: "总数",
data: all_dep,
type: 'bar',
barGap:'0%',
}, {
name: "已完成",
data: end_dep,
type: 'bar',
barGap:'0%',
}, {
name: "未完成",
data: no_dep,
type: 'bar',
barGap:'0%',
}]
}
// 类型
let all_type = []
for(var t of res.type){
all_type.push({
name:t.value,
value:t.mission.total
})
}
this.overall_type_data = {
trigger: 'item',
xShow: false,
yShow: false,
list: [{
name: '任务类型',
type: 'pie',
radius: '65%',
data: all_type,
}]
}
},
// 检查整改
async getInspectionAll(){
const res = await chartinspection()
// 完成情况
this.inspection_all_data = {
trigger: 'item',
xShow: false,
yShow: false,
list: [{
name: '完成情况',
type: 'pie',
radius: '80%',
// center:['20%','20%'],
data: [{
value: res.list.end,
name: '已完成'
},
{
value: res.list.no_end,
name: '未完成'
}
],
label: {
show: false,
position: 'center'
},
}
]
}
// 责任科室
let x_dep = []
let all_dep = []
let end_dep = []
let no_dep = []
for(var d of res.department){
if(d.name!="处长室"){
x_dep.push(d.name)
all_dep.push(d.total)
end_dep.push(d.end)
no_dep.push(d.no_end)
}
}
this.inspection_dep_data = {
xShow: true,
yShow: true,
rotate: 30,
x: x_dep,
list: [{
name: "合计",
data: all_dep,
type: 'bar',
unit: "件",
barGap:'0%',
}, {
name: "已完成",
data: end_dep,
type: 'bar',
unit: "件",
barGap:'0%',
}, {
name: "未完成",
data: no_dep,
type: 'bar',
unit: "件",
barGap:'0%',
}]
}
// 问题类型
let ask_arr = []
for(var ask of res.type){
ask_arr.push({
name:ask.value,
value:ask.total
})
}
this.inspection_ask_data = {
trigger: 'item',
xShow: false,
yShow: false,
list: [{
name: '问题类型',
type: 'pie',
radius: '65%',
data: ask_arr,
}]
}
},
chartFomatter(params){
let content = ''
params.forEach((item) => {
// 提示框的内容样式及数据
content += `<div style="color:#fff;line-height: 25px;">
<span style="display: inline-block; margin-right: 10px; border-radius: 50%; width: 8px; height: 8px;background-color: ${item.color};"></span>
<span>${item.seriesName}:</span>
<span>${item.value}项</span></div>
`;
if(item.seriesName=='总数'){
content += `<div>
<span style="display: inline-block; margin-right: 10px; border-radius: 50%; width: 8px; height: 8px;background-color: ${item.color};"></span>
<span>年度计划任务:</span>
<span>${item.data.plan}项</span></div>
<div>
<span style="display: inline-block; margin-right: 10px; border-radius: 50%; width: 8px; height: 8px;background-color: ${item.color};"></span>
<span>专项专题任务:</span>
<span>${item.data.unit}</span></div>`
}
});
return content
}
}
}
</script>
<style lang="scss" scoped>
::v-deep .el-table .cell.el-tooltip {
white-space: normal !important;
width: 100% !important;
}
.labelClass {
img {
vertical-align: sub;
margin-right: 5px;
}
>span {
color: #5b5d61;
font-weight: normal;
}
}
.contentClass {
span {
color: #9c9ea4;
font-size: 16px;
margin-left: 5px;
}
}
.progress-card {
display: flex;
&-item {
text-align: center;
flex: 1;
&__label {
font-size: 14px;
}
&__num {
font-size: 20px;
font-weight: 600;
padding: 6px 0;
}
}
}
::v-deep .elrows {
.el-col {
padding: 10px !important
}
}
.index_top {
display: flex;
justify-content: space-between;
&>div {
width: 49.5%
}
}
.dashboard {
&-container {
margin: 30px;
}
&-text {
font-size: 30px;
line-height: 46px;
}
}
.dialogConcent {
overflow-y: auto;
}
.overall {
background-color: #fff;
height: 345px;
padding: 15px;
padding-left: 20px;
padding-top: 0;
font-size: 18px;
>div {
// display: flex;
// justify-content: space-between;
>p {
max-width: 50%;
width: 50%;
margin-bottom: 60px;
}
}
}
</style>