优化指标导入

This commit is contained in:
陈裕财
2025-04-05 14:03:29 +08:00
parent 311aa9cae3
commit de01d117a3
5 changed files with 429 additions and 196 deletions

View File

@@ -36,7 +36,7 @@ export const addXmKpi = params => { return axios.post(`${base}/xm/core/xmKpi/add
//批量修改某些字段
export const editSomeFieldsXmKpi = params => { return axios.post(`${base}/xm/core/xmKpi/editSomeFields`, params); };
export const batchImportKpiFromDict = params => { return axios.post(`${base}/xm/core/xmKpi/batchImportKpiFromDict`, params); };
export const batchImportKpiFromTemplate = params => { return axios.post(`${base}/xm/core/xmKpi/batchImportKpiFromTemplate`, params); };
export const batchChangeParentKpi = params => { return axios.post(`${base}/xm/core/xmKpi/batchChangeParentKpi`, params); };
export const calcProgress = params => { return axios.post(`${base}/xm/core/xmKpi/calcProgress`, params); };

View File

@@ -1,166 +1,175 @@
<template>
<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('addBtn') || !checkBtnQx('addBtn',menuDefId) " type="primary" @click="showAdd()" icon="plus" plain />
<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>
</el-space>
<mdp-lr-box :lspan="6" :expand="false">
<template #left>
<xm-kpi-tree :sel-project="projectInfo"/>
</template>
<el-space wrap>
<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"/>
<xm-user-select v-model="filters.kselfUserid" placeholder="负责人" :sel-project="project"/>
<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('addBtn') || !checkBtnQx('addBtn',menuDefId) " type="primary" @click="showAdd()" icon="plus" plain />
<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"/>
<xm-user-select v-model="filters.kselfUserid" placeholder="负责人" :sel-project="project"/>
<mdp-select itemCode="calcType" v-model="filters.calcType" placeholder="考核方式"/>
<mdp-select itemCode="kstatus" v-model="filters.kstatus" placeholder="状态"/>
<mdp-select itemCode="kclass" v-model="filters.kclass" placeholder="分类"/>
<el-input v-model="filters.kpiIndex" placeholder="指标编号" clearable title="支持>、<、 >=、<=、!=、*字符*、$IS NULL、$IN 1,2,3、$between 1,5等操作符"/>
<el-input v-model="filters.kpiIndex" placeholder="指标名称" clearable title="支持>、<、 >=、<=、!=、*字符*、$IS NULL、$IN 1,2,3、$between 1,5等操作符"/>
</el-space>
</template>
<el-space wrap>
<el-button v-loading="load.list" :disabled="load.list==true" @click="searchTableDatas()" icon="search" type="primary" plain />
</el-space>
</ContentWrap>
<!--列表 XmKpi 项目或任务关键指标考核-->
<el-table ref="table" v-adaptive :data="tableDatas" @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 sortable prop="name" 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">
{{ (scope.$index + 1) }}&nbsp; {{ scope.row.name }}
</el-link>
<mdp-select itemCode="calcType" v-model="filters.calcType" placeholder="考核方式"/>
<mdp-select itemCode="kstatus" v-model="filters.kstatus" placeholder="状态"/>
<mdp-select itemCode="kclass" v-model="filters.kclass" placeholder="分类"/>
<el-input v-model="filters.kpiIndex" placeholder="指标编号" clearable title="支持>、<、 >=、<=、!=、*字符*、$IS NULL、$IN 1,2,3、$between 1,5等操作符"/>
<el-input 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>
<!--列表 XmKpi 项目或任务关键指标考核-->
<el-table ref="table" v-adaptive :data="tableDatas" @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 sortable prop="name" 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">
{{ (scope.$index + 1) }}&nbsp; {{ scope.row.name }}
</el-link>
</template>
<template #default>
<el-button v-if="currOpType=='mng'" @click="copy2(scope.row, scope.$index)" icon="document-copy" type="warning"
title="复制一行除了主键不一样,其它都一样的数据">复制</el-button>
<el-button v-if="currOpType=='mng'" @click="showEdit(scope.row)" icon="edit" type="primary">编辑</el-button>
</template>
</el-popover>
</template>
<template #default>
<el-button v-if="currOpType=='mng'" @click="copy2(scope.row, scope.$index)" icon="document-copy" type="warning"
title="复制一行除了主键不一样,其它都一样的数据">复制</el-button>
<el-button v-if="currOpType=='mng'" @click="showEdit(scope.row)" icon="edit" type="primary">编辑</el-button>
</el-table-column>
<!-- 可编辑字段格式
<el-table-column prop="objType" label="对象类型" min-width="120" show-overflow-tooltip 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-popover>
</template>
</el-table-column>
<!-- 可编辑字段格式
<el-table-column prop="objType" label="对象类型" min-width="120" show-overflow-tooltip 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="projectId" label="项目编号" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('projectId') && !projectInfo?.id" sortable/>
<el-table-column prop="kpiIndex" label="排序号" min-width="120" show-overflow-tooltip 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="kpiName" label="指标名称" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('kpiName')" 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="kclass" label="指标分类" min-width="120" show-overflow-tooltip 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" label="目标值" min-width="120" show-overflow-tooltip 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="weight" label="权重" min-width="120" show-overflow-tooltip 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="dataLink" label="数据来源" min-width="120" show-overflow-tooltip 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>
-->
<el-table-column prop="projectId" label="项目编号" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('projectId') && !projectInfo?.id" sortable/>
<el-table-column prop="kpiIndex" label="排序号" min-width="120" show-overflow-tooltip 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="kpiName" label="指标名称" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('kpiName')" 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="kclass" label="指标分类" min-width="120" show-overflow-tooltip 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" label="目标值" min-width="120" show-overflow-tooltip 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="weight" label="权重" min-width="120" show-overflow-tooltip 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="dataLink" label="数据来源" min-width="120" show-overflow-tooltip 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="kselfUsername" label="负责人" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('kselfUsername')" sortable>
<xm-select-user showStyle="tag" v-model="scope.row.kselfUserid" :init-name="scope.row.kseflUsername" @change="editSomeFields(scope.row,'kselfUserid',$event)"/>
</el-table-column>
<el-table-column prop="kpiValue" label="当前值" min-width="120" show-overflow-tooltip 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="score" label="得分" min-width="120" show-overflow-tooltip col-type="Integer" v-if="showCol('score')" sortable>
<template #default="scope">
<mdp-input-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="kstatus" label="状态" min-width="120" show-overflow-tooltip col-type="String" itemCode="kstatus" v-if="showCol('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="nextCalcDate" label="考核时间" min-width="120" show-overflow-tooltip col-type="Date" v-if="showCol('nextCalcDate')" sortable>
<template #default="scope">
<mdp-date show-style="tag" v-model="scope.row.nextCalcDate" :maxlength="50" @change="editSomeFields(scope.row,'nextCalcDate',$event)" :disabled="!someOpen||disField"/>
</template>
</el-table-column>
<el-table-column prop="calcType" label="考核方式" min-width="120" show-overflow-tooltip 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="scoreDate" label="评分日期" min-width="120" show-overflow-tooltip col-type="Date" v-if="showCol('scoreDate')" sortable/>
<el-table-column prop="kresult" label="成果" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('kresult')" 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" label="自评时间" min-width="120" show-overflow-tooltip col-type="Date" v-if="showCol('kselfTime')" sortable/>
<el-table-column prop="kadmTime" label="审核时间" min-width="120" show-overflow-tooltip col-type="Date" v-if="showCol('kadmTime')" sortable/>
<el-table-column prop="bizFlowState" label="流程状态" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('bizFlowState')" sortable/>
<el-table-column prop="bizProcInstId" label="流程编号" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('bizProcInstId')" sortable/>
<el-table-column prop="remark" label="备注" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('remark')" sortable/>
<el-table-column prop="ktype" label="指标等级" min-width="120" show-overflow-tooltip col-type="String" itemCode="ktype" v-if="showCol('ktype')" sortable>
<mdp-select itemCode="ktype" show-style="tag" v-model="scope.row.ktype" :maxlength="50" @change="editSomeFields(scope.row,'ktype',$event)" :disabled="!someOpen||disField"/>
</el-table-column>
<el-table-column prop="taskId" label="任务编号" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('taskId')" sortable/>
<el-table-column prop="kselfUsername" label="负责人" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('kselfUsername')" sortable>
<xm-select-user showStyle="tag" v-model="scope.row.kselfUserid" :init-name="scope.row.kseflUsername" @change="editSomeFields(scope.row,'kselfUserid',$event)"/>
</el-table-column>
<el-table-column prop="kpiValue" label="当前值" min-width="120" show-overflow-tooltip 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="score" label="得分" min-width="120" show-overflow-tooltip col-type="Integer" v-if="showCol('score')" sortable>
<template #default="scope">
<mdp-input-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="kstatus" label="状态" min-width="120" show-overflow-tooltip col-type="String" itemCode="kstatus" v-if="showCol('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="kadmUserid" label="审核人编号" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('kadmUserid')" sortable/>
<el-table-column prop="kadmUsername" label="审核人名称" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('kadmUsername')" sortable/>
<el-table-column prop="kselfUserid" label="负责人编号" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('kselfUserid')" sortable/>
<el-table-column prop="id" label="主键" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('id')" sortable/>
<el-table-column prop="branchId" label="机构编码" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('branchId')" sortable/>
<el-table-column prop="nextCalcDate" label="考核时间" min-width="120" show-overflow-tooltip col-type="Date" v-if="showCol('nextCalcDate')" sortable>
<template #default="scope">
<mdp-date show-style="tag" v-model="scope.row.nextCalcDate" :maxlength="50" @change="editSomeFields(scope.row,'nextCalcDate',$event)" :disabled="!someOpen||disField"/>
</template>
</el-table-column>
<el-table-column prop="calcType" label="考核方式" min-width="120" show-overflow-tooltip 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="scoreDate" label="评分日期" min-width="120" show-overflow-tooltip col-type="Date" v-if="showCol('scoreDate')" sortable/>
<el-table-column prop="kresult" label="成果" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('kresult')" 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" label="自评时间" min-width="120" show-overflow-tooltip col-type="Date" v-if="showCol('kselfTime')" sortable/>
<el-table-column prop="kadmTime" label="审核时间" min-width="120" show-overflow-tooltip col-type="Date" v-if="showCol('kadmTime')" sortable/>
<el-table-column prop="bizFlowState" label="流程状态" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('bizFlowState')" sortable/>
<el-table-column prop="bizProcInstId" label="流程编号" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('bizProcInstId')" sortable/>
<el-table-column prop="remark" label="备注" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('remark')" sortable/>
<el-table-column prop="ktype" label="指标等级" min-width="120" show-overflow-tooltip col-type="String" itemCode="ktype" v-if="showCol('ktype')" sortable>
<mdp-select itemCode="ktype" show-style="tag" v-model="scope.row.ktype" :maxlength="50" @change="editSomeFields(scope.row,'ktype',$event)" :disabled="!someOpen||disField"/>
</el-table-column>
<el-table-column prop="taskId" label="任务编号" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('taskId')" sortable/>
<el-table-column prop="kadmUserid" label="审核人编号" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('kadmUserid')" sortable/>
<el-table-column prop="kadmUsername" label="审核人名称" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('kadmUsername')" sortable/>
<el-table-column prop="kselfUserid" label="负责人编号" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('kselfUserid')" sortable/>
<el-table-column prop="id" label="主键" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('id')" sortable/>
<el-table-column prop="branchId" label="机构编码" min-width="120" show-overflow-tooltip 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;"
/>
<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" width="80%">
<template v-slot="{visible,data}">
@@ -204,7 +213,7 @@ export default {
},
computed: {
...mapState(useUserStore,['userInfo']),
...mapState(useUserStore,['projectInfo','xmCollect'])
...mapState(useXmStore,['projectInfo','xmCollect'])
},
props:{
// 是否开启editSomeField模式

View File

@@ -0,0 +1,200 @@
<template>
<mdp-dialog append-to-body width="60%" top="20px" ref="parentDialog">
<template #default>
<XmKpiTree showConfirm subOpType="select"
:sel-project="selProject"
@confirm="(kpi)=>onParentKpiSelected(kpi)"
/>
</template>
</mdp-dialog>
<mdp-dialog width="80%" ref="tplKpiDialog" title="选中需要导入的指标">
<template #default>
<el-form label-position="left">
<mdp-lr-box :lspan="12" :gutter="20">
<template #left>
<el-form-item label="指标选择">
<mdp-select itemCode="xm_kpi_tpl" multiple v-model="xmKpiTplDict" width="100%" @change2="(l)=>onXmKpiTplSelect(l)"/>
</el-form-item>
<el-form-item label="指标预览">
<div>
<el-steps v-if="xmKpiList && xmKpiList.length>0"
direction="vertical" space="60px"
>
<el-step style="cursor:pointer;" @click="onStepClick(item)" :title="item.kpiName" :status="'wait'" v-for="(item,index) in xmKpiList" :key="index">
<template #icon>
<icon :icon="item.icon"/>
</template>
<template #description>
<div>
<el-row :gutter="10">
<el-col :span="6">
指标分类<mdp-select showStyle="tag" itemCode="kclass" v-model="item.kclass" width="100%"/>
</el-col>
<el-col :span="6">
目标值<el-text size="small">{{ item.targetValue }}</el-text>
</el-col>
<el-col :span="6">
权重<el-text size="small">{{ item.weight }}</el-text>
</el-col>
<el-col :span="6">
数据来源 <mdp-select showStyle="tag" itemCode="data_link" multiple v-model="item.dataLink" width="100%"/>
</el-col>
</el-row>
</div>
</template>
</el-step>
</el-steps>
</div>
</el-form-item>
</template>
<div class="padding-left">
<el-form-item label="目标位置">
<el-radio v-model="tpl.targetType" label="deptTop" v-if="!selProject?.id">部门顶级位置</el-radio>
<el-radio v-model="tpl.targetType" label="projectTop">项目顶级位置</el-radio>
<el-radio v-model="tpl.targetType" label="sub">某个指标之下</el-radio>
</el-form-item>
<el-form-item label="目标上级" v-if="tpl.targetType=='sub'">
{{tpl.parentName}} &nbsp;<el-button @click="$refs['parentDialog'].open()">选择上级</el-button>
</el-form-item>
<el-form-item label="目标部门" v-if="tpl.targetType=='deptTop'">
<mdp-select-dept v-model="tpl.deptid"/>
</el-form-item>
<el-form-item label="目标项目" v-if="tpl.targetType=='projectTop'">
<xm-project-select v-model="tpl.projectId" v-if="!selProject?.id"/>
{{ selProject.name }}
</el-form-item>
</div>
</mdp-lr-box>
</el-form>
<div class="footer"><el-button type="primary" @click="doInitXmKpi" :disabled="load.init">提交</el-button></div>
</template>
</mdp-dialog>
</template>
<script>
import util from '@/components/mdp-ui/js/util' //全局公共库
import {
batchImportKpiFromDict
} from '@/api/xm/pro/xmKpi'
//新增界面
import { mapState } from 'pinia'
import { useUserStore } from '@/store/modules/user'
export default {
props: ['selProject'],
emits:['init'],
computed: {
...mapState(useUserStore, ['userInfo', 'roles']),
},
watch: {
},
data() {
return {
load:{init:false},
project:{},
xmKpiList:[],
xmKpiTplDict:[],
tpl:{
xmKpis:[], //待导入的指标
sourceDeptid:'',//源头部门
sourceProjectId:'',//源头项目
sourceType:'some',// projectAll-项目下全部指标deptAll-部门下全部指标some-选中的
targetType:'projectTop' , // 目标位置 deptTop-部门顶级 projectTop-项目顶级sub-作为某个指标的子集
parentId:'' , // 新的上级编号顶级为0
projectId:'',//目标项目编号
deptid:'',//目标部门编号
}
}
}, //end data
methods: {
onParentKpiSelected(kpi){
if(kpi?.id){
this.tpl.parentId=kpi.id
this.tpl.parentName=kpi.name
this.$refs['parentDialog'].close();
}
},
open(){
this.$refs['tplKpiDialog'].open();
},
onXmKpiTplSelect(xmKpiTplDict){
this.xmKpiList=xmKpiTplDict.map(d=>{
return {
id:d.id,
kpiName:d.name,
kpiIndex:d.id,
targetValue:d.extInfo.targetValue,
remark:d.extInfo.remark,
kclass:d.extInfo.kclass,
kresult:d.extInfo.kresult,
ktype:d.extInfo.ktype,
dataLink:d.extInfo.dataLink,
parentId:d.extInfo.parentId,
rateType:d.extInfo.rateType,
calcType:d.extInfo.calcType,
weight:d.extInfo.weight,
deptid:this.userInfo.deptid,
branchId:this.userInfo.branchId,
kselfUserid:this.userInfo.userid,
kselfUsername:this.userInfo.username,
projectId:this.project?.id?this.project.id:''
}
})
},
doInitXmKpi(){
this.load.init=true
let params={...this.tpl}
params.xmKpis=this.xmKpiList
batchImportKpiFromDict(params).then(res=>{
var tips = res.tips
this.load.init=false
if(tips.isOk){
this.$notify.success("添加成功")
this.$emit('init')
}else{
this.$notify.error(tips.msg)
}
})
},
onStepClick(item){
this.currXmKpi=item
this.$refs['currXmKpiCfgDialog'].open({currXmKpi:item,title:'设置'+item.kpiName})
},
userSelect(phase,user){
if(user && user.userid){
phase.createUserid=user.userid
phase.createUsername=user.username
}else{
phase.createUserid=''
phase.createUsername=''
}
}
}, //end methods
components: {
},
mounted() {
this.project=this.selProject
}
}
</script>
<style lang="scss" />

View File

@@ -2,39 +2,46 @@
<mdp-dialog append-to-body width="60%" top="20px" ref="parentDialog">
<template #default>
<XmPhase showConfirm subOpType="select"
<XmKpiTree showConfirm subOpType="select"
:sel-project="selProject"
@confirm="(task)=>onParentTaskSelected(task)"
@confirm="(kpi)=>onParentKpiSelected(kpi)"
/>
</template>
</mdp-dialog>
<mdp-dialog width="80%" ref="tplPhaseDialog" title="选中需要导入的计划【如果不选具体的计划,则全量导入】">
<mdp-dialog width="80%" ref="tplKpiDialog" title="选中需要导入的指标【如果不选具体的指标,则全量导入】">
<template #default>
<mdp-lr-box :lspan="12" lborder rborder>
<template #left>
<XmPhase ref="sourcePhaseRef" subOpType="select" multiple :isTpl="true"
<XmKpiTree ref="sourceKpiRef" subOpType="select" multiple :isTpl="true"
/>
</template>
<el-form label-width="120px" label-position="left" class="padding-left">
<el-form-item label="源头数据">
<el-radio v-model="tpl.sourceType" label="all">项目下所有工作项</el-radio>
<el-radio v-model="tpl.sourceType" label="some">手工选中的工作项</el-radio>
<!-- <el-radio v-model="tpl.sourceType" label="deptAll">部门下所有指标</el-radio> -->
<el-radio v-model="tpl.sourceType" label="projectAll">项目下所有指标</el-radio>
<el-radio v-model="tpl.sourceType" label="some">手工选中的指标</el-radio>
</el-form-item>
<el-form-item label="目标位置">
<el-radio v-model="tpl.targetType" label="top">当前项目顶级位置</el-radio>
<el-radio v-model="tpl.targetType" label="sub">某个阶段/规划之下</el-radio>
<el-radio v-model="tpl.targetType" label="deptTop" v-if="!selProject?.id">部门顶级位置</el-radio>
<el-radio v-model="tpl.targetType" label="projectTop">项目顶级位置</el-radio>
<el-radio v-model="tpl.targetType" label="sub">某个指标之下</el-radio>
</el-form-item>
<el-form-item label="新的上级" v-if="tpl.targetType=='sub'">
{{tpl.parentTaskid}} &nbsp;<el-button @click="$refs['parentDialog'].open()">选择新的上级</el-button>
<el-form-item label="目标上级" v-if="tpl.targetType=='sub'">
{{tpl.parentId}} &nbsp;<el-button @click="$refs['parentDialog'].open()">选择上级</el-button>
</el-form-item>
<el-form-item label="目标部门" v-if="tpl.targetType=='deptTop'">
<mdp-select-dept v-model="tpl.deptid"/>
</el-form-item>
<el-form-item label="目标项目" v-if="tpl.targetType=='projectTop'">
<xm-project-select v-model="tpl.projectId" v-if="!selProject?.id"/>
{{ selProject.name }}
</el-form-item>
<el-form-item label="数据处理">
所有日期数据向后延申 &nbsp;<el-input-number v-model="tpl.days"/>
</el-form-item>
</el-form>
<div class="footer">
<el-button type="primary" @click="importFromTaskTpl()" :disabled="load.import">提交</el-button>
<el-button type="primary" @click="importFromKpiTpl()" :disabled="load.import">提交</el-button>
</div>
</mdp-lr-box>
@@ -73,54 +80,68 @@ export default {
load:{import:false},
tpl:{
xmKpis:[], //待导入的指标
sourceDeptid:'',//源头部门
sourceProjectId:'',//源头项目
sourceType:'some',// all-全部some-选中的
targetType:'top' , // 目标位置 top-顶级sub-作为某个阶段、规划的子集
parentTaskid:'' , // 新的上级编号顶级为0
days:0, // 新的日期向后延申天数
sourceType:'some',// projectAll-项目下全部指标deptAll-部门下全部指标some-选中的
targetType:'projectTop' , // 目标位置 deptTop-部门顶级 projectTop-项目顶级sub-作为某个指标的子集
parentId:'' , // 新的上级编号顶级为0
projectId:'',//目标项目编号
deptid:'',//目标部门编号
}
}
}, //end data
methods: {
open(){
this.$refs['tplPhaseDialog'].open();
this.$refs['tplKpiDialog'].open();
},
onParentTaskSelected(task){
if(task?.id){
if(task.ptype>2){
this.$notify.warning('【'+task.name+'】属于任务,不允许有下级工作项,请选【阶段/规划】')
return;
}
this.tpl.parentTaskid=task.id
this.tpl.targetParentTaskName=task.name
onParentKpiSelected(kpi){
if(kpi?.id){
this.tpl.parentId=kpi.id
this.tpl.parentName=kpi.name
this.$refs['parentDialog'].close();
}
},
importFromTaskTpl(){
importFromKpiTpl(){
let tplTasks=this.$refs['sourcePhaseRef'].getCheckedNodes()
let tplProject=this.$refs['sourcePhaseRef'].project
if(!tplProject?.id){
let tplKpis=this.$refs['sourceKpiRef'].getCheckedNodes()
let tplProject=this.$refs['sourceKpiRef'].project
let tplDept=this.$refs['sourceKpiRef'].dept
if(tpl.sourceType=='projectAll' && !tplProject?.id){
this.$notify.warning('请选择待导入的项目')
return;
}
if(this.tpl.sourceType=='some' && tplTasks.length==0){
this.$notify.warning('请选择至少一个待导入的工作项')
if(tpl.sourceType=='deptAll' && !tplDept?.deptid){
this.$notify.warning('请选择待导入的部门')
return;
}
if(this.tpl.targetType=='sub' && !this.tpl.parentTaskid){
this.$notify.warning('请选择目标位置')
if(this.tpl.sourceType=='some' && tplKpis.length==0){
this.$notify.warning('请选择至少一个待导入的指标')
return;
}
if(this.tpl.targetType=='sub' && !this.tpl.parentId){
this.$notify.warning('请选择一个指标作为新的上级')
return;
}
if(this.tpl.targetType=='deptTop' && !this.tpl.deptid){
this.$notify.warning('请选择目标部门')
return;
}
if(this.tpl.targetType=='projectTop' && !this.tpl.projectId){
this.$notify.warning('请选择目标项目')
return;
}
this.load.import=true;
let params={...this.tpl,xmTasks:tplTasks,projectId:this.selProject.id,sourceProjectId:tplProject.id }
batchImportTaskFromTemplate(params).then(res=>{
let params={...this.tpl,xmKpis:tplKpis,projectId:this.selProject.id,sourceProjectId:tplProject?.id||'',sourceDeptid:tplDept?.deptid||'' }
batchImportKpiFromTemplate(params).then(res=>{
var tips = res.tips;
this.load.import=false;
if(tips.isOk){
this.$refs['tplPhaseDialog'].close();
this.$refs['tplKpiDialog'].close();
this.$emit('importTpl',params)
this.$notify.success('导入成功')
}else{

View File

@@ -22,8 +22,9 @@
:draggable="true"
:sortFun="sortFun"
>
<template #topToolbar>
<xm-project-select width="250px" :isTpl="isTpl"
<template #topToolbar>
<mdp-select-dept :width="'120px'" v-model="filters.deptid" v-if="!selProject?.id"/>
<xm-project-select :width="'120px'" :isTpl="isTpl"
v-model="filters.projectId" :collect-id="xmCollect?.id"
v-if="!selProject || !selProject.id"
ref="xmProjectSelect1"
@@ -56,6 +57,7 @@
</template>
<template #moreBtn>
<el-button type="primary" @click="$refs['tplKpiDialog'].open()">从模板导入</el-button>
<el-button type="warning" @click="$refs['dictKpiDialog'].open()">从指标库导入</el-button>
</template>
<template #nodeToolbar="{ data }">
<el-button @click="calcProgress(data)" title="对当前节点及所有上级节点进行逐层进度统计" type="warning" plain>统计</el-button>
@@ -93,6 +95,7 @@
</template>
</mdp-dialog>
<XmKpiByTpl :sel-project="project" ref="tplKpiDialog" @importTpl="onImportTpl" v-if="project?.id"/>
<XmKpiByDict :sel-project="project" ref="dictKpiDialog" @importTpl="onImportTpl" v-if="project?.id"/>
</template>
<script>