diff --git a/config/oneapi.json b/config/oneapi.json index eeecb0e..fcb73e5 100644 --- a/config/oneapi.json +++ b/config/oneapi.json @@ -495,7 +495,7 @@ "username": { "type": "string" }, - "password": { + "psw": { "type": "string" }, "autoLogin": { diff --git a/config/routes.ts b/config/routes.ts index b6d05ae..dc5c569 100644 --- a/config/routes.ts +++ b/config/routes.ts @@ -2,7 +2,7 @@ * @Author: donghao donghao@supervision.ltd * @Date: 2024-03-27 14:56:27 * @LastEditors: donghao donghao@supervision.ltd - * @LastEditTime: 2024-04-19 14:51:38 + * @LastEditTime: 2024-04-22 16:50:40 * @FilePath: \general-ai-manage\config\routes.ts * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE */ @@ -38,6 +38,7 @@ export const homeRoute = [ * @param subModelRoute 二级菜单 * @param level 菜单级数 * @param isHideMenu 是否隐藏菜单 + * @param icon 字体图标 */ const modelRouteIndex = { @@ -88,6 +89,37 @@ export const outerMenuRoute = { routes: [...homeRoute, ...modelRoute], }; +/** + * @外部菜单 + */ +export const innerMenuRoutes = [ + { + name: 'business-info-index', + path: '/business/index', + component: './Project/BusinessInfo', + access: 'canReadMenu', + key: '1001', + // icon: 'TestIcon', + menuIcon: 'TestIcon', + }, + { + name: 'business-node-setting', + path: '/business/nodeSetting', + component: './Business/NodeSetting', + access: 'canReadMenu', + key: '1002', + menuIcon: '', + }, + { + name: 'business-model-index', + path: '/business/businessModel', + component: './Business/BusinessModel', + access: 'canReadMenu', + key: '1003', + menuIcon: '', + }, +]; + // 全路由模块 export default [ outerMenuRoute, @@ -102,50 +134,7 @@ export default [ }, ], }, - { - path: '/testPage', - name: 'testPage', - access: 'canReadMenu', - routes: [ - { - name: 'testPage-business-project', - path: '/testPage/business-project', - component: './Project/BusinessProject', - access: 'canReadMenu', - }, - ], - }, - { - name: 'businessInfo', - path: '/businessInfo', - access: 'canReadMenu', - routes: [ - { - name: 'business-info-index', - path: '/businessInfo/index', - component: './Project/BusinessInfo', - access: 'canReadMenu', - }, - // { - // name: 'realTime-alarm-list', - // path: '/realTime/alarm-list', - // component: './RealTime/AlarmList', - // access: 'canReadMenu', - // }, - // { - // name: 'realTime-alarm-rules', - // path: '/realTime/alarm-rules', - // component: './RealTime/AlarmRules', - // access: 'canReadMenu', - // }, - // { - // name: 'realTime-device-list', - // path: '/realTime/device-list', - // component: './RealTime/DeviceList', - // access: 'canReadMenu', - // }, - ], - }, + ...innerMenuRoutes, { path: '/', redirect: '/home/business-project', diff --git a/mock/pools/menuData.ts b/mock/pools/menuData.ts index d37947d..58109b5 100644 --- a/mock/pools/menuData.ts +++ b/mock/pools/menuData.ts @@ -2,7 +2,7 @@ * @Author: donghao donghao@supervision.ltd * @Date: 2024-01-24 16:05:16 * @LastEditors: donghao donghao@supervision.ltd - * @LastEditTime: 2024-04-19 10:19:59 + * @LastEditTime: 2024-04-22 11:03:15 * @FilePath: \general-ai-platform-web\mock\pools\menuData.ts * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE */ @@ -10,63 +10,15 @@ export const mockGetMenuData = { data: { routes: [ - // { - // path: '/welcome', - // key: '0', - // name: 'welcome', - // icon: 'HomeOutlined', - // access: '', - // component: 'Welcome', - // label: '首页', - // title: '首页', - // }, { - path: '/realTime', - key: '1', - name: 'realTime', - icon: 'WarningOutlined', - component: '', - title: '实时分析', + component: 'RealTime/InvolvedList', + icon: '', + key: '101', + name: 'realTime-involved-list', + path: '/realTime/involved-list', + routes: [], + title: '告警汇总', access: 'canReadMenu', - routes: [ - { - component: 'RealTime/InvolvedList', - icon: '', - key: '101', - name: 'realTime-involved-list', - path: '/realTime/involved-list', - routes: [], - title: '告警汇总', - access: 'canReadMenu', - }, - { - component: 'RealTime/AlarmList', - icon: '', - key: '102', - name: 'realTime-alarm-list', - path: '/realTime/alarm-list', - routes: [], - title: '告警列表', - }, - { - component: 'RealTime/AlarmRules', - icon: '', - key: '103', - name: 'realTime-alarm-rules', - path: '/realTime/alarm-rules', - routes: [], - title: '告警规则', - }, - { - component: 'RealTime/DeviceList', - icon: '', - key: '104', - name: 'realTime-device-list', - path: '/realTime/device-list', - routes: [], - title: '设备管理', - }, - ], }, ], }, diff --git a/mock/user.ts b/mock/user.ts index 45b72e4..6a74b73 100644 --- a/mock/user.ts +++ b/mock/user.ts @@ -31,9 +31,9 @@ const getAccess = () => { export default { // 登录 'POST /api/v1/login': async (req: Request, res: Response) => { - const { password, username, type } = req.body; + const { psw, username, type } = req.body; await waitTime(1000); - if (password === 'Sju2984?' && username === 'admin') { + if (psw === 'Sju2984?' && username === 'admin') { const adminData: successMockApiProps = { ...fetchMockSuccessFullByOther(mockBaseLoginData), }; @@ -42,7 +42,7 @@ export default { return; } // TODO 以下未做任何处理 - // if (password === 'ant.design' && username === 'user') { + // if (psw === 'ant.design' && username === 'user') { // res.send({ // status: 'ok', // type, diff --git a/public/icons/testIcon.svg b/public/icons/testIcon.svg new file mode 100644 index 0000000..8f6a95e --- /dev/null +++ b/public/icons/testIcon.svg @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/src/app.css b/src/app.css index b6d5478..39e7b98 100644 --- a/src/app.css +++ b/src/app.css @@ -1,8 +1,8 @@ .app_page_wrap { height: calc(100vh); - padding: 16px 0 16px 14px; + padding: 0; /* TODO 替换整体页面背景图 */ - background-color: #ebeff3; + background: #F8FAFD; } .app_page_wrap .ant-pro-layout .ant-pro-layout-content { position: relative; @@ -14,21 +14,25 @@ padding-inline: 0 !important; } .app_page_wrap .page_body { - width: calc(100vw - 160px); + width: calc(100vw - 200px); } .app_page_wrap .page_body .body_nav_bar { - position: absolute; - top: 28px; - right: 40px; - z-index: 999; + position: fixed; + top: 0; + right: 0; + width: calc(100vw - 200px); min-width: 100px; height: 50px; + padding: 0 24px 0 20px; } .app_page_wrap .page_body .body_nav_bar .avatar_box > img { width: 40px; height: 40px; border-radius: 50%; } +.app_page_wrap .page_body .body_content { + padding-top: 50px; +} .ant-pro-layout .ant-pro-layout-content { position: relative; display: flex; diff --git a/src/app.less b/src/app.less index af209da..b69a49c 100644 --- a/src/app.less +++ b/src/app.less @@ -1,9 +1,9 @@ // @primary-color: red; // 定义主题色 .app_page_wrap { height: calc(100vh); - padding: 16px 0 16px 14px; + padding: 0; /* TODO 替换整体页面背景图 */ - background-color: rgb(235, 239, 243); + background: #f8fafd; .ant-pro-layout .ant-pro-layout-content { position: relative; display: flex; @@ -14,15 +14,17 @@ padding-inline: 0 !important; } .page_body { - width: calc(100vw - 160px); + width: calc(100vw - 200px); .body_nav_bar { - position: absolute; - top: 28px; - right: 40px; - z-index: 999; - // background-color: red; + position: fixed; + top: 0; + right: 0; + width: calc(100vw - 200px); min-width: 100px; height: 50px; + // z-index: 999; + padding: 0 24px 0 20px; + // background-color: red; .avatar_box { & > img { width: 40px; @@ -31,6 +33,9 @@ } } } + .body_content { + padding-top: 50px; + } } } diff --git a/src/app.tsx b/src/app.tsx index e3ca308..9f75dbd 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -1,5 +1,4 @@ import { AvatarDropdown, AvatarName, MenuBar } from '@/components'; -import { postMenuGetMenu } from '@/services/system/Menu'; import { getUserGetUserInfo } from '@/services/system/User'; import fixMenuItemIcon from '@/utils/FixMenuItemIcon'; import { getAllRouteNameTile, replaceMenuWithRoutesData } from '@/utils/common'; @@ -7,9 +6,12 @@ import { addLocale } from '@@/plugin-locale'; import type { Settings as LayoutSettings } from '@ant-design/pro-components'; import { SettingDrawer } from '@ant-design/pro-components'; import { MenuDataItem } from '@ant-design/pro-layout'; -import { RunTimeLayoutConfig, getLocale, history } from '@umijs/max'; +import { RunTimeLayoutConfig, getLocale, history, useIntl } from '@umijs/max'; +import { innerMenuRoutes } from '../config/routes'; import zhCN from '@/locales/zh-CN'; +// import 'https://at.alicdn.com/t/c/font_4412653_qjjikxo6f6p.css'; // 阿里字体图标 +import { useState } from 'react'; import cookie from 'react-cookies'; import { RequestConfig } from 'umi'; import defaultSettings from '../config/defaultSettings'; @@ -44,10 +46,10 @@ export async function getInitialState(): Promise<{ const { location } = history; if (location.pathname !== loginPath && localStorage.getItem('access')) { // const currentUser = await fetchUserInfo(); - const menus = await postMenuGetMenu(); - // console.log('app_menus', replaceMenuWithRoutesData(menus.data.routes)); + const menusData = innerMenuRoutes; + // console.log('app_menus', replaceMenuWithRoutesData(menusData)); if (getLocale() === 'zh-CN') { - let localData = getAllRouteNameTile(menus.data.routes, ''); + let localData = getAllRouteNameTile(menusData, ''); let localRes: any = {}; localData.forEach((v) => { // console.log(v.title,'localData_v') @@ -65,9 +67,9 @@ export async function getInitialState(): Promise<{ currentUser: await fetchUserInfo(), settings: { ...(defaultSettings as Partial), - // menuData: replaceMenuWithRoutesData(menus.data.routes), + // menuData: replaceMenuWithRoutesData(menusData), }, - menuData: replaceMenuWithRoutesData(menus.data.routes), + menuData: replaceMenuWithRoutesData(menusData), }; } @@ -79,6 +81,11 @@ export async function getInitialState(): Promise<{ // ProLayout 支持的api https://procomponents.ant.design/components/layout export const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) => { + // eslint-disable-next-line react-hooks/rules-of-hooks + const intl = useIntl(); + // eslint-disable-next-line react-hooks/rules-of-hooks + const [currMenu, setCurrMenu] = useState({}); + // useEffect(() => { // console.log('initialState', initialState); // }, []); @@ -138,10 +145,15 @@ export const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) = // if (initialState?.loading) return ; return (
- + setCurrMenu(record)} + >
- {/*
首页1 {initialState?.currentUser?.userName}
*/} + + {intl.formatMessage({ id: `menu-${currMenu?.name}`, defaultMessage: '首页' })} +
{initialState?.currentUser?.userName ? ( diff --git a/src/components/MenuBar/index.css b/src/components/MenuBar/index.css index 3f0b4d0..056db4c 100644 --- a/src/components/MenuBar/index.css +++ b/src/components/MenuBar/index.css @@ -1,29 +1,47 @@ .menubar_wrap { display: flex; - width: 160px; - padding: 24px 0; - background-color: #004fb2; - border-radius: 12px; - box-shadow: 4px 0px 24px 0px rgba(0, 63, 143, 0.3); -} -.menubar_wrap .ant-menu-dark, -.menubar_wrap .ant-menu-dark > .ant-menu, -.menubar_wrap .ant-menu-dark.ant-menu-inline .ant-menu-sub.ant-menu-inline, -.menubar_wrap .ant-menu-dark > .ant-menu.ant-menu-inline .ant-menu-sub.ant-menu-inline { - background-color: #004fb2; -} -.menubar_wrap .ant-menu-dark .ant-menu-item-selected, -.menubar_wrap .ant-menu-dark > .ant-menu .ant-menu-item-selected { - color: #004fb2; - background: rgba(255, 255, 255, 0.9); - border-radius: 4px; + width: 200px; + padding: 0; + background-color: #fff; + border-radius: 0px 0px 32px 0px; +} +.menubar_wrap .ant-menu, +.menubar_wrap .ant-menu > .ant-menu, +.menubar_wrap .ant-menu.ant-menu-inline .ant-menu-sub.ant-menu-inline, +.menubar_wrap .ant-menu > .ant-menu.ant-menu-inline .ant-menu-sub.ant-menu-inline { + font-size: 14px; + background-color: #fff; +} +.menubar_wrap .ant-menu .ant-menu-item-selected, +.menubar_wrap .ant-menu > .ant-menu .ant-menu-item-selected { + color: #fff; + background: #154ddd; + border-radius: 0px 8px 8px 0px; } .menubar_wrap .menu_top { - width: 120px; + width: 100%; + height: 72px; + color: #154ddd; + font-weight: bold; + border-radius: 0px 0px 64px 0px; + box-shadow: 0px 1px 0px 0px rgba(21, 77, 221, 0.15); +} +.menubar_wrap .ant-menu, +.menubar_wrap .ant-menu-item { + margin: 0; + padding: 0; + width: 100%; +} +.menubar_wrap .ant-menu-item-icon { + width: 20px; + height: 20px; + font-size: 14px; } .menubar_wrap .menu_center { display: flex; flex: 1; + width: 100%; + padding-top: 10px; } .menubar_wrap .menu_bottom { width: 96px; diff --git a/src/components/MenuBar/index.less b/src/components/MenuBar/index.less index e749f54..c5a6004 100644 --- a/src/components/MenuBar/index.less +++ b/src/components/MenuBar/index.less @@ -1,30 +1,53 @@ -@menubar_ThemeColor: #004fb2; +@menubar_ThemeColor: #fff; +@themeColor: #154ddd; .menubar_wrap { display: flex; // flex: 1; - width: 160px; - padding: 24px 0; + width: 200px; + padding: 0; background-color: @menubar_ThemeColor; - border-radius: 12px; - box-shadow: 4px 0px 24px 0px rgba(0, 63, 143, 0.3); - .ant-menu-dark, - .ant-menu-dark > .ant-menu, - .ant-menu-dark.ant-menu-inline .ant-menu-sub.ant-menu-inline, - .ant-menu-dark > .ant-menu.ant-menu-inline .ant-menu-sub.ant-menu-inline { + border-radius: 0px 0px 32px 0px; + // border-radius: 12px; + // box-shadow: 4px 0px 24px 0px rgba(0, 63, 143, 0.3); + .ant-menu, + .ant-menu > .ant-menu, + .ant-menu.ant-menu-inline .ant-menu-sub.ant-menu-inline, + .ant-menu > .ant-menu.ant-menu-inline .ant-menu-sub.ant-menu-inline { + font-size: 14px; background-color: @menubar_ThemeColor; } - .ant-menu-dark .ant-menu-item-selected, - .ant-menu-dark > .ant-menu .ant-menu-item-selected { + .ant-menu .ant-menu-item-selected, + .ant-menu > .ant-menu .ant-menu-item-selected { color: @menubar_ThemeColor; - background: rgba(255, 255, 255, 0.9); - border-radius: 4px; + background: @themeColor; + border-radius: 0px 8px 8px 0px; } .menu_top { - width: 120px; + width: 100%; + height: 72px; + color: @themeColor; + font-weight: bold; + border-radius: 0px 0px 64px 0px; + box-shadow: 0px 1px 0px 0px rgba(21, 77, 221, 0.15); + } + + .ant-menu, + .ant-menu-item { + width: 100%; + margin: 0; + padding: 0; + } + + .ant-menu-item-icon { + width: 20px; + height: 20px; + font-size: 14px; } .menu_center { display: flex; flex: 1; + width: 100%; + padding-top: 10px; } .menu_bottom { width: 96px; diff --git a/src/components/MenuBar/index.tsx b/src/components/MenuBar/index.tsx index 7eca958..258616c 100644 --- a/src/components/MenuBar/index.tsx +++ b/src/components/MenuBar/index.tsx @@ -2,77 +2,130 @@ * @Author: donghao donghao@supervision.ltd * @Date: 2024-03-27 16:03:20 * @LastEditors: donghao donghao@supervision.ltd - * @LastEditTime: 2024-04-07 17:46:07 + * @LastEditTime: 2024-04-22 17:10:55 * @FilePath: \general-ai-manage\src\components\Header\index.tsx - * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + * @Description: 内层layout菜单配置 */ -import { history } from '@umijs/max'; +import { useBusinessInfo } from '@/hooks/useBusinessInfo'; +import { history, useIntl } from '@umijs/max'; + import type { MenuProps } from 'antd'; import { Menu } from 'antd'; -import React, { useEffect } from 'react'; -import menuFooter from '/public/menuFooter.svg'; -import menuLogo from '/public/menuLogo.svg'; +import React, { useEffect, useState } from 'react'; +import { ReactComponent as BusinessLogoIcon } from '/public/home/business_logo.svg'; +// import menuFooter from '/public/menuFooter.svg'; import './index.less'; export type MenuBarProps = { menuData: any[]; + changeMenu: (arg1: MenuProps) => void; }; -const MenuBar: React.FC = ({ menuData }) => { - // const tabRouter = (record) => { - // console.log('tabRouter_record', record); - // const currRouteItem = - // record.routes && Array.isArray(record.routes) && record.routes.length - // ? record.routes[0] - // : record; - // history.push(currRouteItem.path); - // }; +const MenuBar: React.FC = ({ menuData, changeMenu }) => { + const intl = useIntl(); + const { getStoreBusinessInfo } = useBusinessInfo(); + + const [selectedMenu, setSelectedMenu] = useState([]); + + const [stateOpenKeys, setStateOpenKeys] = useState(['1', '2']); + + // 根据路径查找对应的菜单项 + const findMenuByPath = (menuData: any, pathname: any) => { + for (const item of menuData) { + if (item.path === pathname) { + return item; + } + // 多级菜单使用递归调用 + // if (item.children) { + // const matchedChild: any = findMenuByPath(item.children, pathname); + // if (matchedChild) { + // return matchedChild; + // } + // } + } + return null; + }; - // const menuClick = ({ item, key, keyPath, domEvent }) => { - // console.log("menuClick", item, key, keyPath, domEvent); - // }; - const menuClick: MenuProps['onClick'] = (e) => { - console.log('menuClick ', e.item.props.path); - const currRouteItem = e.item.props; - history.push(currRouteItem.path); + const menuClick: MenuProps['onClick'] = (menuItem) => { + console.log('menuClick_menuItem:', menuItem); + // Check if menuItem has route defined + if (menuItem && menuItem.path) { + history.push(menuItem.path); + } }; + const onOpenChange: MenuProps['onOpenChange'] = (openKeys) => { + console.log(openKeys, 'openKeys'); + const currentOpenKey = openKeys.find((key) => stateOpenKeys.indexOf(key) === -1); + console.log(currentOpenKey, 'currentOpenKey'); + // open + if (currentOpenKey !== undefined) { + const repeatIndex = openKeys + .filter((key) => key !== currentOpenKey) + .findIndex((key) => levelKeys[key] === levelKeys[currentOpenKey]); + + setStateOpenKeys( + openKeys + // remove repeat key + .filter((_, index) => index !== repeatIndex) + // remove current level all child + .filter((key) => levelKeys[key] <= levelKeys[currentOpenKey]), + ); + localStorage.setItem( + 'openKeys', + JSON.stringify( + openKeys + // remove repeat key + .filter((_, index) => index !== repeatIndex) + // remove current level all child + .filter((key) => levelKeys[key] <= levelKeys[currentOpenKey]), + ), + ); + } else { + // close + setStateOpenKeys(openKeys); + localStorage.setItem('openKeys', JSON.stringify(openKeys)); + } + }; + + // 当路由变化时更新当前选中菜单项 useEffect(() => { - console.log(history, 'menu_history', menuData); - }, []); + const pathname = history.location.pathname; + const matchedMenu = findMenuByPath(menuData, pathname); + console.log('matchedMenu', matchedMenu); + if (matchedMenu) { + setSelectedMenu([matchedMenu.key]); + changeMenu(matchedMenu); + } + }, [menuData, history.location.pathname]); return (
-
- +
+ + {getStoreBusinessInfo()?.name}
- {/*
    - {menuData && - menuData.length && - menuData.map((item, index) => { - return ( -
  • tabRouter(item)}> - {item.title} -
  • - ); - })} -
*/} {/* // TODO 菜单需要补充路由聚焦状态 */}
+ selectedKeys={selectedMenu} + openKeys={stateOpenKeys} + onOpenChange={onOpenChange} + > + {menuData.map((menuItem) => ( + menuClick(menuItem)}> + {intl.formatMessage({ id: `menu-${menuItem.name}`, defaultMessage: '菜单' })} + + ))} +
-
+ {/*
-
+
*/}
); }; diff --git a/src/locales/bn-BD/pages.ts b/src/locales/bn-BD/pages.ts index 07e0cf1..f8bda83 100644 --- a/src/locales/bn-BD/pages.ts +++ b/src/locales/bn-BD/pages.ts @@ -7,8 +7,8 @@ export default { 'pages.login.success': 'সফল লগইন!', 'pages.login.username.placeholder': 'ব্যবহারকারীর নাম: admin or user', 'pages.login.username.required': 'আপনার ব্যবহারকারীর নাম ইনপুট করুন!', - 'pages.login.password.placeholder': 'পাসওয়ার্ড: ant.design', - 'pages.login.password.required': 'আপনার পাসওয়ার্ড ইনপুট করুন!', + 'pages.login.psw.placeholder': 'পাসওয়ার্ড: ant.design', + 'pages.login.psw.required': 'আপনার পাসওয়ার্ড ইনপুট করুন!', 'pages.login.phoneLogin.tab': 'ফোন লগইন', 'pages.login.phoneLogin.errorMessage': 'যাচাইকরণ কোড ত্রুটি', 'pages.login.phoneNumber.placeholder': 'ফোন নম্বর', diff --git a/src/locales/bn-BD/settings.ts b/src/locales/bn-BD/settings.ts index 93cf904..3cc226f 100644 --- a/src/locales/bn-BD/settings.ts +++ b/src/locales/bn-BD/settings.ts @@ -24,8 +24,8 @@ export default { 'app.settings.security.strong': 'শক্তিশালী', 'app.settings.security.medium': 'মধ্যম', 'app.settings.security.weak': 'দুর্বল', - 'app.settings.security.password': 'অ্যাকাউন্টের পাসওয়ার্ড', - 'app.settings.security.password-description': 'বর্তমান পাসওয়ার্ড শক্তি', + 'app.settings.security.psw': 'অ্যাকাউন্টের পাসওয়ার্ড', + 'app.settings.security.psw-description': 'বর্তমান পাসওয়ার্ড শক্তি', 'app.settings.security.phone': 'সুরক্ষা ফোন', 'app.settings.security.phone-description': 'আবদ্ধ ফোন', 'app.settings.security.question': 'নিরাপত্তা প্রশ্ন', @@ -46,8 +46,8 @@ export default { 'app.settings.binding.dingding': 'বাঁধাই ডিঙ্গটালক', 'app.settings.binding.dingding-description': 'বর্তমানে আনবাউন্ড ডিঙ্গটাল অ্যাকাউন্ট', 'app.settings.binding.bind': 'বাঁধাই', - 'app.settings.notification.password': 'অ্যাকাউন্টের পাসওয়ার্ড', - 'app.settings.notification.password-description': + 'app.settings.notification.psw': 'অ্যাকাউন্টের পাসওয়ার্ড', + 'app.settings.notification.psw-description': 'অন্যান্য ব্যবহারকারীর বার্তাগুলি স্টেশন চিঠি আকারে জানানো হবে', 'app.settings.notification.messages': 'সিস্টেম বার্তা', 'app.settings.notification.messages-description': diff --git a/src/locales/en-US/pages.ts b/src/locales/en-US/pages.ts index 3334c03..7f96e04 100644 --- a/src/locales/en-US/pages.ts +++ b/src/locales/en-US/pages.ts @@ -2,13 +2,13 @@ export default { 'pages.layouts.userLayout.title': 'Ant Design is the most influential web design specification in Xihu district', 'pages.login.accountLogin.tab': 'Account Login', - 'pages.login.accountLogin.errorMessage': 'Incorrect username/password(admin/ant.design)', + 'pages.login.accountLogin.errorMessage': 'Incorrect username/psw(admin/ant.design)', 'pages.login.failure': 'Login failed, please try again!', 'pages.login.success': 'Login successful!', 'pages.login.username.placeholder': 'Username: admin or user', 'pages.login.username.required': 'Please input your username!', - 'pages.login.password.placeholder': 'Password: ant.design', - 'pages.login.password.required': 'Please input your password!', + 'pages.login.psw.placeholder': 'Password: ant.design', + 'pages.login.psw.required': 'Please input your psw!', 'pages.login.phoneLogin.tab': 'Phone Login', 'pages.login.phoneLogin.errorMessage': 'Verification Code Error', 'pages.login.phoneNumber.placeholder': 'Phone Number', diff --git a/src/locales/en-US/settings.ts b/src/locales/en-US/settings.ts index 822dd00..25979ab 100644 --- a/src/locales/en-US/settings.ts +++ b/src/locales/en-US/settings.ts @@ -24,8 +24,8 @@ export default { 'app.settings.security.strong': 'Strong', 'app.settings.security.medium': 'Medium', 'app.settings.security.weak': 'Weak', - 'app.settings.security.password': 'Account Password', - 'app.settings.security.password-description': 'Current password strength', + 'app.settings.security.psw': 'Account Password', + 'app.settings.security.psw-description': 'Current psw strength', 'app.settings.security.phone': 'Security Phone', 'app.settings.security.phone-description': 'Bound phone', 'app.settings.security.question': 'Security Question', @@ -46,8 +46,8 @@ export default { 'app.settings.binding.dingding': 'Binding DingTalk', 'app.settings.binding.dingding-description': 'Currently unbound DingTalk account', 'app.settings.binding.bind': 'Bind', - 'app.settings.notification.password': 'Account Password', - 'app.settings.notification.password-description': + 'app.settings.notification.psw': 'Account Password', + 'app.settings.notification.psw-description': 'Messages from other users will be notified in the form of a station letter', 'app.settings.notification.messages': 'System Messages', 'app.settings.notification.messages-description': diff --git a/src/locales/fa-IR/pages.ts b/src/locales/fa-IR/pages.ts index e49f6d5..1aa29d4 100644 --- a/src/locales/fa-IR/pages.ts +++ b/src/locales/fa-IR/pages.ts @@ -6,8 +6,8 @@ export default { 'pages.login.success': 'ورود موفق!', 'pages.login.username.placeholder': 'نام کاربری: مدیر یا کاربر', 'pages.login.username.required': 'لطفا نام کاربری خود را وارد کنید!', - 'pages.login.password.placeholder': 'رمز عبور: ant.design', - 'pages.login.password.required': 'لطفاً رمز ورود خود را وارد کنید!', + 'pages.login.psw.placeholder': 'رمز عبور: ant.design', + 'pages.login.psw.required': 'لطفاً رمز ورود خود را وارد کنید!', 'pages.login.phoneLogin.tab': 'ورود به سیستم تلفن', 'pages.login.phoneLogin.errorMessage': 'خطای کد تأیید', 'pages.login.phoneNumber.placeholder': 'شماره تلفن', diff --git a/src/locales/fa-IR/settings.ts b/src/locales/fa-IR/settings.ts index 040bc31..9071132 100644 --- a/src/locales/fa-IR/settings.ts +++ b/src/locales/fa-IR/settings.ts @@ -24,8 +24,8 @@ export default { 'app.settings.security.strong': 'قوی', 'app.settings.security.medium': 'متوسط', 'app.settings.security.weak': 'ضعیف', - 'app.settings.security.password': 'رمز عبور حساب کاربری', - 'app.settings.security.password-description': 'قدرت رمز عبور فعلی', + 'app.settings.security.psw': 'رمز عبور حساب کاربری', + 'app.settings.security.psw-description': 'قدرت رمز عبور فعلی', 'app.settings.security.phone': 'تلفن امنیتی', 'app.settings.security.phone-description': 'تلفن مقید', 'app.settings.security.question': 'سوال امنیتی', @@ -46,8 +46,8 @@ export default { 'app.settings.binding.dingding': 'اتصال DingTalk', 'app.settings.binding.dingding-description': 'حساب DingTalk در حال حاضر محدود نشده است', 'app.settings.binding.bind': 'بستن', - 'app.settings.notification.password': 'رمز عبور حساب کاربری', - 'app.settings.notification.password-description': + 'app.settings.notification.psw': 'رمز عبور حساب کاربری', + 'app.settings.notification.psw-description': 'پیام های سایر کاربران در قالب یک نامه ایستگاهی اعلام خواهد شد', 'app.settings.notification.messages': 'پیام های سیستم', 'app.settings.notification.messages-description': diff --git a/src/locales/id-ID/pages.ts b/src/locales/id-ID/pages.ts index de28ef3..a1a8b4b 100644 --- a/src/locales/id-ID/pages.ts +++ b/src/locales/id-ID/pages.ts @@ -7,8 +7,8 @@ export default { 'pages.login.success': 'Login berhasil!', 'pages.login.username.placeholder': 'nama pengguna: admin atau user', 'pages.login.username.required': 'Nama pengguna harus diisi!', - 'pages.login.password.placeholder': 'kata sandi: ant.design', - 'pages.login.password.required': 'Kata sandi harus diisi!', + 'pages.login.psw.placeholder': 'kata sandi: ant.design', + 'pages.login.psw.required': 'Kata sandi harus diisi!', 'pages.login.phoneLogin.tab': 'Login dengan ponsel', 'pages.login.phoneLogin.errorMessage': 'Kesalahan kode verifikasi', 'pages.login.phoneNumber.placeholder': 'masukkan nomor telepon', diff --git a/src/locales/id-ID/settings.ts b/src/locales/id-ID/settings.ts index 04b7d12..3f452bf 100644 --- a/src/locales/id-ID/settings.ts +++ b/src/locales/id-ID/settings.ts @@ -24,8 +24,8 @@ export default { 'app.settings.security.strong': 'Kuat', 'app.settings.security.medium': 'Sedang', 'app.settings.security.weak': 'Lemah', - 'app.settings.security.password': 'Kata Sandi Akun', - 'app.settings.security.password-description': 'Kekuatan Kata Sandi saat ini', + 'app.settings.security.psw': 'Kata Sandi Akun', + 'app.settings.security.psw-description': 'Kekuatan Kata Sandi saat ini', 'app.settings.security.phone': 'Keamanan Ponsel', 'app.settings.security.phone-description': 'Mengikat Ponsel', 'app.settings.security.question': 'Pertanyaan Keamanan', @@ -46,8 +46,8 @@ export default { 'app.settings.binding.dingding': 'Mengikat DingTalk', 'app.settings.binding.dingding-description': 'Tidak mengikat akun DingTalk', 'app.settings.binding.bind': 'Ikat', - 'app.settings.notification.password': 'Kata Sandi Akun', - 'app.settings.notification.password-description': + 'app.settings.notification.psw': 'Kata Sandi Akun', + 'app.settings.notification.psw-description': 'Pesan dari pengguna lain akan diberitahu dalam bentuk surat', 'app.settings.notification.messages': 'Pesan Sistem', 'app.settings.notification.messages-description': diff --git a/src/locales/ja-JP/pages.ts b/src/locales/ja-JP/pages.ts index 8e96ac3..dfb13cd 100644 --- a/src/locales/ja-JP/pages.ts +++ b/src/locales/ja-JP/pages.ts @@ -7,8 +7,8 @@ export default { 'pages.login.success': 'ログイン成功!', 'pages.login.username.placeholder': 'ユーザー名:adminまたはuser', 'pages.login.username.required': 'ユーザー名を入力してください!', - 'pages.login.password.placeholder': 'パスワード:ant.design', - 'pages.login.password.required': 'パスワードを入力してください!', + 'pages.login.psw.placeholder': 'パスワード:ant.design', + 'pages.login.psw.required': 'パスワードを入力してください!', 'pages.login.phoneLogin.tab': '電話ログイン', 'pages.login.phoneLogin.errorMessage': '検証コードエラー', 'pages.login.phoneNumber.placeholder': '電話番号', diff --git a/src/locales/ja-JP/settings.ts b/src/locales/ja-JP/settings.ts index de52481..4dd03e4 100644 --- a/src/locales/ja-JP/settings.ts +++ b/src/locales/ja-JP/settings.ts @@ -24,8 +24,8 @@ export default { 'app.settings.security.strong': '強い', 'app.settings.security.medium': 'ミディアム', 'app.settings.security.weak': '弱い', - 'app.settings.security.password': 'アカウントパスワード', - 'app.settings.security.password-description': '現在のパスワードの強度', + 'app.settings.security.psw': 'アカウントパスワード', + 'app.settings.security.psw-description': '現在のパスワードの強度', 'app.settings.security.phone': 'セキュリティ電話番号', 'app.settings.security.phone-description': 'バインドされた電話番号', 'app.settings.security.question': '秘密の質問', @@ -46,8 +46,8 @@ export default { 'app.settings.binding.dingding': 'ディントークをバインドする', 'app.settings.binding.dingding-description': '現在バインドされていないディントークアカウント', 'app.settings.binding.bind': 'バインド', - 'app.settings.notification.password': 'アカウントパスワード', - 'app.settings.notification.password-description': + 'app.settings.notification.psw': 'アカウントパスワード', + 'app.settings.notification.psw-description': '他のユーザーからのメッセージは、ステーションレターの形式で通知されます', 'app.settings.notification.messages': 'システムメッセージ', 'app.settings.notification.messages-description': diff --git a/src/locales/pt-BR/pages.ts b/src/locales/pt-BR/pages.ts index 6a96e9b..4e9c590 100644 --- a/src/locales/pt-BR/pages.ts +++ b/src/locales/pt-BR/pages.ts @@ -7,8 +7,8 @@ export default { 'pages.login.success': 'Login efetuado com sucesso!', 'pages.login.username.placeholder': 'Usuário: admin or user', 'pages.login.username.required': 'Por favor insira seu usuário!', - 'pages.login.password.placeholder': 'Senha: ant.design', - 'pages.login.password.required': 'Por favor insira sua senha!', + 'pages.login.psw.placeholder': 'Senha: ant.design', + 'pages.login.psw.required': 'Por favor insira sua senha!', 'pages.login.phoneLogin.tab': 'Login com Telefone', 'pages.login.phoneLogin.errorMessage': 'Erro de Código de Verificação', 'pages.login.phoneNumber.placeholder': 'Telefone', diff --git a/src/locales/pt-BR/settings.ts b/src/locales/pt-BR/settings.ts index aad2e38..a2555ba 100644 --- a/src/locales/pt-BR/settings.ts +++ b/src/locales/pt-BR/settings.ts @@ -24,8 +24,8 @@ export default { 'app.settings.security.strong': 'Forte', 'app.settings.security.medium': 'Média', 'app.settings.security.weak': 'Fraca', - 'app.settings.security.password': 'Senha da Conta', - 'app.settings.security.password-description': 'Força da senha', + 'app.settings.security.psw': 'Senha da Conta', + 'app.settings.security.psw-description': 'Força da senha', 'app.settings.security.phone': 'Telefone de Seguraça', 'app.settings.security.phone-description': 'Telefone vinculado', 'app.settings.security.question': 'Pergunta de Segurança', @@ -46,8 +46,8 @@ export default { 'app.settings.binding.dingding': 'Vincular DingTalk', 'app.settings.binding.dingding-description': 'Atualmente não vinculado à conta DingTalk', 'app.settings.binding.bind': 'Vincular', - 'app.settings.notification.password': 'Senha da Conta', - 'app.settings.notification.password-description': + 'app.settings.notification.psw': 'Senha da Conta', + 'app.settings.notification.psw-description': 'Mensagens de outros usuários serão notificadas na forma de uma estação de letra', 'app.settings.notification.messages': 'Mensagens de Sistema', 'app.settings.notification.messages-description': diff --git a/src/locales/zh-CN/device.ts b/src/locales/zh-CN/device.ts index 533a8af..2e4ceeb 100644 --- a/src/locales/zh-CN/device.ts +++ b/src/locales/zh-CN/device.ts @@ -84,7 +84,7 @@ export const interface_manage: { [key: string]: string } = { 'device.interface_manage.table.list.capture': '最近拍摄', 'device.interface_manage.table.list.port': '端口', 'device.interface_manage.table.list.loginName': '登录名', - 'device.interface_manage.table.list.password': '密码', + 'device.interface_manage.table.list.psw': '密码', 'device.interface_manage.table.list.fileDirectory': '文件目录', 'device.interface_manage.table.list.requestAddress': '请求地址', 'device.interface_manage.table.list.requestKey': '请求Key', @@ -100,7 +100,7 @@ export const interface_manage: { [key: string]: string } = { 'device.interface_manage.table.rule.required.address': '接口地址为必填项', 'device.interface_manage.table.rule.required.ip': 'IP地址为必填项', 'device.interface_manage.table.rule.required.loginName': '登录名为必填项', - 'device.interface_manage.table.rule.required.password': '密码为必填项', + 'device.interface_manage.table.rule.required.psw': '密码为必填项', 'device.interface_manage.table.rule.required.fileDirectory': '文件目录为必填项', 'device.interface_manage.table.rule.required.requestAddress': '请求地址为必填项', 'device.interface_manage.table.rule.required.requestKey': '请求Key为必填项', diff --git a/src/locales/zh-CN/menu.ts b/src/locales/zh-CN/menu.ts index 9fd4fd1..76b9096 100644 --- a/src/locales/zh-CN/menu.ts +++ b/src/locales/zh-CN/menu.ts @@ -2,7 +2,7 @@ * @Author: donghao donghao@supervision.ltd * @Date: 2024-04-01 11:20:09 * @LastEditors: donghao donghao@supervision.ltd - * @LastEditTime: 2024-04-10 15:53:11 + * @LastEditTime: 2024-04-22 15:42:18 * @FilePath: \uighur-recognition-web2\src\locales\zh-CN\menu.ts * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE */ @@ -62,6 +62,10 @@ export default { 'menu.home-business-project': '企业项目', 'menu.model-index': '模型管理', 'menu.model-runtime-lib': '模型运行库', + 'menu-business-info-index': '企业信息', + 'menu-business-node-setting': '节点设置', + 'menu-business-model-index': '业务模型', + // 待废弃 'menu.realTime': '实时分析', 'menu.realTime.realTime-involved-list': '告警汇总', diff --git a/src/locales/zh-CN/model.ts b/src/locales/zh-CN/model.ts index 74bfd6e..4b8c010 100644 --- a/src/locales/zh-CN/model.ts +++ b/src/locales/zh-CN/model.ts @@ -132,7 +132,7 @@ 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.psw': '密码', 'resource.server_status.table.list.defaultPort': '默认端口', 'resource.server_status.table.list.parameter': '服务器参数', 'resource.server_status.table.list.publicKeyString': '公钥字符串', diff --git a/src/locales/zh-CN/pages.ts b/src/locales/zh-CN/pages.ts index 607c3d3..ad3d75f 100644 --- a/src/locales/zh-CN/pages.ts +++ b/src/locales/zh-CN/pages.ts @@ -14,8 +14,8 @@ export default { 'pages.login.success': '登录成功!', 'pages.login.username.placeholder': '用户名: admin or user', 'pages.login.username.required': '用户名是必填项!', - 'pages.login.password.placeholder': '密码: ant.design', - 'pages.login.password.required': '密码是必填项!', + 'pages.login.psw.placeholder': '密码: ant.design', + 'pages.login.psw.required': '密码是必填项!', 'pages.login.phoneLogin.tab': '手机号登录', 'pages.login.phoneLogin.errorMessage': '验证码错误', 'pages.login.phoneNumber.placeholder': '请输入手机号!', diff --git a/src/locales/zh-CN/settings.ts b/src/locales/zh-CN/settings.ts index df8af43..079b3ae 100644 --- a/src/locales/zh-CN/settings.ts +++ b/src/locales/zh-CN/settings.ts @@ -24,8 +24,8 @@ export default { 'app.settings.security.strong': '强', 'app.settings.security.medium': '中', 'app.settings.security.weak': '弱', - 'app.settings.security.password': '账户密码', - 'app.settings.security.password-description': '当前密码强度', + 'app.settings.security.psw': '账户密码', + 'app.settings.security.psw-description': '当前密码强度', 'app.settings.security.phone': '密保手机', 'app.settings.security.phone-description': '已绑定手机', 'app.settings.security.question': '密保问题', @@ -44,8 +44,8 @@ export default { 'app.settings.binding.dingding': '绑定钉钉', 'app.settings.binding.dingding-description': '当前未绑定钉钉账号', 'app.settings.binding.bind': '绑定', - 'app.settings.notification.password': '账户密码', - 'app.settings.notification.password-description': '其他用户的消息将以站内信的形式通知', + 'app.settings.notification.psw': '账户密码', + 'app.settings.notification.psw-description': '其他用户的消息将以站内信的形式通知', 'app.settings.notification.messages': '系统消息', 'app.settings.notification.messages-description': '系统消息将以站内信的形式通知', 'app.settings.notification.todo': '待办任务', diff --git a/src/locales/zh-CN/system.ts b/src/locales/zh-CN/system.ts index 5e8fb61..b99646b 100644 --- a/src/locales/zh-CN/system.ts +++ b/src/locales/zh-CN/system.ts @@ -82,7 +82,7 @@ export const user: { [key: string]: string } = { 'system.user.table.list.id': 'ID', 'system.user.table.list.userName': '用户名', 'system.user.table.list.nickName': '昵称', - 'system.user.table.list.password': '密码', + 'system.user.table.list.psw': '密码', 'system.user.table.list.password_re': '再一次确认密码', 'system.user.table.list.roleId': '角色', 'system.user.table.list.roleIds': '角色', @@ -100,8 +100,8 @@ export const user: { [key: string]: string } = { 'system.user.table.list.update': '更新用户', 'system.user.table.rule.required.userName': '用户名为必填项', 'system.user.table.rule.required.nickName': '昵称为必填项', - 'system.user.table.rule.required.password': '密码为必填项', - 'system.user.table.rule.password.not_same': '两次密码不一致', + 'system.user.table.rule.required.psw': '密码为必填项', + 'system.user.table.rule.psw.not_same': '两次密码不一致', }; export const post: { [key: string]: string } = { diff --git a/src/locales/zh-TW/pages.ts b/src/locales/zh-TW/pages.ts index 37000c0..a8d6451 100644 --- a/src/locales/zh-TW/pages.ts +++ b/src/locales/zh-TW/pages.ts @@ -6,8 +6,8 @@ export default { 'pages.login.success': '登錄成功!', 'pages.login.username.placeholder': '用戶名: admin or user', 'pages.login.username.required': '用戶名是必填項!', - 'pages.login.password.placeholder': '密碼: ant.design', - 'pages.login.password.required': '密碼是必填項!', + 'pages.login.psw.placeholder': '密碼: ant.design', + 'pages.login.psw.required': '密碼是必填項!', 'pages.login.phoneLogin.tab': '手機號登錄', 'pages.login.phoneLogin.errorMessage': '驗證碼錯誤', 'pages.login.phoneNumber.placeholder': '請輸入手機號!', diff --git a/src/locales/zh-TW/settings.ts b/src/locales/zh-TW/settings.ts index dd45151..bb39819 100644 --- a/src/locales/zh-TW/settings.ts +++ b/src/locales/zh-TW/settings.ts @@ -24,8 +24,8 @@ export default { 'app.settings.security.strong': '強', 'app.settings.security.medium': '中', 'app.settings.security.weak': '弱', - 'app.settings.security.password': '賬戶密碼', - 'app.settings.security.password-description': '當前密碼強度', + 'app.settings.security.psw': '賬戶密碼', + 'app.settings.security.psw-description': '當前密碼強度', 'app.settings.security.phone': '密保手機', 'app.settings.security.phone-description': '已綁定手機', 'app.settings.security.question': '密保問題', @@ -44,8 +44,8 @@ export default { 'app.settings.binding.dingding': '綁定釘釘', 'app.settings.binding.dingding-description': '當前未綁定釘釘賬號', 'app.settings.binding.bind': '綁定', - 'app.settings.notification.password': '賬戶密碼', - 'app.settings.notification.password-description': '其他用戶的消息將以站內信的形式通知', + 'app.settings.notification.psw': '賬戶密碼', + 'app.settings.notification.psw-description': '其他用戶的消息將以站內信的形式通知', 'app.settings.notification.messages': '系統消息', 'app.settings.notification.messages-description': '系統消息將以站內信的形式通知', 'app.settings.notification.todo': '待辦任務', diff --git a/src/pages/Business/BusinessModel/index.tsx b/src/pages/Business/BusinessModel/index.tsx new file mode 100644 index 0000000..8119fb1 --- /dev/null +++ b/src/pages/Business/BusinessModel/index.tsx @@ -0,0 +1,14 @@ +/* + * @Author: donghao donghao@supervision.ltd + * @Date: 2024-04-22 15:23:36 + * @LastEditors: donghao donghao@supervision.ltd + * @LastEditTime: 2024-04-22 15:37:39 + * @FilePath: \general-ai-platform-web\src\pages\Node\BusinessModel\index.tsx + * @Description: 业务模型 + * @交互说明 + */ +const BusinessModel: React.FC = () => { + return
业务模型
; +}; + +export default BusinessModel; diff --git a/src/pages/Business/NodeSetting/index.tsx b/src/pages/Business/NodeSetting/index.tsx new file mode 100644 index 0000000..fc2478b --- /dev/null +++ b/src/pages/Business/NodeSetting/index.tsx @@ -0,0 +1,14 @@ +/* + * @Author: donghao donghao@supervision.ltd + * @Date: 2024-04-22 15:23:36 + * @LastEditors: donghao donghao@supervision.ltd + * @LastEditTime: 2024-04-22 15:34:36 + * @FilePath: \general-ai-platform-web\src\pages\Node\NodeSetting\index.tsx + * @Description: 节点设置 + * @交互说明 + */ +const NodeSetting: React.FC = () => { + return
节点设置
; +}; + +export default NodeSetting; diff --git a/src/pages/Offline/InvolvedUploadList/components/ImageWithPopover.tsx b/src/pages/Offline/InvolvedUploadList/components/ImageWithPopover.tsx deleted file mode 100644 index 07f517c..0000000 --- a/src/pages/Offline/InvolvedUploadList/components/ImageWithPopover.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import { postUploadRecognition } from '@/services/realTime/involved'; -import { CloseCircleOutlined, EllipsisOutlined } from '@ant-design/icons'; -import { useIntl } from '@umijs/max'; -import { Button, Image, Popover, message } from 'antd'; -import React, { useState } from 'react'; - -interface ImageWithPopoverProps { - src: string; - reload: any; - person_id: any; -} - -const ImageWithPopover: React.FC = ({ src, person_id, reload }) => { - const intl = useIntl(); - const [open, setOpen] = useState(false); - - const content = ( -
- {/*
选项1
-
选项2
*/} - -
- ); - - const handleOpenChange = (value: boolean) => { - setOpen(value); - }; - const handleButtonClick = (event: React.MouseEvent) => { - event.stopPropagation(); // 阻止事件冒泡到父组件并阻止默认事件触发 - }; - - return ( -
- - -
- ); -}; - -export default ImageWithPopover; diff --git a/src/pages/Offline/InvolvedUploadList/components/InvolvedDetails.less b/src/pages/Offline/InvolvedUploadList/components/InvolvedDetails.less deleted file mode 100644 index 4ddce5a..0000000 --- a/src/pages/Offline/InvolvedUploadList/components/InvolvedDetails.less +++ /dev/null @@ -1,26 +0,0 @@ -.InvolvedImgBox { - box-sizing: border-box; - // display: flex; - // justify-content: flex-start; - padding: 16px 32px; - border-top: 1px solid #e0e0e0; - .involvedImgList { - position: relative; - span { - position: absolute; - bottom: -30px; - left: 15px; - width: 2px; - height: 30px; - border-left: 2px dashed #081fa8; - } - } -} -.myButtonDisabled { - visibility: hidden; -} -.involvedModalForm { - .ant-modal .ant-modal-content { - padding: 0 !important; - } -} diff --git a/src/pages/Offline/InvolvedUploadList/components/InvolvedDetails.tsx b/src/pages/Offline/InvolvedUploadList/components/InvolvedDetails.tsx deleted file mode 100644 index 1619b3d..0000000 --- a/src/pages/Offline/InvolvedUploadList/components/InvolvedDetails.tsx +++ /dev/null @@ -1,318 +0,0 @@ -import { getUploadInvolvedTravelList, postUploadRecognition } from '@/services/realTime/involved'; -import { CloseCircleOutlined, EllipsisOutlined } from '@ant-design/icons'; -import { ModalForm } from '@ant-design/pro-components'; -import { useIntl } from '@umijs/max'; -import { Button, Form, Image, List, Popover, message } from 'antd'; -import moment from 'moment'; -import VirtualList from 'rc-virtual-list'; -import React, { useEffect, useState } from 'react'; -import trajectoryBottom from '../../../../../public/images/involved/trajectoryBottom.png'; -import './InvolvedDetails.less'; -import styles from './InvolvedDetails.less'; -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 InvolvedDetails: React.FC = (props) => { - const intl = useIntl(); - const [form] = Form.useForm(); - const [dataFlag, setDataFlag] = useState(false); - const [open, setOpen] = useState(false); - const [trajectoryData, setTrajectoryData] = useState([]); - // 动态设置每页数量 - const [currentPageSize, setCurrentPageSize] = useState(10); - const [currentPage, setCurrentPage] = useState(1); - const [total, setTotal] = useState(0); - const ContainerHeight = 630; - const content = ( -
- {/*
选项1
-
选项2
*/} - -
- ); - const handleOpenChange = (value: boolean) => { - setOpen(value); - }; - - const appendData = (page: any, pageSize: any) => { - const reqParams = { - page: page, - pageSize: pageSize, - // desc: false, - person_id: props.values.person_id, - // ...rest, - }; - getUploadInvolvedTravelList(reqParams) - .then((res) => { - console.log(res); - if (res.data.results) { - setTrajectoryData(trajectoryData.concat(res.data.results)); - setTotal(res.data.count); - if (res.data.next) { - setDataFlag(true); - } else { - setDataFlag(false); - // setTrajectoryData([]); // 重置trajectoryData数据为空数组 - } - } - }) - .catch(() => { - // setLoading(false); - setDataFlag(false); - // setTrajectoryData([]); // 重置trajectoryData数据为空数组 - }); - }; - const onScroll = (e: React.UIEvent) => { - // Refer to: https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#problems_and_solutions - console.log(e.currentTarget.scrollHeight - e.currentTarget.scrollTop - ContainerHeight); - - if (Math.abs(e.currentTarget.scrollHeight - e.currentTarget.scrollTop - ContainerHeight) <= 1) { - if (dataFlag) { - const nextPage = currentPage + 1; - setCurrentPage(nextPage); - appendData(nextPage, 10); - } - } - }; - useEffect(() => { - if (props.updateModalOpen) { - // 调用接口获取数据 - setTrajectoryData([]); // 重置trajectoryData数据为空数组 - setCurrentPage(1); - setCurrentPageSize(10); - appendData(currentPage, currentPageSize); - } - }, [props.updateModalOpen]); - return ( - - width={615} - title={ -
-
- - -
-
-
- 关注时间:{' '} - - {moment(props?.values?.classify_time).format('YYYY-MM-DD hh:mm:ss')} - -
-
- 最近发现:{' '} - - {moment(props?.values?.appear_time).format('YYYY-MM-DD hh:mm:ss')} - -
- {/*
- 来源设备:{' '} - - {props?.values?.device_name} - -
*/} -
-
- } - open={props.updateModalOpen} - form={form} - autoFocusFirstInput - modalProps={{ - destroyOnClose: true, - onCancel: () => { - setTrajectoryData([]); - setCurrentPage(1); - setCurrentPageSize(10); - props.handleModal(); - }, - wrapClassName: 'involvedModalForm', - }} - submitter={false} - submitTimeout={2000} - onFinish={async (values) => { - values.is_ignore = true; - values.person_id = props.values.person_id; - // console.log(values); - // postIgnoringvents(values) - // .then(() => { - // message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '成功' })); - // props.reload(); - // }) - // .catch(() => { - // message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '失败' })); - // }); - setTrajectoryData([]); - setCurrentPage(1); - setCurrentPageSize(10); - props.handleModal(); - return true; - }} - > - {/* */} - {/*
- 告警名称: 单人徘徊告警来源设备: 北广场检票口1#摄像头触发时间: 2023-01-15 22:00:03 -
*/} -
- - - {(item: any, index: any) => ( -
- - - - {index + 1 !== total && } -
- } - title={ -
- 时间定位:{' '} - - {moment(item.create_time).format('YYYY-MM-DD hh:mm:ss')} - {' '} - 来源视频: {item.video_name} -
- } - /> -
- -
- - {index === total - 1 && ( -
已无更多数据~
- )} -
- )} - - -
- - {/* */} - - ); -}; -export default InvolvedDetails; diff --git a/src/pages/Offline/InvolvedUploadList/index.tsx b/src/pages/Offline/InvolvedUploadList/index.tsx deleted file mode 100644 index d91cf70..0000000 --- a/src/pages/Offline/InvolvedUploadList/index.tsx +++ /dev/null @@ -1,355 +0,0 @@ -import { PageContainer, ProCard, ProList } from '@ant-design/pro-components'; -import React, { useEffect, useState } from 'react'; -import { proTablePaginationOptions } from '../../../../config/defaultTable'; -// import DeviceStatusCard from './components/DeviceStatusCard'; -// import CreateForm from './components/CreateForm'; -import { getUploadInvolvedList } from '@/services/realTime/involved'; -import moment from 'moment'; -import ImageWithPopover from './components/ImageWithPopover'; -import InvolvedDetails from './components/InvolvedDetails'; - -/** - * @交互说明 - * 1、列表分页展示服务器状态 - */ -// const tabOptions: Record = { -// singlePersonHoveringAlarm: 90, -// multiplePersonGatheringAlarm: 20, -// sensitiveTimePeriodAlarm: 20, -// ignored: 2, -// // processingStatus: 10, -// // errorStatus: 20, -// }; -export type DeleteBoxProps = { - modalOpen: boolean; - handleModal: () => void; - values: any; - reload: any; -}; - -const InvolvedUploadList: React.FC = () => { - // const [cardActionProps, setCardActionProps] = useState<'actions' | 'extra'>('extra'); - /** - * @en-US Pop-up window of new window - * @zh-CN 新建窗口的弹窗 - * */ - // const [createModalOpen, setCreateModalOpen] = useState(false); - /** - * @en-US The pop-up window of the distribution update window - * @zh-CN 更新窗口的弹窗 - * */ - const [updateModalOpen, setUpdateModalOpen] = useState(false); - /** - * @en-US The pop-up window of the distribution update window - * @zh-CN 删除窗口 - * */ - // const [modalOpen, setModalOpen] = useState(false); - const [currentRow, setCurrentRow] = useState>({}); - /** - * @en-US International configuration - * @zh-CN 国际化配置 - * */ - // const access = useAccess(); - // const intl = useIntl(); - // const actionRef = useRef(); - // 动态设置每页数量 - const [currentPageSize, setCurrentPageSize] = useState(10); - const [currentPage, setCurrentPage] = useState(1); - const [total, setTotal] = useState(0); - - // const [activeTabIndex, setActiveTabIndex] = useState(0); - const [dataTestList, setdataTestList] = useState([]); - - // const [tab, setTab] = useState(alarmRulesEnums[0].key); - // const [tabs, setTabs] = useState([]); - // const changeProjectTab = (key: string) => { - // setTab(key); - // console.log(key); - // // eslint-disable-next-line @typescript-eslint/no-use-before-define - // initList(key) - // }; - - // const handleCreateModal = () => { - // if (createModalOpen) { - // setCreateModalOpen(false); - // setCurrentRow(undefined); - // } else { - // setCreateModalOpen(true); - // } - // }; - - const handleUpdateModal = () => { - if (updateModalOpen) { - setUpdateModalOpen(false); - setCurrentRow(undefined); - } else { - setUpdateModalOpen(true); - } - }; - - // const handleDestroy = async () => { - // if (modalOpen) { - // setModalOpen(false); - // setCurrentRow(undefined); - // } else { - // setModalOpen(true); - // } - // // deleteBusinessImageDeleteBusinessImage({ id: selectedRow.id }) - // // .then(() => { - // // message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '$$$' })); - // // actionRef.current?.reload(); - // // }) - // // .catch(() => { - // // message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' })); - // // }); - // }; - - // const { confirm } = Modal; - // const showConfirm = (record: any) => { - // confirm({ - // title: `确定删除${record.name}吗`, - // icon: , - // content: '确定删除服务器1吗?删除后将找不到此服务器,请谨慎操作.', - // okText: '确认', - // cancelText: '取消', - // width: 560, - // onOk() { - // console.log('OK'); - // }, - // onCancel() { - // console.log('Cancel'); - // }, - // }); - // }; - - // 处理初始值 - function initDataTestList(dataList: Record[]) { - console.log(dataList, 'initDataTestList'); - let finalList: { content: React.JSX.Element }[] = []; - if (Array.isArray(dataList) && dataList.length) { - finalList = dataList.map((record, index) => { - return { - content: ( - -
{ - console.log(index, 'index'); - setUpdateModalOpen(true); - setCurrentRow(record); - }} - > - {/* */} - -
- {/*
- 最近发现:{' '} - - {moment(record.appear_time).format('YYYY-MM-DD hh:mm:ss')} - -
*/} -
- 来源视频:{' '} - - {record.video_name} - -
-
- 关注时间:{' '} - - {moment(record.classify_time).format('YYYY-MM-DD hh:mm:ss')} - -
-
-
-
- ), - }; - }); - } - - setdataTestList(() => [...finalList]); - } - - // 初始化加载 - async function initList(tabId: string = '1') { - const reqParams = { - page: currentPage, - pageSize: currentPageSize, - // desc: false, - classify: tabId, - // ...rest, - }; - const resp = await getUploadInvolvedList({ ...reqParams }); - // console.log(resp,'resp'); - // setCurrentPageSize(resp?.data?.count) - setTotal(resp?.data?.count); - initDataTestList(resp?.data?.results); - // request={async (params = {}, sort) => { - // const { current, ...rest } = params; - // const reqParams = { - // page: current, - // desc: false, - // warning_type: tab, - // ...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 联调查询设备状态接口 - // console.log(reqParams, 'reqParams'); - // let resp = await postAlarmList({ ...reqParams }); - // console.log(resp, 'postAlarmList_result'); - - // initDataTestList(resp.result); - // // return { - // // data: resp.result, - // // success: resp.success, - // // total: resp.count, - // // current: resp.count, - // // pageSize: resp.count, - // // }; - // }} - } - - useEffect(() => { - // 模拟异步请求数据 - initList(); - }, [currentPage, currentPageSize]); - return ( - - //
- //
- // } - > - - {/* { - changeProjectTab(key); - }} - > */} - - className="gn" - ghost={true} - itemCardProps={{ - ghost: true, - bodyStyle: { padding: 0, margin: 0 }, - style: { - width: '100%', - border: 0, - // minHeight: 700 - // padding: 0, margin: 0 - }, - }} - cardProps={{ - bodyStyle: { - padding: '8px 16px 16px', - borderRadius: 8, - }, - }} - pagination={{ - ...proTablePaginationOptions, - total: total, - current: currentPage, - pageSize: currentPageSize, - showSizeChanger: true, - onChange: (page, pageSize) => { - console.log(page, pageSize); - setCurrentPage(page); - setCurrentPageSize(pageSize); - }, - }} - showActions="hover" - rowSelection={false} - grid={{ gutter: 16, xs: 1, md: 2, lg: 2, xl: 3, xxl: 4 }} - metas={{ - type: { - // 不展示在筛选项 - hideInSearch: true, - }, - content: { - hideInSearch: true, - }, - actions: { - cardActionProps: 'extra', - }, - }} - dataSource={dataTestList} - /> - - - {/* */} - - - ); -}; - -export default InvolvedUploadList; diff --git a/src/pages/Offline/OfflineAlarmList/components/AlarmDetails.less b/src/pages/Offline/OfflineAlarmList/components/AlarmDetails.less deleted file mode 100644 index ed2b363..0000000 --- a/src/pages/Offline/OfflineAlarmList/components/AlarmDetails.less +++ /dev/null @@ -1,85 +0,0 @@ -.alarmImgBox { - // display: flex; - // justify-content: flex-start; - .alarmImgLeft { - position: relative; - width: 120px; - margin-right: 32px; - // height: 600px; - .alarmImgLeftBox { - width: 112px; - height: 112px; - border-radius: 4px; - // background: skyblue; - } - .alarmImgLeftBoxActive { - width: 112px; - height: 112px; - border: 1.5px solid #081fa8; - border-radius: 4px; - } - .shadowBox { - position: absolute; - bottom: 0px; - left: 0; - z-index: 999; - width: 112px; - height: 20px; - background: #fff; - } - } - .alarmImgRight { - position: relative; - flex: 1; - .alarmImgRightTopBox { - width: 640px; - height: 640px; - background: skyblue; - } - .alarmDetails { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 38px; - margin-bottom: 16px; - padding-left: 24px; - color: #ffffff; - font-weight: 400; - font-size: 16px; - font-family: PingFang SC; - line-height: 38px; - background: rgba(0, 0, 0, 0.6); - .alarmSpan { - // color: #333; - margin-right: 24px; - } - } - } - .alarmImgDescribe { - margin-bottom: 12px; - color: #666; - font-weight: 500; - font-size: 16px; - font-family: PingFang SC; - span { - color: #333; - } - } - .alarmImgContent { - display: flex; - flex-wrap: wrap; - justify-content: flex-start; - box-sizing: border-box; - width: 784px; - margin-bottom: 24px; - padding: 16px 0 16px 16px; - // height: 172px; - background: #f7f7f7; - border: 1px dashed #dcdcdc; - border-radius: 4px; - } -} -.myButtonDisabled { - visibility: hidden; -} diff --git a/src/pages/Offline/OfflineAlarmList/components/AlarmDetails.tsx b/src/pages/Offline/OfflineAlarmList/components/AlarmDetails.tsx deleted file mode 100644 index 2f6cd03..0000000 --- a/src/pages/Offline/OfflineAlarmList/components/AlarmDetails.tsx +++ /dev/null @@ -1,297 +0,0 @@ -import { postUploadIgnoringvents } from '@/services/realTime/alarmlist'; -import { postUploadRecognition } from '@/services/realTime/involved'; -import { ModalForm } from '@ant-design/pro-components'; -import { useIntl } from '@umijs/max'; -import { Button, Form, message } from 'antd'; -import moment from 'moment'; -import React, { useEffect, useState } from 'react'; -import styles from './AlarmDetails.less'; -import ImageSinglePopover from './ImageSinglePopover'; -import ImageWithPopover from './ImageWithPopover'; -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; - warning_type: any; -}; -const UpdateForm: React.FC = (props) => { - const intl = useIntl(); - const [form] = Form.useForm(); - // const [isActive, setIsActive] = useState(0); - // const [visible, setVisible] = useState(false); - const [involved, setInvolved] = useState(0); - // const [involvedInfo, setInvolvedInfo] = useState([...(props?.values?.person_list || [])]); - const [involvedInfo, setInvolvedInfo] = useState([]); - // useEffect(() => { - // if (props.values?.person_list) { - // setInvolvedInfo([...props.values.person_list]); - // } - // }, [props.values?.person_list]); - // console.log(object); - // if(props.warning_type === '1') { - // console.log('props.values?.warning_type1'); - // setInvolved(props.values.person_list[0][2]); - // }else { - // console.log('props.values?.warning_type2'); - // // setInvolvedInfo([...props.values.person_list]); - // } - const handlePostRecognition = (person_id: any, classify: any) => { - postUploadRecognition({ - person_id: person_id, - classify: classify, - }) - .then((res) => { - console.log(res.data.classify, 'res.data.classify'); - if (res.data.classify === 1) { - message.success('此人已被设为重点关注'); - } else { - message.success('此人已被移除重点关注'); - } - props.reload(); - }) - .catch(() => { - message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '失败' })); - }); - }; - /** 多人告警组件 */ - const handleInvolved = (value: any, index: any) => { - const updatedInvolvedInfo = [...involvedInfo]; - console.log(updatedInvolvedInfo); - updatedInvolvedInfo[index][2] = value; - setInvolvedInfo(updatedInvolvedInfo); - handlePostRecognition(updatedInvolvedInfo[index][0], value); - }; - /** 单人告警组件 */ - // const handleSingleInvolved = () => { - // if (involved === 1) { - // setInvolved(0); - // handlePostRecognition(props.values?.person_id, 0) - // } else { - // setInvolved(1); - // handlePostRecognition(props.values?.person_id, 1) - // } - // } - - // const [open, setOpen] = useState(false); - useEffect(() => { - // console.log(Array.isArray(props.values?.person_id),'Array.isArray(props.values?.person_id)'); - if (props.updateModalOpen) { - if (props.warning_type === '1') { - console.log('props.values?.warning_type1'); - setInvolved(props.values.person_list[0][2]); - } else { - console.log('props.values?.warning_type2'); - setInvolvedInfo([...props.values.person_list]); - } - } - }, [props.updateModalOpen]); - return ( - - width={832} - title={`${props.values.warning_name}告警`} - open={props.updateModalOpen} - form={form} - autoFocusFirstInput - modalProps={{ - destroyOnClose: true, - onCancel: () => { - setInvolved(0); - props.handleModal(); - }, - okText: intl.formatMessage({ id: 'common.yes', defaultMessage: '确认' }), - cancelText: intl.formatMessage({ id: 'common.no', defaultMessage: '取消' }), - }} - submitter={{ - // resetButtonProps: { - // style: { - // display: 'none', - // }, - // }, - // searchConfig: { - // submitText: '忽略此事件', - // }, - render: (prop) => { - return [ - , - props.warning_type === '2' ? null : ( - - ), - props.warning_type === '2' ? null : ( - - ), - ]; - }, - }} - submitTimeout={2000} - onFinish={async (values) => { - values.is_ignore = true; - values.id = props.values.id; - // console.log(props.values); - postUploadIgnoringvents(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; - }} - > - {/* */} -
-
- 来源: {props.values.origin} -
-
- 触发时间:{' '} - - {moment(props.values.trigger_time).format('YYYY-MM-DD hh:mm:ss')} - -
-
- {Array.isArray(props.values?.person_id_list)} - {props.warning_type === '2' - ? Array.isArray(involvedInfo) && involvedInfo.length - ? involvedInfo.map((item: any, index: any) => { - return ( - - ); - }) - : Array.isArray(props?.values?.picture_path) && props?.values?.picture_path.length - ? props.values.picture_path.map((item: any, index: any) => { - return ( - - ); - }) - : null - : Array.isArray(props?.values?.picture_path) && props?.values?.picture_path.length - ? props.values.picture_path.map((item: any, index: any) => { - return ( - - ); - }) - : null} - {/* { Array.isArray(involvedInfo) && involvedInfo.length && involvedInfo.map((item: any, index: any) => { - console.log(involvedInfo,'item'); - return() - })} */} -
- {/*
- { - console.log(111); - }} - // pagination={{ - // clickable: true, - // }} - // modules={[Pagination]} - > - { Array.isArray(props?.values?.picture_path) && props?.values?.picture_path.length && props?.values?.picture_path.map((item: any, index: any) => { - return ( { - console.log(index); - setIsActive(index) - setImageSrc(item) - }}> -
- -
-
) - })} -
-
-
-
-
- -
-
- 来源: {props.values.device_name}触发时间: {moment(props.values.trigger_time).format('YYYY-MM-DD hh:mm:ss')} -
-
*/} -
- {/*
*/} - - ); -}; -export default UpdateForm; diff --git a/src/pages/Offline/OfflineAlarmList/components/ImageSinglePopover.tsx b/src/pages/Offline/OfflineAlarmList/components/ImageSinglePopover.tsx deleted file mode 100644 index d81131d..0000000 --- a/src/pages/Offline/OfflineAlarmList/components/ImageSinglePopover.tsx +++ /dev/null @@ -1,146 +0,0 @@ -import { EyeOutlined } from '@ant-design/icons'; -import { Image } from 'antd'; -import moment from 'moment'; -import React, { useState } from 'react'; - -interface ImageSinglePopoverProps { - src: string; - involved: any; - // handleInvolved: () => void; - reload: any; - time: any; -} - -const ImageSinglePopover: React.FC = ({ src, involved, time }) => { - const [visible, setVisible] = useState(false); - // const [open, setOpen] = useState(false); - // 定义一个方法,用于生成自定义的遮罩层 - const generateMask = (text: any) => ( -
-
- -
{text}
-
-
- ); - // const content = ( - //
- // {/*
选项1
- //
选项2
*/} - // - // - //
- // ); - const handleVisibleChange = (value: boolean) => { - setVisible(value); - }; - - // const handleOpenChange = (value: boolean) => { - // setOpen(value); - // }; - - return ( -
- -
- {moment(time).format('YYYY-MM-DD hh:mm:ss')} -
- {/* -
- ); -}; - -export default ImageSinglePopover; diff --git a/src/pages/Offline/OfflineAlarmList/components/ImageWithPopover.tsx b/src/pages/Offline/OfflineAlarmList/components/ImageWithPopover.tsx deleted file mode 100644 index 516c92b..0000000 --- a/src/pages/Offline/OfflineAlarmList/components/ImageWithPopover.tsx +++ /dev/null @@ -1,170 +0,0 @@ -import { - CloseCircleOutlined, - EllipsisOutlined, - EyeOutlined, - InfoCircleOutlined, -} from '@ant-design/icons'; -import { Button, Image, Popover } from 'antd'; -import moment from 'moment'; -import React, { useState } from 'react'; - -interface ImageWithPopoverProps { - src: string; - involved: any; - indexId: any; - handleInvolved: (value: any, index: any) => void; - time: any; -} - -const ImageWithPopover: React.FC = ({ - src, - involved, - indexId, - handleInvolved, - time, -}) => { - const [visible, setVisible] = useState(false); - const [open, setOpen] = useState(false); - - // 定义一个方法,用于生成自定义的遮罩层 - const generateMask = (text: any) => ( -
-
- -
{text}
-
-
- ); - const content = ( -
- {/*
选项1
-
选项2
*/} - - -
- ); - const handleVisibleChange = (value: boolean) => { - setVisible(value); - }; - - const handleOpenChange = (value: boolean) => { - setOpen(value); - }; - - return ( -
- - -
- ); -}; - -export default ImageWithPopover; diff --git a/src/pages/Offline/OfflineAlarmList/index.tsx b/src/pages/Offline/OfflineAlarmList/index.tsx deleted file mode 100644 index 5699c22..0000000 --- a/src/pages/Offline/OfflineAlarmList/index.tsx +++ /dev/null @@ -1,376 +0,0 @@ -import { alarmVideoAnalysis } from '@/enums/status'; -import { PageContainer, ProCard, ProList } from '@ant-design/pro-components'; -import { Button, DatePicker, Image, Tabs } from 'antd'; -import React, { useEffect, useState } from 'react'; -import { proTablePaginationOptions } from '../../../../config/defaultTable'; -// import DeviceStatusCard from './components/DeviceStatusCard'; -// import CreateForm from './components/CreateForm'; -import { postUploadAlarmList } from '@/services/realTime/alarmlist'; -import type { DatePickerProps } from 'antd'; -import locale from 'antd/es/date-picker/locale/zh_CN'; -import moment from 'moment'; -import AlarmDetails from './components/AlarmDetails'; -// import dayjs from 'dayjs'; -// import 'dayjs/locale/zh-cn'; - -/** - * @交互说明 - * 1、列表分页展示服务器状态 - */ - -export type DeleteBoxProps = { - modalOpen: boolean; - handleModal: () => void; - values: any; - reload: any; -}; - -const OfflineAlarmList: React.FC = () => { - /** - * @en-US The pop-up window of the distribution update window - * @zh-CN 更新窗口的弹窗 - * */ - const [updateModalOpen, setUpdateModalOpen] = useState(false); - - const [currentRow, setCurrentRow] = useState>({}); - /** - * @en-US International configuration - * @zh-CN 国际化配置 - * */ - // const access = useAccess(); - // const intl = useIntl(); - // 动态设置每页数量 - const [currentPageSize, setCurrentPageSize] = useState(10); - const [currentPage, setCurrentPage] = useState(1); - const [total, setTotal] = useState(0); - - const [dataTestList, setdataTestList] = useState([]); - - const [tab, setTab] = useState(alarmVideoAnalysis[0].key); - const [tabs, setTabs] = useState([]); - - const [importDate, setImportDate] = useState(null); - const [innerDate, setInnerDate] = useState(null); - - const changeProjectTab = (key: string) => { - setTab(key); - console.log(key); - // eslint-disable-next-line @typescript-eslint/no-use-before-define - initList(key); - }; - const getTabs = () => { - // if (alarmVideoAnalysis.length) { - // setTab(alarmVideoAnalysis[0].key); - // } - setTabs(alarmVideoAnalysis); - }; - - const handleUpdateModal = () => { - if (updateModalOpen) { - setUpdateModalOpen(false); - setCurrentRow(undefined); - } else { - setUpdateModalOpen(true); - } - }; - - // 处理初始值 - function initDataTestList(dataList: Record[]) { - console.log(dataList, 'initDataTestList'); - let finalList: { content: React.JSX.Element }[] = []; - if (Array.isArray(dataList) && dataList.length) { - finalList = dataList.map((record) => { - return { - content: ( - -
{ - console.log('11111111111111111'); - setUpdateModalOpen(true); - setCurrentRow(record); - }} - > - -
-
- 告警名称:{' '} - - {record.warning_name} - -
-
- 来源设备:{' '} - - {record.origin} - -
-
- 触发时间:{' '} - - {moment(record.trigger_time).format('YYYY-MM-DD hh:mm:ss')} - -
-
-
-
- ), - }; - }); - } - - setdataTestList(() => [...finalList]); - } - - // 初始化加载 - async function initList(tabId: string = tab, date: any = null) { - const reqParams = { - page: currentPage, - pageSize: currentPageSize, - // desc: false, - warning_type: tabId, - analyse_time: date, - // ...rest, - }; - const resp = await postUploadAlarmList({ ...reqParams }); - // console.log(resp,'resp'); - // setCurrentPageSize(resp?.data?.count) - setTotal(resp?.data?.count); - initDataTestList(resp?.data?.results); - } - - const onChange: DatePickerProps['onChange'] = (date, dateString) => { - console.log(dateString); - setImportDate(date); - setInnerDate(dateString); - console.log(importDate, 'importDate'); - }; - useEffect(() => { - getTabs(); - }, []); - useEffect(() => { - // 模拟异步请求数据 - initList(); - }, [currentPage, currentPageSize]); - return ( - - //
视频分析
- - // - // - // - //
- // } - > - - { - changeProjectTab(key); - }} - > -
- 选择导入时间: - - - -
- - className="gn" - ghost={true} - itemCardProps={{ - ghost: true, - bodyStyle: { padding: 0, margin: 0 }, - style: { - width: '100%', - border: 0, - // minHeight: 700 - // padding: 0, margin: 0 - }, - }} - // search={{ - // labelWidth: proTableCommonOptions.searchLabelWidth, - // }} - // headerTitle={ - // <> - //
- // {Object.keys(tabOptions).map((item, index) => { - // // eslint-disable-next-line react/jsx-key - // return ( - // - // ); - // })} - //
- // - // } - cardProps={{ - bodyStyle: { - padding: '8px 16px 16px', - borderRadius: 8, - }, - }} - pagination={{ - ...proTablePaginationOptions, - total: total, - current: currentPage, - pageSize: currentPageSize, - showSizeChanger: true, - onChange: (page, pageSize) => { - console.log(page, pageSize); - setCurrentPage(page); - setCurrentPageSize(pageSize); - }, - }} - showActions="hover" - rowSelection={false} - grid={{ gutter: 16, xs: 1, md: 2, lg: 2, xl: 3, xxl: 3 }} - metas={{ - type: { - // 不展示在筛选项 - hideInSearch: true, - }, - content: { - hideInSearch: true, - }, - actions: { - cardActionProps: 'extra', - }, - // 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', - // }, - // }, - // }, - }} - dataSource={dataTestList} - /> -
- - - - ); -}; - -export default OfflineAlarmList; diff --git a/src/pages/Offline/OfflineAlarmRules/components/UpdateForm.tsx b/src/pages/Offline/OfflineAlarmRules/components/UpdateForm.tsx deleted file mode 100644 index ab0a22c..0000000 --- a/src/pages/Offline/OfflineAlarmRules/components/UpdateForm.tsx +++ /dev/null @@ -1,196 +0,0 @@ -import { postOfflineAlarmRules } from '@/services/realTime/alarmRules'; -import { ModalForm, ProForm, ProFormSwitch, ProFormText } from '@ant-design/pro-components'; -import { FormattedMessage, useIntl } from '@umijs/max'; -import { Form, message } from 'antd'; -import React from 'react'; -import { - proFormSmallItemStyleProps, - proFormSmallModelWidth, -} from '../../../../../config/defaultForm'; -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 UpdateForm: React.FC = (props) => { - const intl = useIntl(); - const [form] = Form.useForm(); - - return ( - - width={proFormSmallModelWidth} - title={intl.formatMessage({ - id: 'alarm_rules.page.form.title', - defaultMessage: `编辑单人徘徊告警`, - })} - open={props.updateModalOpen} - form={form} - autoFocusFirstInput - modalProps={{ - destroyOnClose: true, - onCancel: () => props.handleModal(), - okText: intl.formatMessage({ id: 'common.yes', defaultMessage: '确认' }), - cancelText: intl.formatMessage({ id: 'common.no', defaultMessage: '取消' }), - }} - submitTimeout={2000} - onFinish={async (values) => { - values.id = props.values.id; - values.is_use = values.is_use ? 1 : 0; - // console.log(values); - await postOfflineAlarmRules(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; - }} - > - - - } - checkedChildren="启用" - unCheckedChildren="关闭" - initialValue={props.values.is_use} - disabled={false} - /> - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.name', - defaultMessage: '告警名称', - })}`} - required={true} - initialValue={props.values.warning_name} - disabled={false} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> -
触发条件
-
- 当检测到风险人员单人,于 - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.triggerConditions', - defaultMessage: '触发条件', - })}`} - required={true} - initialValue={props.values.time_period} - disabled={false} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - 小时内,间隔 - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.triggerConditions', - defaultMessage: '触发条件', - })}`} - required={true} - initialValue={props.values.time_interval} - disabled={false} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - 小时,重复出现 - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.triggerConditions', - defaultMessage: '触发条件', - })}`} - required={true} - initialValue={props.values.appear_number} - disabled={false} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - 次,则触发警告。 -
-
- - ); -}; -export default UpdateForm; diff --git a/src/pages/Offline/OfflineAlarmRules/components/UpdateMultiForm.tsx b/src/pages/Offline/OfflineAlarmRules/components/UpdateMultiForm.tsx deleted file mode 100644 index 036ac94..0000000 --- a/src/pages/Offline/OfflineAlarmRules/components/UpdateMultiForm.tsx +++ /dev/null @@ -1,230 +0,0 @@ -import { postOfflineAlarmRules } from '@/services/realTime/alarmRules'; -import { ModalForm, ProForm, ProFormSwitch, ProFormText } from '@ant-design/pro-components'; -import { FormattedMessage, useIntl } from '@umijs/max'; -import { Form, message } from 'antd'; -import React from 'react'; -import { - proFormSmallItemStyleProps, - proFormSmallModelWidth, -} from '../../../../../config/defaultForm'; -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 UpdateMultiForm: React.FC = (props) => { - const intl = useIntl(); - const [form] = Form.useForm(); - - return ( - - width={proFormSmallModelWidth} - title={intl.formatMessage({ - id: 'alarm_rules.page.form.multiTitle', - defaultMessage: `编辑${props.values.warning_name}`, - })} - open={props.updateModalOpen} - form={form} - autoFocusFirstInput - modalProps={{ - destroyOnClose: true, - onCancel: () => props.handleModal(), - okText: intl.formatMessage({ id: 'common.yes', defaultMessage: '确认' }), - cancelText: intl.formatMessage({ id: 'common.no', defaultMessage: '取消' }), - }} - submitTimeout={2000} - onFinish={async (values) => { - values.id = props.values.id; - values.is_use = values.is_use ? 1 : 0; - // console.log(values); - await postOfflineAlarmRules(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: 'alarm_rules.page.form.enabled', - defaultMessage: '$$$', - })}`} - required={false} - initialValue={props.values.enabled} - disabled={false} - /> */} - - } - checkedChildren="启用" - unCheckedChildren="关闭" - initialValue={props.values.is_use} - disabled={false} - /> - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.name', - defaultMessage: '告警名称', - })}`} - required={true} - initialValue={props.values.warning_name} - disabled={false} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> -
触发条件
-
- 当检测到风险人员人数大于 - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.triggerConditions', - defaultMessage: '触发条件', - })}`} - required={true} - initialValue={props.values.person_number} - disabled={false} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - 人时,则触发告警,触发间隔 - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.time_interval', - defaultMessage: '时间', - })}`} - required={true} - initialValue={props.values.time_interval} - disabled={false} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - 分钟。 -
- {/* { timeStatus && - ({ - // list: value, - // startTime: value[0], - // endTime: value[1], - time_period: value[0], - time_interval: value[1], - appear_number: value[2], - })} - className={styles} - > - 当处于} - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '$$$', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.triggerConditions', - defaultMessage: '$$$', - })}`} - required={false} - initialValue={props.values.trigger_start_time} - disabled={false} - />至 - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '$$$', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.triggerConditions', - defaultMessage: '$$$', - })}`} - required={false} - initialValue={props.values.trigger_end_time} - disabled={false} - />时间内,发现风险人员立即告警。 - } */} -
- - ); -}; -export default UpdateMultiForm; diff --git a/src/pages/Offline/OfflineAlarmRules/components/UpdateTimeForm.tsx b/src/pages/Offline/OfflineAlarmRules/components/UpdateTimeForm.tsx deleted file mode 100644 index 3de5020..0000000 --- a/src/pages/Offline/OfflineAlarmRules/components/UpdateTimeForm.tsx +++ /dev/null @@ -1,229 +0,0 @@ -import { postOfflineAlarmRules } from '@/services/realTime/alarmRules'; -import { - ModalForm, - ProForm, - ProFormSwitch, - ProFormText, - ProFormTimePicker, -} from '@ant-design/pro-components'; -import { FormattedMessage, useIntl } from '@umijs/max'; -import { Form, message } from 'antd'; -import React from 'react'; -import { - proFormSmallItemStyleProps, - proFormSmallModelWidth, -} from '../../../../../config/defaultForm'; -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 UpdateTimeForm: React.FC = (props) => { - const intl = useIntl(); - const [form] = Form.useForm(); - - return ( - - width={proFormSmallModelWidth} - title={intl.formatMessage({ - id: 'alarm_rules.page.form.timeTitle', - defaultMessage: `编辑${props.values.warning_name}`, - })} - open={props.updateModalOpen} - form={form} - autoFocusFirstInput - modalProps={{ - destroyOnClose: true, - onCancel: () => props.handleModal(), - okText: intl.formatMessage({ id: 'common.yes', defaultMessage: '确认' }), - cancelText: intl.formatMessage({ id: 'common.no', defaultMessage: '取消' }), - }} - submitTimeout={2000} - onFinish={async (values) => { - values.id = props.values.id; - values.is_use = values.is_use ? 1 : 0; - // console.log(values); - await postOfflineAlarmRules(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: 'alarm_rules.page.form.enabled', - defaultMessage: '$$$', - })}`} - required={false} - initialValue={props.values.enabled} - disabled={false} - /> */} - - } - checkedChildren="启用" - unCheckedChildren="关闭" - initialValue={props.values.is_use} - disabled={false} - /> - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.name', - defaultMessage: '告警名称', - })}`} - required={true} - initialValue={props.values.warning_name} - disabled={false} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> -
- 触发条件 -
-
- 当处于 - - ), - }, - ]} - /> - {/* } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '$$$', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.triggerConditions', - defaultMessage: '$$$', - })}`} - required={false} - initialValue={props.values.trigger_start_time} - disabled={false} - /> */} - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.triggerConditions', - defaultMessage: '触发条件', - })}`} - required={true} - initialValue={props.values.trigger_end_time} - disabled={false} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - {/* } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '$$$', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.triggerConditions', - defaultMessage: '$$$', - })}`} - required={false} - initialValue={props.values.trigger_end_time} - disabled={false} - /> */} - 时间内,发现风险人员立即告警。 - {/* */} -
-
- - ); -}; -export default UpdateTimeForm; diff --git a/src/pages/Offline/OfflineAlarmRules/components/updateForm.less b/src/pages/Offline/OfflineAlarmRules/components/updateForm.less deleted file mode 100644 index bac1b0c..0000000 --- a/src/pages/Offline/OfflineAlarmRules/components/updateForm.less +++ /dev/null @@ -1,7 +0,0 @@ -:global { - .ant-form-item-control-input-content { - .ant-space-gap-col-small { - align-items: center; - } - } -} diff --git a/src/pages/Offline/OfflineAlarmRules/index.tsx b/src/pages/Offline/OfflineAlarmRules/index.tsx deleted file mode 100644 index c74cd50..0000000 --- a/src/pages/Offline/OfflineAlarmRules/index.tsx +++ /dev/null @@ -1,212 +0,0 @@ -import TableActionCard from '@/components/TableActionCard'; -import { getOfflineAlarmRules } from '@/services/realTime/alarmRules'; -import { EditOutlined } from '@ant-design/icons'; -import type { ActionType, ProColumns } from '@ant-design/pro-components'; -import { PageContainer, ProTable } from '@ant-design/pro-components'; -import { FormattedMessage } from '@umijs/max'; -import { Button, Tag } from 'antd'; -import React, { useRef, useState } from 'react'; -import { proTablePaginationOptions } from '../../../../config/defaultTable'; -import UpdateForm from './components/UpdateForm'; -import UpdateMultiForm from './components/UpdateMultiForm'; -import UpdateTimeForm from './components/UpdateTimeForm'; -const OfflineAlarmRules: React.FC = () => { - /** - * @en-US International configuration - * @zh-CN 国际化配置 - * */ - const actionRef = useRef(); - // 动态设置每页数量 - const [currentPageSize, setCurrentPageSize] = useState(10); - - const [currentRow, setCurrentRow] = useState(); - // 编辑弹框 - const [updateModalOpen, setUpdateModalOpen] = useState(false); - const [updateMultiModalOpen, setUpdateMultiModalOpen] = useState(false); - const [updateTimeModalOpen, setUpdateTimeModalOpen] = useState(false); - - const handleUpdateModal = () => { - if (updateModalOpen) { - setUpdateModalOpen(false); - setCurrentRow(undefined); - } else { - setUpdateModalOpen(true); - } - }; - const handleUpdateMultiModal = () => { - if (updateMultiModalOpen) { - setUpdateMultiModalOpen(false); - setCurrentRow(undefined); - } else { - setUpdateMultiModalOpen(true); - } - }; - const handleUpdateTimeModal = () => { - setCurrentRow(undefined); - - if (updateTimeModalOpen) { - setUpdateTimeModalOpen(false); - } else { - setUpdateTimeModalOpen(true); - } - }; - - const columns: ProColumns[] = [ - { - title: , - dataIndex: 'warning_name', - hideInSearch: true, - }, - - { - title: , - dataIndex: 'id', - hideInSearch: true, - }, - { - title: , - dataIndex: 'is_use', - hideInSearch: true, - render: (dom) => { - return ( - - {dom === 1 ? '已启用' : '未启用'} - - ); - }, - }, - { - title: , - dataIndex: 'update_time', - sorter: true, - hideInSearch: true, - valueType: 'dateTime', - }, - - { - title: , - dataIndex: 'option', - valueType: 'option', - fixed: 'right', - render: (_, record) => [ - - } - onClick={() => { - console.log(record); - if (record.id === 1) { - setUpdateModalOpen(true); - } else if (record.id === 2) { - setUpdateMultiModalOpen(true); - } else { - setUpdateTimeModalOpen(true); - } - setCurrentRow(record); - }} - > - - - ), - }, - ]} - >, - ], - }, - ]; - return ( - - - cardProps={{ - bodyStyle: { - padding: 20, - }, - }} - options={{ fullScreen: false, setting: false, density: false, reload: false }} - actionRef={actionRef} - rowKey="key" - search={false} - showSorterTooltip={false} - pagination={{ - ...proTablePaginationOptions, - pageSize: currentPageSize, - onChange: (page, pageSize) => setCurrentPageSize(pageSize), - }} - columnsState={{ - persistenceKey: 'device_category_list', - persistenceType: 'localStorage', - }} - 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'; - } - // let resp = await postDeviceCategoryGetDeviceCategoryList({ ...reqParams }); - let resp = await getOfflineAlarmRules(reqParams); - console.log(resp); - return { - data: resp.data.results.map((v: API.DeviceCategory) => { - return { ...v, key: v.id }; - }), - success: resp.success, - total: resp.data.count, - current: resp.data.page, - pageSize: resp.data.pageSize, - }; - }} - columns={columns} - /> - - - - - ); -}; - -export default OfflineAlarmRules; diff --git a/src/pages/Offline/OfflineDeviceList/components/CaptureButton.tsx b/src/pages/Offline/OfflineDeviceList/components/CaptureButton.tsx deleted file mode 100644 index 2793b72..0000000 --- a/src/pages/Offline/OfflineDeviceList/components/CaptureButton.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import { postTestDevice } from '@/services/realTime/interfaces'; -import { RedoOutlined } from '@ant-design/icons'; -import { useIntl } from '@umijs/max'; -import { Button, Tag, message } from 'antd'; -import moment from 'moment'; -import React, { useState } from 'react'; - -interface ImageSinglePopoverProps { - values: any; - reload: any; -} - -const CaptureButton: React.FC = (props) => { - const intl = useIntl(); - const [loading, setLoading] = useState(false); - const connection = () => { - setLoading(true); - postTestDevice({ - device_ip: props.values.device_ip, - id: props.values.id, - }) - .then((res) => { - if (res.success) { - message.success(res.msg); - } - props.reload(); - setLoading(false); - }) - .catch(() => { - message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '失败' })); - setLoading(false); - }); - }; - - return ( -
- - {props.values.test_result === 1 ? '在线' : '离线'} - - {moment(props.values.test_time).format('YYYY-MM-DD hh:mm:ss')} -
- ); -}; - -export default CaptureButton; diff --git a/src/pages/Offline/OfflineDeviceList/components/CaptureForm.tsx b/src/pages/Offline/OfflineDeviceList/components/CaptureForm.tsx deleted file mode 100644 index 1abfd6a..0000000 --- a/src/pages/Offline/OfflineDeviceList/components/CaptureForm.tsx +++ /dev/null @@ -1,84 +0,0 @@ -/* - * @Author: donghao donghao@supervision.ltd - * @Date: 2024-04-02 17:41:57 - * @LastEditors: donghao donghao@supervision.ltd - * @LastEditTime: 2024-04-02 17:46:32 - * @FilePath: \uighur-recognition-web2\src\pages\Offline\OfflineDeviceList\components\CaptureForm.tsx - * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE - */ -import { postInterfaces } from '@/services/realTime/interfaces'; -import { ModalForm } from '@ant-design/pro-components'; -import { useIntl } from '@umijs/max'; -import { Form, Image, message } from 'antd'; -import moment from 'moment'; -import React from 'react'; -import { proFormSmallModelWidth } from '../../../../../config/defaultForm'; -export type FormValueType = { - target?: string; - template?: string; - type?: string; - time?: string; - frequency?: string; -} & Partial; - -export type UpdateFormProps = { - captureModalOpen: boolean; - handleModal: () => void; - values: Partial; - reload: any; -}; -const CaptureForm: React.FC = (props) => { - const intl = useIntl(); - const [form] = Form.useForm(); - - return ( - - width={proFormSmallModelWidth} - title={intl.formatMessage({ - id: 'device.interface_manage.table.list.capture', - defaultMessage: `最近拍摄`, - })} - open={props.captureModalOpen} - form={form} - autoFocusFirstInput - modalProps={{ - destroyOnClose: true, - onCancel: () => { - props.handleModal(); - }, - // okText: intl.formatMessage({ id: 'common.okText', defaultMessage: '确认' }), - // cancelText: intl.formatMessage({ id: 'common.cancelText', defaultMessage: '取消' }), - }} - submitTimeout={2000} - submitter={false} - onFinish={async (values) => { - console.log(values); - values.id = props.values.id; - postInterfaces(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; - }} - > -
-
- 来源: {props.values.device_name} -
-
- 触发时间: {moment(props.values.appear_time).format('YYYY-MM-DD hh:mm:ss')} -
-
- -
-
- - ); -}; -export default CaptureForm; diff --git a/src/pages/Offline/OfflineDeviceList/components/CreateForm.tsx b/src/pages/Offline/OfflineDeviceList/components/CreateForm.tsx deleted file mode 100644 index 6c52428..0000000 --- a/src/pages/Offline/OfflineDeviceList/components/CreateForm.tsx +++ /dev/null @@ -1,698 +0,0 @@ -/** - * @交互说明 - * 接口管理新建弹框 - * - */ -import { getInterfacesUpload, postInterfacesUpload } from '@/services/realTime/interfaces'; -import { - ModalForm, - ProForm, - ProFormSelect, - ProFormText, - ProFormTextArea, -} from '@ant-design/pro-components'; -import { FormattedMessage, useIntl } from '@umijs/max'; -import { Form, message } from 'antd'; -import React, { useEffect, useState } from 'react'; -import { - proFormSmallItemStyleProps, - proFormSmallModelWidth, -} from '../../../../../config/defaultForm'; -export type FormValueType = { - target?: string; - template?: string; - type?: string; - time?: string; - frequency?: string; -} & Partial; - -export type CreateFormProps = { - createModalOpen: boolean; - handleModal: () => void; - values: Partial; - reload: any; -}; -const CreateForm: React.FC = (props) => { - const intl = useIntl(); - const [form] = Form.useForm(); - // const [loading, setLoading] = useState(false); - const [fileType, setFileType] = useState('1'); - const [fileMethod, setFileMethod] = useState(2); - const [methodName, setMethodName] = useState('1'); - const handleChangeFileType = async (value: number) => { - setFileMethod(value); - // 根据选择的获取方式更新第二个下拉框的值 - if (value === 2) { - setMethodName('1'); // 设置为初始值 '0',只展示FTP选项 - form.setFieldsValue({ - operate_mode: '1', // 设置第二个下拉框的值 - device_ip: '', - device_port: '', - device_username: '', - device_password: '', - source_directory: '', - }); - } else if (value === 1) { - setMethodName('2'); // 设置为 '2',只展示FTP上传选项 - form.setFieldsValue({ - operate_mode: '2', // 设置第二个下拉框的值 - }); - await getInterfacesUpload({ templet: true }).then((resp) => { - const { data } = resp; - form.setFieldsValue({ - device_ip: data.device_ip, - device_port: data.device_port, - device_username: data.device_username, - device_password: data.device_password, - destination_directory: data.destination_directory, - }); - }); - } - }; - const handleChangeFile = (value: string) => { - setMethodName(value); - }; - - useEffect(() => { - if (fileMethod === 1 && methodName === '2') { - setFileType(() => { - return '3'; - }); - } else if (fileMethod === 2 && methodName === '3') { - setFileType(() => { - return '2'; - }); - } else { - setFileType(() => { - return '1'; - }); - } - }, [methodName, fileMethod]); - - return ( - - width={proFormSmallModelWidth} - title={intl.formatMessage({ - id: 'device.interface_manage.table.list.addVideoSource', - defaultMessage: '新建视频源', - })} - open={props.createModalOpen} - form={form} - autoFocusFirstInput - modalProps={{ - destroyOnClose: true, - onCancel: () => { - // setLoading(false); - setFileMethod(2); - setMethodName('1'); - props.handleModal(); - }, - okText: intl.formatMessage({ id: 'common.okText', defaultMessage: '确认' }), - cancelText: intl.formatMessage({ id: 'common.cancelText', defaultMessage: '取消' }), - }} - submitTimeout={2000} - onFinish={async (values) => { - console.log(values); - postInterfacesUpload(values) - .then(() => { - message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '成功' })); - props.reload(); - }) - .catch(() => { - message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '失败' })); - }); - setFileMethod(2); - setMethodName('1'); - props.handleModal(); - return true; - }} - > - - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.name', - defaultMessage: '接口名称', - })}`} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> -
-
获取方式
-
- - {/* */} - - fileMethod === 2 ? option.value !== '2' : option.value === '2', - )} - initialValue={methodName} - onChange={handleChangeFile} - name="operate_mode" - // label="获取方式" - /> -
-
- {/* - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.ip', - defaultMessage: 'IP地址', - })}`} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - addonAfter={ - - } - /> */} - {fileType === '1' && ( - - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.ip', - defaultMessage: '接口地址', - })}`} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.port', - defaultMessage: '端口', - })}`} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.loginName', - defaultMessage: '登录名', - })}`} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.password', - defaultMessage: '密码', - })}`} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.fileDirectory', - defaultMessage: '文件目录', - })}`} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - )} - {fileType === '2' && ( - - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.requestAddress', - defaultMessage: '请求地址', - })}`} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.requestKey', - defaultMessage: '请求Key', - })}`} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.secretKey', - defaultMessage: '秘钥', - })}`} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.bucket', - defaultMessage: 'Bucket', - })}`} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - )} - {fileType === '3' && ( - - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.ip', - defaultMessage: 'ip', - })}`} - disabled - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - disabled - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.port', - defaultMessage: '端口', - })}`} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - disabled - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.loginName', - defaultMessage: '登录名', - })}`} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - disabled - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.password', - defaultMessage: '密码', - })}`} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - disabled - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.fileDirectory', - defaultMessage: '文件目录', - })}`} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - )} - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.remark', - defaultMessage: '备注', - })}`} - required={false} - /> -
- - ); -}; -export default CreateForm; diff --git a/src/pages/Offline/OfflineDeviceList/components/UpdateForm.tsx b/src/pages/Offline/OfflineDeviceList/components/UpdateForm.tsx deleted file mode 100644 index b30c968..0000000 --- a/src/pages/Offline/OfflineDeviceList/components/UpdateForm.tsx +++ /dev/null @@ -1,694 +0,0 @@ -/* - * @Author: zhoux zhouxia@supervision.ltd - * @Date: 2023-11-01 13:56:33 - * @LastEditors: donghao donghao@supervision.ltd - * @LastEditTime: 2024-04-02 17:57:23 - * @FilePath: \general-ai-platform-web\src\pages\Device\DeviceCategoryList\components\UpdateForm.tsx - * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE - */ -import { getInterfacesUpload, postInterfacesUpload } from '@/services/realTime/interfaces'; -import { - ModalForm, - ProForm, - ProFormSelect, - ProFormText, - ProFormTextArea, -} from '@ant-design/pro-components'; -import { FormattedMessage, useIntl } from '@umijs/max'; -import { Form, message } from 'antd'; -import React, { useEffect, useState } from 'react'; -import { - proFormSmallItemStyleProps, - proFormSmallModelWidth, -} from '../../../../../config/defaultForm'; -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 UpdateForm: React.FC = (props) => { - const intl = useIntl(); - const [form] = Form.useForm(); - const [fileType, setFileType] = useState('1'); - const [fileMethod, setFileMethod] = useState(props.values.upload_or_download); - const [methodName, setMethodName] = useState(props.values.operate_mode); - - const handleChangeFileType = async (value: number) => { - setFileMethod(value); - // 根据选择的获取方式更新第二个下拉框的值 - if (value === 2) { - setMethodName(1); // 设置为初始值 '0',只展示FTP选项 - form.setFieldsValue({ - operate_mode: 1, // 设置第二个下拉框的值 - device_ip: props.values.device_ip, - device_port: props.values.device_port, - device_username: props.values.device_username, - device_password: props.values.device_password, - source_directory: props.values.source_directory, - }); - } else if (value === 1) { - setMethodName(2); // 设置为 '2',只展示FTP上传选项 - form.setFieldsValue({ - operate_mode: 2, // 设置第二个下拉框的值 - }); - await getInterfacesUpload({ templet: true }).then((resp) => { - const { data } = resp; - form.setFieldsValue({ - device_ip: data.device_ip, - device_port: data.device_port, - device_username: data.device_username, - device_password: data.device_password, - destination_directory: data.destination_directory, - }); - }); - } - }; - const handleChangeFile = (value: number) => { - setMethodName(value); - }; - - useEffect(() => { - if (fileMethod === 1 && methodName === 2) { - setFileType(() => { - return '3'; - }); - } else if (fileMethod === 2 && methodName === 3) { - setFileType(() => { - return '2'; - }); - } else { - setFileType(() => { - return '1'; - }); - } - }, [methodName, fileMethod]); - useEffect(() => { - setFileMethod(props.values.upload_or_download); - setMethodName(props.values.operate_mode); - if (fileMethod === 1 && methodName === 2) { - setFileType(() => { - return '3'; - }); - } else if (fileMethod === 2 && methodName === 3) { - setFileType(() => { - return '2'; - }); - } else { - setFileType(() => { - return '1'; - }); - } - }, [props.updateModalOpen]); - return ( - - width={proFormSmallModelWidth} - title={intl.formatMessage({ - id: 'device.interface_manage.table.list.updatVideoSource', - defaultMessage: `编辑${props.values.device_name}`, - })} - open={props.updateModalOpen} - form={form} - autoFocusFirstInput - modalProps={{ - destroyOnClose: true, - onCancel: () => { - props.handleModal(); - }, - okText: intl.formatMessage({ id: 'common.okText', defaultMessage: '确认' }), - cancelText: intl.formatMessage({ id: 'common.cancelText', defaultMessage: '取消' }), - }} - submitTimeout={2000} - onFinish={async (values) => { - console.log(values); - values.id = props.values.id; - postInterfacesUpload(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: 'device.interface_manage.table.list.name', - defaultMessage: '接口名称', - })}`} - initialValue={props.values.device_name} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> -
-
获取方式
-
- - {/* */} - (fileMethod === 2 ? option.value !== 2 : option.value === 2))} - initialValue={props.values.operate_mode} - onChange={handleChangeFile} - name="operate_mode" - // label="获取方式" - /> -
-
- {fileType === '1' && ( - - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.ip', - defaultMessage: '接口地址', - })}`} - required={true} - initialValue={props.values.device_ip} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.port', - defaultMessage: '端口', - })}`} - initialValue={props.values.device_port} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.loginName', - defaultMessage: '登录名', - })}`} - initialValue={props.values.device_username} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.password', - defaultMessage: '密码', - })}`} - initialValue={props.values.device_password} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.fileDirectory', - defaultMessage: '文件目录', - })}`} - initialValue={props.values.source_directory} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - )} - {fileType === '2' && ( - - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.requestAddress', - defaultMessage: '请求地址', - })}`} - initialValue={props.values.device_ip} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.requestKey', - defaultMessage: '请求Key', - })}`} - initialValue={props.values.access_key_id} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.secretKey', - defaultMessage: '秘钥', - })}`} - initialValue={props.values.access_key_secret} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.bucket', - defaultMessage: 'Bucket', - })}`} - initialValue={props.values.bucket} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - )} - {fileType === '3' && ( - - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.ip', - defaultMessage: 'ip', - })}`} - disabled - initialValue={props.values.device_ip} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - disabled - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.port', - defaultMessage: '端口', - })}`} - initialValue={props.values.device_port} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - disabled - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.loginName', - defaultMessage: '登录名', - })}`} - initialValue={props.values.device_username} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - disabled - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.password', - defaultMessage: '密码', - })}`} - initialValue={props.values.device_password} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - disabled - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.fileDirectory', - defaultMessage: '文件目录', - })}`} - initialValue={props.values.destination_directory} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - )} - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.remark', - defaultMessage: '备注', - })}`} - initialValue={props.values.note} - required={false} - /> -
- - ); -}; -export default UpdateForm; diff --git a/src/pages/Offline/OfflineDeviceList/index.tsx b/src/pages/Offline/OfflineDeviceList/index.tsx deleted file mode 100644 index d6c629b..0000000 --- a/src/pages/Offline/OfflineDeviceList/index.tsx +++ /dev/null @@ -1,348 +0,0 @@ -import TableActionCard from '@/components/TableActionCard'; -import IsDelete from '@/components/TableActionCard/isDelete'; -import { getInterfacesUpload, postInterfacesUpload } from '@/services/realTime/interfaces'; -import { EditOutlined } from '@ant-design/icons'; -import type { ActionType, ProColumns } from '@ant-design/pro-components'; -import { PageContainer, ProTable } from '@ant-design/pro-components'; -import { FormattedMessage, useIntl } from '@umijs/max'; -import { Button, Tag, message } from 'antd'; -import moment from 'moment'; -import React, { useRef, useState } from 'react'; -import { proTablePaginationOptions } from '../../../../config/defaultTable'; -import CaptureForm from './components/CaptureForm'; -import CreateForm from './components/CreateForm'; -import UpdateForm from './components/UpdateForm'; -const OfflineDeviceList: React.FC = () => { - /** - * @en-US International configuration - * @zh-CN 国际化配置 - * */ - const intl = useIntl(); - const actionRef = useRef(); - // 动态设置每页数量 - const [currentPageSize, setCurrentPageSize] = useState(10); - - const handleDestroy = async (selectedRow: API.UpdateInterfacesParams) => { - postInterfacesUpload({ id: selectedRow.id, device_status: '3' }) - .then(() => { - message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '成功' })); - actionRef.current?.reload(); - }) - .catch(() => { - message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '失败' })); - }); - }; - - const [currentRow, setCurrentRow] = useState(); - /** - * @en-US Pop-up window of new window - * @zh-CN 新建窗口的弹窗 - * */ - const [createModalOpen, setCreateModalOpen] = useState(false); - const handleCreateModal = () => { - if (createModalOpen) { - setCreateModalOpen(false); - setCurrentRow(undefined); - } else { - setCreateModalOpen(true); - } - }; - // 编辑弹框 - const [updateModalOpen, setUpdateModalOpen] = useState(false); - - const handleUpdateModal = () => { - if (updateModalOpen) { - setUpdateModalOpen(false); - setCurrentRow(undefined); - } else { - setUpdateModalOpen(true); - } - }; - - // 最近拍摄 - const [captureModalOpen, setCaptureModalOpen] = useState(false); - - const handleCaptureModal = () => { - console.log(captureModalOpen); - if (captureModalOpen) { - setCaptureModalOpen(false); - setCurrentRow(undefined); - } else { - setCaptureModalOpen(true); - } - }; - // 测试连接 - // const [loading, setLoading] = useState(false); - - const columns: ProColumns[] = [ - { - title: ( - - ), - dataIndex: 'device_name', - hideInSearch: true, - }, - { - title: ( - - ), - dataIndex: 'operate_mode', - hideInSearch: true, - render: (dom) => { - return ( -
- {dom === 1 && 'FTP'} - {dom === 2 && 'FTP上传'} - {dom === 3 && '文件系统'} -
- ); - }, - }, - { - title: ( - - ), - dataIndex: 'test_result', - hideInSearch: true, - render: (dom, entity) => { - return ( -
- - {dom === 1 ? '获取成功' : '获取失败'} - - {moment(entity.create_time).format('YYYY-MM-DD hh:mm:ss')} - {/*
- // - ); - }, - }, - // { - // title: , - // dataIndex: 'device_api', - // hideInSearch: true, - // }, - // { - // title: , - // dataIndex: 'test_time', - // sorter: true, - // hideInSearch: true, - // valueType: 'dateTime', - // }, - { - title: ( - - ), - dataIndex: 'create_time', - sorter: true, - hideInSearch: true, - valueType: 'dateTime', - }, - - { - title: , - dataIndex: 'option', - valueType: 'option', - width: '260px', - fixed: 'right', - render: (_, record) => [ - } - // onClick={() => { - // console.log('11'); - // setCaptureModalOpen(true); - // setCurrentRow(record); - // }} - // > - // {/* 最近拍摄 */} - // - // - // ), - // }, - { - key: 'update', - renderDom: ( - - ), - }, - { - key: 'destroy', - renderDom: ( - { - handleDestroy(record).then(() => {}); - }} - > - ), - }, - ]} - >, - ], - }, - ]; - return ( - -
- 离线设备管理 -
- -
- } - > - - cardProps={{ - bodyStyle: { - padding: 20, - }, - }} - options={{ fullScreen: false, setting: false, density: false, reload: false }} - actionRef={actionRef} - rowKey="key" - search={false} - showSorterTooltip={false} - pagination={{ - ...proTablePaginationOptions, - pageSize: currentPageSize, - onChange: (page, pageSize) => setCurrentPageSize(pageSize), - }} - columnsState={{ - persistenceKey: 'device_category_list', - persistenceType: 'localStorage', - }} - 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'; - } - // let resp = await postDeviceCategoryGetDeviceCategoryList({ ...reqParams }); - let resp = await getInterfacesUpload({ ...reqParams }); - return { - data: resp.data.results.map((v: API.DeviceCategory) => { - return { ...v, key: v.id }; - }), - success: resp.success, - total: resp.data.count, - current: resp.data.page, - pageSize: resp.data.pageSize, - }; - }} - columns={columns} - /> - - - - - ); -}; - -export default OfflineDeviceList; diff --git a/src/pages/Project/BusinessProject/components/businessCard.tsx b/src/pages/Project/BusinessProject/components/businessCard.tsx index bb454a5..9af922f 100644 --- a/src/pages/Project/BusinessProject/components/businessCard.tsx +++ b/src/pages/Project/BusinessProject/components/businessCard.tsx @@ -2,17 +2,18 @@ * @Author: donghao donghao@supervision.ltd * @Date: 2024-04-08 16:57:30 * @LastEditors: donghao donghao@supervision.ltd - * @LastEditTime: 2024-04-19 14:24:57 + * @LastEditTime: 2024-04-22 10:15:41 * @FilePath: \general-ai-manage\src\pages\Project\BusinessProject\components\businessCard.tsx * @Description: 企业项目卡片 */ import TableActionCard, { actionsProps } from '@/components/TableActionCard'; +import { useBusinessInfo } from '@/hooks/useBusinessInfo'; import { useMoment } from '@/hooks/useMoment'; +import { history } from '@umijs/max'; import { ReactComponent as BusinessLogoIcon } from '/public/home/business_logo.svg'; import { ReactComponent as DeviceCountIcon } from '/public/home/device_count_icon.svg'; import { ReactComponent as ModelCountIcon } from '/public/home/model_count_icon.svg'; import { ReactComponent as TimeIcon } from '/public/home/time_icon.svg'; -// import { history } from '@umijs/max'; type BusinessCardProps = { info: Record; @@ -21,11 +22,13 @@ type BusinessCardProps = { const BusinessCard: React.FC = ({ info, renderActions }) => { const { formatTimeByDateType } = useMoment(); + const { setStoreBusinessInfo } = useBusinessInfo(); return (
{ - // history.push(`/realTime/involved-list?id=${info.id}`) + setStoreBusinessInfo(info); + history.push(`/business/index?id=${info.id}`); console.log('跳转企业'); }} > diff --git a/src/pages/RealTime/AlarmList/components/AlarmDetails.less b/src/pages/RealTime/AlarmList/components/AlarmDetails.less deleted file mode 100644 index c235ada..0000000 --- a/src/pages/RealTime/AlarmList/components/AlarmDetails.less +++ /dev/null @@ -1,84 +0,0 @@ -.alarmImgBox { - // display: flex; - // justify-content: flex-start; - .alarmImgLeft { - position: relative; - width: 120px; - margin-right: 32px; - // height: 600px; - .alarmImgLeftBox { - width: 112px; - height: 112px; - border-radius: 4px; - // background: skyblue; - } - .alarmImgLeftBoxActive { - width: 112px; - height: 112px; - border: 1.5px solid #081fa8; - border-radius: 4px; - } - .shadowBox { - position: absolute; - bottom: 0px; - left: 0; - z-index: 999; - width: 112px; - height: 20px; - background: #fff; - } - } - .alarmImgRight { - position: relative; - flex: 1; - .alarmImgRightTopBox { - width: 640px; - height: 640px; - background: skyblue; - } - .alarmDetails { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 38px; - margin-bottom: 16px; - padding-left: 24px; - color: #ffffff; - font-weight: 400; - font-size: 16px; - font-family: PingFang SC; - line-height: 38px; - background: rgba(0, 0, 0, 0.6); - .alarmSpan { - // color: #333; - margin-right: 24px; - } - } - } - .alarmImgDescribe { - margin-bottom: 12px; - color: #666; - font-weight: 500; - font-size: 16px; - font-family: PingFang SC; - span { - color: #333; - } - } - .alarmImgContent { - display: flex; - justify-content: center; - box-sizing: border-box; - width: 784px; - margin-bottom: 24px; - padding: 16px; - // height: 172px; - background: #f7f7f7; - border: 1px dashed #dcdcdc; - border-radius: 4px; - } -} -.myButtonDisabled { - visibility: hidden; -} diff --git a/src/pages/RealTime/AlarmList/components/AlarmDetails.tsx b/src/pages/RealTime/AlarmList/components/AlarmDetails.tsx deleted file mode 100644 index 72959cc..0000000 --- a/src/pages/RealTime/AlarmList/components/AlarmDetails.tsx +++ /dev/null @@ -1,293 +0,0 @@ -import { postIgnoringvents } from '@/services/realTime/alarmlist'; -import { postRecognition } from '@/services/realTime/involved'; -import { ModalForm } from '@ant-design/pro-components'; -import { useIntl } from '@umijs/max'; -import { Button, Form, message } from 'antd'; -import React, { useEffect, useState } from 'react'; -// Import Swiper React components -// import { Swiper, SwiperSlide } from 'swiper/react'; -// import { Navigation, Pagination, Mousewheel } from 'swiper/modules'; -// Import Swiper styles -// import 'swiper/css'; -// import 'swiper/css/navigation'; -// import 'swiper/css/pagination'; -import moment from 'moment'; -import styles from './AlarmDetails.less'; -import ImageSinglePopover from './ImageSinglePopover'; -import ImageWithPopover from './ImageWithPopover'; -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 UpdateForm: React.FC = (props) => { - const intl = useIntl(); - const [form] = Form.useForm(); - // const [isActive, setIsActive] = useState(0); - // const [imageSrc, setImageSrc] = useState(''); - // const [visible, setVisible] = useState(false); - const [involved, setInvolved] = useState(0); - // const [involvedInfo, setInvolvedInfo] = useState([...(props?.values?.person_list || [])]); - const [involvedInfo, setInvolvedInfo] = useState([]); - useEffect(() => { - if (props.values?.person_list) { - setInvolvedInfo([...props.values.person_list]); - } - }, [props.values?.person_list]); - useEffect(() => { - if (props.values?.person_classify) { - setInvolved(props.values.person_classify); - console.log(involved); - } - }, [props.values?.person_classify]); - const handlePostRecognition = (person_id: any, classify: any) => { - postRecognition({ - person_id: person_id, - classify: classify, - }) - .then((res) => { - console.log(res.data.classify, 'res.data.classify'); - if (res.data.classify === 1) { - message.success('此人已被设为重点关注'); - } else { - message.success('此人已被移除重点关注'); - } - props.reload(); - }) - .catch(() => { - message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '失败' })); - }); - }; - /** 多人告警组件 */ - const handleInvolved = (value: any, index: any) => { - const updatedInvolvedInfo = [...involvedInfo]; - console.log(updatedInvolvedInfo); - updatedInvolvedInfo[index][2] = value; - setInvolvedInfo(updatedInvolvedInfo); - handlePostRecognition(updatedInvolvedInfo[index][0], value); - }; - /** 单人告警组件 */ - // const handleSingleInvolved = () => { - // if (involved === 1) { - // setInvolved(0); - // handlePostRecognition(props.values?.person_id, 0) - // } else { - // setInvolved(1); - // handlePostRecognition(props.values?.person_id, 1) - // } - // } - - // const [open, setOpen] = useState(false); - // useEffect(() => { - // // console.log(Array.isArray(props.values?.person_id),'Array.isArray(props.values?.person_id)'); - // setImageSrc(props?.values?.picture_path?.[0]); - // }, [props.updateModalOpen]); - return ( - - width={832} - title={`${props.values.warning_name}告警`} - open={props.updateModalOpen} - form={form} - autoFocusFirstInput - modalProps={{ - destroyOnClose: true, - onCancel: () => { - setInvolved(0); - props.handleModal(); - }, - okText: intl.formatMessage({ id: 'common.yes', defaultMessage: '确认' }), - cancelText: intl.formatMessage({ id: 'common.no', defaultMessage: '取消' }), - }} - submitter={{ - // resetButtonProps: { - // style: { - // display: 'none', - // }, - // }, - // searchConfig: { - // submitText: '忽略此事件', - // }, - render: (prop) => { - return [ - , - props.values?.person_list ? null : ( - - ), - props.values?.person_list ? null : ( - - ), - ]; - }, - }} - submitTimeout={2000} - onFinish={async (values) => { - values.is_ignore = true; - values.person_id = props.values.person_id; - // console.log(values); - postIgnoringvents(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; - }} - > - {/* */} -
-
- 来源: {props.values.device_name} -
-
- 触发时间:{' '} - - {moment(props.values.trigger_time).format('YYYY-MM-DD hh:mm:ss')} - -
-
- {Array.isArray(props.values?.person_id) - ? Array.isArray(involvedInfo) && involvedInfo.length - ? involvedInfo.map((item: any, index: any) => { - return ( - - ); - }) - : Array.isArray(props?.values?.picture_path) && props?.values?.picture_path.length - ? props.values.picture_path.map((item: any, index: any) => { - return ( - - ); - }) - : null - : Array.isArray(props?.values?.picture_path) && props?.values?.picture_path.length - ? props.values.picture_path.map((item: any, index: any) => { - return ( - - ); - }) - : null} - {/* { Array.isArray(involvedInfo) && involvedInfo.length && involvedInfo.map((item: any, index: any) => { - console.log(involvedInfo,'item'); - return() - })} */} -
- {/*
- { - console.log(111); - }} - // pagination={{ - // clickable: true, - // }} - // modules={[Pagination]} - > - { Array.isArray(props?.values?.picture_path) && props?.values?.picture_path.length && props?.values?.picture_path.map((item: any, index: any) => { - return ( { - console.log(index); - setIsActive(index) - setImageSrc(item) - }}> -
- -
-
) - })} -
-
-
-
-
- -
-
- 来源: {props.values.device_name}触发时间: {moment(props.values.trigger_time).format('YYYY-MM-DD hh:mm:ss')} -
-
*/} -
- {/*
*/} - - ); -}; -export default UpdateForm; diff --git a/src/pages/RealTime/AlarmList/components/ImageSinglePopover.tsx b/src/pages/RealTime/AlarmList/components/ImageSinglePopover.tsx deleted file mode 100644 index 9b968f8..0000000 --- a/src/pages/RealTime/AlarmList/components/ImageSinglePopover.tsx +++ /dev/null @@ -1,147 +0,0 @@ -import { EyeOutlined } from '@ant-design/icons'; -import { Image } from 'antd'; -import moment from 'moment'; -import React, { useState } from 'react'; - -interface ImageSinglePopoverProps { - src: string; - involved: any; - // handleInvolved: () => void; - reload: any; - time: any; -} - -const ImageSinglePopover: React.FC = ({ src, involved, time }) => { - const [visible, setVisible] = useState(false); - // const [open, setOpen] = useState(false); - - // 定义一个方法,用于生成自定义的遮罩层 - const generateMask = (text: any) => ( -
-
- -
{text}
-
-
- ); - // const content = ( - //
- // {/*
选项1
- //
选项2
*/} - // - // - //
- // ); - const handleVisibleChange = (value: boolean) => { - setVisible(value); - }; - - // const handleOpenChange = (value: boolean) => { - // setOpen(value); - // }; - - return ( -
- -
- {moment(time).format('YYYY-MM-DD hh:mm:ss')} -
- {/* -
- ); -}; - -export default ImageSinglePopover; diff --git a/src/pages/RealTime/AlarmList/components/ImageWithPopover.tsx b/src/pages/RealTime/AlarmList/components/ImageWithPopover.tsx deleted file mode 100644 index 71f2d1b..0000000 --- a/src/pages/RealTime/AlarmList/components/ImageWithPopover.tsx +++ /dev/null @@ -1,170 +0,0 @@ -import { - CloseCircleOutlined, - EllipsisOutlined, - EyeOutlined, - InfoCircleOutlined, -} from '@ant-design/icons'; -import { Button, Image, Popover } from 'antd'; -import moment from 'moment'; -import React, { useState } from 'react'; - -interface ImageWithPopoverProps { - src: string; - involved: any; - indexId: any; - handleInvolved: (value: any, index: any) => void; - time: any; -} - -const ImageWithPopover: React.FC = ({ - src, - involved, - indexId, - handleInvolved, - time, -}) => { - const [visible, setVisible] = useState(false); - const [open, setOpen] = useState(false); - - // 定义一个方法,用于生成自定义的遮罩层 - const generateMask = (text: any) => ( -
-
- -
{text}
-
-
- ); - const content = ( -
- {/*
选项1
-
选项2
*/} - - -
- ); - const handleVisibleChange = (value: boolean) => { - setVisible(value); - }; - - const handleOpenChange = (value: boolean) => { - setOpen(value); - }; - - return ( -
- - -
- ); -}; - -export default ImageWithPopover; diff --git a/src/pages/RealTime/AlarmList/index.tsx b/src/pages/RealTime/AlarmList/index.tsx deleted file mode 100644 index 790d408..0000000 --- a/src/pages/RealTime/AlarmList/index.tsx +++ /dev/null @@ -1,425 +0,0 @@ -import { alarmRulesEnums } from '@/enums/status'; -import { PageContainer, ProCard, ProList } from '@ant-design/pro-components'; -import { Image, Tabs } from 'antd'; -import React, { useEffect, useState } from 'react'; -import { proTablePaginationOptions } from '../../../../config/defaultTable'; -// import DeviceStatusCard from './components/DeviceStatusCard'; -// import CreateForm from './components/CreateForm'; -import { useMoment } from '@/hooks/useMoment'; -import { postAlarmList } from '@/services/realTime/alarmlist'; -import AlarmDetails from './components/AlarmDetails'; - -/** - * @交互说明 - * 1、列表分页展示服务器状态 - */ -// const tabOptions: Record = { -// singlePersonHoveringAlarm: 90, -// multiplePersonGatheringAlarm: 20, -// sensitiveTimePeriodAlarm: 20, -// ignored: 2, -// // processingStatus: 10, -// // errorStatus: 20, -// }; -// export type DeleteBoxProps = { -// modalOpen: boolean; -// handleModal: () => void; -// values: any; -// reload: any; -// }; - -// eslint-disable-next-line react-hooks/rules-of-hooks -const { formatTimeByDateType } = useMoment(); - -const AlarmList: React.FC = () => { - /** - * @en-US Pop-up window of new window - * @zh-CN 新建窗口的弹窗 - * */ - // const [createModalOpen, setCreateModalOpen] = useState(false); - /** - * @en-US The pop-up window of the distribution update window - * @zh-CN 更新窗口的弹窗 - * */ - const [updateModalOpen, setUpdateModalOpen] = useState(false); - /** - * @en-US The pop-up window of the distribution update window - * @zh-CN 删除窗口 - * */ - // const [modalOpen, setModalOpen] = useState(false); - const [currentRow, setCurrentRow] = useState>({}); - /** - * @en-US International configuration - * @zh-CN 国际化配置 - * */ - // const access = useAccess(); - // const intl = useIntl(); - // const actionRef = useRef(); - // 动态设置每页数量 - const [currentPageSize, setCurrentPageSize] = useState(10); - const [currentPage, setCurrentPage] = useState(1); - const [total, setTotal] = useState(0); - - // const [activeTabIndex, setActiveTabIndex] = useState(0); - const [dataTestList, setdataTestList] = useState([]); - - const [tab, setTab] = useState(alarmRulesEnums[0].key); - const [tabs, setTabs] = useState([]); - const changeProjectTab = (key: string) => { - setTab(key); - console.log(key); - // eslint-disable-next-line @typescript-eslint/no-use-before-define - initList(key); - }; - const getTabs = () => { - // if (alarmRulesEnums.length) { - // setTab(alarmRulesEnums[0].key); - // } - setTabs(alarmRulesEnums); - }; - // useEffect(() => { - // getTabs(); - // }, []); - // const handleCreateModal = () => { - // if (createModalOpen) { - // setCreateModalOpen(false); - // setCurrentRow(undefined); - // } else { - // setCreateModalOpen(true); - // } - // }; - - const handleUpdateModal = () => { - if (updateModalOpen) { - setUpdateModalOpen(false); - setCurrentRow(undefined); - } else { - setUpdateModalOpen(true); - } - }; - - // const handleDestroy = async () => { - // if (modalOpen) { - // setModalOpen(false); - // setCurrentRow(undefined); - // } else { - // setModalOpen(true); - // } - // // deleteBusinessImageDeleteBusinessImage({ id: selectedRow.id }) - // // .then(() => { - // // message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '$$$' })); - // // actionRef.current?.reload(); - // // }) - // // .catch(() => { - // // message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' })); - // // }); - // }; - - // const { confirm } = Modal; - // const showConfirm = (record: any) => { - // confirm({ - // title: `确定删除${record.name}吗`, - // icon: , - // content: '确定删除服务器1吗?删除后将找不到此服务器,请谨慎操作.', - // okText: '确认', - // cancelText: '取消', - // width: 560, - // onOk() { - // console.log('OK'); - // }, - // onCancel() { - // console.log('Cancel'); - // }, - // }); - // }; - - // 处理初始值 - function initDataTestList(dataList: Record[]) { - console.log(dataList, 'initDataTestList'); - let finalList: { content: React.JSX.Element }[] = []; - if (Array.isArray(dataList) && dataList.length) { - finalList = dataList.map((record, index) => { - return { - content: ( - -
{ - console.log(index, 'index'); - setUpdateModalOpen(true); - setCurrentRow(record); - }} - > - -
-
- 告警名称:{' '} - - {record.warning_name} - -
-
- 来源设备:{' '} - - {record.device_name} - -
-
- 触发时间:{' '} - - {formatTimeByDateType(record.trigger_time)} - -
-
-
-
- ), - }; - }); - } - - setdataTestList(() => [...finalList]); - } - - // 初始化加载 - async function initList(tabId: string = tab) { - const reqParams = { - page: currentPage, - pageSize: currentPageSize, - // desc: false, - warning_type: tabId, - // ...rest, - }; - const resp = await postAlarmList({ ...reqParams }); - // console.log(resp,'resp'); - // setCurrentPageSize(resp?.data?.count) - setTotal(resp?.data?.count); - initDataTestList(resp?.data?.results); - // request={async (params = {}, sort) => { - // const { current, ...rest } = params; - // const reqParams = { - // page: current, - // desc: false, - // warning_type: tab, - // ...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 联调查询设备状态接口 - // console.log(reqParams, 'reqParams'); - // let resp = await postAlarmList({ ...reqParams }); - // console.log(resp, 'postAlarmList_result'); - - // initDataTestList(resp.result); - // // return { - // // data: resp.result, - // // success: resp.success, - // // total: resp.count, - // // current: resp.count, - // // pageSize: resp.count, - // // }; - // }} - } - useEffect(() => { - getTabs(); - // initList(); - }, []); - useEffect(() => { - // 模拟异步请求数据 - initList(); - }, [currentPage, currentPageSize]); - return ( - - //
- //
- // } - > - - { - changeProjectTab(key); - }} - > - - className="gn" - ghost={true} - itemCardProps={{ - ghost: true, - bodyStyle: { padding: 0, margin: 0 }, - style: { - width: '100%', - border: 0, - // minHeight: 700 - // padding: 0, margin: 0 - }, - }} - // search={{ - // labelWidth: proTableCommonOptions.searchLabelWidth, - // }} - // headerTitle={ - // <> - //
- // {Object.keys(tabOptions).map((item, index) => { - // // eslint-disable-next-line react/jsx-key - // return ( - // - // ); - // })} - //
- // - // } - cardProps={{ - bodyStyle: { - padding: '8px 16px 16px', - borderRadius: 8, - }, - }} - pagination={{ - ...proTablePaginationOptions, - total: total, - current: currentPage, - pageSize: currentPageSize, - showSizeChanger: true, - onChange: (page, pageSize) => { - console.log(page, pageSize); - setCurrentPage(page); - setCurrentPageSize(pageSize); - }, - }} - showActions="hover" - rowSelection={false} - grid={{ gutter: 16, xs: 1, md: 2, lg: 2, xl: 3, xxl: 3 }} - metas={{ - type: { - // 不展示在筛选项 - hideInSearch: true, - }, - content: { - hideInSearch: true, - }, - actions: { - cardActionProps: 'extra', - }, - // 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', - // }, - // }, - // }, - }} - dataSource={dataTestList} - /> -
- - {/* */} - - - ); -}; - -export default AlarmList; diff --git a/src/pages/RealTime/AlarmRules/components/UpdateForm.tsx b/src/pages/RealTime/AlarmRules/components/UpdateForm.tsx deleted file mode 100644 index 0dbca3a..0000000 --- a/src/pages/RealTime/AlarmRules/components/UpdateForm.tsx +++ /dev/null @@ -1,196 +0,0 @@ -import { postAlarmRules } from '@/services/realTime/alarmRules'; -import { ModalForm, ProForm, ProFormSwitch, ProFormText } from '@ant-design/pro-components'; -import { FormattedMessage, useIntl } from '@umijs/max'; -import { Form, message } from 'antd'; -import React from 'react'; -import { - proFormSmallItemStyleProps, - proFormSmallModelWidth, -} from '../../../../../config/defaultForm'; -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 UpdateForm: React.FC = (props) => { - const intl = useIntl(); - const [form] = Form.useForm(); - - return ( - - width={proFormSmallModelWidth} - title={intl.formatMessage({ - id: 'alarm_rules.page.form.title', - defaultMessage: `编辑单人徘徊告警`, - })} - open={props.updateModalOpen} - form={form} - autoFocusFirstInput - modalProps={{ - destroyOnClose: true, - onCancel: () => props.handleModal(), - okText: intl.formatMessage({ id: 'common.yes', defaultMessage: '确认' }), - cancelText: intl.formatMessage({ id: 'common.no', defaultMessage: '取消' }), - }} - submitTimeout={2000} - onFinish={async (values) => { - values.id = props.values.id; - values.is_use = values.is_use ? 1 : 0; - // console.log(values); - await postAlarmRules(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; - }} - > - - - } - checkedChildren="启用" - unCheckedChildren="关闭" - initialValue={props.values.is_use} - disabled={false} - /> - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.name', - defaultMessage: '告警名称', - })}`} - required={true} - initialValue={props.values.warning_name} - disabled={false} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> -
触发条件
-
- 当检测到风险人员单人,于 - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.triggerConditions', - defaultMessage: '触发条件', - })}`} - required={true} - initialValue={props.values.time_period} - disabled={false} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - 小时内,间隔 - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.triggerConditions', - defaultMessage: '触发条件', - })}`} - required={true} - initialValue={props.values.time_interval} - disabled={false} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - 小时,重复出现 - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.triggerConditions', - defaultMessage: '触发条件', - })}`} - required={true} - initialValue={props.values.appear_number} - disabled={false} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - 次,则触发警告。 -
-
- - ); -}; -export default UpdateForm; diff --git a/src/pages/RealTime/AlarmRules/components/UpdateMultiForm.tsx b/src/pages/RealTime/AlarmRules/components/UpdateMultiForm.tsx deleted file mode 100644 index bf08b09..0000000 --- a/src/pages/RealTime/AlarmRules/components/UpdateMultiForm.tsx +++ /dev/null @@ -1,230 +0,0 @@ -import { postAlarmRules } from '@/services/realTime/alarmRules'; -import { ModalForm, ProForm, ProFormSwitch, ProFormText } from '@ant-design/pro-components'; -import { FormattedMessage, useIntl } from '@umijs/max'; -import { Form, message } from 'antd'; -import React from 'react'; -import { - proFormSmallItemStyleProps, - proFormSmallModelWidth, -} from '../../../../../config/defaultForm'; -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 UpdateMultiForm: React.FC = (props) => { - const intl = useIntl(); - const [form] = Form.useForm(); - - return ( - - width={proFormSmallModelWidth} - title={intl.formatMessage({ - id: 'alarm_rules.page.form.multiTitle', - defaultMessage: `编辑${props.values.warning_name}`, - })} - open={props.updateModalOpen} - form={form} - autoFocusFirstInput - modalProps={{ - destroyOnClose: true, - onCancel: () => props.handleModal(), - okText: intl.formatMessage({ id: 'common.yes', defaultMessage: '确认' }), - cancelText: intl.formatMessage({ id: 'common.no', defaultMessage: '取消' }), - }} - submitTimeout={2000} - onFinish={async (values) => { - values.id = props.values.id; - values.is_use = values.is_use ? 1 : 0; - // console.log(values); - await postAlarmRules(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: 'alarm_rules.page.form.enabled', - defaultMessage: '$$$', - })}`} - required={false} - initialValue={props.values.enabled} - disabled={false} - /> */} - - } - checkedChildren="启用" - unCheckedChildren="关闭" - initialValue={props.values.is_use} - disabled={false} - /> - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.name', - defaultMessage: '告警名称', - })}`} - required={true} - initialValue={props.values.warning_name} - disabled={false} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> -
触发条件
-
- 当检测到风险人员人数大于 - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.triggerConditions', - defaultMessage: '触发条件', - })}`} - required={true} - initialValue={props.values.person_number} - disabled={false} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - 人时,则触发告警,触发间隔 - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.time_interval', - defaultMessage: '时间', - })}`} - required={true} - initialValue={props.values.time_interval} - disabled={false} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - 分钟。 -
- {/* { timeStatus && - ({ - // list: value, - // startTime: value[0], - // endTime: value[1], - time_period: value[0], - time_interval: value[1], - appear_number: value[2], - })} - className={styles} - > - 当处于} - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '$$$', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.triggerConditions', - defaultMessage: '$$$', - })}`} - required={false} - initialValue={props.values.trigger_start_time} - disabled={false} - />至 - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '$$$', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.triggerConditions', - defaultMessage: '$$$', - })}`} - required={false} - initialValue={props.values.trigger_end_time} - disabled={false} - />时间内,发现风险人员立即告警。 - } */} -
- - ); -}; -export default UpdateMultiForm; diff --git a/src/pages/RealTime/AlarmRules/components/UpdateTimeForm.tsx b/src/pages/RealTime/AlarmRules/components/UpdateTimeForm.tsx deleted file mode 100644 index c40de5a..0000000 --- a/src/pages/RealTime/AlarmRules/components/UpdateTimeForm.tsx +++ /dev/null @@ -1,229 +0,0 @@ -import { postAlarmRules } from '@/services/realTime/alarmRules'; -import { - ModalForm, - ProForm, - ProFormSwitch, - ProFormText, - ProFormTimePicker, -} from '@ant-design/pro-components'; -import { FormattedMessage, useIntl } from '@umijs/max'; -import { Form, message } from 'antd'; -import React from 'react'; -import { - proFormSmallItemStyleProps, - proFormSmallModelWidth, -} from '../../../../../config/defaultForm'; -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 UpdateTimeForm: React.FC = (props) => { - const intl = useIntl(); - const [form] = Form.useForm(); - - return ( - - width={proFormSmallModelWidth} - title={intl.formatMessage({ - id: 'alarm_rules.page.form.timeTitle', - defaultMessage: `编辑${props.values.warning_name}`, - })} - open={props.updateModalOpen} - form={form} - autoFocusFirstInput - modalProps={{ - destroyOnClose: true, - onCancel: () => props.handleModal(), - okText: intl.formatMessage({ id: 'common.yes', defaultMessage: '确认' }), - cancelText: intl.formatMessage({ id: 'common.no', defaultMessage: '取消' }), - }} - submitTimeout={2000} - onFinish={async (values) => { - values.id = props.values.id; - values.is_use = values.is_use ? 1 : 0; - // console.log(values); - await postAlarmRules(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: 'alarm_rules.page.form.enabled', - defaultMessage: '$$$', - })}`} - required={false} - initialValue={props.values.enabled} - disabled={false} - /> */} - - } - checkedChildren="启用" - unCheckedChildren="关闭" - initialValue={props.values.is_use} - disabled={false} - /> - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.name', - defaultMessage: '告警名称', - })}`} - required={true} - initialValue={props.values.warning_name} - disabled={false} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> -
- 触发条件 -
-
- 当处于 - - ), - }, - ]} - /> - {/* } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '$$$', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.triggerConditions', - defaultMessage: '$$$', - })}`} - required={false} - initialValue={props.values.trigger_start_time} - disabled={false} - /> */} - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.triggerConditions', - defaultMessage: '触发条件', - })}`} - required={true} - initialValue={props.values.trigger_end_time} - disabled={false} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - {/* } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '$$$', - })}${intl.formatMessage({ - id: 'alarm_rules.page.form.triggerConditions', - defaultMessage: '$$$', - })}`} - required={false} - initialValue={props.values.trigger_end_time} - disabled={false} - /> */} - 时间内,发现风险人员立即告警。 - {/* */} -
-
- - ); -}; -export default UpdateTimeForm; diff --git a/src/pages/RealTime/AlarmRules/components/updateForm.less b/src/pages/RealTime/AlarmRules/components/updateForm.less deleted file mode 100644 index bac1b0c..0000000 --- a/src/pages/RealTime/AlarmRules/components/updateForm.less +++ /dev/null @@ -1,7 +0,0 @@ -:global { - .ant-form-item-control-input-content { - .ant-space-gap-col-small { - align-items: center; - } - } -} diff --git a/src/pages/RealTime/AlarmRules/index.tsx b/src/pages/RealTime/AlarmRules/index.tsx deleted file mode 100644 index 76d4470..0000000 --- a/src/pages/RealTime/AlarmRules/index.tsx +++ /dev/null @@ -1,234 +0,0 @@ -import TableActionCard from '@/components/TableActionCard'; - -import { getAlarmRules } from '@/services/realTime/alarmRules'; -import { EditOutlined } from '@ant-design/icons'; -import type { ActionType, ProColumns } from '@ant-design/pro-components'; -import { PageContainer, ProTable } from '@ant-design/pro-components'; -import { FormattedMessage } from '@umijs/max'; -import { Button, Tag } from 'antd'; -import React, { useRef, useState } from 'react'; -import { proTablePaginationOptions } from '../../../../config/defaultTable'; -import UpdateForm from './components/UpdateForm'; -import UpdateMultiForm from './components/UpdateMultiForm'; -import UpdateTimeForm from './components/UpdateTimeForm'; -const AlarmRules: React.FC = () => { - /** - * @en-US International configuration - * @zh-CN 国际化配置 - * */ - const actionRef = useRef(); - // 动态设置每页数量 - const [currentPageSize, setCurrentPageSize] = useState(10); - - // const handleDestroy = async (selectedRow: API.DeviceCategory) => { - // // deleteDeviceCategoryDeleteDeviceCategory({ id: selectedRow.id }) - // // .then(() => { - // // message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '成功' })); - // // actionRef.current?.reload(); - // // }) - // // .catch(() => { - // // message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '失败' })); - // // }); - // }; - - const [currentRow, setCurrentRow] = useState(); - // 编辑弹框 - const [updateModalOpen, setUpdateModalOpen] = useState(false); - const [updateMultiModalOpen, setUpdateMultiModalOpen] = useState(false); - const [updateTimeModalOpen, setUpdateTimeModalOpen] = useState(false); - - const handleUpdateModal = () => { - if (updateModalOpen) { - setUpdateModalOpen(false); - setCurrentRow(undefined); - } else { - setUpdateModalOpen(true); - } - }; - const handleUpdateMultiModal = () => { - if (updateMultiModalOpen) { - setUpdateMultiModalOpen(false); - setCurrentRow(undefined); - } else { - setUpdateMultiModalOpen(true); - } - }; - const handleUpdateTimeModal = () => { - setCurrentRow(undefined); - - if (updateTimeModalOpen) { - setUpdateTimeModalOpen(false); - } else { - setUpdateTimeModalOpen(true); - } - }; - - const columns: ProColumns[] = [ - { - title: , - dataIndex: 'warning_name', - hideInSearch: true, - }, - - { - title: , - dataIndex: 'id', - hideInSearch: true, - }, - { - title: , - dataIndex: 'is_use', - hideInSearch: true, - render: (dom) => { - return ( - - {dom === 1 ? '已启用' : '未启用'} - - ); - }, - }, - { - title: , - dataIndex: 'update_time', - sorter: true, - hideInSearch: true, - valueType: 'dateTime', - }, - - { - title: , - dataIndex: 'option', - valueType: 'option', - fixed: 'right', - render: (_, record) => [ - - } - onClick={() => { - console.log(record); - if (record.id === 1) { - setUpdateModalOpen(true); - } else if (record.id === 2) { - setUpdateMultiModalOpen(true); - } else { - setUpdateTimeModalOpen(true); - } - setCurrentRow(record); - }} - > - - - ), - }, - // { - // key: 'destroy', - // renderDom: ( - // { - // handleDestroy(record).then(() => {}); - // }} - // > - // ), - // }, - ]} - >, - ], - }, - ]; - return ( - - - cardProps={{ - bodyStyle: { - padding: 20, - }, - }} - options={{ fullScreen: false, setting: false, density: false, reload: false }} - actionRef={actionRef} - rowKey="key" - search={false} - showSorterTooltip={false} - pagination={{ - ...proTablePaginationOptions, - pageSize: currentPageSize, - onChange: (page, pageSize) => setCurrentPageSize(pageSize), - }} - columnsState={{ - persistenceKey: 'device_category_list', - persistenceType: 'localStorage', - }} - 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'; - } - // let resp = await postDeviceCategoryGetDeviceCategoryList({ ...reqParams }); - let resp = await getAlarmRules(reqParams); - console.log(resp); - return { - data: resp.data.results.map((v: API.DeviceCategory) => { - return { ...v, key: v.id }; - }), - success: resp.success, - total: resp.data.count, - current: resp.data.page, - pageSize: resp.data.pageSize, - }; - }} - columns={columns} - /> - - - - - ); -}; - -export default AlarmRules; diff --git a/src/pages/RealTime/DeviceList/components/CaptureButton.tsx b/src/pages/RealTime/DeviceList/components/CaptureButton.tsx deleted file mode 100644 index 2793b72..0000000 --- a/src/pages/RealTime/DeviceList/components/CaptureButton.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import { postTestDevice } from '@/services/realTime/interfaces'; -import { RedoOutlined } from '@ant-design/icons'; -import { useIntl } from '@umijs/max'; -import { Button, Tag, message } from 'antd'; -import moment from 'moment'; -import React, { useState } from 'react'; - -interface ImageSinglePopoverProps { - values: any; - reload: any; -} - -const CaptureButton: React.FC = (props) => { - const intl = useIntl(); - const [loading, setLoading] = useState(false); - const connection = () => { - setLoading(true); - postTestDevice({ - device_ip: props.values.device_ip, - id: props.values.id, - }) - .then((res) => { - if (res.success) { - message.success(res.msg); - } - props.reload(); - setLoading(false); - }) - .catch(() => { - message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '失败' })); - setLoading(false); - }); - }; - - return ( -
- - {props.values.test_result === 1 ? '在线' : '离线'} - - {moment(props.values.test_time).format('YYYY-MM-DD hh:mm:ss')} -
- ); -}; - -export default CaptureButton; diff --git a/src/pages/RealTime/DeviceList/components/CaptureForm.less b/src/pages/RealTime/DeviceList/components/CaptureForm.less deleted file mode 100644 index 1c6b0c0..0000000 --- a/src/pages/RealTime/DeviceList/components/CaptureForm.less +++ /dev/null @@ -1,24 +0,0 @@ -.captureImgBox { - .captureImgDescribe { - margin-bottom: 12px; - color: #666; - font-weight: 500; - font-size: 16px; - font-family: PingFang SC; - span { - color: #333; - } - } - .captureImgContent { - display: flex; - justify-content: center; - box-sizing: border-box; - width: 100%; - margin-bottom: 24px; - padding: 16px; - // height: 172px; - background: #f7f7f7; - border: 1px dashed #dcdcdc; - border-radius: 4px; - } -} diff --git a/src/pages/RealTime/DeviceList/components/CaptureForm.tsx b/src/pages/RealTime/DeviceList/components/CaptureForm.tsx deleted file mode 100644 index dbac1c0..0000000 --- a/src/pages/RealTime/DeviceList/components/CaptureForm.tsx +++ /dev/null @@ -1,85 +0,0 @@ -/* - * @Author: donghao donghao@supervision.ltd - * @Date: 2024-04-03 13:15:26 - * @LastEditors: donghao donghao@supervision.ltd - * @LastEditTime: 2024-04-03 13:17:18 - * @FilePath: \uighur-recognition-web2\src\pages\RealTime\DeviceList\components\CaptureForm.tsx - * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE - */ -import { postInterfaces } from '@/services/realTime/interfaces'; -import { ModalForm } from '@ant-design/pro-components'; -import { useIntl } from '@umijs/max'; -import { Form, Image, message } from 'antd'; -import moment from 'moment'; -import React from 'react'; -import { proFormSmallModelWidth } from '../../../../../config/defaultForm'; -import styles from './CaptureForm.less'; -export type FormValueType = { - target?: string; - template?: string; - type?: string; - time?: string; - frequency?: string; -} & Partial; - -export type UpdateFormProps = { - captureModalOpen: boolean; - handleModal: () => void; - values: Partial; - reload: any; -}; -const CaptureForm: React.FC = (props) => { - const intl = useIntl(); - const [form] = Form.useForm(); - - return ( - - width={proFormSmallModelWidth} - title={intl.formatMessage({ - id: 'device.interface_manage.table.list.capture', - defaultMessage: `最近拍摄`, - })} - open={props.captureModalOpen} - form={form} - autoFocusFirstInput - modalProps={{ - destroyOnClose: true, - onCancel: () => { - props.handleModal(); - }, - // okText: intl.formatMessage({ id: 'common.okText', defaultMessage: '确认' }), - // cancelText: intl.formatMessage({ id: 'common.cancelText', defaultMessage: '取消' }), - }} - submitTimeout={2000} - submitter={false} - onFinish={async (values) => { - console.log(values); - values.id = props.values.id; - postInterfaces(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; - }} - > -
-
- 来源: {props.values.device_name} -
-
- 触发时间: {moment(props.values.appear_time).format('YYYY-MM-DD hh:mm:ss')} -
-
- -
-
- - ); -}; -export default CaptureForm; diff --git a/src/pages/RealTime/DeviceList/components/CreateForm.tsx b/src/pages/RealTime/DeviceList/components/CreateForm.tsx deleted file mode 100644 index 9a821b9..0000000 --- a/src/pages/RealTime/DeviceList/components/CreateForm.tsx +++ /dev/null @@ -1,212 +0,0 @@ -/** - * 接口管理新建弹框 - * - */ -import { postInterfaces, postTestDevice } from '@/services/realTime/interfaces'; -import { ModalForm, ProForm, ProFormText, ProFormTextArea } from '@ant-design/pro-components'; -import { FormattedMessage, useIntl } from '@umijs/max'; -import { Button, Form, message } from 'antd'; -import React, { useState } from 'react'; -import { - proFormSmallItemStyleProps, - proFormSmallModelWidth, -} from '../../../../../config/defaultForm'; -export type FormValueType = { - target?: string; - template?: string; - type?: string; - time?: string; - frequency?: string; -} & Partial; - -export type CreateFormProps = { - createModalOpen: boolean; - handleModal: () => void; - values: Partial; - reload: any; -}; -const CreateForm: React.FC = (props) => { - const intl = useIntl(); - const [form] = Form.useForm(); - const [loading, setLoading] = useState(false); - const connection = async () => { - setLoading(true); - console.log(form.getFieldsValue()); - postTestDevice({ - device_ip: form.getFieldsValue().device_ip, - }) - .then((res) => { - // message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '成功' })); - // props.reload(); - console.log(res); - if (res.success) { - message.success(res.msg); - } - setLoading(false); - }) - .catch(() => { - message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '失败' })); - }); - // setTimeout(() => { - // setLoading(false); - // }, 6000); - }; - - return ( - - width={proFormSmallModelWidth} - title={intl.formatMessage({ - id: 'device.interface_manage.table.list.addPic', - defaultMessage: '新建图像获取接口', - })} - open={props.createModalOpen} - form={form} - autoFocusFirstInput - modalProps={{ - destroyOnClose: true, - onCancel: () => { - setLoading(false); - props.handleModal(); - }, - okText: intl.formatMessage({ id: 'common.okText', defaultMessage: '确认' }), - cancelText: intl.formatMessage({ id: 'common.cancelText', defaultMessage: '取消' }), - }} - submitTimeout={2000} - onFinish={async (values) => { - console.log(values); - postInterfaces(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: 'device.interface_manage.table.list.name', - defaultMessage: '接口名称', - })}`} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.address', - defaultMessage: '接口地址', - })}`} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.ip', - defaultMessage: 'IP地址', - })}`} - required={true} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - addonAfter={ - - } - /> - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.remark', - defaultMessage: '备注', - })}`} - required={false} - /> - - - ); -}; -export default CreateForm; diff --git a/src/pages/RealTime/DeviceList/components/UpdateForm.tsx b/src/pages/RealTime/DeviceList/components/UpdateForm.tsx deleted file mode 100644 index 2c125fd..0000000 --- a/src/pages/RealTime/DeviceList/components/UpdateForm.tsx +++ /dev/null @@ -1,222 +0,0 @@ -/* - * @Author: zhoux zhouxia@supervision.ltd - * @Date: 2023-11-01 13:56:33 - * @LastEditors: donghao donghao@supervision.ltd - * @LastEditTime: 2024-04-03 13:17:58 - * @FilePath: \general-ai-platform-web\src\pages\Device\DeviceCategoryList\components\UpdateForm.tsx - * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE - */ -import { postInterfaces, postTestDevice } from '@/services/realTime/interfaces'; -import { ModalForm, ProForm, ProFormText, ProFormTextArea } from '@ant-design/pro-components'; -import { FormattedMessage, useIntl } from '@umijs/max'; -import { Button, Form, message } from 'antd'; -import React, { useState } from 'react'; -import { - proFormSmallItemStyleProps, - proFormSmallModelWidth, -} from '../../../../../config/defaultForm'; -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 UpdateForm: React.FC = (props) => { - const intl = useIntl(); - const [form] = Form.useForm(); - const [loading, setLoading] = useState(false); - const connection = () => { - setLoading(true); - console.log(props.values); - postTestDevice({ - device_ip: form.getFieldsValue().device_ip, - id: props.values.id, - }) - .then((res) => { - // message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '成功' })); - // props.reload(); - console.log(res); - if (res.success) { - message.success(res.msg); - } - setLoading(false); - }) - .catch(() => { - message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '失败' })); - setLoading(false); - }); - }; - - return ( - - width={proFormSmallModelWidth} - title={intl.formatMessage({ - id: 'device.interface_manage.table.list.updatePic', - defaultMessage: `编辑${props.values.device_name}`, - })} - open={props.updateModalOpen} - form={form} - autoFocusFirstInput - modalProps={{ - destroyOnClose: true, - onCancel: () => { - setLoading(false); - props.handleModal(); - }, - okText: intl.formatMessage({ id: 'common.okText', defaultMessage: '确认' }), - cancelText: intl.formatMessage({ id: 'common.cancelText', defaultMessage: '取消' }), - }} - submitTimeout={2000} - onFinish={async (values) => { - console.log(values); - values.id = props.values.id; - postInterfaces(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: 'device.interface_manage.table.list.name', - defaultMessage: '接口名称', - })}`} - required={true} - initialValue={props.values.device_name} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.address', - defaultMessage: '接口地址', - })}`} - required={true} - initialValue={props.values.device_api} - disabled={false} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - /> - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.ip', - defaultMessage: 'IP地址', - })}`} - required={true} - initialValue={props.values.device_ip} - rules={[ - { - required: true, - message: ( - - ), - }, - ]} - addonAfter={ - - } - /> - - } - placeholder={`${intl.formatMessage({ - id: 'common.please_input', - defaultMessage: '请输入', - })}${intl.formatMessage({ - id: 'device.interface_manage.table.list.remark', - defaultMessage: '备注', - })}`} - initialValue={props.values.note} - required={false} - /> - - - ); -}; -export default UpdateForm; diff --git a/src/pages/RealTime/DeviceList/index.tsx b/src/pages/RealTime/DeviceList/index.tsx deleted file mode 100644 index 63d805c..0000000 --- a/src/pages/RealTime/DeviceList/index.tsx +++ /dev/null @@ -1,298 +0,0 @@ -import TableActionCard from '@/components/TableActionCard'; -import IsDelete from '@/components/TableActionCard/isDelete'; -import { getInterfaces, postInterfaces } from '@/services/realTime/interfaces'; -import { EditOutlined, InstagramOutlined } from '@ant-design/icons'; -import type { ActionType, ProColumns } from '@ant-design/pro-components'; -import { PageContainer, ProTable } from '@ant-design/pro-components'; -import { FormattedMessage, useIntl } from '@umijs/max'; -import { Button, message } from 'antd'; -import React, { useRef, useState } from 'react'; -import { proTablePaginationOptions } from '../../../../config/defaultTable'; -import CaptureButton from './components/CaptureButton'; -import CaptureForm from './components/CaptureForm'; -import CreateForm from './components/CreateForm'; -import UpdateForm from './components/UpdateForm'; -const DeviceList: React.FC = () => { - /** - * @en-US International configuration - * @zh-CN 国际化配置 - * */ - const intl = useIntl(); - const actionRef = useRef(); - // 动态设置每页数量 - const [currentPageSize, setCurrentPageSize] = useState(10); - - const handleDestroy = async (selectedRow: API.UpdateInterfacesParams) => { - postInterfaces({ id: selectedRow.id, device_status: '3' }) - .then(() => { - message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '成功' })); - actionRef.current?.reload(); - }) - .catch(() => { - message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '失败' })); - }); - }; - - const [currentRow, setCurrentRow] = useState(); - /** - * @en-US Pop-up window of new window - * @zh-CN 新建窗口的弹窗 - * */ - const [createModalOpen, setCreateModalOpen] = useState(false); - const handleCreateModal = () => { - if (createModalOpen) { - setCreateModalOpen(false); - setCurrentRow(undefined); - } else { - setCreateModalOpen(true); - } - }; - // 编辑弹框 - const [updateModalOpen, setUpdateModalOpen] = useState(false); - - const handleUpdateModal = () => { - if (updateModalOpen) { - setUpdateModalOpen(false); - setCurrentRow(undefined); - } else { - setUpdateModalOpen(true); - } - }; - - // 最近拍摄 - const [captureModalOpen, setCaptureModalOpen] = useState(false); - - const handleCaptureModal = () => { - console.log(captureModalOpen); - if (captureModalOpen) { - setCaptureModalOpen(false); - setCurrentRow(undefined); - } else { - setCaptureModalOpen(true); - } - }; - const columns: ProColumns[] = [ - { - title: ( - - ), - dataIndex: 'device_name', - hideInSearch: true, - }, - { - title: , - dataIndex: 'test_result', - hideInSearch: true, - render: (dom, entity) => { - return ; - }, - }, - // { - // title: , - // dataIndex: 'device_api', - // hideInSearch: true, - // }, - // { - // title: , - // dataIndex: 'test_time', - // sorter: true, - // hideInSearch: true, - // valueType: 'dateTime', - // }, - { - title: ( - - ), - dataIndex: 'create_time', - sorter: true, - hideInSearch: true, - valueType: 'dateTime', - }, - - { - title: , - dataIndex: 'option', - valueType: 'option', - width: '260px', - fixed: 'right', - render: (_, record) => [ - - } - onClick={() => { - console.log('11'); - setCaptureModalOpen(true); - setCurrentRow(record); - }} - > - {/* 最近拍摄 */} - - - ), - }, - { - key: 'update', - renderDom: ( - - ), - }, - { - key: 'destroy', - renderDom: ( - { - handleDestroy(record).then(() => {}); - }} - > - ), - }, - ]} - >, - ], - }, - ]; - return ( - -
- 设备管理 -
- -
- } - > - - cardProps={{ - bodyStyle: { - padding: 20, - }, - }} - options={{ fullScreen: false, setting: false, density: false, reload: false }} - actionRef={actionRef} - rowKey="key" - search={false} - showSorterTooltip={false} - pagination={{ - ...proTablePaginationOptions, - pageSize: currentPageSize, - onChange: (page, pageSize) => setCurrentPageSize(pageSize), - }} - columnsState={{ - persistenceKey: 'device_category_list', - persistenceType: 'localStorage', - }} - 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'; - } - let resp = await getInterfaces({ ...reqParams }); - return { - data: resp.data.results.map((v: API.DeviceCategory) => { - return { ...v, key: v.id }; - }), - success: resp.success, - total: resp.data.count, - current: resp.data.page, - pageSize: resp.data.pageSize, - }; - }} - columns={columns} - /> - - - - - ); -}; - -export default DeviceList; diff --git a/src/pages/RealTime/InvolvedList/components/ImageWithPopover.tsx b/src/pages/RealTime/InvolvedList/components/ImageWithPopover.tsx deleted file mode 100644 index 01a8c8a..0000000 --- a/src/pages/RealTime/InvolvedList/components/ImageWithPopover.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import { postRecognition } from '@/services/realTime/involved'; -import { CloseCircleOutlined, EllipsisOutlined } from '@ant-design/icons'; -import { useIntl } from '@umijs/max'; -import { Button, Image, Popover, message } from 'antd'; -import React, { useState } from 'react'; - -interface ImageWithPopoverProps { - src: string; - reload: any; - person_id: any; -} - -const ImageWithPopover: React.FC = ({ src, person_id, reload }) => { - const intl = useIntl(); - const [open, setOpen] = useState(false); - - const content = ( -
- {/*
选项1
-
选项2
*/} - -
- ); - - const handleOpenChange = (value: boolean) => { - setOpen(value); - }; - const handleButtonClick = (event: React.MouseEvent) => { - event.stopPropagation(); // 阻止事件冒泡到父组件并阻止默认事件触发 - }; - - return ( -
- - -
- ); -}; - -export default ImageWithPopover; diff --git a/src/pages/RealTime/InvolvedList/components/InvolvedDetails.less b/src/pages/RealTime/InvolvedList/components/InvolvedDetails.less deleted file mode 100644 index 4ddce5a..0000000 --- a/src/pages/RealTime/InvolvedList/components/InvolvedDetails.less +++ /dev/null @@ -1,26 +0,0 @@ -.InvolvedImgBox { - box-sizing: border-box; - // display: flex; - // justify-content: flex-start; - padding: 16px 32px; - border-top: 1px solid #e0e0e0; - .involvedImgList { - position: relative; - span { - position: absolute; - bottom: -30px; - left: 15px; - width: 2px; - height: 30px; - border-left: 2px dashed #081fa8; - } - } -} -.myButtonDisabled { - visibility: hidden; -} -.involvedModalForm { - .ant-modal .ant-modal-content { - padding: 0 !important; - } -} diff --git a/src/pages/RealTime/InvolvedList/components/InvolvedDetails.tsx b/src/pages/RealTime/InvolvedList/components/InvolvedDetails.tsx deleted file mode 100644 index 83fdf39..0000000 --- a/src/pages/RealTime/InvolvedList/components/InvolvedDetails.tsx +++ /dev/null @@ -1,318 +0,0 @@ -import { getInvolvedTravelList, postRecognition } from '@/services/realTime/involved'; -import { CloseCircleOutlined, EllipsisOutlined } from '@ant-design/icons'; -import { ModalForm } from '@ant-design/pro-components'; -import { useIntl } from '@umijs/max'; -import { Button, Form, Image, List, Popover, message } from 'antd'; -import moment from 'moment'; -import VirtualList from 'rc-virtual-list'; -import React, { useEffect, useState } from 'react'; -import trajectoryBottom from '../../../../../public/images/involved/trajectoryBottom.png'; -import './InvolvedDetails.less'; -import styles from './InvolvedDetails.less'; -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 InvolvedDetails: React.FC = (props) => { - const intl = useIntl(); - const [form] = Form.useForm(); - const [dataFlag, setDataFlag] = useState(false); - const [open, setOpen] = useState(false); - const [trajectoryData, setTrajectoryData] = useState([]); - // 动态设置每页数量 - const [currentPageSize, setCurrentPageSize] = useState(10); - const [currentPage, setCurrentPage] = useState(1); - const [total, setTotal] = useState(0); - const ContainerHeight = 630; - const content = ( -
- {/*
选项1
-
选项2
*/} - -
- ); - const handleOpenChange = (value: boolean) => { - setOpen(value); - }; - - const appendData = (page: any, pageSize: any) => { - const reqParams = { - page: page, - pageSize: pageSize, - // desc: false, - person_id: props.values.person_id, - // ...rest, - }; - getInvolvedTravelList(reqParams) - .then((res) => { - console.log(res); - if (res.data.results) { - setTrajectoryData(trajectoryData.concat(res.data.results)); - setTotal(res.data.count); - if (res.data.next) { - setDataFlag(true); - } else { - setDataFlag(false); - // setTrajectoryData([]); // 重置trajectoryData数据为空数组 - } - } - }) - .catch(() => { - // setLoading(false); - setDataFlag(false); - // setTrajectoryData([]); // 重置trajectoryData数据为空数组 - }); - }; - const onScroll = (e: React.UIEvent) => { - // Refer to: https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#problems_and_solutions - console.log(e.currentTarget.scrollHeight - e.currentTarget.scrollTop - ContainerHeight); - - if (Math.abs(e.currentTarget.scrollHeight - e.currentTarget.scrollTop - ContainerHeight) <= 1) { - if (dataFlag) { - const nextPage = currentPage + 1; - setCurrentPage(nextPage); - appendData(nextPage, 10); - } - } - }; - useEffect(() => { - if (props.updateModalOpen) { - // 调用接口获取数据 - setTrajectoryData([]); // 重置trajectoryData数据为空数组 - setCurrentPage(1); - setCurrentPageSize(10); - appendData(currentPage, currentPageSize); - } - }, [props.updateModalOpen]); - return ( - - width={615} - title={ -
-
- - -
-
-
- 关注时间:{' '} - - {moment(props?.values?.classify_time).format('YYYY-MM-DD hh:mm:ss')} - -
-
- 最近发现:{' '} - - {moment(props?.values?.appear_time).format('YYYY-MM-DD hh:mm:ss')} - -
-
- 来源设备:{' '} - - {props?.values?.device_name} - -
-
-
- } - open={props.updateModalOpen} - form={form} - autoFocusFirstInput - modalProps={{ - destroyOnClose: true, - onCancel: () => { - setTrajectoryData([]); - setCurrentPage(1); - setCurrentPageSize(10); - props.handleModal(); - }, - wrapClassName: 'involvedModalForm', - }} - submitter={false} - submitTimeout={2000} - onFinish={async (values) => { - values.is_ignore = true; - values.person_id = props.values.person_id; - // console.log(values); - // postIgnoringvents(values) - // .then(() => { - // message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '成功' })); - // props.reload(); - // }) - // .catch(() => { - // message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '失败' })); - // }); - setTrajectoryData([]); - setCurrentPage(1); - setCurrentPageSize(10); - props.handleModal(); - return true; - }} - > - {/* */} - {/*
- 告警名称: 单人徘徊告警来源设备: 北广场检票口1#摄像头触发时间: 2023-01-15 22:00:03 -
*/} -
- - - {(item: any, index: any) => ( -
- - - - {index + 1 !== total && } -
- } - title={ -
- 拍摄时间:{' '} - - {moment(item.appear_time).format('YYYY-MM-DD hh:mm:ss')} - {' '} - 来源设备: {item.device_name} -
- } - /> -
- -
- - {index === total - 1 && ( -
已无更多数据~
- )} -
- )} - - - - - {/*
*/} - - ); -}; -export default InvolvedDetails; diff --git a/src/pages/RealTime/InvolvedList/index.tsx b/src/pages/RealTime/InvolvedList/index.tsx deleted file mode 100644 index 77e5e3c..0000000 --- a/src/pages/RealTime/InvolvedList/index.tsx +++ /dev/null @@ -1,470 +0,0 @@ -import { alarmRulesEnums } from '@/enums/status'; -import { PageContainer, ProCard, ProList } from '@ant-design/pro-components'; -import { Button, DatePicker } from 'antd'; -import React, { useEffect, useState } from 'react'; -import { proTablePaginationOptions } from '../../../../config/defaultTable'; -// import DeviceStatusCard from './components/DeviceStatusCard'; -// import CreateForm from './components/CreateForm'; -import { getInvolvedList } from '@/services/realTime/involved'; -import locale from 'antd/es/date-picker/locale/zh_CN'; -import moment from 'moment'; -import ImageWithPopover from './components/ImageWithPopover'; -import InvolvedDetails from './components/InvolvedDetails'; - -/** - * @交互说明 - * 1、列表分页展示服务器状态 - */ -// const tabOptions: Record = { -// singlePersonHoveringAlarm: 90, -// multiplePersonGatheringAlarm: 20, -// sensitiveTimePeriodAlarm: 20, -// ignored: 2, -// // processingStatus: 10, -// // errorStatus: 20, -// }; -// export type DeleteBoxProps = { -// modalOpen: boolean; -// handleModal: () => void; -// values: any; -// reload: any; -// }; - -const InvolvedList: React.FC = () => { - // const [cardActionProps, setCardActionProps] = useState<'actions' | 'extra'>('extra'); - /** - * @en-US Pop-up window of new window - * @zh-CN 新建窗口的弹窗 - * */ - // const [createModalOpen, setCreateModalOpen] = useState(false); - /** - * @en-US The pop-up window of the distribution update window - * @zh-CN 更新窗口的弹窗 - * */ - const [updateModalOpen, setUpdateModalOpen] = useState(false); - /** - * @en-US The pop-up window of the distribution update window - * @zh-CN 删除窗口 - * */ - // const [modalOpen, setModalOpen] = useState(false); - const [currentRow, setCurrentRow] = useState>({}); - /** - * @en-US International configuration - * @zh-CN 国际化配置 - * */ - // const access = useAccess(); - // const intl = useIntl(); - // const actionRef = useRef(); - // 动态设置每页数量 - const [currentPageSize, setCurrentPageSize] = useState(10); - const [currentPage, setCurrentPage] = useState(1); - const [total, setTotal] = useState(0); - - // const [activeTabIndex, setActiveTabIndex] = useState(0); - const [dataTestList, setdataTestList] = useState([]); - - const [tab] = useState(alarmRulesEnums[0].key); - // const [tabs, setTabs] = useState([]); - - const [importDate, setImportDate] = useState(null); - const [innerDate, setInnerDate] = useState(null); - // const changeProjectTab = (key: string) => { - // setTab(key); - // console.log(key); - // // eslint-disable-next-line @typescript-eslint/no-use-before-define - // initList(key) - // }; - // const getTabs = () => { - // // if (alarmRulesEnums.length) { - // // setTab(alarmRulesEnums[0].key); - // // } - // setTabs(alarmRulesEnums); - // }; - // useEffect(() => { - // getTabs(); - // }, []); - // const handleCreateModal = () => { - // if (createModalOpen) { - // setCreateModalOpen(false); - // setCurrentRow(undefined); - // } else { - // setCreateModalOpen(true); - // } - // }; - - const handleUpdateModal = () => { - if (updateModalOpen) { - setUpdateModalOpen(false); - setCurrentRow(undefined); - } else { - setUpdateModalOpen(true); - } - }; - - // const handleDestroy = async () => { - // if (modalOpen) { - // setModalOpen(false); - // setCurrentRow(undefined); - // } else { - // setModalOpen(true); - // } - // // deleteBusinessImageDeleteBusinessImage({ id: selectedRow.id }) - // // .then(() => { - // // message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '$$$' })); - // // actionRef.current?.reload(); - // // }) - // // .catch(() => { - // // message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' })); - // // }); - // }; - - // const { confirm } = Modal; - // const showConfirm = (record: any) => { - // confirm({ - // title: `确定删除${record.name}吗`, - // icon: , - // content: '确定删除服务器1吗?删除后将找不到此服务器,请谨慎操作.', - // okText: '确认', - // cancelText: '取消', - // width: 560, - // onOk() { - // console.log('OK'); - // }, - // onCancel() { - // console.log('Cancel'); - // }, - // }); - // }; - - // 处理初始值 - function initDataTestList(dataList: Record[]) { - console.log(dataList, 'initDataTestList'); - let finalList: { content: React.JSX.Element }[] = []; - if (Array.isArray(dataList) && dataList.length) { - finalList = dataList.map((record, index) => { - return { - content: ( - -
{ - console.log(index, 'index'); - setUpdateModalOpen(true); - setCurrentRow(record); - }} - > - {/* */} - -
-
- 关注时间:{' '} - - {moment(record.classify_time).format('YYYY-MM-DD hh:mm:ss')} - -
-
- 最近发现:{' '} - - {moment(record.appear_time).format('YYYY-MM-DD hh:mm:ss')} - -
-
- 来源设备:{' '} - - {record.device_name} - -
-
-
-
- ), - }; - }); - } - - setdataTestList(() => [...finalList]); - } - - // 初始化加载 - async function initList(tabId: string = '1', date: any = null) { - const reqParams = { - page: currentPage, - pageSize: currentPageSize, - // desc: false, - classify: tabId, - analyse_time: date, - // ...rest, - }; - const resp = await getInvolvedList({ ...reqParams }); - // console.log(resp,'resp'); - // setCurrentPageSize(resp?.data?.count) - setTotal(resp?.data?.count); - initDataTestList(resp?.data?.results); - // request={async (params = {}, sort) => { - // const { current, ...rest } = params; - // const reqParams = { - // page: current, - // desc: false, - // warning_type: tab, - // ...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 联调查询设备状态接口 - // console.log(reqParams, 'reqParams'); - // let resp = await postAlarmList({ ...reqParams }); - // console.log(resp, 'postAlarmList_result'); - - // initDataTestList(resp.result); - // // return { - // // data: resp.result, - // // success: resp.success, - // // total: resp.count, - // // current: resp.count, - // // pageSize: resp.count, - // // }; - // }} - } - const onChange: DatePickerProps['onChange'] = (date, dateString) => { - console.log(dateString); - setImportDate(date); - setInnerDate(dateString); - console.log(importDate, 'importDate'); - }; - // useEffect(() => { - // // getTabs(); - // // initList(); - // }, []); - useEffect(() => { - // 模拟异步请求数据 - initList(); - }, [currentPage, currentPageSize]); - return ( - - //
- // - // } - > - - {/* { - changeProjectTab(key); - }} - > */} -
- 选择导入时间: - - - -
- - className="gn" - ghost={true} - itemCardProps={{ - ghost: true, - bodyStyle: { padding: 0, margin: 0 }, - style: { - width: '100%', - border: 0, - // minHeight: 700 - // padding: 0, margin: 0 - }, - }} - // search={{ - // labelWidth: proTableCommonOptions.searchLabelWidth, - // }} - // headerTitle={ - // <> - //
- // {Object.keys(tabOptions).map((item, index) => { - // // eslint-disable-next-line react/jsx-key - // return ( - // - // ); - // })} - //
- // - // } - cardProps={{ - bodyStyle: { - padding: '8px 16px 16px', - borderRadius: 8, - }, - }} - pagination={{ - ...proTablePaginationOptions, - total: total, - current: currentPage, - pageSize: currentPageSize, - showSizeChanger: true, - onChange: (page, pageSize) => { - console.log(page, pageSize); - setCurrentPage(page); - setCurrentPageSize(pageSize); - }, - }} - showActions="hover" - rowSelection={false} - grid={{ gutter: 16, xs: 1, md: 2, lg: 2, xl: 3, xxl: 4 }} - metas={{ - type: { - // 不展示在筛选项 - hideInSearch: true, - }, - content: { - hideInSearch: true, - }, - actions: { - cardActionProps: 'extra', - }, - // 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', - // }, - // }, - // }, - }} - dataSource={dataTestList} - /> -
- - {/* */} - -
- ); -}; - -export default InvolvedList; diff --git a/src/pages/User/Login/__snapshots__/login.test.tsx.snap b/src/pages/User/Login/__snapshots__/login.test.tsx.snap index e6fd702..d35b716 100644 --- a/src/pages/User/Login/__snapshots__/login.test.tsx.snap +++ b/src/pages/User/Login/__snapshots__/login.test.tsx.snap @@ -852,7 +852,7 @@ exports[`Login Page should show login form 1`] = ` class="ant-form-item-control-input-content" > diff --git a/src/pages/User/Login/index.tsx b/src/pages/User/Login/index.tsx index d834d7f..de0c723 100644 --- a/src/pages/User/Login/index.tsx +++ b/src/pages/User/Login/index.tsx @@ -1,10 +1,10 @@ // import Footer from '@/components/Footer'; import zhCN from '@/locales/zh-CN'; import { postBaseLogin } from '@/services/system/Base'; -import { postMenuGetMenu } from '@/services/system/Menu'; import { getAllRouteNameTile, replaceMenuWithRoutesData } from '@/utils/common'; import { getLocale } from '@@/exports'; import { addLocale } from '@@/plugin-locale'; +import { innerMenuRoutes } from '../../../../config/routes'; import { LockOutlined, UserOutlined } from '@ant-design/icons'; import { @@ -120,11 +120,11 @@ const Login: React.FC = () => { // }, []); const fetchUserInfo = async () => { const userInfo = await initialState?.fetchUserInfo?.(); - const menus = await postMenuGetMenu(); + const menusData = innerMenuRoutes; if (userInfo) { // console.log("fetchUserInfo_userInfo", userInfo); if (getLocale() === 'zh-CN') { - let localData = getAllRouteNameTile(menus.data.routes, ''); + let localData = getAllRouteNameTile(menusData, ''); let localRes: any = {}; localData.forEach((v) => { localRes[`menu${v.name}`] = v.title; @@ -139,7 +139,7 @@ const Login: React.FC = () => { setInitialState((s) => ({ ...s, currentUser: userInfo, - menuData: replaceMenuWithRoutesData(menus.data.routes), + menuData: replaceMenuWithRoutesData(menusData), })); }); } @@ -190,7 +190,8 @@ const Login: React.FC = () => { const [form] = Form.useForm>(); useEffect(() => { - form.setFieldsValue({ username: 'admin', password: 'Sju2984?' }); + // localStorage.removeItem('access') + form.setFieldsValue({ username: 'admin', psw: 'Sju2984?' }); // console.log(form.getFieldsValue(), 'login_form'); }, []); @@ -244,9 +245,11 @@ const Login: React.FC = () => { }, }} title="欢迎登录" - initialValues={{ - autoLogin: false, - }} + initialValues={ + { + // autoLogin: false, + } + } loading={loginLoading} onFinish={async (values) => { await handleSubmit(values as API.LoginParams); @@ -277,7 +280,7 @@ const Login: React.FC = () => { ]} > { marginBlockEnd: 24, }} > - - 自动登录 - + 自动登录 , @@ -62,6 +63,7 @@ const iconMap: any = { GatewayOutlined: , BellOutlined: , PictureOutlined: , + TestIcon: , }; // FIX从接口获取菜单时icon为string类型 const fixMenuItemIcon = (menus: MenuDataItem[]): MenuDataItem[] => { diff --git a/types/index.d.ts b/types/index.d.ts index 2c2805a..065ab8d 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -102,7 +102,7 @@ export namespace API { /** example: admin */ username: string; /** example: ant.design */ - password: string; + psw: string; /** example: true */ autoLogin: boolean; /** example: account */