weaver_trunk_cli/pc4mobx/prj/stores/addProjectStore.js

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
}
}
}