kpi代码

This commit is contained in:
陈裕财
2025-04-05 02:25:06 +08:00
parent 39b27d7540
commit 884416bd64
7 changed files with 417 additions and 427 deletions

View File

@@ -13,25 +13,25 @@ let base = config.getXmCtx();
**/
//普通查询 条件之间and关系
export const listXmProjectKpi = params => { return axios.get(`${base}/xm/core/xmProjectKpi/list`, { params: params }); };
export const listXmKpi = params => { return axios.get(`${base}/xm/core/xmKpi/list`, { params: params }); };
//普通查询 条件之间and关系
export const queryXmProjectKpiById = params => { return axios.get(`${base}/xm/core/xmProjectKpi/queryById`, { params: params }); };
export const queryXmKpiById = params => { return axios.get(`${base}/xm/core/xmKpi/queryById`, { params: params }); };
//删除一条项目或任务关键指标考核 params={id:'主键 主键'}
export const delXmProjectKpi = params => { return axios.post(`${base}/xm/core/xmProjectKpi/del`,params); };
export const delXmKpi = params => { return axios.post(`${base}/xm/core/xmKpi/del`,params); };
//批量删除项目或任务关键指标考核 params=[{id:'主键 主键'}]
export const batchAddXmProjectKpi = params => { return axios.post(`${base}/xm/core/xmProjectKpi/batchAdd`, params); };
export const batchAddXmKpi = params => { return axios.post(`${base}/xm/core/xmKpi/batchAdd`, params); };
//批量删除项目或任务关键指标考核 params=[{id:'主键 主键'}]
export const batchDelXmProjectKpi = params => { return axios.post(`${base}/xm/core/xmProjectKpi/batchDel`, params); };
export const batchDelXmKpi = params => { return axios.post(`${base}/xm/core/xmKpi/batchDel`, params); };
//修改一条项目或任务关键指标考核记录
export const editXmProjectKpi = params => { return axios.post(`${base}/xm/core/xmProjectKpi/edit`, params); };
export const editXmKpi = params => { return axios.post(`${base}/xm/core/xmKpi/edit`, params); };
//新增一条项目或任务关键指标考核
export const addXmProjectKpi = params => { return axios.post(`${base}/xm/core/xmProjectKpi/add`, params); };
export const addXmKpi = params => { return axios.post(`${base}/xm/core/xmKpi/add`, params); };
//批量修改某些字段
export const editSomeFieldsXmProjectKpi = params => { return axios.post(`${base}/xm/core/xmProjectKpi/editSomeFields`, params); };
export const editSomeFieldsXmKpi = params => { return axios.post(`${base}/xm/core/xmKpi/editSomeFields`, params); };

View File

@@ -13,25 +13,25 @@ let base = config.getXmCtx();
**/
//普通查询 条件之间and关系
export const listXmProjectKpiHis = params => { return axios.get(`${base}/xm/core/xmProjectKpiHis/list`, { params: params }); };
export const listXmKpiHis = params => { return axios.get(`${base}/xm/core/xmKpiHis/list`, { params: params }); };
//普通查询 条件之间and关系
export const queryXmProjectKpiHisById = params => { return axios.get(`${base}/xm/core/xmProjectKpiHis/queryById`, { params: params }); };
export const queryXmKpiHisById = params => { return axios.get(`${base}/xm/core/xmKpiHis/queryById`, { params: params }); };
//删除一条项目或任务关键指标考核 params={id:'主键 主键',scoreDate:'评分日期 主键'}
export const delXmProjectKpiHis = params => { return axios.post(`${base}/xm/core/xmProjectKpiHis/del`,params); };
export const delXmKpiHis = params => { return axios.post(`${base}/xm/core/xmKpiHis/del`,params); };
//批量删除项目或任务关键指标考核 params=[{id:'主键 主键',scoreDate:'评分日期 主键'}]
export const batchAddXmProjectKpiHis = params => { return axios.post(`${base}/xm/core/xmProjectKpiHis/batchAdd`, params); };
export const batchAddXmKpiHis = params => { return axios.post(`${base}/xm/core/xmKpiHis/batchAdd`, params); };
//批量删除项目或任务关键指标考核 params=[{id:'主键 主键',scoreDate:'评分日期 主键'}]
export const batchDelXmProjectKpiHis = params => { return axios.post(`${base}/xm/core/xmProjectKpiHis/batchDel`, params); };
export const batchDelXmKpiHis = params => { return axios.post(`${base}/xm/core/xmKpiHis/batchDel`, params); };
//修改一条项目或任务关键指标考核记录
export const editXmProjectKpiHis = params => { return axios.post(`${base}/xm/core/xmProjectKpiHis/edit`, params); };
export const editXmKpiHis = params => { return axios.post(`${base}/xm/core/xmKpiHis/edit`, params); };
//新增一条项目或任务关键指标考核
export const addXmProjectKpiHis = params => { return axios.post(`${base}/xm/core/xmProjectKpiHis/add`, params); };
export const addXmKpiHis = params => { return axios.post(`${base}/xm/core/xmKpiHis/add`, params); };
//批量修改某些字段
export const editSomeFieldsXmProjectKpiHis = params => { return axios.post(`${base}/xm/core/xmProjectKpiHis/editSomeFields`, params); };
export const editSomeFieldsXmKpiHis = params => { return axios.post(`${base}/xm/core/xmKpiHis/editSomeFields`, params); };

View File

@@ -125,13 +125,13 @@
</template>
<script>
import * as XmProjectKpiApi from '@/api/xm/pro/xmProjectKpi';
import * as XmKpiApi from '@/api/xm/pro/xmKpi';
import { MdpFormMixin } from '@/components/mdp-ui/mixin/MdpFormMixin.js';
import { mapState } from 'pinia'
import { useUserStore } from '@/store/modules/user'
export default {
name:'XmProjectKpiForm',
name:'XmKpiForm',
mixins:[MdpFormMixin],
computed: {
...mapState(useUserStore,['userInfo']),
@@ -188,10 +188,10 @@ export default {
},
//()
apis:{
queryById: XmProjectKpiApi.queryXmProjectKpiById,
add: XmProjectKpiApi.addXmProjectKpi,
edit: XmProjectKpiApi.editXmProjectKpi,
editSomeFields: XmProjectKpiApi.editSomeFieldsXmProjectKpi
queryById: XmKpiApi.queryXmKpiById,
add: XmKpiApi.addXmKpi,
edit: XmKpiApi.editXmKpi,
editSomeFields: XmKpiApi.editSomeFieldsXmKpi
},
}
},

View File

@@ -30,7 +30,7 @@
<el-button v-loading="load.list" :disabled="load.list==true" @click="searchTableDatas()" icon="search" type="primary" plain />
</el-space>
</ContentWrap>
<!--列表 XmProjectKpi 项目或任务关键指标考核-->
<!--列表 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="名称">
@@ -161,10 +161,10 @@
:total="pageInfo.total"
style="float:right;"
/>
<!--新增修改明细 XmProjectKpi 项目或任务关键指标考核界面-->
<!--新增修改明细 XmKpi 项目或任务关键指标考核界面-->
<mdp-dialog ref="formDlg" :title="menuDefName" width="80%">
<template v-slot="{visible,data}">
<XmProjectKpiForm ref="XmProjectKpiForm" :someOpen="true" :visible="visible" :parentOpType="currOpType" :subOpType="data.subOpType" :formData="data.formData" @close="onFormClose" @submit="afterFormSubmit" @edit-fields="afterEditFields"/>
<XmKpiForm ref="XmKpiForm" :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">
@@ -190,17 +190,17 @@
<script>
import { MdpTableMixin } from '@/components/mdp-ui/mixin/MdpTableMixin.js';
import * as XmProjectKpiApi from '@/api/xm/pro/xmProjectKpi.js';
import XmProjectKpiForm from'./Form.vue';//
import * as XmKpiApi from '@/api/xm/pro/xmKpi.js';
import XmKpiForm from'./Form.vue';//
import { mapState } from 'pinia'
import { useUserStore } from '@/store/modules/user'
import { useXmStore } from '@/store/modules/xm'
export default {
name:'XmProjectKpiMng',
name:'XmKpiMng',
mixins:[MdpTableMixin],
components: {
XmProjectKpiForm
XmKpiForm
},
computed: {
...mapState(useUserStore,['userInfo']),
@@ -235,14 +235,14 @@ export default {
},
//()
apis:{
list: XmProjectKpiApi.listXmProjectKpi,
add: XmProjectKpiApi.addXmProjectKpi,
del: XmProjectKpiApi.delXmProjectKpi,
edit: XmProjectKpiApi.editXmProjectKpi,
editSomeFields: XmProjectKpiApi.editSomeFieldsXmProjectKpi,
batchAdd: XmProjectKpiApi.batchAddXmProjectKpi,
batchDel: XmProjectKpiApi.batchDelXmProjectKpi,
batchEdit: XmProjectKpiApi.batchEditXmProjectKpi,
list: XmKpiApi.listXmKpi,
add: XmKpiApi.addXmKpi,
del: XmKpiApi.delXmKpi,
edit: XmKpiApi.editXmKpi,
editSomeFields: XmKpiApi.editSomeFieldsXmKpi,
batchAdd: XmKpiApi.batchAddXmKpi,
batchDel: XmKpiApi.batchDelXmKpi,
batchEdit: XmKpiApi.batchEditXmKpi,
},
project:null,
}

View File

@@ -0,0 +1,380 @@
<template>
<MdpTree
ref="nodeTree"
title="kpi"
showCheckbox
:props="props"
:load="listXmKpi"
:del="delXmKpi"
:batchDel="batchDelXmKpi"
:multiple="multiple"
:showConfirm="showConfirm"
:hidden="hiddenCpd"
:clearCacheFun="clearCache"
@addTopNode="(cb) => onAddTopClick(cb)"
@editNode="(d, cb, subcb) => onEditClick(d, cb, subcb)"
@addSubNode="(p, cb) => onAddSubClick(p, cb)"
@changePid="(cks,cb) => onChangePidClick(cks,cb)"
@confirm = "(d)=>onConfirm(d)"
@check-change="(d,c,i)=>$emit('check-change',d,c,i)"
@node-click="(d,n,c)=>$emit('node-click',d,n,c)"
rootId="0"
:draggable="true"
:sortFun="sortFun"
>
<template #topToolbar>
<xm-project-select width="250px" :isTpl="isTpl"
v-model="filters.projectId" :collect-id="xmCollect?.id"
v-if="!selProject || !selProject.id"
ref="xmProjectSelect1"
:link-iteration-id="xmIteration?xmIteration.id:null" :link-product-id="xmProduct?xmProduct.id:null"
@change3="onProjectSelected"
@clear="onProjectClearSelect"
:clearable="(xmCollect?.id)||(!clearable?false:true)"
/>
</template>
<template #nodeName="{ data }">
<el-space v-if="data?.id">
<icon
:icon="
listXmKpiIcon(data)
"
/>
<MdpSelect
size="small"
show-style="tag"
itemCode="kstatus"
label="状态"
v-model="data.kstatus"
disabled
/><span :style="{ borderRadius: '30px', color: data.initRate >= 100 ? 'green' : 'blue' }"
>{{ formatRate(data.initRate || 0) }}% </span
>
<div> {{ "(" + (data.childrenCnt||0) +")" }} {{ data.kpiName }}</div>
</el-space>
</template>
<template #moreBtn>
<el-button type="primary" @click="$refs['tplKpiDialog'].open()">从模板导入</el-button>
</template>
<template #nodeToolbar="{ data }">
<el-button @click="calcProgress(data)" title="对当前节点及所有上级节点进行逐层进度统计" type="warning" plain>统计</el-button>
</template>
</MdpTree>
<!--编辑 XmKpi xm_project_menu界面-->
<mdp-dialog ref="editDialog" width="100%" fullscreen append-to-body :close-on-click-modal="false" title="编辑kpi">
<template #default="{ visible, data, dialog }">
<XmKpiEdit
:formData="data.formData"
:visible="visible"
:xm-project="project"
:xm-product="xmProduct"
@cancel="dialog.close()"
@submit="data.callback"
@add-sub-task="data.addSubCallback"
@fields-change="(res,isOk,params,row)=>data.callback(row)"
/>
</template>
</mdp-dialog>
<!--新增 XmKpi xm_project_menu界面-->
<mdp-dialog ref="addDialog" fullscreen append-to-body :close-on-click-modal="false" title="新增kpi">
<template #default="{visible, data, dialog }">
<XmKpiAdd
:visible="visible"
:parent-task="data.parentKpi"
:formData="data.formData"
:xm-product="xmProduct"
:xm-project="project"
@cancel="dialog.close()"
@submit="data.callback"
/>
</template>
</mdp-dialog>
<XmKpiByTpl :sel-project="project" ref="tplKpiDialog" @importTpl="onImportTpl" v-if="project?.id"/>
</template>
<script>
import util from '@/components/mdp-ui/js/util' //全局公共库
import {
delXmKpi,
batchDelXmKpi,
listXmKpi,
batchChangeParentKpi,
batchImportKpiFromTemplate,
calcProgress,
} from '@/api/xm/pro/xmKpi'
//新增界面
import { mapState } from 'pinia'
import { useUserStore } from '@/store/modules/user'
import { ElMessageBox } from 'element-plus'
// 创建一个异步组件它会从一个外部API动态导入组件
const XmKpiAdd = defineAsyncComponent(() =>
import('./XmKpiEdit.vue') // 假设LazyComponent.vue是你想要懒加载的组件
);// 创建一个异步组件它会从一个外部API动态导入组件
const XmKpiEdit = defineAsyncComponent(() =>
import('./XmKpiEdit.vue') // 假设LazyComponent.vue是你想要懒加载的组件
);
import XmKpiByTpl from './XmKpiByTpl.vue'
const XmKpiTreeMap = new Map()
export default {
props: ['xmCollect','selProject', 'xmProduct', 'subOpType','multiple','showConfirm','hidden','params','projectRequired','clearable','isTpl'],
emits:['importTemplate', 'checkChange', 'projectSelect', 'projectClear','','addTopNode','importTop','importSub','editNode','addSubNode','changePid','confirm','nodeClick'],
computed: {
...mapState(useUserStore, ['userInfo', 'roles']),
hiddenCpd(){
var isSelect=this.subOpType=='select'
var hidden ={
batchDel: true,
del:isSelect,
changePid: isSelect,
addTop: isSelect,
addSub: isSelect,
edit: isSelect,
filter: false,
page: true,
}
hidden=Object.assign(hidden,this.hidden)
return hidden
},
projectKey(){
return this.xmCollect?.id+'-'+this.xmProduct?.id+'-project-select-id'
}
},
watch: {
xmProduct: function () {
this.$refs.nodeTree.refresh()
},
},
data() {
return {
load:{init:false},
filters: {
projectId: ''
},
project:null,
props:{
id: 'id', pid: 'parentId', label: 'kpiName' ,
isLeaf:(n,node)=>{
return n.childrenCnt<=0
}
},
currPhase:{},
projectPhasePlansDict:[],
ktypeDict:[],
}
}, //end data
methods: {
onConfirm(d){
this.$emit('confirm',d,this.project)
this.$emit('select',d,this.project)
},
calcIcon(ktype){
let o=this.ktypeDict.find(k=>k.id==ktype)
return o?o.icon:'ep:stopwatch'
},
calcName(ktype){
let o=this.ktypeDict.find(k=>k.id==ktype)
return o?o.kpiName:'kpi'
},
sortFun:(a,b)=>{
return a.sortLevel-b.sortLevel
},
clearCache(){
XmKpiTreeMap.clear()
},
listXmKpi(params, node) {
params.projectId = this.selProject?.id || this.project?.id
if(this.isTpl){
params.isTpl='1'
}
//params.ntype='1'
if(this.params){
Object.assign(params,this.params)
}
if(!params.projectId){
if(!this.projectRequired){
return new Promise((resolve,reject)=>{
resolve({tips:{isOk:true,msg:"ok"},data:[]})
})
}else{
this.$message.error("请先选择项目")
return new Promise((resolve,reject)=>{
reject('请先选择项目')
})
}
}
let codeKey=util.getCodeKey("tree_get_xm_project_kpi",params)
if(node.level===0){
let datas=XmKpiTreeMap.get(codeKey)
if(datas && datas.length>0){
return new Promise((resolve)=>{
resolve({
tips:{
msg:'ok',
isOk:true,
},
data: datas
})
})
}
}
return new Promise((resolve,reject)=>{
listXmKpi(params).then(res=>{
if(node.level===0){
XmKpiTreeMap.set(codeKey,res.data)
}
resolve(res)
})
})
},
delXmKpi,
batchDelXmKpi,
formatRate(num) {
let precision = 0
return (num * 1).toFixed(precision)
},
//显示编辑界面 XmKpi
onEditClick: function (formData, callback, addSubCallback) {
this.$refs['editDialog'].open({
formData: formData,
callback: callback,
addSubCallback: addSubCallback
})
},
//显示新增界面 XmKpi
onAddTopClick: function (callback) {
let ntype = '1'
var parentKpi = null
var formData = {}
if (!this.initProjectParams(formData)) {
return
}
formData.ntype='1'
this.$refs['addDialog'].open({
formData: formData,
parentKpi: parentKpi,
callback: callback
})
},
initProjectParams(formData, parent) {
if (parent && parent.id) {
formData.projectName = parent.projectName
formData.projectId = parent.projectId
if (this.project && parent.projectId == this.project.id) {
formData.projectName = this.project.kpiName
}
} else {
if(this.selProject && this.selProject.id){
formData.projectId = this.selProject.id
formData.projectName = this.selProject.kpiName
}else if (this.project && this.project?.id) {
formData.projectId = this.project.id
formData.projectName = this.project.kpiName
} else {
this.$notify({
position: 'bottom-left',
showClose: true,
message: '请先选择一个项目',
type: 'warning'
})
return false
}
}
if(this.xmProduct && this.xmProduct.id){
formData.productId=this.xmProduct.id
formData.productName=this.xmProduct.productName
}
return true
},
onAddSubClick: function (parent, callback) {
if(parent.ktype>'2'){
this.$notify({ position: 'bottom-left', showClose: true, message: 'kpi遵循以下规则【企业级 > 部门级 > 项目级 > 个人级】,【个人级api】下不允许再创建子kpi', type: 'error' })
return;
}
var parentKpi = parent
var formData = {}
if (!this.initProjectParams(formData, parent)) {
return
}
formData.ntype='1'
this.$refs['addDialog'].open({
formData: formData,
parentKpi: parentKpi,
callback: callback
})
},
onChangePidClick: function(idLinks,callback){
batchChangeParentKpi(idLinks).then(res=>{
let {tips}=res
if(tips.isOk){
if(callback){
callback(true)
}
this.$message.success(tips.msg)
}else{
this.$message.error(tips.msg)
}
})
},
onProjectSelected: function (project) {
this.project = project
this.$refs.nodeTree.refresh()
this.$emit('project-select', project)
sessionStorage.setItem(this.projectKey,project?.id||'')
},
onProjectClearSelect: function () {
this.project = null
this.$refs.nodeTree.refresh()
this.$emit('project-clear')
sessionStorage.removeItem(this.projectKey)
},
listXmKpiIcon(task){
return this.calcIcon(task.ktype)
},
refresh(){
this.$refs['nodeTree'].refresh()
},
calcProgress(row) {
calcProgress([row.id]).then(res => {
this.refresh()
})
},
onImportTpl(){
this.refresh()
}
}, //end methods
components: {
XmKpiAdd,
XmKpiEdit,
XmKpiByTpl,
//在下面添加其它组件
},
mounted() {
this.project=this.selProject
this.filters.projectId=this.project?.id||sessionStorage.getItem(this.projectKey)||''
this.$mdp.getDict('ktype').then(res=>this.ktypeDict=res)
}
}
</script>
<style lang="scss" />

View File

@@ -1,171 +0,0 @@
<template>
<el-form :model="editForm" label-width="120px" :rules="editFormRules" ref="editFormRef">
<el-form-item label="项目编号" prop="projectId">
<el-input v-model="editForm.projectId" placeholder="项目编号" :maxlength="50" @change="editSomeFields(editForm,'projectId',$event)" :disabled="disField"/>
</el-form-item>
<el-form-item label="机构编码" prop="branchId">
<el-input v-model="editForm.branchId" placeholder="机构编码" :maxlength="50" @change="editSomeFields(editForm,'branchId',$event)" :disabled="disField"/>
</el-form-item>
<el-form-item label="指标编号" prop="kpiIndex">
<el-input v-model="editForm.kpiIndex" placeholder="指标编号" :maxlength="10" @change="editSomeFields(editForm,'kpiIndex',$event)" :disabled="disField"/>
</el-form-item>
<el-form-item label="指标名称" prop="kpiName">
<el-input v-model="editForm.kpiName" placeholder="指标名称" :maxlength="255" @change="editSomeFields(editForm,'kpiName',$event)" :disabled="disField"/>
</el-form-item>
<el-form-item label="最大值" prop="maxValue">
<el-input v-model="editForm.maxValue" placeholder="最大值" :maxlength="20" @change="editSomeFields(editForm,'maxValue',$event)" :disabled="disField"/>
</el-form-item>
<el-form-item label="最小值" prop="minValue">
<el-input v-model="editForm.minValue" placeholder="最小值" :maxlength="20" @change="editSomeFields(editForm,'minValue',$event)" :disabled="disField"/>
</el-form-item>
<el-form-item label="主键" prop="id">
<el-input v-model="editForm.id" placeholder="主键" :maxlength="50" @change="editSomeFields(editForm,'id',$event)" :disabled="disField"/>
</el-form-item>
<el-form-item label="得分" prop="score">
<el-input-number v-model="editForm.score" :min="0" :max="200" :precision="0" @change="editSomeFields(editForm,'score',$event)" :disabled="disField"/>
</el-form-item>
<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>
<el-form-item label="流程状态" prop="bizFlowState">
<el-input v-model="editForm.bizFlowState" placeholder="流程状态" :maxlength="50" @change="editSomeFields(editForm,'bizFlowState',$event)" :disabled="disField"/>
</el-form-item>
<el-form-item label="流程实例编号" prop="bizProcInstId">
<el-input v-model="editForm.bizProcInstId" placeholder="流程实例编号" :maxlength="50" @change="editSomeFields(editForm,'bizProcInstId',$event)" :disabled="disField"/>
</el-form-item>
<el-form-item label="当前值" prop="kpiValue">
<el-input v-model="editForm.kpiValue" placeholder="当前值" :maxlength="20" @change="editSomeFields(editForm,'kpiValue',$event)" :disabled="disField"/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="editForm.remark" placeholder="备注" :maxlength="255" @change="editSomeFields(editForm,'remark',$event)" :disabled="disField"/>
</el-form-item>
<el-form-item label="考核方式" prop="calcType">
<el-input v-model="editForm.calcType" placeholder="考核方式" :maxlength="10" @change="editSomeFields(editForm,'calcType',$event)" :disabled="disField"/>
</el-form-item>
<el-form-item label="下次考核开始时间" prop="nextCalcDate">
<el-date-picker type="date" placeholder="选择日期" v-model="editForm.nextCalcDate" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD" @change="editSomeFields(editForm,'nextCalcDate',$event)" :disabled="disField"/>
</el-form-item>
<el-form-item label="类型" prop="ktype">
<el-input v-model="editForm.ktype" placeholder="类型" :maxlength="10" @change="editSomeFields(editForm,'ktype',$event)" :disabled="disField"/>
</el-form-item>
<el-form-item label="成果附件地址" prop="kresult">
<el-input v-model="editForm.kresult" placeholder="成果附件地址" :maxlength="255" @change="editSomeFields(editForm,'kresult',$event)" :disabled="disField"/>
</el-form-item>
<el-form-item label="当" prop="taskId">
<el-input v-model="editForm.taskId" placeholder="当" :maxlength="50" @change="editSomeFields(editForm,'taskId',$event)" :disabled="disField"/>
</el-form-item>
<el-form-item label="状态" prop="kstatus">
<el-input v-model="editForm.kstatus" placeholder="状态" :maxlength="10" @change="editSomeFields(editForm,'kstatus',$event)" :disabled="disField"/>
</el-form-item>
<el-form-item label="是否附件" prop="kfile">
<el-input v-model="editForm.kfile" placeholder="是否附件" :maxlength="10" @change="editSomeFields(editForm,'kfile',$event)" :disabled="disField"/>
</el-form-item>
<el-form-item label="指标分类" prop="kclass">
<el-input v-model="editForm.kclass" placeholder="指标分类" :maxlength="10" @change="editSomeFields(editForm,'kclass',$event)" :disabled="disField"/>
</el-form-item>
<el-form-item label="审核人编号" prop="kadmUserid">
<el-input v-model="editForm.kadmUserid" placeholder="审核人编号" :maxlength="50" @change="editSomeFields(editForm,'kadmUserid',$event)" :disabled="disField"/>
</el-form-item>
<el-form-item label="审核人名称" prop="kadmUsername">
<el-input v-model="editForm.kadmUsername" placeholder="审核人名称" :maxlength="255" @change="editSomeFields(editForm,'kadmUsername',$event)" :disabled="disField"/>
</el-form-item>
<el-form-item label="自评人编号" prop="kselfUserid">
<el-input v-model="editForm.kselfUserid" placeholder="自评人编号" :maxlength="50" @change="editSomeFields(editForm,'kselfUserid',$event)" :disabled="disField"/>
</el-form-item>
<el-form-item label="自评人名称" prop="kselfUsername">
<el-input v-model="editForm.kselfUsername" placeholder="自评人名称" :maxlength="255" @change="editSomeFields(editForm,'kselfUsername',$event)" :disabled="disField"/>
</el-form-item>
<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="disField"/>
</el-form-item>
<el-form-item label="审核时间" prop="kadmTime">
<el-date-picker type="date" placeholder="选择日期" v-model="editForm.kadmTime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD" @change="editSomeFields(editForm,'kadmTime',$event)" :disabled="disField"/>
</el-form-item>
</el-form>
<div class="footer">
<el-button @click="close" icon="close">关闭</el-button>
<el-button icon="success-filled" v-if="currOpType=='add'|| (currOpType=='edit' && someOpen==false)" v-loading="load.edit" type="primary" @click="saveSubmit" :disabled="disBtn('addBtn') || !checkBtnQx('addBtn',menuDefId) || load.edit">提交</el-button>
</div>
</template>
<script>
import * as XmProjectKpiHisApi from '@/api/xm/pro/xmProjectKpiHis';
import { MdpFormMixin } from '@/components/mdp-ui/mixin/MdpFormMixin.js';
import { mapState } from 'pinia'
import { useUserStore } from '@/store/modules/user'
export default {
name:'XmProjectKpiHisForm',
mixins:[MdpFormMixin],
computed: {
...mapState(useUserStore,['userInfo'])
},
props:{
// 是否开启editSomeField模式
someOpen:{
type: Boolean,
default: true,
},
},
data() {
return {
menuDefId:'',//menu_def.id 菜单表菜单编号,用于按钮权限判断
pkNames:["id", "scoreDate"],//表格主键的java属性名称驼峰命名默认为id,支持多主键
currOpType:'add',//表单 add、edit所有按钮可动、detail-只看不能操作
editFormRules: {
id:[
//{ required: true, message: '此项必填', trigger: 'change' },
//{ min: 1,max: 200, message: '长度在1到200之间', trigger: 'change'}
],
scoreDate:[
//{ required: true, message: '此项必填', trigger: 'change' },
//{ min: 1,max: 200, message: '长度在1到200之间', trigger: 'change'}
]
},
editForm: {
projectId:'',branchId:'',kpiIndex:'',kpiName:'',maxValue:'',minValue:'',id:'',score:'',scoreDate:'',bizFlowState:'',bizProcInstId:'',kpiValue:'',remark:'',calcType:'',nextCalcDate:'',ktype:'',kresult:'',taskId:'',kstatus:'',kfile:'',kclass:'',kadmUserid:'',kadmUsername:'',kselfUserid:'',kselfUsername:'',kselfTime:'',kadmTime:''
},
//增删改查(含批量)接口
apis:{
queryById: XmProjectKpiHisApi.queryXmProjectKpiHisById,
add: XmProjectKpiHisApi.addXmProjectKpiHis,
edit: XmProjectKpiHisApi.editXmProjectKpiHis,
editSomeFields: XmProjectKpiHisApi.editSomeFieldsXmProjectKpiHis
},
}
},
methods: {
//由组件扩展添加其它的初始页面的逻辑(mounted+onOpen都会调用此函数建议只添加公共逻辑)
initCurrData(){
},
/**
* 检查参数是否满足调用后台接口的条件
* @returns true / false
*/
preParamCheck(params){
return true;
},
/**
* 对修改的字段进行判断返回false ,将取消更新数据库,由组件扩展
* @param {*} row 当前选中的行
* @param {*} fieldName 修改的字段名
* @param {*} $event 修改后的值
* @param {*} params 将要提交服务器的参数
* @returns true/false 返回false ,将取消更新数据库
*/
editSomeFieldsCheck(row,fieldName,$event,params){
params[fieldName]=$event
return true;
},
},
mounted() {
}
}
</script>
<style scoped>
</style>

View File

@@ -1,219 +0,0 @@
<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>
</template>
<el-space wrap>
<el-input v-model="filters.id" placeholder="主键" clearable title="支持>、<、 >=、<=、!=、*字符*、$IS NULL、$IN 1,2,3、$between 1,5等操作符"/>
<el-input v-model="filters.scoreDate" 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>
<!--列表 XmProjectKpiHis 项目或任务关键指标考核-->
<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>
</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')" 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="kpiIndex" label="指标编号" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('kpiIndex')" sortable/>
<el-table-column prop="kpiName" label="指标名称" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('kpiName')" sortable/>
<el-table-column prop="maxValue" label="最大值" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('maxValue')" sortable/>
<el-table-column prop="minValue" label="最小值" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('minValue')" sortable/>
<el-table-column prop="score" label="得分" min-width="120" show-overflow-tooltip col-type="Integer" v-if="showCol('score')" 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="kpiValue" label="当前值" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('kpiValue')" 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="calcType" label="考核方式" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('calcType')" sortable/>
<el-table-column prop="nextCalcDate" label="下次考核开始时间" min-width="120" show-overflow-tooltip col-type="Date" v-if="showCol('nextCalcDate')" sortable/>
<el-table-column prop="ktype" label="类型" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('ktype')" sortable/>
<el-table-column prop="kresult" label="成果附件地址" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('kresult')" sortable/>
<el-table-column prop="taskId" label="当" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('taskId')" sortable/>
<el-table-column prop="kstatus" label="状态" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('kstatus')" sortable/>
<el-table-column prop="kfile" label="是否附件" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('kfile')" sortable/>
<el-table-column prop="kclass" label="指标分类" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('kclass')" 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="kselfUsername" label="自评人名称" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('kselfUsername')" sortable/>
<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="id" label="主键" min-width="120" show-overflow-tooltip col-type="String" v-if="showCol('id')" sortable/>
<el-table-column prop="scoreDate" label="评分日期" min-width="120" show-overflow-tooltip col-type="Date" v-if="showCol('scoreDate')" 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;"
/>
<!--新增修改明细 XmProjectKpiHis 项目或任务关键指标考核界面-->
<mdp-dialog ref="formDlg" :title="menuDefName" width="80%">
<template v-slot="{visible,data}">
<XmProjectKpiHisForm ref="XmProjectKpiHisForm" :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 XmProjectKpiHisApi from '@/api/xm/pro/xmProjectKpiHis';
import XmProjectKpiHisForm from'./Form.vue';//新增修改明细界面
import { mapState } from 'pinia'
import { useUserStore } from '@/store/modules/user'
export default {
name:'XmProjectKpiHisMng',
mixins:[MdpTableMixin],
components: {
XmProjectKpiHisForm
},
computed: {
...mapState(useUserStore,['userInfo'])
},
props:{
// 是否开启editSomeField模式
someOpen:{
type: Boolean,
default: true,
},
},
data() {
return {
menuDefId:'',//menu_def.id 菜单表菜单编号,用于按钮权限判断
menuDefName:'项目或任务关键指标考核',//menu_def.name 功能名称用于导出excel等文件名
pkNames:["id", "scoreDate"],//表格主键的java属性名称驼峰命名默认为id,支持多主键
currOpType:'mng',//表格 mng-综合管理具有最大权限所有按钮可动、detail-只看不能操作
filters:{//查询参数
},
defaultFilters:{//默认查询参数,第一次打开界面的时候用到,恢复默认值的时候用到
},
pageInfo:{//分页数据
total:0,//服务器端收到0时会自动计算总记录数如果上传>0的不自动计算。
pageSize: this.pageable?10:1500,//每页数据
count:false,//是否需要重新计算总记录数
pageNum:1,//当前页码、从1开始计算
orderFields:[],//排序列 如 ['sex','student_id'],必须为数据库字段
orderDirs:[]//升序 asc,降序desc 如 性别 升序、学生编号降序 ['asc','desc']
},
//增删改查(含批量)接口
apis:{
list: XmProjectKpiHisApi.listXmProjectKpiHis,
add: XmProjectKpiHisApi.addXmProjectKpiHis,
del: XmProjectKpiHisApi.delXmProjectKpiHis,
edit: XmProjectKpiHisApi.editXmProjectKpiHis,
editSomeFields: XmProjectKpiHisApi.editSomeFieldsXmProjectKpiHis,
batchAdd: XmProjectKpiHisApi.batchAddXmProjectKpiHis,
batchDel: XmProjectKpiHisApi.batchDelXmProjectKpiHis,
batchEdit: XmProjectKpiHisApi.batchEditXmProjectKpiHis,
}
}
},
methods: {
//页面初始化需要配置的特殊逻辑写这里
initCurrData(){
this.searchTableDatas();
},
/**
* 检查参数是否满足调用后台接口的条件
*
* @param params 提交给后台的参数池,map类型
* @returns true / false
*/
preQueryParamCheck(params){
return true;
},
//页面数据加载完后需要对数据进行加工处理的
afterList(tableDatas,isOk,apiName){
},
/**
* 对修改的字段进行判断返回false ,将取消更新数据库
* @param {*} row 当前选中的行
* @param {*} fieldName 修改的字段名
* @param {*} $event 修改后的值
* @param {*} params 将要提交服务器的参数
* @returns true/false 返回false ,将取消更新数据库
*/
editSomeFieldsCheck(row,fieldName,$event,params){
params[fieldName]=$event
return true;
},
},
mounted() {
}
}
</script>
<style scoped>
</style>