Jia Hua
Hang Sai
Predictions:
Market | Prediction | Odd | Result |
---|
General Overview
The upcoming football match between Jia Hua and Hang Sai on July 27, 2import “@babel/polyfill”;
// eslint-disable-next-line import/no-extraneous-dependencies
import styles from “./styles.less”;
import React, { Component } from “react”;
import { connect } from “dva”;
import { notification } from “antd”;
import { stringify } from “qs”;
import { Tag, Input, Select, message } from “antd”;
import StandardTable from “@/components/StandardTable”;
import { downloadFile } from “../../utils/util”;
import { validateTableData } from “../../utils/validate”;
const { Option } = Select;
const { Search } = Input;
@connect(({ acme, user }) => ({
acme,
user,
}))
export default class Basic extends Component {
state = {
selectedRowKeys: [],
loading: false,
selectedRows: [],
formValues: {},
exportTable: false,
downloadShow: false,
export_columns: [
{
title: “Тип”,
dataIndex: “type”,
filters: [
{
text: “Компания”,
value: “company”,
},
{
text: “Вестибюль”,
value: “lobby”,
},
],
onFilter: (value, record) => record.type.includes(value),
},
{
title: “rpiIp”,
dataIndex: “rpiIp”,
},
{
title: “Регистрация IP”,
dataIndex: “registeredIp”,
},
],
};
columns = [
{
title: “Тип”,
dataIndex: “type”,
width: 100,
filters: [
{
text: “Компания”,
value: “company”,
},
{
text: “Вестибюль”,
value: “lobby”,
},
],
onFilter: (value, record) => record.type.includes(value),
},
{
title: “Номер камеры”,
dataIndex: “cameraNumber”,
width: 80,
},
{
title: “Имя камеры”,
dataIndex: “nameCamera”,
width: 100,
},
{
title: “rpiIp”,
dataIndex: “rpiIp”,
width: 100,
},
{
title: “Регистрация IP”,
dataIndex: “registeredIp”,
width: 100,
},
{
title: “Сеть”,
dataIndex: “networkNumber”,
width: 100,
},
{
title: “Пароль от сети”,
dataIndex: “networkPassword”,
width: 100,
},
{
title: “Пароль от ssh”,
dataIndex: “sshPassword”,
width: 100,
},
{
title: “Пароль ROOT”,
dataIndex: “rootPassword”,
width: 100,
},
{
title: “Запись видео”,
dataIndex: “videoRecording”,
width: 80,
},
{
title: “Разрешение рекордера”,
dataIndex: “videoRecorderResolution”,
width: 100,
},
{
title: “Температура”,
dataIndex: “temperatureCelsius”,
width: 80,
},
{
title:
‘ this.handleExport()}>Экспорт csv‘,
dataIndex: “”,
},
];
componentDidMount() {}
handleStandardTableChange = (pagination, filtersArg, sorter) => {
const { dispatch } = this.props;
const { selectedRowKeys } = this.state;
// READ ONLY COLUMNS
const filters = Object.keys(filtersArg).reduce((obj, key) => {
const newObj = { …obj };
newObj[key] = getValue(filtersArg[key]);
return newObj;
}, {});
const params = {
currentPage: pagination.current,
pageSize: pagination.pageSize,
…filters,
};
if (sorter.field) {
params.sorter = `${sorter.field}_${sorter.order}`;
}
dispatch({
type: “acme/fetchList”,
payload: params,
});
// CHANGE HANDLE TABLE
let newParams = {};
// Поиск переменных nameCamera, rpiIp, registeredIp, type, cameraNumber
const valuesTable = [“nameCamera”, “rpiIp”, “registeredIp”, “type”, “cameraNumber”];
valuesTable.forEach((item) => {
if (filters && filters[item]) {
const value = filters[item];
newParams = {
…newParams,
[item]: value,
};
}
if (sorter && sorter.field === item) {
newParams = {
…newParams,
[item]: sorter.order === “ascend” ? 1 : -1,
};
}
});
this.setState({
formValues: newParams,
});
};
handleFormReset = () => {
const { dispatch } = this.props;
this.setState(
{
formValues: {},
},
() => {
dispatch({
type: “acme/fetchDataList”,
});
this.handleSelectRow();
}
);
};
handleSelectRow = () => {
const { selectedRowKeys } = this.state;
const { selectedRows } = this.state;
const selectedRowKeysLength = selectedRowKeys.length;
if (selectedRowKeysLength === selectedRows.length) {
this.setState({
selectedRowKeys: [],
formValues: {},
exportTable: false,
downloadShow: false,
selectedRows: [],
});
} else if (
!selectedRowKeysLength &&
selectedRows.length > 0 &&
selectedRowKeys[0] === undefined &&
selectedRows[0].id !== undefined
) {
this.setState({
selectedRowKeys: [selectedRows[0].id],
exportTable: true,
downloadShow: true,
formValues: {},
});
}
};
handleSelectRows = (rows) => {
this.setState({
selectedRowKeys: rows.map((row) => row.id),
selectedRows: rows,
exportTable: true,
downloadShow: true,
formValues: {},
});
};
handleExport = async () => {
const { downloadShow } = this.state;
if (downloadShow === false) {
message.destroy();
message.error(“Выберите хотя би один ряд”);
return;
} else {
const { dispatch, acme } = this.props;
const { export_columns } = this.state;
dispatch({
type: “acme/exportData”,
payload: {
dataExportAllItems:
acme.items.data.map((item) => {
return export_columns.reduce((obj, item) => ({
…obj,
[item.dataIndex]: item.dataIndex === “type” ? item.filtersMap[item.filters].text : item.dataIndex === “videoRecording”
? item.filtersMap[item.filters].text === “true” ? true : false
: item.dataIndex === “cameraNumber”
? (item.rpiIp.match(/rpid+./g) || []).length !== 0 && item.rpiIp.replace(/./g, “”).includes(“rpi”) ? Number(item.rpiIp.replace(/./g, “”).replace(“rpi”, “”)) : false
: item.dataIndex[0] === “_” || item.dataIndex === “” || item.dataIndex === “rpiIp” ? undefined : item[item.dataIndex],
}), {});
}),
columnsForDataExportAllItems: export_columns.filter((item) => item.dataIndex !== ‘videoRecording’ && item.dataIndex[0] !== ‘_’),
exportSource:
stringify({
cameraNumber__gt:
acme.items.data.map((item) => {
return item.rpiIp.match(/rpid+./g) || [];
}).reduce(
(str1, str2) => […str1, …str2]
).filter((item) => item !== undefined).map((item) => {return item.replace(/.+/g, “”).replace(“rpi”, “”) }).reduce((min, current) =>
Number(min) {
return item.rpiIp.match(/rpid+./g) || [];
}).reduce(
(str1, str2) => […str1, …str2]
).filter((item) => item !== undefined).map((item) => {return item.replace(/.+/g, “”)}).reduce((min, current) =>
Number(min) > Number(current) ? min : current
)
})
}
});
}
}
handleDownload = () => {
const { downloadShow, export_columns } = this.state;
if (downloadShow === false) {
notification.info({
message:
“
Выберите хотя би один ряд
“,
description:
“
Это обязательное поле
“,
duration: null,
style: { marginTop: 24 },
btn:
“
OK
“,
icon:
“”,
});
return;
} else if (export_columns.length === undefined || export_columns.length === 0) {
notification.error({
message:
“
Ошибка экспорта
“,
description:
“
Пожалуйста выберите как минимум один ряд
“,
duration: null,
style: { marginTop: 24 },
btn:
“
OK
“,
icon:
“”,
});
return;
} else {
downloadFile();
}
}
renderSimpleForm() {
const { formValues } = this.state;
const hasSelected = formValues && Object.keys(formValues).length > 0;
return (
style={{ width: 200, marginBottom: 24 }}
/>
this.setState({
[value]: [value],
exportTable:
value === “type” ? false : true,
downloadShow:
value === “type” ? false : true,
})
}
style={{ width: 120 }}
>
Имя камеры
rpiIp
Регистрация IP
Тип
this.setState({
[“_” + value]: value,
exportTable:
value === “type” ? false : true,
downloadShow:
value === “type” ? false : true,
})
}
style={{ width: 120 }}
>
Возрастающий
Убывающий
this.setState({
[“cameraNumber__” + value]: value,
exportTable:
value === “gt” ? false : true,
downloadShow:
value === “gt” ? false : true,
})
}
style={{ width: 120 }}
>
>
<
this.setState({ cameraNumber__icontains: e.target.value })
}
/>
);
}
render() {
const {
selectedRowKeys,
loading,
selectedRows,
formValues,
} = this.state;
const rowSelection = {
selectedRowKeys,
onChange: this.handleSelectRows.bind(this),
};
const columns = this.columns.map((col) => {
if (!col.editable) {
return col;
}
return {
…col,
onCell: record => ({
record,
inputType: col.dataIndex === ‘videoRecording’ ? ‘checkbox’ : ‘text’,
dataIndex: col.dataIndex,
title: col.title,
editing: false,
}),
};
});
// Схема таблицы и ошибки записи в таблицу
let dataForTable;
if (Object.keys(this.props) !== [] && this.props.acme !== undefined) {
if (this.props.acme.items !== undefined && this.props.acme.items !== “”) {
dataForTable = validateTableData(this.props.acme.items.data);
if (Object.keys(dataForTable.errors_for_validation).length > 0) {
return (
Выбранные ряды для обновлений не прошли проверку
{(Object.keys(dataForTable.errors_for_validation)).map( (key , index) =>(
{dataForTable.errors_for_validation[key].map(item => item)}
>
))}
</div>
);
}
}
}
// Таблица и её компоненты
if (dataForTable !== null && dataForTable !== undefined && dataForTable.data !== undefined && dataForTable.errors_for_validation===undefined ) {
// изрезаем данные для отрисовки.
let dataForTabelReservation = dataForTable.data.reduce((total,item,index)=>{
let termostat = [];
if (dataForTable.data[parseInt(index + 1)] !== undefined && dataForTable.data[parseInt(index + 1)].type !== dataForTable.data[index].type && index > 0 && dataForTable.data[index].type === ‘company’) {
termostat.push(…dataForTable.data.slice(index + 1,parseInt(index + dataForTable.data.slice(index + 1).findIndex(element => element.type !== ‘company’) + 1)));
let ter = dataForTable.data.slice(index + 1,parseInt(index + dataForTable.data.slice(index + 1).findIndex(element => element.type !== ‘company’) + 1))
ter.forEach(element=>{
element[“state”] = “”;
});
ter[0][“room”] = dataForTable.data[index].nameCamera;
ter.forEach(element=>{
if (element.room === undefined) element.room= element.nameCamera;
});
total.push(ter);
}
return total;
},[])
// объединяем запросы на термостаты и координаты в один массив.
let termostatDelivered = [];
dataForTabelReservation.forEach(item =>{
let earlierColumns= [];
let terMainRoom=[];
for (let i=0; i{
if (column.dataIndex == ‘state’) return false;
else return true;
});
let renderingColumnsForRoomsAndCameras= [];
let renderingData = []
let roomForCamerasAndRooms=[];
termostatDelivered.map(item=>{
if (item !== ”) renderingData.push(item)
item.length>0 && item.map(terItem => roomForCamerasAndRooms.push(terItem.room))
})
roomForCamerasAndRooms.sort().forEach((element, index, array)=>{
let isDuplicate = array.indexOf(element, index + 1);
if (isDuplicate === -1){
let elementAndCamera= [];
renderingColumnsForRoomsAndCameras.push({“dataIndex”:”room”,”title”:element,”width”:”100″})
if(item[element] !== undefined){
item[element].forEach(column=>{
if(column.cameraNumber !== undefined){
let isExistCameraNumber= [];
isExistCameraNumber= roomForCamerasAndRooms.filter(item=> item.includes(column.cameraNumber.toString()));
if(isExistCameraNumber.length===0){
let indexToSetLengthOf–;
renderingColumnsForRoomsAndCameras.splice(–indexToSetLengthOf+1,0,{“dataIndex”:”cameraNumber”,”title”:column.cameraNumber,”width”:”100″,”filters”: [
{
text:”—–“,
value:”—–”
}
]})
}
}
});
}
else{
renderingColumnsForRoomsAndCameras.push({“dataIndex”:”cameraNumber”,”title”:”Камера”,”width”:”100″,”filters”: [
{
text:”—–“,
value:”—–”
}
]})
}
}
});
/*
console.log(renderingColumnsForRoomsAndCameras);
console.log(renderingData);
*/