Browse Source

优化

master
陈裕财 4 years ago
parent
commit
44907b88da
  1. 8
      src/api/xm/core/xmProjectGroup.js
  2. 7
      src/api/xm/core/xmProjectGroupUser.js
  3. 2
      src/views/xm/core/xmProject/XmProjectAdd.vue
  4. 4
      src/views/xm/core/xmProject/XmProjectEdit.vue
  5. 114
      src/views/xm/core/xmProjectGroup/XmProjectGroupAdd.vue
  6. 183
      src/views/xm/core/xmProjectGroup/XmProjectGroupEdit.vue
  7. 491
      src/views/xm/core/xmProjectGroup/XmProjectGroupMng.vue
  8. 211
      src/views/xm/core/xmProjectGroup/XmProjectGroupOkr.vue
  9. 10
      src/views/xm/core/xmProjectGroup/XmProjectGroupSelect.vue
  10. 151
      src/views/xm/core/xmProjectGroupUser/XmProjectGroupUserEdit.vue
  11. 175
      src/views/xm/core/xmProjectGroupUser/XmProjectGroupUserMng.vue

8
src/api/xm/core/xmProjectGroup.js

@ -4,10 +4,11 @@ import config from '@/common/config'
let base = config.getCoreBasePath();
/**
* xm_project_group
*1 默认只开放普通查询所有查询只要上传 分页参数 {currentPage:当前页码从1开始,pageSize:每页记录数,total:总记录数如果是0后台会自动计算总记录数非0不会自动计算}后台都会自动按分页查询 其它 api用到再打开没用到的api请注释掉
*2 查询新增修改的参数格式 params={id:'主键 主键',groupName:'团队名称',projectId:'项目编号'}
*2 查询新增修改的参数格式 params={id:'主键 主键',groupName:'团队名称',projectId:'项目编号-属于产品线则可为空',pgTypeId:'项目团队类型编号',pgTypeName:'团队类型名称',leaderUserid:'团队负责人',leaderUsername:'负责人姓名',ctime:'创建时间',ltime:'更新时间',productId:'产品编号,属于项目组的团队则可为空',branchId:'机构编号',pgClass:'团队类别0项目1产品',pgroupId:'上级团队编号',lvl:'级别0级1级2级3级4级',pidPaths:'上级编号路径逗号分割,0,开始,本组编号+逗号结束',isTpl:'是否为模板',assUserid:'副组长编号',assUsername:'副组长姓名',childrenCnt:'下级团队数量',userCnt:'组员数量',qxCode:'权限码',calcWorkload:'是否计算工作量0否1是',ntype:'节点类型0管理团队、1执行团队'}
**/
//普通查询 条件之间and关系
@ -28,7 +29,8 @@ export const editXmProjectGroup = params => { return axios.post(`${base}/xm/core
//新增一条xm_project_group
export const addXmProjectGroup = params => { return axios.post(`${base}/xm/core/xmProjectGroup/add`, params); };
export const updateGroup = params => { return axios.post(`${base}/xm/core/xmProjectGroup/updateGroup`, params); };
export const getGroups = params => { return axios.get(`${base}/xm/core/xmProjectGroup/getGroups`, { params: params }); };
export const getProjectGroup = params => { return axios.get(`${base}/xm/core/xmProjectGroup/getGroup`, { params: params }); };

7
src/api/xm/core/xmProjectGroupUser.js

@ -4,10 +4,11 @@ import config from '@/common/config'
let base = config.getCoreBasePath();
/**
* xm_project_group_user
*1 默认只开放普通查询所有查询只要上传 分页参数 {currentPage:当前页码从1开始,pageSize:每页记录数,total:总记录数如果是0后台会自动计算总记录数非0不会自动计算}后台都会自动按分页查询 其它 api用到再打开没用到的api请注释掉
*2 查询新增修改的参数格式 params={id:'主键 主键',groupId:'团队编号',userid:'团队成员编号',username:'团队成员'}
*2 查询新增修改的参数格式 params={groupId:'团队编号 主键',userid:'团队成员编号 主键',joinTime:'加入时间',username:'团队成员',outTime:'离队时间',status:'当前状态0参与中1已退出团队',obranchId:'组员原归属机构编号',isPri:'是否私人加入0否1是',seqNo:'排序号--从1开始',projectId:'项目编号',productId:'产品编号',pgClass:'0-项目,1-产品'}
**/
//普通查询 条件之间and关系
@ -16,10 +17,10 @@ export const listXmProjectGroupUser = params => { return axios.get(`${base}/xm/c
//模糊查询xm_project_group_user 条件之间or关系
//export const listXmProjectGroupUserKey = params => { return axios.get(`${base}/xm/core/xmProjectGroupUser/listKey`, { params: params }); };
//删除一条xm_project_group_user params={id:'主键 主键'}
//删除一条xm_project_group_user params={groupId:'团队编号 主键',userid:'团队成员编号 主键'}
export const delXmProjectGroupUser = params => { return axios.post(`${base}/xm/core/xmProjectGroupUser/del`,params); };
//批量删除xm_project_group_user params=[{id:'主键 主键'}]
//批量删除xm_project_group_user params=[{groupId:'团队编号 主键',userid:'团队成员编号 主键'}]
export const batchDelXmProjectGroupUser = params => { return axios.post(`${base}/xm/core/xmProjectGroupUser/batchDel`, params); };
//修改一条xm_project_group_user记录

2
src/views/xm/core/xmProject/XmProjectAdd.vue

@ -144,7 +144,7 @@
import XmProjectGroupFormwork from '../xmProjectGroupFormwork/XmProjectGroupFormwork';
import { getProjectGroup } from '@/api/xm/core/xmProjectGroup';
import { getGroups } from '@/api/xm/core/xmProjectGroup';
export default {
computed: {

4
src/views/xm/core/xmProject/XmProjectEdit.vue

@ -141,7 +141,7 @@
import XmProjectGroupFormwork from '../xmProjectGroupFormwork/XmProjectGroupFormwork';
import { getProjectGroup } from '@/api/xm/core/xmProjectGroup';
import { getGroups } from '@/api/xm/core/xmProjectGroup';
import html2canvas from 'html2canvas'
export default {
@ -440,7 +440,7 @@
let params = {};
params.projectId = this.editForm.id;
params.branchId = this.userInfo.branchId;
getProjectGroup(params).then((res) => {
getGroups(params).then((res) => {
var tips=res.data.tips;
if(tips.isOk){
this.xmProjectGroups = res.data.data;

114
src/views/xm/core/xmProjectGroup/XmProjectGroupAdd.vue

@ -1,114 +0,0 @@
<template>
<section class="page-container page-full-height padding border">
<el-row>
<!--新增界面 XmProjectGroup xm_project_group-->
<el-form :model="addForm" label-width="120px" :rules="addFormRules" ref="addForm">
<el-form-item label="主键" prop="id">
<el-input v-model="addForm.id" placeholder="主键" ></el-input>
</el-form-item>
<el-form-item label="团队名称" prop="groupName">
<el-input v-model="addForm.groupName" placeholder="团队名称" ></el-input>
</el-form-item>
<el-form-item label="项目编号" prop="projectId">
<el-input v-model="addForm.projectId" placeholder="项目编号" ></el-input>
</el-form-item>
<el-form-item>
<el-col :span="24" :offset="8">
<el-button @click.native="handleCancel">取消</el-button>
<el-button v-loading="load.add" type="primary" @click.native="addSubmit" :disabled="load.add==true">提交</el-button>
</el-col>
</el-form-item>
</el-form>
</el-row>
</section>
</template>
<script>
import util from '@/common/js/util';//
//import { listOption } from '@/api/mdp/meta/itemOption';//
import { addXmProjectGroup } from '@/api/xm/core/xmProjectGroup';
import { mapGetters } from 'vuex'
export default {
computed: {
...mapGetters([
'userInfo','roles'
])
},
props:['xmProjectGroup','visible'],
watch: {
'xmProjectGroup':function( xmProjectGroup ) {
this.addForm = xmProjectGroup;
},
'visible':function(visible) {
if(visible==true){
//
}
}
},
data() {
return {
options:{},// params=[{categoryId:'0001',itemCode:'sex'}] {'sex':[{optionValue:'1',optionName:'',seqOrder:'1',fp:'',isDefault:'0'},{optionValue:'2',optionName:'',seqOrder:'2',fp:'',isDefault:'0'}]}
load:{ list: false, edit: false, del: false, add: false },//...
addFormRules: {
id: [
//{ required: true, message: '', trigger: 'blur' }
]
},
// xm_project_group
addForm: {
id:'',groupName:'',projectId:''
}
/**begin 在下面加自定义属性,记得补上面的一个逗号**/
/**end 在上面加自定义属性**/
}//end return
},//end data
methods: {
// @cancel="addFormVisible=false"
handleCancel:function(){
this.$refs['addForm'].resetFields();
this.$emit('cancel');
},
//XmProjectGroup xm_project_group @submit="afterAddSubmit"
addSubmit: function () {
this.$refs.addForm.validate((valid) => {
if (valid) {
this.$confirm('确认提交吗?', '提示', {}).then(() => {
this.load.add=true
let params = Object.assign({}, this.addForm);
addXmProjectGroup(params).then((res) => {
this.load.add=false
var tips=res.data.tips;
if(tips.isOk){
this.$refs['addForm'].resetFields();
this.$emit('submit');// @submit="afterAddSubmit"
}
this.$message({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' });
}).catch( err => this.load.add=false);
});
}
});
}
/**begin 在下面加自定义方法,记得补上面的一个逗号**/
/**end 在上面加自定义方法**/
},//end method
components: {
// 'xm-project-group-edit':XmProjectGroupEdit
},
mounted() {
this.addForm=Object.assign(this.addForm, this.xmProjectGroup);
/**在下面写其它函数***/
}//end mounted
}
</script>
<style scoped>
</style>

183
src/views/xm/core/xmProjectGroup/XmProjectGroupEdit.vue

@ -1,104 +1,189 @@
<template>
<section class="page-container page-full-height padding border">
<el-row>
<section class="page-container padding">
<el-row class="page-header">
</el-row>
<el-row class="page-main">
<!--编辑界面 XmProjectGroup xm_project_group-->
<el-form :model="editForm" label-width="120px" :rules="editFormRules" ref="editForm">
<el-form :model="editForm" label-width="120px" :rules="editFormRules" ref="editFormRef">
<el-form-item label="主键" prop="id">
<el-input v-model="editForm.id" placeholder="主键"></el-input>
</el-form-item>
<el-form-item label="团队名称" prop="groupName">
<el-input v-model="editForm.groupName" placeholder="团队名称"></el-input>
</el-form-item>
<el-form-item label="项目编号" prop="projectId">
<el-input v-model="editForm.projectId" placeholder="项目编号"></el-input>
<el-form-item label="项目编号-属于产品线则可为空" prop="projectId">
<el-input v-model="editForm.projectId" placeholder="项目编号-属于产品线则可为空"></el-input>
</el-form-item>
<el-form-item>
<el-col :span="24" :offset="8">
<el-button @click.native="handleCancel">取消</el-button>
<el-button v-loading="load.edit" type="primary" @click.native="editSubmit" :disabled="load.edit==true">提交</el-button>
</el-col>
<el-form-item label="项目团队类型编号" prop="pgTypeId">
<el-input v-model="editForm.pgTypeId" placeholder="项目团队类型编号"></el-input>
</el-form-item>
<el-form-item label="团队类型名称" prop="pgTypeName">
<el-input v-model="editForm.pgTypeName" placeholder="团队类型名称"></el-input>
</el-form-item>
<el-form-item label="团队负责人" prop="leaderUserid">
<el-input v-model="editForm.leaderUserid" placeholder="团队负责人"></el-input>
</el-form-item>
<el-form-item label="负责人姓名" prop="leaderUsername">
<el-input v-model="editForm.leaderUsername" placeholder="负责人姓名"></el-input>
</el-form-item>
<el-form-item label="创建时间" prop="ctime">
<el-date-picker type="date" placeholder="选择日期" v-model="editForm.ctime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
<el-form-item label="更新时间" prop="ltime">
<el-date-picker type="date" placeholder="选择日期" v-model="editForm.ltime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
<el-form-item label="产品编号,属于项目组的团队则可为空" prop="productId">
<el-input v-model="editForm.productId" placeholder="产品编号,属于项目组的团队则可为空"></el-input>
</el-form-item>
<el-form-item label="机构编号" prop="branchId">
<el-input v-model="editForm.branchId" placeholder="机构编号"></el-input>
</el-form-item>
<el-form-item label="团队类别0项目1产品" prop="pgClass">
<el-input v-model="editForm.pgClass" placeholder="团队类别0项目1产品"></el-input>
</el-form-item>
<el-form-item label="上级团队编号" prop="pgroupId">
<el-input v-model="editForm.pgroupId" placeholder="上级团队编号"></el-input>
</el-form-item>
<el-form-item label="级别0级1级2级3级4级" prop="lvl">
<el-input-number v-model="editForm.lvl" :min="0" :max="200"></el-input-number>
</el-form-item>
<el-form-item label="上级编号路径逗号分割,0,开始,本组编号+逗号结束" prop="pidPaths">
<el-input v-model="editForm.pidPaths" placeholder="上级编号路径逗号分割,0,开始,本组编号+逗号结束"></el-input>
</el-form-item>
<el-form-item label="是否为模板" prop="isTpl">
<el-input v-model="editForm.isTpl" placeholder="是否为模板"></el-input>
</el-form-item>
<el-form-item label="副组长编号" prop="assUserid">
<el-input v-model="editForm.assUserid" placeholder="副组长编号"></el-input>
</el-form-item>
<el-form-item label="副组长姓名" prop="assUsername">
<el-input v-model="editForm.assUsername" placeholder="副组长姓名"></el-input>
</el-form-item>
<el-form-item label="下级团队数量" prop="childrenCnt">
<el-input-number v-model="editForm.childrenCnt" :min="0" :max="200"></el-input-number>
</el-form-item>
<el-form-item label="组员数量" prop="userCnt">
<el-input-number v-model="editForm.userCnt" :min="0" :max="200"></el-input-number>
</el-form-item>
<el-form-item label="权限码" prop="qxCode">
<el-input v-model="editForm.qxCode" placeholder="权限码"></el-input>
</el-form-item>
<el-form-item label="是否计算工作量0否1是" prop="calcWorkload">
<el-input v-model="editForm.calcWorkload" placeholder="是否计算工作量0否1是"></el-input>
</el-form-item>
<el-form-item label="节点类型0管理团队、1执行团队" prop="ntype">
<el-input v-model="editForm.ntype" placeholder="节点类型0管理团队、1执行团队"></el-input>
</el-form-item>
</el-form>
</el-row>
<el-row class="page-bottom bottom-fixed">
<el-button @click.native="handleCancel">取消</el-button>
<el-button v-loading="load.edit" type="primary" @click.native="saveSubmit" :disabled="load.edit==true">提交</el-button>
</el-row>
</section>
</template>
<script>
import util from '@/common/js/util';//
//import { listOption } from '@/api/mdp/meta/itemOption';//
import { editXmProjectGroup } from '@/api/xm/core/xmProjectGroup';
import config from "@/common/config"; //import
import { getDicts,initSimpleDicts,initComplexDicts } from '@/api/mdp/meta/item';//
import { addXmProjectGroup,editXmProjectGroup } from '@/api/xm/core/xmProjectGroup';
import { mapGetters } from 'vuex'
export default {
export default {
name:'xmProjectGroupEdit',
components: {
},
computed: {
...mapGetters([
'userInfo','roles'
])
...mapGetters([ 'userInfo' ]),
},
props:['xmProjectGroup','visible'],
props:['xmProjectGroup','visible','opType'],
watch: {
'xmProjectGroup':function( xmProjectGroup ) {
this.editForm = xmProjectGroup;
if(xmProjectGroup){
this.editForm = xmProjectGroup;
}
},
'visible':function(visible) {
if(visible==true){
//
this.initData()
}
}
},
data() {
return {
options:{},// params=[{categoryId:'0001',itemCode:'sex'}] {'sex':[{optionValue:'1',optionName:'',seqOrder:'1',fp:'',isDefault:'0'},{optionValue:'2',optionName:'',seqOrder:'2',fp:'',isDefault:'0'}]}
load:{ list: false, edit: false, del: false, add: false },//...
currOpType:'add',//add/edit
load:{ list: false, edit: false, del: false, add: false },//...
dicts:{},// params={categoryId:'all',itemCodes:['sex']} {sex: [{id:'1',name:''},{id:'2',name:''}]}
editFormRules: {
id: [
//{ required: true, message: '', trigger: 'blur' }
]
},
// XmProjectGroup xm_project_group
editForm: {
id:'',groupName:'',projectId:''
}
/**begin 在下面加自定义属性,记得补上面的一个逗号**/
/**end 在上面加自定义属性**/
id:'',groupName:'',projectId:'',pgTypeId:'',pgTypeName:'',leaderUserid:'',leaderUsername:'',ctime:'',ltime:'',productId:'',branchId:'',pgClass:'',pgroupId:'',lvl:'',pidPaths:'',isTpl:'',assUserid:'',assUsername:'',childrenCnt:'',userCnt:'',qxCode:'',calcWorkload:'',ntype:''
},
}//end return
},//end data
methods: {
// @cancel="editFormVisible=false"
handleCancel:function(){
this.$refs['editForm'].resetFields();
this.$refs['editFormRef'].resetFields();
this.$emit('cancel');
},
//XmProjectGroup xm_project_group@submit="afterEditSubmit"
editSubmit: function () {
this.$refs.editForm.validate((valid) => {
//XmProjectGroup xm_project_group@submit="afterEditSubmit"
saveSubmit: function () {
this.$refs.editFormRef.validate((valid) => {
if (valid) {
this.$confirm('确认提交吗?', '提示', {}).then(() => {
this.load.edit=true
let params = Object.assign({}, this.editForm);
editXmProjectGroup(params).then((res) => {
this.load.edit=false
var tips=res.data.tips;
if(tips.isOk){
this.$refs['editForm'].resetFields();
this.$emit('submit');// @submit="afterEditSubmit"
}
this.$message({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' });
}).catch( err =>this.load.edit=false);
let params = Object.assign({}, this.editForm);
var func=addXmProjectGroup
if(this.currOpType=='edit'){
func=editXmProjectGroup
}
func(params).then((res) => {
this.load.edit=false
var tips=res.data.tips;
if(tips.isOk){
this.editForm=res.data.data
this.initData()
this.currOpType="edit";
this.$emit('submit');// @submit="afterAddSubmit"
}
this.$message({ showClose:true, message: tips.msg, type: tips.isOk?'success':'error' });
}).catch( err =>this.load.edit=false);
});
}else{
this.$message({ showClose:true, message: "表单验证不通过,请修改表单数据再提交", type: 'error' });
}
});
}
/**begin 在下面加自定义方法,记得补上面的一个逗号**/
/**end 在上面加自定义方法**/
},
initData: function(){
this.currOpType=this.opType
if(this.xmProjectGroup){
this.editForm = Object.assign({},this.xmProjectGroup);
}
if(this.opType=='edit'){
}else{
}
},
},//end method
components: {
// 'xm-project-group-edit':XmProjectGroupEdit
},
mounted() {
this.editForm=Object.assign(this.editForm, this.xmProjectGroup);
this.$nextTick(() => {
//initSimpleDicts('all',['sex','gradeLvl']).then(res=>this.dicts=res.data.data);
this.initData()
});
}
}

491
src/views/xm/core/xmProjectGroup/XmProjectGroupMng.vue

@ -1,8 +1,7 @@
<template>
<section class="page-container padding">
<section class="page-container border padding">
<el-row v-if="!isSelectSingleUser && !isSelectMultiUser">
<el-button type="primary" v-if="!groups||groups.length==0" @click="showGroupFormwork" icon="el-icon-plus">导入项目组</el-button>
<el-button type="primary" v-if="!xmProjectGroups||xmProjectGroups.length==0" @click="showAdd" icon="el-icon-plus">导入项目组</el-button>
<el-button type="plain" @click="showGroupState" icon="el-icon-s-data">小组进度</el-button>
<el-button type="plain" @click="xmRecordVisible=true" icon="el-icon-document">变化日志</el-button>
<el-button type="plain" @click="doSearchImGroupsByProjectId" icon="el-icon-document">绑定即聊情况</el-button>
@ -22,63 +21,206 @@
direction="horizontal"
></vue-okr-tree>
</el-row>
<el-dialog
title="操作"
:visible.sync="groupOperSelectVisible"
width="30%" >
<el-row>
<el-button @click="showAdd">新增一级小组</el-button>
<el-button @click="showAddSub(editForm)">新增下级小组</el-button>
<el-button type="primary" @click="showEdit(editForm)">小组明细</el-button>
<el-button @click="handleDel(editForm)">删除小组</el-button>
</el-row>
</el-dialog>
<el-row>
<!--编辑 XmProjectGroup xm_project_group界面-->
<el-drawer title="编辑xm_project_group" :visible.sync="editFormVisible" size="60%" append-to-body :close-on-click-modal="false">
<xm-project-group-edit op-type="edit" :xm-project-group="editForm" :visible="editFormVisible" @cancel="editFormVisible=false" @submit="afterEditSubmit"></xm-project-group-edit>
</el-drawer>
<!--新增 XmProjectGroup xm_project_group界面-->
<el-drawer title="新增xm_project_group" :visible.sync="addFormVisible" size="60%" append-to-body :close-on-click-modal="false">
<xm-project-group-edit op-type="add" :visible="addFormVisible" @cancel="addFormVisible=false" @submit="afterAddSubmit"></xm-project-group-edit>
</el-drawer>
<el-dialog
title="操作"
:visible.sync="groupOperSelectVisible"
append-to-body :close-on-click-modal="false"
width="30%" >
<el-row v-if="currNodeType=='project'">
<el-button @click="showAdd" icon="el-icon-plus">新增下级小组</el-button>
</el-row>
<el-row v-if="currNodeType=='product'">
<el-button type="primary" @click="showEdit(editForm)" icon="el-icon-edit">修改小组信息</el-button>
<el-button @click="showAddSub(editForm)" icon="el-icon-plus">新增下级小组</el-button>
<el-button @click="userSelectVisible=true" icon="el-icon-plus" >新增组员</el-button>
<el-button @click="handleDel(editForm)" icon="el-icon-delete">删除小组</el-button>
</el-row>
<el-row v-if="currNodeType=='group'">
<el-button type="primary" @click="showEdit(editForm)" icon="el-icon-edit">修改小组信息</el-button>
<el-button @click="showAddSub(editForm)" icon="el-icon-plus">新增下级小组</el-button>
<el-button @click="userSelectVisible=true" icon="el-icon-plus" >新增组员</el-button>
<el-button @click="handleDel(editForm)" icon="el-icon-delete">删除小组</el-button>
</el-row>
<el-row v-if="currNodeType=='groupUser'">
<el-button type="danger" icon="el-icon-delete" @click="handleDel(editForm)">删除组员</el-button>
</el-row>
</el-dialog>
<el-drawer append-to-body
title="角色说明"
size="60%"
:visible.sync="groupRoleDescVisible"
direction="rtl"
ref="drawer"
>
<el-row class="page-main page-height-90">
<el-collapse>
<el-collapse-item title="项目经理:项目整体、团队、进度、质量、计划、风险、沟通管理等" name="3">
<div>项目立项项目预算项目进度项目成本项目合同项目延期项目预算变更等</div>
<div>团队建立项目管理组建立业务组指定组长组员管理加人减人指派组长</div>
<div>计划建立计划计划预算管理基于计划细化任务迭代计划制定与执行等</div>
<div>任务建立任务删除任务指派责任人任务预算变更任务提交测试测试结果反馈任务结算</div>
<div>质量审核测试方案定时查看质量报告</div>
<div>风险风险预测风险应对措施管理等</div>
<div>需求确保任务与需求的关联关系正确范围正确及时跟进需求的变化 </div>
</el-collapse-item>
<el-collapse-item title="项目管理者: 项目经理、技术经理、项目副经理、技术副经理等具有全项目范围管理权限的管理人员。由项目经理指派。" name="4">
<div>团队建立项目管理组建立业务组指定组长组员管理加人减人指派组长</div>
<div>进度计划建立计划细化计划计划管理计划预算管理等 </div>
<div>任务建立任务删除任务指派责任人任务预算变更任务提交测试测试结果反馈任务结算</div>
<div>质量审核测试方案定时查看质量报告等</div>
<div>风险风险预测风险应对措施管理等</div>
<div>需求确保任务与需求的关联关系正确范围正确及时跟进需求的变化</div>
</el-collapse-item>
<el-collapse-item title="组长:每个小组的组长,由项目管理者指定" name="5">
<div>团队组员管理加人减人</div>
<div>进度计划建立计划细化计划计划管理计划预算管理定期查看小组的工作进度情况各成员的进度情况跟踪</div>
<div>任务建立任务删除任务指派责任人任务预算变更任务提交测试测试结果反馈任务结算</div>
<div>质量审核测试方案定时查看质量报告等</div>
<div>风险风险预测风险应对措施管理等</div>
<div>需求确保任务与需求的关联关系正确范围正确及时跟进需求的变化</div>
</el-collapse-item>
<el-collapse-item title="任务责任人:每个任务的责任人,由组长、项目管理者指定" name="6">
<div> 团队对任务的候选人执行人进行统一管理跟踪</div>
<div>进度计划定期查看负责的任务的进度情况各成员的进度情况跟踪</div>
<div>任务任务预算变更任务提交测试测试结果反馈任务结算</div>
<div>质量审核测试方案定时查看质量报告等</div>
<div>风险风险预测风险应对措施管理等</div>
<div>需求确保任务与需求的关联关系正确范围正确及时跟进需求的变化</div>
</el-collapse-item>
<el-collapse-item title="任务候选人:每个任务的候选人,由任务责任人、组长、项目管理者指定或者由用户自行加入。" name="7">
<div> 团队查看团队成员加入任务候选人队列退出任务候选人队列不能加入具体的小组</div>
<div>进度计划定期查看已关注的任务的进度情况</div>
<div>任务关注任务取消关注任务查询任务加入任务候选人队列退出候选人队列等 </div>
<div>需求查看相关的需求及其滚动信息</div>
</el-collapse-item>
<el-collapse-item title="任务执行人:每个任务的具体执行人,由任务责任人、组长、项目管理者指定。" name="8">
<div> 团队查看团队成员加入业务小组退出小组</div>
<div>进度计划定期查看已执行的任务的进度情况</div>
<div>任务关注任务取消关注任务查询任务加入任务候选人队列退出候选人队列提交测试提交结算申请等</div>
<div>需求查看相关的需求及其滚动信息</div>
</el-collapse-item>
<el-collapse-item title="产品经理" name="9">
<div> 团队查看团队成员加入业务小组退出小组</div>
<div>进度计划定期查看已执行的任务的进度情况</div>
<div>任务关注任务取消关注任务查询任务加入任务候选人队列退出候选人队列提交测试提交结算申请等</div>
<div>需求查看相关的需求及其滚动信息</div>
</el-collapse-item>
<el-collapse-item title="测试经理" name="10">
</el-collapse-item>
<el-collapse-item title="开发者" name="11">
</el-collapse-item>
<el-collapse-item title="项目管理委员会" name="1">
<div>用户决策根据场景可给予用户操作建议或安全提示但不能代替用户进行决策</div>
<div>结果可控用户可以自由的进行操作包括撤销回退和终止当前操作等</div>
</el-collapse-item>
<el-collapse-item title="客户项目经理" name="2">
<div>用户决策根据场景可给予用户操作建议或安全提示但不能代替用户进行决策</div>
<div>结果可控用户可以自由的进行操作包括撤销回退和终止当前操作等</div>
</el-collapse-item>
</el-collapse>
<el-button @click="groupRoleDescVisible=false">关闭</el-button>
</el-row>
</el-drawer>
<el-drawer append-to-body title="选择员工" :visible.sync="userSelectVisible" size="60%">
<users-select :select-userids="filters.ids?filters.ids.map(i=>i.id):[]" @confirm="onUserSelected" ref="usersSelect"></users-select>
</el-drawer>
<el-drawer v-if="selProject" :title="selProject==null?'操作日志':selProject.name+'团队操作日志'" center :visible.sync="xmRecordVisible" size="50%" :close-on-click-modal="false" append-to-body>
<xm-record :obj-type="'group'" :visible="xmRecordVisible" :project-id="selProject.id" :simple="1"></xm-record>
</el-drawer>
<el-drawer v-if="selProject" :title="selProject==null?'进度':selProject.name+'团队进度'" center :visible.sync="xmProjectGroupStateVisible" size="80%" :close-on-click-modal="false" append-to-body>
<xm-project-group-state-mng :sel-project="selProject" :visible="xmProjectGroupStateVisible" ></xm-project-group-state-mng>
</el-drawer>
</el-row>
</section>
</template>
<script>
import util from '@/common/js/util';//
import {sn} from '@/common/js/sequence';//
//import Sticky from '@/components/Sticky' // header
//import { listOption } from '@/api/mdp/meta/itemOption';//
import { updateGroup,getProjectGroup } from '@/api/xm/core/xmProjectGroup';
import { mapGetters } from 'vuex';
import XmProjectGroupEdit from "./XmProjectGroupEdit"
import config from '@/common/config';//
import { getDicts,initSimpleDicts,initComplexDicts } from '@/api/mdp/meta/item';//
import { listXmProjectGroup, delXmProjectGroup, batchDelXmProjectGroup,getGroups } from '@/api/xm/core/xmProjectGroup';
import XmProjectGroupEdit from './XmProjectGroupEdit';//
import { mapGetters } from 'vuex'
import {VueOkrTree} from 'vue-okr-tree';
import 'vue-okr-tree/dist/vue-okr-tree.css'
import { listImGroup} from '@/api/mdp/im/group/imGroup';
import { publishMessage} from '@/api/mdp/im/imPush';
export default {
import UsersSelect from "@/views/mdp/sys/user/UsersSelect";
import XmProjectGroupStateMng from '../xmProjectGroupState/XmProjectGroupStateMng';//
export default {
name:'xmProjectGroupMng',
components: {
XmProjectGroupEdit,VueOkrTree,UsersSelect,XmProjectGroupStateMng,
},
props:["visible","selProject" ,"isSelectSingleUser","isSelectMultiUser",'xmProduct','xmIteration'],
computed: {
...mapGetters([
'userInfo','roles'
]),
...mapGetters(['userInfo']),
okrTreeData(){
var groups=this.groups;
var groups=this.xmProjectGroups;
groups.forEach(i=>{
i.currNodeType='group'
i.label=i.groupName
if(i.groupUsers){
var groupUsers=i.groupUsers;
groupUsers.forEach(i=>i.label=i.username)
groupUsers.forEach(i=>{
i.label=i.username
i.currNodeType='groupUser'
})
i.children=groupUsers
}
})
var topLabel="组织架构"
var currNodeType=''
var topdata={}
if(this.xmProduct&&this.xmProduct.id){
topLabel=this.xmProduct.name+"-产品组织架构"
currNodeType='product'
topdata=this.xmProduct
}else if(this.selProject && this.selProject.id){
topLabel=this.selProject.name+"-项目组织架构"
currNodeType='project'
topdata=this.selProject
}
var data=[{
...topdata,
label:topLabel,
currNodeType:currNodeType,
children:groups
}
]
return data;
}
},
props: ["selProject" ,"isSelectSingleUser","isSelectMultiUser",'xmProduct','xmIteration'],
watch:{
visible(val){
if(val==true){
this.initData();
this.searchXmProjectGroups()
}
},
selProject(){
this.getXmProjectGroup();
},
@ -91,59 +233,92 @@
},
data() {
return {
load:{ list: false, edit: false, del: false, add: false },//...
/**begin 自定义属性请在下面加 请加备注**/
groupSelectVisible: true,
groups:[],
editForm: {
id:'',groupName:'',projectId:''
filters: {
key: ''
},
xmProjectGroups: [],//
pageInfo:{//
total:0,//0>0
pageSize:10,//
count:false,//
pageNum:1,//1
orderFields:[],// ['sex','student_id']
orderDirs:[]// asc,desc ['asc','desc']
},
load:{ list: false, edit: false, del: false, add: false },//...
sels: [],//
dicts:{
//sex: [{id:'1',name:''},{id:'2',name:''}]
},// params={categoryId:'all',itemCodes:['sex']} {sex: [{id:'1',name:''},{id:'2',name:''}]}
addFormVisible: false,//xmProjectGroup
addForm: {
id:'',groupName:'',projectId:''
id:'',groupName:'',projectId:'',pgTypeId:'',pgTypeName:'',leaderUserid:'',leaderUsername:'',ctime:'',ltime:'',productId:'',branchId:'',pgClass:'',pgroupId:'',lvl:'',pidPaths:'',isTpl:'',assUserid:'',assUsername:'',childrenCnt:'',userCnt:'',qxCode:'',calcWorkload:'',ntype:''
},
editFormVisible: false,//
editForm: {
id:'',groupName:'',projectId:'',pgTypeId:'',pgTypeName:'',leaderUserid:'',leaderUsername:'',ctime:'',ltime:'',productId:'',branchId:'',pgClass:'',pgroupId:'',lvl:'',pidPaths:'',isTpl:'',assUserid:'',assUsername:'',childrenCnt:'',userCnt:'',qxCode:'',calcWorkload:'',ntype:''
},
maxTableHeight:300,
userSelectVisible: false,
xmRecordVisible:false,
xmProjectGroupStateVisible:false,
imGroups:[],
imGroupVisible:false,
groupRoleDescVisible:false,
groupOperSelectVisible:false,
/**end 自定义属性请在上面加 请加备注**/
currNodeType:'',//project/product/iteration/group/groupUser
}
},//end data
methods: {
onGroupSelected(selGroups){
this.load.edit=true
if(selGroups != null){
let groups = [];
selGroups.forEach(i=>{
let group = {
"id":i.id,
"groupName": i.groupName,
"groupUsers": i.groupUsers,
"projectId": i.projectId,
"pgTypeName": i.pgTypeName,
"pgTypeId": i.pgTypeId
};
groups.push(group);
});
if(selGroups.length==0){
this.$message({showClose: true, message: "最少保留一个小组", type: 'error' });
this.load.edit=false
return;
methods: {
handleSizeChange(pageSize) {
this.pageInfo.pageSize=pageSize;
this.getXmProjectGroups();
},
handleCurrentChange(pageNum) {
this.pageInfo.pageNum = pageNum;
this.getXmProjectGroups();
},
// obj.order=ascending/descending, asc/desc ; obj.prop=,
sortChange( obj ){
if(obj.order==null){
this.pageInfo.orderFields=[];
this.pageInfo.orderDirs=[];
}else{
var dir='asc';
if(obj.order=='ascending'){
dir='asc'
}else{
dir='desc';
}
updateGroup(groups).then((res) => {
var tips=res.data.tips;
if(tips.isOk){
//this.groups = res.data.data;
this.$message({showClose: true, message: tips.msg, type: 'success' });
}else{
this.$message({showClose: true, message: tips.msg, type: 'error' });
}
this.getXmProjectGroup();
this.load.edit=false
}).catch( err => this.load.edit = false );
this.pageInfo.orderFields=[util.toLine(obj.prop)];
this.pageInfo.orderDirs=[dir];
}
//this.groupSelectVisible=false;
this.getXmProjectGroups();
},
getXmProjectGroup() {
this.load.list = true;
let params = {
searchXmProjectGroups(){
this.pageInfo.count=true;
this.getXmProjectGroups();
},
// XmProjectGroup xm_project_group
getXmProjectGroups() {
let params = {
pageSize: this.pageInfo.pageSize,
pageNum: this.pageInfo.pageNum,
total: this.pageInfo.total,
count:this.pageInfo.count
};
if(this.pageInfo.orderFields!=null && this.pageInfo.orderFields.length>0){
let orderBys=[];
for(var i=0;i<this.pageInfo.orderFields.length;i++){
orderBys.push(this.pageInfo.orderFields[i]+" "+this.pageInfo.orderDirs[i])
}
params.orderBy= orderBys.join(",")
}
if(this.selProject){
params.projectId=this.selProject.id
}
@ -153,27 +328,169 @@
if(this.xmProduct){
params.productId=this.xmProduct.id
}
getProjectGroup(params).then((res) => {
if(this.filters.key){
params.key=this.filters.key
}
this.load.list = true;
getGroups(params).then((res) => {
var tips=res.data.tips;
if(tips.isOk){
this.groups = res.data.data;
this.pageInfo.total = res.data.total;
this.pageInfo.count=false;
this.xmProjectGroups = res.data.data;
}else{
this.$message({showClose: true, message: tips.msg, type: 'error' });
this.$message({ showClose:true, message: tips.msg, type: 'error' });
}
this.load.list = false;
}).catch( err => this.load.list = false );
},
/**begin 自定义函数请在下面加**/
onUserSelected:function(users){
this.$emit("user-confirm",users);
// XmProjectGroup xm_project_group
showEdit: function ( row,index ) {
this.editFormVisible = true;
this.editForm = Object.assign({}, row);
},
// XmProjectGroup xm_project_group
showAdd: function () {
this.addFormVisible = true;
//this.addForm=Object.assign({}, this.editForm);
},
afterAddSubmit(){
this.addFormVisible=false;
this.pageInfo.count=true;
this.getXmProjectGroups();
},
afterEditSubmit(){
this.editFormVisible=false;
},
//xmProjectGroup
selsChange: function (sels) {
this.sels = sels;
},
//xmProjectGroup
handleDel: function (row,index) {
this.$confirm('确认删除该记录吗?', '提示', {
type: 'warning'
}).then(() => {
this.load.del=true;
let params = { id: row.id };
delXmProjectGroup(params).then((res) => {
this.load.del=false;
var tips=res.data.tips;
if(tips.isOk){
this.pageInfo.count=true;
this.getXmProjectGroups();
}
this.$message({ showClose:true, message: tips.msg, type: tips.isOk?'success':'error' });
}).catch( err => this.load.del=false );
});
},
//xmProjectGroup
batchDel: function () {
this.$confirm('确认删除选中记录吗?', '提示', {
type: 'warning'
}).then(() => {
this.load.del=true;
batchDelXmProjectGroup(this.sels).then((res) => {
this.load.del=false;
var tips=res.data.tips;
if( tips.isOk ){
this.pageInfo.count=true;
this.getXmProjectGroups();
}
this.$message({ showClose:true, message: tips.msg, type: tips.isOk?'success':'error'});
}).catch( err => this.load.del=false );
});
},
showGroupState(){
this.xmProjectGroupStateVisible=true;
},
doSearchImGroupsByProjectId(){
var params={bizPid:this.selProject.id}
listImGroup(params).then(res=>{
this.imGroupVisible=true;
var tips = res.data.tips;
if(tips.isOk){
this.imGroups=res.data.data;
}
this.$message({showClose: true,
message: tips.msg,
type: tips.isOk ? 'success' : 'error'
});
});
},
doCreateImGroup(group){
if(group.groupUsers && group.groupUsers.length>0){
var params={
msgId:sn(),
groupId:group.id,
groupName:group.name,
msgType:'group',
action:'channelGroupCreate',
cuserid:this.userInfo.userid,
cusername:this.userInfo.username,
branchId:this.userInfo.branchId,
bizId:group.id,
bizPid:this.selProject.id,
users:group.groupUsers.map(gu=>{
return {
userid:gu.userid,
username:gu.username
}
})
}
publishMessage(params).then(res=>{
var tips = res.data.tips;
if(tips.isOk){
params.id=params.groupId
this.imGroups.push(params);
}
this.$message({showClose: true,
message: tips.msg,
type: tips.isOk ? 'success' : 'error'
});
})
}else{
that.$message({
message: "组员为空,不允许绑定",
type: 'error'
});
}
},
//
onUserSelected: function(groupUsers) {
this.userSelectVisible = false;
},
delGroupUser(index,vindex) {
},
rowClick: function(row, event, column){
if(event.label!='操作' && event.type!='selection'){
this.showEdit(row)
}
this.$emit('row-click',row, event, column);// @row-click="rowClick"
},
initData: function(){
},
renderCurrentClass (node) {
return 'label-bg-blue'
},
handleNodeClick (data) {
this.groupOperSelectVisible=true;
handleNodeClick (data) {
if(data.currNodeType){
this.currNodeType=data.currNodeType //project/product/iteration/group/groupUser
}else{
this.currNodeType=''
}
this.editForm=data;
this.groupOperSelectVisible=true;
},
renderContent (h, node) {
return (
@ -190,22 +507,18 @@
</div>
)
}
/**end 自定义函数请在上面加**/
},//end methods
components: {
VueOkrTree,XmProjectGroupEdit,
//
},
mounted() {
mounted() {
this.$nextTick(() => {
this.getXmProjectGroup();
});
//initSimpleDicts('all',['sex','gradeLvl']).then(res=>this.dicts=res.data.data);
this.initData()
this.searchXmProjectGroups();
});
}
}
</script>
<style scoped>
</style>

211
src/views/xm/core/xmProjectGroup/XmProjectGroupOkr.vue

@ -0,0 +1,211 @@
<template>
<section class="page-container padding">
<el-row v-if="!isSelectSingleUser && !isSelectMultiUser">
<el-button type="primary" v-if="!groups||groups.length==0" @click="showGroupFormwork" icon="el-icon-plus">导入项目组</el-button>
<el-button type="plain" @click="showGroupState" icon="el-icon-s-data">小组进度</el-button>
<el-button type="plain" @click="xmRecordVisible=true" icon="el-icon-document">变化日志</el-button>
<el-button type="plain" @click="doSearchImGroupsByProjectId" icon="el-icon-document">绑定即聊情况</el-button>
<el-button @click="groupRoleDescVisible=true" icon="el-icon-document">角色说明</el-button>
</el-row>
<el-row v-else>
<el-button type="primary" @click="userConfirm" icon="el-icon-finished">确认选择用户</el-button>
</el-row>
<el-row>
<vue-okr-tree :data="okrTreeData"
show-collapsable
default-expand-all
node-key="id"
current-lable-class-name="crrentClass"
:render-content="renderContent"
@node-click="handleNodeClick"
direction="horizontal"
></vue-okr-tree>
</el-row>
<el-dialog
title="操作"
:visible.sync="groupOperSelectVisible"
width="30%" >
<el-row>
<el-button @click="showAdd">新增一级小组</el-button>
<el-button @click="showAddSub(editForm)">新增下级小组</el-button>
<el-button type="primary" @click="showEdit(editForm)">小组明细</el-button>
<el-button @click="handleDel(editForm)">删除小组</el-button>
</el-row>
</el-dialog>
</section>
</template>
<script>
import util from '@/common/js/util';//
import {sn} from '@/common/js/sequence';//
//import Sticky from '@/components/Sticky' // header
//import { listOption } from '@/api/mdp/meta/itemOption';//
import { updateGroup,getGroups } from '@/api/xm/core/xmProjectGroup';
import { mapGetters } from 'vuex';
import XmProjectGroupEdit from "./XmProjectGroupEdit"
import {VueOkrTree} from 'vue-okr-tree';
import 'vue-okr-tree/dist/vue-okr-tree.css'
export default {
computed: {
...mapGetters([
'userInfo','roles'
]),
okrTreeData(){
var groups=this.groups;
groups.forEach(i=>{
i.label=i.groupName
if(i.groupUsers){
var groupUsers=i.groupUsers;
groupUsers.forEach(i=>i.label=i.username)
i.children=groupUsers
}
})
var topLabel="组织架构"
if(this.xmProduct&&this.xmProduct.id){
topLabel=this.xmProduct.name+"-产品组织架构"
}else if(this.selProject && this.selProject.id){
topLabel=this.selProject.name+"-项目组织架构"
}
var data=[{
label:topLabel,
children:groups
}
]
return data;
}
},
props: ["selProject" ,"isSelectSingleUser","isSelectMultiUser",'xmProduct','xmIteration'],
watch:{
selProject(){
this.getXmProjectGroup();
},
xmProduct(){
this.getXmProjectGroup();
},
xmIteration(){
this.getXmProjectGroup();
}
},
data() {
return {
load:{ list: false, edit: false, del: false, add: false },//...
/**begin 自定义属性请在下面加 请加备注**/
groupSelectVisible: true,
groups:[],
editForm: {
id:'',groupName:'',projectId:''
},
addForm: {
id:'',groupName:'',projectId:''
},
groupOperSelectVisible:false,
/**end 自定义属性请在上面加 请加备注**/
}
},//end data
methods: {
onGroupSelected(selGroups){
this.load.edit=true
if(selGroups != null){
let groups = [];
selGroups.forEach(i=>{
let group = {
"id":i.id,
"groupName": i.groupName,
"groupUsers": i.groupUsers,
"projectId": i.projectId,
"pgTypeName": i.pgTypeName,
"pgTypeId": i.pgTypeId
};
groups.push(group);
});
if(selGroups.length==0){
this.$message({showClose: true, message: "最少保留一个小组", type: 'error' });
this.load.edit=false
return;
}
updateGroup(groups).then((res) => {
var tips=res.data.tips;
if(tips.isOk){
//this.groups = res.data.data;
this.$message({showClose: true, message: tips.msg, type: 'success' });
}else{
this.$message({showClose: true, message: tips.msg, type: 'error' });
}
this.getXmProjectGroup();
this.load.edit=false
}).catch( err => this.load.edit = false );
}
//this.groupSelectVisible=false;
},
getXmProjectGroup() {
this.load.list = true;
let params = {
};
if(this.selProject){
params.projectId=this.selProject.id
}
if(this.xmIteration){
params.iterationId=this.xmIteration.id
}
if(this.xmProduct){
params.productId=this.xmProduct.id
}
getGroups(params).then((res) => {
var tips=res.data.tips;
if(tips.isOk){
this.groups = res.data.data;
}else{
this.$message({showClose: true, message: tips.msg, type: 'error' });
}
this.load.list = false;
}).catch( err => this.load.list = false );
},
/**begin 自定义函数请在下面加**/
onUserSelected:function(users){
this.$emit("user-confirm",users);
},
renderCurrentClass (node) {
return 'label-bg-blue'
},
handleNodeClick (data) {
this.groupOperSelectVisible=true;
this.editForm=data;
},
renderContent (h, node) {
return (
<div class={'diy-wrapper', node.isCurrent ? 'current-select' : ''}>
<div class={'diy-con-name',node.data.userid? 'el-icon-user':''}>{node.data.label}<div></div></div>
<div class="diy-con-content">
{node.data.leaderUsername?
(<div> {node.data.leaderUsername }</div>
)
:
(<div> </div>)
}
</div>
</div>
)
}
/**end 自定义函数请在上面加**/
},//end methods
components: {
VueOkrTree,XmProjectGroupEdit,
//
},
mounted() {
this.$nextTick(() => {
this.getXmProjectGroup();
});
}
}
</script>
<style scoped>
</style>

10
src/views/xm/core/xmProjectGroup/XmProjectGroupSelect.vue

@ -35,7 +35,7 @@
import util from '@/common/js/util'; //
//import Sticky from '@/components/Sticky' // header
import { listOption } from '@/api/mdp/meta/itemOption';//
import { getProjectGroup } from '@/api/xm/core/xmProjectGroup';
import { getGroups } from '@/api/xm/core/xmProjectGroup';
import XmProjectList from '../xmProject/XmProjectList';
import {mapGetters} from 'vuex'
@ -131,7 +131,7 @@
}
this.$emit("user-confirm",users);
},
getProjectGroup(){
getGroups(){
var params={};
if(this.filters.selProject){
params.projectId=this.filters.selProject.id
@ -143,7 +143,7 @@
});
return;
}
getProjectGroup(params).then(res=>{
getGroups(params).then(res=>{
var tips = res.data.tips;
if(tips.isOk){
this.selGroups=res.data.data;
@ -156,7 +156,7 @@
onPorjectConfirm:function(project){
this.filters.selProject=project
this.selectProjectVisible=false;
this.getProjectGroup();
this.getGroups();
},
/**end 自定义函数请在上面加**/
@ -179,7 +179,7 @@
if(this.selProject){
this.filters.selProject=this.selProject
}
this.getProjectGroup();
this.getGroups();
listOption([{categoryId:'all',itemCode:'projectGroupType'}] ).then(res=>{
if(res.data.tips.isOk){
this.options['projectGroupType']=res.data.data.projectGroupType

151
src/views/xm/core/xmProjectGroupUser/XmProjectGroupUserEdit.vue

@ -1,10 +1,12 @@
<template>
<section class="page-container page-full-height padding border">
<el-row>
<section class="page-container padding">
<el-row class="page-header">
</el-row>
<el-row class="page-main">
<!--编辑界面 XmProjectGroupUser xm_project_group_user-->
<el-form :model="editForm" label-width="120px" :rules="editFormRules" ref="editForm">
<el-form-item label="主键" prop="id">
<el-input v-model="editForm.id" placeholder="主键"></el-input>
<el-form :model="editForm" label-width="120px" :rules="editFormRules" ref="editFormRef">
<el-form-item label="加入时间" prop="joinTime">
<el-date-picker type="date" placeholder="选择日期" v-model="editForm.joinTime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
<el-form-item label="团队编号" prop="groupId">
<el-input v-model="editForm.groupId" placeholder="团队编号"></el-input>
@ -15,93 +17,140 @@
<el-form-item label="团队成员" prop="username">
<el-input v-model="editForm.username" placeholder="团队成员"></el-input>
</el-form-item>
<el-form-item>
<el-col :span="24" :offset="8">
<el-button @click.native="handleCancel">取消</el-button>
<el-button v-loading="load.edit" type="primary" @click.native="editSubmit" :disabled="load.edit==true">提交</el-button>
</el-col>
<el-form-item label="离队时间" prop="outTime">
<el-date-picker type="date" placeholder="选择日期" v-model="editForm.outTime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
<el-form-item label="当前状态0参与中1已退出团队" prop="status">
<el-input v-model="editForm.status" placeholder="当前状态0参与中1已退出团队"></el-input>
</el-form-item>
<el-form-item label="组员原归属机构编号" prop="obranchId">
<el-input v-model="editForm.obranchId" placeholder="组员原归属机构编号"></el-input>
</el-form-item>
<el-form-item label="是否私人加入0否1是" prop="isPri">
<el-input v-model="editForm.isPri" placeholder="是否私人加入0否1是"></el-input>
</el-form-item>
<el-form-item label="排序号--从1开始" prop="seqNo">
<el-input-number v-model="editForm.seqNo" :min="0" :max="200"></el-input-number>
</el-form-item>
<el-form-item label="项目编号" prop="projectId">
<el-input v-model="editForm.projectId" placeholder="项目编号"></el-input>
</el-form-item>
<el-form-item label="产品编号" prop="productId">
<el-input v-model="editForm.productId" placeholder="产品编号"></el-input>
</el-form-item>
<el-form-item label="0-项目,1-产品" prop="pgClass">
<el-input v-model="editForm.pgClass" placeholder="0-项目,1-产品"></el-input>
</el-form-item>
</el-form>
</el-row>
<el-row class="page-bottom bottom-fixed">
<el-button @click.native="handleCancel">取消</el-button>
<el-button v-loading="load.edit" type="primary" @click.native="saveSubmit" :disabled="load.edit==true">提交</el-button>
</el-row>
</section>
</template>
<script>
import util from '@/common/js/util';//
//import { listOption } from '@/api/mdp/meta/itemOption';//
import { editXmProjectGroupUser } from '@/api/xm/core/xmProjectGroupUser';
import config from "@/common/config"; //import
import { getDicts,initSimpleDicts,initComplexDicts } from '@/api/mdp/meta/item';//
import { addXmProjectGroupUser,editXmProjectGroupUser } from '@/api/xm/core/xmProjectGroupUser';
import { mapGetters } from 'vuex'
export default {
export default {
name:'xmProjectGroupUserEdit',
components: {
},
computed: {
...mapGetters([
'userInfo','roles'
])
...mapGetters([ 'userInfo' ]),
},
props:['xmProjectGroupUser','visible'],
props:['xmProjectGroupUser','visible','opType'],
watch: {
'xmProjectGroupUser':function( xmProjectGroupUser ) {
this.editForm = xmProjectGroupUser;
if(xmProjectGroupUser){
this.editForm = xmProjectGroupUser;
}
},
'visible':function(visible) {
if(visible==true){
//
this.initData()
}
}
},
data() {
return {
options:{},// params=[{categoryId:'0001',itemCode:'sex'}] {'sex':[{optionValue:'1',optionName:'',seqOrder:'1',fp:'',isDefault:'0'},{optionValue:'2',optionName:'',seqOrder:'2',fp:'',isDefault:'0'}]}
load:{ list: false, edit: false, del: false, add: false },//...
currOpType:'add',//add/edit
load:{ list: false, edit: false, del: false, add: false },//...
dicts:{},// params={categoryId:'all',itemCodes:['sex']} {sex: [{id:'1',name:''},{id:'2',name:''}]}
editFormRules: {
id: [
//{ required: true, message: '', trigger: 'blur' }
groupId: [
//{ required: true, message: '', trigger: 'blur' }
]
},
// XmProjectGroupUser xm_project_group_user
editForm: {
id:'',groupId:'',userid:'',username:''
}
/**begin 在下面加自定义属性,记得补上面的一个逗号**/
/**end 在上面加自定义属性**/
joinTime:'',groupId:'',userid:'',username:'',outTime:'',status:'',obranchId:'',isPri:'',seqNo:'',projectId:'',productId:'',pgClass:''
},
}//end return
},//end data
methods: {
// @cancel="editFormVisible=false"
handleCancel:function(){
this.$refs['editForm'].resetFields();
this.$refs['editFormRef'].resetFields();
this.$emit('cancel');
},
//XmProjectGroupUser xm_project_group_user@submit="afterEditSubmit"
editSubmit: function () {
this.$refs.editForm.validate((valid) => {
//XmProjectGroupUser xm_project_group_user@submit="afterEditSubmit"
saveSubmit: function () {
this.$refs.editFormRef.validate((valid) => {
if (valid) {
this.$confirm('确认提交吗?', '提示', {}).then(() => {
this.load.edit=true
let params = Object.assign({}, this.editForm);
editXmProjectGroupUser(params).then((res) => {
this.load.edit=false
var tips=res.data.tips;
if(tips.isOk){
this.$refs['editForm'].resetFields();
this.$emit('submit');// @submit="afterEditSubmit"
}
this.$message({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' });
}).catch( err =>this.load.edit=false);
let params = Object.assign({}, this.editForm);
var func=addXmProjectGroupUser
if(this.currOpType=='edit'){
func=editXmProjectGroupUser
}
func(params).then((res) => {
this.load.edit=false
var tips=res.data.tips;
if(tips.isOk){
this.editForm=res.data.data
this.initData()
this.currOpType="edit";
this.$emit('submit');// @submit="afterAddSubmit"
}
this.$message({ showClose:true, message: tips.msg, type: tips.isOk?'success':'error' });
}).catch( err =>this.load.edit=false);
});
}else{
this.$message({ showClose:true, message: "表单验证不通过,请修改表单数据再提交", type: 'error' });
}
});
}
/**begin 在下面加自定义方法,记得补上面的一个逗号**/
/**end 在上面加自定义方法**/
},
initData: function(){
this.currOpType=this.opType
if(this.xmProjectGroupUser){
this.editForm = Object.assign({},this.xmProjectGroupUser);
}
if(this.opType=='edit'){
}else{
}
},
},//end method
components: {
// 'xm-project-group-user-edit':XmProjectGroupUserEdit
},
mounted() {
this.editForm=Object.assign(this.editForm, this.xmProjectGroupUser);
this.$nextTick(() => {
//initSimpleDicts('all',['sex','gradeLvl']).then(res=>this.dicts=res.data.data);
this.initData()
});
}
}

175
src/views/xm/core/xmProjectGroupUser/XmProjectGroupUserMng.vue

@ -1,56 +1,79 @@
<template>
<section class="page-container page-full-height padding border">
<section class="page-container border padding">
<el-row>
<el-input v-model="filters.key" style="width: 20%;" placeholder="模糊查询"></el-input>
<el-button type="primary" v-loading="load.list" :disabled="load.list==true" v-on:click="searchXmProjectGroupUsers">查询</el-button>
<el-button type="primary" @click="showAdd">+xm_project_group_user</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
<el-input v-model="filters.key" style="width: 20%;" placeholder="模糊查询"></el-input>
<el-button v-loading="load.list" :disabled="load.list==true" @click="searchXmProjectGroupUsers" icon="el-icon-search">查询</el-button>
<el-button type="primary" @click="showAdd" icon="el-icon-plus"> </el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true" icon="el-icon-delete"></el-button>
</el-row>
<el-row class="page-main page-height-90">
<el-row class="padding-top">
<!--列表 XmProjectGroupUser xm_project_group_user-->
<el-table ref="table" :height="tableHeight" :data="xmProjectGroupUsers" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column>
<el-table-column sortable type="index" width="40"></el-table-column>
<el-table-column prop="id" label="主键" min-width="80" ></el-table-column>
<el-table-column prop="groupId" label="团队编号" min-width="80" ></el-table-column>
<el-table-column prop="userid" label="团队成员编号" min-width="80" ></el-table-column>
<el-table-column prop="username" label="团队成员" min-width="80" ></el-table-column>
<el-table-column label="操作" width="160" fixed="right" >
<template slot-scope="scope">
<el-button @click="showEdit( scope.row,scope.$index)"></el-button>
<el-button type="danger" @click="handleDel(scope.row,scope.$index)"></el-button>
<el-table ref="xmProjectGroupUserTable" :data="xmProjectGroupUsers" :height="maxTableHeight" @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" show-overflow-tooltip></el-table-column>
<el-table-column sortable type="index" width="55" show-overflow-tooltip></el-table-column>
<el-table-column prop="joinTime" label="加入时间" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column prop="groupId" label="团队编号" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column prop="userid" label="团队成员编号" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column prop="username" label="团队成员" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column prop="outTime" label="离队时间" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column prop="status" label="当前状态0参与中1已退出团队" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column prop="obranchId" label="组员原归属机构编号" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column prop="isPri" label="是否私人加入0否1是" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column prop="seqNo" label="排序号--从1开始" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column prop="projectId" label="项目编号" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column prop="productId" label="产品编号" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column prop="pgClass" label="0-项目,1-产品" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column label="操作" width="180" fixed="right">
<template slot="header">
<el-button @click="showAdd" icon="el-icon-plus" circle> </el-button>
</template>
<template scope="scope">
<el-button type="primary" @click="showEdit( scope.row,scope.$index)" icon="el-icon-edit"></el-button>
<el-button type="danger" @click="handleDel(scope.row,scope.$index)" icon="el-icon-delete"></el-button>
</template>
</el-table-column>
</el-table>
<el-pagination layout="total, sizes, prev, pager, next" @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-pagination>
<el-pagination layout="total, sizes, prev, pager, next" @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-pagination>
</el-row>
<el-row>
<!--编辑 XmProjectGroupUser xm_project_group_user界面-->
<el-drawer title="编辑xm_project_group_user" :visible.sync="editFormVisible" size="50%" append-to-body :close-on-click-modal="false">
<xm-project-group-user-edit :xm-project-group-user="editForm" :visible="editFormVisible" @cancel="editFormVisible=false" @submit="afterEditSubmit"></xm-project-group-user-edit>
<el-drawer title="编辑xm_project_group_user" :visible.sync="editFormVisible" size="60%" append-to-body :close-on-click-modal="false">
<xm-project-group-user-edit op-type="edit" :xm-project-group-user="editForm" :visible="editFormVisible" @cancel="editFormVisible=false" @submit="afterEditSubmit"></xm-project-group-user-edit>
</el-drawer>
<!--新增 XmProjectGroupUser xm_project_group_user界面-->
<el-drawer title="新增xm_project_group_user" :visible.sync="addFormVisible" size="50%" append-to-body :close-on-click-modal="false">
<xm-project-group-user-add :xm-project-group-user="addForm" :visible="addFormVisible" @cancel="addFormVisible=false" @submit="afterAddSubmit"></xm-project-group-user-add>
</el-drawer>
</el-row>
<el-drawer title="新增xm_project_group_user" :visible.sync="addFormVisible" size="60%" append-to-body :close-on-click-modal="false">
<xm-project-group-user-edit op-type="add" :visible="addFormVisible" @cancel="addFormVisible=false" @submit="afterAddSubmit"></xm-project-group-user-edit>
</el-drawer>
</el-row>
</section>
</template>
<script>
import util from '@/common/js/util';//
//import Sticky from '@/components/Sticky' // header
//import { listOption } from '@/api/mdp/meta/itemOption';//
import config from '@/common/config';//
import { getDicts,initSimpleDicts,initComplexDicts } from '@/api/mdp/meta/item';//
import { listXmProjectGroupUser, delXmProjectGroupUser, batchDelXmProjectGroupUser } from '@/api/xm/core/xmProjectGroupUser';
import XmProjectGroupUserAdd from './XmProjectGroupUserAdd';//
import XmProjectGroupUserEdit from './XmProjectGroupUserEdit';//
import XmProjectGroupUserEdit from './XmProjectGroupUserEdit';//
import { mapGetters } from 'vuex'
export default {
export default {
name:'xmProjectGroupUserMng',
components: {
XmProjectGroupUserEdit,
},
props:['visible'],
computed: {
...mapGetters([
'userInfo','roles'
])
...mapGetters(['userInfo']),
},
watch:{
visible(val){
if(val==true){
this.initData();
this.searchXmProjectGroupUsers()
}
}
},
data() {
return {
@ -68,23 +91,19 @@
},
load:{ list: false, edit: false, del: false, add: false },//...
sels: [],//
options:{},// params=[{categoryId:'0001',itemCode:'sex'}] {'sex':[{optionValue:'1',optionName:'',seqOrder:'1',fp:'',isDefault:'0'},{optionValue:'2',optionName:'',seqOrder:'2',fp:'',isDefault:'0'}]}
dicts:{
//sex: [{id:'1',name:''},{id:'2',name:''}]
},// params={categoryId:'all',itemCodes:['sex']} {sex: [{id:'1',name:''},{id:'2',name:''}]}
addFormVisible: false,//xmProjectGroupUser
//xmProjectGroupUser
addForm: {
id:'',groupId:'',userid:'',username:''
joinTime:'',groupId:'',userid:'',username:'',outTime:'',status:'',obranchId:'',isPri:'',seqNo:'',projectId:'',productId:'',pgClass:''
},
editFormVisible: false,//
//xmProjectGroupUser
editForm: {
id:'',groupId:'',userid:'',username:''
joinTime:'',groupId:'',userid:'',username:'',outTime:'',status:'',obranchId:'',isPri:'',seqNo:'',projectId:'',productId:'',pgClass:''
},
/**begin 自定义属性请在下面加 请加备注**/
tableHeight:300,
/**end 自定义属性请在上面加 请加备注**/
maxTableHeight:300,
}
},//end data
methods: {
@ -98,14 +117,18 @@
},
// obj.order=ascending/descending, asc/desc ; obj.prop=,
sortChange( obj ){
var dir='asc';
if(obj.order=='ascending'){
dir='asc'
if(obj.order==null){
this.pageInfo.orderFields=[];
this.pageInfo.orderDirs=[];
}else{
dir='desc';
}
if(obj.prop=='xxx'){
this.pageInfo.orderFields=['xxx'];
var dir='asc';
if(obj.order=='ascending'){
dir='asc'
}else{
dir='desc';
}
this.pageInfo.orderFields=[util.toLine(obj.prop)];
this.pageInfo.orderDirs=[dir];
}
this.getXmProjectGroupUsers();
@ -129,11 +152,10 @@
}
params.orderBy= orderBys.join(",")
}
if(this.filters.key!==""){
//params.xxx=this.filters.key
}else{
//params.xxx=xxxxx
if(this.filters.key){
params.key=this.filters.key
}
this.load.list = true;
listXmProjectGroupUser(params).then((res) => {
var tips=res.data.tips;
@ -142,7 +164,7 @@
this.pageInfo.count=false;
this.xmProjectGroupUsers = res.data.data;
}else{
this.$message({showClose: true, message: tips.msg, type: 'error' });
this.$message({ showClose:true, message: tips.msg, type: 'error' });
}
this.load.list = false;
}).catch( err => this.load.list = false );
@ -176,7 +198,7 @@
type: 'warning'
}).then(() => {
this.load.del=true;
let params = { id: row.id };
let params = { groupId: row.groupId };
delXmProjectGroupUser(params).then((res) => {
this.load.del=false;
var tips=res.data.tips;
@ -184,7 +206,7 @@
this.pageInfo.count=true;
this.getXmProjectGroupUsers();
}
this.$message({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' });
this.$message({ showClose:true, message: tips.msg, type: tips.isOk?'success':'error' });
}).catch( err => this.load.del=false );
});
},
@ -202,38 +224,35 @@
this.pageInfo.count=true;
this.getXmProjectGroupUsers();
}
this.$message({showClose: true, message: tips.msg, type: tips.isOk?'success':'error'});
this.$message({ showClose:true, message: tips.msg, type: tips.isOk?'success':'error'});
}).catch( err => this.load.del=false );
});
},
rowClick: function(row, event, column){
if(event.label!='操作' && event.type!='selection'){
this.showEdit(row)
}
this.$emit('row-click',row, event, column);// @row-click="rowClick"
}
/**begin 自定义函数请在下面加**/
/**end 自定义函数请在上面加**/
},
initData: function(){
},
},//end methods
components: {
'xm-project-group-user-add':XmProjectGroupUserAdd,
'xm-project-group-user-edit':XmProjectGroupUserEdit,
//
},
mounted() {
mounted() {
this.$nextTick(() => {
var clientRect=this.$refs.table.$el.getBoundingClientRect();
var subHeight=70/1000 * window.innerHeight;
this.tableHeight = window.innerHeight -clientRect.y - this.$refs.table.$el.offsetTop-subHeight;
this.getXmProjectGroupUsers();
});
//initSimpleDicts('all',['sex','gradeLvl']).then(res=>this.dicts=res.data.data);
this.initData()
this.searchXmProjectGroupUsers();
var table=document.querySelector('.el-table');
var top=util.getPositionTop(table)
this.maxTableHeight = window.innerHeight - top -60;
});
}
}
</script>
<style scoped>
</style>
Loading…
Cancel
Save