浏览代码

LY 会议室预约模块

ly 1 年之前
父节点
当前提交
309622da5d

+ 103 - 0
master/src/main/java/com/ruoyi/project/plant/controller/TConfInfoController.java

@@ -0,0 +1,103 @@
+package com.ruoyi.project.plant.controller;
+
+import java.util.List;
+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.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.project.plant.domain.TConfInfo;
+import com.ruoyi.project.plant.service.ITConfInfoService;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.web.page.TableDataInfo;
+
+/**
+ * 会议预约信息Controller
+ *
+ * @author ssy
+ * @date 2024-05-07
+ */
+@RestController
+@RequestMapping("/plant/confInfo")
+public class TConfInfoController extends BaseController
+{
+    @Autowired
+    private ITConfInfoService tConfInfoService;
+
+    /**
+     * 查询会议预约信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('plant:confInfo:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TConfInfo tConfInfo)
+    {
+        startPage();
+        List<TConfInfo> list = tConfInfoService.selectTConfInfoList(tConfInfo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出会议预约信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('plant:confInfo:export')")
+    @Log(title = "会议预约信息", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(TConfInfo tConfInfo)
+    {
+        List<TConfInfo> list = tConfInfoService.selectTConfInfoList(tConfInfo);
+        ExcelUtil<TConfInfo> util = new ExcelUtil<TConfInfo>(TConfInfo.class);
+        return util.exportExcel(list, "confInfo");
+    }
+
+    /**
+     * 获取会议预约信息详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('plant:confInfo:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tConfInfoService.selectTConfInfoById(id));
+    }
+
+    /**
+     * 新增会议预约信息
+     */
+    @PreAuthorize("@ss.hasPermi('plant:confInfo:add')")
+    @Log(title = "会议预约信息", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TConfInfo tConfInfo)
+    {
+        return toAjax(tConfInfoService.insertTConfInfo(tConfInfo));
+    }
+
+    /**
+     * 修改会议预约信息
+     */
+    @PreAuthorize("@ss.hasPermi('plant:confInfo:edit')")
+    @Log(title = "会议预约信息", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TConfInfo tConfInfo)
+    {
+        return toAjax(tConfInfoService.updateTConfInfo(tConfInfo));
+    }
+
+    /**
+     * 删除会议预约信息
+     */
+    @PreAuthorize("@ss.hasPermi('plant:confInfo:remove')")
+    @Log(title = "会议预约信息", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tConfInfoService.deleteTConfInfoByIds(ids));
+    }
+}

+ 103 - 0
master/src/main/java/com/ruoyi/project/plant/controller/TConfRoomController.java

@@ -0,0 +1,103 @@
+package com.ruoyi.project.plant.controller;
+
+import java.util.List;
+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.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.project.plant.domain.TConfRoom;
+import com.ruoyi.project.plant.service.ITConfRoomService;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.web.page.TableDataInfo;
+
+/**
+ * 会议室管理Controller
+ *
+ * @author ssy
+ * @date 2024-04-29
+ */
+@RestController
+@RequestMapping("/plant/confRoom")
+public class TConfRoomController extends BaseController
+{
+    @Autowired
+    private ITConfRoomService tConfRoomService;
+
+    /**
+     * 查询会议室管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('plant:confRoom:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TConfRoom tConfRoom)
+    {
+        startPage();
+        List<TConfRoom> list = tConfRoomService.selectTConfRoomList(tConfRoom);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出会议室管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('plant:confRoom:export')")
+    @Log(title = "会议室管理", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(TConfRoom tConfRoom)
+    {
+        List<TConfRoom> list = tConfRoomService.selectTConfRoomList(tConfRoom);
+        ExcelUtil<TConfRoom> util = new ExcelUtil<TConfRoom>(TConfRoom.class);
+        return util.exportExcel(list, "confRoom");
+    }
+
+    /**
+     * 获取会议室管理详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('plant:confRoom:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tConfRoomService.selectTConfRoomById(id));
+    }
+
+    /**
+     * 新增会议室管理
+     */
+    @PreAuthorize("@ss.hasPermi('plant:confRoom:add')")
+    @Log(title = "会议室管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TConfRoom tConfRoom)
+    {
+        return toAjax(tConfRoomService.insertTConfRoom(tConfRoom));
+    }
+
+    /**
+     * 修改会议室管理
+     */
+    @PreAuthorize("@ss.hasPermi('plant:confRoom:edit')")
+    @Log(title = "会议室管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TConfRoom tConfRoom)
+    {
+        return toAjax(tConfRoomService.updateTConfRoom(tConfRoom));
+    }
+
+    /**
+     * 删除会议室管理
+     */
+    @PreAuthorize("@ss.hasPermi('plant:confRoom:remove')")
+    @Log(title = "会议室管理", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tConfRoomService.deleteTConfRoomByIds(ids));
+    }
+}

+ 350 - 0
master/src/main/java/com/ruoyi/project/plant/domain/TConfInfo.java

@@ -0,0 +1,350 @@
+package com.ruoyi.project.plant.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.framework.web.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 会议预约信息对象 t_conf_info
+ *
+ * @author ssy
+ * @date 2024-05-07
+ */
+public class TConfInfo extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 会议室id */
+    @Excel(name = "会议室id")
+    private Long roomId;
+
+    /** 会议主题 */
+    @Excel(name = "会议主题")
+    private String subject;
+
+    /** 召集人 */
+    @Excel(name = "召集人")
+    private String convenerId;
+
+    /** 召集人姓名 */
+    @Excel(name = "召集人姓名")
+    private String convenerName;
+
+    /** 会议室名称 */
+    @Excel(name = "会议室名称")
+    private String roomName;
+
+    /** 参会人 */
+    @Excel(name = "参会人")
+    private String participantsList;
+
+    /** 会议开始时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8")
+    @Excel(name = "会议开始时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date beginDatetime;
+
+    /** 会议结束时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8")
+    @Excel(name = "会议结束时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date endDatetime;
+
+    /** 颜色 */
+    @Excel(name = "颜色")
+    private String color;
+
+    /** 全天显示 */
+    @Excel(name = "全天显示")
+    private String isAllday;
+
+    /** 生成频率 */
+    @Excel(name = "生成频率")
+    private String genFrequency;
+
+    /** 生成月 */
+    @Excel(name = "生成月")
+    private String genMonth;
+
+    /** 生成日 */
+    @Excel(name = "生成日")
+    private String genDay;
+
+    /** 生成日期 */
+    @Excel(name = "生成日期")
+    private String genDate;
+
+    /** 生成时间 */
+    @Excel(name = "生成时间")
+    private String genDatetime;
+
+    /** 删除 */
+    private Long delFlag;
+
+    /** 创建人 */
+    @Excel(name = "创建人")
+    private String createrCode;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8")
+    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date createdate;
+
+    /** 更新人 */
+    @Excel(name = "更新人")
+    private String updaterCode;
+
+    /** 更新日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8")
+    @Excel(name = "更新日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date updatedate;
+
+    /** 所属部门 */
+    @Excel(name = "所属部门")
+    private Long deptId;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    private String remarks;
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+    public void setRoomId(Long roomId)
+    {
+        this.roomId = roomId;
+    }
+
+    public Long getRoomId()
+    {
+        return roomId;
+    }
+    public void setSubject(String subject)
+    {
+        this.subject = subject;
+    }
+
+    public String getSubject()
+    {
+        return subject;
+    }
+    public void setConvenerId(String convenerId)
+    {
+        this.convenerId = convenerId;
+    }
+
+    public String getConvenerId()
+    {
+        return convenerId;
+    }
+    public void setConvenerName(String convenerName)
+    {
+        this.convenerName = convenerName;
+    }
+
+    public String getConvenerName()
+    {
+        return convenerName;
+    }
+    public void setRoomName(String roomName)
+    {
+        this.roomName = roomName;
+    }
+
+    public String getRoomName()
+    {
+        return roomName;
+    }
+    public void setParticipantsList(String participantsList)
+    {
+        this.participantsList = participantsList;
+    }
+
+    public String getParticipantsList()
+    {
+        return participantsList;
+    }
+    public void setBeginDatetime(Date beginDatetime)
+    {
+        this.beginDatetime = beginDatetime;
+    }
+
+    public Date getBeginDatetime()
+    {
+        return beginDatetime;
+    }
+    public void setEndDatetime(Date endDatetime)
+    {
+        this.endDatetime = endDatetime;
+    }
+
+    public Date getEndDatetime()
+    {
+        return endDatetime;
+    }
+    public void setColor(String color)
+    {
+        this.color = color;
+    }
+
+    public String getColor()
+    {
+        return color;
+    }
+    public void setIsAllday(String isAllday)
+    {
+        this.isAllday = isAllday;
+    }
+
+    public String getIsAllday()
+    {
+        return isAllday;
+    }
+    public void setGenFrequency(String genFrequency)
+    {
+        this.genFrequency = genFrequency;
+    }
+
+    public String getGenFrequency()
+    {
+        return genFrequency;
+    }
+    public void setGenMonth(String genMonth)
+    {
+        this.genMonth = genMonth;
+    }
+
+    public String getGenMonth()
+    {
+        return genMonth;
+    }
+    public void setGenDay(String genDay)
+    {
+        this.genDay = genDay;
+    }
+
+    public String getGenDay()
+    {
+        return genDay;
+    }
+    public void setGenDate(String genDate)
+    {
+        this.genDate = genDate;
+    }
+
+    public String getGenDate()
+    {
+        return genDate;
+    }
+    public void setGenDatetime(String genDatetime)
+    {
+        this.genDatetime = genDatetime;
+    }
+
+    public String getGenDatetime()
+    {
+        return genDatetime;
+    }
+    public void setDelFlag(Long delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public Long getDelFlag()
+    {
+        return delFlag;
+    }
+    public void setCreaterCode(String createrCode)
+    {
+        this.createrCode = createrCode;
+    }
+
+    public String getCreaterCode()
+    {
+        return createrCode;
+    }
+    public void setCreatedate(Date createdate)
+    {
+        this.createdate = createdate;
+    }
+
+    public Date getCreatedate()
+    {
+        return createdate;
+    }
+    public void setUpdaterCode(String updaterCode)
+    {
+        this.updaterCode = updaterCode;
+    }
+
+    public String getUpdaterCode()
+    {
+        return updaterCode;
+    }
+    public void setUpdatedate(Date updatedate)
+    {
+        this.updatedate = updatedate;
+    }
+
+    public Date getUpdatedate()
+    {
+        return updatedate;
+    }
+    public void setDeptId(Long deptId)
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId()
+    {
+        return deptId;
+    }
+    public void setRemarks(String remarks)
+    {
+        this.remarks = remarks;
+    }
+
+    public String getRemarks()
+    {
+        return remarks;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("roomId", getRoomId())
+            .append("subject", getSubject())
+            .append("convenerId", getConvenerId())
+            .append("convenerName", getConvenerName())
+            .append("roomName", getRoomName())
+            .append("participantsList", getParticipantsList())
+            .append("beginDatetime", getBeginDatetime())
+            .append("endDatetime", getEndDatetime())
+            .append("color", getColor())
+            .append("isAllday", getIsAllday())
+            .append("genFrequency", getGenFrequency())
+            .append("genMonth", getGenMonth())
+            .append("genDay", getGenDay())
+            .append("genDate", getGenDate())
+            .append("genDatetime", getGenDatetime())
+            .append("delFlag", getDelFlag())
+            .append("createrCode", getCreaterCode())
+            .append("createdate", getCreatedate())
+            .append("updaterCode", getUpdaterCode())
+            .append("updatedate", getUpdatedate())
+            .append("deptId", getDeptId())
+            .append("remarks", getRemarks())
+            .toString();
+    }
+}

+ 250 - 0
master/src/main/java/com/ruoyi/project/plant/domain/TConfRoom.java

@@ -0,0 +1,250 @@
+package com.ruoyi.project.plant.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.framework.web.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 会议室管理对象 t_conf_room
+ *
+ * @author ssy
+ * @date 2024-04-29
+ */
+public class TConfRoom extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 会议室名称 */
+    @Excel(name = "会议室名称")
+    private String roomName;
+
+    /** 办公区域名称 */
+    @Excel(name = "办公区域名称")
+    private String areaName;
+
+    /** 会议室容量 */
+    @Excel(name = "会议室容量")
+    private Long roomCapacity;
+
+    /** 设备 */
+    @Excel(name = "设备")
+    private String deviceList;
+
+    /** 会议室管理员 */
+    @Excel(name = "会议室管理员")
+    private String roomManageUser;
+
+    /** 会议室管理员姓名 */
+    @Excel(name = "会议室管理员姓名")
+    private String roomManageName;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    private Long status;
+
+    /** 删除 */
+    private Long delFlag;
+
+    /** 创建人 */
+    @Excel(name = "创建人")
+    private String createrCode;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date createdate;
+
+    /** 更新人 */
+    @Excel(name = "更新人")
+    private String updaterCode;
+
+    /** 更新日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "更新日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date updatedate;
+
+    /** 所属部门 */
+    @Excel(name = "所属部门")
+    private Long deptId;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    private String remarks;
+
+    /** 会议室照片 */
+    @Excel(name = "会议室照片")
+    private String roomPic;
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+    public void setRoomName(String roomName)
+    {
+        this.roomName = roomName;
+    }
+
+    public String getRoomName()
+    {
+        return roomName;
+    }
+    public void setAreaName(String areaName)
+    {
+        this.areaName = areaName;
+    }
+
+    public String getAreaName()
+    {
+        return areaName;
+    }
+    public void setRoomCapacity(Long roomCapacity)
+    {
+        this.roomCapacity = roomCapacity;
+    }
+
+    public Long getRoomCapacity()
+    {
+        return roomCapacity;
+    }
+    public void setDeviceList(String deviceList)
+    {
+        this.deviceList = deviceList;
+    }
+
+    public String getDeviceList()
+    {
+        return deviceList;
+    }
+    public void setRoomManageUser(String roomManageUser)
+    {
+        this.roomManageUser = roomManageUser;
+    }
+
+    public String getRoomManageUser()
+    {
+        return roomManageUser;
+    }
+    public void setRoomManageName(String roomManageName)
+    {
+        this.roomManageName = roomManageName;
+    }
+
+    public String getRoomManageName()
+    {
+        return roomManageName;
+    }
+    public void setStatus(Long status)
+    {
+        this.status = status;
+    }
+
+    public Long getStatus()
+    {
+        return status;
+    }
+    public void setDelFlag(Long delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public Long getDelFlag()
+    {
+        return delFlag;
+    }
+    public void setCreaterCode(String createrCode)
+    {
+        this.createrCode = createrCode;
+    }
+
+    public String getCreaterCode()
+    {
+        return createrCode;
+    }
+    public void setCreatedate(Date createdate)
+    {
+        this.createdate = createdate;
+    }
+
+    public Date getCreatedate()
+    {
+        return createdate;
+    }
+    public void setUpdaterCode(String updaterCode)
+    {
+        this.updaterCode = updaterCode;
+    }
+
+    public String getUpdaterCode()
+    {
+        return updaterCode;
+    }
+    public void setUpdatedate(Date updatedate)
+    {
+        this.updatedate = updatedate;
+    }
+
+    public Date getUpdatedate()
+    {
+        return updatedate;
+    }
+    public void setDeptId(Long deptId)
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId()
+    {
+        return deptId;
+    }
+    public void setRemarks(String remarks)
+    {
+        this.remarks = remarks;
+    }
+
+    public String getRemarks()
+    {
+        return remarks;
+    }
+    public void setRoomPic(String roomPic)
+    {
+        this.roomPic = roomPic;
+    }
+
+    public String getRoomPic()
+    {
+        return roomPic;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("roomName", getRoomName())
+            .append("areaName", getAreaName())
+            .append("roomCapacity", getRoomCapacity())
+            .append("deviceList", getDeviceList())
+            .append("roomManageUser", getRoomManageUser())
+            .append("roomManageName", getRoomManageName())
+            .append("status", getStatus())
+            .append("delFlag", getDelFlag())
+            .append("createrCode", getCreaterCode())
+            .append("createdate", getCreatedate())
+            .append("updaterCode", getUpdaterCode())
+            .append("updatedate", getUpdatedate())
+            .append("deptId", getDeptId())
+            .append("remarks", getRemarks())
+            .append("roomPic", getRoomPic())
+            .toString();
+    }
+}

+ 63 - 0
master/src/main/java/com/ruoyi/project/plant/mapper/TConfInfoMapper.java

@@ -0,0 +1,63 @@
+package com.ruoyi.project.plant.mapper;
+
+import java.util.List;
+import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
+import com.ruoyi.project.plant.domain.TConfInfo;
+
+/**
+ * 会议预约信息Mapper接口
+ *
+ * @author ssy
+ * @date 2024-05-06
+ */
+public interface TConfInfoMapper
+{
+    /**
+     * 查询会议预约信息
+     *
+     * @param id 会议预约信息ID
+     * @return 会议预约信息
+     */
+    public TConfInfo selectTConfInfoById(Long id);
+
+    /**
+     * 查询会议预约信息列表
+     *
+     * @param tConfInfo 会议预约信息
+     * @return 会议预约信息集合
+     */
+    @DataScope(deptAlias = "d")
+    public List<TConfInfo> selectTConfInfoList(TConfInfo tConfInfo);
+
+    /**
+     * 新增会议预约信息
+     *
+     * @param tConfInfo 会议预约信息
+     * @return 结果
+     */
+    public int insertTConfInfo(TConfInfo tConfInfo);
+
+    /**
+     * 修改会议预约信息
+     *
+     * @param tConfInfo 会议预约信息
+     * @return 结果
+     */
+    public int updateTConfInfo(TConfInfo tConfInfo);
+
+    /**
+     * 删除会议预约信息
+     *
+     * @param id 会议预约信息ID
+     * @return 结果
+     */
+    public int deleteTConfInfoById(Long id);
+
+    /**
+     * 批量删除会议预约信息
+     *
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteTConfInfoByIds(Long[] ids);
+}

+ 63 - 0
master/src/main/java/com/ruoyi/project/plant/mapper/TConfRoomMapper.java

@@ -0,0 +1,63 @@
+package com.ruoyi.project.plant.mapper;
+
+import java.util.List;
+import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
+import com.ruoyi.project.plant.domain.TConfRoom;
+
+/**
+ * 会议室管理Mapper接口
+ *
+ * @author ssy
+ * @date 2024-04-29
+ */
+public interface TConfRoomMapper
+{
+    /**
+     * 查询会议室管理
+     *
+     * @param id 会议室管理ID
+     * @return 会议室管理
+     */
+    public TConfRoom selectTConfRoomById(Long id);
+
+    /**
+     * 查询会议室管理列表
+     *
+     * @param tConfRoom 会议室管理
+     * @return 会议室管理集合
+     */
+    @DataScope(deptAlias = "d")
+    public List<TConfRoom> selectTConfRoomList(TConfRoom tConfRoom);
+
+    /**
+     * 新增会议室管理
+     *
+     * @param tConfRoom 会议室管理
+     * @return 结果
+     */
+    public int insertTConfRoom(TConfRoom tConfRoom);
+
+    /**
+     * 修改会议室管理
+     *
+     * @param tConfRoom 会议室管理
+     * @return 结果
+     */
+    public int updateTConfRoom(TConfRoom tConfRoom);
+
+    /**
+     * 删除会议室管理
+     *
+     * @param id 会议室管理ID
+     * @return 结果
+     */
+    public int deleteTConfRoomById(Long id);
+
+    /**
+     * 批量删除会议室管理
+     *
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteTConfRoomByIds(Long[] ids);
+}

+ 61 - 0
master/src/main/java/com/ruoyi/project/plant/service/ITConfInfoService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.project.plant.service;
+
+import java.util.List;
+import com.ruoyi.project.plant.domain.TConfInfo;
+
+/**
+ * 会议预约信息Service接口
+ *
+ * @author ssy
+ * @date 2024-05-06
+ */
+public interface ITConfInfoService
+{
+    /**
+     * 查询会议预约信息
+     *
+     * @param id 会议预约信息ID
+     * @return 会议预约信息
+     */
+    public TConfInfo selectTConfInfoById(Long id);
+
+    /**
+     * 查询会议预约信息列表
+     *
+     * @param tConfInfo 会议预约信息
+     * @return 会议预约信息集合
+     */
+    public List<TConfInfo> selectTConfInfoList(TConfInfo tConfInfo);
+
+    /**
+     * 新增会议预约信息
+     *
+     * @param tConfInfo 会议预约信息
+     * @return 结果
+     */
+    public int insertTConfInfo(TConfInfo tConfInfo);
+
+    /**
+     * 修改会议预约信息
+     *
+     * @param tConfInfo 会议预约信息
+     * @return 结果
+     */
+    public int updateTConfInfo(TConfInfo tConfInfo);
+
+    /**
+     * 批量删除会议预约信息
+     *
+     * @param ids 需要删除的会议预约信息ID
+     * @return 结果
+     */
+    public int deleteTConfInfoByIds(Long[] ids);
+
+    /**
+     * 删除会议预约信息信息
+     *
+     * @param id 会议预约信息ID
+     * @return 结果
+     */
+    public int deleteTConfInfoById(Long id);
+}

+ 61 - 0
master/src/main/java/com/ruoyi/project/plant/service/ITConfRoomService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.project.plant.service;
+
+import java.util.List;
+import com.ruoyi.project.plant.domain.TConfRoom;
+
+/**
+ * 会议室管理Service接口
+ *
+ * @author ssy
+ * @date 2024-04-29
+ */
+public interface ITConfRoomService
+{
+    /**
+     * 查询会议室管理
+     *
+     * @param id 会议室管理ID
+     * @return 会议室管理
+     */
+    public TConfRoom selectTConfRoomById(Long id);
+
+    /**
+     * 查询会议室管理列表
+     *
+     * @param tConfRoom 会议室管理
+     * @return 会议室管理集合
+     */
+    public List<TConfRoom> selectTConfRoomList(TConfRoom tConfRoom);
+
+    /**
+     * 新增会议室管理
+     *
+     * @param tConfRoom 会议室管理
+     * @return 结果
+     */
+    public int insertTConfRoom(TConfRoom tConfRoom);
+
+    /**
+     * 修改会议室管理
+     *
+     * @param tConfRoom 会议室管理
+     * @return 结果
+     */
+    public int updateTConfRoom(TConfRoom tConfRoom);
+
+    /**
+     * 批量删除会议室管理
+     *
+     * @param ids 需要删除的会议室管理ID
+     * @return 结果
+     */
+    public int deleteTConfRoomByIds(Long[] ids);
+
+    /**
+     * 删除会议室管理信息
+     *
+     * @param id 会议室管理ID
+     * @return 结果
+     */
+    public int deleteTConfRoomById(Long id);
+}

+ 93 - 0
master/src/main/java/com/ruoyi/project/plant/service/impl/TConfInfoServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.project.plant.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.project.plant.mapper.TConfInfoMapper;
+import com.ruoyi.project.plant.domain.TConfInfo;
+import com.ruoyi.project.plant.service.ITConfInfoService;
+
+/**
+ * 会议预约信息Service业务层处理
+ *
+ * @author ssy
+ * @date 2024-05-06
+ */
+@Service
+public class TConfInfoServiceImpl implements ITConfInfoService
+{
+    @Autowired
+    private TConfInfoMapper tConfInfoMapper;
+
+    /**
+     * 查询会议预约信息
+     *
+     * @param id 会议预约信息ID
+     * @return 会议预约信息
+     */
+    @Override
+    public TConfInfo selectTConfInfoById(Long id)
+    {
+        return tConfInfoMapper.selectTConfInfoById(id);
+    }
+
+    /**
+     * 查询会议预约信息列表
+     *
+     * @param tConfInfo 会议预约信息
+     * @return 会议预约信息
+     */
+    @Override
+    public List<TConfInfo> selectTConfInfoList(TConfInfo tConfInfo)
+    {
+        return tConfInfoMapper.selectTConfInfoList(tConfInfo);
+    }
+
+    /**
+     * 新增会议预约信息
+     *
+     * @param tConfInfo 会议预约信息
+     * @return 结果
+     */
+    @Override
+    public int insertTConfInfo(TConfInfo tConfInfo)
+    {
+        return tConfInfoMapper.insertTConfInfo(tConfInfo);
+    }
+
+    /**
+     * 修改会议预约信息
+     *
+     * @param tConfInfo 会议预约信息
+     * @return 结果
+     */
+    @Override
+    public int updateTConfInfo(TConfInfo tConfInfo)
+    {
+        return tConfInfoMapper.updateTConfInfo(tConfInfo);
+    }
+
+    /**
+     * 批量删除会议预约信息
+     *
+     * @param ids 需要删除的会议预约信息ID
+     * @return 结果
+     */
+    @Override
+    public int deleteTConfInfoByIds(Long[] ids)
+    {
+        return tConfInfoMapper.deleteTConfInfoByIds(ids);
+    }
+
+    /**
+     * 删除会议预约信息信息
+     *
+     * @param id 会议预约信息ID
+     * @return 结果
+     */
+    @Override
+    public int deleteTConfInfoById(Long id)
+    {
+        return tConfInfoMapper.deleteTConfInfoById(id);
+    }
+}

+ 93 - 0
master/src/main/java/com/ruoyi/project/plant/service/impl/TConfRoomServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.project.plant.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.project.plant.mapper.TConfRoomMapper;
+import com.ruoyi.project.plant.domain.TConfRoom;
+import com.ruoyi.project.plant.service.ITConfRoomService;
+
+/**
+ * 会议室管理Service业务层处理
+ *
+ * @author ssy
+ * @date 2024-04-29
+ */
+@Service
+public class TConfRoomServiceImpl implements ITConfRoomService
+{
+    @Autowired
+    private TConfRoomMapper tConfRoomMapper;
+
+    /**
+     * 查询会议室管理
+     *
+     * @param id 会议室管理ID
+     * @return 会议室管理
+     */
+    @Override
+    public TConfRoom selectTConfRoomById(Long id)
+    {
+        return tConfRoomMapper.selectTConfRoomById(id);
+    }
+
+    /**
+     * 查询会议室管理列表
+     *
+     * @param tConfRoom 会议室管理
+     * @return 会议室管理
+     */
+    @Override
+    public List<TConfRoom> selectTConfRoomList(TConfRoom tConfRoom)
+    {
+        return tConfRoomMapper.selectTConfRoomList(tConfRoom);
+    }
+
+    /**
+     * 新增会议室管理
+     *
+     * @param tConfRoom 会议室管理
+     * @return 结果
+     */
+    @Override
+    public int insertTConfRoom(TConfRoom tConfRoom)
+    {
+        return tConfRoomMapper.insertTConfRoom(tConfRoom);
+    }
+
+    /**
+     * 修改会议室管理
+     *
+     * @param tConfRoom 会议室管理
+     * @return 结果
+     */
+    @Override
+    public int updateTConfRoom(TConfRoom tConfRoom)
+    {
+        return tConfRoomMapper.updateTConfRoom(tConfRoom);
+    }
+
+    /**
+     * 批量删除会议室管理
+     *
+     * @param ids 需要删除的会议室管理ID
+     * @return 结果
+     */
+    @Override
+    public int deleteTConfRoomByIds(Long[] ids)
+    {
+        return tConfRoomMapper.deleteTConfRoomByIds(ids);
+    }
+
+    /**
+     * 删除会议室管理信息
+     *
+     * @param id 会议室管理ID
+     * @return 结果
+     */
+    @Override
+    public int deleteTConfRoomById(Long id)
+    {
+        return tConfRoomMapper.deleteTConfRoomById(id);
+    }
+}

+ 157 - 0
master/src/main/resources/mybatis/plant/TConfInfoMapper.xml

@@ -0,0 +1,157 @@
+<?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.project.plant.mapper.TConfInfoMapper">
+
+    <resultMap type="TConfInfo" id="TConfInfoResult">
+        <result property="id"    column="id"    />
+        <result property="roomId"    column="room_id"    />
+        <result property="subject"    column="subject"    />
+        <result property="convenerId"    column="convener_id"    />
+        <result property="convenerName"    column="convener_name"    />
+        <result property="roomName"    column="room_name"    />
+        <result property="participantsList"    column="participants_list"    />
+        <result property="beginDatetime"    column="begin_datetime"    />
+        <result property="endDatetime"    column="end_datetime"    />
+        <result property="color"    column="color"    />
+        <result property="isAllday"    column="is_allday"    />
+        <result property="genFrequency"    column="gen_frequency"    />
+        <result property="genMonth"    column="gen_month"    />
+        <result property="genDay"    column="gen_day"    />
+        <result property="genDate"    column="gen_date"    />
+        <result property="genDatetime"    column="gen_datetime"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createrCode"    column="creater_code"    />
+        <result property="createdate"    column="createdate"    />
+        <result property="updaterCode"    column="updater_code"    />
+        <result property="updatedate"    column="updatedate"    />
+        <result property="deptId"    column="dept_id"    />
+        <result property="remarks"    column="remarks"    />
+        <result property="deptName" column="dept_name" />
+    </resultMap>
+
+    <sql id="selectTConfInfoVo">
+        select d.id, d.room_id, d.subject, d.convener_id, d.convener_name, d.room_name, d.participants_list, d.begin_datetime, d.end_datetime, d.color, d.is_allday, d.gen_frequency, d.gen_month, d.gen_day, d.gen_date, d.gen_datetime, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks ,s.dept_name from t_conf_info d
+      left join sys_dept s on s.dept_id = d.dept_id
+    </sql>
+
+    <select id="selectTConfInfoList" parameterType="TConfInfo" resultMap="TConfInfoResult">
+        <include refid="selectTConfInfoVo"/>
+        <where>
+            <if test="roomId != null "> and room_id = #{roomId}</if>
+            <if test="subject != null  and subject != ''"> and subject = #{subject}</if>
+            <if test="convenerId != null  and convenerId != ''"> and convener_id = #{convenerId}</if>
+            <if test="convenerName != null  and convenerName != ''"> and convener_name like concat(concat('%', #{convenerName}), '%')</if>
+            <if test="roomName != null  and roomName != ''"> and room_name like concat(concat('%', #{roomName}), '%')</if>
+            <if test="beginDatetime != null "> and begin_datetime = #{beginDatetime}</if>
+            <if test="endDatetime != null "> and end_datetime = #{endDatetime}</if>
+            and d.del_flag = 0
+        </where>
+        <!-- 数据范围过滤 -->
+        ${params.dataScope}
+    </select>
+
+    <select id="selectTConfInfoById" parameterType="Long" resultMap="TConfInfoResult">
+        <include refid="selectTConfInfoVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertTConfInfo" parameterType="TConfInfo">
+        <selectKey keyProperty="id" resultType="long" order="BEFORE">
+            SELECT seq_t_conf_info.NEXTVAL as id FROM DUAL
+        </selectKey>
+        insert into t_conf_info
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="roomId != null">room_id,</if>
+            <if test="subject != null">subject,</if>
+            <if test="convenerId != null">convener_id,</if>
+            <if test="convenerName != null">convener_name,</if>
+            <if test="roomName != null">room_name,</if>
+            <if test="participantsList != null">participants_list,</if>
+            <if test="beginDatetime != null">begin_datetime,</if>
+            <if test="endDatetime != null">end_datetime,</if>
+            <if test="color != null">color,</if>
+            <if test="isAllday != null">is_allday,</if>
+            <if test="genFrequency != null">gen_frequency,</if>
+            <if test="genMonth != null">gen_month,</if>
+            <if test="genDay != null">gen_day,</if>
+            <if test="genDate != null">gen_date,</if>
+            <if test="genDatetime != null">gen_datetime,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createrCode != null">creater_code,</if>
+            <if test="createdate != null">createdate,</if>
+            <if test="updaterCode != null">updater_code,</if>
+            <if test="updatedate != null">updatedate,</if>
+            <if test="deptId != null">dept_id,</if>
+            <if test="remarks != null">remarks,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="roomId != null">#{roomId},</if>
+            <if test="subject != null">#{subject},</if>
+            <if test="convenerId != null">#{convenerId},</if>
+            <if test="convenerName != null">#{convenerName},</if>
+            <if test="roomName != null">#{roomName},</if>
+            <if test="participantsList != null">#{participantsList},</if>
+            <if test="beginDatetime != null">#{beginDatetime},</if>
+            <if test="endDatetime != null">#{endDatetime},</if>
+            <if test="color != null">#{color},</if>
+            <if test="isAllday != null">#{isAllday},</if>
+            <if test="genFrequency != null">#{genFrequency},</if>
+            <if test="genMonth != null">#{genMonth},</if>
+            <if test="genDay != null">#{genDay},</if>
+            <if test="genDate != null">#{genDate},</if>
+            <if test="genDatetime != null">#{genDatetime},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createrCode != null">#{createrCode},</if>
+            <if test="createdate != null">#{createdate},</if>
+            <if test="updaterCode != null">#{updaterCode},</if>
+            <if test="updatedate != null">#{updatedate},</if>
+            <if test="deptId != null">#{deptId},</if>
+            <if test="remarks != null">#{remarks},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTConfInfo" parameterType="TConfInfo">
+        update t_conf_info
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="roomId != null">room_id = #{roomId},</if>
+            <if test="subject != null">subject = #{subject},</if>
+            <if test="convenerId != null">convener_id = #{convenerId},</if>
+            <if test="convenerName != null">convener_name = #{convenerName},</if>
+            <if test="roomName != null">room_name = #{roomName},</if>
+            <if test="participantsList != null">participants_list = #{participantsList},</if>
+            <if test="beginDatetime != null">begin_datetime = #{beginDatetime},</if>
+            <if test="endDatetime != null">end_datetime = #{endDatetime},</if>
+            <if test="color != null">color = #{color},</if>
+            <if test="isAllday != null">is_allday = #{isAllday},</if>
+            <if test="genFrequency != null">gen_frequency = #{genFrequency},</if>
+            <if test="genMonth != null">gen_month = #{genMonth},</if>
+            <if test="genDay != null">gen_day = #{genDay},</if>
+            <if test="genDate != null">gen_date = #{genDate},</if>
+            <if test="genDatetime != null">gen_datetime = #{genDatetime},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createrCode != null">creater_code = #{createrCode},</if>
+            <if test="createdate != null">createdate = #{createdate},</if>
+            <if test="updaterCode != null">updater_code = #{updaterCode},</if>
+            <if test="updatedate != null">updatedate = #{updatedate},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+            <if test="remarks != null">remarks = #{remarks},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <update id="deleteTConfInfoById" parameterType="Long">
+        update t_conf_info set del_flag = 2 where id = #{id}
+    </update>
+
+    <update id="deleteTConfInfoByIds" parameterType="String">
+        update t_conf_info set del_flag = 2 where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+
+</mapper>

+ 125 - 0
master/src/main/resources/mybatis/plant/TConfRoomMapper.xml

@@ -0,0 +1,125 @@
+<?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.project.plant.mapper.TConfRoomMapper">
+
+    <resultMap type="TConfRoom" id="TConfRoomResult">
+        <result property="id"    column="id"    />
+        <result property="roomName"    column="room_name"    />
+        <result property="areaName"    column="area_name"    />
+        <result property="roomCapacity"    column="room_capacity"    />
+        <result property="deviceList"    column="device_list"    />
+        <result property="roomManageUser"    column="room_manage_user"    />
+        <result property="roomManageName"    column="room_manage_name"    />
+        <result property="status"    column="status"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createrCode"    column="creater_code"    />
+        <result property="createdate"    column="createdate"    />
+        <result property="updaterCode"    column="updater_code"    />
+        <result property="updatedate"    column="updatedate"    />
+        <result property="deptId"    column="dept_id"    />
+        <result property="remarks"    column="remarks"    />
+        <result property="roomPic"    column="room_pic"    />
+        <result property="deptName" column="dept_name" />
+    </resultMap>
+
+    <sql id="selectTConfRoomVo">
+        select d.id, d.room_name, d.area_name, d.room_capacity, d.device_list, d.room_manage_user, d.room_manage_name, d.status, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.room_pic ,s.dept_name from t_conf_room d
+      left join sys_dept s on s.dept_id = d.dept_id
+    </sql>
+
+    <select id="selectTConfRoomList" parameterType="TConfRoom" resultMap="TConfRoomResult">
+        <include refid="selectTConfRoomVo"/>
+        <where>
+            <if test="roomName != null  and roomName != ''"> and room_name like concat(concat('%', #{roomName}), '%')</if>
+            <if test="areaName != null  and areaName != ''"> and area_name like concat(concat('%', #{areaName}), '%')</if>
+            <if test="roomCapacity != null "> and room_capacity = #{roomCapacity}</if>
+            and d.del_flag = 0
+        </where>
+        <!-- 数据范围过滤 -->
+        ${params.dataScope}
+    </select>
+
+    <select id="selectTConfRoomById" parameterType="Long" resultMap="TConfRoomResult">
+        <include refid="selectTConfRoomVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertTConfRoom" parameterType="TConfRoom">
+        <selectKey keyProperty="id" resultType="long" order="BEFORE">
+            SELECT seq_t_conf_room.NEXTVAL as id FROM DUAL
+        </selectKey>
+        insert into t_conf_room
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="roomName != null and roomName != ''">room_name,</if>
+            <if test="areaName != null">area_name,</if>
+            <if test="roomCapacity != null">room_capacity,</if>
+            <if test="deviceList != null">device_list,</if>
+            <if test="roomManageUser != null">room_manage_user,</if>
+            <if test="roomManageName != null">room_manage_name,</if>
+            <if test="status != null">status,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createrCode != null">creater_code,</if>
+            <if test="createdate != null">createdate,</if>
+            <if test="updaterCode != null">updater_code,</if>
+            <if test="updatedate != null">updatedate,</if>
+            <if test="deptId != null">dept_id,</if>
+            <if test="remarks != null">remarks,</if>
+            <if test="roomPic != null">room_pic,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="roomName != null and roomName != ''">#{roomName},</if>
+            <if test="areaName != null">#{areaName},</if>
+            <if test="roomCapacity != null">#{roomCapacity},</if>
+            <if test="deviceList != null">#{deviceList},</if>
+            <if test="roomManageUser != null">#{roomManageUser},</if>
+            <if test="roomManageName != null">#{roomManageName},</if>
+            <if test="status != null">#{status},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createrCode != null">#{createrCode},</if>
+            <if test="createdate != null">#{createdate},</if>
+            <if test="updaterCode != null">#{updaterCode},</if>
+            <if test="updatedate != null">#{updatedate},</if>
+            <if test="deptId != null">#{deptId},</if>
+            <if test="remarks != null">#{remarks},</if>
+            <if test="roomPic != null">#{roomPic},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTConfRoom" parameterType="TConfRoom">
+        update t_conf_room
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="roomName != null and roomName != ''">room_name = #{roomName},</if>
+            <if test="areaName != null">area_name = #{areaName},</if>
+            <if test="roomCapacity != null">room_capacity = #{roomCapacity},</if>
+            <if test="deviceList != null">device_list = #{deviceList},</if>
+            <if test="roomManageUser != null">room_manage_user = #{roomManageUser},</if>
+            <if test="roomManageName != null">room_manage_name = #{roomManageName},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createrCode != null">creater_code = #{createrCode},</if>
+            <if test="createdate != null">createdate = #{createdate},</if>
+            <if test="updaterCode != null">updater_code = #{updaterCode},</if>
+            <if test="updatedate != null">updatedate = #{updatedate},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+            <if test="remarks != null">remarks = #{remarks},</if>
+            <if test="roomPic != null">room_pic = #{roomPic},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <update id="deleteTConfRoomById" parameterType="Long">
+        update t_conf_room set del_flag = 2 where id = #{id}
+    </update>
+
+    <update id="deleteTConfRoomByIds" parameterType="String">
+        update t_conf_room set del_flag = 2 where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+
+</mapper>

+ 13 - 0
ui/package.json

@@ -40,9 +40,21 @@
     "url": "https://gitee.com/y_project/RuoYi-Vue.git"
   },
   "dependencies": {
+    "@fullcalendar/bootstrap": "^5.0.0",
+    "@fullcalendar/core": "^5.0.0",
+    "@fullcalendar/daygrid": "^5.0.0",
+    "@fullcalendar/interaction": "^5.0.0",
+    "@fullcalendar/list": "^5.1.0",
+    "@fullcalendar/moment": "^5.0.0",
+    "@fullcalendar/resource-daygrid": "^5.1.0",
+    "@fullcalendar/resource-timegrid": "^5.1.0",
+    "@fullcalendar/timegrid": "^5.0.0",
+    "@fullcalendar/timeline": "^5.1.0",
+    "@fullcalendar/vue": "^5.0.0",
     "@jiaminghi/data-view": "^2.10.0",
     "@popperjs/core": "^2.11.5",
     "@riophae/vue-treeselect": "0.4.0",
+    "bootstrap": "^4.5.0",
     "axios": "^0.21.1",
     "clipboard": "2.0.4",
     "core-js": "3.6.5",
@@ -57,6 +69,7 @@
     "jsencrypt": "3.0.0-rc.1",
     "less": "^4.1.3",
     "less-loader": "^11.1.0",
+    "moment": "^2.30.1",
     "normalize.css": "7.0.0",
     "nprogress": "0.2.0",
     "path-to-regexp": "2.4.0",

+ 53 - 0
ui/src/api/plant/confInfo.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询会议预约信息列表
+export function listConfInfo(query) {
+  return request({
+    url: '/plant/confInfo/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询会议预约信息详细
+export function getConfInfo(id) {
+  return request({
+    url: '/plant/confInfo/' + id,
+    method: 'get'
+  })
+}
+
+// 新增会议预约信息
+export function addConfInfo(data) {
+  return request({
+    url: '/plant/confInfo',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改会议预约信息
+export function updateConfInfo(data) {
+  return request({
+    url: '/plant/confInfo',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除会议预约信息
+export function delConfInfo(id) {
+  return request({
+    url: '/plant/confInfo/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出会议预约信息
+export function exportConfInfo(query) {
+  return request({
+    url: '/plant/confInfo/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
ui/src/api/plant/confRoom.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询会议室管理列表
+export function listConfRoom(query) {
+  return request({
+    url: '/plant/confRoom/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询会议室管理详细
+export function getConfRoom(id) {
+  return request({
+    url: '/plant/confRoom/' + id,
+    method: 'get'
+  })
+}
+
+// 新增会议室管理
+export function addConfRoom(data) {
+  return request({
+    url: '/plant/confRoom',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改会议室管理
+export function updateConfRoom(data) {
+  return request({
+    url: '/plant/confRoom',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除会议室管理
+export function delConfRoom(id) {
+  return request({
+    url: '/plant/confRoom/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出会议室管理
+export function exportConfRoom(query) {
+  return request({
+    url: '/plant/confRoom/export',
+    method: 'get',
+    params: query
+  })
+}

+ 13 - 0
ui/src/router/index.js

@@ -232,6 +232,19 @@ export const constantRoutes = [
       }
     ]
   },
+  {
+    path: '/plant',
+    component: Layout,
+    hidden: true,
+    children: [
+      {
+        path: 'confInfoList',
+        component: (resolve) => require(['@/views/plant/confInfo/list'], resolve),
+        name: 'confInfoList',
+        meta: { title: '会议预约记录'}
+      },
+    ]
+  },
   {
     path: '/production',
     component: Layout,

+ 50 - 0
ui/src/utils/date.js

@@ -0,0 +1,50 @@
+export const calcDate = (date1, date2) => {
+  var date3 = date2 - date1;
+
+  var days = Math.floor(date3 / (24 * 3600 * 1000))
+
+  var leave1 = date3 % (24 * 3600 * 1000) //计算天数后剩余的毫秒数
+  var hours = Math.floor(leave1 / (3600 * 1000))
+
+  var leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数
+  var minutes = Math.floor(leave2 / (60 * 1000))
+
+  var leave3 = leave2 % (60 * 1000) //计算分钟数后剩余的毫秒数
+  var seconds = Math.round(date3 / 1000)
+  return {
+    leave1,
+    leave2,
+    leave3,
+    days: days,
+    hours: hours,
+    minutes: minutes,
+    seconds: seconds,
+  }
+}
+/**
+ * 日期格式化
+ */
+export function dateFormat(date) {
+  let format = 'yyyy-MM-dd hh:mm:ss';
+  if (date != 'Invalid Date') {
+    var o = {
+      'M+': date.getMonth() + 1, //month
+      'd+': date.getDate(), //day
+      'h+': date.getHours(), //hour
+      'm+': date.getMinutes(), //minute
+      's+': date.getSeconds(), //second
+      'q+': Math.floor((date.getMonth() + 3) / 3), //quarter
+      'S': date.getMilliseconds() //millisecond
+    }
+    if (/(y+)/.test(format)) format = format.replace(RegExp.$1,
+      (date.getFullYear() + '').substr(4 - RegExp.$1.length));
+    for (var k in o)
+      if (new RegExp('(' + k + ')').test(format))
+        format = format.replace(RegExp.$1,
+          RegExp.$1.length == 1 ? o[k] :
+            ('00' + o[k]).substr(('' + o[k]).length));
+    return format;
+  }
+  return '';
+
+}

+ 9 - 0
ui/src/utils/event-utils.js

@@ -0,0 +1,9 @@
+
+let eventGuid = 0
+let todayStr = new Date().toISOString().replace(/T.*$/, '') // YYYY-MM-DD of today
+
+export const INITIAL_EVENTS = []
+
+export function createEventId() {
+  return String(eventGuid++)
+}

+ 668 - 0
ui/src/views/plant/confInfo/index.vue

@@ -0,0 +1,668 @@
+<template>
+  <div class="app-container conference">
+    <div class='conference-right'>
+      <FullCalendar
+        ref="fullCalendar"
+        class='calendar-full'
+        :options='calendarOptions'>
+      </FullCalendar>
+    </div>
+    <div style="position: absolute; top:40px; left:200px">
+      会议室:
+      <!--      <el-select v-model="conferenceInfo.defultConferenceRoomId" placeholder="请选择会议室" style="width:300px; " size='small' @change="changeConferenceRoom" >-->
+      <!--        <el-option-->
+      <!--          v-for="item in conferenceInfo.conferenceRoom"-->
+      <!--          :key="item.value"-->
+      <!--          :label="item.label"-->
+      <!--          :value="item.value">-->
+      <!--        </el-option>-->
+      <!--      </el-select>-->
+    </div>
+
+    <div style="position: absolute; top:40px; right:300px">
+      <el-button
+        type="primary"
+        size="mini"
+        @click="goToList"
+      >预约记录
+      </el-button>
+    </div>
+
+    <!-- 添加或修改会议预约信息对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="会议室id" prop="roomId">
+          <el-input v-model="form.roomId" placeholder="请输入会议室id"/>
+        </el-form-item>
+        <el-form-item label="会议主题" prop="subject">
+          <el-input v-model="form.subject" placeholder="请输入会议主题"/>
+        </el-form-item>
+        <el-form-item label="召集人" prop="convenerId">
+          <el-input v-model="form.convenerId" placeholder="请输入召集人"/>
+        </el-form-item>
+        <el-form-item label="召集人姓名" prop="convenerName">
+          <el-input v-model="form.convenerName" placeholder="请输入召集人姓名"/>
+        </el-form-item>
+        <el-form-item label="会议室名称" prop="roomName">
+          <el-input v-model="form.roomName" placeholder="请输入会议室名称"/>
+        </el-form-item>
+        <el-form-item label="参会人" prop="participantsList">
+          <el-input v-model="form.participantsList" placeholder="请输入参会人"/>
+        </el-form-item>
+        <el-form-item label="会议开始时间" prop="beginDatetime">
+          <el-date-picker clearable size="small" style="width: 200px"
+                          v-model="form.beginDatetime"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          placeholder="选择会议开始时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="会议结束时间" prop="endDatetime">
+          <el-date-picker clearable size="small" style="width: 200px"
+                          v-model="form.endDatetime"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          placeholder="选择会议结束时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="颜色" prop="color">
+          <el-input v-model="form.color" placeholder="请输入颜色"/>
+        </el-form-item>
+        <el-form-item label="全天显示" prop="isAllday">
+          <el-input v-model="form.isAllday" placeholder="请输入全天显示"/>
+        </el-form-item>
+        <el-form-item label="生成频率" prop="genFrequency">
+          <el-input v-model="form.genFrequency" placeholder="请输入生成频率"/>
+        </el-form-item>
+        <el-form-item label="生成月" prop="genMonth">
+          <el-input v-model="form.genMonth" placeholder="请输入生成月"/>
+        </el-form-item>
+        <el-form-item label="生成日" prop="genDay">
+          <el-input v-model="form.genDay" placeholder="请输入生成日"/>
+        </el-form-item>
+        <el-form-item label="生成日期" prop="genDate">
+          <el-input v-model="form.genDate" placeholder="请输入生成日期"/>
+        </el-form-item>
+        <el-form-item label="生成时间" prop="genDatetime">
+          <el-input v-model="form.genDatetime" placeholder="请输入生成时间"/>
+        </el-form-item>
+        <el-form-item label="删除" prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="请输入删除"/>
+        </el-form-item>
+        <el-form-item label="创建人" prop="createrCode">
+          <el-input v-model="form.createrCode" placeholder="请输入创建人"/>
+        </el-form-item>
+        <el-form-item label="创建时间" prop="createdate">
+          <el-date-picker clearable size="small" style="width: 200px"
+                          v-model="form.createdate"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          placeholder="选择创建时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="更新人" prop="updaterCode">
+          <el-input v-model="form.updaterCode" placeholder="请输入更新人"/>
+        </el-form-item>
+        <el-form-item label="更新日期" prop="updatedate">
+          <el-date-picker clearable size="small" style="width: 200px"
+                          v-model="form.updatedate"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          placeholder="选择更新日期">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="所属部门" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入所属部门"/>
+        </el-form-item>
+        <el-form-item label="备注" prop="remarks">
+          <el-input v-model="form.remarks" placeholder="请输入备注"/>
+        </el-form-item>
+        <el-form-item label="归属部门" prop="deptId">
+          <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属部门"/>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  listConfInfo,
+  getConfInfo,
+  delConfInfo,
+  addConfInfo,
+  updateConfInfo,
+  exportConfInfo,
+  importTemplate
+} from "@/api/plant/confInfo";
+import {treeselect} from "@/api/system/dept";
+import {getToken} from "@/utils/auth";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import FullCalendar from '@fullcalendar/vue'
+import dayGridPlugin from '@fullcalendar/daygrid'
+import timeGridPlugin from '@fullcalendar/timegrid'
+import interactionPlugin from '@fullcalendar/interaction'
+import momentPlugin from '@fullcalendar/moment'
+import listPlugin from '@fullcalendar/list';
+import bootstrapPlugin from '@fullcalendar/bootstrap';
+import {INITIAL_EVENTS, createEventId} from '@/utils/event-utils'
+import 'bootstrap/dist/css/bootstrap.css';
+import {dateFormat} from '@/utils/date';
+
+export default {
+  name: "ConfInfo",
+  components: {Treeselect, FullCalendar},
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      calendarOptions: {
+        plugins: [
+          //resourceTimeGridPlugin,
+          bootstrapPlugin,
+          listPlugin,
+          momentPlugin,
+          dayGridPlugin,
+          timeGridPlugin,
+          interactionPlugin // needed for dateClick
+        ],
+        //schedulerLicenseKey: 'GPL-My-Project-Is-Open-Source',
+        themeSystem: 'bootstrap',
+        headerToolbar: {
+          left: 'prev,next,today',
+          center: 'title',
+          right: 'listWeek,dayGridMonth,timeGridWeek,timeGridDay'
+        },
+        initialView: 'dayGridMonth',
+        resources: [
+          {id: 'a', title: 'Auditorium A'},
+          {id: 'b', title: 'Auditorium B'},
+          {id: 'c', title: 'Auditorium C'}
+        ],
+        initialEvents: INITIAL_EVENTS, // alternatively, use the `events` setting to fetch from a feed
+        editable: true,
+        dayMaxEvents: true,
+        weekends: true,
+        select: this.handleDateSelect,
+        eventClick: this.handleEventClick,
+        eventsSet: this.handleEvents,
+        dateClick: this.handleDateClick,
+        // dayCellDidMount: function(info) {
+        //   //this.$console.log('info===',info);
+        //   return 'test001'
+        // },
+        eventDidMount: function (info) {
+          //$(info.el).tooltip({title: '11111'});
+          //this.$console.log('info===',info);
+          // var tooltip = new Tooltip(info.el, {
+          //   title: info.event.extendedProps.description,
+          //   placement: 'top',
+          //   trigger: 'hover',
+          //   container: 'body'
+          // });
+        },
+        eventRender: function (event, element) {
+          element.attr('title', event.tip);
+        },
+        height: '100%',
+        events: [],
+        week: 'narrow',
+        buttonText: {
+          next: '>',
+          prev: '<',
+          allday: '整天',
+          today: '今天',
+          month: '月',
+          week: '周',
+          day: '天',
+          listWeek: '周列表'
+        },
+        // titleFormat: {
+        //   month: 'long',
+        //   year: 'numeric',
+        //   day: 'numeric',
+        //   weekday: 'long'
+        // },
+
+        // 整体控制月、周、天顶部的日期显示
+        dayHeaderFormat: {
+          weekday: 'short',
+          // year: 'numeric',
+          // month: 'numeric',
+          // day: 'numeric',
+          omitCommas: true
+        },
+        // 单独控制月、周、天顶部的日期显示
+        views: {
+          timeGridWeek: {
+            dayHeaderFormat: {
+              weekday: 'short',
+              // year: 'numeric',
+              month: 'numeric',
+              day: 'numeric',
+              omitCommas: true
+            },
+          },
+        },
+        selectMirror: 'true',
+        slotMinTime: '00:00:00',
+        slotMaxTime: '24:00:00',
+        selectable: 'true',
+        locale: 'zh-cn',
+        slotEventOverlap: 'false',
+        unselectAuto: 'false',
+        selectOverlap: 'false',
+        businessHours: [],
+        firstDay: 1,
+        allDaySlot: 'true',
+        slotDuration: '00:30',
+        slotLabelFormat: 'HH:mm',
+        allDayContent: '全天',
+        // 随时判断时间是否合法,通过返回true/false来判断是否能够选择
+        selectAllow: info => {
+          const currentDate = new Date()
+          const start = info.start
+          const end = info.end
+          return (start <= end && start >= currentDate) || (dateFormat(start).substring(0, 10) === dateFormat(currentDate).substring(0, 10))
+        },
+        eventMouseEnter: this.eventMouseEnter,
+        //eventDragStop: this.eventDragStop,
+        // 拖拽结束后
+        eventDrop: this.eventDragStop,
+        // 调整大小
+        eventResize: this.eventResize,
+
+        dragOpacity: {
+          agenda: .1, //对于agenda试图
+          '': 1.0 //其他视图
+        },
+
+        //dayCellContent: ''
+        /* you can update a remote database when these fire:
+        eventAdd:
+        eventChange:
+        eventRemove:
+        */
+      },
+      // 会议控制
+      conferenceInfo: {
+        defultConferenceRoomId: '',
+        conferenceRoom: [],
+        // 参会人options
+        participantsOptions: [],
+        // 召集人options
+        convenerOptions: [],
+        // 当前日期所在的时间段的开始时间和结束时间
+        currentStartTime: '',
+        currentEndTime: '',
+        conferenceVisible: false,
+        isAdd: false,
+        isEdit: false,
+        validFlag: false,
+        conferenceList: [],
+        loading: false,
+        conferenceTypeOptions: [],
+        isTencentMeeting: false,
+        shareVisible: false,
+        shareText: '',
+      },
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: false,
+      // 总条数
+      total: 0,
+      // 会议预约信息表格数据
+      confInfoList: [],
+      // 弹出层标题
+      title: "",
+      // 部门树选项
+      deptOptions: undefined,
+      clientHeight: 300,
+      // 是否显示弹出层
+      open: false,
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: {Authorization: "Bearer " + getToken()},
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/plant/confInfo/importData"
+      },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 20,
+        roomId: null,
+        subject: null,
+        convenerId: null,
+        convenerName: null,
+        roomName: null,
+        beginDatetime: null,
+        endDatetime: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {}
+    };
+  },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
+  created() {
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = document.body.clientHeight - 250
+    })
+    this.getList();
+    this.getTreeselect();
+  },
+  mounted() {
+    let _self = this;
+    this.$nextTick(() => {
+      // 监听fullcalendar的事件
+      let fullCalDom = document.querySelectorAll('.fc-header-toolbar .fc-toolbar-chunk .btn-group >button');
+      for (let button of fullCalDom) {
+        button.addEventListener('click', function () {
+          _self.changeDurationTime();
+        });
+      }
+
+      let calendarApi = this.$refs.fullCalendar.getApi()
+      this.conferenceInfo.currentStartTime = dateFormat(new Date(calendarApi.view.currentStart));
+      this.conferenceInfo.currentEndTime = dateFormat(new Date(calendarApi.view.currentEnd));
+
+      this.getList()
+    });
+
+  },
+  methods: {
+    /** 查询会议预约信息列表 */
+    getList() {
+      this.loading = true;
+      listConfInfo(this.queryParams).then(response => {
+        this.confInfoList = response.rows;
+        let result = response.rows;
+        if(result.length > 0){
+          this.calendarOptions.events = [];
+          result.forEach(item => {
+            let allDay = false;
+            let end = item.endDatetime;
+            if(item.isAllday === '0'){
+              allDay = false;
+            }else if(item.isAllday === '1'){
+              allDay = true;
+              if(item.endDatetime.substring(11, 19) !== '00:00:00'){
+                end = new Date(new Date(item.endDatetime).getTime() + 1000 * 60 * 60 * 24);
+              }
+            }
+            this.calendarOptions.events.push({
+              id: item.id,
+              description: item.remarks,
+              title: item.subject + ' [' + item.roomName + ']',
+              start: item.beginDatetime,
+              end: end,
+              color: item.color,
+              allDay: allDay
+            })
+          });
+        }
+        else{
+          //改写No Event To Display;
+          var ele =document.getElementsByClassName('fc-list-empty-cushion');
+          if(ele.length > 0){
+            setTimeout(() => {
+              ele[0].innerText = '没有更多数据!';
+            }, 100);
+          }
+        }
+        // 保存当前页面上的日程信息
+        this.conferenceInfo.conferenceList = result;
+        this.conferenceInfo.loading = false;
+      }, error => {
+        //this.$console.log(error);
+        this.conferenceInfo.loading = false;
+      });
+    },
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        roomId: null,
+        subject: null,
+        convenerId: null,
+        convenerName: null,
+        roomName: null,
+        participantsList: null,
+        beginDatetime: null,
+        endDatetime: null,
+        color: null,
+        isAllday: null,
+        genFrequency: null,
+        genMonth: null,
+        genDay: null,
+        genDate: null,
+        genDatetime: null,
+        delFlag: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null,
+        remarks: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length !== 1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加会议预约信息";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getConfInfo(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改会议预约信息";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateConfInfo(this.form).then(response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addConfInfo(this.form).then(response => {
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return delConfInfo(ids);
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("删除成功");
+      })
+    },
+    // 修改日程查询的开始和结束日期
+    changeDurationTime() {
+      //
+      let calendarApi = this.$refs.fullCalendar.getApi()
+      this.conferenceInfo.currentStartTime = dateFormat(new Date(calendarApi.view.activeStart));
+      this.conferenceInfo.currentEndTime = dateFormat(new Date(calendarApi.view.activeEnd));
+      console.log("=========changeDurationTime========")
+      this.getConferenceList();
+    },
+    goToList() {
+      this.$router.push("/plant/confInfoList");
+    }
+  }
+};
+</script>
+<style lang='css'>
+.conference {
+  display: flex;
+  min-height: 100%;
+  height: 800px;
+  font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
+  font-size: 14px;
+  background-color: #fff;
+}
+
+.conference .el-calendar__header {
+  padding: 12px 10px;
+}
+
+.conference .el-calendar__header .el-calendar__button-group {
+  width: 35%;
+  text-align: right;
+}
+
+.conference .el-calendar__header .el-calendar__button-group .el-button-group > button:nth-of-type(1) {
+  width: 20%;
+  border: 0;
+  padding: 5px 10px 5px 5px;
+  font-size: 12px;
+}
+
+.conference .el-calendar__header .el-calendar__button-group .el-button-group > button:nth-of-type(2) {
+  border: 0;
+  padding: 5px 5px 5px 5px;
+}
+
+.conference .el-calendar__header .el-calendar__button-group .el-button-group > button:nth-of-type(3) {
+  width: 20%;
+  border: 0;
+  padding: 5px 5px 5px 5px;
+}
+
+.is-selected {
+  color: #1989FA;
+}
+
+.conference-right {
+  flex-grow: 1;
+  padding: 1em;
+}
+
+.fc { /* the calendar root */
+  /* max-width: 1100px; */
+  margin: 0 auto;
+}
+
+.conference-right .fc-header-toolbar .btn {
+  line-height: 1 !important;
+}
+
+.is-selected {
+  color: #1989FA;
+}
+
+.calendar-add-icon:hover {
+  border: 1px solid #cccccc;
+  border-radius: 3px;
+  background-color: #f1f1f1;
+}
+
+.conference .el-input {
+  border-bottom: 0 !important;
+}
+
+.conference .dialogFormItem {
+  width: 450px;
+}
+
+.conference .dialogFormItem .half-input .el-input__inner {
+  width: 320px;
+}
+
+.conference .mini-dialogFormItem .mini-input .el-input__inner {
+  width: 120px;
+}
+
+.conference .full-dialogFormItem .full-input .el-input__inner {
+  width: 780px;
+}
+
+.conference .full-dialogFormItem .full-input .el-textarea__inner {
+  width: 780px;
+}
+
+.send-wechat-div {
+
+}
+
+.el-col-slotBtn {
+  width: 25% !important;
+}
+
+.el-col-slotBtn .el-form-item__content {
+  margin-left: 40px !important;
+}
+</style>

+ 526 - 0
ui/src/views/plant/confInfo/list.vue

@@ -0,0 +1,526 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+
+      <el-form-item label="会议室名称" prop="roomName">
+        <el-input
+          v-model="queryParams.roomName"
+          placeholder="请输入会议室名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="会议开始时间" prop="beginDatetime">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.beginDatetime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择会议开始时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="会议结束时间" prop="endDatetime">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.endDatetime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择会议结束时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['plant:confInfo:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['plant:confInfo:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['plant:confInfo:remove']"
+        >删除</el-button>
+      </el-col>
+
+	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="confInfoList" @selection-change="handleSelectionChange" :height="clientHeight" border>
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="会议主题" align="center" prop="subject" :show-overflow-tooltip="true"/>
+      <el-table-column label="召集人姓名" align="center" prop="convenerName" :show-overflow-tooltip="true"/>
+      <el-table-column label="会议室名称" align="center" prop="roomName" :show-overflow-tooltip="true"/>
+      <el-table-column label="参会人" align="center" prop="participantsList" :show-overflow-tooltip="true"/>
+      <el-table-column label="会议开始时间" align="center" prop="beginDatetime" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.beginDatetime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="会议结束时间" align="center" prop="endDatetime" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.endDatetime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="颜色" align="center" prop="color" :show-overflow-tooltip="true"/>
+      <el-table-column label="全天显示" align="center" prop="isAllday" :show-overflow-tooltip="true"/>
+      <el-table-column label="生成频率" align="center" prop="genFrequency" :show-overflow-tooltip="true"/>
+      <el-table-column label="生成月" align="center" prop="genMonth" :show-overflow-tooltip="true"/>
+      <el-table-column label="生成日" align="center" prop="genDay" :show-overflow-tooltip="true"/>
+      <el-table-column label="生成日期" align="center" prop="genDate" :show-overflow-tooltip="true"/>
+      <el-table-column label="生成时间" align="center" prop="genDatetime" :show-overflow-tooltip="true"/>
+      <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true"/>
+      <el-table-column label="操作" align="center" fixed="right" width="120" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['plant:confInfo:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['plant:confInfo:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <!-- 添加或修改会议预约信息对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="会议主题" prop="subject">
+          <el-input v-model="form.subject" placeholder="请输入会议主题" />
+        </el-form-item>
+        <el-form-item label="召集人" prop="convenerId">
+          <el-input v-model="form.convenerId" placeholder="请输入召集人" />
+        </el-form-item>
+
+        <el-form-item label="会议室名称" prop="roomId">
+          <el-select v-model="form.roomId">
+            <el-option
+              v-for="dict in roomOptions"
+              :key="dict.id"
+              :label="dict.roomName"
+              :value="dict.id"
+            ></el-option>
+
+          </el-select>
+        </el-form-item>
+        <el-form-item label="参会人" prop="participantsList">
+          <el-input v-model="form.participantsList" placeholder="请输入参会人" />
+        </el-form-item>
+        <el-form-item label="会议开始时间" prop="beginDatetime">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.beginDatetime"
+            type="datetime"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            align="right"
+           :picker-options="pickerOptions"
+            placeholder="选择会议开始时间">
+
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="会议结束时间" prop="endDatetime">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.endDatetime"
+            type="datetime"
+            value-format="yyyy-MM-dd HH:mm:ss"
+             align="right"
+             :picker-options="pickerOptions"
+            placeholder="选择会议结束时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="颜色" prop="color">
+          <el-color-picker v-model="form.color" show-alpha></el-color-picker>
+        </el-form-item>
+        <el-form-item label="全天显示" prop="isAllday">
+          <el-select v-model="form.isAllday" placeholder="请输入全天显示 ">
+            <el-option label="否" value="0" />
+            <el-option label="是" value="1" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="生成频率" prop="genFrequency">
+          <el-select v-model="form.genFrequency" placeholder="请输入生成频率 ">
+            <el-option label="只生成一次" value="1-N" />
+            <el-option label="一天一次" value="1-D" />
+            <el-option label="一周一次" value="1-W" />
+            <el-option label="一月一次" value="1-M" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="生成月" prop="genMonth">
+          <el-input v-model="form.genMonth" placeholder="请输入生成月" />
+        </el-form-item>
+        <el-form-item label="生成日" prop="genDay">
+          <el-input v-model="form.genDay" placeholder="请输入生成日" />
+        </el-form-item>
+        <el-form-item label="生成日期" prop="genDate">
+          <el-input v-model="form.genDate" placeholder="请输入生成日期" />
+        </el-form-item>
+        <el-form-item label="生成时间" prop="genDatetime">
+          <el-input v-model="form.genDatetime" placeholder="请输入生成时间" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remarks">
+          <el-input v-model="form.remarks" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+      <!-- 用户导入对话框 -->
+      <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
+          <el-upload
+                  ref="upload"
+                  :limit="1"
+                  accept=".xlsx, .xls"
+                  :headers="upload.headers"
+                  :action="upload.url + '?updateSupport=' + upload.updateSupport"
+                  :disabled="upload.isUploading"
+                  :on-progress="handleFileUploadProgress"
+                  :on-success="handleFileSuccess"
+                  :auto-upload="false"
+                  drag
+          >
+              <i class="el-icon-upload"></i>
+              <div class="el-upload__text">
+                  将文件拖到此处,或
+                  <em>点击上传</em>
+              </div>
+              <div class="el-upload__tip" slot="tip">
+                  <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据
+                  <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
+              </div>
+              <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
+          </el-upload>
+          <div slot="footer" class="dialog-footer">
+              <el-button type="primary" @click="submitFileForm">确 定</el-button>
+              <el-button @click="upload.open = false">取 消</el-button>
+          </div>
+      </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listConfInfo, getConfInfo, delConfInfo, addConfInfo, updateConfInfo, exportConfInfo, importTemplate} from "@/api/plant/confInfo";
+import { treeselect } from "@/api/system/dept";
+import { getToken } from "@/utils/auth";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import {listConfRoom} from "@/api/plant/confRoom";
+import {dateFormat} from '@/utils/date';
+
+export default {
+  name: "ConfInfo",
+  components: { Treeselect },
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: false,
+      // 总条数
+      total: 0,
+      // 会议预约信息表格数据
+      confInfoList: [],
+      // 弹出层标题
+      title: "",
+      // 部门树选项
+      deptOptions: undefined,
+      roomOptions: [],
+      pickerOptions: {
+        selectableRange: '00:00:00 - 23:59:59',
+        disabledDate(time) {
+          const date = new Date();
+          let timeStr = dateFormat(time).substring(0, 10);
+          let nowStr = dateFormat(date).substring(0, 10);
+          return new Date(timeStr)  < new Date(nowStr);
+        },
+        shortcuts: [
+          {
+            text: '现在',
+            onClick(picker) {
+              const date = new Date();
+              picker.$emit('pick', date);
+            }
+          },
+          {
+            text: '一小时后',
+            onClick(picker) {
+              const date = new Date();
+              date.setTime(date.getTime() + 3600 * 1000);
+              picker.$emit('pick', date);
+            }
+          },
+          {
+            text: '两小时后',
+            onClick(picker) {
+              const date = new Date();
+              date.setTime(date.getTime() + 7200 * 1000);
+              picker.$emit('pick', date);
+            }
+          },
+          {
+            text: '三小时后',
+            onClick(picker) {
+              const date = new Date();
+              date.setTime(date.getTime() + 10800 * 1000);
+              picker.$emit('pick', date);
+            }
+          }
+        ]
+      },
+      clientHeight:300,
+      // 是否显示弹出层
+      open: false,
+        // 用户导入参数
+        upload: {
+            // 是否显示弹出层(用户导入)
+            open: false,
+            // 弹出层标题(用户导入)
+            title: "",
+            // 是否禁用上传
+            isUploading: false,
+            // 是否更新已经存在的用户数据
+            updateSupport: 0,
+            // 设置上传的请求头部
+            headers: { Authorization: "Bearer " + getToken() },
+            // 上传的地址
+            url: process.env.VUE_APP_BASE_API + "/plant/confInfo/importData"
+        },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 20,
+        roomId: null,
+        subject: null,
+        convenerId: null,
+        convenerName: null,
+        roomName: null,
+        beginDatetime: null,
+        endDatetime: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  watch: {
+        // 根据名称筛选部门树
+        deptName(val) {
+            this.$refs.tree.filter(val);
+        }
+   },
+  created() {
+      //设置表格高度对应屏幕高度
+      this.$nextTick(() => {
+          this.clientHeight = document.body.clientHeight -250
+      })
+    this.getList();
+    this.getTreeselect();
+    listConfRoom({}).then(response => {
+      this.roomOptions = response.rows;
+
+    });
+  },
+  methods: {
+    /** 查询会议预约信息列表 */
+    getList() {
+      this.loading = true;
+      listConfInfo(this.queryParams).then(response => {
+        this.confInfoList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+     /** 查询部门下拉树结构 */
+     getTreeselect() {
+          treeselect().then(response => {
+              this.deptOptions = response.data;
+          });
+     },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        roomId: null,
+        subject: null,
+        convenerId: null,
+        convenerName: null,
+        roomName: null,
+        participantsList: null,
+        beginDatetime: null,
+        endDatetime: null,
+        color: null,
+        isAllday: null,
+        genFrequency: null,
+        genMonth: null,
+        genDay: null,
+        genDate: null,
+        genDatetime: null,
+        delFlag: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null,
+        remarks: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.form.color='rgba(3, 47, 142, 1)'
+      this.title = "添加会议预约信息";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getConfInfo(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改会议预约信息";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateConfInfo(this.form).then(response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addConfInfo(this.form).then(response => {
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delConfInfo(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有会议预约信息数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return exportConfInfo(queryParams);
+        }).then(response => {
+          this.download(response.msg);
+        })
+    },
+      /** 导入按钮操作 */
+      handleImport() {
+          this.upload.title = "用户导入";
+          this.upload.open = true;
+      },
+      /** 下载模板操作 */
+      importTemplate() {
+          importTemplate().then(response => {
+              this.download(response.msg);
+          });
+      },
+      // 文件上传中处理
+      handleFileUploadProgress(event, file, fileList) {
+          this.upload.isUploading = true;
+      },
+      // 文件上传成功处理
+      handleFileSuccess(response, file, fileList) {
+          this.upload.open = false;
+          this.upload.isUploading = false;
+          this.$refs.upload.clearFiles();
+          this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
+          this.getList();
+      },
+      // 提交上传文件
+      submitFileForm() {
+          this.$refs.upload.submit();
+      }
+  }
+};
+</script>

+ 415 - 0
ui/src/views/plant/confRoom/index.vue

@@ -0,0 +1,415 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="会议室名称" prop="roomName">
+        <el-input
+          v-model="queryParams.roomName"
+          placeholder="请输入会议室名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="办公区域名称" prop="areaName">
+        <el-input
+          v-model="queryParams.areaName"
+          placeholder="请输入办公区域名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="会议室容量" prop="roomCapacity">
+        <el-input
+          v-model="queryParams.roomCapacity"
+          placeholder="请输入会议室容量"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['plant:confRoom:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['plant:confRoom:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['plant:confRoom:remove']"
+        >删除</el-button>
+      </el-col>
+	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="confRoomList" @selection-change="handleSelectionChange" :height="clientHeight" border>
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="会议室名称" align="center" prop="roomName" :show-overflow-tooltip="true"/>
+      <el-table-column label="办公区域名称" align="center" prop="areaName" :show-overflow-tooltip="true"/>
+      <el-table-column label="会议室容量" align="center" prop="roomCapacity" :show-overflow-tooltip="true"/>
+      <el-table-column label="设备" align="center" prop="deviceList" :show-overflow-tooltip="true"/>
+      <el-table-column label="会议室管理员" align="center" prop="roomManageUser" :show-overflow-tooltip="true"/>
+      <el-table-column label="会议室管理员姓名" align="center" prop="roomManageName" :show-overflow-tooltip="true"/>
+      <el-table-column label="状态" align="center" prop="status" :show-overflow-tooltip="true"/>
+
+      <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true"/>
+<!--      <el-table-column label="会议室照片" align="center" prop="roomPic" :show-overflow-tooltip="true"/>-->
+      <el-table-column label="操作" align="center" fixed="right" width="120" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['plant:confRoom:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['plant:confRoom:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改会议室管理对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="会议室名称" prop="roomName">
+          <el-input v-model="form.roomName" placeholder="请输入会议室名称" />
+        </el-form-item>
+        <el-form-item label="办公区域名称" prop="areaName">
+          <el-input v-model="form.areaName" placeholder="请输入办公区域名称" />
+        </el-form-item>
+        <el-form-item label="会议室容量" prop="roomCapacity">
+          <el-input v-model="form.roomCapacity" placeholder="请输入会议室容量" />
+        </el-form-item>
+        <el-form-item label="设备" prop="deviceList">
+          <el-input v-model="form.deviceList" placeholder="请输入设备" />
+        </el-form-item>
+        <el-form-item label="会议室管理员" prop="roomManageUser">
+          <el-input v-model="form.roomManageUser" placeholder="请输入会议室管理员" />
+        </el-form-item>
+        <el-form-item label="会议室管理员姓名" prop="roomManageName">
+          <el-input v-model="form.roomManageName" placeholder="请输入会议室管理员姓名" />
+        </el-form-item>
+        <el-form-item label="状态">
+          <el-radio-group v-model="form.status">
+            <el-radio label="1">请选择字典生成</el-radio>
+          </el-radio-group>
+        </el-form-item>
+
+
+        <el-form-item label="备注" prop="remarks">
+          <el-input v-model="form.remarks" placeholder="请输入备注" />
+        </el-form-item>
+<!--        <el-form-item label="会议室照片" prop="roomPic">-->
+<!--          <el-input v-model="form.roomPic" placeholder="请输入会议室照片" />-->
+<!--        </el-form-item>-->
+
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+      <!-- 用户导入对话框 -->
+      <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
+          <el-upload
+                  ref="upload"
+                  :limit="1"
+                  accept=".xlsx, .xls"
+                  :headers="upload.headers"
+                  :action="upload.url + '?updateSupport=' + upload.updateSupport"
+                  :disabled="upload.isUploading"
+                  :on-progress="handleFileUploadProgress"
+                  :on-success="handleFileSuccess"
+                  :auto-upload="false"
+                  drag
+          >
+              <i class="el-icon-upload"></i>
+              <div class="el-upload__text">
+                  将文件拖到此处,或
+                  <em>点击上传</em>
+              </div>
+              <div class="el-upload__tip" slot="tip">
+                  <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据
+                  <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
+              </div>
+              <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
+          </el-upload>
+          <div slot="footer" class="dialog-footer">
+              <el-button type="primary" @click="submitFileForm">确 定</el-button>
+              <el-button @click="upload.open = false">取 消</el-button>
+          </div>
+      </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listConfRoom, getConfRoom, delConfRoom, addConfRoom, updateConfRoom, exportConfRoom, importTemplate} from "@/api/plant/confRoom";
+import { treeselect } from "@/api/system/dept";
+import { getToken } from "@/utils/auth";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+
+export default {
+  name: "ConfRoom",
+  components: { Treeselect },
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: false,
+      // 总条数
+      total: 0,
+      // 会议室管理表格数据
+      confRoomList: [],
+      // 弹出层标题
+      title: "",
+      // 部门树选项
+      deptOptions: undefined,
+      clientHeight:300,
+      // 是否显示弹出层
+      open: false,
+        // 用户导入参数
+        upload: {
+            // 是否显示弹出层(用户导入)
+            open: false,
+            // 弹出层标题(用户导入)
+            title: "",
+            // 是否禁用上传
+            isUploading: false,
+            // 是否更新已经存在的用户数据
+            updateSupport: 0,
+            // 设置上传的请求头部
+            headers: { Authorization: "Bearer " + getToken() },
+            // 上传的地址
+            url: process.env.VUE_APP_BASE_API + "/plant/confRoom/importData"
+        },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 20,
+        roomName: null,
+        areaName: null,
+        roomCapacity: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        roomName: [
+          { required: true, message: "会议室名称不能为空", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  watch: {
+        // 根据名称筛选部门树
+        deptName(val) {
+            this.$refs.tree.filter(val);
+        }
+   },
+  created() {
+      //设置表格高度对应屏幕高度
+      this.$nextTick(() => {
+          this.clientHeight = document.body.clientHeight -250
+      })
+    this.getList();
+    this.getTreeselect();
+  },
+  methods: {
+    /** 查询会议室管理列表 */
+    getList() {
+      this.loading = true;
+      listConfRoom(this.queryParams).then(response => {
+        this.confRoomList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+     /** 查询部门下拉树结构 */
+     getTreeselect() {
+          treeselect().then(response => {
+              this.deptOptions = response.data;
+          });
+     },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        roomName: null,
+        areaName: null,
+        roomCapacity: null,
+        deviceList: null,
+        roomManageUser: null,
+        roomManageName: null,
+        status: 0,
+        delFlag: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null,
+        remarks: null,
+        roomPic: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加会议室管理";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getConfRoom(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改会议室管理";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateConfRoom(this.form).then(response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addConfRoom(this.form).then(response => {
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delConfRoom(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有会议室管理数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return exportConfRoom(queryParams);
+        }).then(response => {
+          this.download(response.msg);
+        })
+    },
+      /** 导入按钮操作 */
+      handleImport() {
+          this.upload.title = "用户导入";
+          this.upload.open = true;
+      },
+      /** 下载模板操作 */
+      importTemplate() {
+          importTemplate().then(response => {
+              this.download(response.msg);
+          });
+      },
+      // 文件上传中处理
+      handleFileUploadProgress(event, file, fileList) {
+          this.upload.isUploading = true;
+      },
+      // 文件上传成功处理
+      handleFileSuccess(response, file, fileList) {
+          this.upload.open = false;
+          this.upload.isUploading = false;
+          this.$refs.upload.clearFiles();
+          this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
+          this.getList();
+      },
+      // 提交上传文件
+      submitFileForm() {
+          this.$refs.upload.submit();
+      }
+  }
+};
+</script>