fix edit btn, bool fields disp

VRTKSSUP-229
Осьмаков Денис 5 years ago
parent 0efb9f66e4
commit 705403106b
  1. 7
      src/webparts/summaryWebPart/components/SummaryContainer/SummaryContainer.tsx
  2. 14
      src/webparts/summaryWebPart/components/SummaryWebPart.tsx
  3. 66
      src/webparts/summaryWebPart/components/TrafficLight/TrafficLight.tsx

@ -68,12 +68,13 @@ export default class SummaryContainer extends React.Component<IComponentProps,IC
.get() .get()
.then(currentProject => { .then(currentProject => {
res.forEach(e=>{ res.forEach(e=>{
let fieldValue = !e.fieldName.match(/\/Title/gi)?currentProject[0][e.fieldName] : currentProject[0][e.fieldName.split('/')[0]]? currentProject[0][e.fieldName.split('/')[0]]['Title'] : '' let fieldValue = !e.fieldName.match(/\/Title/gi)?currentProject[0][e.fieldName] : currentProject[0][e.fieldName.split('/')[0]]? currentProject[0][e.fieldName.split('/')[0]]['Title'] : '';
if (fieldValue){
if (fieldValue || typeof fieldValue === 'boolean'){
toState.push({ toState.push({
key: e.key, key: e.key,
fieldName: e.fieldRuTitle, fieldName: e.fieldRuTitle,
value: fieldValue value: fieldValue === true ? 'Да' : fieldValue === false ? 'Нет' : fieldValue
}); });
} }
}); });

@ -4,18 +4,21 @@ import { Spinner, SpinnerSize } from 'office-ui-fabric-react/lib/Spinner';
import SummaryGlobalComponent from './SummaryGlobalComponent/SummaryGlobalComponent' import SummaryGlobalComponent from './SummaryGlobalComponent/SummaryGlobalComponent'
import { PrimaryButton } from 'office-ui-fabric-react'; import { PrimaryButton } from 'office-ui-fabric-react';
import { IPageData } from '../interfaces/IPageData'; import { IPageData } from '../interfaces/IPageData';
import {sp, Web} from '@pnp/sp'
export interface IComponentState{ export interface IComponentState{
pageData: IPageData | null pageData: IPageData | null
isLoaded: boolean; isLoaded: boolean;
isBlank: boolean; isBlank: boolean;
prjID: string | number;
} }
export default class SummaryWebPart extends React.Component<ISummaryWebPartProps, IComponentState > { export default class SummaryWebPart extends React.Component<ISummaryWebPartProps, IComponentState > {
public state = { public state = {
pageData: null, pageData: null,
isLoaded: false, isLoaded: false,
isBlank: false isBlank: false,
prjID: ''
} }
componentDidMount(){ componentDidMount(){
@ -23,6 +26,11 @@ export default class SummaryWebPart extends React.Component<ISummaryWebPartProps
let relUrl = context.pageContext.web.serverRelativeUrl let relUrl = context.pageContext.web.serverRelativeUrl
let projectCode = relUrl ? relUrl.split('/')[relUrl.split('/').length - 1] : ''; let projectCode = relUrl ? relUrl.split('/')[relUrl.split('/').length - 1] : '';
let web = new Web('http://portal.vertex.spb.ru/PMIS');
web.lists.getById('eeba7db6-4c28-41a2-a54e-82a2aaf0ca15').items.filter("Code_project eq '" + projectCode +"'").select('ID').get().then(e=>{
this.setState({prjID: e[0].ID})
})
fetch(requestUrl + /* 'test01_test02_001' */projectCode) fetch(requestUrl + /* 'test01_test02_001' */projectCode)
.then((response)=>{ .then((response)=>{
return response.json() return response.json()
@ -32,8 +40,8 @@ export default class SummaryWebPart extends React.Component<ISummaryWebPartProps
} }
public relocate = () => { public relocate = () => {
const { pageData } = this.state; const { prjID } = this.state;
location.href = 'http://portal.vertex.spb.ru/PMIS/SitePages/EditForm.aspx?itemId=' + pageData.PrjInfo.spID; location.href = 'http://portal.vertex.spb.ru/PMIS/SitePages/EditForm.aspx?itemId=' + prjID;
} }
public render(): React.ReactElement<ISummaryWebPartProps> { public render(): React.ReactElement<ISummaryWebPartProps> {

@ -7,7 +7,7 @@ import { DetailsList, SelectionMode, DetailsListLayoutMode } from 'office-ui-fab
export interface IComponentProps{ export interface IComponentProps{
statuses: {[key: string]: string;}; statuses: {[key: string]: string;};
taskStats: {[key: string]: number;}; taskStats: {[key: string]: number;};
dateInfo: { dateFinish: string, dateStart: string }; dateInfo: { dateFinish: string, dateStart: string, duration?: any, percentCompl?: any };
} }
export default class TrafficLight extends React.Component<IComponentProps, {}> { export default class TrafficLight extends React.Component<IComponentProps, {}> {
public renderItemColumn = (item, index: number, column) => { public renderItemColumn = (item, index: number, column) => {
@ -25,48 +25,52 @@ export default class TrafficLight extends React.Component<IComponentProps, {}> {
return <span>{fieldContent}</span>; return <span>{fieldContent}</span>;
} }
} }
public render(): React.ReactElement<IComponentProps> {
const { statuses, taskStats, dateInfo} = this.props;
let procent = (taskStats.compl/(taskStats.plan + taskStats.compl + taskStats.exec))* 100;
let startDate = moment(dateInfo.dateStart).format("DD.MM.YYYY"); public setItems = (statuses) =>{
let finDate = moment(dateInfo.dateFinish).format("DD.MM.YYYY"); let result = [];
let totalDays = new moment.duration((new Date(dateInfo.dateFinish ? dateInfo.dateFinish.split('T')[0] : dateInfo.dateFinish) as any) - (new Date(dateInfo.dateStart ? dateInfo.dateStart.split('T')[0] : dateInfo.dateStart) as any)).asDays(); let index = 1;
if (statuses.term !== 'none'){
return ( result.push(
<div className={styles.statusesContainer}>
<DetailsList
onRenderItemColumn={this.renderItemColumn}
items= {statuses.budget !== 'none'?[
{ {
key: 1, key: index,
fieldName: "Статус по сроку", fieldName: "Статус по сроку",
status: statuses.term status: statuses.term
}, });
++index;
}
if (statuses.budget !== 'none') {
result.push(
{ {
key: 2, key: index,
fieldName: "Статус по бюджету", fieldName: "Статус по бюджету",
status: statuses.budget status: statuses.budget
}, });
{ ++index;
key: 3,
fieldName: "Статус по % выполнения",
status: statuses.percCompl
} }
] : if (statuses.percCompl !== 'none') {
[ result.push(
{ {
key: 1, key: index,
fieldName: "Статус по сроку",
status: statuses.term
},
{
key: 2,
fieldName: "Статус по % выполнения", fieldName: "Статус по % выполнения",
status: statuses.percCompl status: statuses.percCompl
});
} }
] return result;
} }
public render(): React.ReactElement<IComponentProps> {
const { statuses, taskStats, dateInfo} = this.props;
let procent = (taskStats.compl/(taskStats.plan + taskStats.compl + taskStats.exec))* 100;
let startDate = moment(dateInfo.dateStart).format("DD.MM.YYYY");
let finDate = moment(dateInfo.dateFinish).format("DD.MM.YYYY");
let totalDays = dateInfo.duration + 'дн.'
return (
<div className={styles.statusesContainer}>
<DetailsList
onRenderItemColumn={this.renderItemColumn}
items={this.setItems(statuses)}
columns={[ columns={[
{ {
key: "column1", key: "column1",
@ -139,7 +143,7 @@ export default class TrafficLight extends React.Component<IComponentProps, {}> {
marginTop: 15, marginTop: 15,
marginBottom: 15 marginBottom: 15
}} }}
>{`Актуальный статус выполнения ${!isNaN(+procent.toFixed(2)) ? procent.toFixed(2) + '%' : ' -' }`}</div> >{`Актуальный статус выполнения ${dateInfo.percentCompl ? dateInfo.percentCompl.toString().match(/\./gi) ? dateInfo.percentCompl.toFixed(2) : dateInfo.percentCompl : ' -'}${dateInfo.percentCompl ? '%' : ''}`}</div>
</div> </div>
); );
} }

Loading…
Cancel
Save