import { observable, action, autorun,toJS } from 'mobx'; import {WeaTools,WeaLocaleProvider} from "ecCom" import objectAssign from 'object-assign'; import {message,Modal} from 'antd'; const confirm = Modal.confirm; import isEqual from 'lodash/isEqual'; import {WeaTableNew,WeaForm} from 'comsMobx' const {TableStore} = WeaTableNew; const {ls} = WeaTools; const getLabel = WeaLocaleProvider.getLabel; import * as Apis from '../../apis/project'; import * as BoardApis from '../../apis/projecboard'; import * as Common_Apis from '../../apis/index'; import * as Task_Apis from "../../apis/task"; import {AddProjectStore} from "../addProjectStore"; import {ProjectInfoStore} from '../projectInfoStore'; import {ShareStore} from '../shareStore' import {TaskInfoStore} from '../task/taskInfoStore' import {ExchangeStore } from "../exchangeStore" import { RelateListStore } from '../taskListStore'; // import {cptAddFormRules} from "../../util/index" export class PrjCardStore { @observable tabDatas = []; @observable selectTabKey = "1" @observable loading = false; @observable prjid =""; @observable prjname =""; @observable targetid =""; discusstype = "PP"; taskname=""; @observable showSearchAd = false // 高级搜索显示 @observable rightMenu = []; @observable form = new WeaForm(); //项目信息 @observable templatename = "";//模板名称 @observable doSaveVisible = false; @observable fieldInfo = []; @observable prjinfoRight = { hasRight:false, verified:false }; @observable prjisdel = false; validateRules = {}; //校验规则 @observable prjSubStore = new TableStore(); //子项目 @observable prjSubform = new WeaForm(); @observable prjsubRight ={ hasRight:false, verified:false } @observable condition = []; //高级搜索 @observable addProjectStore = new AddProjectStore(); @observable exchangeList = ""; @observable _BrowserList = { 'create': {remark: ''}, datas: [], }; @observable shareTableStore = new TableStore(); //共享 @observable shareStore = new ShareStore(); @observable isShowShare = false; @observable shareRight={ hasRight:false, verified:false } @observable projectInfoStore = new ProjectInfoStore(); @observable stastics = []; //统计报告 @observable statkey = 0; //统计报告 @observable taskListTableStore = new TableStore({dataHandle: (datas) => { //任务列表 datas.forEach((data) => { if (typeof(data.subListspan) == 'string') { data.subListspan = data.subListspan ? JSON.parse(data.subListspan) : undefined; } }); return datas; }}); @observable taskListform = new WeaForm(); @observable taskListquickform = new WeaForm(); @observable taskListTabs = []; @observable taskListSearchParams = { version:"0" }; @observable taskListQuickitems = []; @observable taskListRight={ hasRight:false, verified:false } @observable relateListStore = new RelateListStore(); @observable taskInfoStore = new TaskInfoStore(); @observable exchangeStore = new ExchangeStore(); @observable prjLogTableStore = new TableStore(); //日志 @observable prjFieldLogTableStore = new TableStore(); //字段日志 @observable prjFieldDetailLogTableStore = new TableStore(); //字段详情日志 @observable fieldLogVisible = false; @observable fieldDetailLogVisible = false; @observable fieldname = ''; @observable field = ''; @observable verified = false; @observable hasRight = false; //权限 @observable showEditTask = false; @observable isreload = false; @observable stageInfo = { stageColumns: [], stageColumnDatas: [], selectedRowKeys: [], selectedDatas: {}, canedit:false } @observable approveplanstatus = false; @observable resourceInfo = { cptList : [], prjList : [], taskList : [], accList : [], wfList : [], cusList : [], docList : [] } @observable isBatchEdit = 0; @observable isApprove = false; @observable status = ''; @action setPrjId = (prjid) => { this.prjid = prjid; } @action reLoad = (tableStore) => { tableStore.getDatas(tableStore.dataKey, tableStore.current,tableStore.pageSize,tableStore.sortParams) } @action refTaskList =(params={})=>{ this.getPrjTaskCondition(params); this.getPrjTaskVersion(params); this.getPrjTaskList(params); } //设置选中按钮 changeTab = (key) => { this.selectTabKey = key; this.rightMenu = []; const tabDatas = toJS(this.tabDatas); if (tabDatas) { for (let i = 0; i < tabDatas.length; i++) { if (tabDatas[i].id == key && tabDatas[i].shortname == "prjinfo") { //基本信息 this.getPrjInfo({ viewtype: 'view', prjid: this.prjid }); } else if (tabDatas[i].id == key && tabDatas[i].shortname == "tasklist") {//任务列表 this.getPrjTaskCondition(); this.getPrjTaskVersion(); this.getPrjTaskList(); } else if (tabDatas[i].id == key && tabDatas[i].shortname == "childprj") { //子项目 this.getPrjSubList(); this.getPrjSubCondition(); } else if (tabDatas[i].id == key && tabDatas[i].shortname == "prjdiscuss") { //相关交流 this.targetid = this.prjid; this.getExchangeList({}); } else if (tabDatas[i].id == key && tabDatas[i].shortname == "prjshare") { //共享设置 this.getPrjShareList(); } else if (tabDatas[i].id == key && tabDatas[i].shortname == "stareport") { //统计报告 this.getPrjStastics(); } else if (tabDatas[i].id == key && tabDatas[i].shortname == "stageset") { //项目阶段 this.clearStageStatus(); this.getPrjTempletStageList(); } else if (tabDatas[i].id == key && tabDatas[i].shortname == "resources") { //甘特图 this.getPrjResourceInfo(); } } } } getPrjTabs=(params={})=>{ this.prjid = params.prjid; this.prjisdel = false; Apis.getPrjTabs(params).then(data=>{ if(!data.isright && typeof(data.isright) !== "undefined"){ this.hasRight = data.isright; this.verified = true; }else{ this.hasRight = true; this.verified = true; this.tabDatas = data.tabs ; } }) } getPrjInfo=(params={})=>{ this.loading = true; this.form = new WeaForm(); Apis.getPrjInfo(params).then(data=>{ if(!data.isright && typeof(data.isright) !== "undefined"){ this.prjinfoRight = { hasRight:data.isright, verified:true }; }else{ this.prjinfoRight = { hasRight:true, verified:true }; this.isApprove = data.isApprove; this.fieldInfo = data.fieldinfo; this.rightMenu = data.rightMenus; this.prjname = data.prjname; this.prjid = data.prjid; this.form && !this.form.isFormInit && this.form.initFormFields(data.fieldinfo); } this.loading = false; }) } //项目看板卡片 getPrjInfoForBoard=(params={})=>{ this.loading = true; this.form = new WeaForm(); BoardApis.getPrjInfoForBoard(params).then(data=>{ if(!data.isright && typeof(data.isright) !== "undefined"){ this.prjinfoRight = { hasRight:data.isright, verified:true }; }else{ this.prjinfoRight = { hasRight:true, verified:true }; this.fieldInfo = data.fieldinfo; this.rightMenu = data.rightMenus; this.prjname = data.prjname; this.prjid = data.prjid; this.form && !this.form.isFormInit && this.form.initFormFields(data.fieldinfo); } this.loading = false; }) } //项目看板卡片 -- 编辑保存 savePrjInfoForBoard=(params={})=>{ this.loading = true; this.form.validateForm().then(f=>{ if(f.isValid){ let newParams = {...toJS(this.form.getFormParams()),method:"edit",prjid:this.prjid,...params}; Apis.savePrjInfo(newParams).then(data=>{ if(data.success){ this.getPrjInfoForBoard({viewtype:"edit",prjid:this.prjid}); }else{ // Modal.warning({ // title: getLabel(15172,"系统提示"), // content: data.msg, // }); message.error(data.msg); } }) }else{ f.showErrors(); } }); } //项目信息 -- 编辑保存 savePrjInfo=(params={},boardStore)=>{ this.form.validateForm().then(f=>{ if(f.isValid){ let newParams = {...toJS(this.form.getFormParams()),method:"edit",prjid:this.prjid,...params}; Apis.savePrjInfo(newParams).then(data=>{ if(data.success){ this.getPrjInfo({viewtype:"view",prjid:this.prjid}); boardStore.getProjectList(); }else{ // Modal.warning({ // title: getLabel(15172,"系统提示"), // content: data.msg, // }); message.error(data.msg); } }) }else{ f.showErrors(); } }); } //项目执行操作 @action doPlanOpt=(params={},boardStore)=>{ Apis.doPlanOpt(params).then(data=>{ // this.getPrjInfo({viewtype:"view",prjid:this.prjid,...params}); boardStore.getProjectList(); }); } //子项目执行操作 @action doSubPlanOpt = (params = {}) => { Apis.doPlanOpt(params).then(data => { this.getPrjSubList(); }); } //任务列表执行操作 @action doPlanOpt_task=(params={},boardStore)=>{ this.approveplanstatus = true; Apis.doPlanOpt(params).then(data=>{ if(data.success){ this.getPrjTaskList(params); this.getPrjTaskCondition(params); this.getPrjTaskVersion(params); boardStore.getProjectList(); Modal.success({ title: getLabel(15172,"系统提示"), content: getLabel(16248,"提交成功"), }); }else{ Modal.error({ title: getLabel(15172,"系统提示"), content: getLabel(15173,"提交失败"), }); } this.approveplanstatus = false; }); } //项目任务保存为计划版本操作 @action saveasplan=(params={})=>{ let _this = this; Modal.confirm({ title: getLabel(15172,"系统提示"), content: getLabel(83928,"您确认要存为计划版本吗?"), onOk() { Apis.doPlanOpt(params).then(data=>{ _this.getPrjTaskList(); _this.getPrjTaskCondition(); _this.getPrjTaskVersion(); }); }, onCancel() { }, }) } //导出 @action doTaskExcelExp=(params={})=>{ this.loading = true; let newParams = { ...toJS(this.taskListSearchParams), ...toJS(this.taskListform.getFormParams()), ...toJS(this.taskListquickform.getFormParams()), prjid: this.prjid, ...params }; //获取表单的参数值 if(window.setShare4ec){ window.setShare4ec({ mouldCode: 'PRJ', itemCode: 'PRJ_EXPORT_3', encrypt: '1', targetid: "" } , (datas)=>{ const {status,sharepassword = '',serialid = ''} = datas; if(status === '1'){ newParams.sharepassword = sharepassword; newParams.itemCode = 'PRJ_EXPORT_3'; WeaTools.callApi('/api/proj/pctask/doTaskExcelExp','GET',newParams).then(data => { window.location=(window.ecologyContentPath || '')+"/weaver/weaver.file.ExcelOut"; this.loading = false; }).catch(err=>message.error(err)) } }); }else{ WeaTools.callApi('/api/proj/pctask/doTaskExcelExp','GET',newParams).then(data => { window.location=(window.ecologyContentPath || '')+"/weaver/weaver.file.ExcelOut"; this.loading = false; }).catch(err=>message.error(err)) } } setVisiable = (bool) => { this.doSaveVisible = bool; this.templatename=this.prjname; } saveTemplateName =(data)=> { this.templatename = data; } //项目卡片另存为模板 @action doSaveTemplet = (params = {}) => { Apis.doSaveTemplet({ prjname:this.templatename, prjid:this.prjid }).then(data => { if (data.success) { Modal.success({ title: getLabel(15172, "系统提示"), content: getLabel(19468, "另存为模板") + getLabel(84565, "成功!"), }); } else { Modal.error({ title: getLabel(15172, "系统提示"), content: getLabel(19468, "另存为模板") + getLabel(84566, "失败!"), }); } this.setVisiable(false); }); } //项目删除 @action delPrjInfo=(params={},boardStore)=>{ let _this = this; Modal.confirm({ title: getLabel(15172,"系统提示"), content: getLabel(383860,"您确认要删除项目吗?"), onOk() { Apis.delPrjInfo(params).then(data=>{ _this.prjisdel=true; boardStore.getProjectList(); if(typeof window.opener._table !== "undefined"){ window.opener._table.reLoad(); window.close(); } }); }, onCancel() { }, }) } //项目信息-校验规则 setValidate= (params={}) =>{ this.validateRules = params; } //子项目列表 getPrjSubList=(params={})=>{ this.loading = true; const searchParamsAd = this.prjSubform.getFormParams(); const newParams = { prjid:this.prjid, ...searchParamsAd, ...params }; Apis.getPrjSubList(newParams).then(data=>{ if(!data.isright && typeof(data.isright) !== "undefined"){ this.prjsubRight = { hasRight:data.isright, verified:true }; }else{ this.prjsubRight = { hasRight:true, verified:true }; this.prjSubStore.getDatas(data.sessionkey, 1); this.rightMenu = data.rightMenus; this.loading = false; } }); } //子项目 高级搜索 getPrjSubCondition=()=>{ this.prjSubform = new WeaForm(); Apis.getPrjCondition({conditiontype :"prjsub"}).then(data=>{ this.condition = data.condition; this.prjSubform && !this.prjSubform.isFormInit && this.prjSubform.initFormFields(data.condition); }) } //删除 exchangeDelete = (value) => { let _this = this; Apis.exchangeDelete(value).then(data => { if(data.status){ _this.getExchangeList() }else { message.error(data.error ? data.error : `${getLabel(384137,'操作失败!')}`); } }) } //获取相关交流信息 @action getExchangeList = (value) => { this.loading = true; let _this = this; const newParams = { types: "PP", sortid: this.prjid, ...value }; Apis.getExchangeList(newParams).then(data => { let exchange = { ...data } exchange.datas.forEach((element, index) => { element.isEdit = false }) exchange.datas.unshift({ id: 'create', isEdit: true, remark: '', docids: [], projectids: [], relatedcus: [], relateddoc: [], relatedprj: [], relatedwf: [], }) _this.exchangeList = exchange; _this._BrowserList = { 'create': {remark: ''}, datas: [], }; _this.exchangeList.datas&&_this.exchangeList.datas.forEach((element, index) => { if (_this._BrowserList[element['id']] == undefined) { _this._BrowserList[element['id']] = {}; } _this._BrowserList[element['id']].remark = element.remark; _this._BrowserList[element['id']].docids = element.docids; _this._BrowserList[element['id']].projectids = element.projectids; _this._BrowserList[element['id']].relatedcus = element.relatedcus; _this._BrowserList[element['id']].relateddoc = element.relateddoc; _this._BrowserList[element['id']].relatedprj = element.relatedprj; _this._BrowserList[element['id']].relatedwf = element.relatedwf; }) _this._BrowserList.datas = _this.exchangeList.datas; this.loading = false; }) } //相关交流datas循环 changeDiscussList = (value = {}) => { this.exchangeList = value; this.exchangeList.datas&&this.exchangeList.datas.forEach((element, index) => { if (this._BrowserList[element['id']] == undefined) { this._BrowserList[element['id']] = {}; } this._BrowserList[element['id']].remark = element.remark; this._BrowserList[element['id']].docids = element.docids; this._BrowserList[element['id']].projectids = element.projectids; this._BrowserList[element['id']].relatedcus = element.relatedcus; this._BrowserList[element['id']].relateddoc = element.relateddoc; this._BrowserList[element['id']].relatedprj = element.relatedprj; this._BrowserList[element['id']].relatedwf = element.relatedwf; }) this._BrowserList.datas = this.exchangeList.datas; } //相关交流提交 exchangeSave = (value) => { let _this = this; Apis.exchangeSave({...value,discusstype:'PP'}).then(data => { if(data.status){ _this.getExchangeList({ }); }else { message.error(data.error ? data.error : `${getLabel(384137,'操作失败!')}`); } }) } //相关交流提交 setBrowserList = (_BrowserList) => { this._BrowserList = _BrowserList; } //高级搜索设值 setFormFields=(value)=>{ if(this.selectTabKey == "1"){ //项目信息 this.form.updateFields(value, false); //true代表完全覆盖方式更新条件值 } if(this.selectTabKey == "3"){ //子项目 this.prjSubform.updateFields(value, false); //true代表完全覆盖方式更新条件值 } if(this.selectTabKey == "2"){ //任务列表 this.taskListform.updateFields(value, false); //true代表完全覆盖方式更新条件值 } } appendFormFields =(value)=>{ this.setFormFields(value); } //共享 getPrjShareList=(params={})=>{ //获取表单的参数值 this.loading = true; const newParams = { prjid:this.prjid, ...params }; Apis.getPrjShare(newParams).then(data=>{ if(!data.isright && typeof(data.isright) !== "undefined"){ this.shareRight = { hasRight:data.isright, verified:true }; }else{ this.shareRight = { hasRight:true, verified:true }; this.shareTableStore.getDatas(data.sessionkey, 1); this.rightMenu = data.rightMenus; } this.loading = false; }); } showAddShareModal =(bool)=>{ this.isShowShare = bool; } //统计报告 getPrjStastics = (params={}) =>{ this.loading = true; Apis.getPrjStastics({prjid:this.prjid,...params}).then(data=>{ this.stastics = data; this.loading = false; this.statkey++; }) } //任务列表 getPrjTaskList = (params={}) =>{ this.loading = true; let newParams = {...toJS(this.taskListSearchParams),...toJS(this.taskListform.getFormParams()),...toJS(this.taskListquickform.getFormParams()),prjid:this.prjid,...params}; for(let item in newParams){ if(newParams[item] == ""){ delete newParams[item] } } if(newParams.version == "0"){newParams.version = ""} newParams.isBatchEdit = this.isBatchEdit; Apis.getPrjTaskList(newParams).then(data=>{ if(!data.isright && typeof(data.isright) !== "undefined"){ this.taskListRight = { hasRight:data.isright, verified:true }; }else{ this.taskListRight = { hasRight:true, verified:true }; this.status = data.status; this.taskListTableStore.getDatas(data.sessionkey, 1); this.rightMenu = data.rightMenus; this.taskListSearchParams = {...this.taskListSearchParams,...params} this.taskListSearchParams = params.version==""?{version:"0"}:{...this.taskListSearchParams,...params}; }; this.loading = false; }) } //任务列表-condition getPrjTaskCondition=()=>{ this.taskListform = new WeaForm(); this.taskListquickform = new WeaForm(); this.condition = []; this.taskListQuickitems = []; this.taskListSearchParams = {version: this.taskListSearchParams.version}; Common_Apis.getTaskCondition({conditiontype :"prjtasklist",prjid:this.prjid}).then(data=>{ this.condition = data.condition; this.taskListQuickitems = data.quickitmes; this.taskListform && !this.taskListform.isFormInit && this.taskListform.initFormFields(data.condition); this.taskListquickform && !this.taskListquickform.isFormInit && this.taskListquickform.initFormFields(data.quickitmes); }) } getPrjTaskVersion=()=>{ Apis.getPrjTaskVersion({prjid:this.prjid}).then(data=>{ this.taskListTabs = data; }) } showEditTaskModal=(bool)=>{ this.showEditTask = bool; } //form 重置 clearFormFields=()=>{ if(this.selectTabKey == "2"){ //任务列表 this.taskListform.reset(); //清除查询条件值 } if(this.selectTabKey == "3"){ this.prjSubform.reset(); //清除查询条件值 } } clearStatus = () => { this.rightMenu = []; } //添加共享v addShare = (value)=>{ Apis.addPrjShare({...value,method:'add',prjid:this.prjid,opttype:'prj'}).then(data=>{ if(data.success){ this.getPrjShareList(); }else{ message.error(data.msg); } }) } //批量删除 delBatchShare = (value)=>{ let _this = this; Modal.confirm({ title: getLabel(15172,"系统提示"), content: getLabel(83601,"您确认要删除选中的记录吗?"), onOk() { Apis.delBatchPjrShare({id:value,method:'batchdelete',opttype:'prj',prjid: _this.prjid}).then(data=>{ if(data.success){ _this.getPrjShareList(); }else{ message.error(data.msg); } }); }, onCancel() { }, }) } //高级搜索显隐 setShowSearchAd=(bool)=>{ this.showSearchAd = bool } onShowColumn=()=>{ //显示定制列 if(this.selectTabKey == "3"){ this.prjSubStore.setColSetVisible(true); this.prjSubStore.tableColSet(true) } } getPrjLogList=(params={})=>{ Apis.getPrjLogList(params).then(data=>{ this.prjLogTableStore.getDatas(data.sessionkey, 1); }) } getPrjFieldLogList = (params = {}) => { Apis.getPrjFieldLogList(params).then(data => { this.prjFieldLogTableStore.getDatas(data.sessionkey, 1); }) } getPrjFieldDetaiLogList = (params = {}) => { Apis.getPrjFieldDetaiLogList(params).then(data => { this.prjFieldDetailLogTableStore.getDatas(data.sessionkey, 1); }) } @action setFieldLogVisible = (v) =>{ this.fieldLogVisible = v; } @action setFieldDetailLogVisible = (v) =>{ this.fieldDetailLogVisible = v; } @action setFieldName = (v) =>{ this.fieldname = v; } @action setField = (v) =>{ this.field = v; } @action setLoaded=()=>{ this.isreload= true; } getPrjTempletStageList = (params = {}) => { this.loading = true; let newParams = { prjid: this.prjid, ...params }; Apis.getPrjTempletStageList(newParams).then(data => { this.stageInfo.stageColumns = data.columns; this.stageInfo.stageColumnDatas = data.columnDatas; this.stageInfo.canedit = data.canedit; this.rightMenu = data.rightMenus; this.loading = false; }) } onRowSelect = (sRowKeys, rows, dataIndex, selectedDatas) => { this.stageInfo.selectedRowKeys = sRowKeys; if (selectedDatas) { this.stageInfo.selectedDatas = selectedDatas; } } onChange = (datas) => { this.stageInfo.stageColumnDatas = datas; } saveStageSet = (checkProps,prjid) => { const { pass } = checkProps; if (pass&&this.checkRepeat()) { let keepgroupids = ""; this.stageInfo.stageColumnDatas.forEach(element => { if (element.id) { keepgroupids += "," + element.id } }); keepgroupids = keepgroupids.substr(1, keepgroupids.length); Apis.savePrjTempletStage({ datas: JSON.stringify(this.stageInfo.stageColumnDatas), keepgroupids: keepgroupids, prjid: prjid }).then(data => { if (data.success) { this.clearStageStatus(); message.success(data.msg); this.getPrjTempletStageList({prjid: prjid}); } else { message.error(data.msg); } }) } } checkRepeat = () => { let repeat = true; let datas = toJS(this.stageInfo.stageColumnDatas); datas && datas.length>0 && datas.map((d1,i1) => { if(repeat){ datas && datas.length>0 && datas.map((d2,i2) => { if(i1 !== i2 && d1.name == d2.name){ message.warning(getLabel('387703',"阶段名称重复!")); repeat = false; } }) } }) return repeat; } clearStageStatus = () => { let _canedit = this.stageInfo.canedit; this.stageInfo = { stageColumns: [], stageColumnDatas: [], selectedRowKeys: [], selectedDatas: {}, canedit:_canedit } } getPrjResourceInfo = (params) => { this.loading = true; let newParams = { prjid: this.prjid, ...params }; Apis.getPrjResources(newParams).then(data => { if(data.success){ this.resourceInfo = { ...data } } this.loading = false; }) } setIsBatchEdit = (v) =>{ this.isBatchEdit = v; } resetTaskInfoStore = () =>{ this.taskInfoStore = new TaskInfoStore(); } triggerBreakDownWF = (params = {}) =>{ const newParams = { prjid: this.prjid,...params} WeaTools.callApi('/api/proj/pctask/triggerBreakDownWF', 'POST', newParams).then(data => { if(data.msg=='success'){ this.getPrjTaskList(); this.getPrjTaskCondition(); this.getPrjTaskVersion(); message.success(getLabel('513071',"触发流程成功!")); }else{ message.error(getLabel('513072',"触发流程失败!")); } }); } @action delTaskBatch=(type)=>{ let _this = this; if(this.taskInfoStore.selectedRowKeys.length > 0){ Modal.confirm({ title: getLabel(15172,"系统提示"), content: getLabel(83925,"该任务及其子任务都会被删除,您确认要删除吗?"), onOk() { Task_Apis.delTask({method:type,taskids:`${_this.taskInfoStore.selectedRowKeys}`}).then(data=>{ if(data.success){ _this.taskInfoStore.selectedRowKeys = []; window._table.reLoad(); Modal.success({ title: getLabel(15172,"系统提示"), content: getLabel(83472,"删除成功!"), }); _this.getPrjTaskList(); _this.getPrjTaskCondition(); _this.getPrjTaskVersion(); }else{ message.error(getLabel(383746,"请求失败")+":"+data.msgcode); } }) }, onCancel() { }, }) } } }