diff --git a/src/api/xm/core/xmQuestion.js b/src/api/xm/core/xmQuestion.js
index 059dee67..fab4752a 100644
--- a/src/api/xm/core/xmQuestion.js
+++ b/src/api/xm/core/xmQuestion.js
@@ -30,3 +30,7 @@ export const editXmQuestion = params => { return axios.post(`${base}/xm/core/xmQ
export const addXmQuestion = params => { return axios.post(`${base}/xm/core/xmQuestion/add`, params); };
export const editStatus = params => { return axios.post(`${base}/xm/core/xmQuestion/editStatus`, params); };
+
+export const editXmQuestionSomeFields = params => { return axios.post(`${base}/xm/core/xmQuestion/editSomeFields`, params); };
+
+
diff --git a/src/api/xm/core/xmTaskSbill.js b/src/api/xm/core/xmTaskSbill.js
new file mode 100644
index 00000000..081c4bd0
--- /dev/null
+++ b/src/api/xm/core/xmTaskSbill.js
@@ -0,0 +1,30 @@
+import axios from '@/utils/request'
+
+import config from '@/common/config'
+
+let base = config.getCoreBasePath();
+
+
+/**
+ * 任务结算表
+ *1 默认只开放普通查询,所有查询,只要上传 分页参数 {currentPage:当前页码从1开始,pageSize:每页记录数,total:总记录【数如果是0后台会自动计算总记录数非0不会自动计算】},后台都会自动按分页查询 其它 api用到再打开,没用到的api请注释掉,
+ *2 查询、新增、修改的参数格式 params={id:'结算单据编号 主键',title:'结算单标题',amt:'金额=工时表中结算金额之和',ctime:'创建时间',cuserid:'创建人编号',cusername:'创建人姓名',remark:'备注',branchId:'机构编号',deptid:'部门编号',cpId:'相对方编号(机构写机构号,个人写个人编号)',cpName:'相对方名称(机构写机构名称,个人写个人名称)',workload:'结算工作量=工时表中工时之和',bizMonth:'业务月份yyyy-MM',bizDate:'业务日期yyyy-MM-dd',bizFlowState:'结算流程状态',bizProcInstId:'结算流程实例',ltime:'更新时间',status:'0-待提交,1-已提交,2-已通过,3-已付款,4-已完成',fmsg:'最后审核意见',projectId:'项目编号',projectName:'项目名称'}
+ **/
+
+//普通查询 条件之间and关系
+export const listXmTaskSbill = params => { return axios.get(`${base}/xm/core/xmTaskSbill/list`, { params: params }); };
+
+//模糊查询任务结算表 条件之间or关系
+//export const listXmTaskSbillKey = params => { return axios.get(`${base}/xm/core/xmTaskSbill/listKey`, { params: params }); };
+
+//删除一条任务结算表 params={id:'结算单据编号 主键'}
+export const delXmTaskSbill = params => { return axios.post(`${base}/xm/core/xmTaskSbill/del`,params); };
+
+//批量删除任务结算表 params=[{id:'结算单据编号 主键'}]
+export const batchDelXmTaskSbill = params => { return axios.post(`${base}/xm/core/xmTaskSbill/batchDel`, params); };
+
+//修改一条任务结算表记录
+export const editXmTaskSbill = params => { return axios.post(`${base}/xm/core/xmTaskSbill/edit`, params); };
+
+//新增一条任务结算表
+export const addXmTaskSbill = params => { return axios.post(`${base}/xm/core/xmTaskSbill/add`, params); };
diff --git a/src/api/xm/core/xmTaskWorkload.js b/src/api/xm/core/xmTaskWorkload.js
new file mode 100644
index 00000000..f85bc730
--- /dev/null
+++ b/src/api/xm/core/xmTaskWorkload.js
@@ -0,0 +1,30 @@
+import axios from '@/utils/request'
+
+import config from '@/common/config'
+
+let base = config.getCoreBasePath();
+
+
+/**
+ * 工时登记表
+ *1 默认只开放普通查询,所有查询,只要上传 分页参数 {currentPage:当前页码从1开始,pageSize:每页记录数,total:总记录【数如果是0后台会自动计算总记录数非0不会自动计算】},后台都会自动按分页查询 其它 api用到再打开,没用到的api请注释掉,
+ *2 查询、新增、修改的参数格式 params={id:'主键 主键',userid:'员工编号',username:'姓名',ctime:'创建日期',taskId:'业务对象主键任务编号',cuserid:'创建人编号',bizDate:'业务日期yyyy-MM-dd',wstatus:'状态0-待确认,1-已确认,2-无效',remark:'备注',ttype:'任务类型-关联字典taskType',sbillId:'结算单据编号',stime:'结算提交时间',sstatus:'结算状态0-无需结算,1-待结算2-已提交3-已通过4-已结算',amt:'工时对应金额',samt:'结算金额',workload:'工时,一个task_id可多次提交,小时'}
+ **/
+
+//普通查询 条件之间and关系
+export const listXmTaskWorkload = params => { return axios.get(`${base}/xm/core/xmTaskWorkload/list`, { params: params }); };
+
+//模糊查询工时登记表 条件之间or关系
+//export const listXmTaskWorkloadKey = params => { return axios.get(`${base}/xm/core/xmTaskWorkload/listKey`, { params: params }); };
+
+//删除一条工时登记表 params={id:'主键 主键'}
+export const delXmTaskWorkload = params => { return axios.post(`${base}/xm/core/xmTaskWorkload/del`,params); };
+
+//批量删除工时登记表 params=[{id:'主键 主键'}]
+export const batchDelXmTaskWorkload = params => { return axios.post(`${base}/xm/core/xmTaskWorkload/batchDel`, params); };
+
+//修改一条工时登记表记录
+export const editXmTaskWorkload = params => { return axios.post(`${base}/xm/core/xmTaskWorkload/edit`, params); };
+
+//新增一条工时登记表
+export const addXmTaskWorkload = params => { return axios.post(`${base}/xm/core/xmTaskWorkload/add`, params); };
diff --git a/src/router/routes_xm.js b/src/router/routes_xm.js
index 8fce1f8e..2782c8f8 100644
--- a/src/router/routes_xm.js
+++ b/src/router/routes_xm.js
@@ -15,10 +15,8 @@ export default {
},
// leaf: true,//只有一个节点
children: [
-
- { path: 'xmProject/XmProjectAdd', component: _import('xm/core/xmProject/XmProjectAdd'), name: 'xmProjectAdd',hidden:true, meta: { title: '项目立项' }},
{ path: 'xmProject/XmProjectAllMng', component: _import('xm/core/xmProject/XmProjectAllMng'), name: 'xmProjectAllMng', meta: { title: '项目总览' }},
- { path: 'xmProject/XmProjectMng', component: _import('xm/core/xmProject/XmProjectMng'), name: 'xmProjectMng', meta: { title: '项目(我的)' }},
+ { path: 'xmProject/XmProjectMng', component: _import('xm/core/xmProject/XmProjectMng'), name: 'xmProjectMng', meta: { title: '项目(我的)' }},
{ path: 'xmProjectState/XmProjectStateMng', component: _import('xm/core/xmProjectState/XmProjectStateMng'), name: 'XmProjectStateMng', meta: { title: '项目统计' }},
{ path: 'xmBranchState/XmBranchStateMng', component: _import('xm/core/xmBranchState/XmBranchStateMng'), name: 'XmBranchStateMng', meta: { title: '所有项目汇总' }},
{ path: 'xmProject/XmProjectRecycle', component: _import('xm/core/xmProject/XmProjectRecycle'), name: 'XmProjectRecycle', meta: { title: '项目回收站' }},
@@ -136,7 +134,7 @@ export default {
{ path: 'xmIteration/XmIterationMng', component: _import('xm/core/xmIteration/XmIterationMng'), name: 'XmIterationMng', meta: { title: '迭代管理' }},
{ path: 'xmIterationMenu/XmIterationMenuMng', component: _import('xm/core/xmIterationMenu/XmIterationMenuMng'), name: 'XmIterationMenuMng', meta: { title: '需求迭代' }},
]
- },
+ },
{
path: '/xm/core',
component: Layout,
@@ -148,8 +146,23 @@ export default {
},
// leaf: true,//只有一个节点
children: [
- { path: 'xmGroup/XmGroupAllMng', component: _import('xm/core/xmGroup/XmGroupAllMng'), name: 'XmGroupAllMng', meta: { title: '团队管理' }},
- { path: 'xmGroupUser/XmGroupUserMng', component: _import('xm/core/xmGroupUser/XmGroupUserMng'), name: 'XmGroupUserMng', meta: { title: '成员管理' }},
+ { path: 'xmGroup/XmGroupAllMng', component: _import('xm/core/xmGroup/XmGroupAllMng'), name: 'XmGroupAllMng', meta: { title: '团队管理' }},
+ { path: 'xmGroupUser/XmGroupUserMng', component: _import('xm/core/xmGroupUser/XmGroupUserMng'), name: 'XmGroupUserMng', meta: { title: '成员管理' }},
+ ]
+ },
+ {
+ path: '/xm/core',
+ component: Layout,
+ name: 'TaskSbill',
+ iconCls: 'fa el-icon-menu',
+ meta: {
+ menu:true,
+ title: '任务结算',
+ icon: 'task'
+ },
+ //leaf: true,//只有一个节点
+ children: [
+ { path: 'xmTaskSbill/XmTaskSbillMng', component: _import('xm/core/xmTaskSbill/XmTaskSbillMng'), name: 'XmTaskSbilllMng', meta: { title: '任务结算',icon:'task' }},
]
}
]
diff --git a/src/views/mdp/arc/tag/TagDialog.vue b/src/views/mdp/arc/tag/TagDialog.vue
new file mode 100644
index 00000000..bc3a4ed2
--- /dev/null
+++ b/src/views/mdp/arc/tag/TagDialog.vue
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
diff --git a/src/views/xm/XmOverview2.vue b/src/views/xm/XmOverview2.vue
index 7a9cb1ff..e2cabcd6 100644
--- a/src/views/xm/XmOverview2.vue
+++ b/src/views/xm/XmOverview2.vue
@@ -81,9 +81,9 @@
-
+
-
+
工作量分布
@@ -124,7 +124,7 @@
所含产品和迭代情况
+
@@ -134,7 +134,7 @@
-
-
diff --git a/src/views/xm/core/components/XmIterationSelect.vue b/src/views/xm/core/components/XmIterationSelect.vue
new file mode 100644
index 00000000..5a7d0a00
--- /dev/null
+++ b/src/views/xm/core/components/XmIterationSelect.vue
@@ -0,0 +1,318 @@
+
+
+
+
+
+
+
+ 迭代
+
+ 清空 关闭
+
+
+
+ 迭代编号:
+
+
+
+ 上线时间:
+
+
+
+ 迭代名称:
+
+
+ 关闭
+ 查询
+
+
+ 更多条件
+
+
+
+
+
+ {{scope.row.iterationName}} {{calcFinishRate(scope.row)}}%
+
+
+
+
+
+
+ {{editForm&&editForm.id?editForm.iterationName:'选择迭代'}}
+
+
+
+
+
+
+
diff --git a/src/views/xm/core/components/XmMenuWorkload.vue b/src/views/xm/core/components/XmMenuWorkload.vue
new file mode 100644
index 00000000..caebd7f3
--- /dev/null
+++ b/src/views/xm/core/components/XmMenuWorkload.vue
@@ -0,0 +1,119 @@
+
+
+
+
+ 下往上
+ 任务汇总
+ 手工填报
+
+
+
+
+
+
+ h
+
+
+ h
+
+
+ h
+
+ 控制规则:
+
下级往上汇总:指工时数据按 用户故事->特性->史诗 这样的汇总关系将数据逐级往上汇总。
+
由任务汇总: 指用户故事的工时数据由任务汇总。
+
手工填报: 指用户故事的工时数据来自手工填报,无论是否关联了任务,都不从任务汇总。
+
+
+
+ 关闭
+ 确认
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/xm/core/components/XmProductSelect.vue b/src/views/xm/core/components/XmProductSelect.vue
new file mode 100644
index 00000000..1478f319
--- /dev/null
+++ b/src/views/xm/core/components/XmProductSelect.vue
@@ -0,0 +1,424 @@
+
+
+
+
+
+
+
+
+
+ 产品名称
+
+ 清空
+ 关闭
+
+
+
+ 产品编号:
+
+
+
+
+
+ 创建时间:
+
+
+
+
+
+ 产品名称:
+
+
+
+
+
+
+ 产品经理:
+
+ {{filters.pmUser.username}}
+ 选责任人
+ 我的
+
+
+ 关闭查询
+
+
+ 更多条件
+
+
+
+
+ {{scope.row.productName}}
+
+
+
+
+
+ {{editForm && editForm.id?editForm.productName:'选择产品'}}
+
+
+
+
+
+
+
+
+ 产品名称
+
+ 清空
+ 关闭
+
+
+
+ 产品编号:
+
+
+
+
+
+ 创建时间:
+
+
+
+
+
+ 产品名称:
+
+
+
+
+
+
+ 产品经理:
+
+ {{filters.pmUser.username}}
+ 选责任人
+ 我的
+
+
+ 关闭查询
+
+
+ 更多条件
+
+
+
+
+ {{scope.row.productName}}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/xm/core/components/XmProjectSelect.vue b/src/views/xm/core/components/XmProjectSelect.vue
new file mode 100644
index 00000000..00a593e0
--- /dev/null
+++ b/src/views/xm/core/components/XmProjectSelect.vue
@@ -0,0 +1,357 @@
+
+
+
+
+
+
+
+
+
+ 项目名称
+
+ 清空
+ 关闭
+
+
+
+ 项目编号:
+
+
+
+
+
+ 创建时间:
+
+
+
+
+
+ 项目名称:
+
+
+
+
+
+
+ 项目经理:
+
+ {{filters.pmUser.username}}
+ 选责任人
+ 我的
+
+
+ 关闭查询
+
+
+ 更多条件
+
+
+
+
+ {{scope.row.name}}
+
+
+
+
+
+
+ {{editForm && editForm.id?editForm.name:'选择项目'}}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/xm/core/components/XmTableConfig.vue b/src/views/xm/core/components/XmTableConfig.vue
new file mode 100644
index 00000000..efce0149
--- /dev/null
+++ b/src/views/xm/core/components/XmTableConfig.vue
@@ -0,0 +1,98 @@
+
+
+
+
+ 是否显示
+
+
+ 关闭
+ 确认
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/xm/core/xmGroup/XmGroupDialog.vue b/src/views/xm/core/xmGroup/XmGroupDialog.vue
new file mode 100644
index 00000000..ccb739f3
--- /dev/null
+++ b/src/views/xm/core/xmGroup/XmGroupDialog.vue
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
diff --git a/src/views/xm/core/xmGroup/XmGroupMng.vue b/src/views/xm/core/xmGroup/XmGroupMng.vue
index 281330c6..81ffdc43 100644
--- a/src/views/xm/core/xmGroup/XmGroupMng.vue
+++ b/src/views/xm/core/xmGroup/XmGroupMng.vue
@@ -1,14 +1,8 @@
-
-
-
-
- {{filters.selProject?filters.selProject.name:'选择项目'}}
-
+
+
+
刷新
小组进度
@@ -188,16 +182,9 @@
-
-
-
-
-
-
-
@@ -221,16 +208,15 @@
import UsersSelect from "@/views/mdp/sys/user/UsersSelect";
import XmGroupStateMng from '../xmGroupState/XmGroupStateMng';//修改界面
- import XmGroupUserMng from '../xmGroupUser/XmGroupUserMng';//修改界面
- import XmProjectList from '../xmProject/XmProjectList';
+ import XmGroupUserMng from '../xmGroupUser/XmGroupUserMng';//修改界面
- import XmProjectSelect from '../xmProject/XmProjectSelect';
- import XmProductSelect from '../xmProduct/XmProductSelect.vue';
+ import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect';
+ import XmProductSelect from '@/views/xm/core/components/XmProductSelect.vue'
export default {
name:'xmGroupMng',
components: {
- XmGroupEdit,VueOkrTree,UsersSelect,XmGroupStateMng,XmGroupUserMng,XmProjectList,
+ XmGroupEdit,VueOkrTree,UsersSelect,XmGroupStateMng,XmGroupUserMng,
XmProductSelect,XmProjectSelect,
},
props:["visible","selProject" ,"isSelectSingleUser","isSelectMultiUser",'xmProduct','xmIteration','pgClass'],
diff --git a/src/views/xm/core/xmGroup/XmGroupSelect.vue b/src/views/xm/core/xmGroup/XmGroupSelect.vue
index 2a20633d..0857df02 100644
--- a/src/views/xm/core/xmGroup/XmGroupSelect.vue
+++ b/src/views/xm/core/xmGroup/XmGroupSelect.vue
@@ -1,20 +1,11 @@
-
-
- {{filters.selProject?filters.selProject.name:'选择项目'}}
-
-
-
- {{filters.xmProduct?filters.xmProduct.productName:'选择项目'}}
-
+
+
+
+
+
确认选择
@@ -29,16 +20,7 @@
-
-
-
-
-
-
-
-
-
-
+
@@ -47,10 +29,10 @@
//import Sticky from '@/components/Sticky' // 粘性header组件
import { initSimpleDicts } from '@/api/mdp/meta/item';//下拉框数据查询
import { getGroups } from '@/api/xm/core/xmGroup';
- import XmProjectSelect from '../xmProject/XmProjectSelect';
+ import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect';
import {mapGetters} from 'vuex'
-import XmProductSelect from '../xmProduct/XmProductSelect.vue';
+import XmProductSelect from '@/views/xm/core/components/XmProductSelect.vue'
export default {
computed: {
diff --git a/src/views/xm/core/xmIteration/XmIterationAdd.vue b/src/views/xm/core/xmIteration/XmIterationAdd.vue
index 1292d3a6..0d7d511c 100644
--- a/src/views/xm/core/xmIteration/XmIterationAdd.vue
+++ b/src/views/xm/core/xmIteration/XmIterationAdd.vue
@@ -3,15 +3,9 @@
-
-
-
- {{addForm.productId?addForm.productName:'选择产品'}}
-
+
+
+
{{addForm.productName}}
@@ -55,7 +49,7 @@
import { mapGetters } from 'vuex'
import UsersSelect from "@/views/mdp/sys/user/UsersSelect";
- import XmProductSelect from '../xmProduct/XmProductSelect.vue';
+ import XmProductSelect from '@/views/xm/core/components/XmProductSelect.vue'
export default {
computed: {
diff --git a/src/views/xm/core/xmIteration/XmIterationEdit.vue b/src/views/xm/core/xmIteration/XmIterationEdit.vue
index 1a4a9f98..10f01adb 100644
--- a/src/views/xm/core/xmIteration/XmIterationEdit.vue
+++ b/src/views/xm/core/xmIteration/XmIterationEdit.vue
@@ -10,6 +10,9 @@
+
+ 注意:请尽量在评审会阶段把需求明确,进入计划会后,不允许再添加需求进入迭代。原则上需求评审后需求只出不进。
+
diff --git a/src/views/xm/core/xmIteration/XmIterationForLinkComplex.vue b/src/views/xm/core/xmIteration/XmIterationForLinkComplex.vue
index 6a1528b8..130ce88b 100644
--- a/src/views/xm/core/xmIteration/XmIterationForLinkComplex.vue
+++ b/src/views/xm/core/xmIteration/XmIterationForLinkComplex.vue
@@ -4,14 +4,9 @@
-
-
-
- {{xmIteration?xmIteration.iterationName:'选择迭代'}}
-
+
+
+
@@ -64,7 +59,7 @@
import { initSimpleDicts } from '@/api/mdp/meta/item';//下拉框数据查询
import { delXmIterationLink } from '@/api/xm/core/xmIterationLink';
- import XmIterationSelect from './XmIterationSelect.vue'
+ import XmIterationSelect from '@/views/xm/core/components/XmIterationSelect.vue'
import XmMenuMng from '../xmMenu/XmMenuMng.vue'
import XmIterationStateShow from '../xmIterationState/XmIterationStateShow.vue'
import { mapGetters } from 'vuex'
diff --git a/src/views/xm/core/xmIteration/XmIterationInfo.vue b/src/views/xm/core/xmIteration/XmIterationInfo.vue
index 734fe9f7..8b2be7a0 100644
--- a/src/views/xm/core/xmIteration/XmIterationInfo.vue
+++ b/src/views/xm/core/xmIteration/XmIterationInfo.vue
@@ -50,10 +50,7 @@
-
-
diff --git a/src/views/xm/core/xmIterationLink/XmIterationLinkForProduct.vue b/src/views/xm/core/xmIterationLink/XmIterationLinkForProduct.vue
index 3775dae8..aa96aac3 100644
--- a/src/views/xm/core/xmIterationLink/XmIterationLinkForProduct.vue
+++ b/src/views/xm/core/xmIterationLink/XmIterationLinkForProduct.vue
@@ -45,8 +45,8 @@
import { listXmIterationLinkWithProductInfo,addXmIterationLink, delXmIterationLink, batchDelXmIterationLink } from '@/api/xm/core/xmIterationLink';
import { mapGetters } from 'vuex'
- import XmProductSelect from '../xmProduct/XmProductSelect.vue';
- import XmIterationSelect from '../xmIteration/XmIterationSelect.vue';
+ import XmProductSelect from '@/views/xm/core/components/XmProductSelect.vue'
+ import XmIterationSelect from '@/views/xm/core/components/XmIterationSelect.vue';
import XmIterationAdd from '../xmIteration/XmIterationAdd';//新增界面
diff --git a/src/views/xm/core/xmIterationLink/XmIterationLinkForProject.vue b/src/views/xm/core/xmIterationLink/XmIterationLinkForProject.vue
index a3413422..5e1afd1c 100644
--- a/src/views/xm/core/xmIterationLink/XmIterationLinkForProject.vue
+++ b/src/views/xm/core/xmIterationLink/XmIterationLinkForProject.vue
@@ -45,8 +45,9 @@
import { listXmIterationLinkWithProjectInfo,addXmIterationLink, delXmIterationLink, batchDelXmIterationLink } from '@/api/xm/core/xmIterationLink';
import { mapGetters } from 'vuex'
- import XmProjectSelect from '../xmProject/XmProjectSelect.vue';
- import XmIterationSelect from '../xmIteration/XmIterationSelect.vue';
+ import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect.vue'
+;
+ import XmIterationSelect from '@/views/xm/core/components/XmIterationSelect.vue';
import XmIterationAdd from '../xmIteration/XmIterationAdd';//新增界面
diff --git a/src/views/xm/core/xmIterationMenu/XmIterationMenuMng.vue b/src/views/xm/core/xmIterationMenu/XmIterationMenuMng.vue
index 7f420392..1c74e746 100644
--- a/src/views/xm/core/xmIterationMenu/XmIterationMenuMng.vue
+++ b/src/views/xm/core/xmIterationMenu/XmIterationMenuMng.vue
@@ -1,25 +1,21 @@
-
+
-
-
-
-
+
-
+
- 加入更多需求到迭代计划
- 批量移出
+ 批量移出
-
+
@@ -39,14 +35,7 @@
-
-
-
-
-
-
-
-
+
移出
@@ -54,20 +43,21 @@
+
+
+
-
-
-
-
+
-
\ No newline at end of file
diff --git a/src/views/xm/core/xmProductProjectLink/XmProductProjectLinkMng.vue b/src/views/xm/core/xmProductProjectLink/XmProductProjectLinkMng.vue
index fa2cf007..98bd5c5d 100644
--- a/src/views/xm/core/xmProductProjectLink/XmProductProjectLinkMng.vue
+++ b/src/views/xm/core/xmProductProjectLink/XmProductProjectLinkMng.vue
@@ -2,9 +2,15 @@
- 选择更多产品加入项目
- 选择更多项目加入产品
-
+
+ 选择更多产品加入项目
+
+
+
+ 选择更多项目加入产品
+
+
+
@@ -21,16 +27,7 @@
-
-
-
-
-
-
-
-
-
-
+
@@ -42,8 +39,8 @@
import XmProductProjectLinkAdd from './XmProductProjectLinkAdd';//新增界面
import XmProductProjectLinkEdit from './XmProductProjectLinkEdit';//修改界面
import { mapGetters } from 'vuex'
-import XmProductSelect from '../xmProduct/XmProductSelect.vue';
-import XmProjectSelect from '../xmProject/XmProjectSelect.vue';
+import XmProductSelect from '@/views/xm/core/components/XmProductSelect.vue'
+import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect.vue'
export default {
props:['selProject','xmProduct'],
@@ -92,9 +89,7 @@ import XmProjectSelect from '../xmProject/XmProjectSelect.vue';
projectId:'',productId:'',ctime:'',cuserid:'',cusername:'',linkStatus:''
},
maxTableHeight:300,
- productVisible:false,
- projectVisible:false,
- }
+ }
},//end data
methods: {
handleSizeChange(pageSize) {
diff --git a/src/views/xm/core/xmProject/XmProjectAdd.vue b/src/views/xm/core/xmProject/XmProjectAdd.vue
deleted file mode 100644
index 2abe5d4b..00000000
--- a/src/views/xm/core/xmProject/XmProjectAdd.vue
+++ /dev/null
@@ -1,537 +0,0 @@
-
-
-
-
-
-
-
-
- 自动生成
-
-
- 项目代号为合同上的项目代号,甲乙方共享;项目内部编号为 代号-四位随机码
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 总预算控制
- 项目计划总预算不能大于项目总预算
-
-
- 项目计划预算控制
- 下级计划总预算不能大于上级计划总预算;每条计划的预算金额必须大于其关联任务的预算合计。
-
-
- 实际金额控制
- 每条计划实际金额不能大于预算金额;每条计划的预算金额必须大于其关联的任务的实际金额合计。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 参考工时{{autoParams.planWorkingHours}}小时,工作日{{autoParams.weekday}}天
-
-
-
-
- 人员类型
- 人数
- 工作量
- 单价
- 总价
-
-
-
-
- 内购
-
-
- {{autoParams.planIuserWorkload}}人时
-
- {{this.toFixed(autoParams.planIuserAt)}}元,{{this.toFixed(autoParams.planIuserAt/10000)}} 万元
-
-
-
- 外购
-
-
- {{autoParams.planOuserWorkload}}人时
-
- {{autoParams.planOuserAt }} 元 {{autoParams.planOuserAt/10000 }}万元
-
-
-
-
- 合计
- {{autoParams.planOuserCnt+autoParams.planIuserCnt}}
-
- {{autoParams.planOuserWorkload+autoParams.planIuserWorkload }}人时,{{ (autoParams.planOuserWorkload+autoParams.planIuserWorkload)/8/20 }}人月
- 平均:{{ (parseFloat2(autoParams.planOuserPrice) + parseFloat2(autoParams.planIuserPrice))/2}}元/人时
- {{autoParams.planTotalCost}} 元,{{(autoParams.planTotalCost)/10000}} 万元
-
-
-
-
-
- 内购: {{this.toFixed(autoParams.planIuserAt/10000)}}万元
- 外购: {{this.toFixed(autoParams.planOuserAt/10000)}}万元
- 非人力: {{this.toFixed( autoParams.planNouserAt/10000)}}万元
-
-
-
- 合计: {{this.toFixed(autoParams.planTotalCost/10000)}}万元
-
-
-
-
- 预计收款总额: {{this.toFixed(autoParams.totalReceivables/10000)}}万
- 合同总金额 : {{this.toFixed(autoParams.contractAmt/10000)}}万
-
-
-
-
- 税率:
- 考核标准毛利率:
- 当前毛利率为:{{toFixed(parseFloat2(autoParams.currentBudgetMarginRate)*100,2)}}%
-
-
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 提交
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/views/xm/core/xmProject/XmProjectEdit.vue b/src/views/xm/core/xmProject/XmProjectEdit.vue
index d965f3ad..d4e0cb79 100644
--- a/src/views/xm/core/xmProject/XmProjectEdit.vue
+++ b/src/views/xm/core/xmProject/XmProjectEdit.vue
@@ -14,37 +14,67 @@
-
+
+
+
+
+ 保存
+ 基本信息修改申请
+
+
+
+
+
+ 自动生成
+
+
+ 项目代号为合同上的项目代号,甲乙方共享;项目内部编号为 代号-四位随机码
+
+
+
+
+
项目代号为合同上的项目代号,甲乙方共享;项目内部编号为 代号-四位随机码
-
-
-
-
-
-
-
-
-
-
- 总预算控制
- 项目计划总预算不能大于项目总预算
-
-
- 项目计划预算控制
- 下级计划总预算不能大于上级计划总预算;每条计划的预算金额必须大于其关联任务的预算合计。
-
-
- 实际金额控制
- 每条计划实际金额不能大于预算金额;每条计划的预算金额必须大于其关联的任务的实际金额合计。
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+ scrum
+ 看板
+
+
+
+
+
+
+
+
+
+
+
+
-
+
@@ -66,8 +96,29 @@
-
-
+
+
+
+ 总预算控制
+ 开启后:项目计划总预算大于项目总预算后将无法添加新的计划任务,进行项目预算变更后方可继续添加计划任务。
+
+
+ 总预算超额预警 超出 元将进入预警清单
+
一级计划总预算超出项目预算一定额度,将进入超预算预警项目清单,直到调小计划预算或者调大项目预算后解除。
+
+
+ 实际金额控制
+ 每条计划实际金额不能大于预算金额; 任务的实际金额合计不能大于与任务关联的上级计划的预算。
+
+
+
+
+
+
+ 工期变更申请
+
+
+
小时 参考工时{{autoParams.weekday*8}}小时,工作日{{autoParams.weekday}}天
-
+
+ 工期变化自动更新预估成本/合同金额/预估工时等关联数据
+
+
+
+
+
+
+
+
+
+ 预算变更申请
+
-
+
- 人员类型
+ 类型
人数
- 工作量
- 单价
+ 工作量
+ 单价
总价
- 内购
-
+ 内购
+
- {{autoParams.planIuserWorkload}}人时
-
+ {{autoParams.planIuserWorkload}}h
+
{{this.toFixed(autoParams.planIuserAt)}}元,{{this.toFixed(autoParams.planIuserAt/10000)}} 万元
- 外购
-
+ 外购
+
- {{autoParams.planOuserWorkload}}人时
-
- {{autoParams.planOuserAt }} 元 {{autoParams.planOuserAt/10000 }}万元
+ {{autoParams.planOuserWorkload}}h
+
+ {{autoParams.planOuserAt }} 元 {{autoParams.planOuserAt/10000 }}万元
- 合计
- {{autoParams.planOuserCnt+autoParams.planIuserCnt}}
+ 合计
+ {{autoParams.planOuserCnt+autoParams.planIuserCnt}}人
- {{autoParams.planOuserWorkload+autoParams.planIuserWorkload }}人时,{{ (autoParams.planOuserWorkload+autoParams.planIuserWorkload)/8/20 }}人月
- 平均:{{ (parseFloat2(autoParams.planOuserPrice) + parseFloat2(autoParams.planIuserPrice))/2}}元/人时
+ {{autoParams.planOuserWorkload+autoParams.planIuserWorkload }}h,{{ (autoParams.planOuserWorkload+autoParams.planIuserWorkload)/8/20 }}人月
+ {{ (parseFloat2(autoParams.planOuserPrice) + parseFloat2(autoParams.planIuserPrice))/2}}元/h
{{autoParams.planTotalCost}} 元,{{(autoParams.planTotalCost)/10000}} 万元
@@ -132,33 +195,33 @@
合计: {{this.toFixed(autoParams.planTotalCost/10000)}}万元
-
-
-
-
- 预计收款总额: {{this.toFixed(autoParams.totalReceivables/10000)}}万元
- 合同总金额 : {{this.toFixed(autoParams.contractAmt/10000)}}万元
-
- 税率:
- 考核标准毛利率:
- 当前毛利率为:{{toFixed(parseFloat2(autoParams.currentBudgetMarginRate)*100,2)}}%
-
-
+
+
+
+
+
+ 税率: %
+ 考核标准毛利率:%
+ 当前预估毛利率为:{{toFixed(parseFloat2(autoParams.currentBudgetMarginRate),2)}}%
+
+
+ 预计收\付款总额: {{this.toFixed(autoParams.totalReceivables/10000)}}万元
+ 合同总金额 : {{this.toFixed(editForm.contractAmt/10000)}}万元
+
+
提交
- 基本信息修改申请
- 延期申请
- 立项申请
- 结项申请
- 预算变更申请
- 项目暂停申请
- 项目重新启动申请
-
+
+ 立项申请
+ 结项申请
+ 项目暂停申请
+ 项目重新启动申请
+
@@ -174,7 +237,7 @@
import config from "@/common/config"; //全局公共库
import { initSimpleDicts } from '@/api/mdp/meta/item';//下拉框数据查询
- import { editXmProject,getDefOptions } from '@/api/xm/core/xmProject';
+ import { addXmProject,editXmProject,getDefOptions,createProjectCode } from '@/api/xm/core/xmProject';
import { uploadBase64 } from '@/api/mdp/arc/image';
import { mapGetters } from 'vuex';
@@ -217,14 +280,14 @@
planNouserAt=0.0
}
if(budgetMarginRate==null || budgetMarginRate==''){
- budgetMarginRate=0.4
+ budgetMarginRate=13
}
if(planWorkingHours==null || planWorkingHours==''){
planWorkingHours=0.0
}
if(taxRate==null || taxRate==''){
- taxRate=0.03
+ taxRate=6
}
var autoParams={
@@ -252,13 +315,13 @@
autoParams.planNouserAt= planNouserAt
autoParams.budgetMarginRate=budgetMarginRate
autoParams.planTotalCost= autoParams.planOuserAt + autoParams.planIuserAt + autoParams.planNouserAt
- autoParams.totalReceivables=autoParams.planTotalCost/(1-budgetMarginRate)/ (1-taxRate)
+ autoParams.totalReceivables=autoParams.planTotalCost/(100-budgetMarginRate)*100/ (100-taxRate)*100
autoParams.contractAmt =autoParams.totalReceivables
var totalReceivables=this.editForm.totalReceivables
if(totalReceivables==null || totalReceivables=='' || isNaN(totalReceivables)){
autoParams.currentBudgetMarginRate=-99
}else{
- autoParams.currentBudgetMarginRate= this.toFixed(1-this.editForm.planTotalCost/(this.editForm.totalReceivables* (1-taxRate)),4)
+ autoParams.currentBudgetMarginRate= this.toFixed(1-this.editForm.planTotalCost/(this.editForm.totalReceivables* (100-taxRate)),4)
}
// 1.毛利率=(销售收入-销售成本)/销售收入×100%=(不含税售价-不含税进价)/不含税售价×100%
@@ -296,12 +359,11 @@
}
},
},
- props:['selProject','visible'],
+ props:['selProject','visible','xmProject','opType'/**add、edit */],
watch: {
'visible':function(visible) {
if(visible==true){
- this.editForm=Object.assign({},this.selProject)
- this.dateRanger=[this.editForm.startTime,this.editForm.endTime]
+ this.initData();
}
},
'planTotalAt':{
@@ -315,40 +377,46 @@
//this.editForm.budgetMarginRate=this.toFixed((this.editForm.totalReceivables-this.editForm.planTotalCost)/this.editForm.totalReceivables,4)
},
autoParams(){
- this.fillPlanWorkingHoursToField()
- this.fillPlanCostAtToField();
- this.fillTotalReceivablesToField();
- this.fillBudgetMarginRateToField()
+ if(this.autoSet){
+ this.fillPlanWorkingHoursToField()
+ this.fillPlanCostAtToField();
+ this.fillTotalReceivablesToField();
+ this.fillBudgetMarginRateToField()
+ }
+
},
editForm:{
handler(newValue, oldValue) {
+ if(this.opType==='add'){
+ return;
+ }
this.$notify.closeAll();
this.changeTips=[];
if(this.selProject.planWorkingHours!=this.editForm.planWorkingHours){
var distance=this.selProject.planWorkingHours-this.editForm.planWorkingHours
var operType=distance>0?"-":"+";
- this.changeTips.push("预计总工期: "+ this.selProject.planWorkingHours+" > " +this.editForm.planWorkingHours+" "+operType+Math.abs(distance).toFixed(2)+"小时");
+ this.changeTips.push("预计总工期: "+ this.selProject.planWorkingHours+" ==> " +this.editForm.planWorkingHours+" "+operType+Math.abs(distance).toFixed(2)+"小时");
}
if(this.selProject.planTotalCost!=this.editForm.planTotalCost){
var distance=this.selProject.planTotalCost-this.editForm.planTotalCost
var operType=distance>0?"-":"+";
- this.changeTips.push("预计总成本: "+ this.selProject.planTotalCost+" > " +this.editForm.planTotalCost+" "+operType+Math.abs(distance).toFixed(2)+"元");
+ this.changeTips.push("预计总成本: "+ this.selProject.planTotalCost+" ==> " +this.editForm.planTotalCost+" "+operType+Math.abs(distance).toFixed(2)+"元");
}
if(this.selProject.budgetMarginRate!=this.editForm.budgetMarginRate){
var distance=this.selProject.budgetMarginRate-this.editForm.budgetMarginRate
var operType=distance>0?"-":"+";
- this.changeTips.push("毛利率: "+ this.selProject.budgetMarginRate+" > " +this.editForm.budgetMarginRate+" "+operType+Math.abs(distance).toFixed(2)+"%");
+ this.changeTips.push("毛利率: "+ this.selProject.budgetMarginRate+" ==> " +this.editForm.budgetMarginRate+" "+operType+Math.abs(distance).toFixed(2)+"%");
}
if(this.selProject.totalReceivables!=this.editForm.totalReceivables){
var distance=this.selProject.totalReceivables-this.editForm.totalReceivables
var operType=distance>0?"-":"+";
- this.changeTips.push("预计总收款: "+ this.selProject.totalReceivables+" > " +this.editForm.totalReceivables+" "+operType+Math.abs(distance).toFixed(2)+"元");
+ this.changeTips.push("预计总收款: "+ this.selProject.totalReceivables+" ==> " +this.editForm.totalReceivables+" "+operType+Math.abs(distance).toFixed(2)+"元");
}
if(this.selProject.contractAmt!=this.editForm.contractAmt){
var distance=this.selProject.contractAmt-this.editForm.contractAmt
var operType=distance>0?"-":"+";
- this.changeTips.push("合同金额: "+ this.selProject.contractAmt+" > " +this.editForm.contractAmt+" "+operType+Math.abs(distance).toFixed(2)+"元");
+ this.changeTips.push("合同金额: "+ this.selProject.contractAmt+" ==> " +this.editForm.contractAmt+" "+operType+Math.abs(distance).toFixed(2)+"元");
}
if(this.changeTips.length==0){
@@ -376,17 +444,20 @@
load:{ list: false, add: false, del: false, edit: false },//查询中...
editFormRules: {
name: [{
- required: true, message: '项目名称不可为空' , trigger: 'blur'
+ required: true, message: '项目名称不可为空' , trigger: 'change'
}],
code: [{
- required: true, message: '项目代号不可为空', trigger: 'blur'
+ required: true, message: '项目代号不可为空', trigger: 'change'
}],
xmType: [{
- required: true, message: '项目类型不可为空', trigger: 'blur'
+ required: true, message: '项目类型不可为空', trigger: 'change'
+ }],
+ xmType: [{
+ required: true, message: '项目类型不可为空', trigger: 'change'
}],
priority: [{
- required: true, message: '优先级不可为空', trigger: 'blur'
+ required: true, message: '优先级不可为空', trigger: 'change'
}],
admUserid: [{
required: true, message: '项目总控不能为空', trigger: 'change'
@@ -412,6 +483,7 @@
changeTips:[],//变化日志列表
maxTableHeight:300,
currUserType:'',
+ autoSet:false,
/**end 在上面加自定义属性**/
}//end return
},//end data
@@ -434,15 +506,12 @@
this.$emit('cancel');
},
//编辑提交XmProject xm_project父组件监听@submit="afterEditSubmit"
- editSubmit: function () {
- if(!this.roles.some(i=>i.roleid=='projectAdmin')){
- this.$notify({showClose: true, message: "只有项目经理可以修改项目", type: 'error' });
- return;
- }
- if("0" != this.selProject.status){
+ editSubmit: function () {
+ if(this.opType!=='add' && "0" != this.selProject.status){
this.$notify({showClose: true, message: "只有初始状态的项目可以修改,如确实需要修改,请进行项目变更审批", type: 'error' });
return;
}
+ var msg=this.xmProduct&&this.xmProduct.id?'将自动关联产品【'+this.xmProduct.productName+'】':'';
if (
this.dateRanger != null &&
this.dateRanger.length == 2
@@ -455,13 +524,17 @@
}
this.$refs.editForm.validate((valid) => {
if (valid) {
- this.$confirm('确认提交吗?', '提示', {}).then(() => {
+ this.$confirm('确认提交吗?'+msg, '提示', {}).then(() => {
this.load.edit=true
+ var func=editXmProject;
+ if(this.opType==='add'){
+ func=addXmProject;
+ }
let params = Object.assign({}, this.editForm);
params.planIuserWorkload=this.autoParams.planIuserWorkload
params.planOuserWorkload=this.autoParams.planOuserWorkload
params.planWorkload=this.autoParams.planWorkload
- editXmProject(params).then((res) => {
+ func(params).then((res) => {
this.load.edit=false;
var tips=res.data.tips;
if(tips.isOk){
@@ -728,17 +801,52 @@
},
+ createProjectCode(){
+ createProjectCode({}).then(res=>{
+ var tips=res.data.tips;
+ if(tips.isOk){
+ this.editForm.code=res.data.data
+ }
+ this.$notify({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' });
+ })
+ },
+ initData(){
+ this.editForm={...this.selProject}
+ if(this.opType==='add'){
+ this.editForm.pmUserid=this.userInfo.userid
+ this.editForm.pmUsername=this.userInfo.username
+ this.editForm.admUserid=this.userInfo.userid
+ this.editForm.admUsername=this.userInfo.username
+ this.editForm.assUserid=this.userInfo.userid
+ this.editForm.assUsername=this.userInfo.username
+ this.editForm.status="0"
+ this.editForm.wtype=this.editForm.wtype||"2"
+ this.editForm.workType=this.editForm.workType||"1"
+ this.editForm.xmType=this.editForm.xmType||"2"
+ this.editForm.priority=this.editForm.priority||"2"
+ this.editForm.locked=this.editForm.locked||"0"
+ this.editForm.showOut=this.editForm.showOut||"2"
+ this.editForm.isTpl=this.editForm.isTpl||"0"
+ this.editForm.phaseActCtrl=this.editForm.phaseActCtrl||"1";
+ this.editForm.budgetEarly=this.editForm.budgetEarly||"1";
+ this.editForm.earlyAmt=this.editForm.earlyAmt||-10000;
+ this.editForm.budgetCtrl=this.editForm.budgetCtrl||"0";
+ this.editForm.taxRate=this.editForm.taxRate||6
+ this.editForm.budgetMarginRate=this.editForm.budgetMarginRate||13
+ this.autoSet=true;
+ }else{
+ this.dateRanger=[this.editForm.startTime,this.editForm.endTime]
+ this.autoSet=false;
+ }
+ }
/**end 在上面加自定义方法**/
},//end method
components: { html2canvas,UsersSelect,
//在下面添加其它组件 'xm-project-add':XmProjectEdit
},
mounted() {
- this.maxTableHeight=util.calcTableMaxHeight(this.$refs.table.$el)-20;
- this.editForm=Object.assign({},this.selProject);
- this.dateRanger=[this.editForm.startTime,this.editForm.endTime]
-
-
+ this.maxTableHeight=util.calcTableMaxHeight(this.$refs.table.$el)-20;
+ this.initData();
initSimpleDicts('all',['projectType','priority','projectStatus']).then(res=>{
this.dicts=res.data.data;
})
diff --git a/src/views/xm/core/xmProject/XmProjectForLink.vue b/src/views/xm/core/xmProject/XmProjectForLink.vue
index 2e9c1fc0..c91c92e6 100644
--- a/src/views/xm/core/xmProject/XmProjectForLink.vue
+++ b/src/views/xm/core/xmProject/XmProjectForLink.vue
@@ -5,9 +5,9 @@
-
- 加入更多项目到产品中
-
+
+ 添加更多项目到产品中
+
@@ -43,7 +43,7 @@
import { listXmProject, } from '@/api/xm/core/xmProject';
import { mapGetters } from 'vuex'
import { delXmProductProjectLink, addXmProductProjectLink,batchDelXmProductProjectLink } from '@/api/xm/core/xmProductProjectLink';
-import XmProjectList from './XmProjectList.vue';
+import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect.vue';
@@ -206,7 +206,7 @@ import XmProjectList from './XmProjectList.vue';
},//end methods
components: {
-XmProjectList
+XmProjectSelect
//在下面添加其它组件
},
diff --git a/src/views/xm/core/xmProject/XmProjectForLinkComplex.vue b/src/views/xm/core/xmProject/XmProjectForLinkComplex.vue
index 1123f3d5..89c6e837 100644
--- a/src/views/xm/core/xmProject/XmProjectForLinkComplex.vue
+++ b/src/views/xm/core/xmProject/XmProjectForLinkComplex.vue
@@ -4,15 +4,9 @@
-
-
-
- {{selProject?selProject.name:'选择项目'}}
-
-
+
+
+
@@ -23,7 +17,7 @@
v-model="projectAddVisible"
trigger="manual">
-
+
项目
@@ -35,7 +29,7 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/views/xm/core/xmProject/XmProjectMng.vue b/src/views/xm/core/xmProject/XmProjectMng.vue
index 0097bf33..95992d56 100644
--- a/src/views/xm/core/xmProject/XmProjectMng.vue
+++ b/src/views/xm/core/xmProject/XmProjectMng.vue
@@ -8,6 +8,7 @@
+
@@ -28,8 +29,8 @@
-
-
+
+
查询
-
+
-
+
@@ -301,14 +302,7 @@
取 消
确 定
-
-
-
-
+
@@ -323,13 +317,13 @@
import { loadTasksToXmProjectState , loadTasksSettleToXmProjectState} from '@/api/xm/core/xmProjectState';
import { addXmMyFocus , delXmMyFocus } from '@/api/xm/core/xmMyFocus';
- import XmProjectAdd from './XmProjectAdd';//新增界面
+ import XmProjectAdd from './XmProjectEdit';//新增界面
import XmProjectEdit from './XmProjectEdit';//修改界面
import { mapGetters } from 'vuex'
import xmTaskMng from '../xmTask/XmTaskMng';
import xmProjectInfo from './XmProjectInfo';
import XmProjectTplMng from './XmProjectTplMng';
- import XmProductMng from '../xmProduct/XmProductSelect';
+ import XmProductSelect from '@/views/xm/core/components/XmProductSelect';
if(!Vue.component("xm-project-info")){
@@ -475,7 +469,7 @@
params = this.menuFilter(params);
if(this.filters.productId){
- params.productId = this.filters.productId
+ params.linkProductId = this.filters.productId
}
if(this.filters.status){
params.status = this.filters.status
@@ -866,7 +860,7 @@
'xm-project-add':XmProjectAdd,
'xm-project-edit':XmProjectEdit,
- XmProductMng,
+ XmProductSelect,
xmTaskMng,
XmProjectTplMng,
//在下面添加其它组件
diff --git a/src/views/xm/core/xmProject/XmProjectOverviewComplex.vue b/src/views/xm/core/xmProject/XmProjectOverviewComplex.vue
index 71a565e9..acafb4fd 100644
--- a/src/views/xm/core/xmProject/XmProjectOverviewComplex.vue
+++ b/src/views/xm/core/xmProject/XmProjectOverviewComplex.vue
@@ -95,7 +95,7 @@ export default {
}).catch( err => this.load.calcProject=false );
},
afterFlowSubmit(){
- debugger;
+
listXmProject({id:this.selProject.id}).then(res=>{
var tips = res.data.tips;
if(tips.isOk){
diff --git a/src/views/xm/core/xmProject/XmProjectSelect.vue b/src/views/xm/core/xmProject/XmProjectSelect.vue
deleted file mode 100644
index a6d23ae6..00000000
--- a/src/views/xm/core/xmProject/XmProjectSelect.vue
+++ /dev/null
@@ -1,198 +0,0 @@
-
-
-
-
-
-
-
-
- 项目名称 清空所选关闭
-
-
- {{scope.row.name}}
- {{parseInt(scope.row.totalProgress)}}%
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/views/xm/core/xmProjectState/XmProjectStateMng.vue b/src/views/xm/core/xmProjectState/XmProjectStateMng.vue
index 2a9d0f2e..a008917e 100644
--- a/src/views/xm/core/xmProjectState/XmProjectStateMng.vue
+++ b/src/views/xm/core/xmProjectState/XmProjectStateMng.vue
@@ -1,12 +1,14 @@
-
-
-
+
- 刷新数据
- 刷新结算数据
+
+ 刷新任务统计数据
+
+
+ 刷新结算数据
+
@@ -104,10 +106,7 @@
-
-
-
-
+
@@ -119,8 +118,8 @@
import { listXmProjectState,loadProjectToXmProjectState, loadBugsToXmProjectState, loadTasksToXmProjectState , loadTasksSettleToXmProjectState} from '@/api/xm/core/xmProjectState';
import XmProjectStateAdd from './XmProjectStateAdd';//新增界面
import XmProjectStateEdit from './XmProjectStateEdit';//修改界面
- import { mapGetters } from 'vuex'
- import XmProjectList from '../xmProject/XmProjectList';
+ import { mapGetters } from 'vuex'
+import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect.vue';
export default {
computed: {
@@ -376,10 +375,9 @@
},
/**begin 自定义函数请在下面加**/
- onPorjectConfirm:function(project){
+ onPorjectConfirm:function(nextCommand,project){
this.filters.selProject={...project}
- this.selectProjectVisible=false;
- if(this.nextCommand){
+ if(nextCommand){
this.nextCommand();
}else{
this.searchXmProjectStates();
@@ -429,7 +427,7 @@
},//end methods
components: {
'xm-project-state-add':XmProjectStateAdd,
- 'xm-project-state-edit':XmProjectStateEdit, XmProjectList
+ 'xm-project-state-edit':XmProjectStateEdit,XmProjectSelect,
//在下面添加其它组件
},
mounted() {
diff --git a/src/views/xm/core/xmQuestion/XmQuestionAdd.vue b/src/views/xm/core/xmQuestion/XmQuestionAdd.vue
index b36105be..fdc88f70 100644
--- a/src/views/xm/core/xmQuestion/XmQuestionAdd.vue
+++ b/src/views/xm/core/xmQuestion/XmQuestionAdd.vue
@@ -12,16 +12,16 @@
-
-
+
-
{{addForm.menuName?addForm.menuName:"未关联需求"}}
+ {{addForm.menuName?addForm.menuName:"未关联需求"}}
- {{this.filters.selProject?this.filters.selProject.name:'未关联项目'}}
+ {{this.filters.selProject?this.filters.selProject.name:''}}
+
@@ -130,12 +130,8 @@
-
-
-
-
-
-
+
+
取消
@@ -155,7 +151,7 @@
import XmGroupMng from '../xmGroup/XmGroupSelect';
import xmMenuSelect from '../xmMenu/XmMenuSelect';
- import XmProjectList from '../xmProject/XmProjectList';
+ import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect';
import XmTaskList from '../xmTask/XmTaskList';
@@ -236,6 +232,7 @@
opStepEditorVisible:false,
expectResultEditorVisible:false,
descriptionEditorVisible:false,
+ xmProductVersions:[{id:"1.0.0" ,name:'1.0.0'}],
/**end 在上面加自定义属性**/
}//end return
@@ -375,6 +372,7 @@
showSelectMenu:function(){
if(this.filters.selProject==null){
this.$notify({showClose: true, message: "请先选项目", type: 'error' });
+ this.$refs.xmProjectSelect.projectVisible=true;
return ;
}
this.selectMenuVisible=true;
@@ -398,10 +396,7 @@
sendToAsk(){
this.addForm.handlerUsername=this.addForm.askUsername
this.addForm.handlerUserid=this.addForm.askUserid
- },
- showProjectList:function(){
- this.selectProjectVisible=true;
- },
+ },
onPorjectConfirm:function(project){
this.filters.selProject=project
this.addForm.projectId=project.id
@@ -433,7 +428,7 @@
},//end method
components: {
//在下面添加其它组件 'xm-question-edit':XmQuestionEdit
- 'upload': AttachmentUpload,XmGroupMng,VueEditor,XmTaskList,xmMenuSelect,XmProjectList
+ 'upload': AttachmentUpload,XmGroupMng,VueEditor,XmTaskList,xmMenuSelect,XmProjectSelect
},
mounted() {
console.log("question_add");
diff --git a/src/views/xm/core/xmQuestion/XmQuestionEdit.vue b/src/views/xm/core/xmQuestion/XmQuestionEdit.vue
index cae66c2d..e074cc4d 100644
--- a/src/views/xm/core/xmQuestion/XmQuestionEdit.vue
+++ b/src/views/xm/core/xmQuestion/XmQuestionEdit.vue
@@ -2,11 +2,19 @@
-
-
-
-
-
+
+
+
+
+ {{item.name}}
+
+
@@ -137,22 +145,13 @@
-
+
取消
- 保存
- 确认
- 不是缺陷
- 直接解决
- 直接关闭
- 解决
- 关闭
- 关闭
- 重新激活
- 重新激活
+ 保存
@@ -190,17 +189,19 @@
]),
calcBugStep(){
- if(this.editForm.bugStatus=='active'){
- return 1
- }else if(this.editForm.bugStatus=='confirmed'){
- return 2
- }else if(this.editForm.bugStatus=='resolved'){
- return 3
- }else if(this.editForm.bugStatus=='closed'){
- return 4
+ if(this.dicts['bugStatus'] && this.editForm){
+ var index=this.dicts['bugStatus'].findIndex(i=>{
+ if(i.id==this.editForm.bugStatus){
+ return true;
+ }else{
+ return false;
+ }
+ })
+ return index+1;
}else{
- return 1;
+ return 0;
}
+
}
},
props:['xmQuestion','visible',"selProject"],
@@ -241,7 +242,7 @@
},
//新增界面数据 xm_question
editForm: {
- id:'',name:'',projectId:'',projectName:'',taskId:'',taskName:'',endTime:'',askUserid:'',askUsername:'',handlerUserid:'',handlerUsername:'',priority:'',solution:'',processTime:'',receiptMessage:'',receiptTime:'',description:'',createUserid:'',createUsername:'',createTime:'',status:'',receiptMessage:'',
+ id:'',name:'',projectId:'',projectName:'',taskId:'',taskName:'',endTime:'',askUserid:'',askUsername:'',handlerUserid:'',handlerUsername:'',priority:'',solution:'',processTime:'',receiptMessage:'',receiptTime:'',description:'',createUserid:'',createUsername:'',createTime:'',bugStatus:'',receiptMessage:'',
attachment: [],iterationId:'',iterationName:'',productId:'',
},
/**begin 在下面加自定义属性,记得补上面的一个逗号**/
diff --git a/src/views/xm/core/xmQuestion/XmQuestionMng.vue b/src/views/xm/core/xmQuestion/XmQuestionMng.vue
index db9419c8..fd167333 100644
--- a/src/views/xm/core/xmQuestion/XmQuestionMng.vue
+++ b/src/views/xm/core/xmQuestion/XmQuestionMng.vue
@@ -1,7 +1,10 @@
-
+
+
+
+
{{b.name}}
@@ -14,8 +17,8 @@
- 标签
- {{filters.tags[0].tagName.substr(0,5)}}等({{filters.tags.length}})个
+ 标签
+ {{filters.tags[0].tagName.substr(0,5)}}等({{filters.tags.length}})个
@@ -25,16 +28,7 @@
title="更多查询条件或操作"
width="600"
trigger="click" >
-
-
- 产品:{{this.filters.product.productName}}
- 选产品
-
-
- 项目:
- {{ filters.selProject.name }}
- 选择项目
-
+
需求:
需求
@@ -120,8 +114,7 @@
-
-
+
@@ -131,28 +124,57 @@
-
- {{formatterOption(scope.row,{property:'bugSeverity'},scope.row.bugSeverity)}}
- {{formatterOption(scope.row,{property:'bugSeverity'},scope.row.bugSeverity)}}
- {{formatterOption(scope.row,{property:'bugSeverity'},scope.row.bugSeverity)}}
- {{formatterOption(scope.row,{property:'bugSeverity'},scope.row.bugSeverity)}}
- {{formatterOption(scope.row,{property:'bugSeverity'},scope.row.bugSeverity)}}
- {{scope.row.name}}
-
-
+
+ {{scope.row.name}}
+
-
- 创建
- 已激活
- 确认
- 已确认
- 解决
- 已解决
- 关闭
- 已关闭
- {{scope.row.bugStatus}}
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+
+
+ {{formaterByDicts(scope.row,'solution',scope.row.solution)}}
+
+
+
+
+
+
+
+
+
+
+
+ {{formaterByDicts(scope.row,'bugSeverity',scope.row.bugSeverity)}}
+
+
+
+
+
+
@@ -163,16 +185,27 @@
-
+
+
+
+ {{ scope.row.handlerUsername}}
+
+
+ 负责人
+
+
-
-
-
-
- 编辑
+
+
+ {{ scope.row.tagNames}}
+
+
+ 标签
+
+
@@ -185,26 +218,13 @@
-
-
-
-
-
-
-
+
-
-
-
-
-
+
-
-
-
-
-
+
+
+
+
diff --git a/src/views/xm/core/xmTaskSbill/XmTaskSbillEdit.vue b/src/views/xm/core/xmTaskSbill/XmTaskSbillEdit.vue
new file mode 100644
index 00000000..5706b5ce
--- /dev/null
+++ b/src/views/xm/core/xmTaskSbill/XmTaskSbillEdit.vue
@@ -0,0 +1,217 @@
+
+
+
+
+
+
+
+
+ 选择项目
+ {{editForm.projectId}}
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+ 提交
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/xm/core/xmTaskSbill/XmTaskSbillMng.vue b/src/views/xm/core/xmTaskSbill/XmTaskSbillMng.vue
new file mode 100644
index 00000000..f8a37e16
--- /dev/null
+++ b/src/views/xm/core/xmTaskSbill/XmTaskSbillMng.vue
@@ -0,0 +1,265 @@
+
+
+
+
+ 查询
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/xm/core/xmTaskWorkload/XmTaskWorkloadEdit.vue b/src/views/xm/core/xmTaskWorkload/XmTaskWorkloadEdit.vue
new file mode 100644
index 00000000..bd501905
--- /dev/null
+++ b/src/views/xm/core/xmTaskWorkload/XmTaskWorkloadEdit.vue
@@ -0,0 +1,174 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+ 提交
+
+
+
+
+
+
+
diff --git a/src/views/xm/core/xmTaskWorkload/XmTaskWorkloadMng.vue b/src/views/xm/core/xmTaskWorkload/XmTaskWorkloadMng.vue
new file mode 100644
index 00000000..0d49d0e6
--- /dev/null
+++ b/src/views/xm/core/xmTaskWorkload/XmTaskWorkloadMng.vue
@@ -0,0 +1,260 @@
+
+
+
+
+ 查询
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/xm/core/xmTestCase/XmTestCaseMng.vue b/src/views/xm/core/xmTestCase/XmTestCaseMng.vue
index 154f5b65..b74fe2ee 100644
--- a/src/views/xm/core/xmTestCase/XmTestCaseMng.vue
+++ b/src/views/xm/core/xmTestCase/XmTestCaseMng.vue
@@ -3,7 +3,7 @@
{{this.filters.product.productName}}
- 选产品
+
选择需求
{{filters.menus[0].menuName.substr(0,5)}}等({{filters.menus.length}})个
@@ -22,12 +22,11 @@
trigger="click" >
- 产品:{{this.filters.product.productName}}
- 选产品
+ 产品:
+
- 项目:{{this.filters.selProject.name}}
- 选项目
+
需求:
@@ -107,9 +106,6 @@
-
-
-
@@ -117,11 +113,7 @@
-
-
-
-
-
+
@@ -134,9 +126,9 @@
import XmTestCaseEdit from './XmTestCaseEdit';//修改界面
import { mapGetters } from 'vuex'
import xmMenuSelect from '../xmMenu/XmMenuSelect';
- import XmProductSelect from '../xmProduct/XmProductSelect';//修改界面
+ import XmProductSelect from '@/views/xm/core/components/XmProductSelect';//修改界面
- import XmProjectList from '../xmProject/XmProjectList';
+ import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect';
import XmGroupMng from '../xmGroup/XmGroupMng';
export default {
@@ -448,7 +440,7 @@
components: {
'xm-test-case-add':XmTestCaseAdd,
'xm-test-case-edit':XmTestCaseEdit,
- xmMenuSelect,XmProductSelect,XmProjectList,XmGroupMng
+ xmMenuSelect,XmProductSelect,XmProjectSelect,XmGroupMng
//在下面添加其它组件
},
mounted() {
diff --git a/src/views/xm/core/xmTestCaseExec/XmTestCaseExecMng.vue b/src/views/xm/core/xmTestCaseExec/XmTestCaseExecMng.vue
index 49610bf3..16c8003f 100644
--- a/src/views/xm/core/xmTestCaseExec/XmTestCaseExecMng.vue
+++ b/src/views/xm/core/xmTestCaseExec/XmTestCaseExecMng.vue
@@ -2,8 +2,8 @@
甘特图
- {{ this.filters.selProject.name }}
- 选择项目
+
+
选择需求
{{filters.menus[0].menuName.substr(0,5)}}等({{filters.menus.length}})个
@@ -20,12 +20,10 @@
trigger="click" >
- 产品:{{this.filters.product.productName}}
- 选产品
+
- 项目:{{this.filters.selProject.name}}
- 选项目
+
需求:
@@ -168,10 +166,7 @@
-
-
-
-
+
@@ -193,11 +188,7 @@
-
-
-
-
-
+
@@ -218,18 +209,18 @@
import XmTestCaseExecAdd from './XmTestCaseExecAdd';//新增界面
import XmTestCaseExecEdit from './XmTestCaseExecEdit';//修改界面
import XmTestCaseMng from '../xmTestCase/XmTestCaseMng';//修改界面
- import XmProjectList from '../xmProject/XmProjectList';
+ import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect';
import xmMenuSelect from '../xmMenu/XmMenuSelect';
import XmGroupMng from '../xmGroup/XmGroupMng';
import XmTaskList from '../xmTask/XmTaskList';
import XmTestCaseEdit from '../xmTestCase/XmTestCaseEdit';//修改界面
import XmQuestionMng from '../xmQuestion/XmQuestionMng';//修改界面
import XmQuestionAdd from '../xmQuestion/XmQuestionAdd';//修改界面
- import XmProductSelect from '../xmProduct/XmProductSelect';//修改界面
+ import XmProductSelect from '@/views/xm/core/components/XmProductSelect';//修改界面
import XmGantt from '../components/xm-gantt';
import { mapGetters } from 'vuex'
-
+
export default {
computed: {
...mapGetters([
@@ -502,7 +493,7 @@
showCase(){
if(!this.filters.selProject){
this.$notify({showClose: true,message:"请先选择项目",type:"warning"});
- this.nextAction="showCase"
+ nextAction="showCase"
this.showProjectList();
return;
}
@@ -516,28 +507,28 @@
showProjectList:function(){
this.selectProjectVisible=true;
},
- onPorjectConfirm:function(project){
+ onPorjectConfirm:function(nextAction,project){
this.filters.selProject=project
this.selectProjectVisible=false;
this.getXmTestCaseExecs();
- if(this.nextAction=="showBatchEdit"){
+ if(nextAction=="showBatchEdit"){
this.showBatchEdit();
- this.nextAction=""
- }else if(this.nextAction=="showCase"){
+ nextAction=""
+ }else if(nextAction=="showCase"){
this.showCase();
- this.nextAction=""
- }else if(this.nextAction=="showAddBug"){
+ nextAction=""
+ }else if(nextAction=="showAddBug"){
this.showAddBug(this.editForm);
- this.nextAction=""
- }else if(this.nextAction=="showBugs"){
+ nextAction=""
+ }else if(nextAction=="showBugs"){
this.showBugs(this.editForm);
- this.nextAction=""
- }else if(this.nextAction=="showSelectTask"){
+ nextAction=""
+ }else if(nextAction=="showSelectTask"){
this.showSelectTask(this.editForm);
- this.nextAction=""
- }else if(this.nextAction=="showExecUsersForFilters"){
+ nextAction=""
+ }else if(nextAction=="showExecUsersForFilters"){
this.showExecUsersForFilters();
- this.nextAction=""
+ nextAction=""
}
},
formatterExecStatus(row,column,cellValue, index){
@@ -589,7 +580,7 @@
}
if( !this.filters.selProject ){
this.$notify({showClose: true, message:"请先选择项目", type: 'warning'});
- this.nextAction="showBatchEdit"
+ nextAction="showBatchEdit"
this.showProjectList();
return ;
}
@@ -641,7 +632,7 @@
},
showExecUsersForFilters:function(){
if(!this.filters.selProject){
- this.nextAction="showExecUsersForFilters"
+ nextAction="showExecUsersForFilters"
this.showProjectList();
}else{
this.selectUserForFiltersVisible=true;
@@ -654,8 +645,8 @@
}else{
this.filters.execUser=groupUsers[0]
}
- if(this.nextAction=="showExecUsersForFilters"){
- this.nextAction=""
+ if(nextAction=="showExecUsersForFilters"){
+ nextAction=""
}
this.selectUserForFiltersVisible=false
this.searchXmTestCaseExecs();
@@ -677,7 +668,7 @@
this.editForm=row
if(this.filters.selProject==null){
this.$notify({showClose: true, message: "请先选项目", type: 'success' });
- this.nextAction="showSelectTask"
+ nextAction="showSelectTask"
this.showProjectList();
return ;
@@ -707,7 +698,7 @@
if(!this.filters.selProject){
this.$notify({showClose: true, message: "请先选项目", type: 'success' });
this.showProjectList();
- this.nextAction="showBugs"
+ nextAction="showBugs"
return ;
}
if(row.caseId){
@@ -724,7 +715,7 @@
if(!this.filters.selProject){
this.$notify({showClose: true, message: "请先选项目", type: 'success' });
- this.nextAction="showAddBug"
+ nextAction="showAddBug"
this.showProjectList();
return ;
}
@@ -747,10 +738,11 @@
components: {
'xm-test-case-exec-add':XmTestCaseExecAdd,
'xm-test-case-exec-edit':XmTestCaseExecEdit,
- XmTestCaseMng,XmProjectList,xmMenuSelect,XmGroupMng,XmTaskList,XmTestCaseEdit,XmQuestionMng,XmQuestionAdd, XmGantt,XmProductSelect
+ XmTestCaseMng,XmProjectSelect,xmMenuSelect,XmGroupMng,XmTaskList,XmTestCaseEdit,XmQuestionMng,XmQuestionAdd, XmGantt,XmProductSelect
//在下面添加其它组件
},
- mounted() {
+
+XmProjectSelectmounted() {
this.filters.selProject=this.selProject;
this.filters.execUser=this.userInfo;
this.$nextTick(() => {