439 lines
15 KiB
JavaScript
439 lines
15 KiB
JavaScript
import { observable, action } from 'mobx';
|
|
import { WeaForm } from 'comsMobx'
|
|
import { WeaTools, WeaLocaleProvider } from 'ecCom';
|
|
const getLabel = WeaLocaleProvider.getLabel;
|
|
import { Modal, message } from "antd"
|
|
import { toJS } from 'mobx';
|
|
import * as Apis from '../apis/project';
|
|
import PrjTaskListTable from '../components/comp/prjTaskListTable/index';
|
|
|
|
export class AddProjectStore {
|
|
@observable title = getLabel(15007, "新建项目");
|
|
@observable selectedKey = "prjinfo";
|
|
@observable form = new WeaForm();
|
|
@observable nameremind = '';
|
|
|
|
@observable visible = false;
|
|
@observable conditionDatas = {
|
|
taskinfo: [],
|
|
fieldinfo: [],
|
|
prjid: "",
|
|
rightMenu: [],
|
|
userid: "",
|
|
taskViewAttr: ""
|
|
};
|
|
|
|
validateRules = {}; //校验规则
|
|
@observable selectedRowKey = [];
|
|
@observable spinning = false;
|
|
@observable templetid = "";
|
|
@observable stageInfo = {
|
|
stageKey: 0,
|
|
stageColumns: [],
|
|
stageColumnDatas: [],
|
|
selectedRowKeys: [],
|
|
selectedDatas: {},
|
|
canedit:false
|
|
}
|
|
@observable parentid = 0;
|
|
|
|
@observable isTimeShow = '1'; //任务时间字段是否启用
|
|
|
|
@observable xmksrqField = "";
|
|
@observable roleIframeUrl = "";
|
|
|
|
@action
|
|
handleShareDialog = (bool, params) => {
|
|
this.visible = bool;
|
|
this.selectedKey = "prjinfo";
|
|
this.selectedRowKey = [];
|
|
this.clearStageStatus();
|
|
if(bool && params.prjid){
|
|
this.parentid = params.prjid;
|
|
}else{
|
|
this.parentid = 0;
|
|
}
|
|
if (bool) {
|
|
this.templetid = params.templetid;
|
|
this.getAddCondition(params);
|
|
}
|
|
}
|
|
|
|
changeTab = (key) => {
|
|
this.selectedKey = key
|
|
}
|
|
//初始化form
|
|
getAddCondition = (params = {}) => {
|
|
this.form = new WeaForm();
|
|
let _this = this;
|
|
WeaTools.callApi('/api/proj/pcproject/getProjectInfo', 'GET', params).then(data => {
|
|
this.isTimeShow = data.isTimeShow;
|
|
this.conditionDatas = {
|
|
taskinfo: _this.addInitKeytoDatas(toJS(data.taskinfo)),
|
|
fieldinfo: data.fieldinfo,
|
|
prjid: data.prjid,
|
|
rightMenu: data.rightMenus,
|
|
userid: data.userid,
|
|
taskViewAttr: data.taskViewAttr,
|
|
};
|
|
if(data && data.fieldid) {
|
|
this.xmksrqField = data.xmksrqField;
|
|
}
|
|
if(data && data.roleIframeUrl) {
|
|
this.roleIframeUrl = data.roleIframeUrl;
|
|
}
|
|
if (data && data.templetName) {
|
|
this.title = data.templetName;
|
|
} else {
|
|
this.title = getLabel(15007, "新建项目");
|
|
}
|
|
this.getPrjTempletStageList();
|
|
_this.form && !_this.form.isFormInit && _this.form.initFormFields(data.fieldinfo);
|
|
})
|
|
}
|
|
//更新数据
|
|
setFormFields = (value) => {
|
|
this.form.updateFields(value, false);
|
|
}
|
|
//保存校验规则
|
|
setValidate = (params = {}) => {
|
|
this.validateRules = params;
|
|
}
|
|
//保存list
|
|
saveListDatas = (datas) => {
|
|
this.conditionDatas = {
|
|
...this.conditionDatas,
|
|
taskinfo: datas
|
|
}
|
|
}
|
|
addNewListDatas = () => {
|
|
let newParams = {
|
|
...this.form.getFormParams()
|
|
};
|
|
const data = {
|
|
"endtime": "",
|
|
"hrmid": "",
|
|
"budget": "0.000",
|
|
"workday": "0",
|
|
"begintime": "",
|
|
"pid": "0",
|
|
"realid": "0",
|
|
"beftaskname": "",
|
|
"id": "",
|
|
"beftaskid": "",
|
|
"name": getLabel(83982, "新的任务"),
|
|
"hrmname": "",
|
|
"begindate": newParams.xmksrqField,
|
|
"enddate": ""
|
|
};
|
|
let newtaskinfo = toJS(this.conditionDatas.taskinfo);
|
|
newtaskinfo.push(data);
|
|
this.saveListDatas(this.addKeytoDatas(newtaskinfo));
|
|
}
|
|
addInitKeytoDatas(datas) {
|
|
let _datas = datas.map((data, i) => {
|
|
let _data = { ...data };
|
|
_data.key = i + 1;
|
|
_data.rowIndex = i + 1;
|
|
return _data
|
|
})
|
|
return _datas
|
|
}
|
|
|
|
addKeytoDatas(datas) {
|
|
let _datas = datas.map((data, i) => {
|
|
let _data = { ...data };
|
|
_data.rowIndex = i + 1;
|
|
return _data
|
|
})
|
|
return _datas
|
|
}
|
|
|
|
saveRowKeys = (arr) => {
|
|
this.selectedRowKey = arr;
|
|
}
|
|
//删除
|
|
deleListDatas = () => {
|
|
let newtaskinfo = this.addKeytoDatas(toJS(this.conditionDatas.taskinfo));
|
|
|
|
let _datas = [].concat(newtaskinfo);
|
|
toJS(this.selectedRowKey).map(key => {
|
|
_datas = _datas.filter(data => Number(data.rowIndex) !== key)
|
|
});
|
|
const newdatas = this.changeBeforeTask(_datas);
|
|
this.saveListDatas(this.addKeytoDatas(newdatas));
|
|
this.selectedRowKey = [];
|
|
}
|
|
//change 前置任务
|
|
changeBeforeTask = (datas) => {
|
|
let _datas = [].concat(datas);
|
|
_datas.map(item => {
|
|
if (item.beftaskid && item.beftaskid !== "0") {
|
|
let bool = true;
|
|
for (let i = 0; i < _datas.length; i++) {
|
|
if (_datas[i].rowIndex == item.beftaskid) {
|
|
item.beftaskid = _datas[i].rowIndex;
|
|
item.beftaskname = _datas[i].name;
|
|
bool = true;
|
|
return;
|
|
} else {
|
|
bool = false
|
|
}
|
|
}
|
|
if (!bool) {
|
|
item.beftaskid = "0";
|
|
item.beftaskname = "";
|
|
}
|
|
}
|
|
|
|
});
|
|
return _datas;
|
|
}
|
|
saveAddProject = (params = {}) => {
|
|
const { isreflesh, checkProps } = params;
|
|
const { pass } = checkProps;
|
|
let _this = this;
|
|
this.form.validateForm().then(f => {
|
|
if (f.isValid&&pass) {
|
|
if(this.checkRepeat()){
|
|
let newParams = { ...this.form.getFormParams(), ...params };
|
|
if(this.parentid > 0){
|
|
newParams = { ...this.form.getFormParams(), ...params, parentid : this.parentid };
|
|
}
|
|
let par = { ...newParams, method: "add" };
|
|
if (this.checkTaskInfo()&&this.checkTask()) {
|
|
par.subfields = JSON.stringify(toJS(this.conditionDatas.taskinfo));
|
|
par.stagelist = JSON.stringify(toJS(this.stageInfo.stageColumnDatas));
|
|
this.spinning = true;
|
|
WeaTools.callApi('/api/proj/pcproject/doPrjOperation', 'POST', par).then(data => {
|
|
_this.spinning = false;
|
|
if (data.success) {
|
|
message.success(getLabel(101, "项目") + getLabel(383317, "新建成功"));
|
|
if (isreflesh) { //卡片里面的新建
|
|
window._table.reLoad();
|
|
} else { //新建项目的新建,卡片跳转
|
|
weaHistory.push({
|
|
pathname: '/main/prj/projectCard?prjid=' + data.prjid
|
|
});
|
|
}
|
|
_this.handleShareDialog(false);
|
|
} else {
|
|
// Modal.warning({
|
|
// title: getLabel(15172, "系统提示"),
|
|
// content: data.msg,
|
|
// });
|
|
message.error(data.msg);
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
} else {
|
|
f.showErrors();
|
|
}
|
|
if(this.selectedKey=='prjinfo'&&f.isValid==true&&(this.checkTask()==false||this.checkStage()==false)){
|
|
message.error(getLabel(15859,"必要信息不完整!"));
|
|
}
|
|
if(this.selectedKey=='sublist'&&this.checkTask()==true&&(f.isValid==false||this.checkStage()==false)){
|
|
message.error(getLabel(15859,"必要信息不完整!"));
|
|
}
|
|
if(this.selectedKey=='stagelist'&&this.checkStage()==true&&(f.isValid==false||this.checkTask()==false)){
|
|
message.error(getLabel(15859,"必要信息不完整!"));
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
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){
|
|
// Modal.warning({
|
|
// title: getLabel(15172, "系统提示"),
|
|
// content: getLabel('387703',"阶段名称重复!"),
|
|
// });
|
|
message.error(getLabel('387703',"阶段名称重复!"));
|
|
repeat = false;
|
|
}
|
|
})
|
|
}
|
|
})
|
|
|
|
return repeat;
|
|
}
|
|
|
|
checkTask = () =>{
|
|
let checked = true;
|
|
let datas = toJS(this.conditionDatas.taskinfo);
|
|
datas && datas.length>0 && datas.map((d1,i1) => {
|
|
if(checked){
|
|
if(d1.name == "" ){
|
|
checked = false;
|
|
// Modal.warning({
|
|
// title: getLabel(15172, "系统提示"),
|
|
// content: getLabel('387707',"任务名称必填!"),
|
|
// });
|
|
}else if(d1.stageid == ""){
|
|
checked = false;
|
|
// Modal.warning({
|
|
// title: getLabel(15172, "系统提示"),
|
|
// content: getLabel('387708',"阶段必填!"),
|
|
// });
|
|
}else if(d1.hrmid == ""){
|
|
checked = false;
|
|
// Modal.warning({
|
|
// title: getLabel(15172, "系统提示"),
|
|
// content: getLabel('387709',"任务负责人必填!"),
|
|
// });
|
|
}else{
|
|
let datas2 = toJS(this.stageInfo.stageColumnDatas);
|
|
let finded = false;
|
|
datas2 && datas2.length>0 && datas2.map((d2,i2) => {
|
|
if(d1.stageid == d2.id ){
|
|
finded = true;
|
|
}
|
|
})
|
|
if(!finded){
|
|
checked =false;
|
|
// Modal.warning({
|
|
// title: getLabel(15172, "系统提示"),
|
|
// content: getLabel('387708',"阶段必填!"),
|
|
// });
|
|
}
|
|
}
|
|
}
|
|
});
|
|
return checked;
|
|
}
|
|
|
|
checkStage = () => {
|
|
let checked = true;
|
|
let datas = toJS(this.stageInfo.stageColumnDatas);
|
|
datas && datas.length>0 && datas.map((d1,i1) => {
|
|
if(checked){
|
|
if(d1.name == ""){
|
|
checked = false;
|
|
}
|
|
}
|
|
})
|
|
return checked;
|
|
}
|
|
|
|
checkTaskInfo = () => {
|
|
const taskinfo = this.conditionDatas.taskinfo;
|
|
let checked = true;
|
|
taskinfo && taskinfo.length>0 && taskinfo.map( item => {
|
|
if(item.name && item.name == ""){
|
|
Modal.warning({
|
|
title: getLabel(15172, "系统提示"),
|
|
content: "任务信息不完成!",
|
|
});
|
|
checked = false;
|
|
}else if(item.stageid && item.stageid == ""){
|
|
Modal.warning({
|
|
title: getLabel(15172, "系统提示"),
|
|
content: getLabel(15859, "任务信息不完成!"),
|
|
});
|
|
checked = false;
|
|
}else if(item.hrmid && item.hrmid == ""){
|
|
Modal.warning({
|
|
title: getLabel(15172, "系统提示"),
|
|
content: getLabel(15859, "任务信息不完成!"),
|
|
});
|
|
checked = false;
|
|
}
|
|
})
|
|
return checked;
|
|
}
|
|
clearStatus = () => {
|
|
this.selectedKey = "prjinfo";
|
|
this.conditionDatas = {
|
|
taskinfo: [],
|
|
fieldinfo: [],
|
|
prjid: "",
|
|
rightMenu: [],
|
|
userid: "",
|
|
taskViewAttr: ""
|
|
};
|
|
this.validateRules = {}; //校验规则
|
|
this.selectedRowKey = [];
|
|
}
|
|
|
|
getPrjTempletStageList = (params = {}) => {
|
|
this.loading = true;
|
|
let newParams = { actionType: "add", prjid: this.templetid, ...params };
|
|
Apis.getPrjTempletStageList(newParams).then(data => {
|
|
this.stageInfo.stageColumns = data.columns;
|
|
this.stageInfo.stageColumnDatas = data.columnDatas;
|
|
this.stageInfo.canedit = data.canedit;
|
|
if(this.stageInfo.stageColumnDatas.length==0){
|
|
this.stageInfo.stageKey++;
|
|
let stageColumnDatas = [{
|
|
id: "new_" + this.stageInfo.stageKey,
|
|
name: getLabel('387710',"新的阶段"),
|
|
description : ""}];
|
|
this.stageInfo.stageColumnDatas = stageColumnDatas;
|
|
}
|
|
this.rightMenu = data.rightMenus;
|
|
this.loading = false;
|
|
})
|
|
}
|
|
|
|
onRowSelect = (sRowKeys, rows, dataIndex, selectedDatas) => {
|
|
this.stageInfo.selectedRowKeys = sRowKeys;
|
|
if (selectedDatas) {
|
|
this.stageInfo.selectedDatas = selectedDatas;
|
|
}
|
|
}
|
|
|
|
onChange = (datas, a, v, b) => {
|
|
let newDatas = [];
|
|
this.stageInfo.stageKey++;
|
|
datas.map((item) => {
|
|
if (typeof (item.id) == "undefined") {
|
|
newDatas.push({
|
|
id: "new_" + this.stageInfo.stageKey,
|
|
...item,
|
|
name: ""
|
|
});
|
|
} else {
|
|
newDatas.push(item);
|
|
}
|
|
|
|
});
|
|
let newTaskDatas = [];
|
|
let taskDatas = toJS(this.conditionDatas.taskinfo);
|
|
taskDatas.map((item)=>{
|
|
let find = false;
|
|
newDatas.map((item2)=>{
|
|
if(item.stageid !== "" && item.stageid == item2.id){
|
|
find = true;
|
|
}
|
|
});
|
|
if(!find){
|
|
newTaskDatas.push({...item,stageid:""});
|
|
}else{
|
|
newTaskDatas.push(item);
|
|
}
|
|
});
|
|
this.conditionDatas.taskinfo = newTaskDatas;
|
|
this.stageInfo.stageColumnDatas = newDatas;
|
|
}
|
|
|
|
clearStageStatus = () => {
|
|
let _canedit = this.stageInfo.canedit;
|
|
this.stageInfo = {
|
|
stageColumns: [],
|
|
stageColumnDatas: [],
|
|
selectedRowKeys: [],
|
|
selectedDatas: {},
|
|
canedit:_canedit,
|
|
stageKey:0
|
|
}
|
|
}
|
|
|
|
}
|