From b7bae347c65d81fcbd352f03f317e4643a97948b Mon Sep 17 00:00:00 2001
From: JINGYJ <1458671527@qq.com>
Date: Fri, 29 Dec 2023 16:43:29 +0800
Subject: [PATCH] =?UTF-8?q?feact:=20=E4=BB=BB=E5=8A=A1=E5=88=97=E8=A1=A8?=
=?UTF-8?q?=E3=80=81=E6=9C=8D=E5=8A=A1=E5=99=A8=E7=8A=B6=E6=80=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
config/routes.ts | 12 +
src/components/Notice/index.tsx | 2 +-
src/components/TableActionCard/stopBtn.tsx | 54 +++
src/locales/zh-CN.ts | 2 +
src/locales/zh-CN/common.ts | 1 +
src/locales/zh-CN/pages.ts | 2 +
src/locales/zh-CN/resource.ts | 18 +
src/locales/zh-CN/system.ts | 6 +
src/pages/Account/Center/index.tsx | 2 +-
.../ServerStatus/components/CreateForm.tsx | 185 ++++++++
.../components/DeviceStatusCard.tsx | 115 +++++
.../ServerStatus/components/UpdateForm.tsx | 191 +++++++++
src/pages/Resource/ServerStatus/index.tsx | 394 ++++++++++++++++++
.../components/UpdateParameterForm.tsx | 92 ++++
src/pages/System/ParameterSetting/index.tsx | 244 +++++++++++
.../ParameterSetting/parameterSetting.less | 29 ++
src/pages/Task/TaskList/index.tsx | 6 +-
17 files changed, 1350 insertions(+), 5 deletions(-)
create mode 100644 src/components/TableActionCard/stopBtn.tsx
create mode 100644 src/pages/Resource/ServerStatus/components/CreateForm.tsx
create mode 100644 src/pages/Resource/ServerStatus/components/DeviceStatusCard.tsx
create mode 100644 src/pages/Resource/ServerStatus/components/UpdateForm.tsx
create mode 100644 src/pages/Resource/ServerStatus/index.tsx
create mode 100644 src/pages/System/ParameterSetting/components/UpdateParameterForm.tsx
create mode 100644 src/pages/System/ParameterSetting/index.tsx
create mode 100644 src/pages/System/ParameterSetting/parameterSetting.less
diff --git a/config/routes.ts b/config/routes.ts
index 8f68b38..ed6bb95 100644
--- a/config/routes.ts
+++ b/config/routes.ts
@@ -93,6 +93,12 @@ export default [
component: 'System/OperationRecordList',
access: 'canReadMenu',
},
+ {
+ name: 'parameter-setting',
+ path: '/system/parameter-setting',
+ component: 'System/ParameterSetting',
+ access: 'canReadMenu',
+ },
],
},
{
@@ -205,6 +211,12 @@ export default [
component: 'Resource/ResourceDeviceStatus',
access: 'canReadMenu',
},
+ {
+ name: 'server-status',
+ path: '/resource/server-status',
+ component: 'Resource/ServerStatus',
+ access: 'canReadMenu',
+ },
],
},
{
diff --git a/src/components/Notice/index.tsx b/src/components/Notice/index.tsx
index c53b595..1d5258b 100644
--- a/src/components/Notice/index.tsx
+++ b/src/components/Notice/index.tsx
@@ -128,7 +128,7 @@ const Notice: React.FC = () => {
系统消息
-
+
紧急
diff --git a/src/components/TableActionCard/stopBtn.tsx b/src/components/TableActionCard/stopBtn.tsx
new file mode 100644
index 0000000..491923d
--- /dev/null
+++ b/src/components/TableActionCard/stopBtn.tsx
@@ -0,0 +1,54 @@
+/**
+ * 停止按钮
+ *
+ */
+import { DeleteOutlined } from '@ant-design/icons';
+import { useIntl } from '@umijs/max';
+import { Button, Popconfirm } from 'antd';
+import { proIconForTableActionStyle } from '../../../config/defaultIcon';
+import { FormattedMessage } from 'react-intl';
+
+type StopBtnProps = {
+ // eslint-disable-next-line @typescript-eslint/ban-types
+ buttonType?: 'defalut' | 'deleteIcon';
+ deleteApi: () => void;
+};
+
+const StopBtn: React.FC
= (props) => {
+ const intl = useIntl();
+
+ return (
+ {
+ props.deleteApi();
+ }}
+ >
+ {/* {props.buttonType === 'deleteIcon' ? (
+ <>
+
+ >
+ ) : (
+
+ )} */}
+
+
+ );
+};
+
+export default StopBtn;
diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts
index 865cb29..647f458 100644
--- a/src/locales/zh-CN.ts
+++ b/src/locales/zh-CN.ts
@@ -26,6 +26,7 @@ import {
post,
role,
user,
+ parameter_setting,
} from '@/locales/zh-CN/system';
import app from './zh-CN/app';
import common from './zh-CN/common';
@@ -63,6 +64,7 @@ export default {
...department,
...operation_record,
...app,
+ ...parameter_setting,
...Object.assign({}, ...Object.values(analysisZh)),
...Object.assign({}, ...Object.values(errorTypesZh)),
diff --git a/src/locales/zh-CN/common.ts b/src/locales/zh-CN/common.ts
index 4167c4d..afea17c 100644
--- a/src/locales/zh-CN/common.ts
+++ b/src/locales/zh-CN/common.ts
@@ -11,6 +11,7 @@ export default {
'common.modal.table.create.title': '新增表单',
'common.modal.table.delete.title': '确定要删除吗?',
'common.modal.table.delete.content': '确定删除吗,删除后将无法找回,请谨慎操作',
+ 'common.modal.table.stop.content': '确定要停止此任务吗? 停止后模型将停止运行',
'common.enable': '开启',
'common.disable': '禁用',
'common.yes': '是',
diff --git a/src/locales/zh-CN/pages.ts b/src/locales/zh-CN/pages.ts
index a37eec9..3a9ec5d 100644
--- a/src/locales/zh-CN/pages.ts
+++ b/src/locales/zh-CN/pages.ts
@@ -70,4 +70,6 @@ export default {
'pages.searchTable.tenThousand': '万',
'pages.searchTable.batchDeletion': '批量删除',
'pages.searchTable.batchApproval': '批量审批',
+ 'pages.searchTable.stop': '停止',
+ 'pages.searchTable.edit': '编辑',
};
diff --git a/src/locales/zh-CN/resource.ts b/src/locales/zh-CN/resource.ts
index b043f40..67e6975 100644
--- a/src/locales/zh-CN/resource.ts
+++ b/src/locales/zh-CN/resource.ts
@@ -79,3 +79,21 @@ export const model_version: { [key: string]: string } = {
'resource.model_version.table.list.add': '新建模型版本',
'resource.model_version.table.list.update': '更新模型版本',
};
+export const server_status: { [key: string]: string } = {
+ 'resource.server_status.table.list.name': '服务器名称',
+ 'resource.server_status.table.list.userName': '用户名',
+ 'resource.server_status.table.list.ip': 'IP',
+ 'resource.server_status.table.list.password': '密码',
+ 'resource.server_status.table.list.defaultPort': '默认端口',
+ 'resource.server_status.table.list.parameter': '服务器参数',
+ 'resource.server_status.table.list.publicKeyString': '公钥字符串',
+ 'resource.server_status.table.list.connectivityTesting': '连通性测试',
+ 'resource.server_status.table.list.isEnable': '是否启用',
+ 'resource.server_status.table.list.remark': '备注',
+ 'resource.server_status.table.list.createTime': '创建时间',
+ 'resource.server_status.table.list.updateTime': '更新时间',
+ 'resource.server_status.table.rule.required.modelFkId': '模型为必填项',
+ 'resource.server_status.table.rule.required.path': '模型地址为必填项',
+ 'resource.server_status.table.list.add': '新建服务器',
+ 'resource.server_status.table.list.update': '更新模型版本',
+};
diff --git a/src/locales/zh-CN/system.ts b/src/locales/zh-CN/system.ts
index bde69eb..3e5fa3d 100644
--- a/src/locales/zh-CN/system.ts
+++ b/src/locales/zh-CN/system.ts
@@ -152,3 +152,9 @@ export const operation_record: { [key: string]: string } = {
'system.operation.table.rule.list.ip': '请填写IP',
'system.operation.table.rule.list.path': '请填写接口路径',
}
+
+export const parameter_setting: { [key: string]: string } = {
+ 'system.parameter.table.list.label': '标签',
+ 'system.parameter.table.list.editor': '编辑参数',
+ 'system.parameter.table.rule.required.label': '参数为必填',
+}
diff --git a/src/pages/Account/Center/index.tsx b/src/pages/Account/Center/index.tsx
index d77038e..02da4c8 100644
--- a/src/pages/Account/Center/index.tsx
+++ b/src/pages/Account/Center/index.tsx
@@ -135,7 +135,7 @@ const AccountCenter: React.FC = () => {
-
登录密码:wangliqun
+
登录密码:***********
+ }
+ >
+
+ className="gn"
+ ghost={true}
+ itemCardProps={{
+ ghost: true,
+ bodyStyle: { padding: 0, margin: 0 },
+ }}
+ // search={{
+ // labelWidth: proTableCommonOptions.searchLabelWidth,
+ // }}
+ headerTitle={
+ <>
+
+ {Object.keys(tabOptions).map((item, index) => {
+ // eslint-disable-next-line react/jsx-key
+ return (
+ {
+ setActiveTabIndex(index);
+ }}
+ >
+ {Object.keys(deviceStatusEnums).includes(item)
+ ? deviceStatusEnums[item].miniName
+ : ''}
+ {"("+tabOptions[item]+ ')'}
+
+ );
+ })}
+
+ >
+ }
+ cardProps={{
+ bodyStyle: {
+ background: 'white',
+ padding: '8px 16px 16px',
+ borderRadius: 8,
+ },
+ }}
+ pagination={{
+ ...proTablePaginationOptions,
+ pageSize: currentPageSize,
+ onChange: (page, pageSize) => setCurrentPageSize(pageSize),
+ }}
+ showActions="hover"
+ rowSelection={false}
+ grid={{ gutter: 16, xs: 1, md: 2, lg: 2, xl: 4, xxl: 4 }}
+ metas={{
+ type: {
+ // 不展示在筛选项
+ hideInSearch: true,
+ },
+ content: {
+ hideInSearch: true,
+ },
+ actions: {
+ cardActionProps,
+ },
+ // status1: {
+ // // 自己扩展的字段,主要用于筛选,不在列表中显示
+ // title: '设备组',
+ // valueType: 'select',
+ // valueEnum: {
+ // '0': { text: '全部设备分组', status: '0' },
+ // '1': {
+ // text: '设备分组1',
+ // status: '1',
+ // },
+ // '2': {
+ // text: '设备分组2',
+ // status: '2',
+ // },
+ // '3': {
+ // text: '设备分组3',
+ // status: '3',
+ // },
+ // },
+ // },
+ // status2: {
+ // // 自己扩展的字段,主要用于筛选,不在列表中显示
+ // title: '分类',
+ // valueType: 'select',
+ // valueEnum: {
+ // '0': { text: '全部分类', status: '0' },
+ // '1': {
+ // text: '外围监控',
+ // status: '1',
+ // },
+ // '2': {
+ // text: '室内监控',
+ // status: '2',
+ // },
+ // '3': {
+ // text: '违规监控',
+ // status: '3',
+ // },
+ // },
+ // },
+ }}
+ request={async (params = {}, sort) => {
+ const { current, ...rest } = params;
+ const reqParams = {
+ page: current,
+ desc: false,
+ orderKey: '',
+ ...rest,
+ };
+ if (sort && Object.keys(sort).length) {
+ reqParams.orderKey = Object.keys(sort)[0];
+ let sort_select = sort[reqParams.orderKey];
+ reqParams.desc = sort_select === 'descend';
+ }
+ // TODO 联调查询设备状态接口
+ // let resps = await postDeviceGroupGetDeviceGroupList({ ...reqParams });
+ let resp = {
+ success: true,
+ data: {
+ list: dataTestList,
+ total: 8,
+ page: 1,
+ pageSize: 8,
+ },
+ };
+ return {
+ data: resp.data.list,
+ success: resp.success,
+ total: resp.data.total,
+ current: resp.data.page,
+ pageSize: resp.data.pageSize,
+ };
+ }}
+ />
+
+
+
+ );
+};
+
+export default ServerStatus;
diff --git a/src/pages/System/ParameterSetting/components/UpdateParameterForm.tsx b/src/pages/System/ParameterSetting/components/UpdateParameterForm.tsx
new file mode 100644
index 0000000..32ed20c
--- /dev/null
+++ b/src/pages/System/ParameterSetting/components/UpdateParameterForm.tsx
@@ -0,0 +1,92 @@
+import { putProjectUpdateProject } from '@/services/project/Project';
+import {
+ ModalForm,
+ ProForm,
+ ProFormText,
+} from '@ant-design/pro-components';
+import { FormattedMessage, useIntl } from '@umijs/max';
+import { Form, message } from 'antd';
+import { proFormSmallItemStyleProps, proFormSmallModelWidth } from '../../../../../config/defaultForm';
+import React from 'react';
+export type FormValueType = {
+ target?: string;
+ template?: string;
+ type?: string;
+ time?: string;
+ frequency?: string;
+} & Partial;
+
+export type UpdateFormProps = {
+ updateModalOpen: boolean;
+ handleModal: () => void;
+ values: Partial;
+ reload: any;
+};
+
+
+
+const UpdateParameterForm: React.FC = (props) => {
+ const intl = useIntl();
+ const [form] = Form.useForm();
+
+ return (
+
+ width={proFormSmallModelWidth}
+ title={intl.formatMessage({
+ id: 'system.parameter.table.list.editor',
+ defaultMessage: '$$$',
+ })}
+ open={props.updateModalOpen}
+ form={form}
+ autoFocusFirstInput
+ modalProps={{
+ destroyOnClose: true,
+ onCancel: () => props.handleModal(),
+ }}
+ submitTimeout={2000}
+ onFinish={async (values) => {
+ putProjectUpdateProject(values)
+ .then(() => {
+ message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '$$$' }));
+ props.reload();
+ })
+ .catch(() => {
+ message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' }));
+ });
+
+ props.handleModal();
+ return true;
+ }}
+ >
+
+ }
+ placeholder={`${intl.formatMessage({
+ id: 'common.please_input',
+ defaultMessage: '$$$',
+ })}${intl.formatMessage({
+ id: 'system.parameter.table.list.label',
+ defaultMessage: '$$$',
+ })}`}
+ required={false}
+ initialValue={props.values.name}
+ disabled={false}
+ rules={[
+ {
+ required: true,
+ message: (
+
+ ),
+ },
+ ]}
+ />
+
+
+ );
+};
+export default UpdateParameterForm;
diff --git a/src/pages/System/ParameterSetting/index.tsx b/src/pages/System/ParameterSetting/index.tsx
new file mode 100644
index 0000000..1ae865f
--- /dev/null
+++ b/src/pages/System/ParameterSetting/index.tsx
@@ -0,0 +1,244 @@
+import { PageContainer, ProCard, ProForm } from '@ant-design/pro-components';
+import React, { useEffect, useRef, useState } from 'react';
+
+import { EditOutlined } from '@ant-design/icons';
+import { Button, Input, message, } from 'antd';
+import type { ActionType } from '@ant-design/pro-components';
+import styles from "./parameterSetting.less";
+import UpdateParameterForm from './components/UpdateParameterForm';
+import { FormattedMessage, useIntl } from '@umijs/max';
+
+
+
+
+/**
+ * @参数设置
+ * @returns
+ */
+const ParameterSetting: React.FC = () => {
+ const intl = useIntl();
+ const actionRef = useRef();
+ const [updateParameterModalOpen, setUpdateParameterModalOpen] = useState(false);
+ const [currentRow, setCurrentRow] = useState();
+
+ const handleUpdateParameterModal = () => {
+ if (updateParameterModalOpen) {
+ setUpdateParameterModalOpen(false);
+ setCurrentRow(undefined);
+ } else {
+ setUpdateParameterModalOpen(true);
+ }
+ };
+
+ const [stateValue, setStateValue] = useState({});
+
+ return (
+
+
+
+
+ }
+ style={{
+ width: '50%'
+ }}>
+
+ }
+ onClick={() => {
+ setUpdateParameterModalOpen(true);
+ }}
+ />
+
+ }
+ style={{
+ width: '50%'
+ }}>
+
+ }
+ onClick={() => {
+ setUpdateParameterModalOpen(true);
+ }}
+ />
+
+ }
+ style={{
+ width: '50%'
+ }}>
+
+ }
+ onClick={() => {
+ setUpdateParameterModalOpen(true);
+ }}
+ />
+
+ }
+ style={{
+ width: '50%'
+ }}>
+
+ }
+ onClick={() => {
+ setUpdateParameterModalOpen(true);
+ }}
+ />
+
+ }
+ style={{
+ width: '50%'
+ }}>
+
+ }
+ onClick={() => {
+ setUpdateParameterModalOpen(true);
+ }}
+ />
+
+ }
+ style={{
+ width: '50%'
+ }}>
+
+ }
+ onClick={() => {
+ setUpdateParameterModalOpen(true);
+ }}
+ />
+
+ }
+ style={{
+ width: '50%'
+ }}>
+
+ }
+ onClick={() => {
+ setUpdateParameterModalOpen(true);
+ }}
+ />
+
+ }
+ style={{
+ width: '50%'
+ }}>
+
+ }
+ onClick={() => {
+ setUpdateParameterModalOpen(true);
+ }}
+ />
+
+
+
+
+
+ );
+};
+
+export default ParameterSetting;
diff --git a/src/pages/System/ParameterSetting/parameterSetting.less b/src/pages/System/ParameterSetting/parameterSetting.less
new file mode 100644
index 0000000..31bddb4
--- /dev/null
+++ b/src/pages/System/ParameterSetting/parameterSetting.less
@@ -0,0 +1,29 @@
+.infoBox {
+ margin-left: 78px;
+ padding-top: 5px;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: flex-start;
+ height: 90px;
+ color: #333;
+}
+.infoBoxRight {
+ margin-left: 65px;
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-start;
+ align-items: flex-start;
+ height: 90px;
+ color: #333;
+}
+.spanStyle {
+ display: inline-block;
+ width: 68px;
+ color: #666;
+}
+.inputWidth {
+ .ant-form-item-control-input {
+ width: 90%;
+ }
+}
\ No newline at end of file
diff --git a/src/pages/Task/TaskList/index.tsx b/src/pages/Task/TaskList/index.tsx
index 2ca8b21..4acf958 100644
--- a/src/pages/Task/TaskList/index.tsx
+++ b/src/pages/Task/TaskList/index.tsx
@@ -1,6 +1,6 @@
import IsBatchDelete from '@/components/BatchOperation/isBatchDelete';
import TableActionCard from '@/components/TableActionCard';
-import IsDelete from '@/components/TableActionCard/isDelete';
+import StopBtn from '@/components/TableActionCard/stopBtn';
import {
deleteProjectDeleteProject,
deleteProjectDeleteProjectByIds,
@@ -130,11 +130,11 @@ const TaskList: React.FC = () => {
{
key: 'destroy',
renderDom: (
- {
handleDestroy(record).then(() => {});
}}
- >
+ >
),
},
]}