From c466f4d8c054270821ed0263f390178995621a74 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期一, 03 三月 2025 10:27:08 +0800
Subject: [PATCH] #新增 1. 添加EXcel导入功能模板

---
 rsf-server/pom.xml                                                                                       |    7 
 rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java                              |   79 +--------
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrGroupController.java             |   16 +-
 rsf-server/src/main/java/com/vincent/rsf/server/system/controller/BaseController.java                    |    1 
 rsf-admin/src/page/components/ImportModal.jsx                                                            |   38 +++-
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrController.java                  |   19 ++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/MatnrsTemplate.java                 |  141 +++++++++++++++++
 rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx                                                         |    8 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/annotation/ExcelAutoColumnSize.java |   20 ++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/annotation/ExcelComment.java        |   30 +++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Matnr.java                                |    3 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/annotation/ExcelField.java          |   60 +++++++
 12 files changed, 331 insertions(+), 91 deletions(-)

diff --git a/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx b/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx
index be006b0..5480867 100644
--- a/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx
+++ b/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx
@@ -43,7 +43,7 @@
 import MyField from "@/page/components/MyField";
 import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
 import * as Common from '@/utils/common';
-import ImportButton from "@/page/components/ImportButton";
+import ImportButton from "../../components/ImportButton";
 import MatListAside from './MatnrListAside';
 
 const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
@@ -228,7 +228,9 @@
                         <FilterButton />
                         <MyCreateButton onClick={() => { setCreateDialog(true) }} />
                         <SelectColumnsButton preferenceKey='matnr' />
-                        <ImportButton />
+                        <MatnrList.Context.Provider value={'matnr'}>
+                            <ImportButton />
+                        </MatnrList.Context.Provider>
                         <MyExportButton />
                     </TopToolbar>
                 )}
@@ -251,4 +253,6 @@
     )
 }
 
+MatnrList.Context = React.createContext()
+
 export default MatnrList;
\ No newline at end of file
diff --git a/rsf-admin/src/page/components/ImportModal.jsx b/rsf-admin/src/page/components/ImportModal.jsx
index 501cb22..3775169 100644
--- a/rsf-admin/src/page/components/ImportModal.jsx
+++ b/rsf-admin/src/page/components/ImportModal.jsx
@@ -18,6 +18,7 @@
 import { Link } from 'react-router-dom';
 import DialogCloseButton from './DialogCloseButton';
 import { usePapaParse } from './usePapaParse';
+import MatnrList from '../basicInfo/matnr/MatnrList';
 
 const ImportModal = ({ open, onClose, importTemp, useCodeImport, onceBatch = 10 }) => {
     const refresh = useRefresh();
@@ -144,22 +145,30 @@
                                 <Alert
                                     severity="info"
                                     action={
-                                        <Button
-                                            component={Link}
-                                            label="common.action.import.download"
-                                            color="info"
-                                            to={importTemp}
-                                            download={'import_template.csv'}
-                                        />
+                                        <MatnrList.Context.Consumer>
+                                            {context => (
+                                                <Button
+                                                    component={Link}
+                                                    onClick={() => {
+                                                        downloadTemplate(context)
+                                                    }}
+                                                    label="common.action.import.download"
+                                                    color="info"
+                                                    to={importTemp}
+                                                    download={'import_template.csv'}
+                                                />
+                                            )}
+
+                                        </MatnrList.Context.Consumer>
                                     }
                                 >
                                     {translate('common.action.import.msg')}
                                 </Alert>
 
                                 <FileInput
-                                    source="csv"
-                                    label="CSV File"
-                                    accept={{ 'text/csv': ['.csv'] }}
+                                    source="xlsx"
+                                    label="Xlsx File"
+                                    accept={{ 'text/xlsx': ['.xls', '.xlsx'] }}
                                     onChange={handleFileChange}
                                 >
                                     <FileField source="src" title="title" />
@@ -201,6 +210,15 @@
         </Dialog>
     );
 }
+{/**涓嬭浇鎵撳嵃妯℃澘锛屼紶鍏ype绫诲瀷锛岃皟鐢ㄤ笅杞芥ā鏉挎帴鍙� */}
+const downloadTemplate = (type) => {
+    // 涓嬭浇鐗╂枡妯℃澘
+    if (type != undefined &&  type == 'matnr') {
+        
+    } 
+    console.log('======>');
+    console.log(type);
+}
 
 function millisecondsToTime(ms) {
     var seconds = Math.floor((ms / 1000) % 60);
diff --git a/rsf-server/pom.xml b/rsf-server/pom.xml
index eb85d00..f3cbdfa 100644
--- a/rsf-server/pom.xml
+++ b/rsf-server/pom.xml
@@ -137,7 +137,12 @@
 			<artifactId>easyexcel</artifactId>
 			<version>2.2.6</version>
 		</dependency>
-	</dependencies>
+        <dependency>
+            <groupId>cn.afterturn</groupId>
+            <artifactId>easypoi-base</artifactId>
+            <version>4.2.0</version>
+        </dependency>
+    </dependencies>
 
 	<build>
 		<finalName>rsf-server</finalName>
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java
index bab11e6..b501bda 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java
@@ -1,5 +1,6 @@
 package com.vincent.rsf.server.common.utils;
 
+import cn.afterturn.easypoi.excel.entity.ImportParams;
 import com.vincent.rsf.framework.common.Cools;
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
@@ -64,7 +65,8 @@
                     continue;
                 }
 
-                field.setAccessible(true);  // 姝よ寰堥噸瑕侊紝鐗瑰埆鏄瓧娈典负private鏃�
+                // 姝よ寰堥噸瑕侊紝鐗瑰埆鏄瓧娈典负private鏃�
+                field.setAccessible(true);
                 Object value = null;
                 try {
                     value = field.get(t);
@@ -91,76 +93,13 @@
     }
 
     /**
-     * Excel 瀵煎叆
-     * @param file 鏂囦欢
-     * @param keys 鏁版嵁椤哄簭
+     * 娣诲姞瀵煎叆excel閰嶇疆鍙傛暟
+     * 娉細榛樿閰嶇疆鍙弧瓒冲綋鍓嶉渶姹�
+     * @return
      */
-    public static  List<Map<String, Object>>  importExcel(MultipartFile file, String[] keys) throws Exception{
-        Workbook wb = null;
-        String fileName = file.getOriginalFilename();
-        if (fileName.endsWith("xls")) {
-            POIFSFileSystem pois = new POIFSFileSystem(file.getInputStream());
-            wb = new HSSFWorkbook(pois);
-        } else if (fileName.endsWith("xlsx")) {
-            wb = new XSSFWorkbook(file.getInputStream());
-        }
-        Sheet sheet = wb.getSheetAt(0);
-        int rowCount = sheet.getPhysicalNumberOfRows();
-        if (sheet.getRow( 1).getPhysicalNumberOfCells() != keys.length){
-            throw new RuntimeException("瀵煎叆鐨凟xcel鍜屾ā鏉跨殑鍒椾笉鍖归厤");
-        }
-        List<Map<String,Object>> result = new ArrayList<>();
-        for (int i = 0; i < rowCount - 1; i++) {
-            Row row = sheet.getRow(i + 1);
-            Map<String,Object> tmp = new HashMap<>();
-            for (int j = 0;j < keys.length; j++){
-                Cell cell = row.getCell(j);
-                // 鎶婄被鍨嬭浆琛孲tring
-//                cell.setCellType(CellType.STRING);
-                tmp.put(keys[j], cell.getStringCellValue());
-            }
-            result.add(tmp);
-        }
-        return result;
-    }
-
-    /**
-     * 琛ㄥご鏍峰紡
-     */
-    private static CellStyle HeaderStyle(Workbook wb){
-        Font font = wb.createFont();
-        font.setFontName("瀹嬩綋");
-        font.setFontHeightInPoints((short) 11);
-        CellStyle cellStyle = commonStyle(wb);
-        cellStyle.setFont(font);
-        return cellStyle;
-    }
-
-    /**
-     * 鍐呭鏍峰紡
-     */
-    private static CellStyle contentStyle(Workbook wb){
-        Font font = wb.createFont();
-        font.setFontName("瀹嬩綋");
-        font.setFontHeightInPoints((short) 10);
-        CellStyle cellStyle = commonStyle(wb);
-        cellStyle.setFont(font);
-        return cellStyle;
-    }
-
-    /**
-     * 鍏叡鏍峰紡
-     */
-    private static CellStyle commonStyle(Workbook wb){
-        CellStyle style = wb.createCellStyle();
-        style.setAlignment(HorizontalAlignment.CENTER);
-        style.setVerticalAlignment(VerticalAlignment.CENTER);
-        style.setBorderBottom(BorderStyle.THIN);
-        style.setBorderLeft(BorderStyle.THIN);
-        style.setBorderTop(BorderStyle.THIN);
-        style.setBorderRight(BorderStyle.THIN);
-        style.setWrapText(true);// 鑷姩鎹㈣
-        return style;
+    public static ImportParams getDefaultImportParams() {
+        ImportParams params = new ImportParams();
+        return params;
     }
 
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrController.java
index 47024db..df029e2 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrController.java
@@ -1,5 +1,9 @@
 package com.vincent.rsf.server.manager.controller;
 
+import cn.afterturn.easypoi.excel.ExcelImportUtil;
+import cn.afterturn.easypoi.excel.entity.ImportParams;
+import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
+import cn.afterturn.easypoi.excel.imports.ExcelImportService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.vincent.rsf.framework.common.Cools;
@@ -21,6 +25,8 @@
 import org.springframework.http.HttpHeaders;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
 import javax.servlet.http.HttpServletResponse;
 import java.util.*;
 
@@ -134,4 +140,17 @@
         ExcelUtil.build(ExcelUtil.create(matnrService.list(), Matnr.class), response);
     }
 
+    @PreAuthorize("hasAuthority('manager:matnr:save')")
+    @ApiOperation(value = "excel琛ㄦ牸瀵煎叆鐗╂枡淇℃伅")
+    @PostMapping("/matnr/import")
+    public R listImport(MultipartFile file) {
+        try {
+            ExcelImportResult<Matnr> objectExcelImportResult = ExcelImportUtil.importExcelMore(file.getInputStream(), Matnr.class, ExcelUtil.getDefaultImportParams());
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+
+        return R.ok();
+    }
+
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrGroupController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrGroupController.java
index 26d45fe..0775852 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrGroupController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrGroupController.java
@@ -109,14 +109,14 @@
     @PostMapping("/matnrGroup/tree")
     public R tree(@RequestBody Map<String, Object> map) {
         List<MatnrGroup> matnrs = new ArrayList<>();
-        if (Objects.isNull(map)) {
-            matnrs = matnrGroupService.list(new LambdaQueryWrapper<>());
-        } else {
-            if (Objects.isNull(map.get("condition"))) {
-                return R.ok("condition鍙傛暟涓嶈兘涓虹┖锛侊紒");
-            }
-            matnrs = matnrGroupService.list(new LambdaQueryWrapper<MatnrGroup>().like(MatnrGroup::getName, map.get("condition")));
-        }
+        matnrs = matnrGroupService.list(new LambdaQueryWrapper<>());
+//        if (Objects.isNull(map)) {
+//        } else {
+//            if (Objects.isNull(map.get("condition"))) {
+//                return R.ok("condition鍙傛暟涓嶈兘涓虹┖锛侊紒");
+//            }
+//            matnrs = matnrGroupService.list(new LambdaQueryWrapper<MatnrGroup>().like(MatnrGroup::getName, map.get("condition")));
+//        }
         List<MatnrGroup> treeData = Utils.toTreeData(matnrs, 0L, MatnrGroup::getParentId, MatnrGroup::getId, MatnrGroup::setChildren);
         return R.ok().add(treeData);
     }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Matnr.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Matnr.java
index 99d544c..e2bb486 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Matnr.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Matnr.java
@@ -57,6 +57,9 @@
     @ApiModelProperty(value= "璐т富ID")
     private Long shipperId;
 
+//    @ApiModelProperty(value = "璐т富缂栫爜")
+//    private String shipperCode;
+
     /**
      * 鍒嗙粍ID(*)
      */
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/MatnrsTemplate.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/MatnrsTemplate.java
new file mode 100644
index 0000000..7ecf8b2
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/MatnrsTemplate.java
@@ -0,0 +1,141 @@
+package com.vincent.rsf.server.manager.entity.excel;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import cn.afterturn.easypoi.handler.inter.IExcelDataModel;
+import cn.afterturn.easypoi.handler.inter.IExcelModel;
+import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelAutoColumnSize;
+import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelComment;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * @author Ryan
+ * @version 1.0
+ * @title MatnrsTemplate
+ * @description
+ * @create 2025/3/3 08:40
+ */
+@Data
+@ExcelAutoColumnSize
+@Accessors(chain = true)
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = false)
+public class MatnrsTemplate implements IExcelModel, IExcelDataModel, Serializable {
+
+    @Excel(name = "鐗╂枡鍚嶇О")
+    @ExcelComment(example = "鍗庝负鎵嬫満")
+    private String name;
+
+    @Excel(name = "璐т富缂栫爜")
+    @ExcelComment(example = "PO12625")
+    private String shipperCode;
+
+    @Excel(name = "鍒嗙被鍚嶇О")
+    @ExcelComment(example = "绉诲姩璁惧")
+    private String groupName;
+
+    @Excel(name = "鐗╂枡鍔╄鐮�")
+    @ExcelComment(example = "P3528461569")
+    private String erpCode;
+
+    @Excel(name = "瑙勬牸")
+    @ExcelComment(example = "HW-148*68*10")
+    private String spec;
+
+    @Excel(name = "鍨嬪彿")
+    @ExcelComment(example = "鍗庝负涓夋姌鍙�")
+    private String model;
+
+    @Excel(name = "閲嶉噺")
+    @ExcelComment(notNull = false, example = "258g")
+    private String weight;
+
+    @Excel(name = "棰滆壊")
+    @ExcelComment(notNull = false, example = "绱孩鑹�")
+    private String color;
+
+    @Excel(name = "澶у皬")
+    @ExcelComment(notNull = false, example = "148*68*10")
+    private String size;
+
+    @Excel(name = "鎻忚堪")
+    @ExcelComment(notNull = false, example = "鏂颁笂甯備笁鎶樺彔")
+    private String describle;
+
+    @Excel(name = "鎻忚堪")
+    @ExcelComment(notNull = false, example = "鏂颁笂甯備笁鎶樺彔")
+    private String nromNum;
+
+    @Excel(name = "涓诲崟浣�")
+    @ExcelComment(example = "閮�")
+    private String unit;
+
+    @Excel(name = "閲囪喘鍗曚綅")
+    @ExcelComment(example = "閮�")
+    private String purUnit;
+
+    @Excel(name = "ABC绫�")
+    @ExcelComment(notNull = false, example = "A")
+    private String stockLevel;
+
+    @Excel(name = "瀹夊叏搴撳瓨閲�")
+    @ExcelComment(example = "50")
+    private String safeQty;
+
+    @Excel(name = "鏈�灏忓簱瀛橀噺")
+    @ExcelComment(notNull = false, example = "10")
+    private String minQty;
+
+    @Excel(name = "鏈�澶у簱瀛橀噺")
+    @ExcelComment(notNull = false, example = "150")
+    private String maxQty;
+
+    @Excel(name = "鍋滄粸澶╂暟")
+    @ExcelComment(notNull = false, example = "25")
+    private String stagn;
+
+    @Excel(name = "鏈夋晥鏈�")
+    @ExcelComment(notNull = false, example = "25")
+    private String valid;
+
+    @Excel(name = "鏉″舰鐮�")
+    @ExcelComment(notNull = false, example = "8001354")
+    private String barcode;
+
+    @Excel(name = "鏁堟湡棰勮闃堝��")
+    @ExcelComment(notNull = false, example = "2025-01-25 14:25:36")
+    private String validWarn;
+
+    @Excel(name = "鏄惁鍏嶆")
+    @ExcelComment(notNull = false, example = "鍚�")
+    private String flagCheck;
+
+    private Integer rowNum;
+
+    private String errorMsg;
+
+
+    @Override
+    public Integer getRowNum() {
+        return this.rowNum;
+    }
+
+    @Override
+    public void setRowNum(Integer rowNum) {
+        this.rowNum = rowNum;
+    }
+
+    @Override
+    public String getErrorMsg() {
+        return this.errorMsg;
+    }
+
+    @Override
+    public void setErrorMsg(String errorMsg) {
+        this.errorMsg = errorMsg;
+    }
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/annotation/ExcelAutoColumnSize.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/annotation/ExcelAutoColumnSize.java
new file mode 100644
index 0000000..8d5ce06
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/annotation/ExcelAutoColumnSize.java
@@ -0,0 +1,20 @@
+package com.vincent.rsf.server.manager.entity.excel.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @author: Ryan
+ * @create: 2025/3/01 13:29
+ * @version: 1.0
+ * @description: excel 鍒楀鑷�傚簲
+ */
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ExcelAutoColumnSize {
+
+    /** 鍚敤 */
+    boolean enable() default true;
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/annotation/ExcelComment.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/annotation/ExcelComment.java
new file mode 100644
index 0000000..fac36fa
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/annotation/ExcelComment.java
@@ -0,0 +1,30 @@
+package com.vincent.rsf.server.manager.entity.excel.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @author: Ryan
+ * @create: 2025/3/01 13:29
+ * @version: 1.0
+ * @description: excel 娉ㄩ噴
+ */
+@Target({ElementType.METHOD, ElementType.FIELD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ExcelComment {
+
+    /** 澶囨敞淇℃伅 */
+    String value() default "";
+
+    /** 鏄惁闈炵┖銆傝嚜鍔ㄥ湪澶囨敞鍚庨潰鎷兼帴 "蹇呭~椤�"*/
+    boolean notNull() default true;
+
+
+    /** 瀛楀吀鍊硷紝濡傛灉涓嶄负绌猴紝浼氬湪 {@link #value()} 鐨勫悗闈㈠姞涓� 鍙�夊�硷細label1銆乴abel2 */
+    String dict() default "";
+
+    /** 绀轰緥鍊硷紱璋冪敤{@link ExcelUtils#mockData(Class)} 鏃� 灏嗕粠姝ゅ瓧娈靛彇鍊� */
+    String example() default "";
+}
\ No newline at end of file
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/annotation/ExcelField.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/annotation/ExcelField.java
new file mode 100644
index 0000000..a44d94f
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/annotation/ExcelField.java
@@ -0,0 +1,60 @@
+/**
+ * Copyright &copy; 2012-2016 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.
+ */
+package com.vincent.rsf.server.manager.entity.excel.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Excel娉ㄨВ瀹氫箟
+ * @author ThinkGem
+ * @version 2013-03-10
+ */
+@Target({ElementType.METHOD, ElementType.FIELD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ExcelField {
+
+	/**
+	 * 瀵煎嚭瀛楁鍚嶏紙榛樿璋冪敤褰撳墠瀛楁鐨勨�済et鈥濇柟娉曪紝濡傛寚瀹氬鍑哄瓧娈典负瀵硅薄锛岃濉啓鈥滃璞″悕.瀵硅薄灞炴�р�濓紝渚嬶細鈥渁rea.name鈥濄�佲�渙ffice.name鈥濓級
+	 */
+	String value() default "";
+	
+	/**
+	 * 瀵煎嚭瀛楁鏍囬锛堥渶瑕佹坊鍔犳壒娉ㄨ鐢ㄢ��**鈥濆垎闅旓紝鏍囬**鎵规敞锛屼粎瀵瑰鍑烘ā鏉挎湁鏁堬級
+	 */
+	String title();
+	
+	/**
+	 * 瀛楁绫诲瀷锛�0锛氬鍑哄鍏ワ紱1锛氫粎瀵煎嚭锛�2锛氫粎瀵煎叆锛�
+	 */
+	int type() default 0;
+
+	/**
+	 * 瀵煎嚭瀛楁瀵归綈鏂瑰紡锛�0锛氳嚜鍔紱1锛氶潬宸︼紱2锛氬眳涓紱3锛氶潬鍙筹級
+	 */
+	int align() default 0;
+	
+	/**
+	 * 瀵煎嚭瀛楁瀛楁鎺掑簭锛堝崌搴忥級
+	 */
+	int sort() default 0;
+
+	/**
+	 * 濡傛灉鏄瓧鍏哥被鍨嬶紝璇疯缃瓧鍏哥殑type鍊�
+	 */
+	String dictType() default "";
+	
+	/**
+	 * 鍙嶅皠绫诲瀷
+	 */
+	Class<?> fieldType() default Class.class;
+	
+	/**
+	 * 瀛楁褰掑睘缁勶紙鏍规嵁鍒嗙粍瀵煎嚭瀵煎叆锛�
+	 */
+	int[] groups() default {};
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/BaseController.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/BaseController.java
index bcb9262..bada2f7 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/BaseController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/BaseController.java
@@ -13,6 +13,7 @@
 /**
  * Created by vincent on 1/30/2024
  */
+
 public class BaseController {
 
     public User getLoginUser() {

--
Gitblit v1.9.1