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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + \ 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 @@ + + + + \ 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 @@ - \ 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 @@ - - - - - \ 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 @@ - - - - - - \ 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 @@ @@ -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 @@