mirror of https://gitee.com/cf-fz/WebCAD.git
!2807 优化:文件历史记录数据匹配算法优化
parent
2ef0152036
commit
9fd4791230
@ -0,0 +1,265 @@
|
|||||||
|
import { Button, Checkbox, HTMLTable, Intent } from "@blueprintjs/core";
|
||||||
|
import { observable } from "mobx";
|
||||||
|
import { observer } from "mobx-react";
|
||||||
|
import React from "react";
|
||||||
|
import { app } from "../../ApplicationServices/Application";
|
||||||
|
import { FileHistoryFilesUrl, FileUrls } from "../../Common/HostUrl";
|
||||||
|
import { PostJson, RequestStatus } from "../../Common/Request";
|
||||||
|
import { StoreageKeys } from "../../Common/StoreageKeys";
|
||||||
|
import { FileServer } from "../../DatabaseServices/FileServer";
|
||||||
|
import { ModalState } from "../../UI/Components/Modal/ModalInterface";
|
||||||
|
import { AppToaster } from "../../UI/Components/Toaster";
|
||||||
|
import { FetchFile1 } from "./OperLog";
|
||||||
|
import { HistoryProp } from "./OperLogsModal";
|
||||||
|
|
||||||
|
@observer
|
||||||
|
export class OpenHistoryList extends React.Component<HistoryProp, {}>
|
||||||
|
{
|
||||||
|
LastOper = "";
|
||||||
|
CanOpenFileDataMap: Map<number, number> = new Map(); //this.props.data -> this.props.files
|
||||||
|
@observable CanOpen: boolean = false;
|
||||||
|
|
||||||
|
constructor(props)
|
||||||
|
{
|
||||||
|
super(props);
|
||||||
|
if (this.props.newFileId)
|
||||||
|
this.CanOpen = true;
|
||||||
|
|
||||||
|
this.ParseData();
|
||||||
|
}
|
||||||
|
|
||||||
|
ParseData = () =>
|
||||||
|
{
|
||||||
|
for (let i = 0, j = 0; j < this.props.data.length; j++)
|
||||||
|
{
|
||||||
|
if (i >= this.props.files.length)
|
||||||
|
break;
|
||||||
|
let data = this.props.data[j];
|
||||||
|
|
||||||
|
if (data.oper_type_name !== "修改" && data.oper_type_name !== "新建")
|
||||||
|
continue;
|
||||||
|
|
||||||
|
let date = new Date(data.oper_date);
|
||||||
|
let timeNum =
|
||||||
|
(date.getMonth() + 1) * Math.pow(60, 4) +
|
||||||
|
date.getDate() * Math.pow(60, 3) +
|
||||||
|
date.getHours() * Math.pow(60, 2) +
|
||||||
|
date.getMinutes() * 60 +
|
||||||
|
date.getSeconds(); //时分秒转换number 好比较
|
||||||
|
|
||||||
|
for (; i < this.props.files.length; i++)
|
||||||
|
{
|
||||||
|
let canOpenFile = this.props.files[i];
|
||||||
|
let str = canOpenFile.split("-");
|
||||||
|
let canOpenFileDateNum =
|
||||||
|
parseInt(str[str.length - 5]) * Math.pow(60, 4) +
|
||||||
|
parseInt(str[str.length - 4]) * Math.pow(60, 3) +
|
||||||
|
parseInt(str[str.length - 3]) * Math.pow(60, 2) +
|
||||||
|
parseInt(str[str.length - 2]) * 60 +
|
||||||
|
parseInt(str[str.length - 1]); //时分秒转换number 好比较
|
||||||
|
|
||||||
|
if (canOpenFileDateNum - 10 > timeNum)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (Math.abs(timeNum - canOpenFileDateNum) < 10)
|
||||||
|
this.CanOpenFileDataMap.set(j, i++);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
AllDataList = () =>
|
||||||
|
{
|
||||||
|
let count = 0;
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{
|
||||||
|
this.props.data.map((data, i) =>
|
||||||
|
{
|
||||||
|
if (data.oper_type_name === "打开")
|
||||||
|
if (this.LastOper === "打开")
|
||||||
|
return;
|
||||||
|
this.LastOper = data.oper_type_name;
|
||||||
|
|
||||||
|
if (data.oper_type_name === "修改")
|
||||||
|
count++;
|
||||||
|
if (this.props.newFileId && count > 20) return;
|
||||||
|
|
||||||
|
let canOpenFileIndex = this.CanOpenFileDataMap.get(i);
|
||||||
|
let file = this.props.files[canOpenFileIndex];
|
||||||
|
|
||||||
|
return <tr key={data.oper_date}>
|
||||||
|
<td>{data.oper_type_name}</td>
|
||||||
|
<td
|
||||||
|
style={{
|
||||||
|
textOverflow: "ellipsis",
|
||||||
|
overflow: "hidden",
|
||||||
|
whiteSpace: "nowrap",
|
||||||
|
maxWidth: 150
|
||||||
|
}}
|
||||||
|
title={`${data.oper_user}`}
|
||||||
|
>
|
||||||
|
{data.oper_user}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{data.oper_date}
|
||||||
|
{
|
||||||
|
file && <Button
|
||||||
|
className="histroyBtn"
|
||||||
|
value={file}
|
||||||
|
text="打开"
|
||||||
|
onClick={async (e) =>
|
||||||
|
{
|
||||||
|
this.HandleOpen(e.currentTarget.value);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
}
|
||||||
|
</td>
|
||||||
|
</tr>;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
CanOpenDataList = () =>
|
||||||
|
{
|
||||||
|
let count = 0;
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{
|
||||||
|
this.props.data.map((data, i) =>
|
||||||
|
{
|
||||||
|
if (data.oper_type_name !== "新建" && data.oper_type_name !== "修改") return;
|
||||||
|
|
||||||
|
let canOpenFileIndex = this.CanOpenFileDataMap.get(i);
|
||||||
|
let file = this.props.files[canOpenFileIndex];
|
||||||
|
|
||||||
|
if (file)
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
if (this.props.newFileId && count > 20) return;
|
||||||
|
return <tr>
|
||||||
|
<td>{data.oper_type_name}</td>
|
||||||
|
<td
|
||||||
|
style={{
|
||||||
|
textOverflow: "ellipsis",
|
||||||
|
overflow: "hidden",
|
||||||
|
whiteSpace: "nowrap",
|
||||||
|
maxWidth: 150
|
||||||
|
}}
|
||||||
|
title={`${data.oper_user}`}
|
||||||
|
>
|
||||||
|
{data.oper_user}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{data.oper_date}
|
||||||
|
<Button
|
||||||
|
className="histroyBtn"
|
||||||
|
value={file}
|
||||||
|
text="打开"
|
||||||
|
onClick={(e) =>
|
||||||
|
{
|
||||||
|
this.HandleOpen(e.currentTarget.value);
|
||||||
|
}} />
|
||||||
|
</td>
|
||||||
|
</tr>;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
HandleOpen = async (fileTitle: string) =>
|
||||||
|
{
|
||||||
|
const { fileId, newFileId, files, userName } = this.props;
|
||||||
|
let status: boolean = true;
|
||||||
|
if (newFileId)
|
||||||
|
{
|
||||||
|
let server = FileServer.GetInstance();
|
||||||
|
if (fileId != newFileId)
|
||||||
|
{
|
||||||
|
server._CurrentFilePath = "";
|
||||||
|
server.m_CurFileId = newFileId;
|
||||||
|
|
||||||
|
let code = await server.GetFileMD5(newFileId);
|
||||||
|
if (code)
|
||||||
|
{
|
||||||
|
let data = await PostJson(FileUrls.detail, { file_id: newFileId });
|
||||||
|
if (data.err_code === RequestStatus.Ok && data.files?.name)
|
||||||
|
{
|
||||||
|
server.currentFileInfo.name = data.files.name;
|
||||||
|
server.CurrentFileMd5 = code;
|
||||||
|
}
|
||||||
|
|
||||||
|
localStorage.setItem(StoreageKeys.LastOpenFileId, data.files?.file_id || "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
status = await this.OnClickOpenFile(userName, newFileId, fileTitle);
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = await this.OnClickOpenFile(userName, fileId, fileTitle);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!status)
|
||||||
|
{
|
||||||
|
AppToaster.show({
|
||||||
|
message: "打开图纸失败,请尝试打开其他历史记录图纸",
|
||||||
|
timeout: 3000,
|
||||||
|
intent: Intent.DANGER,
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (this.props.isNotToaster)
|
||||||
|
app.Editor.ModalManage.m_PromisRes({ Status: ModalState.Ok });
|
||||||
|
app.Editor.ModalManage.Destory();
|
||||||
|
};
|
||||||
|
|
||||||
|
OnClickOpenFile = async (userName: string, fileId: string, fileTitle: string) =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
let url = FileHistoryFilesUrl + encodeURIComponent(userName + "//" + fileId + "//" + fileTitle);
|
||||||
|
let cadf = await FetchFile1(url + ".cad");
|
||||||
|
app.OpenFile(cadf);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
render()
|
||||||
|
{
|
||||||
|
return (
|
||||||
|
<HTMLTable bordered={true} interactive={true} style={{ lineHeight: 0.5, width: "100%", padding: "5px 5px 0px 5px", border: "1px solid #DBDCDD" }}>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style={{ width: 50 }}>操作</th>
|
||||||
|
<th style={{ width: 190 }}>用户名</th>
|
||||||
|
<th>日期
|
||||||
|
<Checkbox
|
||||||
|
label="只显示能还原记录"
|
||||||
|
style={{ position: 'absolute', right: "10px", fontSize: "12px", top: "15px" }}
|
||||||
|
checked={this.CanOpen}
|
||||||
|
onClick={(e) =>
|
||||||
|
{
|
||||||
|
this.LastOper = "";
|
||||||
|
this.CanOpen = !this.CanOpen;
|
||||||
|
e.currentTarget.blur();
|
||||||
|
}} />
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{this.CanOpen ? this.CanOpenDataList() : this.AllDataList()}
|
||||||
|
</tbody>
|
||||||
|
</HTMLTable>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue