Browse Source

档案新增页面校对01

lululu 2 days ago
parent
commit
9f814f9c5b

+ 14 - 14
ruoyi-meeting/src/main/java/com/ruoyi/controller/MeetingController.java

@@ -22,10 +22,10 @@ import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.common.core.page.TableDataInfo;
 
 /**
- * 会议表Controller
+ * 会议表Controller
  * 
- * @author lu
- * @date 2025-10-13
+ * @author ruoyi
+ * @date 2025-10-14
  */
 @RestController
 @RequestMapping("/meeting")
@@ -35,7 +35,7 @@ public class MeetingController extends BaseController
     private IMeetingService meetingService;
 
     /**
-     * 查询会议表列表
+     * 查询会议表列表
      */
     @PreAuthorize("@ss.hasPermi('meeting:meeting:list')")
     @GetMapping("/list")
@@ -47,20 +47,20 @@ public class MeetingController extends BaseController
     }
 
     /**
-     * 导出会议表列表
+     * 导出会议表列表
      */
     @PreAuthorize("@ss.hasPermi('meeting:meeting:export')")
-    @Log(title = "会议表", businessType = BusinessType.EXPORT)
+    @Log(title = "会议表", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response, Meeting meeting)
     {
         List<Meeting> list = meetingService.selectMeetingList(meeting);
         ExcelUtil<Meeting> util = new ExcelUtil<Meeting>(Meeting.class);
-        util.exportExcel(response, list, "会议表数据");
+        util.exportExcel(response, list, "会议表数据");
     }
 
     /**
-     * 获取会议表详细信息
+     * 获取会议表详细信息
      */
     @PreAuthorize("@ss.hasPermi('meeting:meeting:query')")
     @GetMapping(value = "/{meetingId}")
@@ -70,10 +70,10 @@ public class MeetingController extends BaseController
     }
 
     /**
-     * 新增会议
+     * 新增会议表
      */
     @PreAuthorize("@ss.hasPermi('meeting:meeting:add')")
-    @Log(title = "会议表", businessType = BusinessType.INSERT)
+    @Log(title = "会议表", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody Meeting meeting)
     {
@@ -81,10 +81,10 @@ public class MeetingController extends BaseController
     }
 
     /**
-     * 修改会议
+     * 修改会议表
      */
     @PreAuthorize("@ss.hasPermi('meeting:meeting:edit')")
-    @Log(title = "会议表", businessType = BusinessType.UPDATE)
+    @Log(title = "会议表", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody Meeting meeting)
     {
@@ -92,10 +92,10 @@ public class MeetingController extends BaseController
     }
 
     /**
-     * 删除会议
+     * 删除会议表
      */
     @PreAuthorize("@ss.hasPermi('meeting:meeting:remove')")
-    @Log(title = "会议表", businessType = BusinessType.DELETE)
+    @Log(title = "会议表", businessType = BusinessType.DELETE)
 	@DeleteMapping("/{meetingIds}")
     public AjaxResult remove(@PathVariable Long[] meetingIds)
     {

+ 104 - 0
ruoyi-meeting/src/main/java/com/ruoyi/controller/TopicLibraryController.java

@@ -0,0 +1,104 @@
+package com.ruoyi.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.domain.TopicLibrary;
+import com.ruoyi.service.ITopicLibraryService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 议题库Controller
+ * 
+ * @author lu
+ * @date 2025-10-14
+ */
+@RestController
+@RequestMapping("/library")
+public class TopicLibraryController extends BaseController
+{
+    @Autowired
+    private ITopicLibraryService topicLibraryService;
+
+    /**
+     * 查询议题库列表
+     */
+    @PreAuthorize("@ss.hasPermi('library:library:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TopicLibrary topicLibrary)
+    {
+        startPage();
+        List<TopicLibrary> list = topicLibraryService.selectTopicLibraryList(topicLibrary);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出议题库列表
+     */
+    @PreAuthorize("@ss.hasPermi('library:library:export')")
+    @Log(title = "议题库", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TopicLibrary topicLibrary)
+    {
+        List<TopicLibrary> list = topicLibraryService.selectTopicLibraryList(topicLibrary);
+        ExcelUtil<TopicLibrary> util = new ExcelUtil<TopicLibrary>(TopicLibrary.class);
+        util.exportExcel(response, list, "议题库数据");
+    }
+
+    /**
+     * 获取议题库详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('library:library:query')")
+    @GetMapping(value = "/{topicId}")
+    public AjaxResult getInfo(@PathVariable("topicId") Long topicId)
+    {
+        return success(topicLibraryService.selectTopicLibraryByTopicId(topicId));
+    }
+
+    /**
+     * 新增议题库
+     */
+    @PreAuthorize("@ss.hasPermi('library:library:add')")
+    @Log(title = "议题库", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TopicLibrary topicLibrary)
+    {
+        return toAjax(topicLibraryService.insertTopicLibrary(topicLibrary));
+    }
+
+    /**
+     * 修改议题库
+     */
+    @PreAuthorize("@ss.hasPermi('library:library:edit')")
+    @Log(title = "议题库", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TopicLibrary topicLibrary)
+    {
+        return toAjax(topicLibraryService.updateTopicLibrary(topicLibrary));
+    }
+
+    /**
+     * 删除议题库
+     */
+    @PreAuthorize("@ss.hasPermi('library:library:remove')")
+    @Log(title = "议题库", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{topicIds}")
+    public AjaxResult remove(@PathVariable Long[] topicIds)
+    {
+        return toAjax(topicLibraryService.deleteTopicLibraryByTopicIds(topicIds));
+    }
+}

+ 55 - 5
ruoyi-meeting/src/main/java/com/ruoyi/domain/Meeting.java

@@ -8,10 +8,10 @@ import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.BaseEntity;
 
 /**
- * 会议表对象 meeting
+ * 会议表对象 meeting
  * 
- * @author lu
- * @date 2025-10-13
+ * @author ruoyi
+ * @date 2025-10-14
  */
 public class Meeting extends BaseEntity
 {
@@ -43,6 +43,7 @@ public class Meeting extends BaseEntity
     private Date endTime;
 
     /** 会议室(外键) */
+    @Excel(name = "会议室(外键)")
     private Long roomId;
 
     /** 会议地址(选择会议室填充) */
@@ -50,15 +51,32 @@ public class Meeting extends BaseEntity
     private String roomDetail;
 
     /** 提前进场时间(当日具体时间) */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "提前进场时间(当日具体时间)", width = 30, dateFormat = "yyyy-MM-dd")
     private Date enterTime;
 
     /** 入会人员id(外键入会人员表) */
+    @Excel(name = "入会人员id(外键入会人员表)")
     private Long membersId;
 
     /** 会议签到(0否1是) */
+    @Excel(name = "会议签到(0否1是)")
     private Long meetingCheck;
 
+    /** 签到模式(0点击1手写) */
+    @Excel(name = "签到模式(0点击1手写)")
+    private Long checkMode;
+
+    /** 会议通知(0禁用1启用) */
+    @Excel(name = "会议通知(0禁用1启用)")
+    private Long meetingNotice;
+
+    /** 通知内容 */
+    @Excel(name = "通知内容")
+    private String noticeText;
+
     /** 会议维护人 */
+    @Excel(name = "会议维护人")
     private String maintenance;
 
     /** 承办组织 */
@@ -66,9 +84,11 @@ public class Meeting extends BaseEntity
     private Long checkOrganization;
 
     /** 会后查阅附件(0禁用1启用) */
+    @Excel(name = "会后查阅附件(0禁用1启用)")
     private Long selectText;
 
     /** 议题id(外键议题表) */
+    @Excel(name = "议题id(外键议题表)")
     private Long topicId;
 
     /** 发布时间 */
@@ -76,7 +96,7 @@ public class Meeting extends BaseEntity
     @Excel(name = "发布时间", width = 30, dateFormat = "yyyy-MM-dd")
     private Date meetingTime;
 
-    /** 删除标识0正常1删除 */
+    /** 删除标识 */
     private Long delFlag;
 
     public void setMeetingId(Long meetingId) 
@@ -178,6 +198,33 @@ public class Meeting extends BaseEntity
     {
         return meetingCheck;
     }
+    public void setCheckMode(Long checkMode) 
+    {
+        this.checkMode = checkMode;
+    }
+
+    public Long getCheckMode() 
+    {
+        return checkMode;
+    }
+    public void setMeetingNotice(Long meetingNotice) 
+    {
+        this.meetingNotice = meetingNotice;
+    }
+
+    public Long getMeetingNotice() 
+    {
+        return meetingNotice;
+    }
+    public void setNoticeText(String noticeText) 
+    {
+        this.noticeText = noticeText;
+    }
+
+    public String getNoticeText() 
+    {
+        return noticeText;
+    }
     public void setMaintenance(String maintenance) 
     {
         this.maintenance = maintenance;
@@ -247,13 +294,16 @@ public class Meeting extends BaseEntity
             .append("enterTime", getEnterTime())
             .append("membersId", getMembersId())
             .append("meetingCheck", getMeetingCheck())
+            .append("checkMode", getCheckMode())
+            .append("meetingNotice", getMeetingNotice())
+            .append("noticeText", getNoticeText())
             .append("maintenance", getMaintenance())
             .append("checkOrganization", getCheckOrganization())
             .append("selectText", getSelectText())
             .append("topicId", getTopicId())
             .append("meetingTime", getMeetingTime())
-            .append("delFlag", getDelFlag())
             .append("remark", getRemark())
+            .append("delFlag", getDelFlag())
             .toString();
     }
 }

+ 193 - 0
ruoyi-meeting/src/main/java/com/ruoyi/domain/TopicLibrary.java

@@ -0,0 +1,193 @@
+package com.ruoyi.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 议题库对象 topic_library
+ * 
+ * @author lu
+ * @date 2025-10-14
+ */
+public class TopicLibrary extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 议题id */
+    private Long topicId;
+
+    /** 议题名称 */
+    @Excel(name = "议题名称")
+    private String topicName;
+
+    /** 议题密码 */
+    @Excel(name = "议题密码")
+    private String topicPassword;
+
+    /** 议题内容 */
+    @Excel(name = "议题内容")
+    private String topicText;
+
+    /** 文件路径 */
+    @Excel(name = "文件路径")
+    private String filePath;
+
+    /** 文件名称 */
+    @Excel(name = "文件名称")
+    private String fileName;
+
+    /** 上传人 */
+    @Excel(name = "上传人")
+    private String uplpadUser;
+
+    /** 上传时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "上传时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date uploadTime;
+
+    /** 上报部门 */
+    @Excel(name = "上报部门")
+    private Long upDept;
+
+    /** 汇报人 */
+    @Excel(name = "汇报人")
+    private String report;
+
+    /** 删除标识 0正常 1删除 */
+    private Long delFlag;
+
+    /** 议题状态 */
+    @Excel(name = "议题状态")
+    private Long topicState;
+
+    public void setTopicId(Long topicId) 
+    {
+        this.topicId = topicId;
+    }
+
+    public Long getTopicId() 
+    {
+        return topicId;
+    }
+    public void setTopicName(String topicName) 
+    {
+        this.topicName = topicName;
+    }
+
+    public String getTopicName() 
+    {
+        return topicName;
+    }
+    public void setTopicPassword(String topicPassword) 
+    {
+        this.topicPassword = topicPassword;
+    }
+
+    public String getTopicPassword() 
+    {
+        return topicPassword;
+    }
+    public void setTopicText(String topicText) 
+    {
+        this.topicText = topicText;
+    }
+
+    public String getTopicText() 
+    {
+        return topicText;
+    }
+    public void setFilePath(String filePath) 
+    {
+        this.filePath = filePath;
+    }
+
+    public String getFilePath() 
+    {
+        return filePath;
+    }
+    public void setFileName(String fileName) 
+    {
+        this.fileName = fileName;
+    }
+
+    public String getFileName() 
+    {
+        return fileName;
+    }
+    public void setUplpadUser(String uplpadUser) 
+    {
+        this.uplpadUser = uplpadUser;
+    }
+
+    public String getUplpadUser() 
+    {
+        return uplpadUser;
+    }
+    public void setUploadTime(Date uploadTime) 
+    {
+        this.uploadTime = uploadTime;
+    }
+
+    public Date getUploadTime() 
+    {
+        return uploadTime;
+    }
+    public void setUpDept(Long upDept) 
+    {
+        this.upDept = upDept;
+    }
+
+    public Long getUpDept() 
+    {
+        return upDept;
+    }
+    public void setReport(String report) 
+    {
+        this.report = report;
+    }
+
+    public String getReport() 
+    {
+        return report;
+    }
+    public void setDelFlag(Long delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public Long getDelFlag() 
+    {
+        return delFlag;
+    }
+    public void setTopicState(Long topicState) 
+    {
+        this.topicState = topicState;
+    }
+
+    public Long getTopicState() 
+    {
+        return topicState;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("topicId", getTopicId())
+            .append("topicName", getTopicName())
+            .append("topicPassword", getTopicPassword())
+            .append("topicText", getTopicText())
+            .append("filePath", getFilePath())
+            .append("fileName", getFileName())
+            .append("uplpadUser", getUplpadUser())
+            .append("uploadTime", getUploadTime())
+            .append("upDept", getUpDept())
+            .append("report", getReport())
+            .append("delFlag", getDelFlag())
+            .append("topicState", getTopicState())
+            .toString();
+    }
+}

+ 16 - 16
ruoyi-meeting/src/main/java/com/ruoyi/mapper/MeetingMapper.java

@@ -4,55 +4,55 @@ import java.util.List;
 import com.ruoyi.domain.Meeting;
 
 /**
- * 会议表Mapper接口
+ * 会议表Mapper接口
  * 
- * @author lu
- * @date 2025-10-13
+ * @author ruoyi
+ * @date 2025-10-14
  */
 public interface MeetingMapper 
 {
     /**
-     * 查询会议
+     * 查询会议表
      * 
-     * @param meetingId 会议表主键
-     * @return 会议
+     * @param meetingId 会议表主键
+     * @return 会议表
      */
     public Meeting selectMeetingByMeetingId(Long meetingId);
 
     /**
-     * 查询会议表列表
+     * 查询会议表列表
      * 
-     * @param meeting 会议
-     * @return 会议表集合
+     * @param meeting 会议表
+     * @return 会议表集合
      */
     public List<Meeting> selectMeetingList(Meeting meeting);
 
     /**
-     * 新增会议
+     * 新增会议表
      * 
-     * @param meeting 会议
+     * @param meeting 会议表
      * @return 结果
      */
     public int insertMeeting(Meeting meeting);
 
     /**
-     * 修改会议
+     * 修改会议表
      * 
-     * @param meeting 会议
+     * @param meeting 会议表
      * @return 结果
      */
     public int updateMeeting(Meeting meeting);
 
     /**
-     * 删除会议
+     * 删除会议表
      * 
-     * @param meetingId 会议表主键
+     * @param meetingId 会议表主键
      * @return 结果
      */
     public int deleteMeetingByMeetingId(Long meetingId);
 
     /**
-     * 批量删除会议
+     * 批量删除会议表
      * 
      * @param meetingIds 需要删除的数据主键集合
      * @return 结果

+ 61 - 0
ruoyi-meeting/src/main/java/com/ruoyi/mapper/TopicLibraryMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.mapper;
+
+import java.util.List;
+import com.ruoyi.domain.TopicLibrary;
+
+/**
+ * 议题库Mapper接口
+ * 
+ * @author lu
+ * @date 2025-10-14
+ */
+public interface TopicLibraryMapper 
+{
+    /**
+     * 查询议题库
+     * 
+     * @param topicId 议题库主键
+     * @return 议题库
+     */
+    public TopicLibrary selectTopicLibraryByTopicId(Long topicId);
+
+    /**
+     * 查询议题库列表
+     * 
+     * @param topicLibrary 议题库
+     * @return 议题库集合
+     */
+    public List<TopicLibrary> selectTopicLibraryList(TopicLibrary topicLibrary);
+
+    /**
+     * 新增议题库
+     * 
+     * @param topicLibrary 议题库
+     * @return 结果
+     */
+    public int insertTopicLibrary(TopicLibrary topicLibrary);
+
+    /**
+     * 修改议题库
+     * 
+     * @param topicLibrary 议题库
+     * @return 结果
+     */
+    public int updateTopicLibrary(TopicLibrary topicLibrary);
+
+    /**
+     * 删除议题库
+     * 
+     * @param topicId 议题库主键
+     * @return 结果
+     */
+    public int deleteTopicLibraryByTopicId(Long topicId);
+
+    /**
+     * 批量删除议题库
+     * 
+     * @param topicIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTopicLibraryByTopicIds(Long[] topicIds);
+}

+ 17 - 17
ruoyi-meeting/src/main/java/com/ruoyi/service/IMeetingService.java

@@ -4,57 +4,57 @@ import java.util.List;
 import com.ruoyi.domain.Meeting;
 
 /**
- * 会议表Service接口
+ * 会议表Service接口
  * 
- * @author lu
- * @date 2025-10-13
+ * @author ruoyi
+ * @date 2025-10-14
  */
 public interface IMeetingService 
 {
     /**
-     * 查询会议
+     * 查询会议表
      * 
-     * @param meetingId 会议表主键
-     * @return 会议
+     * @param meetingId 会议表主键
+     * @return 会议表
      */
     public Meeting selectMeetingByMeetingId(Long meetingId);
 
     /**
-     * 查询会议表列表
+     * 查询会议表列表
      * 
-     * @param meeting 会议
-     * @return 会议表集合
+     * @param meeting 会议表
+     * @return 会议表集合
      */
     public List<Meeting> selectMeetingList(Meeting meeting);
 
     /**
-     * 新增会议
+     * 新增会议表
      * 
-     * @param meeting 会议
+     * @param meeting 会议表
      * @return 结果
      */
     public int insertMeeting(Meeting meeting);
 
     /**
-     * 修改会议
+     * 修改会议表
      * 
-     * @param meeting 会议
+     * @param meeting 会议表
      * @return 结果
      */
     public int updateMeeting(Meeting meeting);
 
     /**
-     * 批量删除会议
+     * 批量删除会议表
      * 
-     * @param meetingIds 需要删除的会议表主键集合
+     * @param meetingIds 需要删除的会议表主键集合
      * @return 结果
      */
     public int deleteMeetingByMeetingIds(Long[] meetingIds);
 
     /**
-     * 删除会议表信息
+     * 删除会议表信息
      * 
-     * @param meetingId 会议表主键
+     * @param meetingId 会议表主键
      * @return 结果
      */
     public int deleteMeetingByMeetingId(Long meetingId);

+ 61 - 0
ruoyi-meeting/src/main/java/com/ruoyi/service/ITopicLibraryService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.service;
+
+import java.util.List;
+import com.ruoyi.domain.TopicLibrary;
+
+/**
+ * 议题库Service接口
+ * 
+ * @author lu
+ * @date 2025-10-14
+ */
+public interface ITopicLibraryService 
+{
+    /**
+     * 查询议题库
+     * 
+     * @param topicId 议题库主键
+     * @return 议题库
+     */
+    public TopicLibrary selectTopicLibraryByTopicId(Long topicId);
+
+    /**
+     * 查询议题库列表
+     * 
+     * @param topicLibrary 议题库
+     * @return 议题库集合
+     */
+    public List<TopicLibrary> selectTopicLibraryList(TopicLibrary topicLibrary);
+
+    /**
+     * 新增议题库
+     * 
+     * @param topicLibrary 议题库
+     * @return 结果
+     */
+    public int insertTopicLibrary(TopicLibrary topicLibrary);
+
+    /**
+     * 修改议题库
+     * 
+     * @param topicLibrary 议题库
+     * @return 结果
+     */
+    public int updateTopicLibrary(TopicLibrary topicLibrary);
+
+    /**
+     * 批量删除议题库
+     * 
+     * @param topicIds 需要删除的议题库主键集合
+     * @return 结果
+     */
+    public int deleteTopicLibraryByTopicIds(Long[] topicIds);
+
+    /**
+     * 删除议题库信息
+     * 
+     * @param topicId 议题库主键
+     * @return 结果
+     */
+    public int deleteTopicLibraryByTopicId(Long topicId);
+}

+ 17 - 17
ruoyi-meeting/src/main/java/com/ruoyi/service/impl/MeetingServiceImpl.java

@@ -8,10 +8,10 @@ import com.ruoyi.domain.Meeting;
 import com.ruoyi.service.IMeetingService;
 
 /**
- * 会议表Service业务层处理
+ * 会议表Service业务层处理
  * 
- * @author lu
- * @date 2025-10-13
+ * @author ruoyi
+ * @date 2025-10-14
  */
 @Service
 public class MeetingServiceImpl implements IMeetingService 
@@ -20,10 +20,10 @@ public class MeetingServiceImpl implements IMeetingService
     private MeetingMapper meetingMapper;
 
     /**
-     * 查询会议
+     * 查询会议表
      * 
-     * @param meetingId 会议表主键
-     * @return 会议
+     * @param meetingId 会议表主键
+     * @return 会议表
      */
     @Override
     public Meeting selectMeetingByMeetingId(Long meetingId)
@@ -32,10 +32,10 @@ public class MeetingServiceImpl implements IMeetingService
     }
 
     /**
-     * 查询会议表列表
+     * 查询会议表列表
      * 
-     * @param meeting 会议
-     * @return 会议
+     * @param meeting 会议表
+     * @return 会议表
      */
     @Override
     public List<Meeting> selectMeetingList(Meeting meeting)
@@ -44,9 +44,9 @@ public class MeetingServiceImpl implements IMeetingService
     }
 
     /**
-     * 新增会议
+     * 新增会议表
      * 
-     * @param meeting 会议
+     * @param meeting 会议表
      * @return 结果
      */
     @Override
@@ -56,9 +56,9 @@ public class MeetingServiceImpl implements IMeetingService
     }
 
     /**
-     * 修改会议
+     * 修改会议表
      * 
-     * @param meeting 会议
+     * @param meeting 会议表
      * @return 结果
      */
     @Override
@@ -68,9 +68,9 @@ public class MeetingServiceImpl implements IMeetingService
     }
 
     /**
-     * 批量删除会议
+     * 批量删除会议表
      * 
-     * @param meetingIds 需要删除的会议表主键
+     * @param meetingIds 需要删除的会议表主键
      * @return 结果
      */
     @Override
@@ -80,9 +80,9 @@ public class MeetingServiceImpl implements IMeetingService
     }
 
     /**
-     * 删除会议表信息
+     * 删除会议表信息
      * 
-     * @param meetingId 会议表主键
+     * @param meetingId 会议表主键
      * @return 结果
      */
     @Override

+ 93 - 0
ruoyi-meeting/src/main/java/com/ruoyi/service/impl/TopicLibraryServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.mapper.TopicLibraryMapper;
+import com.ruoyi.domain.TopicLibrary;
+import com.ruoyi.service.ITopicLibraryService;
+
+/**
+ * 议题库Service业务层处理
+ * 
+ * @author lu
+ * @date 2025-10-14
+ */
+@Service
+public class TopicLibraryServiceImpl implements ITopicLibraryService 
+{
+    @Autowired
+    private TopicLibraryMapper topicLibraryMapper;
+
+    /**
+     * 查询议题库
+     * 
+     * @param topicId 议题库主键
+     * @return 议题库
+     */
+    @Override
+    public TopicLibrary selectTopicLibraryByTopicId(Long topicId)
+    {
+        return topicLibraryMapper.selectTopicLibraryByTopicId(topicId);
+    }
+
+    /**
+     * 查询议题库列表
+     * 
+     * @param topicLibrary 议题库
+     * @return 议题库
+     */
+    @Override
+    public List<TopicLibrary> selectTopicLibraryList(TopicLibrary topicLibrary)
+    {
+        return topicLibraryMapper.selectTopicLibraryList(topicLibrary);
+    }
+
+    /**
+     * 新增议题库
+     * 
+     * @param topicLibrary 议题库
+     * @return 结果
+     */
+    @Override
+    public int insertTopicLibrary(TopicLibrary topicLibrary)
+    {
+        return topicLibraryMapper.insertTopicLibrary(topicLibrary);
+    }
+
+    /**
+     * 修改议题库
+     * 
+     * @param topicLibrary 议题库
+     * @return 结果
+     */
+    @Override
+    public int updateTopicLibrary(TopicLibrary topicLibrary)
+    {
+        return topicLibraryMapper.updateTopicLibrary(topicLibrary);
+    }
+
+    /**
+     * 批量删除议题库
+     * 
+     * @param topicIds 需要删除的议题库主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTopicLibraryByTopicIds(Long[] topicIds)
+    {
+        return topicLibraryMapper.deleteTopicLibraryByTopicIds(topicIds);
+    }
+
+    /**
+     * 删除议题库信息
+     * 
+     * @param topicId 议题库主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTopicLibraryByTopicId(Long topicId)
+    {
+        return topicLibraryMapper.deleteTopicLibraryByTopicId(topicId);
+    }
+}

+ 97 - 0
ruoyi-meeting/src/main/resources/mapper/library/TopicLibraryMapper.xml

@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.mapper.TopicLibraryMapper">
+    
+    <resultMap type="TopicLibrary" id="TopicLibraryResult">
+        <result property="topicId"    column="topic_id"    />
+        <result property="topicName"    column="topic_name"    />
+        <result property="topicPassword"    column="topic_password"    />
+        <result property="topicText"    column="topic_text"    />
+        <result property="filePath"    column="file_path"    />
+        <result property="fileName"    column="file_name"    />
+        <result property="uplpadUser"    column="uplpad_user"    />
+        <result property="uploadTime"    column="upload_time"    />
+        <result property="upDept"    column="up_dept"    />
+        <result property="report"    column="report"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="topicState"    column="topic_state"    />
+    </resultMap>
+
+    <sql id="selectTopicLibraryVo">
+        select topic_id, topic_name, topic_password, topic_text, file_path, file_name, uplpad_user, upload_time, up_dept, report, del_flag, topic_state from topic_library
+    </sql>
+
+    <select id="selectTopicLibraryList" parameterType="TopicLibrary" resultMap="TopicLibraryResult">
+        <include refid="selectTopicLibraryVo"/>
+        <where>  
+            <if test="topicName != null  and topicName != ''"> and topic_name like concat('%', #{topicName}, '%')</if>
+            <if test="topicState != null "> and topic_state = #{topicState}</if>
+        </where>
+    </select>
+    
+    <select id="selectTopicLibraryByTopicId" parameterType="Long" resultMap="TopicLibraryResult">
+        <include refid="selectTopicLibraryVo"/>
+        where topic_id = #{topicId}
+    </select>
+
+    <insert id="insertTopicLibrary" parameterType="TopicLibrary" useGeneratedKeys="true" keyProperty="topicId">
+        insert into topic_library
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="topicName != null and topicName != ''">topic_name,</if>
+            <if test="topicPassword != null">topic_password,</if>
+            <if test="topicText != null">topic_text,</if>
+            <if test="filePath != null">file_path,</if>
+            <if test="fileName != null">file_name,</if>
+            <if test="uplpadUser != null">uplpad_user,</if>
+            <if test="uploadTime != null">upload_time,</if>
+            <if test="upDept != null">up_dept,</if>
+            <if test="report != null">report,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="topicState != null">topic_state,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="topicName != null and topicName != ''">#{topicName},</if>
+            <if test="topicPassword != null">#{topicPassword},</if>
+            <if test="topicText != null">#{topicText},</if>
+            <if test="filePath != null">#{filePath},</if>
+            <if test="fileName != null">#{fileName},</if>
+            <if test="uplpadUser != null">#{uplpadUser},</if>
+            <if test="uploadTime != null">#{uploadTime},</if>
+            <if test="upDept != null">#{upDept},</if>
+            <if test="report != null">#{report},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="topicState != null">#{topicState},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTopicLibrary" parameterType="TopicLibrary">
+        update topic_library
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="topicName != null and topicName != ''">topic_name = #{topicName},</if>
+            <if test="topicPassword != null">topic_password = #{topicPassword},</if>
+            <if test="topicText != null">topic_text = #{topicText},</if>
+            <if test="filePath != null">file_path = #{filePath},</if>
+            <if test="fileName != null">file_name = #{fileName},</if>
+            <if test="uplpadUser != null">uplpad_user = #{uplpadUser},</if>
+            <if test="uploadTime != null">upload_time = #{uploadTime},</if>
+            <if test="upDept != null">up_dept = #{upDept},</if>
+            <if test="report != null">report = #{report},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="topicState != null">topic_state = #{topicState},</if>
+        </trim>
+        where topic_id = #{topicId}
+    </update>
+
+    <delete id="deleteTopicLibraryByTopicId" parameterType="Long">
+        delete from topic_library where topic_id = #{topicId}
+    </delete>
+
+    <delete id="deleteTopicLibraryByTopicIds" parameterType="String">
+        delete from topic_library where topic_id in 
+        <foreach item="topicId" collection="array" open="(" separator="," close=")">
+            #{topicId}
+        </foreach>
+    </delete>
+</mapper>

+ 27 - 8
ruoyi-meeting/src/main/resources/mapper/meeting/MeetingMapper.xml

@@ -16,22 +16,32 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="enterTime"    column="enter_time"    />
         <result property="membersId"    column="members_id"    />
         <result property="meetingCheck"    column="meeting_check"    />
+        <result property="checkMode"    column="check_mode"    />
+        <result property="meetingNotice"    column="meeting_notice"    />
+        <result property="noticeText"    column="notice_text"    />
         <result property="maintenance"    column="maintenance"    />
         <result property="checkOrganization"    column="check_organization"    />
         <result property="selectText"    column="select_text"    />
         <result property="topicId"    column="topic_id"    />
         <result property="meetingTime"    column="meeting_time"    />
-        <result property="delFlag"    column="del_flag"    />
         <result property="remark"    column="remark"    />
+        <result property="delFlag"    column="del_flag"    />
     </resultMap>
 
     <sql id="selectMeetingVo">
-        select meeting_id, meeting_type, meeting_state, meeting_name, start_time, end_time, room_id, room_detail, enter_time, members_id, meeting_check, maintenance, check_organization, select_text, topic_id, meeting_time, del_flag, remark from meeting
+        select meeting_id, meeting_type, meeting_state, meeting_name, start_time, end_time, room_id, room_detail, enter_time, members_id, meeting_check, check_mode, meeting_notice, notice_text, maintenance, check_organization, select_text, topic_id, meeting_time, remark, del_flag from meeting
     </sql>
 
     <select id="selectMeetingList" parameterType="Meeting" resultMap="MeetingResult">
         <include refid="selectMeetingVo"/>
         <where>  
+            <if test="meetingType != null "> and meeting_type = #{meetingType}</if>
+            <if test="meetingState != null "> and meeting_state = #{meetingState}</if>
+            <if test="meetingName != null  and meetingName != ''"> and meeting_name like concat('%', #{meetingName}, '%')</if>
+            <if test="startTime != null "> and start_time = #{startTime}</if>
+            <if test="endTime != null "> and end_time = #{endTime}</if>
+            <if test="checkOrganization != null "> and check_organization = #{checkOrganization}</if>
+            <if test="topicId != null "> and topic_id = #{topicId}</if>
         </where>
     </select>
     
@@ -45,7 +55,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="meetingType != null">meeting_type,</if>
             <if test="meetingState != null">meeting_state,</if>
-            <if test="meetingName != null and meetingName != ''">meeting_name,</if>
+            <if test="meetingName != null">meeting_name,</if>
             <if test="startTime != null">start_time,</if>
             <if test="endTime != null">end_time,</if>
             <if test="roomId != null">room_id,</if>
@@ -53,18 +63,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="enterTime != null">enter_time,</if>
             <if test="membersId != null">members_id,</if>
             <if test="meetingCheck != null">meeting_check,</if>
+            <if test="checkMode != null">check_mode,</if>
+            <if test="meetingNotice != null">meeting_notice,</if>
+            <if test="noticeText != null">notice_text,</if>
             <if test="maintenance != null">maintenance,</if>
             <if test="checkOrganization != null">check_organization,</if>
             <if test="selectText != null">select_text,</if>
             <if test="topicId != null">topic_id,</if>
             <if test="meetingTime != null">meeting_time,</if>
-            <if test="delFlag != null">del_flag,</if>
             <if test="remark != null">remark,</if>
+            <if test="delFlag != null">del_flag,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="meetingType != null">#{meetingType},</if>
             <if test="meetingState != null">#{meetingState},</if>
-            <if test="meetingName != null and meetingName != ''">#{meetingName},</if>
+            <if test="meetingName != null">#{meetingName},</if>
             <if test="startTime != null">#{startTime},</if>
             <if test="endTime != null">#{endTime},</if>
             <if test="roomId != null">#{roomId},</if>
@@ -72,13 +85,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="enterTime != null">#{enterTime},</if>
             <if test="membersId != null">#{membersId},</if>
             <if test="meetingCheck != null">#{meetingCheck},</if>
+            <if test="checkMode != null">#{checkMode},</if>
+            <if test="meetingNotice != null">#{meetingNotice},</if>
+            <if test="noticeText != null">#{noticeText},</if>
             <if test="maintenance != null">#{maintenance},</if>
             <if test="checkOrganization != null">#{checkOrganization},</if>
             <if test="selectText != null">#{selectText},</if>
             <if test="topicId != null">#{topicId},</if>
             <if test="meetingTime != null">#{meetingTime},</if>
-            <if test="delFlag != null">#{delFlag},</if>
             <if test="remark != null">#{remark},</if>
+            <if test="delFlag != null">#{delFlag},</if>
          </trim>
     </insert>
 
@@ -87,7 +103,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <trim prefix="SET" suffixOverrides=",">
             <if test="meetingType != null">meeting_type = #{meetingType},</if>
             <if test="meetingState != null">meeting_state = #{meetingState},</if>
-            <if test="meetingName != null and meetingName != ''">meeting_name = #{meetingName},</if>
+            <if test="meetingName != null">meeting_name = #{meetingName},</if>
             <if test="startTime != null">start_time = #{startTime},</if>
             <if test="endTime != null">end_time = #{endTime},</if>
             <if test="roomId != null">room_id = #{roomId},</if>
@@ -95,13 +111,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="enterTime != null">enter_time = #{enterTime},</if>
             <if test="membersId != null">members_id = #{membersId},</if>
             <if test="meetingCheck != null">meeting_check = #{meetingCheck},</if>
+            <if test="checkMode != null">check_mode = #{checkMode},</if>
+            <if test="meetingNotice != null">meeting_notice = #{meetingNotice},</if>
+            <if test="noticeText != null">notice_text = #{noticeText},</if>
             <if test="maintenance != null">maintenance = #{maintenance},</if>
             <if test="checkOrganization != null">check_organization = #{checkOrganization},</if>
             <if test="selectText != null">select_text = #{selectText},</if>
             <if test="topicId != null">topic_id = #{topicId},</if>
             <if test="meetingTime != null">meeting_time = #{meetingTime},</if>
-            <if test="delFlag != null">del_flag = #{delFlag},</if>
             <if test="remark != null">remark = #{remark},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
         </trim>
         where meeting_id = #{meetingId}
     </update>

+ 4 - 0
ruoyi-ui/src/router/index.js

@@ -65,6 +65,10 @@ export const constantRoutes = [
     path: '/meeting/meet/index',
     component: () => import('@/views/meeting/meet/index')
   },
+  {
+    path: '/meeting/library/index',
+    component: () => import('@/views/meeting/library/index')
+  },
   {
     path: '',
     component: Layout,

+ 0 - 1
ruoyi-ui/src/views/meeting/group/index.vue

@@ -1 +0,0 @@
-1111

+ 268 - 17
ruoyi-ui/src/views/meeting/meet/index.vue

@@ -1,6 +1,76 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="会议名称" prop="meetingName">
+        <el-input
+          v-model="queryParams.meetingName"
+          placeholder="请输入会议名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="入会人员" prop="membersId">
+        <el-input
+          v-model="queryParams.membersId"
+          placeholder="请输入入会人员"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="承办组织" prop="checkOrganization">
+        <el-input
+          v-model="queryParams.checkOrganization"
+          placeholder="请输入承办组织"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="议题标签" prop="topicId">
+        <el-input
+          v-model="queryParams.topicId"
+          placeholder="请输入议题标签"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="会议类型" prop="meetingType">
+        <el-select v-model="queryParams.meetingType" placeholder="请选择会议类型" clearable>
+          <el-option
+            v-for="dict in dict.type.meeting_type"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="会议状态" prop="meetingState">
+        <el-select v-model="queryParams.meetingState" placeholder="请选择会议状态" clearable>
+          <el-option
+            v-for="dict in dict.type.metting_state"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item><el-form-item label="会议时间">
+        <el-date-picker
+          v-model="queryParams.startTime"
+          type="datetime"
+          value-format="yyyy-MM-dd HH:mm"
+          format="yyyy-MM-dd HH:mm"
+          placeholder="请选择开始时间"
+          style="width: 180px;"
+        />
+        <span style="margin: 0 10px;">至</span>
+        <el-date-picker
+          v-model="queryParams.endTime"
+          type="datetime"
+          value-format="yyyy-MM-dd HH:mm"
+          format="yyyy-MM-dd HH:mm"
+          placeholder="请选择结束时间"
+          style="width: 180px;"
+        />
+      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -112,8 +182,8 @@
     />
 
     <!-- 添加或修改会议列表对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="120px" label-position="left">
         <el-form-item label="会议类型" prop="meetingType">
           <el-select v-model="form.meetingType" placeholder="请选择会议类型">
             <el-option
@@ -124,7 +194,7 @@
             ></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="会议状态" prop="meetingState">
+        <!-- <el-form-item label="会议状态" prop="meetingState">
           <el-select v-model="form.meetingState" placeholder="请选择会议状态">
             <el-option
               v-for="dict in dict.type.meeting_state"
@@ -133,7 +203,7 @@
               :value="parseInt(dict.value)"
             ></el-option>
           </el-select>
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item label="会议名称" prop="meetingName">
           <el-input v-model="form.meetingName" placeholder="请输入会议名称" />
         </el-form-item>
@@ -162,32 +232,99 @@
           <el-input v-model="form.roomDetail" type="textarea" placeholder="请输入内容" />
         </el-form-item>
         <el-form-item label="提前进场时间" prop="enterTime">
-          <el-date-picker clearable
+          <el-time-picker clearable
             v-model="form.enterTime"
-            type="datetime"
             value-format="HH:mm"
             format="HH:mm"
-            placeholder="请选择提前进场时间">
-          </el-date-picker>
+            placeholder="任意时间点"/>
         </el-form-item>
-        <el-form-item label="入会人员" prop="membersId">
-          <el-input v-model="form.membersId" placeholder="请输入入会人员id" />
+        <el-form-item label="添加与会人员" prop="members">
+          <div class="attendees-container">
+            <div v-for="(item, index) in form.members" :key="index" class="attendee-item">
+              <!-- 角色选择(字典) -->
+              <el-select
+                v-model="item.role"
+                placeholder="请选择角色"
+                style="width: 120px; margin-right: 10px;"
+                clearable
+              >
+                <el-option
+                  v-for="dict in dict.type.members"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                />
+              </el-select>
+
+              <!-- 用户选择(树形多选) -->
+              <treeselect
+                v-model="item.userIds"
+                :options="deptOptions"
+                :normalizer="normalizer"
+                :multiple="true"
+                :disable-branch-nodes="true"
+                placeholder="请选择员工"
+                style="width: 300px; margin-right: 10px;"
+              />
+
+              <!-- 删除按钮 -->
+              <el-button
+                type="text"
+                icon="el-icon-delete"
+                @click="removeAttendee(index)"
+              />
+            </div>
+
+            <!-- 新增按钮 -->
+            <el-button
+              type="text"
+              icon="el-icon-plus"
+              @click="addAttendee"
+              style="margin-top: 10px;"
+            />
+          </div>
         </el-form-item>
         <el-form-item label="会议签到" prop="meetingCheck">
-          <el-input v-model="form.meetingCheck" placeholder="请输入会议签到" />
+          <el-radio-group v-model="form.meetingCheck">
+            <el-radio label="1">是</el-radio>
+            <el-radio label="0">否</el-radio>
+          </el-radio-group>
+        </el-form-item>
+
+        <el-form-item label="签到模式" prop="checkmode" v-if="form.meetingCheck === '1'">
+          <el-radio-group v-model="form.checkmode">
+            <el-radio label="0">点击签到</el-radio>
+            <el-radio label="1">手写签到</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="会议通知" prop="meetingNotice">
+          <el-switch
+            v-model="form.meetingNotice"
+            active-value="1"
+            inactive-value="0"
+            active-text="启用"
+            inactive-text="禁用"
+          />
+        </el-form-item>
+        <el-form-item label="通知内容" prop="noticeText">
+          <el-input v-model="form.noticeText" placeholder="请输入会议签到" />
         </el-form-item>
         <el-form-item label="会议维护人" prop="maintenance">
           <el-input v-model="form.maintenance" placeholder="请输入会议维护人" />
         </el-form-item>
         <el-form-item label="承办组织" prop="checkOrganization">
-          <el-input v-model="form.checkOrganization" placeholder="请输入承办组织" />
+          <el-cascader
+            v-model="form.checkOrganization"
+            :options="userTreeOptions"
+            :props="{ multiple: false, checkStrictly: true }"
+            placeholder="请选择承办组织"
+            style="width: 300px; margin-right: 10px;"
+            clearable
+          />
         </el-form-item>
         <el-form-item label="会后查阅附件" prop="selectText">
           <el-input v-model="form.selectText" placeholder="请输入会后查阅附件" />
         </el-form-item>
-        <el-form-item label="议题" prop="topicId">
-          <el-input v-model="form.topicId" placeholder="请输入议题id" />
-        </el-form-item>
         <el-form-item label="发布时间" prop="meetingTime">
           <el-date-picker clearable
             v-model="form.meetingTime"
@@ -202,6 +339,9 @@
         <el-form-item label="备注" prop="remark">
           <el-input v-model="form.remark" placeholder="请输入备注" />
         </el-form-item>
+        <el-form-item label="议题" prop="topicId">
+          <el-input v-model="form.topicId" placeholder="请输入议题id" />
+        </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
@@ -213,10 +353,17 @@
 
 <script>
 import { listMeeting, getMeeting, delMeeting, addMeeting, updateMeeting } from "@/api/meeting/meeting";
+import { deptTreeSelect } from "@/api/system/user"
+import { listDept } from '@/api/system/dept'
+import Treeselect from '@riophae/vue-treeselect'
+import '@riophae/vue-treeselect/dist/vue-treeselect.css'
+
+
 
 export default {
   name: "Meeting",
-  dicts: ['meeting_type', 'meeting_state'],
+  dicts: ['meeting_type', 'meeting_state','members'],
+  components: { Treeselect },
   data() {
     return {
       // 遮罩层
@@ -227,12 +374,15 @@ export default {
       single: true,
       // 非多个禁用
       multiple: true,
+      deptId: 0,
       // 显示搜索条件
       showSearch: true,
       // 总条数
       total: 0,
       // 会议列表表格数据
       meetingList: [],
+      userTreeOptions: [], // 用户树形数据,需从接口获取
+      deptOptions: [],
       // 弹出层标题
       title: "",
       // 是否显示弹出层
@@ -241,11 +391,22 @@ export default {
       queryParams: {
         pageNum: 1,
         pageSize: 10,
+        meetingType: null,
+        meetingState: null,
+        meetingName: null,
+        membersId: null,
+        checkOrganization: null,
+        topicId: null,
+        startTime:null,
+        endTime:null,
       },
       // 表单参数
       form: {},
       // 表单校验
       rules: {
+        meetingType: [
+          { required: true, message: "会议类型不能为空", trigger: "blur" }
+        ],
         meetingName: [
           { required: true, message: "会议名称不能为空", trigger: "blur" }
         ],
@@ -255,13 +416,76 @@ export default {
         endTime: [
           { required: true, message: "会议结束时间不能为空", trigger: "blur" }
         ],
+        members: [
+          { required: true, message: "请至少添加一名与会人员", trigger: "blur" }
+        ],
+        meetingCheck: [
+          { required: true, message: "请选择是否需要签到", trigger: "change" }
+        ],
+        checkmode: [
+          { required: true, message: "请选择签到模式", trigger: "change", validator: (rule, value, callback) => {
+            if (this.form.meetingCheck === '1' && !value) {
+              callback(new Error("请选择签到模式"));
+            } else {
+              callback();
+            }
+          }}
+        ],
       }
     };
   },
   created() {
     this.getList();
+    this.loadUserTree();
   },
   methods: {
+    loadUserTree() {
+      deptTreeSelect().then(response => {
+        this.userTreeOptions = response.data;
+      });
+      listDept().then(response => {
+        this.deptOptions = this.handleTree(response.data, 'deptId')
+      })
+    },
+    handleTree(data, idField) {
+      const uniqueData = data.reduce((acc, current) => {
+        if (!acc.some(item => item[idField] === current[idField])) {
+          acc.push(current);
+        }
+        return acc;
+      }, []);
+      return this.buildTree(uniqueData, idField);
+    },
+    buildTree(data, idField = 'deptId', parentField = 'parentId', childrenField = 'children') {
+      const map = {};
+      const tree = [];
+
+      data.forEach(item => {
+        map[item[idField]] = { ...item };
+      });
+
+      data.forEach(item => {
+        const parentId = item[parentField];
+        if (parentId && map[parentId]) {
+          if (!map[parentId][childrenField]) {
+            map[parentId][childrenField] = [];
+          }
+          map[parentId][childrenField].push(map[item[idField]]);
+        } else if (parentId === 0 || !map[parentId]) {
+          tree.push(map[item[idField]]);
+        }
+      });
+
+      return tree;
+    },
+    addAttendee() {
+      this.form.members.push({ role: null, userIds: [] });
+    },
+    removeAttendee(index) {
+      if (this.form.members.length > 1) {
+        this.form.members.splice(index, 1);
+      }
+    },
     /** 查询会议列表列表 */
     getList() {
       this.loading = true;
@@ -288,8 +512,11 @@ export default {
         roomId: null,
         roomDetail: null,
         enterTime: null,
-        membersId: null,
+        members: [],
+        checkmode: null,
         meetingCheck: null,
+        meetingNotice: "0",
+        noticeText: null,
         maintenance: null,
         checkOrganization: null,
         selectText: null,
@@ -367,7 +594,31 @@ export default {
       this.download('meeting/meeting/export', {
         ...this.queryParams
       }, `meeting_${new Date().getTime()}.xlsx`)
+    },
+    normalizer(node) {
+      if (node.children && !node.children.length) {
+        delete node.children
+      }
+      return {
+        id: node.deptId,
+        label: node.deptName,
+        children: node.children
+      }
     }
   }
 };
 </script>
+
+<style scoped>
+.attendees-container {
+  display: flex;
+  flex-direction: column;
+  gap: 10px;
+}
+
+.attendee-item {
+  display: flex;
+  align-items: center;
+  gap: 10px;
+}
+</style>