审核记录

This commit is contained in:
陈裕财
2025-04-08 22:55:22 +08:00
parent 14cfb8d2e1
commit b29b0e9637
3 changed files with 511 additions and 18 deletions

View File

@@ -11,10 +11,12 @@
<el-anchor-link title="基本信息" @click.prevent="scrollToSection('#baseInfo')"/>
<el-anchor-link title="负责人、部门" @click.prevent="scrollToSection('#kselfUserid')"/>
<el-anchor-link title="考核周期" @click.prevent="scrollToSection('#calcType')"/>
<el-anchor-link title="考核评" @click.prevent="scrollToSection('#score')"/>
<el-anchor-link title="考核评" @click.prevent="scrollToSection('#kselfScore')"/>
<el-anchor-link title="考核复评" @click.prevent="scrollToSection('#score')"/>
<el-anchor-link title="成果交付" @click.prevent="scrollToSection('#kresult')"/>
<el-anchor-link title="备注" @click.prevent="scrollToSection('#remark')"/>
<el-anchor-link title="关联任务" @click.prevent="scrollToSection('#taskBox')"/>
<el-anchor-link title="关联任务" @click.prevent="scrollToSection('#taskBox')" v-if="currOpType!='add'"/>
<el-anchor-link title="考核记录" @click.prevent="scrollToSection('#his')" v-if="!his && currOpType!='add'"/>
</el-anchor>
</el-affix>
</template>
@@ -113,30 +115,63 @@
</el-row>
</el-card>
<el-card style="margin-top:20px;" id="score">
<el-card style="margin-top:20px;" id="kselfScore">
<template #header>
考核评定
考核自评 <el-text type="info">&nbsp;&nbsp;得分{{editForm.score||0}}</el-text>&nbsp;&nbsp;<el-button type="primary" v-if="editForm.kadmStatus!='3' && editForm.kadmStatus!='1'" @click="editSomeFields(editForm,'kadmStatus','1')">提交复评</el-button>
</template>
<el-row :gutter="10">
<el-col :span="24">
<el-form-item label="目标值" prop="targetValue">
<el-space :wrap="false">
<el-text>{{targetValueCpd}}</el-text> <icon icon="fa-solid:angle-double-right"/> <el-tag type="success" v-if="calcStatus">已达成</el-tag> <el-tag v-if="!calcStatus" type="error">未达成</el-tag>
</el-space>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="当前值" prop="kpiValue">
<el-input style="width:100%;" v-model="editForm.kpiValue" placeholder="当前值" :maxlength="20" @change="editSomeFields(editForm,'kpiValue',$event)" :disabled="disField"/>
<el-input style="width:100%;" v-model="editForm.kpiValue" placeholder="当前值" :maxlength="20" @change="editSomeFields(editForm,'kpiValue',$event)" :disabled="editForm.kadmStatus=='3'"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="评得分" prop="score">
<el-input style="width:100%;" v-model="editForm.score" placeholder="得分0-100分" :maxlength="20" @change="editSomeFields(editForm,'score',$event)" :disabled="disField"/>
<el-form-item label="评得分" prop="score">
<el-input style="width:100%;" v-model="editForm.score" placeholder="得分0-100分" :maxlength="20" @change="editSomeFields(editForm,'score',$event)" :disabled="editForm.kadmStatus=='3'"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="评日期" prop="scoreDate">
<el-date-picker type="date" placeholder="选择日期" v-model="editForm.scoreDate" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD" @change="editSomeFields(editForm,'scoreDate',$event)" :disabled="disField"/>
<el-form-item label="评日期" prop="kselfTime">
<el-date-picker type="date" placeholder="选择日期" v-model="editForm.kselfTime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD" @change="editSomeFields(editForm,'kselfTime',$event)" :disabled="true"/>
</el-form-item>
</el-col>
</el-row>
</el-card>
<el-card style="margin-top:20px;" id="score">
<template #header>
考核复评
</template>
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="复评打分" prop="score">
<el-input style="width:100%;" v-model="editForm.score" placeholder="得分0-100分" :maxlength="20" @change="editSomeFields(editForm,'score',$event)" :disabled="disField"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="复评状态" prop="kadmStatus">
<mdp-select width="100%" itemCode="kadmStatus" v-model="editForm.kadmStatus" :maxlength="50" @change="editSomeFields(editForm,'kadmStatus',$event)" :disabled="!someOpen||disField"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="复评日期" prop="scoreDate">
<el-date-picker type="date" placeholder="选择日期" v-model="editForm.scoreDate" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD" @change="editSomeFields(editForm,'scoreDate',$event)" :disabled="true"/>
</el-form-item>
</el-col>
</el-row>
</el-card>
<el-card style="margin-top:20px;" id="kresult">
<template #header>
成果交付
@@ -155,11 +190,18 @@
</el-card>
<el-card style="margin-top:20px;" v-if="currOpType!='add'" id="taskBox">
<template #header>
关联计划任务 &nbsp;&nbsp;<el-button @click="$refs['phaseDialog'].open()" type="primary" plain icon="Link">选择任务关联kpi</el-button>
关联计划任务 &nbsp;&nbsp;<el-button @click="$refs['phaseDialog'].open()" type="primary" plain icon="Link" v-if="!his">选择任务关联kpi</el-button>
&nbsp;&nbsp;<el-checkbox v-model="taskBoxVisible" :true-label="true" :false-label="false">显示任务列表</el-checkbox>
</template>
<xm-task-box v-if="taskBoxVisible" :key="editForm.id" :kpi-id="editForm.id" :sel-project="editForm.projectId?{id:editForm.projectId}:null" ref="taskBox"/>
</el-card>
<el-card style="margin-top:20px;" v-if="currOpType!='add' && !his" id="his">
<template #header>
审核记录
</template>
<xm-kpi-his v-if="kpiHisVisible" :key="editForm.id" :kpi-id="editForm.id" :sel-project="editForm.projectId?{id:editForm.projectId}:null" ref="kpiHis"/>
</el-card>
</el-form>
<div class="footer">
<el-button @click="close" icon="close">关闭</el-button>
@@ -176,11 +218,10 @@ import * as XmKpiApi from '@/api/xm/pro/xmKpi';
import { editXmTaskSomeFields } from '@/api/xm/core/xmTask.js';
import { MdpFormMixin } from '@/components/mdp-ui/mixin/MdpFormMixin.js';
import { mapState } from 'pinia'
import { useUserStore } from '@/store/modules/user'
import XmUserSelect from '../../core/components/XmUserSelect.vue';
import { useUserStore } from '@/store/modules/user'
export default {
components: { XmUserSelect},
components: { },
name:'XmKpiForm',
mixins:[MdpFormMixin],
computed: {
@@ -199,6 +240,33 @@ export default {
}else{
return ""
}
},
targetValueCpd(){
if(!this.editForm.targetValue){
return "未设定目标值计算规则"
}
if(!this.editForm.kpiValue){
return this.editForm.targetValue
}else{
return this.editForm.targetValue.replace(/\$\{kpiValue\}/g, this.editForm.kpiValue);
}
},
calcStatus(){
if(!this.editForm.targetValue){
return false
}
if(!this.editForm.kpiValue){
return false
}else{
let rule= this.editForm.targetValue.replace(/\$\{kpiValue\}/g, this.editForm.kpiValue);
try{
let result=eval(rule)
return result;
}catch(e){
return false;
}
}
}
},
props:{
@@ -209,7 +277,14 @@ export default {
type: Boolean,
default: true,
},
parentKpi:null,
parentKpi:{//上级指标
type: Object,
default: ()=>null
},
his:{//是否为历史模式
type: Boolean,
default: false,
},
},
data() {
return {
@@ -242,6 +317,7 @@ export default {
editSomeFields: XmKpiApi.editSomeFieldsXmKpi
},
taskBoxVisible:false,
kpiHisVisible: false,
}
},
methods: {
@@ -333,6 +409,12 @@ export default {
}else{
this.taskBoxVisible=false
}
if(hash=='#his'){
this.kpiHisVisible=true
}else{
this.kpiHisVisible=false
}
const target = document.querySelector(hash)
target?.scrollIntoView({ behavior: 'smooth' })
}

View File

@@ -41,11 +41,10 @@
<el-space wrap>
<mdp-select itemCode="ktype" v-model="filters.ktype" placeholder="指标等级"/>
<mdp-select itemCode="calcType" v-model="filters.calcType" placeholder="考核周期"/>
<mdp-select itemCode="calcType" v-model="filters.calcType" placeholder="考核周期"/>
<mdp-select itemCode="kadmStatus" v-model="filters.kadmStatus" placeholder="复审状态"/>
<mdp-select itemCode="kstatus" v-model="filters.kstatus" placeholder="状态"/>
<mdp-select itemCode="kclass" v-model="filters.kclass" placeholder="职能分类"/>
<el-input style="width:120px;" v-model="filters.score" placeholder="得分" clearable title="支持>< >=<=!=*字符*$IS NULL$IN 1,2,3$between 1,5等操作符"/>
<el-input style="width:120px;" v-model="filters.weight" placeholder="权重" clearable title="支持>< >=<=!=*字符*$IS NULL$IN 1,2,3$between 1,5等操作符"/>
<el-input style="width:120px;" v-model="filters.kpiIndex" placeholder="指标名称" clearable title="支持>< >=<=!=*字符*$IS NULL$IN 1,2,3$between 1,5等操作符"/>
<el-button v-loading="load.list" :disabled="load.list==true" @click="searchTableDatas()" icon="search" type="primary" plain />
@@ -293,6 +292,10 @@ export default {
type: Boolean,
default: true,
},
queryScope:{//查询范围 all-所有kself-我的, kadm-我管理的,
type: String,
default:''
}
},
data() {
return {
@@ -396,6 +399,9 @@ export default {
//页面初始化需要配置的特殊逻辑写这里
initCurrData(){
this.project=this.projectInfo
if(this.queryScope=='kadm'){
this.filters['kadmStatus']='1'
}
this.searchTableDatas();
},
@@ -411,6 +417,12 @@ export default {
}
if(this.parent?.id){
params.parentId=this.parent.id
}
if(this.queryScope=='kself'){
params.kselfUserid=this.userInfo.userid
}else if(this.queryScope=='kadm'){
params.queryScope=this.queryScope
params.admUserid=this.userInfo.userid
}
return true;
},

View File

@@ -0,0 +1,399 @@
<template>
<mdp-lr-box :lspan="6" :expand="false">
<template #left>
<xm-kpi-tree :sel-project="projectInfo" @check-change="(data, checked, indeterminate)=>onTreeChange(data, checked, indeterminate)"/>
</template>
<div>
<ContentWrap>
<template #header>
<el-space wrap>
<mdp-hi-query :column-configs="columnConfigs" v-model="hiQueryParams" @change="onHiQueryParamsChange" title="高级查询定制任意复杂的查询条件"/>
<el-button icon="zoom-out" @click="searchReset()" title="重置查询条件并查询"/>
<el-button icon="download" @click="export2Excel()" title="导出查询结果到excel"/>
<mdp-table-configs :column-configs="columnConfigs" v-model="checkedColumns"/>
<el-button type="success" ref="kanbanBtn" plain @click="openKanban('kanbanDlg')" title="看板">板</el-button>
<span v-if="currOpType=='mng'">
<el-button :disabled="disBtn('delBtn') || !checkBtnQx('delBtn',menuDefId) || this.sels.length===0 || load.del==true" type="danger" v-loading="load.del" @click="batchDel" icon="delete" plain />
</span>
<span v-else-if="currOpType=='select' && this.multiple==true">
<el-button :disabled="disBtn('selectBtn') || this.sels.length===0" type="primary" @click="selectListConfirm" icon="check" plain />
</span>
<mdp-select-dept v-model="filters.deptid"/>
<xm-project-select v-if="!projectInfo?.id" v-model="filters.projectId" :collectId="xmCollect?.id" @change2="(p)=>project=p" @clear="()=>project=null"/>
<xm-user-select v-model="filters.kselfUserid" placeholder="负责人" :sel-project="project"/>
</el-space>
</template>
<el-space wrap>
<mdp-select itemCode="ktype" v-model="filters.ktype" placeholder="指标等级"/>
<mdp-select itemCode="calcType" v-model="filters.calcType" placeholder="考核周期"/>
<mdp-select itemCode="kadmStatus" v-model="filters.kadmStatus" placeholder="复审状态"/>
<mdp-select itemCode="kstatus" v-model="filters.kstatus" placeholder="状态"/>
<mdp-select itemCode="kclass" v-model="filters.kclass" placeholder="职能分类"/>
<el-input style="width:120px;" v-model="filters.kpiIndex" placeholder="指标名称" clearable title="支持>< >=<=!=*字符*$IS NULL$IN 1,2,3$between 1,5等操作符"/>
<el-button v-loading="load.list" :disabled="load.list==true" @click="searchTableDatas()" icon="search" type="primary" plain />
</el-space>
</ContentWrap>
<el-table ref="table" @expand-change="expandChange" :row-style="{heigth:'24px'}" :header-row-style="{height:ganttVisible?'86px':'24px'}" v-adaptive="{bottom:64,disabled:ganttVisible||adaptiveDisabled}" :data="treeData" row-key="id" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column type="selection" width="55" fixed="left" v-if="currOpType=='mng' || this.multiple==true"/>
<el-table-column show-overflow-tooltip sortable prop="kpiName" width="300" fixed="left" label="指标名称">
<template #default="scope">
<el-popover placement="right-start" :width="200" show-after="200">
<template #reference>
<el-link @click="currOpType=='mng'?showEdit(scope.row):showDetail(scope.row)" type="primary">
<el-text truncated style="width:200px;">
<icon :icon="calcIcon(scope.row.ktype)" />&nbsp;{{ scope.row.kpiName }}
</el-text>
</el-link>
</template>
<template #default>
<el-space wrap>
<el-button v-if="currOpType=='mng'" @click="showDetail(scope.row)" icon="edit" type="primary">查看明细</el-button>
</el-space>
</template>
</el-popover>
</template>
</el-table-column>
<!-- 可编辑字段格式
<el-table-column prop="objType" label="对象类型" min-width="120" col-type="String" v-if="showCol('objType')">
<template #default="scope">
<mdp-select itemCode="objType" show-style="tag" v-model="scope.row.objType" :maxlength="50" @change="editSomeFields(scope.row,'objType',$event)" :disabled="!someOpen||disField"/>
</template>
</el-table-column>
-->
<el-table-column prop="kpiIndex" label="排序号" min-width="120" col-type="String" v-if="showCol('kpiIndex')" sortable>
<template #default="scope">
<mdp-input show-style="tag" v-model="scope.row.kpiIndex" :maxlength="50" @change="editSomeFields(scope.row,'kpiIndex',$event)" :disabled="!someOpen||disField"/>
</template>
</el-table-column>
<el-table-column prop="kstatus" label="状态" min-width="120" col-type="String" itemCode="kstatus" sortable>
<template #default="scope">
<mdp-select itemCode="kstatus" show-style="tag" v-model="scope.row.kstatus" :maxlength="50" @change="editSomeFields(scope.row,'kstatus',$event)" :disabled="!someOpen||disField"/>
</template>
</el-table-column>
<el-table-column prop="startTime" show-overflow-tooltip label="起止时间" min-width="200" col-type="Date" v-if="showCol('startTime')" sortable>
<template #default="scope">
<mdp-date-range showStyle="tag" v-model="scope.row" startKey="startTime" endKey="endTime" @change="editSomeFields(scope.row,'startTime',$event)"/>
</template>
</el-table-column>
<el-table-column prop="projectId" show-overflow-tooltip label="项目编号" min-width="120" col-type="String" v-if="showCol('projectId') && !projectInfo?.id" sortable/>
<el-table-column prop="ktype" label="指标等级" min-width="120" col-type="String" itemCode="ktype" v-if="showCol('ktype')" sortable>
<template #default="scope">
<mdp-select itemCode="ktype" show-style="tag" v-model="scope.row.ktype" :maxlength="50" @change="editSomeFields(scope.row,'ktype',$event)" :disabled="!someOpen||disField"/>
</template>
</el-table-column>
<el-table-column prop="kclass" label="职能分类" min-width="120" col-type="String" itemCode="kclass" v-if="showCol('kclass')" sortable>
<template #default="scope">
<mdp-select itemCode="kclass" show-style="tag" v-model="scope.row.kclass" :maxlength="50" @change="editSomeFields(scope.row,'kclass',$event)" :disabled="!someOpen||disField"/>
</template>
</el-table-column>
<el-table-column prop="targetValue" show-overflow-tooltip label="目标值" min-width="120" col-type="String" v-if="showCol('targetValue')" sortable>
<template #default="scope">
<mdp-input show-style="tag" v-model="scope.row.targetValue" :maxlength="50" @change="editSomeFields(scope.row,'targetValue',$event)" :disabled="!someOpen||disField"/>
</template>
</el-table-column>
<el-table-column prop="score" label="得分" min-width="120" col-type="Integer" v-if="showCol('score')" sortable>
<template #default="scope">
<mdp-input type="number" :max="100" :min="0" show-style="tag" v-model="scope.row.score" :maxlength="50" @change="editSomeFields(scope.row,'score',$event)" :disabled="!someOpen||disField"/>
</template>
</el-table-column>
<el-table-column prop="weight" label="权重" min-width="120" col-type="String" v-if="showCol('weight')" sortable>
<template #default="scope">
<mdp-input show-style="tag" v-model="scope.row.weight" :maxlength="50" @change="editSomeFields(scope.row,'weight',$event)" :disabled="!someOpen||disField"/>
</template>
</el-table-column>
<el-table-column prop="kselfUsername" label="负责人" min-width="120" col-type="String" v-if="showCol('kselfUsername')" sortable>
<template #default="scope">
<xm-user-select showStyle="tag" v-model="scope.row.kselfUserid" :init-name="scope.row.kseflUsername" @change="editSomeFields(scope.row,'kselfUserid',$event)"/>
</template>
</el-table-column>
<el-table-column prop="deptid" label="部门" min-width="120" col-type="String" v-if="showCol('deptid')" sortable>
<template #default="scope">
<mdp-select-dept showStyle="tag" v-model="scope.row.deptid" @change="editSomeFields(scope.row,'deptid',$event)"/>
</template>
</el-table-column>
<el-table-column prop="kpiValue" label="当前值" min-width="120" col-type="String" v-if="showCol('kpiValue')" sortable>
<template #default="scope">
<mdp-input show-style="tag" v-model="scope.row.kpiValue" :maxlength="50" @change="editSomeFields(scope.row,'kpiValue',$event)" :disabled="!someOpen||disField"/>
</template>
</el-table-column>
<el-table-column prop="calcType" label="考核周期" min-width="120" col-type="String" itemCode="calcType" v-if="showCol('calcType')" sortable>
<template #default="scope">
<mdp-select itemCode="calcType" show-style="tag" v-model="scope.row.calcType" :maxlength="50" @change="editSomeFields(scope.row,'calcType',$event)" :disabled="!someOpen||disField"/>
</template>
</el-table-column>
<el-table-column prop="startTime" show-overflow-tooltip label="开始时间" min-width="120" col-type="Date" v-if="showCol('startTime')" sortable>
<template #default="scope">
<mdp-date showStyle="tag" v-model="scope.row.startTime" @change="editSomeFields(scope.row,'startTime',$event)" :disabled="true"/>
</template>
</el-table-column>
<el-table-column prop="endTime" show-overflow-tooltip label="结束时间" min-width="120" col-type="Date" v-if="showCol('endTime')" sortable>
<template #default="scope">
<mdp-date showStyle="tag" v-model="scope.row.endTime" @change="editSomeFields(scope.row,'endTime',$event)"/>
</template>
</el-table-column>
<el-table-column prop="dataLink" show-overflow-tooltip label="数据来源" min-width="120" col-type="String" v-if="showCol('dataLink')" itemCode="dataLink" sortable>
<template #default="scope">
<mdp-select itemCode="dataLink" multiple split="," show-style="tag" v-model="scope.row.dataLink" :maxlength="50" @change="editSomeFields(scope.row,'dataLink',$event)" :disabled="!someOpen||disField"/>
</template>
</el-table-column>
<el-table-column prop="scoreDate" show-overflow-tooltip label="评分日期" min-width="120" col-type="Date" v-if="showCol('scoreDate')" sortable/>
<el-table-column prop="kresult" show-overflow-tooltip label="成果" min-width="120" col-type="String" v-if="false" sortable>
<template #default="scope">
<mdp-input show-style="tag" v-model="scope.row.kpiName" :maxlength="50" @change="editSomeFields(scope.row,'kpiName',$event)" :disabled="!someOpen||disField"/>
</template>
</el-table-column>
<el-table-column prop="kselfTime" show-overflow-tooltip label="自评时间" min-width="120" col-type="Date" v-if="showCol('kselfTime')" sortable/>
<el-table-column prop="kadmTime" show-overflow-tooltip label="审核时间" min-width="120" col-type="Date" v-if="showCol('kadmTime')" sortable/>
<el-table-column prop="bizFlowState" show-overflow-tooltip label="流程状态" min-width="120" col-type="String" v-if="showCol('bizFlowState')" sortable/>
<el-table-column prop="bizProcInstId" show-overflow-tooltip label="流程编号" min-width="120" col-type="String" v-if="showCol('bizProcInstId')" sortable/>
<el-table-column prop="remark" show-overflow-tooltip label="备注" min-width="120" col-type="String" sortable/>
<el-table-column prop="kadmUserid" show-overflow-tooltip label="审核人编号" min-width="120" col-type="String" v-if="showCol('kadmUserid')" sortable/>
<el-table-column prop="kadmUsername" show-overflow-tooltip label="审核人名称" min-width="120" col-type="String" v-if="showCol('kadmUsername')" sortable/>
<el-table-column prop="kselfUserid" show-overflow-tooltip label="负责人编号" min-width="120" col-type="String" v-if="showCol('kselfUserid')" sortable/>
<el-table-column prop="id" show-overflow-tooltip label="主键" min-width="120" col-type="String" v-if="showCol('id')" sortable/>
<el-table-column prop="branchId" show-overflow-tooltip label="机构编码" min-width="120" col-type="String" v-if="showCol('branchId')" sortable/>
<el-table-column label="操作" width="100" fixed="right" v-if="currOpType=='select' && this.multiple!=true" >
<template #default="scope">
<el-button type="primary" @click="selectConfirm(scope.row)" icon="check"/>
</template>
</el-table-column>
</el-table>
<el-pagination
layout="slot,total, sizes, prev, next,pager,jumper"
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
:page-sizes="[10,20, 50, 100, 500]"
:current-page="pageInfo.pageNum"
:page-size="pageInfo.pageSize"
:total="pageInfo.total"
style="float:right;"
/>
</div>
</mdp-lr-box>
<!--新增修改明细 XmKpi 项目或任务关键指标考核界面-->
<mdp-dialog ref="formDlg" :title="menuDefName" fullscreen>
<template v-slot="{visible,data}">
<XmKpiForm ref="XmKpiForm" :his="true" :xm-project="projectInfo" :parentKpi="data.parentKpi" :someOpen="true" :visible="visible" :parentOpType="currOpType" :subOpType="data.subOpType" :formData="data.formData" @close="onFormClose" @submit="afterFormSubmit" @edit-fields="afterEditFields"/>
</template>
</mdp-dialog>
<MdpDialog ref="kanbanDlg" fullscreen :title="menuDefName">
<MdpTableKanban
:hiddenCfg="{delBtn:false,addBtn:false}"
@del="(d,cb)=>handleDel(d)"
@plus="(cb)=>showAdd()"
@edit="(d,cb)=>showEdit(d)"
v-model="tableDatas"
:columnConfigs="columnConfigs"
:itemKey="pkNames[0]"
:contentFun="(item)=>item[pkNames[0]]"
/>
<!--
<template #toolbar="{element}">
<MdpSelect showStyle="tag" itemCode="xmProductPstatus" disabled v-model="element.pstatus"/>
</template>
</MdpTableKanban>
-->
</MdpDialog>
</template>
<script>
import { MdpTableMixin } from '@/components/mdp-ui/mixin/MdpTableMixin.js';
import * as XmKpiHisApi from '@/api/xm/pro/xmKpiHis.js';
import { mapState } from 'pinia'
import { useUserStore } from '@/store/modules/user'
import { useXmStore } from '@/store/modules/xm'
export default {
name:'XmKpiMng',
mixins:[MdpTableMixin],
components: {
},
computed: {
...mapState(useUserStore,['userInfo']),
...mapState(useXmStore,['projectInfo','xmCollect']),
ganttData(){
return this.treeToList(this.treeData)
},
treeData(){
var list=this.tableDatas
const map = {}, tree = [];
list.forEach(item=>map[item.id]={ ...item, children: [] })
list.forEach(item => {
if (item.parentId !== null && map[item.parentId]) {
map[item.parentId].children.push(map[item.id]);
} else {
tree.push(map[item.id]);
}
});
return tree;
},
},
props:{
// 是否开启editSomeField模式
someOpen:{
type: Boolean,
default: true,
},
queryScope:{//查询范围 all-所有kself-我的, kadm-我管理的,
type: String,
default:''
},
kpiId:{
type: String,
default: null,
}
},
data() {
return {
expandChangeRows:new Map(),
menuDefId:'',//menu_def.id 菜单表菜单编号,用于按钮权限判断
menuDefName:'项目或任务关键指标考核',//menu_def.name 功能名称用于导出excel等文件名
pkNames:["id","kadmTime"],//表格主键的java属性名称驼峰命名默认为id,支持多主键
currOpType:'mng',//表格 mng-综合管理具有最大权限所有按钮可动、detail-只看不能操作
filters:{//查询参数
},
defaultFilters:{//默认查询参数,第一次打开界面的时候用到,恢复默认值的时候用到
},
pageInfo:{//分页数据
total:0,//服务器端收到0时会自动计算总记录数如果上传>0的不自动计算。
pageSize: this.pageable?10:1500,//每页数据
count:false,//是否需要重新计算总记录数
pageNum:1,//当前页码、从1开始计算
orderFields:['kpi_index','kadm_time'],//排序列 如 ['sex','student_id'],必须为数据库字段
orderDirs:['asc','desc']//升序 asc,降序desc 如 性别 升序、学生编号降序 ['asc','desc']
},
//增删改查(含批量)接口
apis:{
list: XmKpiHisApi.listXmKpiHis,
batchDel: XmKpiHisApi.batchDelXmKpiHis,
},
project:null,
ktypeDict:[],
ganttVisible:false,
adaptiveDisabled:false,
expand:true,
lspan:24
}
},
methods: {
expandChange(row,expanded){
this.expandChangeRows.set(row.id,expanded)
},
// 深度优先遍历保持顺序不变
treeToList(tree, list = [], parent = null) {
tree.forEach(node => {
// 创建当前节点的副本,移除 children 属性
const { children, ...rest } = node;
const newNode = {
...rest
};
list.push(newNode);
// 递归处理子节点
if (children && children.length && (this.expandChangeRows.has(node.id) && this.expandChangeRows.get(node.id)==true)) {
this.treeToList(children, list, newNode);
}
});
return list;
},
onTreeChange(data, checked, indeterminate){
if(checked){
this.parent=data
}else{
this.parent=null
}
},
showAddSub(parentKpi){
this.$refs['formDlg'].open({parentKpi:parentKpi,subOpType:'add'})
},
calcIcon(ktype){
let o=this.ktypeDict.find(k=>k.id==ktype)
return o?o.icon:'ep:full-screen'
},
//页面初始化需要配置的特殊逻辑写这里
initCurrData(){
this.project=this.projectInfo
if(this.queryScope=='kadm'){
this.filters['kadmStatus']='1'
}
this.searchTableDatas();
},
/**
* 检查参数是否满足调用后台接口的条件
*
* @param params 提交给后台的参数池,map类型
* @returns true / false
*/
preQueryParamCheck(params){
if(this.project?.id){
params.projectId=this.project.id
}
if(this.parent?.id){
params.id=this.parent.id
}
if(this.queryScope=='kself'){
params.kselfUserid=this.userInfo.userid
}else if(this.queryScope=='kadm'){
params.kadmUserid=this.userInfo.userid
}
if(this.kpiId){
params.id=this.kpiId
}
return true;
},
//页面数据加载完后需要对数据进行加工处理的
afterList(tableDatas,isOk,apiName){
},
/**
* 对修改的字段进行判断返回false ,将取消更新数据库
* @param {*} row 当前选中的行
* @param {*} fieldName 修改的字段名
* @param {*} $event 修改后的值
* @param {*} params 将要提交服务器的参数
* @returns true/false 返回false ,将取消更新数据库
*/
editSomeFieldsCheck(row,fieldName,$event,params){
this.$notify.error("历史记录不允许修改")
this.searchTableDatas()
return false;
},
},
mounted() {
this.$mdp.getDictOptions('ktype').then(res=>{
this.ktypeDict=res
})
}
}
</script>
<style scoped>
</style>