weaver_trunk_cli/pc4mobx/prj/components/dialog/projectDialog.js

239 lines
12 KiB
JavaScript
Raw Normal View History

2023-03-08 15:22:38 +08:00
import React from 'react';
import { inject, observer } from 'mobx-react';
import {WeaDialog,WeaRightMenu,WeaNewScroll,WeaFormItem,WeaSearchGroup,WeaLocaleProvider,WeaTools} from "ecCom"
import {Button,Modal,message} from "antd"
import {WeaTableNew,WeaSwitch} from 'comsMobx';
import debounce from 'lodash/debounce';
const WeaTable = WeaTableNew.WeaTable;
const getLabel = WeaLocaleProvider.getLabel;
import {toJS} from "mobx"
import equal from 'deep-equal'
import ProjectCondition from '../list/projectCondition'
import * as Prj_Apis from '../../apis/project'
import ProjectLogDialog from "./modifyLogDialog"
import ProjectFieldLogDialog from './projectFieldLogDialog';
import ProjectFieldDetailLogDialog from './ProjectFieldDetailLogDialog';
import SaveTemplateDialog from "../dialog/SaveTemplateDialog";
@observer
export default class ProjectDialog extends React.Component{
constructor(props) {
super(props);
this.state = {
workPlanVisible: false,
saveDisabled: false
}
}
componentDidMount() {
const { contentStore } = this.props;
if (!window.weaWorkplan) {
// 异步加载别模块的静态资源
eventRegister.loadModule('f_workplan', () => {
contentStore.setLoaded(true)
}, () => {
// 加载文件失败 的业务处理, 网络超时,没文件之类
})
} else {
contentStore.setLoaded(true)
}
}
componentWillReceiveProps(nextProps) {
let keyOld = "";
let keyNew = "";
if( this.props.location && nextProps.location && this.props.location.query && nextProps.location.query){
keyOld = this.props.location.query.prjid;
keyNew = nextProps.location.query.prjid;
}else{
keyOld = this.props.prjid;
keyNew = nextProps.prjid;
}
//点击菜单路由刷新组件
if (keyOld !== keyNew) {
const { contentStore } = nextProps;
if (!window.weaWorkplan) {
// 异步加载别模块的静态资源
eventRegister.loadModule('f_workplan', () => {
contentStore.setLoaded(true)
}, () => {
// 加载文件失败 的业务处理, 网络超时,没文件之类
})
} else {
contentStore.setLoaded(true)
}
}
}
render(){
let _this = this;
const {contentStore} = this.props;
const {visible,handleDialog,prjInfo,prjForm,setFormFields,setValidate,prjLogTableStore, prjFieldLogTableStore, prjFieldDetailLogTableStore, fieldname, prjid} = contentStore;
const title = getLabel(83808,"编辑项目");
const account = WeaTools.ls.getJSONObj('theme-account');
return (
<WeaDialog ecId={`${this && this.props && this.props.ecId || ''}_WeaDialog@zdlktp`}
title={title }
visible={visible}
buttons={this.getBottomButtons()}
icon="icon-coms-project"
iconBgcolor="#217346"
onCancel={()=>{handleDialog(false)}}
style={{width:1000,height:700}}>
<WeaRightMenu ecId={`${this && this.props && this.props.ecId || ''}_WeaRightMenu@jmhbrz`} datas={this.getRightMenu()} onClick={this.onRightMenuClick.bind(this)} >
<WeaNewScroll ecId={`${this && this.props && this.props.ecId || ''}_WeaNewScroll@1lj6ex`} height={"100%"}>
<ProjectCondition ecId={`${this && this.props && this.props.ecId || ''}_ProjectCondition@j88ph3`} fieldInfo={prjInfo} form={prjForm} setFormFields={(v)=>{setFormFields(v)}} setValidate={(v)=>{setValidate(v)}} />
<ProjectLogDialog ecId={`${this && this.props && this.props.ecId || ''}_ProjectLogDialog@ej3b1r`} ref="projectLogDialog" title={getLabel('33782','项目日志') } tableStore={prjLogTableStore} store={contentStore} />
<ProjectFieldLogDialog ecId={`${this && this.props && this.props.ecId || ''}_ProjectFieldLogDialog@l0zxlg`} title={getLabel('82274','字段日志') } tableStore={prjFieldLogTableStore} store={contentStore} />
<ProjectFieldDetailLogDialog ecId={`${this && this.props && this.props.ecId || ''}_ProjectFieldDetailLogDialog@3u0cbi`} title={getLabel('82274','字段日志')+"-"+fieldname } tableStore={prjFieldDetailLogTableStore} store={contentStore} />
<SaveTemplateDialog ecId={`${this && this.props && this.props.ecId || ''}_SaveTemplateDialog@audzl0`} prjCardStore={contentStore}/>
{
contentStore.isreload&&window.weaWorkplan && window.weaWorkplan.com && window.weaWorkplan.com.WorkPlanCreate &&
(<window.weaWorkplan.com.WorkPlanCreate ecId={`${this && this.props && this.props.ecId || ''}_WorkPlanCreate@69wd75`}
type={"create"}//新建为'create',查看为'preview',编辑edit,共享share
visible={_this.state.workPlanVisible}//显隐受控
doClose={() => { _this.setWorkPlanVisible(false); }}//关闭回调
onlyClose={() => { _this.setWorkPlanVisible(false) }}//关闭回调,只做关闭操作
workPlanId={""} //日程id1查看日程时用到
createConditionParams={[]}//创建的默认值日期和时间,没有传[]
activeKey={""} //查看页面显示的面板1是基本信息7是相关交流
//{(key) => { }}//查看页面切换面板的回调
selectUser={account && account.userid}//新建日程的创建人id
workPlanTypeOptions={"2"}//客户模块的新建日程,普通新建传'',客户新建传3
crmIDs={[]}//通过客户模块新建日程,并自动带出相关客户,[{'id':'','name':''}]
projectid={prjid}
description={""}//客户模块需求,支持新建时传入的'基本信息-内容'
/>)
}
</WeaNewScroll>
</WeaRightMenu>
</WeaDialog>
)
}
getBottomButtons(){
const {contentStore,dellCallBack,from='mymanagerproject'} = this.props;
const {handleDialog,rightMenu,prjid} = contentStore;
let btnArr = [];
const {saveDisabled} = this.state;
rightMenu && rightMenu.length>0 && rightMenu.map(m=>{
m.isTop == '1' && btnArr.length < 4 && btnArr.push(
<Button ecId={`${this && this.props && this.props.ecId || ''}_Button@mkzg0d@${m.type}`} type="primary" disabled={m.type == "BTN_SAVE"?saveDisabled:false}
onClick={()=>{
if(m.type == "BTN_SAVE"){ //保存
this.savePrjInfo();
}else if(m.type == "BTN_EDIT"){//编辑
contentStore.getPrjInfo({viewtype:'edit'});
}else if(m.type == "BTN_BACK"){ //返回
contentStore.getPrjInfo({viewtype:'view'});
}else if(m.type == "BTN_DELETE"){ //删除
contentStore.delPrjInfo({method:"del",prjid:prjid,from:from,callBack:dellCallBack});
}
}}>
{m.menuName}
</Button>
);
});
btnArr.push(<Button ecId={`${this && this.props && this.props.ecId || ''}_Button@0ki525@close`} type="primary" onClick={()=>{handleDialog(false)}}>{getLabel(309,"关闭")}</Button>)
return btnArr;
}
getRightMenu(){
const {contentStore} = this.props;
const {rightMenu,isApprove} = contentStore;
let btnArr = [];
rightMenu && rightMenu.length>0 && rightMenu.map(m=>{
let disabled = false;
if(isApprove){
if(m.menuIcon == "icon-coms-Approval"){
disabled = true;
}
}
btnArr.push({
icon: <i className={m.menuIcon} />,
content: m.menuName,
disabled: disabled
})
});
return btnArr
}
onRightMenuClick(key){
const {contentStore} = this.props;
const {handleDialog,rightMenu,prjid} = contentStore;
let that = this;
rightMenu && rightMenu.length>0 && rightMenu.map((m,i)=>{
if(Number(key) == i){
let fn = m.menuFun.indexOf('this') >= 0 ? `${m.menuFun.split('this')[0]})` : m.menuFun;
if(fn != ""){
fn = fn.substring(0, fn.indexOf('('));
if('onNormal' == fn){ //正常
contentStore.doPlanOpt({method:'normal',prjid:prjid});
}else if('onOver' == fn){ //延期
contentStore.doPlanOpt({method:'delay',prjid:prjid});
}else if('onFinish' == fn){ //完成
contentStore.doPlanOpt({method:'complete',prjid:prjid});
}else if('onFrozen' == fn){ //冻结
contentStore.doPlanOpt({method:'freeze',prjid:prjid});
}else if ('onToggleStatus' == fn) {
contentStore.doPlanOpt({ method: 'togglestatus', prjid: prjid, statusid: m.params });
}
}else{
if(m.type == "BTN_EDIT"){ //编辑
contentStore.getPrjInfo({viewtype:'edit'});
}else if(m.type == "BTN_SAVE"){ //保存
this.savePrjInfo();
}else if(m.type == "BTN_DELETE"){ //删除
contentStore.delPrjInfo({method:"del",prjid:prjid,from:"mymanagerproject"});
}else if(m.type == "BTN_NEWREQ"){ //新建流程
window.open((window.ecologyContentPath || '')+"/spa/workflow/static/index.html#/main/workflow/add?prjid=" + prjid, "_blank");
}else if(m.type == "BTN_NEWDOC"){ //新建文档
window.open((window.ecologyContentPath || '')+"/spa/document/static/index.html#/main/document/add?moudleFrom=prj&prjid=" + prjid, "_blank");
}else if(m.type == "BTN_NEWRQ"){ //新建日程
this.setState({ workPlanVisible: true })
}else if(m.type == "BTN_NEWMT"){ //新建会议
window.open("(window.ecologyContentPath || '')+/spa/meeting/static/index.html#/main/meeting/dialogsingle?type=create&projectid=" + prjid, "_blank");
}else if(m.type == "BTN_LOG"){ //日志
this.refs.projectLogDialog.setVisible(true);
contentStore.getPrjLogList({ prjid: prjid });
}else if(m.type == "BTN_SAVETEMPLET"){ //另存为模板
contentStore.setVisiable(true);
}else if(m.type == "BTN_BACK"){ //返回
contentStore.getPrjInfo({viewtype:'view'});
}
}
}
});
}
savePrjInfo = debounce((params={})=>{
const {callBack} = this.props;
const {handleDialog,prjForm,prjid,baseParams,validateRules,getPrjInfo} = this.props.contentStore;
this.setState({saveDisabled:true});
prjForm.validateForm().then(f=>{
if(f.isValid){
let newParams = {...toJS(prjForm.getFormParams()),method:"edit",prjid:prjid,...params};
Prj_Apis.savePrjInfo(newParams).then(data=>{
this.setState({saveDisabled:false});
if(data.success){
getPrjInfo({viewtype:"view"});
if(callBack){
callBack();
}else{
window._table.reLoad();
}
}else{
message.error(data.msg);
}
})
}else{
this.setState({saveDisabled:false});
f.showErrors();
}
});
},600);
setWorkPlanVisible = (bool) => {
this.setState({ workPlanVisible: bool })
}
}