ソースを参照

添加switter,修改样式_hn

huning 2 ヶ月 前
コミット
e6bf74ac0e

+ 2 - 0
new-react-admin-ui/src/App.tsx

@@ -21,6 +21,7 @@ import OrderEdit from '@/pages/dashboard/OrderEdit';
 import DateBased from '@/pages/pastlogs/DateBased';
 import { Layout } from '@/components/Layout';
 import ErrorPage from '@/pages/ErrorPage';
+import SwaggerPage from '@/pages/swagger/SwaggerPage';
 
 // 创建主题
 const theme = createTheme({
@@ -95,6 +96,7 @@ export const App = () => {
         <CustomRoutes noLayout>
           <Route path="/error" element={<ErrorPage />} />
           <Route path="/orderedit" element={<OrderEdit />} />
+          <Route path="/tool/swagger" element={<SwaggerPage />} />
         </CustomRoutes>
         
         {/* Dashboard通过Resource自动路由,无需CustomRoutes */}

+ 13 - 2
new-react-admin-ui/src/components/CustomMenu.tsx

@@ -32,6 +32,11 @@ const getResourceName = (fullPath: string): string => {
     return 'dashboard';
   }
   
+  // 特殊处理:swagger路径直接映射到/tool/swagger
+  if (fullPath === 'swagger') {
+    return 'tool/swagger';
+  }
+  
   // 对于其他路径,直接将最后一个路径段转换为复数形式
   const pathSegments = fullPath.split('/');
   const lastSegment = pathSegments[pathSegments.length - 1];
@@ -51,6 +56,11 @@ const getResourceName = (fullPath: string): string => {
 
 // 根据菜单类型获取图标
 const getMenuIcon = (menuType: 'M' | 'C' | 'F', customIcon?: string) => {
+  // 特殊处理:swagger图标
+  if (customIcon === 'swagger') {
+    return <SettingsIcon fontSize="small" />;
+  }
+  
   if (customIcon) {
     // 这里可以处理自定义图标,暂时使用默认图标
     return <SettingsIcon fontSize="small" />;
@@ -75,12 +85,13 @@ const renderMenuTree = (menus: MenuItem[], basePath = '', expandedItems: Set<str
     
     // 只渲染菜单类型为C(菜单)的项
     if (menu.menuType === 'C' && menu.path && fullPath) {
-      const resourceName = getResourceName(fullPath);
+      // 特殊处理:swagger菜单项直接导航到/tool/swagger
+      const toPath = menu.path === 'swagger' ? '/tool/swagger' : `/${getResourceName(fullPath)}`;
       
       return (
         <MenuItemLink
           key={`menu-${menu.menuId}`}
-          to={`/${resourceName}`}
+          to={toPath}
           primaryText={menu.menuName}
           leftIcon={getMenuIcon(menu.menuType, menu.icon)}
           sx={{

+ 31 - 29
new-react-admin-ui/src/pages/dashboard/OrderEdit.tsx

@@ -4,6 +4,7 @@ import { useLocation, useNavigate } from 'react-router-dom';
 import { request } from '@/services/permissionService';
 import { message, Button } from "antd"; // 导入 Button 组件
 import queryString from 'query-string';
+import "./styles.css";
 
 interface OrderEditProps {
     editParams?: {
@@ -199,16 +200,17 @@ const OrderEdit: React.FC<OrderEditProps> = ({ editParams: propEditParams, onBac
   };
 
   return (
-    <div style={{ padding: "20px", fontFamily: "Arial, sans-serif" }}>
+    <div style={{ padding: "20px"}}>
       {/* 右上角按钮区域 */}
-      <div style={{ display: "flex", justifyContent: "flex-end", marginBottom: "20px" }}>
-        <button style={{ marginRight: "10px" }} onClick={handleCancel}>
+      <div style={{ display: "flex", justifyContent: "flex-end"}}>
+        <button style={{ marginRight: "10px" }} className="btn" onClick={handleCancel}>
           キャンセル
         </button>
         <button
           type="button"
           onClick={handleSave}
           disabled={saveLoading} // 保存时禁用按钮,防止重复提交
+          className="btn"
         >
           保存
         </button>
@@ -216,38 +218,38 @@ const OrderEdit: React.FC<OrderEditProps> = ({ editParams: propEditParams, onBac
 
       {/* 拠点情報区域 */}
       <h3 style={{ marginBottom: "10px" }}>拠点情報</h3>
-      <table style={{ borderCollapse: "collapse", width: "40%", marginBottom: "20px" }}>
+      <table className="editTab">
         <tbody>
           <tr>
-            <td style={{ backgroundColor: "#e0e0e0", padding: "5px", width: "150px", border: "1px solid #ccc" }}>部名</td>
-            <td style={{ padding: "5px", border: "1px solid #ccc" }}>{firstData?.depName ?? "——"}</td>
+            <td className="inputText bkGrey">部名</td>
+            <td className="inputText">{firstData?.depName ?? "——"}</td>
           </tr>
           <tr>
-            <td style={{ backgroundColor: "#e0e0e0", padding: "5px", border: "1px solid #ccc" }}>地区名</td>
-            <td style={{ padding: "5px", border: "1px solid #ccc" }}>{firstData?.areaNm ?? "——"}</td>
+            <td className="inputText bkGrey">地区名</td>
+            <td className="inputText">{firstData?.areaNm ?? "——"}</td>
           </tr>
           <tr>
-            <td style={{ backgroundColor: "#e0e0e0", padding: "5px", border: "1px solid #ccc" }}>拠点コード</td>
-            <td style={{ padding: "5px", border: "1px solid #ccc" }}>{firstData?.tenCd ?? "——"}</td>
+            <td className="inputText bkGrey">拠点コード</td>
+            <td className="inputText">{firstData?.tenCd ?? "——"}</td>
           </tr>
           <tr>
-            <td style={{ backgroundColor: "#e0e0e0", padding: "5px", border: "1px solid #ccc" }}>拠点名</td>
-            <td style={{ padding: "5px", border: "1px solid #ccc" }}>{firstData?.tenNm ?? "——"}</td>
+            <td className="inputText bkGrey">拠点名</td>
+            <td className="inputText">{firstData?.tenNm ?? "——"}</td>
           </tr>
         </tbody>
       </table>
 
       {/* キャパシティ区域(受控输入框) */}
       <h3 style={{ marginBottom: "10px" }}>キャパシティ</h3>
-      <table style={{ borderCollapse: "collapse", width: "40%", marginBottom: "20px" }}>
+      <table className="editTab">
         <tbody>
           <tr>
-            <td style={{ backgroundColor: "#e0e0e0", padding: "5px", width: "150px", border: "1px solid #ccc" }}>連携キャップ</td>
-            <td style={{ padding: "5px", border: "1px solid #ccc" }}>{firstData?.linkCap ?? "——"}</td>
+            <td className="inputText bkGrey">連携キャップ</td>
+            <td className="inputText">{firstData?.linkCap ?? "——"}</td>
           </tr>
           <tr>
-            <td style={{ backgroundColor: "#e0e0e0", padding: "5px", width: "150px", border: "1px solid #ccc" }}>確定キャップ</td>
-            <td style={{ padding: "5px", border: "1px solid #ccc" }}>
+            <td className="inputText bkGrey">確定キャップ</td>
+            <td className="inputText">
               <input
                 type="text"
                 value={fixedCap}
@@ -266,32 +268,32 @@ const OrderEdit: React.FC<OrderEditProps> = ({ editParams: propEditParams, onBac
         <div style={{ marginRight: "40px" }}>
           {/* 予定分组 */}
           <div style={{ display: "flex", alignItems: "center", marginBottom: "5px" }}>
-            <span style={{ display: "inline-block", width: "8px", height: "8px", backgroundColor: "#000", borderRadius: "50%", marginRight: "5px" }}></span>
+            <span className="litTit"></span>
             <span>予定</span>
           </div>
           <table style={{ borderCollapse: "collapse", marginLeft: "15px" }}>
             <tbody>
               <tr>
-                <td style={{ backgroundColor: "#e0e0e0", padding: "5px", width: "130px", border: "1px solid #ccc" }}>出荷予定数</td>
-                <td style={{ padding: "5px", border: "1px solid #ccc", width: "120px" }}>{firstData?.renkeiCap ?? "——"}</td>
+                <td className="inputText bkGrey">出荷予定数</td>
+                <td className="inputText">{firstData?.renkeiCap ?? "——"}</td>
               </tr>
               <tr>
-                <td style={{ backgroundColor: "#e0e0e0", padding: "5px",width: "130px", border: "1px solid #ccc" }}>判別結果</td>
-                <td style={{ padding: "5px", border: "1px solid #ccc" }}>{firstData?.shipNumber ?? "——"}</td>
+                <td className="inputText bkGrey">判別結果</td>
+                <td className="inputText">{firstData?.shipNumber ?? "——"}</td>
               </tr>
             </tbody>
           </table>
 
           {/* 実績分组 */}
           <div style={{ display: "flex", alignItems: "center", marginTop: "10px", marginBottom: "5px" }}>
-            <span style={{ display: "inline-block", width: "8px", height: "8px", backgroundColor: "#000", borderRadius: "50%", marginRight: "5px" }}></span>
+            <span className="litTit"></span>
             <span>実績</span>
           </div>
           <table style={{ borderCollapse: "collapse", marginLeft: "15px" }}>
             <tbody>
               <tr>
-                <td style={{ backgroundColor: "#e0e0e0", padding: "5px", width: "130px", border: "1px solid #ccc" }}>ソーター識別数</td>
-                <td style={{ padding: "5px", border: "1px solid #ccc", width: "120px" }}>{firstData?.sorterNum ?? "——"}</td>
+                <td className="inputText bkGrey">ソーター識別数</td>
+                <td className="inputText">{firstData?.sorterNum ?? "——"}</td>
               </tr>
               {/* <tr>
                 <td style={{ backgroundColor: "#e0e0e0", padding: "5px", border: "1px solid #ccc" }}>リジェクト数</td>
@@ -313,12 +315,12 @@ const OrderEdit: React.FC<OrderEditProps> = ({ editParams: propEditParams, onBac
       <table style={{ borderCollapse: "collapse", width: "40%" }}>
         <tbody>
           <tr>
-            <td style={{ backgroundColor: "#e0e0e0", padding: "5px", width: "120px", border: "1px solid #ccc" }}>最終更新日時</td>
-            <td style={{ padding: "5px", border: "1px solid #ccc" }}>{firstData?.dateTm ?? "——"}</td>
+            <td className="inputText bkGrey">最終更新日時</td>
+            <td className="inputText">{firstData?.dateTm ?? "——"}</td>
           </tr>
           <tr>
-            <td style={{ backgroundColor: "#e0e0e0", padding: "5px", border: "1px solid #ccc" }}>最終更新者</td>
-            <td style={{ padding: "5px", border: "1px solid #ccc" }}>{firstData?.updateNm ?? "——"}</td>
+            <td className="inputText bkGrey">最終更新者</td>
+            <td className="inputText">{firstData?.updateNm ?? "——"}</td>
           </tr>
         </tbody>
       </table>

+ 75 - 57
new-react-admin-ui/src/pages/dashboard/OrderIndex.tsx

@@ -18,6 +18,7 @@ import {
 import { useNavigate } from 'react-router-dom';
 
 import { request } from '@/services/permissionService';
+import "./styles.css";
 
 ModuleRegistry.registerModules([
     ClientSideRowModelModule,
@@ -696,61 +697,71 @@ const GridExample: React.FC<GridExampleProps> = ({ onEditClick: propOnEditClick
 
     const CustomFilterComponent = () => {
         return (
-            <div style={{ marginBottom: '10px', padding: '10px', border: '1px solid #ddd', borderRadius: '4px', display: 'flex', gap: '15px', flexWrap: 'wrap' }}>
-                <div style={{ display: 'flex', flexDirection: 'column', minWidth: '150px' }}>
-                    <label style={{ marginBottom: '5px', fontSize: '12px' }}>部名</label>
-                    <select
-                        value={filters.depName}
-                        onChange={(e) => handleFilterChange('depName', e.target.value)}
-                        style={{ padding: '4px' }}
-                    >
-                        <option value=""></option>
-                        {filterOptions.depNames.map((option) => (
-                            <option key={option} value={option}>{option}</option>
-                        ))}
-                    </select>
-                </div>
-
-                <div style={{ display: 'flex', flexDirection: 'column', minWidth: '150px' }}>
-                    <label style={{ marginBottom: '5px', fontSize: '12px' }}>地区名</label>
-                    <select
-                        value={filters.areaNm}
-                        onChange={(e) => handleFilterChange('areaNm', e.target.value)}
-                        style={{ padding: '4px' }}
-                    >
-                        <option value=""></option>
-                        {filterOptions.areaNms.map((option) => (
-                            <option key={option} value={option}>{option}</option>
-                        ))}
-                    </select>
-                </div>
-
-                <div style={{ display: 'flex', flexDirection: 'column', minWidth: '150px' }}>
-                    <label style={{ marginBottom: '5px', fontSize: '12px' }}>拠点コード</label>
-                    <select
-                        value={filters.tenCd}
-                        onChange={(e) => handleFilterChange('tenCd', e.target.value)}
-                        style={{ padding: '4px' }}
-                    >
-                        <option value=""></option>
-                        {filterOptions.tenCds.map((option) => (
-                            <option key={option} value={option}>{option}</option>
-                        ))}
-                    </select>
-                </div>
-
-                <div style={{ display: 'flex', flexDirection: 'column', minWidth: '150px' }}>
-                    <label style={{ marginBottom: '5px', fontSize: '12px' }}>拠点名</label>
-                    <select
-                        value={filters.tenNm}
-                        onChange={(e) => handleFilterChange('tenNm', e.target.value)}
-                        style={{ padding: '4px' }}
-                    >
-                        <option value=""></option>
-                        {filterOptions.tenNms.map((option) => (
-                            <option key={option} value={option}>{option}</option>
-                        ))}
-                    </select>
+            <div className="selectBox" style={{ display: 'table', width: '100%', tableLayout: 'fixed', borderLeft: '1px solid #ddd', borderRight: '1px solid #ddd', borderBottom: '1px solid #ddd' }}>
+                <div style={{ display: 'table-row' }}>
+                    {/* 部名筛选列 */}
+                    <div className="filter">
+                        <select
+                            value={filters.depName}
+                            onChange={(e) => handleFilterChange('depName', e.target.value)}
+                            className="filterSel"
+                        >
+                            <option value=""></option>
+                            {filterOptions.depNames.map((option) => (
+                                <option key={option} value={option}>{option}</option>
+                            ))}
+                        </select>
+                    </div>
+
+                    {/* 地区名筛选列 */}
+                    <div className="filter">
+                        <select
+                            value={filters.areaNm}
+                            onChange={(e) => handleFilterChange('areaNm', e.target.value)}
+                            className="filterSel"
+                        >
+                            <option value=""></option>
+                            {filterOptions.areaNms.map((option) => (
+                                <option key={option} value={option}>{option}</option>
+                            ))}
+                        </select>
+                    </div>
+
+                    {/* 拠点コード筛选列 */}
+                    <div className="filter">
+                        <select
+                            value={filters.tenCd}
+                            onChange={(e) => handleFilterChange('tenCd', e.target.value)}
+                            className="filterSel"
+                        >
+                            <option value=""></option>
+                            {filterOptions.tenCds.map((option) => (
+                                <option key={option} value={option}>{option}</option>
+                            ))}
+                        </select>
+                    </div>
+
+                    {/* 拠点名筛选列 */}
+                    <div className="filter">
+                        <select
+                            value={filters.tenNm}
+                            onChange={(e) => handleFilterChange('tenNm', e.target.value)}
+                            className="filterSel"
+                            // style={{ width: '100%', padding: '4px', border: '1px solid #ccc' }}
+                        >
+                            <option value=""></option>
+                            {filterOptions.tenNms.map((option) => (
+                                <option key={option} value={option}>{option}</option>
+                            ))}
+                        </select>
+                    </div>
+
+                    {/* 剩余列 - 留空以匹配表格结构 */}
+                    <div className="filter"></div>
+                    <div className="filter"></div>
+                    <div className="filter"></div>
+                    <div className="filter"></div>
+                    <div className="filter"></div>
                 </div>
             </div>
         );
@@ -930,17 +941,24 @@ const GridExample: React.FC<GridExampleProps> = ({ onEditClick: propOnEditClick
     return (
         <div style={containerStyle}>
             <div style={{ width: '90%' }}>
-                <CustomFilterComponent />
+                {/* 保存按钮移到筛选组件上方 */}
                 <div className="saveBtn">
-                    <div></div> {/* 占位元素 */}
                     <button
                         type="button"
                         onClick={handleSave}
                         disabled={saveLoading} // 保存时禁用按钮,防止重复提交
+                        className="btn"
+                        // style={{ padding: '5px 15px', backgroundColor: '#f0f0f0', border: '1px solid #ddd', cursor: 'pointer' }}
                     >
                         一括設定
                     </button>
                 </div>
+                
+                {/* 筛选组件与表格合并显示 */}
+                <div className="filterBox">
+                    <CustomFilterComponent />
+                </div>
+                
                 <AgGridReact<IOlympicData>
                     ref={gridRef}
                     rowData={flattenedFilteredData}  // 使用平铺后的筛选数据

+ 59 - 165
new-react-admin-ui/src/pages/dashboard/styles.css

@@ -1,140 +1,3 @@
-.example-wrapper {
-  display: flex;
-  height: 100%;
-}
-
-.inner-col {
-  height: 100%;
-  display: flex;
-  flex-direction: column;
-  flex: 1 1 auto;
-  min-width: 0;
-}
-
-.inner-col.vertical-toolbar {
-  display: flex;
-  flex: none;
-  width: 100px;
-  align-items: center;
-  justify-content: center;
-}
-
-.toolbar {
-  white-space: nowrap;
-}
-
-.vertical-toolbar>span {
-  padding: 10px;
-  margin: 10px;
-  cursor: default;
-  user-select: none;
-  -ms-user-select: none;
-  -moz-user-select: none;
-  -webkit-user-modify: none;
-}
-
-button.factory {
-  height: 25px;
-  border-radius: 5px;
-  border: none;
-  color: white;
-  outline: none;
-  cursor: pointer;
-  margin-right: 5px;
-}
-
-button i {
-  margin-right: 10px;
-}
-
-.bin i {
-  transform: scale(1);
-  transition: transform 500ms;
-}
-
-.version-select-container {
-  display: flex;
-  align-items: center;
-  margin: 20px 0;
-}
-
-.version-select-container label {
-  margin: 0 1%;
-  white-space: nowrap;
-  font-size: 14px;
-}
-
-.version-select-container select {
-  padding: 5px 35px;
-  font-size: 14px;
-  margin-left: 20px;
-  padding-left: 10px;
-}
-
-.edit-btn {
-  margin-left: auto;
-  padding: 7px 4%;
-  background-color: #000;
-  color: #fff;
-  border: none;
-  cursor: pointer;
-  float: right;
-}
-
-.action-btn {
-  background-color: #000;
-  color: #fff;
-  border: none;
-  padding: 7px 20px;
-  cursor: pointer;
-  font-size: 14px;
-}
-
-.history-title-custom {
-  font-size: 14px;
-  font-weight: bold;
-  margin-bottom: 8px;
-  display: block;
-}
-
-.history-table-custom {
-  width: 100%;
-  border-collapse: collapse;
-}
-
-.type-td {
-  padding: 5px 20px;
-}
-
-.date-td {
-  padding: 5px 20px;
-}
-
-.action-td {
-  padding: 5px 20px;
-}
-
-.history-title-custom {
-  font-size: 14px;
-  font-weight: bold;
-  margin-bottom: 8px;
-  display: block;
-}
-
-.order-info-section {
-  margin-bottom: 35px;
-}
-
-h3 {
-  margin: 0 0 5px 0;
-  font-size: 14px;
-  font-weight: bold;
-}
-
-.status-section th {
-  font-weight: normal;
-}
-
 .custom-tab-list {
   display: flex;
   list-style: none;
@@ -172,28 +35,11 @@ h3 {
   display: none !important;
 }
 
-.ag-pinned-left-header .ag-header-cell,
-.ag-pinned-left-cols-container .ag-cell {
-  font-weight: bold;
-}
+
 .ag-header {
   border-bottom: 2px solid #c1c8d4;
 }
 
-.version-select-container {
-  display: flex;
-  align-items: center;
-  gap: 16px;
-  margin: 16px 0;
-}
-
-.saveBtn {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  margin-bottom: 10px;
-}
-
 .ag-cell {
   border-right: 1px solid #dde2eb !important;
   border-left: 1px solid #dde2eb !important;
@@ -203,18 +49,66 @@ h3 {
   align-items: left;
 }
 
-.ag-header-group-cell {
-  border-right: 1px solid #dde2eb !important;
-  border-left: 1px solid #dde2eb !important;
-  /* border-bottom: 1px solid #dde2eb !important; */
+.saveBtn {
+  margin-bottom: 0px;
+  padding: 1% 0;
+  text-align: right;
+}
+
+.selectBox {
+  display: table;
+  width: 100%;
+  table-layout: fixed;
+  border-left: 1px solid #ddd;
+  border-right: 1px solid #ddd;
+  border-bottom: 1px solid #ddd;
 }
 
-.clear {
-  clear: both;
+.filterBox {
+  border-top: 1px solid #ddd;
+  border-left: 1px solid #ddd;
+  border-right: 1px solid #ddd;
 }
 
-.ag-header-cell-label{
-  display: flex;
-  justify-content: left;
-  align-items: left;
+.filter {
+  display: table-cell;
+  /* width: 1%; */
+  padding: 1%;
+  /* border-right: 1px solid #ddd; */
+  background-color: #f9f9f9;
+}
+
+.filterSel {
+  width: 100%;
+  padding: 3%;
+  border: 1px solid #ccc;
+}
+
+.inputText{
+  padding: 5px;
+  border: 1px solid #ccc;
+  width: 130px;
+}
+.bkGrey{
+  background-color:#e0e0e0;
+}
+.editTab{
+  border-collapse: collapse;
+  width: 40%;
+  margin-bottom: 20px;
+}
+.litTit{
+  display: inline-block;
+  width: 8px;
+  height: 8px;
+  background-color: #000;
+  border-radius: 50%;
+  margin-right: 5px;
+}
+.btn{
+  padding: 8px 16px;
+  background-color: #1890ff; 
+  color: white;
+  border: none; 
+  border-radius: 4px; 
 }

+ 44 - 0
new-react-admin-ui/src/pages/swagger/SwaggerPage.tsx

@@ -0,0 +1,44 @@
+import React from 'react';
+import { Card, CardContent, Box, Typography, Button } from '@mui/material';
+import { OpenInNew } from '@mui/icons-material';
+
+const SwaggerPage: React.FC = () => {
+  const handleOpenSwagger = () => {
+    // 在新窗口中打开Swagger UI
+    window.open('http://localhost:8080/swagger-ui.html', '_blank');
+  };
+
+  return (
+    <Box sx={{ p: 2, height: '100%' }}>
+      <Typography variant="h4" component="h1" gutterBottom>
+        API 文档
+      </Typography>
+      <Typography variant="body1" color="text.secondary" paragraph>
+        Swagger API 文档提供了系统所有接口的详细说明和测试功能。
+      </Typography>
+      
+      <Card sx={{ mt: 2, p: 4, textAlign: 'center' }}>
+        <CardContent>
+          <Typography variant="h6" gutterBottom>
+            点击下方按钮在新窗口中打开 Swagger API 文档
+          </Typography>
+          <Typography variant="body2" color="text.secondary" paragraph>
+            由于浏览器安全策略限制,无法在当前页面中嵌入 Swagger UI,
+            因此需要在新窗口中打开。
+          </Typography>
+          <Button
+            variant="contained"
+            size="large"
+            startIcon={<OpenInNew />}
+            onClick={handleOpenSwagger}
+            sx={{ mt: 2 }}
+          >
+            打开 Swagger API 文档
+          </Button>
+        </CardContent>
+      </Card>
+    </Box>
+  );
+};
+
+export default SwaggerPage;

+ 4 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOrderController.java

@@ -16,14 +16,17 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
 
 import java.util.List;
 
 /**
- * 岗位信息操作处理
+ * 订单管理接口
  *
  * @author ruoyi
  */
+@Tag(name = "订单管理", description = "订单相关操作")
 @RestController
 @RequestMapping("/system/order")
 public class SysOrderController extends BaseController

+ 27 - 3
ruoyi-admin/src/main/resources/application.yml

@@ -124,10 +124,34 @@ springdoc:
     path: /swagger-ui.html
     tags-sorter: alpha
   group-configs:
-    - group: 'default'
-      display-name: '测试模块'
-      paths-to-match: '/**'
+    - group: 'system'
+      display-name: '系统管理'
+      paths-to-match: '/system/**'
+      packages-to-scan: com.ruoyi.web.controller.system
+    - group: 'monitor'
+      display-name: '系统监控'
+      paths-to-match: '/monitor/**'
+      packages-to-scan: com.ruoyi.web.controller.monitor
+    - group: 'tool'
+      display-name: '系统工具'
+      paths-to-match: '/tool/**'
       packages-to-scan: com.ruoyi.web.controller.tool
+    - group: 'common'
+      display-name: '通用接口'
+      paths-to-match: '/common/**'
+      packages-to-scan: com.ruoyi.web.controller.common
+    - group: 'quartz'
+      display-name: '定时任务'
+      paths-to-match: '/monitor/job/**'
+      packages-to-scan: com.ruoyi.quartz.controller
+    - group: 'generator'
+      display-name: '代码生成'
+      paths-to-match: '/tool/gen/**'
+      packages-to-scan: com.ruoyi.generator.controller
+    - group: 'label'
+      display-name: '用户管理'
+      paths-to-match: '/label/**'
+      packages-to-scan: com.ruoyi.web.controller.system
 
 # 防止XSS攻击
 xss:

+ 4 - 3
ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOrder.java

@@ -1,9 +1,6 @@
 package com.ruoyi.system.domain;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.Size;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.annotation.Excel.ColumnType;
 import com.ruoyi.common.core.domain.BaseEntity;
@@ -11,6 +8,10 @@ import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 
 import java.util.Date;
+
+/**
+ * 订单实体类
+ */
 public class SysOrder extends BaseEntity {
     private static final long serialVersionUID = 1L;