diff --git a/src/components/ImportProgress/index.less b/src/components/ImportProgress/index.less new file mode 100644 index 0000000..7cc690a --- /dev/null +++ b/src/components/ImportProgress/index.less @@ -0,0 +1,24 @@ +.import_progress{ + position: absolute; + top: 0; + left: 0; + width: 340px; + height: 150px; + background-color: lemonchiffon; + display: flex; + align-items: center; + justify-content: center; + border: 1px solid #999; + + .progress { + padding-left: 2px; + height: 22px; + width: 310px; + background-color: #fff; + border: 1px solid #999; + border-radius: 3px; + display: flex; + align-items: center; + justify-content: center; + } +} \ No newline at end of file diff --git a/src/components/ImportProgress/index.tsx b/src/components/ImportProgress/index.tsx new file mode 100644 index 0000000..efb5019 --- /dev/null +++ b/src/components/ImportProgress/index.tsx @@ -0,0 +1,49 @@ +import { FC, useEffect, useState } from 'react'; +import styles from './index.less'; +import { Progress } from 'antd'; + +interface PageProps { + show?: boolean; + onoK: () => void; +} + +const ImportProgress: FC = ({ + show = false, + onoK, + ...props +}) => { + const [percentVal, setPercentVal] = useState(0); + + // 监听是否到安装进度条步骤 + useEffect(() => { + if (show) { + const interval = setInterval(() => { + setPercentVal((val) => { + const randomStep = Math.round(Math.random() * (100 / 15)); + const newPercent = val + randomStep; + + if (newPercent >= 100) { + clearInterval(interval); + onoK() + return 100; + } + + return newPercent; + }); + }, 100); + + return () => clearInterval(interval); + } + }, [show]) + + + return ( +
+
+ +
+
+ ) +} + +export default ImportProgress \ No newline at end of file diff --git a/src/layouts/LeftMenuOne/index.tsx b/src/layouts/LeftMenuOne/index.tsx index ecf81df..42dd5a3 100644 --- a/src/layouts/LeftMenuOne/index.tsx +++ b/src/layouts/LeftMenuOne/index.tsx @@ -113,7 +113,7 @@ const LeftMenuCom: FC = ({ data }) => { let manager: any = []; let device: any = []; // 单位列表 - await unitAddressList({ pageNum: 1, pageSize: 100, 'unitAddress.delFlag': 0}).then((res) => { + await unitAddressList({ pageNum: 1, pageSize: 200, 'unitAddress.delFlag': 0}).then((res) => { if (res?.result == "success") { res.data[0].list.forEach((val: any) => { val.title = val.unitName; @@ -126,7 +126,7 @@ const LeftMenuCom: FC = ({ data }) => { } }) // 设备注册列表 - await deviceHardPage({ pageNumber: 1, pageSize: 100 }).then((res) => { + await deviceHardPage({ pageNumber: 1, pageSize: 200 }).then((res) => { if (res?.result == "success") { res.data[0].list.forEach((val: any) => { val.title = val.deviceName; val.key = val.id; }) device = res.data[0].list.filter((val: any) => {return val.delFlag == 0}) @@ -152,7 +152,7 @@ const LeftMenuCom: FC = ({ data }) => { // 更新单位位置管理树结构数据 const getUnitList = (type?: string) => { - unitAddressList({ pageNum: 1, pageSize: 100, 'unitAddress.delFlag': 0}).then((res: any) => { + unitAddressList({ pageNum: 1, pageSize: 200, 'unitAddress.delFlag': 0}).then((res: any) => { if (res.result == 'success') { res.data[0].list.forEach((val: any) => { val.title = val.unitName; val.key = val.id; }) // 过滤掉delFlag == 1的数据 diff --git a/src/pages/GLQ/WebMMJ/MmjInitInstall/index.tsx b/src/pages/GLQ/WebMMJ/MmjInitInstall/index.tsx index 198b7c1..dd65fbd 100644 --- a/src/pages/GLQ/WebMMJ/MmjInitInstall/index.tsx +++ b/src/pages/GLQ/WebMMJ/MmjInitInstall/index.tsx @@ -6,21 +6,24 @@ import ButtonComp from '@/components/ButtonComp'; import { secretInit_cleanInfo, secretInit_loadData, secretInit_sendData } from '@/services/gql'; import { useEffect, useState, } from 'react'; import ClearInfoDialog from '@/components/ClearInfoDialog'; +import { useParams } from 'umi'; // 网络MMJ管理 --> MMJ初装 export default function Page() { const [dataLoading, setDataLoading] = useState(false); const [form] = Form.useForm(); const [visibility, setVisibility] = useState(false); + const urlParams = useParams(); + let sysInfo = localStorage.getItem(`${urlParams?.fileType}`); + let info = sysInfo ? JSON.parse(sysInfo) : null; const onFinish = (values: any) => { console.log('表单提交:', values); }; useEffect(() => { - let layoutInfo: any = localStorage.getItem('MMJInit'); - if (layoutInfo) { - form.setFieldsValue({ ...JSON.parse(layoutInfo) }) + if (info) { + form.setFieldsValue({ ...info?.MMJInit }) setDataLoading(true); } }, []) @@ -34,7 +37,7 @@ export default function Page() { if (res?.result == "success" && res?.data.length > 0) { message.success('加载数据成功'); form.setFieldsValue({ ...res?.data[0] }) - localStorage.setItem('MMJInit', JSON.stringify(res?.data[0])); + localStorage.setItem(`${urlParams?.fileType}`, JSON.stringify({ ...info, MMJInit: res?.data[0] })) setDataLoading(true); } else { message.error(res?.errorMsg); diff --git a/src/pages/MY/KeyBodyManage/Import/index.tsx b/src/pages/MY/KeyBodyManage/Import/index.tsx index 6043705..bf070f1 100644 --- a/src/pages/MY/KeyBodyManage/Import/index.tsx +++ b/src/pages/MY/KeyBodyManage/Import/index.tsx @@ -6,6 +6,9 @@ import { Button, ConfigProvider, Form, Input, Modal, Pagination, Select, Table, import { rowClassName } from '@/utils'; import ButtonComp from '@/components/ButtonComp'; import { secretBodyImport, secretFormatList, secretList, secretUpdateSecret } from '@/services/my'; +import { useParams } from 'umi'; +import { fileStr, sysType, sysTypeStr } from '@/utils/sysType'; +import ImportProgress from '@/components/ImportProgress'; export default function Page() { const [activeTab, setActiveTab] = useState(1); @@ -18,15 +21,16 @@ export default function Page() { const [productNumber, setProductNumber] = useState(''); const [speed, setSpeed] = useState(1); const [selectData, setSelectData] = useState({ + keyType: [], productName: [], carrierType: [], - carrierNumber: [], - publisherType: [], - orderDirection: [] + carrierModel: [], + net: [] }); const [selectedRowKeys, setSelectedRowKeys] = useState([]); const [allRowKeys, setAllRowKeys] = useState([]); + const urlParams = useParams(); const [form] = Form.useForm(); const formItemSty = { width: 'auto', marginBottom: 20, marginRight: 30 }; @@ -43,9 +47,9 @@ export default function Page() { { title: '载体类型', dataIndex: 'carrierType', key: 'carrierType', align: 'center' }, { title: '载体型号', dataIndex: 'applyModel', key: 'applyModel', align: 'center' }, { title: '数量', dataIndex: 'number', key: 'number', align: 'center' }, - // { title: '来源', dataIndex: 'orderDirection', key: 'orderDirection', align: 'center' }, + { title: '来源', dataIndex: 'source', key: 'source', align: 'center' }, { title: '当前状态', dataIndex: 'currentStatus', key: 'currentStatus', align: 'center' }, - { title: '导入时间', dataIndex: 'importTime', key: 'importTime', align: 'center' }, + { title: '导入时间', dataIndex: 'importTime', key: 'importTime', align: 'center'}, ] useEffect(() => { @@ -54,30 +58,32 @@ export default function Page() { }, []) const initForm = () => { - form.setFieldsValue({ - productName: '', - carrierType: '', - carrierNumber: '', - // orderDirection: '', - }) } // 获取下拉框数据 const getSelect = () => { - secretFormatList({ pageNumber, pageSize }).then((res) => { - if (res?.result == "success") { - let list = res.data[0].list; - let productName = list.map((item: any) => { return { label: item.productName, value: item.productName } }); - let carrierType = list.map((item: any) => { return { label: item.carrierType, value: item.carrierType } }); - let carrierNumber = list.map((item: any) => { return { label: item.carrierNumber, value: item.carrierNumber } }); - setSelectData({ - productName: [{ label: '全部', value: '' }, ...productName], - carrierType: [{ label: '全部', value: '' }, ...carrierType], - carrierNumber: [{ label: '全部', value: '' }, ...carrierNumber], - }) - } else { - message.error(res?.errorMsg); - } + setSelectData({ + keyType: [ + { label: '密钥种类1', value: '密钥种类1' }, + { label: '密钥种类2', value: '密钥种类2' } + ], + productName: [ + { label: '产品名称1', value: '产品名称1' }, + { label: '产品名称2', value: '产品名称2' } + ], + carrierType: [ + { label: '软盘', value: '软盘' }, + { label: '移动盘', value: '移动盘' }, + { label: '全部', value: '全部' } + ], + carrierModel: [ + { label: '三寸', value: '三寸' }, + { label: '全部', value: '全部' } + ], + net: [ + { label: '来自产品1', value: '来自产品1' }, + { label: '来自产品2', value: '来自产品2' }, + ] }) } @@ -89,15 +95,10 @@ export default function Page() { // 获取密钥体列表 const getList = () => { - let data = form.getFieldsValue() - let params = { - 'secretImport.productName': data.productName, - 'secretImport.carrierType': data.carrierType, - 'secretImport.carrierNumber': data.carrierNumber, - } - secretList({ pageNumber, pageSize, ...params}).then((res) => { + secretList({ pageNumber, pageSize }).then((res) => { if (res?.result == "success") { - setTotal(res.data[0].total) + res.data[0].list = res.data[0].list.filter((val: any) => {return val?.content != 'PMCS'}) + setTotal(res.data[0].total - 1) setTableData(res.data[0].list) const keys = res.data[0].list.map((item: any) => item?.id); setAllRowKeys(keys); @@ -132,7 +133,20 @@ export default function Page() { message.info('请勾选数据'); return } - + + let jg = false; + tableData.forEach((item: any) => { + selectedRowKeys.forEach(item2 => { + if (item2 == item?.id && item?.currentStatus == '已使用') { + jg = true; + } + }) + }) + + if (jg) { + message.info('当前状态为已使用的不能删除, 请先将已使用的'); return + } + let promises = selectedRowKeys.map(item => { return secretUpdateSecret({ id: item, type }).then((res) => { if (res?.result === "success") { @@ -144,7 +158,7 @@ export default function Page() { }); }); - let str: any = { 1: '删除成功', 2: '还原成功', 3: '清理成功'} + let str: any = { 1: '删除成功', 2: '还原成功', 3: '清理成功' } Promise.all(promises).then(results => { let recordCount = results.reduce((acc: any, val) => acc + val, 0); if (recordCount === selectedRowKeys.length) { @@ -156,6 +170,29 @@ export default function Page() { }); } + const uploadFiles = () => { + let data = form.getFieldsValue() + let sysTypeName: string = sysType[urlParams?.fileType] + fileStr[urlParams?.fileType] + + const formData = new FormData(); + formData.append('file', fileInfo); + formData.append('productNumber', `${productNumber}`); + formData.append('keyType', `${data?.keyType}`); + formData.append('productName', `${data?.productName}`); + formData.append('carrierType', `${data?.carrierType}`); + formData.append('carrierModel', `${data?.carrierModel}`); + formData.append('net', `${data?.net}`); + formData.append('sysType', `${sysTypeStr[sysTypeName]}`); + secretBodyImport(formData).then((res) => { + if (res?.result == "success") { + setSpeed(4) + setVisibility(false) + } else { + message.error(res?.errorMsg); + } + }) + } + return (
setActiveTab(e)} />
- {/* - { }} options={selectData.productName} /> + + { }} options={selectData.carrierType} /> + + { }} options={selectData.carrierNumber} /> + + + + + { }} options={[ - { label: '全部', value: '' }, - { label: '来自产品1', value: 1 }, - { label: '来自产品2', value: 2 }, - ]} /> - */}
{ - setSpeed(1); - setFileInfo(null); - setProductNumber(''); - setVisibility(true) + form.validateFields().then(() => { + setSpeed(1); + setFileInfo(null); + setProductNumber(''); + setVisibility(true) + }) }} /> - form.submit()} /> + onFinish()} />
@@ -237,14 +267,14 @@ export default function Page() { sending(1)} /> sending(2)} /> sending(3)} /> - { message.info('建设中')}} /> + { message.info('建设中') }} />
setVisibility(false)} footer={null}>
@@ -266,39 +296,32 @@ export default function Page() {
请选择载体的输入路径
*文件路径 - + - { }} /> +
} {speed == 3 &&
是否到密钥体?
} - {speed == 4 &&
导入密钥体成功
} + {speed == 5 &&
导入密钥体成功!
} + {speed == 6 &&
导入密钥体失败!
}
{ switch (speed) { case 1: - if (!productNumber.trim()) { message.error('产品编号不能为空'); return } + if (!productNumber.trim()) { message.error('请输入产品编号'); return } setSpeed(2) break; case 2: - const formData = new FormData(); - formData.append('file', fileInfo); - formData.append('productNumber', `${productNumber}`); - secretBodyImport(formData).then((res) => { - if (res?.result == "success") { - setSpeed(3) - } else { - message.error(res?.errorMsg); - } - }) + if (!fileInfo) { message.error('请选择文件路径'); return } + setSpeed(3) break; case 3: - setSpeed(4) + uploadFiles() break; - case 4: + case 5: onFinish() setVisibility(false) break; @@ -307,6 +330,11 @@ export default function Page() { setVisibility(false)} />
+ + {speed == 4 && { + setVisibility(true) + setSpeed(5) + }}/>} ); } \ No newline at end of file diff --git a/src/pages/MY/KeyManage/DataMaintenance/index.tsx b/src/pages/MY/KeyManage/DataMaintenance/index.tsx index c5a8581..5dbcd3a 100644 --- a/src/pages/MY/KeyManage/DataMaintenance/index.tsx +++ b/src/pages/MY/KeyManage/DataMaintenance/index.tsx @@ -1,13 +1,17 @@ import styles from '../../../GLQ/index.less'; -import { useState } from 'react'; -import { ConfigProvider, Modal, Table } from 'antd'; +import { useEffect, useState } from 'react'; +import { ConfigProvider, Input, Modal, Table, Upload, UploadProps, message } from 'antd'; import { rowClassName } from '@/utils'; import ButtonComp from '@/components/ButtonComp'; +import { manageDiskDataImport, secretFormatList } from '@/services/register'; +import ImportProgress from '@/components/ImportProgress'; export default function Page() { const [tableData, setTableData] = useState([]); const [visibility, setVisibility] = useState(false); + const [speed, setSpeed] = useState(1); + const [fileInfo, setFileInfo] = useState(null); const columns: any = [ { @@ -19,16 +23,55 @@ export default function Page() { { title: '管理盘号', dataIndex: 'name', key: 'name', align: 'center' }, { title: '密钥种类', dataIndex: 'name', key: 'name', align: 'center' }, { title: '当前版本号', dataIndex: 'name', key: 'name', align: 'center' }, - { title: '导入时间', dataIndex: 'importTime', key: 'importTime', align: 'center' },, + { title: '导入时间', dataIndex: 'importTime', key: 'importTime', align: 'center' }, , { title: '数据长度', dataIndex: 'name', key: 'name', align: 'center' } ] + const props: UploadProps = { + maxCount: 1, + beforeUpload: (file: any) => { + setFileInfo(file); + } + }; + + useEffect(() => { + getList() + }, []) + + const uploadFiles = () => { + const formData = new FormData(); + formData.append('file', fileInfo); + manageDiskDataImport(formData).then((res) => { + if (res?.result == "success") { + setVisibility(false) + setSpeed(2) + } else { + message.error(res?.errorMsg); + } + }) + } + + // 获取密钥体列表 + const getList = () => { + secretFormatList({ pageNumber: 1, pageSize: 50 }).then((res) => { + if (res?.result == "success") { + setTableData(res.data[0].list) + } else { + message.error(res?.errorMsg); + } + }) + } + return (
{ }} />
- setVisibility(true)} /> + { + setSpeed(1); + setFileInfo(null); + setVisibility(true) + }} />
setVisibility(false)} footer={null}>
-
类型判断1: 选择文件弹窗
-
类型判断2: 导入成功
-
类型判断3: 已经存在管理盘数据,是否重新导入?
+ { + speed == 1 && +
+
请选择载体的输入路径
+
+ *文件路径 + + + + +
+
+ } + {speed == 3 &&
导入成功
} + {speed == 4 &&
已经存在管理盘数据,是否重新导入?
}
- { }} /> + { + switch (speed) { + case 1: + uploadFiles() + setSpeed(2) + break; + case 3: + getList() + setVisibility(false) + break; + } + }} /> + setVisibility(false)} />
+ + + {speed == 2 && { + setVisibility(true) + setSpeed(3) + }} />} ); } \ No newline at end of file diff --git a/src/pages/MY/KeyManage/KeyConfigQuery/index.tsx b/src/pages/MY/KeyManage/KeyConfigQuery/index.tsx index 7e8f75e..c0d8f19 100644 --- a/src/pages/MY/KeyManage/KeyConfigQuery/index.tsx +++ b/src/pages/MY/KeyManage/KeyConfigQuery/index.tsx @@ -1,13 +1,23 @@ import styles from '../../../GLQ/index.less'; -import { useState } from 'react'; -import { ConfigProvider, Modal, Select, Table } from 'antd'; +import { useEffect, useState } from 'react'; +import { ConfigProvider, Modal, Select, Table, message } from 'antd'; import { rowClassName } from '@/utils'; import ButtonComp from '@/components/ButtonComp'; +import { secretInstallSearch } from '@/services/my'; +import { deviceHardPage } from '@/services/register'; export default function Page() { - const [tableData, setTableData] = useState([]); + const [tableData, setTableData] = useState([]); + const [tableData1, setTableData1] = useState([]); const [visibility, setVisibility] = useState(false); + const [queryParams, setQueryParams] = useState({ + a: '', + b: '', + c: '', + d: '' + }); + const [selectedRowKeys, setSelectedRowKeys] = useState([]); const columns: any = [ { @@ -38,21 +48,54 @@ export default function Page() { return {c + 1}; }, }, - { title: '设备名称', dataIndex: 'name', key: 'name', align: 'center' }, - { title: '管理实体标识', dataIndex: 'name', key: 'name', align: 'center' }, - { title: '310标识', dataIndex: 'name', key: 'name', align: 'center' }, - { title: 'IP地址', dataIndex: 'name', key: 'name', align: 'center' }, - { title: '设备型号', dataIndex: 'name', key: 'name', align: 'center' }, + { title: '设备名称', dataIndex: 'deviceName', key: 'deviceName', align: 'center' }, + { title: '管理实体标识', dataIndex: 'deviceEntityId', key: 'deviceEntityId', align: 'center' }, + { title: '310标识', dataIndex: 'deviceMarkId', key: 'deviceMarkId', align: 'center' }, + { title: 'IP地址', dataIndex: 'ip', key: 'ip', align: 'center' }, + { title: '设备型号', dataIndex: 'deviceType', key: 'deviceType', align: 'center' }, { title: '应用系统', dataIndex: 'name', key: 'name', align: 'center' }, { title: '管理代理', dataIndex: 'name', key: 'name', align: 'center' }, { title: '设备状态', dataIndex: 'name', key: 'name', align: 'center' }, { title: '协同管理标志', dataIndex: 'name', key: 'name', align: 'center' } ] + const search = () => { } + + const submit = () => { + if (selectedRowKeys.length == 0) { + message.info('请选择设备!') + return + } + secretInstallSearch({deviceId: selectedRowKeys[0]}).then((res) => { + if (res?.result == "success") { + let data = res.data[0].filter((val: any) => { return val.delFlag == 0 }) + setTableData([...data]) + setVisibility(false) + setSelectedRowKeys([]) + } else { + message.error(res?.errorMsg); + } + }) + } + + const getDeviceHardPage = async () => { + await deviceHardPage({ pageNumber: 1, pageSize: 200 }).then((res) => { + if (res?.result == "success") { + let data = res.data[0].list.filter((val: any) => { return val.delFlag == 0 }) + setTableData1([...data]) + } else { + message.error(res?.errorMsg); + } + }) + } + return (
{ }} /> - setVisibility(true)} /> + { + setVisibility(true); + getDeviceHardPage() + }} />
0 ? { y: 41 * 9 } : {}} @@ -73,19 +116,19 @@ export default function Page() { footer={null}>
-
检索项
- { }} options={[{ label: '全部', value: '' }]} /> -
检索项
- { }} options={[{ label: '全部', value: '' }]} /> -
设备型号
- { }} options={[{ label: '全部', value: '' }]} />
管理代理
- { }} options={[{ label: '全部', value: '' }]} /> - { }} /> + search()} />
record?.id} rowClassName={rowClassName} + rowSelection={{ + type: 'radio', + selectedRowKeys, + onChange: (selectedKeys: any) => { + setSelectedRowKeys(selectedKeys); + } + }} />
- { }} /> - { }} /> + submit()} /> + setVisibility(false)} />
diff --git a/src/pages/MY/KeyManage/ManageKeys/index.tsx b/src/pages/MY/KeyManage/ManageKeys/index.tsx index 43c18fc..810004b 100644 --- a/src/pages/MY/KeyManage/ManageKeys/index.tsx +++ b/src/pages/MY/KeyManage/ManageKeys/index.tsx @@ -4,6 +4,7 @@ import { ConfigProvider, DatePicker, Modal, Radio, Select, Table } from 'antd'; import { rowClassName } from '@/utils'; import ButtonComp from '@/components/ButtonComp'; +import moment from 'moment'; export default function Page() { const [tableData, setTableData] = useState([]); @@ -37,26 +38,61 @@ export default function Page() { { title: '协同管理标志', dataIndex: 'name', key: 'name', align: 'center' } ] + + const disabledDate = (current: any) => { + return current && current < moment().startOf('day'); + }; + + const disabledTime = (current, type) => { + if (type === 'start' && current && current.isSame(moment(), 'day')) { + const currentTime = moment(); + const disabledHours = generateOptions(0, currentTime.hour()); + const disabledMinutes = generateOptions(0, currentTime.minute()); + return { + disabledHours: () => disabledHours, + disabledMinutes: () => disabledMinutes, + }; + } + return {}; + }; + + const generateOptions = (start, end) => Array.from({ length: end - start }, (_, i) => start + i); + return (
{ }} />
- 使用区密钥状态 + 使用区密钥状态 备用区密钥装配
密钥类型
-
所属网络
-
启用日期
- +
可装配的密钥体列表
diff --git a/src/services/my.ts b/src/services/my.ts index 2005722..a627f76 100644 --- a/src/services/my.ts +++ b/src/services/my.ts @@ -76,4 +76,9 @@ export async function keyBodyCarrierClearText(data: any) { // 密钥体载体包封 - 密文载体包封 export async function keyBodyCarrierEncrypted(data: any) { return postRequest(`/xgd/secretBodyManger/keyBodyCarrierEncrypted`, data); +} + +// 密钥配置查询-根据选择的设备查询出所需要导入的秘钥列表,含管理秘钥和用户秘钥 +export async function secretInstallSearch(params: any) { + return getRequest(`/xgd/secretInstall/search`, params); } \ No newline at end of file diff --git a/src/services/register.ts b/src/services/register.ts index 8f5f241..0a14b08 100644 --- a/src/services/register.ts +++ b/src/services/register.ts @@ -61,7 +61,7 @@ export async function unitAddressList(params: any) { } // 管理系统管理盘数据维护(导入管理系统盘) - 数据导入 -export async function diskDataImport(formData: any) { +export async function manageDiskDataImport(formData: any) { return uploadFile(`/xgd/secretInstall/dataImport`, formData); }