trunk/pc4public/portal/wea-plugin/index.js

211 lines
8.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React from 'react';
import { Button, Icon, Checkbox } from 'antd';
import { WeaTools, WeaDialog, WeaSearchGroup, WeaTable } from 'ecCom';
import './style/';
class WeaPlugin extends React.Component {
state = { visible: this.props.visible || false, test: false, data: {}, isCheck: false };
constructor(props) {
super(props);
this.getButtons = this.getButtons.bind(this);
this.getPlugins = this.getPlugins.bind(this);
this.getPluginStatus = this.getPluginStatus.bind(this);
this.onChange = this.onChange.bind(this);
this.onTest = this.onTest.bind(this);
this.onCancel = this.onCancel.bind(this);
this.onShow = this.onShow.bind(this);
}
componentWillMount() {
if (this.state.visible) {
this.getPlugins();
}
}
render() {
const { test, data = {}, isCheck = false } = this.state;
const { plugins = [], otherPlugins = [] } = data;
let columns = [
{ key: 'index', title: '序号', dataIndex: 'index', width: '10%' },
{ key: 'name', title: '名称', dataIndex: 'name', width: '20%' },
{ key: 'explain', title: '描述', dataIndex: 'explain', width: '35%' },
{ key: 'size', title: '大小', dataIndex: 'size', width: '10%' },
{
key: 'status',
title: '状态',
dataIndex: 'status',
width: '10%',
render: (text, record) => this.getPluginStatus(record.progid),
},
{
key: 'download',
title: '下载并安装',
dataIndex: 'download',
width: '15%',
render: (text, record) => <a href={record.url} target="_blank" style={{ color: '#00a9ff' }}>下载</a>,
},
];
let displayComp = (
<div className="wea-plugin-body">
<WeaSearchGroup title="控件安装" needTigger={true} showGroup={true}>
<WeaTable columns={columns} dataSource={plugins} pagination={false} />
</WeaSearchGroup>
<WeaSearchGroup title="安装其他工具" needTigger={true} showGroup={true}>
<WeaTable columns={columns} dataSource={otherPlugins} pagination={false} />
</WeaSearchGroup>
<div className="wea-plugin-chk-msg">
<Checkbox checked={isCheck} onChange={this.onChange}>每次进入系统时检测</Checkbox>
</div>
<div className="wea-plugin-tip-msg">
<span><Icon type="exclamation-circle" /><span style={{ marginLeft: '10px' }}>注意安装完毕请重启计算机</span></span>
</div>
</div>
);
if (test) {
columns = [
{
key: 'index',
title: '序号',
dataIndex: 'index',
width: '10%',
render: (text, record) => parseInt(record.index) - 1,
},
{ key: 'name', title: '名称', dataIndex: 'name', width: '15%' },
{ key: 'clsid', title: '控件编号', dataIndex: 'clsid', width: '20%' },
{ key: 'clsname', title: '控件名称', dataIndex: 'clsname', width: '20%' },
{ key: 'version', title: '版本', dataIndex: 'version', width: '10%' },
{
key: 'status',
title: '状态',
dataIndex: 'status',
width: '10%',
render: (text, record) => this.getPluginStatus(record.progid),
},
{
key: 'download',
title: '检测',
dataIndex: 'download',
width: '15%',
render: (text, record) => <Button type="ghost" icon="search" onClick={() => this.onTest(record)}>检测</Button>,
},
];
displayComp = (
<div className="wea-plugin-body">
<WeaSearchGroup title="控件检测" needTigger={true} showGroup={true}>
<WeaTable columns={columns} dataSource={plugins.slice(1)} pagination={false} />
</WeaSearchGroup>
<WeaSearchGroup title="如果控件不能够正常运行怎么办?" needTigger={true} showGroup={true}>
<div className="wea-plugin-step">
<div className="wea-plugin-step-num">1</div>
<span>第一步 C:\WINDOWS\Downloaded Program Files 删除通过自动提示安装方式注册的控件对应名称参见clsname列</span>
</div>
<div className="wea-plugin-step">
<div className="wea-plugin-step-num">2</div>
<span>第二步控制面板 -> 删除或添加程序删除通过下载控件方式安装的控件</span>
</div>
<div className="wea-plugin-step">
<div className="wea-plugin-step-num">3</div>
<span>第三步删除用手工方式注册的控件</span>
<div style={{ paddingLeft: '30px', color: '#666' }}>
<p>1在命令行执行 regedit.exe</p>
<p>2在键 HKEY_CLASSES_ROOT\CLSID 下查找对应的 clsid如Office 控件的注册项为 {'{23739A7E-5741-4D1C-88D5-D50B18F7C347}'}</p>
<p>3如果找到该注册项表明控件已安装安装的文件路径见 InprocServer32 项的值在命令行执行regsvr32 /u &lt;带路径的文件名称&gt;即可删除</p>
</div>
</div>
<div className="wea-plugin-step">
<div className="wea-plugin-step-num">4</div>
<span>第四步点击<span style={{ color: '#00a9ff', cursor: 'pointer' }} onClick={() => this.setState({ test: false })}>重新下载</span></span>
</div>
</WeaSearchGroup>
<WeaSearchGroup title="为什么通过下载插件安装方式卸载控件会报错?" needTigger={true} showGroup={true}>
<div>
<span>卸载控件之前需要关闭所有 IE 窗口和使用控件的程序</span>
</div>
</WeaSearchGroup>
</div>
);
}
return (
<WeaDialog
visible={this.state.visible}
title="插件下载"
icon="wevicon-wea-plugin"
iconBgcolor="#a7adb5"
style={{ width: 810, height: 480 }}
zIndex={100}
hasScroll={true}
maskClosable={true}
buttons={this.getButtons()}
onCancel={this.onCancel}
>
{displayComp}
</WeaDialog>
);
}
getButtons() {
let buttons = [];
if (this.state.test) {
buttons.push(<Button type="primary" onClick={() => this.setState({ test: false })}>返回</Button>);
} else {
buttons.push(<Button type="primary" onClick={() => this.setState({ test: true })}>控件检测</Button>);
}
return buttons;
}
getPlugins() {
WeaTools.callApi('/api/portal/systemInfo/getPlugins', 'GET', {}).then((result) => {
const { data } = result;
this.setState({ data, isCheck: data.isCheck });
});
}
onChange(e) {
const checked = e.target.checked;
this.setState({ isCheck: checked });
WeaTools.callApi('/api/portal/systemInfo/setIsCheck', 'POST', { isCheck: checked ? '0' : '1' });
}
getPluginStatus(progid) {
let status = false;
try {
const obj = new ActiveXObject(progid);
if (obj) {
status = true;
}
} catch (e) {
}
return status ? <Icon type="check-circle" style={{ color: '#70d256', fontSize: '14px' }} /> : <Icon type="cross-circle" style={{ color: '#ff3f00', fontSize: '14px' }} />;
}
onTest(obj) {
const dialog = new window.top.Dialog();
dialog.currentWindow = window;
dialog.Width = 650;
dialog.Height = 400;
dialog.Title = `控件检测:${obj.name}`;
dialog.URL = obj.checkpageurl;
dialog.show();
}
onCancel() {
this.setState({ visible: false });
}
onShow() {
this.setState({ visible: true });
this.getPlugins();
}
}
export default WeaPlugin;