diff --git a/config/defaultForm.ts b/config/defaultForm.ts index 7d8002a..c42b4a5 100644 --- a/config/defaultForm.ts +++ b/config/defaultForm.ts @@ -2,7 +2,7 @@ * @Author: zhoux zhouxia@supervision.ltd * @Date: 2023-11-13 14:19:57 * @LastEditors: donghao donghao@supervision.ltd - * @LastEditTime: 2024-05-13 10:20:45 + * @LastEditTime: 2024-08-20 10:49:49 * @FilePath: \general-ai-platform-web\config\defaultForm.ts * @Description: 表单类默认字段统一配置 */ @@ -27,6 +27,9 @@ export const proFormCommonOptions: Record = {}; const formBoxMargin = 2 * 24; const formItemGap = 12; +// mini 560 +export const proModalMiniModelWidth: number = 560; + // Small 640 export const proFormSmallModelWidth: number = 640; export const proFormSmallItemStyleProps: Record = { diff --git a/public/icons/背景(1).svg b/public/icons/背景(1).svg new file mode 100644 index 0000000..ce6ca75 --- /dev/null +++ b/public/icons/背景(1).svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/public/icons/通用平台增.md b/public/icons/通用平台增.md new file mode 100644 index 0000000..fe0307a --- /dev/null +++ b/public/icons/通用平台增.md @@ -0,0 +1,168 @@ + +

通用平台

+ + + +# 公共分类 + + +## 布点新增 + +### 基本信息 + +**Path:** /api/workshops/ + +**Method:** POST + +**接口描述:** + + +### 请求参数 +**Headers** + +| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 | +| ------------ | ------------ | ------------ | ------------ | ------------ | +| Content-Type | multipart/form-data | 是 | | | +**Body** + +| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 | +| ------------ | ------------ | ------------ | ------------ | ------------ | +| name | text | 是 | | 布点名称 | +| picture | file | 是 | | 上传图片 | + + + +### 返回数据 + + + + + + + + +
名称类型是否必须默认值备注其他信息
+ +## 布点设备 + +### 基本信息 + +**Path:** /api/workshop_devices/ + +**Method:** POST + +**接口描述:** + + +### 请求参数 +**Headers** + +| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 | +| ------------ | ------------ | ------------ | ------------ | ------------ | +| Content-Type | application/x-www-form-urlencoded | 是 | | | +**Body** + +| 参数名称 | 参数类型 | 是否必须 | 示例 | 备注 | +| ------------ | ------------ | ------------ | ------------ | ------------ | +| workshop_id | text | 是 | | 布点id | +| device_id | text | 是 | | 设备id | +| x_ordinate | text | 是 | | 横坐标 | +| y_ordinate | text | 是 | | 纵坐标 | +| icon | text | 是 | | 图标 | + + + +### 返回数据 + + + + + + + + +
名称类型是否必须默认值备注其他信息
+ +## + + +## + +## 获取关联设备 + +### 基本信息 + +**Path:** /api/get_devices/ + +**Method:** GET + +**接口描述:** + + +### 请求参数 + +### 返回数据 + + + + + + + + +
名称类型是否必须默认值备注其他信息
dataobject []非必须

item 类型: object

├─ idnumber非必须
├─ suidstring非必须
├─ entity_idnumber非必须
├─ entity_suidstring非必须
├─ node_idnumber非必须
├─ node_suidstring非必须
├─ classificationstring非必须
├─ namestring非必须
├─ addrstring非必须
├─ device_modelstring非必须
├─ paramstring非必须
├─ commentstring非必须
├─ statusnumber非必须
├─ is_usednumber非必须
├─ create_timestring非必须
├─ update_timestring非必须
├─ is_camboolean非必须
msgnull非必须
successboolean非必须
statusnumber非必须
+ + +## 获取布点 + + +### 基本信息 + +**Path:** /api/workshops/ + +**Method:** GET + +**接口描述:** + + +### 请求参数 + +### 返回数据 + + + + + + + + +
名称类型是否必须默认值备注其他信息
dataobject非必须
├─ countnumber非必须
├─ nextnull非必须
├─ previousnull非必须
├─ resultsobject []非必须

item 类型: object

├─ idnumber非必须
├─ namestring非必须
├─ picturestring非必须
├─ statusnumber非必须
├─ create_timestring非必须
├─ update_timestring非必须
msgnull非必须
successboolean非必须
statusnumber非必须
+ +## 获取布点设备 + +### 基本信息 + +**Path:** /api/workshop_devices/ + +**Method:** GET + +**接口描述:** + + +### 请求参数 +**Query** + +| 参数名称 | 是否必须 | 示例 | 备注 | +| ------------ | ------------ | ------------ | ------------ | +| workshop_id | 否 | | 布点id | + +### 返回数据 + + + + + + + + +
名称类型是否必须默认值备注其他信息
dataobject非必须
├─ countnumber非必须
├─ nextnull非必须
├─ previousnull非必须
├─ resultsobject []非必须

item 类型: object

├─ idnumber非必须
├─ workshop_idnumber非必须
├─ device_idnumber非必须
├─ x_ordinatestring非必须
├─ y_ordinatestring非必须
├─ iconstring非必须
├─ statusnumber非必须
├─ create_timestring非必须
├─ update_timestring非必须
msgnull非必须
successboolean非必须
statusnumber非必须
diff --git a/public/images/package_loading.gif b/public/images/package_loading.gif new file mode 100644 index 0000000..30ff2f5 Binary files /dev/null and b/public/images/package_loading.gif differ diff --git a/public/images/package_warn.png b/public/images/package_warn.png new file mode 100644 index 0000000..5de86b2 Binary files /dev/null and b/public/images/package_warn.png differ diff --git a/src/app.tsx b/src/app.tsx index 6924ec6..8043a13 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -1,4 +1,5 @@ import { AvatarDropdown, AvatarName, MenuBar } from '@/components'; +import { PackageDeployment } from '@/components/Settings'; // import fixMenuItemIcon from '@/utils/FixMenuItemIcon'; import { getAllRouteNameTile, replaceMenuWithRoutesData } from '@/utils/common'; import { addLocale } from '@@/plugin-locale'; @@ -222,6 +223,7 @@ export const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) =
{children} + {isDev && ( li { + padding: 8px; + font-weight: 500; +} +.packageDeployment_wrap .packageDeployment_box > li > div { + padding-top: 2px; + font-size: 12px; +} +.packageDeployment_wrap .packageDeployment_box > li:nth-child(2) { + height: 1px; + margin: 0; + padding: 0; +} +.packageDeployment_wrap .packageDeployment_box > li:nth-child(2) > span { + display: inline-block; + width: 24px; + height: 1px; + overflow: hidden; + background-color: rgba(255, 255, 255, 0.4); +} +.package_item_box { + padding: 16px 0; + /* 打包验证中 */ + /* 打包错误 */ +} +.package_item_box.package_loading_box { + padding: 25px 0; +} +.package_item_box .package_result_box img { + width: 88px; + height: 88px; +} +.package_item_box .warn_content_box { + margin-top: 16px; + padding: 16px !important; + color: #000000; + font-weight: 700; + font-size: 14px; + background: rgba(80, 112, 242, 0.1); + border-radius: 4px; +} +.package_item_box .warn_content_box > li { + padding-bottom: 12px; +} +.package_item_box .warn_content_box > li:last-child { + padding-bottom: 0; +} diff --git a/src/components/Settings/src/packageDeployment.less b/src/components/Settings/src/packageDeployment.less new file mode 100644 index 0000000..a3e4b73 --- /dev/null +++ b/src/components/Settings/src/packageDeployment.less @@ -0,0 +1,61 @@ +.packageDeployment_wrap { + position: fixed; + top: calc(61.8% - 55px); + right: 0; + z-index: 999; + color: #fff; + background: #154ddd; + border-radius: 2px; + .packageDeployment_box { + & > li { + padding: 8px; + font-weight: 500; + & > div { + padding-top: 2px; + font-size: 12px; + } + + &:nth-child(2) { + height: 1px; + margin: 0; + padding: 0; + & > span { + display: inline-block; + width: 24px; + height: 1px; + overflow: hidden; + background-color: rgba(255, 255, 255, 0.4); + } + } + } + } +} +.package_item_box { + padding: 16px 0; + /* 打包验证中 */ + &.package_loading_box { + padding: 25px 0; + } + /* 打包错误 */ + .package_result_box { + img { + width: 88px; + height: 88px; + } + } + .warn_content_box { + margin-top: 16px; + padding: 16px !important; + color: #000000; + font-weight: 700; + font-size: 14px; + background: rgba(80, 112, 242, 0.1); + border-radius: 4px; + & > li { + padding-bottom: 12px; + &:last-child { + padding-bottom: 0; + } + } + } +} diff --git a/src/components/Settings/src/packageDeployment.tsx b/src/components/Settings/src/packageDeployment.tsx new file mode 100644 index 0000000..f66e608 --- /dev/null +++ b/src/components/Settings/src/packageDeployment.tsx @@ -0,0 +1,222 @@ +/* + * @Author: donghao donghao@supervision.ltd + * @Date: 2024-08-19 16:42:40 + * @LastEditors: donghao donghao@supervision.ltd + * @LastEditTime: 2024-08-20 17:57:10 + * @FilePath: \general-ai-platform-web\src\components\Animate\src\packageDeployment.tsx + * @Description: 打包部署 + */ +import { apiSystemLog } from '@/services/business/system'; +import { isSuccessApi } from '@/utils/forApi'; +import type { ActionType, ProColumns } from '@ant-design/pro-components'; +import { ProTable } from '@ant-design/pro-components'; +import { FormattedMessage } from '@umijs/max'; + +import { Modal } from 'antd'; +import React, { useEffect, useRef, useState } from 'react'; +import { proFormSmallModelWidth, proModalMiniModelWidth } from '../../../../config/defaultForm'; +import { proTableDefaultOptions, proTablePaginationOptions } from '../../../../config/defaultTable'; +import './packageDeployment.less'; +import packageLoadingIcon from '/public/images/package_loading.gif'; +import packageWarnIcon from '/public/images/package_warn.png'; + +type PackageDeploymentProps = { + className?: string; + style?: React.CSSProperties; +}; + +// TODO 完善打包的静态交互 + +const PackageDeployment: React.FC = (props) => { + const [isConfigModalOpen, setIsConfigModalOpen] = useState(false); + const [packageStatus] = useState(''); // loading + const [isHistoryModalOpen, setIsHistoryModalOpen] = useState(false); + const actionRef = useRef(); + + // 动态设置每页数量 + const [currentPageSize, setCurrentPageSize] = useState(10); + + // const [showDetail, setShowDetail] = useState(false); + const columns: ProColumns>[] = [ + { + title: , + dataIndex: 'ip', + hideInSearch: true, + }, + { + title: , + dataIndex: 'create_time', + hideInSearch: true, + valueType: 'dateTime', + }, + { + title: , + dataIndex: 'user', + hideInSearch: true, + }, + ]; + function reloadList() { + actionRef.current?.reload(); + } + // 配置打包 + function configPackage() { + console.log('buildPackage'); + setIsConfigModalOpen(true); + } + + // 打包历史 + function packageHistory() { + console.log('packageHistory'); + setIsHistoryModalOpen(true); + } + + // 筛选查询 + useEffect(() => { + if (actionRef) { + reloadList(); + } + }, [actionRef]); + + return ( +
+
    +
  • + +
    配置打包
    +
  • +
  • + +
  • +
  • + +
    打包历史
    +
  • +
+ + {packageStatus === 'loading' ? ( +
+ {/* 加载中 */} + +
打包验证中
+
+ ) : ( +
+ {/* 加载失败 */} +
+
+ +
+
+
打包失败
+
+

请核对以下信息后重新打包

+
+
    + {[ + { + id: '1', + name: '模型配置', + }, + { + id: '2', + name: '节点配置', + }, + { + id: '3', + name: '服务器配置', + }, + ].map((item) => { + return ( +
  • + +
    + {item.name} + 未完成 +
    +
  • + ); + })} +
+
+ )} +
+ setIsHistoryModalOpen(false)} + destroyOnClose + footer={null} + > +
+ { + console.log(data, 'onDataSourceChange_data'); + }} + pagination={{ + ...proTablePaginationOptions, + pageSize: currentPageSize, + onChange: (pageNo, pageSize) => setCurrentPageSize(pageSize), + }} + columnsState={{ + persistenceKey: 'algorithm_model_list', + persistenceType: 'localStorage', + }} + request={async (params = {}, sort) => { + const { current, ...rest } = params; + const reqParams = { + pageNo: current, + ...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 apiSystemLog({ + ...reqParams, + }); + console.log(resp, 'apiSystemLog_resp'); + if (!isSuccessApi(resp)) { + return { data: [], success: true }; + } + return { + data: resp.data.data, + success: resp.success, + total: resp.data.count, + current: current, + pageSize: currentPageSize, + }; + }} + columns={columns} + /> +
+
+
+ ); +}; + +export default PackageDeployment; diff --git a/src/iconfont.css b/src/iconfont.css index 34f93e0..19c64c3 100644 --- a/src/iconfont.css +++ b/src/iconfont.css @@ -1,7 +1,7 @@ @font-face { font-family: "iconfont"; /* Project id 4530966 */ - src: url('//at.alicdn.com/t/c/font_4530966_gx8lbf9jsm6.woff2?t=1719539403683') format('woff2'), url('//at.alicdn.com/t/c/font_4530966_gx8lbf9jsm6.woff?t=1719539403683') format('woff'), url('//at.alicdn.com/t/c/font_4530966_gx8lbf9jsm6.ttf?t=1719539403683') format('truetype'); + src: url('//at.alicdn.com/t/c/font_4530966_kv6z63rd2ge.woff2?t=1724147487067') format('woff2'), url('//at.alicdn.com/t/c/font_4530966_kv6z63rd2ge.woff?t=1724147487067') format('woff'), url('//at.alicdn.com/t/c/font_4530966_kv6z63rd2ge.ttf?t=1724147487067') format('truetype'); } .iconfont { font-family: "iconfont" !important; @@ -9,6 +9,21 @@ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } +.icon-cuowu:before { + content: "\e725"; +} +.icon-dabaolishi:before { + content: "\e723"; +} +.icon-peizhidabao:before { + content: "\e724"; +} +.icon-mima:before { + content: "\e720"; +} +.icon-Frame:before { + content: "\e721"; +} .icon-a-shujukeshihua21x:before { content: "\e608"; } diff --git a/src/iconfont.less b/src/iconfont.less index 8c9766d..f9d619c 100644 --- a/src/iconfont.less +++ b/src/iconfont.less @@ -1,8 +1,8 @@ @font-face { font-family: 'iconfont'; /* Project id 4530966 */ - src: url('//at.alicdn.com/t/c/font_4530966_gx8lbf9jsm6.woff2?t=1719539403683') format('woff2'), - url('//at.alicdn.com/t/c/font_4530966_gx8lbf9jsm6.woff?t=1719539403683') format('woff'), - url('//at.alicdn.com/t/c/font_4530966_gx8lbf9jsm6.ttf?t=1719539403683') format('truetype'); + src: url('//at.alicdn.com/t/c/font_4530966_kv6z63rd2ge.woff2?t=1724147487067') format('woff2'), + url('//at.alicdn.com/t/c/font_4530966_kv6z63rd2ge.woff?t=1724147487067') format('woff'), + url('//at.alicdn.com/t/c/font_4530966_kv6z63rd2ge.ttf?t=1724147487067') format('truetype'); } .iconfont { @@ -13,6 +13,26 @@ -moz-osx-font-smoothing: grayscale; } +.icon-cuowu:before { + content: '\e725'; +} + +.icon-dabaolishi:before { + content: '\e723'; +} + +.icon-peizhidabao:before { + content: '\e724'; +} + +.icon-mima:before { + content: '\e720'; +} + +.icon-Frame:before { + content: '\e721'; +} + .icon-a-shujukeshihua21x:before { content: '\e608'; } diff --git a/src/pages/User/Login/index.tsx b/src/pages/User/Login/index.tsx index d767b55..76f55aa 100644 --- a/src/pages/User/Login/index.tsx +++ b/src/pages/User/Login/index.tsx @@ -292,7 +292,14 @@ const Login: React.FC = () => { name="username" fieldProps={{ size: 'large', - prefix: , + prefix: ( + + ), }} placeholder={'用户名:'} rules={[