浏览代码

企业和公告

huangxiao 1 月之前
父节点
当前提交
0aada2fba6
共有 28 个文件被更改,包括 3019 次插入55 次删除
  1. 2 0
      doc/aa.txt
  2. 1 6
      doc/backup.json
  3. 219 0
      src/main/java/net/mingsoft/tf/action/AnnouncementAction.java
  4. 1 1
      src/main/java/net/mingsoft/tf/action/BaseAction.java
  5. 257 0
      src/main/java/net/mingsoft/tf/action/EnterpriseAction.java
  6. 16 0
      src/main/java/net/mingsoft/tf/biz/IAnnouncementBiz.java
  7. 16 0
      src/main/java/net/mingsoft/tf/biz/IEnterpriseBiz.java
  8. 34 0
      src/main/java/net/mingsoft/tf/biz/impl/AnnouncementBizImpl.java
  9. 34 0
      src/main/java/net/mingsoft/tf/biz/impl/EnterpriseBizImpl.java
  10. 1 1
      src/main/java/net/mingsoft/tf/constant/Const.java
  11. 14 0
      src/main/java/net/mingsoft/tf/dao/IAnnouncementDao.java
  12. 22 0
      src/main/java/net/mingsoft/tf/dao/IAnnouncementDao.xml
  13. 14 0
      src/main/java/net/mingsoft/tf/dao/IEnterpriseDao.java
  14. 26 0
      src/main/java/net/mingsoft/tf/dao/IEnterpriseDao.xml
  15. 124 0
      src/main/java/net/mingsoft/tf/entity/AnnouncementEntity.java
  16. 196 0
      src/main/java/net/mingsoft/tf/entity/EnterpriseEntity.java
  17. 32 0
      src/main/java/net/mingsoft/tf/resources/resources_en_US.properties
  18. 32 0
      src/main/java/net/mingsoft/tf/resources/resources_zh_CN.properties
  19. 53 0
      src/main/java/net/mingsoft/tf/www/EnterpriseAction.java
  20. 8 47
      src/main/resources/log4j-spring.xml
  21. 345 0
      src/main/webapp/WEB-INF/manager/tf/announcement/form.ftl
  22. 453 0
      src/main/webapp/WEB-INF/manager/tf/announcement/index.ftl
  23. 449 0
      src/main/webapp/WEB-INF/manager/tf/enterprise/form.ftl
  24. 552 0
      src/main/webapp/WEB-INF/manager/tf/enterprise/index.ftl
  25. 24 0
      src/main/webapp/static/locale/lang/announcement/en_US.js
  26. 25 0
      src/main/webapp/static/locale/lang/announcement/zh_CN.js
  27. 34 0
      src/main/webapp/static/locale/lang/enterprise/en_US.js
  28. 35 0
      src/main/webapp/static/locale/lang/enterprise/zh_CN.js

文件差异内容过多而无法显示
+ 2 - 0
doc/aa.txt


文件差异内容过多而无法显示
+ 1 - 6
doc/backup.json


+ 219 - 0
src/main/java/net/mingsoft/tf/action/AnnouncementAction.java

@@ -0,0 +1,219 @@
+package net.mingsoft.tf.action;
+
+import java.util.List;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import cn.hutool.core.util.ObjectUtil;
+import java.util.*;
+
+import net.mingsoft.base.entity.ResultData;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import java.util.stream.Collectors;
+
+import org.springframework.web.bind.annotation.*;
+import net.mingsoft.tf.biz.IAnnouncementBiz;
+import net.mingsoft.tf.entity.AnnouncementEntity;
+import net.mingsoft.base.entity.BaseEntity;
+import net.mingsoft.basic.util.BasicUtil;
+import net.mingsoft.basic.util.StringUtil;
+import net.mingsoft.basic.bean.EUListBean;
+import net.mingsoft.basic.annotation.LogAnn;
+import net.mingsoft.basic.constant.e.BusinessTypeEnum;
+import org.apache.commons.lang3.StringUtils;
+
+
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Hidden;
+import io.swagger.v3.oas.annotations.enums.ParameterIn;
+
+/**
+* 公告管理管理控制层
+* @author 阿白
+* 创建日期:2025年12月13日 上午11:22:35<br/>
+* 历史修订:<br/>
+*/
+@Tag(name = "后台-公告管理接口")
+@Controller("tfAnnouncementAction")
+@RequestMapping("/${ms.manager.path}/tf/announcement")
+public class AnnouncementAction extends net.mingsoft.tf.action.BaseAction{
+
+
+    /**
+    * 注入公告管理业务层
+    */
+    @Autowired
+    private IAnnouncementBiz announcementBiz;
+
+    /**
+    * 返回主界面index
+    */
+    @Hidden
+    @GetMapping("/index")
+    public String index() {
+        return "/tf/announcement/index";
+    }
+
+
+    /**
+    * 返回编辑界面announcement的form
+    */
+    @Hidden
+    @GetMapping("/form")
+    public String form() {
+        return "/tf/announcement/form";
+    }
+
+
+    /**
+    * 查询公告管理列表
+    * @param announcement 公告管理实体
+    */
+    @Operation(summary = "查询公告管理列表接口")
+    @Parameters({
+        @Parameter(name = "announcementTitle", description = "公告标题", in = ParameterIn.QUERY),
+        @Parameter(name = "announcementTime", description = "发布时间", in = ParameterIn.QUERY),
+        @Parameter(name = "announcementStatus", description = "发布状态", in = ParameterIn.QUERY),
+        @Parameter(name = "announcementContent", description = "公告内容", in = ParameterIn.QUERY),
+    })
+    @RequestMapping(value ="/list",method = {RequestMethod.GET,RequestMethod.POST})
+    @ResponseBody
+    @RequiresPermissions("tf:announcement:view")
+    public ResultData list(@ModelAttribute @Parameter(hidden = true) AnnouncementEntity announcement) {
+        BasicUtil.startPage();
+        List announcementList = null;
+        if ( announcement.getSqlWhere() != null){
+            announcementList = announcementBiz.query(announcement);
+        } else {
+            LambdaQueryWrapper<AnnouncementEntity> wrapper = new LambdaQueryWrapper<>(announcement).orderByDesc(AnnouncementEntity::getCreateDate);
+            announcementList = announcementBiz.list(wrapper);
+        }
+        return ResultData.build().success(new EUListBean(announcementList,(int)BasicUtil.endPage(announcementList).getTotal()));
+    }
+
+
+    /**
+    * 获取公告管理
+    * @param announcement 公告管理实体
+    */
+    @Operation(summary = "获取公告管理列表接口")
+    @Parameter(name = "id", description = "主键ID", required =true,in = ParameterIn.QUERY)
+    @GetMapping("/get")
+    @ResponseBody
+    @RequiresPermissions("tf:announcement:view")
+    public ResultData get(@ModelAttribute @Parameter(hidden = true) AnnouncementEntity announcement) {
+        if (StringUtils.isBlank(announcement.getId())) {
+            return ResultData.build().error(getResString("err.error",this.getResString("id")));
+        }
+        AnnouncementEntity _announcement = (AnnouncementEntity)announcementBiz.getById(announcement.getId());
+        return ResultData.build().success(_announcement);
+    }
+
+
+    /**
+    * 保存公告管理
+    * @param announcement 公告管理实体
+    */
+    @Operation(summary = "保存公告管理列表接口")
+    @Parameters({
+        @Parameter(name = "announcementTitle", description = "公告标题", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "announcementTime", description = "发布时间", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "announcementStatus", description = "发布状态", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "announcementContent", description = "公告内容", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "announcementImg", description = "封面图", required = false, in = ParameterIn.QUERY),
+    })
+    @PostMapping("/save")
+    @ResponseBody
+    @LogAnn(title = "保存公告管理", businessType = BusinessTypeEnum.INSERT)
+    @RequiresPermissions("tf:announcement:save")
+    public ResultData save(@ModelAttribute @Parameter(hidden = true) AnnouncementEntity announcement) {
+
+        if (  StringUtils.isNotBlank(announcement.getAnnouncementTitle()) && !StringUtil.checkLength(announcement.getAnnouncementTitle()+"", 0, 255)) {
+          return ResultData.build().error(getResString("err.length", this.getResString("announcement.title"), "0", "255"));
+        }
+        announcementBiz.save(announcement);
+        return ResultData.build().success(announcement);
+    }
+
+    /**
+    *  删除公告管理
+    *
+    * @param announcements 公告管理实体
+    */
+    @Operation(summary = "批量删除公告管理列表接口")
+    @PostMapping("/delete")
+    @ResponseBody
+    @LogAnn(title = "删除公告管理", businessType = BusinessTypeEnum.DELETE)
+    @RequiresPermissions("tf:announcement:del")
+    public ResultData delete(@RequestBody List<AnnouncementEntity> announcements) {
+        List<String> ids = (List)announcements.stream().map((p) -> {return p.getId();}).collect(Collectors.toList());
+        return this.announcementBiz.removeByIds(ids) ? ResultData.build().success() : ResultData.build().error(this.getResString("err.error", new String[]{this.getResString("id")}));
+    }
+
+    /**
+    *	更新公告管理列表
+    *
+    * @param announcement 公告管理实体
+    */
+    @Operation(summary = "更新公告管理列表接口")
+    @Parameters({
+        @Parameter(name = "id", description = "主键ID", required =true,in = ParameterIn.QUERY),
+        @Parameter(name = "announcementTitle", description = "公告标题", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "announcementTime", description = "发布时间", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "announcementStatus", description = "发布状态", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "announcementContent", description = "公告内容", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "announcementImg", description = "封面图", required = false, in = ParameterIn.QUERY),
+    })
+    @PostMapping("/update")
+    @ResponseBody
+    @LogAnn(title = "更新公告管理", businessType = BusinessTypeEnum.UPDATE)
+    @RequiresPermissions("tf:announcement:update")
+    public ResultData update(@ModelAttribute @Parameter(hidden = true) AnnouncementEntity announcement) {
+        //先查询数据是否存在
+        AnnouncementEntity _announcement = (AnnouncementEntity)announcementBiz.getById(announcement.getId());
+        if(_announcement == null) {
+            return ResultData.build().error(getResString("err.not.exist",announcement.getId() ));
+        }
+
+        if (  StringUtils.isNotBlank(announcement.getAnnouncementTitle()) && !StringUtil.checkLength(announcement.getAnnouncementTitle()+"", 0, 255)) {
+          return ResultData.build().error(getResString("err.length", this.getResString("announcement.title"), "0", "255"));
+        }
+        announcementBiz.updateById(announcement);
+        return ResultData.build().success(announcement);
+    }
+
+    @GetMapping("verify")
+    @ResponseBody
+    public ResultData verify(String fieldName, String fieldValue, String id,String idName) {
+        boolean verify = false;
+        if (StringUtils.isBlank(id)) {
+            verify = super.validated("ANNOUNCEMENT",fieldName,fieldValue);
+        } else {
+            verify = super.validated("ANNOUNCEMENT",fieldName,fieldValue,id,idName);
+        }
+        if (verify) {
+            return ResultData.build().success(false);
+        }else {
+            return ResultData.build().success(true);
+        }
+    }
+
+}

+ 1 - 1
src/main/java/net/mingsoft/tf/action/BaseAction.java

@@ -7,7 +7,7 @@ import net.mingsoft.base.util.BundleUtil;
 /**
 * tf基础控制层
 * @author 阿白
-* 创建日期:2025年10月23日 下午6:41:34<br/>
+* 创建日期:2025年12月13日 上午11:42:16<br/>
 * 历史修订:<br/>
 */
 public class BaseAction extends net.mingsoft.basic.action.BaseAction{

+ 257 - 0
src/main/java/net/mingsoft/tf/action/EnterpriseAction.java

@@ -0,0 +1,257 @@
+package net.mingsoft.tf.action;
+
+import java.util.List;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import cn.hutool.core.util.ObjectUtil;
+import java.util.*;
+
+import net.mingsoft.base.entity.ResultData;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import java.util.stream.Collectors;
+
+import org.springframework.web.bind.annotation.*;
+import net.mingsoft.tf.biz.IEnterpriseBiz;
+import net.mingsoft.tf.entity.EnterpriseEntity;
+import net.mingsoft.base.entity.BaseEntity;
+import net.mingsoft.basic.util.BasicUtil;
+import net.mingsoft.basic.util.StringUtil;
+import net.mingsoft.basic.bean.EUListBean;
+import net.mingsoft.basic.annotation.LogAnn;
+import net.mingsoft.basic.constant.e.BusinessTypeEnum;
+import org.apache.commons.lang3.StringUtils;
+
+
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Hidden;
+import io.swagger.v3.oas.annotations.enums.ParameterIn;
+
+/**
+* 企业管理管理控制层
+* @author 阿白
+* 创建日期:2025年12月13日 上午11:42:16<br/>
+* 历史修订:<br/>
+*/
+@Tag(name = "后台-企业管理接口")
+@Controller("tfEnterpriseAction")
+@RequestMapping("/${ms.manager.path}/tf/enterprise")
+public class EnterpriseAction extends net.mingsoft.tf.action.BaseAction{
+
+
+    /**
+    * 注入企业管理业务层
+    */
+    @Autowired
+    private IEnterpriseBiz enterpriseBiz;
+
+    /**
+    * 返回主界面index
+    */
+    @Hidden
+    @GetMapping("/index")
+    public String index() {
+        return "/tf/enterprise/index";
+    }
+
+
+    /**
+    * 返回编辑界面enterprise的form
+    */
+    @Hidden
+    @GetMapping("/form")
+    public String form() {
+        return "/tf/enterprise/form";
+    }
+
+
+    /**
+    * 查询企业管理列表
+    * @param enterprise 企业管理实体
+    */
+    @Operation(summary = "查询企业管理列表接口")
+    @Parameters({
+        @Parameter(name = "enterpriseIntroduction", description = "企业简介", in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseName", description = "企业名称", in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseType", description = "企业类型", in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseContact", description = "联系人", in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseTel", description = "联系电话", in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseAddress", description = "企业地址", in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseEntryTime", description = "入驻时间", in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseOperatingStatus", description = "经营状态", in = ParameterIn.QUERY),
+    })
+    @RequestMapping(value ="/list",method = {RequestMethod.GET,RequestMethod.POST})
+    @ResponseBody
+    @RequiresPermissions("tf:enterprise:view")
+    public ResultData list(@ModelAttribute @Parameter(hidden = true) EnterpriseEntity enterprise) {
+        BasicUtil.startPage();
+        List enterpriseList = null;
+        if ( enterprise.getSqlWhere() != null){
+            enterpriseList = enterpriseBiz.query(enterprise);
+        } else {
+            LambdaQueryWrapper<EnterpriseEntity> wrapper = new LambdaQueryWrapper<>(enterprise).orderByDesc(EnterpriseEntity::getCreateDate);
+            enterpriseList = enterpriseBiz.list(wrapper);
+        }
+        return ResultData.build().success(new EUListBean(enterpriseList,(int)BasicUtil.endPage(enterpriseList).getTotal()));
+    }
+
+
+    /**
+    * 获取企业管理
+    * @param enterprise 企业管理实体
+    */
+    @Operation(summary = "获取企业管理列表接口")
+    @Parameter(name = "id", description = "主键ID", required =true,in = ParameterIn.QUERY)
+    @GetMapping("/get")
+    @ResponseBody
+    @RequiresPermissions("tf:enterprise:view")
+    public ResultData get(@ModelAttribute @Parameter(hidden = true) EnterpriseEntity enterprise) {
+        if (StringUtils.isBlank(enterprise.getId())) {
+            return ResultData.build().error(getResString("err.error",this.getResString("id")));
+        }
+        EnterpriseEntity _enterprise = (EnterpriseEntity)enterpriseBiz.getById(enterprise.getId());
+        return ResultData.build().success(_enterprise);
+    }
+
+
+    /**
+    * 保存企业管理
+    * @param enterprise 企业管理实体
+    */
+    @Operation(summary = "保存企业管理列表接口")
+    @Parameters({
+        @Parameter(name = "enterpriseIntroduction", description = "企业简介", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseLogo", description = "LOGO", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseName", description = "企业名称", required = true, in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseType", description = "企业类型", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseContact", description = "联系人", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseTel", description = "联系电话", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseAddress", description = "企业地址", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseEntryTime", description = "入驻时间", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseOperatingStatus", description = "经营状态", required = false, in = ParameterIn.QUERY),
+    })
+    @PostMapping("/save")
+    @ResponseBody
+    @LogAnn(title = "保存企业管理", businessType = BusinessTypeEnum.INSERT)
+    @RequiresPermissions("tf:enterprise:save")
+    public ResultData save(@ModelAttribute @Parameter(hidden = true) EnterpriseEntity enterprise) {
+
+        //验证企业名称的值是否合法
+        if (StringUtils.isBlank(enterprise.getEnterpriseName())) {
+            return ResultData.build().error(getResString("err.empty", this.getResString("enterprise.name")));
+        }
+        if (!StringUtil.checkLength(enterprise.getEnterpriseName()+"", 0, 255)) {
+          return ResultData.build().error(getResString("err.length", this.getResString("enterprise.name"), "0", "255"));
+        }
+        if (  StringUtils.isNotBlank(enterprise.getEnterpriseContact()) && !StringUtil.checkLength(enterprise.getEnterpriseContact()+"", 0, 255)) {
+          return ResultData.build().error(getResString("err.length", this.getResString("enterprise.contact"), "0", "255"));
+        }
+        if (  StringUtils.isNotBlank(enterprise.getEnterpriseTel()) && !StringUtil.checkLength(enterprise.getEnterpriseTel()+"", 0, 255)) {
+          return ResultData.build().error(getResString("err.length", this.getResString("enterprise.tel"), "0", "255"));
+        }
+        if (  StringUtils.isNotBlank(enterprise.getEnterpriseAddress()) && !StringUtil.checkLength(enterprise.getEnterpriseAddress()+"", 0, 255)) {
+          return ResultData.build().error(getResString("err.length", this.getResString("enterprise.address"), "0", "255"));
+        }
+        enterpriseBiz.save(enterprise);
+        return ResultData.build().success(enterprise);
+    }
+
+    /**
+    *  删除企业管理
+    *
+    * @param enterprises 企业管理实体
+    */
+    @Operation(summary = "批量删除企业管理列表接口")
+    @PostMapping("/delete")
+    @ResponseBody
+    @LogAnn(title = "删除企业管理", businessType = BusinessTypeEnum.DELETE)
+    @RequiresPermissions("tf:enterprise:del")
+    public ResultData delete(@RequestBody List<EnterpriseEntity> enterprises) {
+        List<String> ids = (List)enterprises.stream().map((p) -> {return p.getId();}).collect(Collectors.toList());
+        return this.enterpriseBiz.removeByIds(ids) ? ResultData.build().success() : ResultData.build().error(this.getResString("err.error", new String[]{this.getResString("id")}));
+    }
+
+    /**
+    *	更新企业管理列表
+    *
+    * @param enterprise 企业管理实体
+    */
+    @Operation(summary = "更新企业管理列表接口")
+    @Parameters({
+        @Parameter(name = "id", description = "主键ID", required =true,in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseIntroduction", description = "企业简介", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseLogo", description = "LOGO", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseName", description = "企业名称", required = true, in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseType", description = "企业类型", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseContact", description = "联系人", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseTel", description = "联系电话", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseAddress", description = "企业地址", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseEntryTime", description = "入驻时间", required = false, in = ParameterIn.QUERY),
+        @Parameter(name = "enterpriseOperatingStatus", description = "经营状态", required = false, in = ParameterIn.QUERY),
+    })
+    @PostMapping("/update")
+    @ResponseBody
+    @LogAnn(title = "更新企业管理", businessType = BusinessTypeEnum.UPDATE)
+    @RequiresPermissions("tf:enterprise:update")
+    public ResultData update(@ModelAttribute @Parameter(hidden = true) EnterpriseEntity enterprise) {
+        //先查询数据是否存在
+        EnterpriseEntity _enterprise = (EnterpriseEntity)enterpriseBiz.getById(enterprise.getId());
+        if(_enterprise == null) {
+            return ResultData.build().error(getResString("err.not.exist",enterprise.getId() ));
+        }
+
+        //验证企业名称的值是否合法
+        if (StringUtils.isBlank(enterprise.getEnterpriseName())) {
+            return ResultData.build().error(getResString("err.empty", this.getResString("enterprise.name")));
+        }
+        if (!StringUtil.checkLength(enterprise.getEnterpriseName()+"", 0, 255)) {
+          return ResultData.build().error(getResString("err.length", this.getResString("enterprise.name"), "0", "255"));
+        }
+        if (  StringUtils.isNotBlank(enterprise.getEnterpriseContact()) && !StringUtil.checkLength(enterprise.getEnterpriseContact()+"", 0, 255)) {
+          return ResultData.build().error(getResString("err.length", this.getResString("enterprise.contact"), "0", "255"));
+        }
+        if (  StringUtils.isNotBlank(enterprise.getEnterpriseTel()) && !StringUtil.checkLength(enterprise.getEnterpriseTel()+"", 0, 255)) {
+          return ResultData.build().error(getResString("err.length", this.getResString("enterprise.tel"), "0", "255"));
+        }
+        if (  StringUtils.isNotBlank(enterprise.getEnterpriseAddress()) && !StringUtil.checkLength(enterprise.getEnterpriseAddress()+"", 0, 255)) {
+          return ResultData.build().error(getResString("err.length", this.getResString("enterprise.address"), "0", "255"));
+        }
+        enterpriseBiz.updateById(enterprise);
+        return ResultData.build().success(enterprise);
+    }
+
+    @GetMapping("verify")
+    @ResponseBody
+    public ResultData verify(String fieldName, String fieldValue, String id,String idName) {
+        boolean verify = false;
+        if (StringUtils.isBlank(id)) {
+            verify = super.validated("ENTERPRISE",fieldName,fieldValue);
+        } else {
+            verify = super.validated("ENTERPRISE",fieldName,fieldValue,id,idName);
+        }
+        if (verify) {
+            return ResultData.build().success(false);
+        }else {
+            return ResultData.build().success(true);
+        }
+    }
+
+}

+ 16 - 0
src/main/java/net/mingsoft/tf/biz/IAnnouncementBiz.java

@@ -0,0 +1,16 @@
+package net.mingsoft.tf.biz;
+
+import net.mingsoft.base.biz.IBaseBiz;
+import net.mingsoft.tf.entity.AnnouncementEntity;
+
+
+/**
+ * 公告管理业务
+ * @author 阿白
+ * 创建日期:2025年12月13日 上午11:22:35<br/>
+ * 历史修订:<br/>
+ */
+public interface IAnnouncementBiz extends IBaseBiz<AnnouncementEntity> {
+
+
+}

+ 16 - 0
src/main/java/net/mingsoft/tf/biz/IEnterpriseBiz.java

@@ -0,0 +1,16 @@
+package net.mingsoft.tf.biz;
+
+import net.mingsoft.base.biz.IBaseBiz;
+import net.mingsoft.tf.entity.EnterpriseEntity;
+
+
+/**
+ * 企业管理业务
+ * @author 阿白
+ * 创建日期:2025年12月13日 上午11:42:16<br/>
+ * 历史修订:<br/>
+ */
+public interface IEnterpriseBiz extends IBaseBiz<EnterpriseEntity> {
+
+
+}

+ 34 - 0
src/main/java/net/mingsoft/tf/biz/impl/AnnouncementBizImpl.java

@@ -0,0 +1,34 @@
+package net.mingsoft.tf.biz.impl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import net.mingsoft.base.biz.impl.BaseBizImpl;
+import net.mingsoft.base.dao.IBaseDao;
+import java.util.*;
+import net.mingsoft.tf.entity.AnnouncementEntity;
+import net.mingsoft.tf.biz.IAnnouncementBiz;
+import net.mingsoft.tf.dao.IAnnouncementDao;
+
+/**
+* 公告管理管理持久化层
+* @author 阿白
+* 创建日期:2025年12月13日 上午11:22:35<br/>
+* 历史修订:<br/>
+*/
+@Service("tfannouncementBizImpl")
+public class AnnouncementBizImpl extends BaseBizImpl<IAnnouncementDao,AnnouncementEntity> implements IAnnouncementBiz {
+
+
+    @Autowired
+    private IAnnouncementDao announcementDao;
+
+
+    @Override
+    protected IBaseDao getDao() {
+        // TODO Auto-generated method stub
+        return announcementDao;
+    }
+
+
+
+}

+ 34 - 0
src/main/java/net/mingsoft/tf/biz/impl/EnterpriseBizImpl.java

@@ -0,0 +1,34 @@
+package net.mingsoft.tf.biz.impl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import net.mingsoft.base.biz.impl.BaseBizImpl;
+import net.mingsoft.base.dao.IBaseDao;
+import java.util.*;
+import net.mingsoft.tf.entity.EnterpriseEntity;
+import net.mingsoft.tf.biz.IEnterpriseBiz;
+import net.mingsoft.tf.dao.IEnterpriseDao;
+
+/**
+* 企业管理管理持久化层
+* @author 阿白
+* 创建日期:2025年12月13日 上午11:42:16<br/>
+* 历史修订:<br/>
+*/
+@Service("tfenterpriseBizImpl")
+public class EnterpriseBizImpl extends BaseBizImpl<IEnterpriseDao,EnterpriseEntity> implements IEnterpriseBiz {
+
+
+    @Autowired
+    private IEnterpriseDao enterpriseDao;
+
+
+    @Override
+    protected IBaseDao getDao() {
+        // TODO Auto-generated method stub
+        return enterpriseDao;
+    }
+
+
+
+}

+ 1 - 1
src/main/java/net/mingsoft/tf/constant/Const.java

@@ -5,7 +5,7 @@ import java.util.ResourceBundle;
 /**
  * tf定义
  * @author 阿白
- * 创建日期:2025年10月23日 下午6:41:34<br/>
+ * 创建日期:2025年12月13日 上午11:42:16<br/>
  * 历史修订:<br/>
  */
 public final class Const {

+ 14 - 0
src/main/java/net/mingsoft/tf/dao/IAnnouncementDao.java

@@ -0,0 +1,14 @@
+package net.mingsoft.tf.dao;
+
+import net.mingsoft.base.dao.IBaseDao;
+import java.util.*;
+import net.mingsoft.tf.entity.AnnouncementEntity;
+
+/**
+ * 公告管理持久层
+ * @author 阿白
+ * 创建日期:2025年12月13日 上午11:22:35<br/>
+ * 历史修订:<br/>
+ */
+public interface IAnnouncementDao extends IBaseDao<AnnouncementEntity> {
+}

+ 22 - 0
src/main/java/net/mingsoft/tf/dao/IAnnouncementDao.xml

@@ -0,0 +1,22 @@
+<?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="net.mingsoft.tf.dao.IAnnouncementDao">
+
+	<resultMap id="resultMap" type="net.mingsoft.tf.entity.AnnouncementEntity">
+				<result column="ANNOUNCEMENT_TITLE" property="announcementTitle" /><!--公告标题 -->
+				<result column="ANNOUNCEMENT_TIME" property="announcementTime" /><!--发布时间 -->
+				<result column="ANNOUNCEMENT_STATUS" property="announcementStatus" /><!--发布状态 -->
+				<result column="ANNOUNCEMENT_CONTENT" property="announcementContent" /><!--公告内容 -->
+				<result column="ANNOUNCEMENT_IMG" property="announcementImg" /><!--封面图 -->
+	</resultMap>
+
+	<select id="query" resultMap="resultMap">
+		SELECT * FROM MDIY_FORM_ANNOUNCEMENT
+		<where>
+			DEL=0
+			<include refid="net.mingsoft.base.dao.IBaseDao.sqlWhere"></include>
+		</where>
+		 ORDER BY ID DESC
+	</select>
+
+</mapper>

+ 14 - 0
src/main/java/net/mingsoft/tf/dao/IEnterpriseDao.java

@@ -0,0 +1,14 @@
+package net.mingsoft.tf.dao;
+
+import net.mingsoft.base.dao.IBaseDao;
+import java.util.*;
+import net.mingsoft.tf.entity.EnterpriseEntity;
+
+/**
+ * 企业管理持久层
+ * @author 阿白
+ * 创建日期:2025年12月13日 上午11:42:16<br/>
+ * 历史修订:<br/>
+ */
+public interface IEnterpriseDao extends IBaseDao<EnterpriseEntity> {
+}

+ 26 - 0
src/main/java/net/mingsoft/tf/dao/IEnterpriseDao.xml

@@ -0,0 +1,26 @@
+<?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="net.mingsoft.tf.dao.IEnterpriseDao">
+
+	<resultMap id="resultMap" type="net.mingsoft.tf.entity.EnterpriseEntity">
+				<result column="ENTERPRISE_INTRODUCTION" property="enterpriseIntroduction" /><!--企业简介 -->
+				<result column="ENTERPRISE_LOGO" property="enterpriseLogo" /><!--LOGO -->
+				<result column="ENTERPRISE_NAME" property="enterpriseName" /><!--企业名称 -->
+				<result column="ENTERPRISE_TYPE" property="enterpriseType" /><!--企业类型 -->
+				<result column="ENTERPRISE_CONTACT" property="enterpriseContact" /><!--联系人 -->
+				<result column="ENTERPRISE_TEL" property="enterpriseTel" /><!--联系电话 -->
+				<result column="ENTERPRISE_ADDRESS" property="enterpriseAddress" /><!--企业地址 -->
+				<result column="ENTERPRISE_ENTRY_TIME" property="enterpriseEntryTime" /><!--入驻时间 -->
+				<result column="ENTERPRISE_OPERATING_STATUS" property="enterpriseOperatingStatus" /><!--经营状态 -->
+	</resultMap>
+
+	<select id="query" resultMap="resultMap">
+		SELECT * FROM MDIY_FORM_ENTERPRISE
+		<where>
+			DEL=0
+			<include refid="net.mingsoft.base.dao.IBaseDao.sqlWhere"></include>
+		</where>
+		 ORDER BY ID DESC
+	</select>
+
+</mapper>

+ 124 - 0
src/main/java/net/mingsoft/tf/entity/AnnouncementEntity.java

@@ -0,0 +1,124 @@
+package net.mingsoft.tf.entity;
+
+
+import org.springframework.format.annotation.DateTimeFormat;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import net.mingsoft.base.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.SqlCondition;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+
+import java.util.Date;
+/**
+* 公告管理实体
+* @author 阿白
+* 创建日期:2025年12月13日 上午11:22:35<br/>
+* 历史修订:<br/>
+*/
+@TableName("MDIY_FORM_ANNOUNCEMENT")
+public class AnnouncementEntity extends BaseEntity {
+
+private static final long serialVersionUID = 1765596155897L;
+
+    /**
+    * 公告标题
+    */
+    @TableField(condition = SqlCondition.LIKE)
+    private String announcementTitle;
+    /**
+    * 发布时间
+    */
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    
+    private Date announcementTime;
+    /**
+    * 发布状态
+    */
+    
+    private String announcementStatus;
+    /**
+    * 公告内容
+    */
+    
+    private String announcementContent;
+    /**
+    * 封面图
+    */
+    
+    private String announcementImg;
+
+
+    /**
+    * 设置公告标题
+    */
+    public void setAnnouncementTitle(String announcementTitle) {
+        this.announcementTitle = announcementTitle;
+    }
+
+    /**
+    * 获取公告标题
+    */
+    public String getAnnouncementTitle() {
+        return this.announcementTitle;
+    }
+    /**
+    * 设置发布时间
+    */
+    public void setAnnouncementTime(Date announcementTime) {
+        this.announcementTime = announcementTime;
+    }
+
+    /**
+    * 获取发布时间
+    */
+    public Date getAnnouncementTime() {
+        return this.announcementTime;
+    }
+    /**
+    * 设置发布状态
+    */
+    public void setAnnouncementStatus(String announcementStatus) {
+        this.announcementStatus = announcementStatus;
+    }
+
+    /**
+    * 获取发布状态
+    */
+    public String getAnnouncementStatus() {
+        return this.announcementStatus;
+    }
+    /**
+    * 设置公告内容
+    */
+    public void setAnnouncementContent(String announcementContent) {
+        this.announcementContent = announcementContent;
+    }
+
+    /**
+    * 获取公告内容
+    */
+    public String getAnnouncementContent() {
+        return this.announcementContent;
+    }
+    /**
+    * 设置封面图
+    */
+    public void setAnnouncementImg(String announcementImg) {
+        this.announcementImg = announcementImg;
+    }
+
+    /**
+    * 获取封面图
+    */
+    public String getAnnouncementImg() {
+        return this.announcementImg;
+    }
+
+
+}

+ 196 - 0
src/main/java/net/mingsoft/tf/entity/EnterpriseEntity.java

@@ -0,0 +1,196 @@
+package net.mingsoft.tf.entity;
+
+
+import org.springframework.format.annotation.DateTimeFormat;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import net.mingsoft.base.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.SqlCondition;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+
+import java.util.Date;
+/**
+* 企业管理实体
+* @author 阿白
+* 创建日期:2025年12月13日 上午11:42:16<br/>
+* 历史修订:<br/>
+*/
+@TableName("MDIY_FORM_ENTERPRISE")
+public class EnterpriseEntity extends BaseEntity {
+
+private static final long serialVersionUID = 1765597336717L;
+
+    /**
+    * 企业简介
+    */
+    
+    private String enterpriseIntroduction;
+    /**
+    * LOGO
+    */
+    
+    private String enterpriseLogo;
+    /**
+    * 企业名称
+    */
+    @TableField(condition = SqlCondition.LIKE)
+    private String enterpriseName;
+    /**
+    * 企业类型
+    */
+    
+    private String enterpriseType;
+    /**
+    * 联系人
+    */
+    @TableField(condition = SqlCondition.LIKE)
+    private String enterpriseContact;
+    /**
+    * 联系电话
+    */
+    @TableField(condition = SqlCondition.LIKE)
+    private String enterpriseTel;
+    /**
+    * 企业地址
+    */
+    @TableField(condition = SqlCondition.LIKE)
+    private String enterpriseAddress;
+    /**
+    * 入驻时间
+    */
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    
+    private Date enterpriseEntryTime;
+    /**
+    * 经营状态
+    */
+    
+    private String enterpriseOperatingStatus;
+
+
+    /**
+    * 设置企业简介
+    */
+    public void setEnterpriseIntroduction(String enterpriseIntroduction) {
+        this.enterpriseIntroduction = enterpriseIntroduction;
+    }
+
+    /**
+    * 获取企业简介
+    */
+    public String getEnterpriseIntroduction() {
+        return this.enterpriseIntroduction;
+    }
+    /**
+    * 设置LOGO
+    */
+    public void setEnterpriseLogo(String enterpriseLogo) {
+        this.enterpriseLogo = enterpriseLogo;
+    }
+
+    /**
+    * 获取LOGO
+    */
+    public String getEnterpriseLogo() {
+        return this.enterpriseLogo;
+    }
+    /**
+    * 设置企业名称
+    */
+    public void setEnterpriseName(String enterpriseName) {
+        this.enterpriseName = enterpriseName;
+    }
+
+    /**
+    * 获取企业名称
+    */
+    public String getEnterpriseName() {
+        return this.enterpriseName;
+    }
+    /**
+    * 设置企业类型
+    */
+    public void setEnterpriseType(String enterpriseType) {
+        this.enterpriseType = enterpriseType;
+    }
+
+    /**
+    * 获取企业类型
+    */
+    public String getEnterpriseType() {
+        return this.enterpriseType;
+    }
+    /**
+    * 设置联系人
+    */
+    public void setEnterpriseContact(String enterpriseContact) {
+        this.enterpriseContact = enterpriseContact;
+    }
+
+    /**
+    * 获取联系人
+    */
+    public String getEnterpriseContact() {
+        return this.enterpriseContact;
+    }
+    /**
+    * 设置联系电话
+    */
+    public void setEnterpriseTel(String enterpriseTel) {
+        this.enterpriseTel = enterpriseTel;
+    }
+
+    /**
+    * 获取联系电话
+    */
+    public String getEnterpriseTel() {
+        return this.enterpriseTel;
+    }
+    /**
+    * 设置企业地址
+    */
+    public void setEnterpriseAddress(String enterpriseAddress) {
+        this.enterpriseAddress = enterpriseAddress;
+    }
+
+    /**
+    * 获取企业地址
+    */
+    public String getEnterpriseAddress() {
+        return this.enterpriseAddress;
+    }
+    /**
+    * 设置入驻时间
+    */
+    public void setEnterpriseEntryTime(Date enterpriseEntryTime) {
+        this.enterpriseEntryTime = enterpriseEntryTime;
+    }
+
+    /**
+    * 获取入驻时间
+    */
+    public Date getEnterpriseEntryTime() {
+        return this.enterpriseEntryTime;
+    }
+    /**
+    * 设置经营状态
+    */
+    public void setEnterpriseOperatingStatus(String enterpriseOperatingStatus) {
+        this.enterpriseOperatingStatus = enterpriseOperatingStatus;
+    }
+
+    /**
+    * 获取经营状态
+    */
+    public String getEnterpriseOperatingStatus() {
+        return this.enterpriseOperatingStatus;
+    }
+
+
+}

+ 32 - 0
src/main/java/net/mingsoft/tf/resources/resources_en_US.properties

@@ -7,3 +7,35 @@ booth.x=booth x
 booth.y=booth y
 booth.width=booth width
 booth.height=booth height
+activity.name=activity name
+activity.start=activity start
+activity.end=activity end
+exhibitor.name=exhibitor name
+exhibitor.booth=exhibitor booth
+exhibitor.contact=exhibitor contact
+exhibitor.phone=exhibitor phone
+exhibitor.logo=exhibitor logo
+exhibitor.introduction=exhibitor introduction
+exhibitor.user=exhibitor user
+exhibitor.activities=exhibitor activities
+exhibitor.code=exhibitor code
+company.name=company name
+position=position
+invitation.code=invitation code
+invitation.user.id=invitation user id
+channel=channel
+purpose=purpose
+enterprise.name=enterprise name
+enterprise.type=enterprise type
+enterprise.contact=enterprise contact
+enterprise.tel=enterprise tel
+enterprise.address=enterprise address
+enterprise.entry.time=enterprise entry time
+enterprise.operating.status=enterprise operating status
+enterprise.introduction=enterprise introduction
+enterprise.logo=enterprise logo
+announcement.title=announcement title
+announcement.time=announcement time
+announcement.status=announcement status
+announcement.content=announcement content
+announcement.img=announcement img

+ 32 - 0
src/main/java/net/mingsoft/tf/resources/resources_zh_CN.properties

@@ -7,3 +7,35 @@ booth.x=\u5750\u6807X
 booth.y=\u5750\u6807Y
 booth.width=\u5bbd\u5ea6
 booth.height=\u9ad8\u5ea6
+activity.name=\u6d3b\u52a8\u540d\u79f0
+activity.start=\u5f00\u59cb\u65e5\u671f
+activity.end=\u7ed3\u675f\u65e5\u671f
+exhibitor.name=\u516c\u53f8\u540d\u79f0
+exhibitor.booth=\u5c55\u4f4d\u53f7
+exhibitor.contact=\u8054\u7cfb\u4eba
+exhibitor.phone=\u8054\u7cfb\u7535\u8bdd
+exhibitor.logo=\u516c\u53f8LOGO
+exhibitor.introduction=\u516c\u53f8\u7b80\u4ecb
+exhibitor.user=\u7528\u6237ID
+exhibitor.activities=\u5c55\u4f1aID
+exhibitor.code=\u9080\u8bf7\u7801
+company.name=\u516c\u53f8\u540d\u79f0
+position=\u804c\u4f4d
+invitation.code=\u5c55\u5546\u9080\u8bf7\u7801
+invitation.user.id=\u9080\u8bf7\u7528\u6237ID
+channel=\u4e86\u89e3\u6e20\u9053
+purpose=\u53c2\u89c2\u76ee\u7684
+enterprise.name=\u4f01\u4e1a\u540d\u79f0
+enterprise.type=\u4f01\u4e1a\u7c7b\u578b
+enterprise.contact=\u8054\u7cfb\u4eba
+enterprise.tel=\u8054\u7cfb\u7535\u8bdd
+enterprise.address=\u4f01\u4e1a\u5730\u5740
+enterprise.entry.time=\u5165\u9a7b\u65f6\u95f4
+enterprise.operating.status=\u7ecf\u8425\u72b6\u6001
+enterprise.introduction=\u4f01\u4e1a\u7b80\u4ecb
+enterprise.logo=LOGO
+announcement.title=\u516c\u544a\u6807\u9898
+announcement.time=\u53d1\u5e03\u65f6\u95f4
+announcement.status=\u53d1\u5e03\u72b6\u6001
+announcement.content=\u516c\u544a\u5185\u5bb9
+announcement.img=\u5c01\u9762\u56fe

+ 53 - 0
src/main/java/net/mingsoft/tf/www/EnterpriseAction.java

@@ -0,0 +1,53 @@
+package net.mingsoft.tf.www;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.enums.ParameterIn;
+import jakarta.annotation.Resource;
+import net.mingsoft.base.entity.ResultData;
+import net.mingsoft.tf.entity.EnterpriseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+@Controller
+@RequestMapping("/tf/enterprise")
+public class EnterpriseAction {
+    @Resource
+    private net.mingsoft.tf.action.EnterpriseAction action;
+
+    /**
+     * 查询企业管理列表
+     *
+     * @param enterprise 企业管理实体
+     */
+    @Operation(summary = "查询企业管理列表接口")
+    @Parameters({
+            @Parameter(name = "enterpriseName", description = "企业名称", in = ParameterIn.QUERY),
+            @Parameter(name = "enterpriseType", description = "企业类型", in = ParameterIn.QUERY),
+            @Parameter(name = "enterpriseContact", description = "联系人", in = ParameterIn.QUERY),
+            @Parameter(name = "enterpriseTel", description = "联系电话", in = ParameterIn.QUERY),
+            @Parameter(name = "enterpriseAddress", description = "企业地址", in = ParameterIn.QUERY),
+            @Parameter(name = "enterpriseEntryTime", description = "入驻时间", in = ParameterIn.QUERY),
+            @Parameter(name = "enterpriseOperatingStatus", description = "经营状态", in = ParameterIn.QUERY),
+            @Parameter(name = "enterpriseIntroduction", description = "企业简介", in = ParameterIn.QUERY),
+    })
+    @PostMapping(value = "/list")
+    @ResponseBody
+    public ResultData list(@RequestBody EnterpriseEntity enterprise) {
+        return action.list(enterprise);
+    }
+
+    /**
+     * 获取企业管理
+     *
+     * @param enterprise 企业管理实体
+     */
+    @Operation(summary = "获取企业管理列表接口")
+    @Parameter(name = "id", description = "主键ID", required = true, in = ParameterIn.QUERY)
+    @GetMapping("/get")
+    @ResponseBody
+    public ResultData get(@ModelAttribute @Parameter(hidden = true) EnterpriseEntity enterprise) {
+        return action.get(enterprise);
+    }
+}

+ 8 - 47
src/main/resources/log4j-spring.xml

@@ -33,50 +33,14 @@
                 <!-- 当文件大小超过10MB时触发滚动 -->
                 <SizeBasedTriggeringPolicy size="10MB"/>
             </Policies>
-            <!-- 最多保留15个归档文件 -->
-            <DefaultRolloverStrategy max="15"/>
-        </RollingFile>
-
-        <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
-        <RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/info.log" filePattern="${FILE_PATH}/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.gz">
-            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
-            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
-            <PatternLayout pattern="${LOG_PATTERN}"/>
-            <Policies>
-                <!--interval属性用来指定多久滚动一次,默认是1 hour-->
-                <TimeBasedTriggeringPolicy interval="1"/>
-                <SizeBasedTriggeringPolicy size="10MB"/>
-            </Policies>
-            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
-            <DefaultRolloverStrategy max="15"/>
-        </RollingFile>
-
-        <!-- 这个会打印出所有的warn及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
-        <RollingFile name="RollingFileWarn" fileName="${FILE_PATH}/warn.log" filePattern="${FILE_PATH}/${FILE_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.gz">
-            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
-            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
-            <PatternLayout pattern="${LOG_PATTERN}"/>
-            <Policies>
-                <!--interval属性用来指定多久滚动一次,默认是1 hour-->
-                <TimeBasedTriggeringPolicy interval="1"/>
-                <SizeBasedTriggeringPolicy size="10MB"/>
-            </Policies>
-            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
-            <DefaultRolloverStrategy max="15"/>
-        </RollingFile>
-
-        <!-- 这个会打印出所有的error及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
-        <RollingFile name="RollingFileError" fileName="${FILE_PATH}/error.log" filePattern="${FILE_PATH}/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log.gz">
-            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
-            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
-            <PatternLayout pattern="${LOG_PATTERN}"/>
-            <Policies>
-                <!--interval属性用来指定多久滚动一次,默认是1 hour-->
-                <TimeBasedTriggeringPolicy interval="1"/>
-                <SizeBasedTriggeringPolicy size="10MB"/>
-            </Policies>
-            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
-            <DefaultRolloverStrategy max="15"/>
+            <!-- 保留1个月的日志文件 -->
+            <DefaultRolloverStrategy>
+                <Delete basePath="${FILE_PATH}" maxDepth="1">
+                    <IfFileName glob="${FILE_NAME}-*-*.log.gz">
+                        <IfLastModified age="30d"/>
+                    </IfFileName>
+                </Delete>
+            </DefaultRolloverStrategy>
         </RollingFile>
 
     </appenders>
@@ -98,9 +62,6 @@
         <root level="info">
             <appender-ref ref="Console"/>
             <appender-ref ref="RollingFileDebug"/>
-            <appender-ref ref="RollingFileInfo"/>
-            <appender-ref ref="RollingFileWarn"/>
-            <appender-ref ref="RollingFileError"/>
         </root>
     </loggers>
 

+ 345 - 0
src/main/webapp/WEB-INF/manager/tf/announcement/form.ftl

@@ -0,0 +1,345 @@
+    <!DOCTYPE html>
+    <html>
+
+    <head>
+        <title>公告管理</title>
+            <#include "../../include/head-file.ftl">
+
+    </head>
+
+    <body>
+    <div id="form" v-cloak>
+        <el-header class="ms-header ms-tr" height="50px">
+            <el-button type="primary" class="iconfont icon-baocun" size="default" @click="save()" :loading="saveDisabled">保存</el-button>
+            <el-button size="default" class="iconfont icon-fanhui" plain @click="back()">返回</el-button>
+        </el-header>
+        <el-main class="ms-container" v-loading="loading">
+            <el-form ref="form" :model="form" :rules="rules" label-width="120px" label-position="right" size="default">
+
+            <!--公告标题-->
+
+	        <el-form-item  label="公告标题" prop="announcementTitle">
+	            <el-input
+                        v-model="form.announcementTitle"
+                         :disabled="false"
+                          :readonly="false"
+                          :style="{width:  '100%'}"
+                          :clearable="true"
+                        placeholder="请输入公告标题">
+                </el-input>
+	        </el-form-item>   
+                        <el-row
+                                :gutter="0"
+                                justify="start" align="top">
+                                <el-col :span=12>
+        <!--发布时间-->
+    
+        <el-form-item  label="发布时间" prop="announcementTime">
+               <el-date-picker
+                     v-model="form.announcementTime"
+placeholder="请选择发布时间"                    :readonly="false"
+                    :disabled="false"
+                    :editable="true"
+                    :clearable="true"
+                  value-format="YYYY-MM-DD"
+                    :style="{width:'100%'}"
+                    type="date">
+            </el-date-picker>
+        </el-form-item>
+                                </el-col>
+                                <el-col :span=12>
+<!--发布状态-->
+
+    <el-form-item  label="发布状态" prop="announcementStatus">
+                <ms-dict  v-model="form.announcementStatus"
+                       :style="{width: '100%'}"
+                       dict-type="公告管理-发布状态"
+                       :filterable="false"
+                       :disabled="false"
+                       :multiple="false" :clearable="true"
+                        placeholder="请选择发布状态">
+                </ms-dict>
+    </el-form-item>
+
+                                </el-col>
+                        </el-row>
+        <!--公告内容-->
+    
+        <el-form-item  label="公告内容" prop="announcementContent">
+             <vue-ueditor-wrap style="line-height: 0px"
+                      v-model="form.announcementContent" :config="ms.editorConfig"></vue-ueditor-wrap>
+        </el-form-item>
+   
+        <!--封面图-->
+    
+        <el-form-item  label="封面图" prop="announcementImg">
+             <el-upload
+                    :file-list="form.announcementImg"
+                    :action="ms.manager+'/file/upload.do'"
+                    :limit="1"
+                    multiple
+                    :disabled="false"
+                    :data="{uploadPath:'/tf/','isRename':true,'appId':true}"
+                    :on-remove="announcementImgHandleRemove"
+                    :on-exceed="announcementImgHandleExceed"
+                    :on-preview="announcementImgHandlePreview"
+                    :before-upload="announcementImgBeforeUpload"    
+                    :on-success="announcementImgSuccess"
+                    :on-error="announcementImgError"
+                    accept="image/*"
+                    list-type="picture-card">
+                <i class="el-icon-plus"></i>
+                <template #tip>
+                  <div class="el-upload__tip">最多上传1张图片</div>
+               </template>
+            </el-upload>
+        </el-form-item>
+   
+            </el-form>
+        </el-main>
+    </div>
+    </body>
+
+    </html>
+
+<script>
+    var formVue = new _Vue({
+        el: '#form',
+
+        data:function() {
+            return {
+                loading:false,
+                saveDisabled: false,
+                // 发布状态
+                announcementStatusOptions:[],
+                //表单数据
+                form: {
+                    // 公告标题
+                    announcementTitle:'',
+                    //发布时间
+                   announcementTime:"",
+                    				// 发布状态
+                    				announcementStatus:"",
+                    // 公告内容
+                    announcementContent:'',
+                    // 封面图
+                    announcementImg: [],
+
+                },
+                rules:{
+                        // 公告标题
+                        announcementTitle: [{"min":0,"max":255,"message":"公告标题长度必须为0-255"}],
+
+                },
+
+            }
+        },
+        watch:{
+                     disabled: {
+          handler(newVal) {
+            if (newVal === true) {
+              ms.editorConfig.readonly = true;
+            } else {
+              ms.editorConfig.readonly = false;
+            }
+          },
+          immediate: true
+        }
+        },
+        components:{
+        },
+        computed:{
+        },
+        methods: {
+
+            back: function (){
+                ms.util.openSystemUrl("/tf/announcement/index.do",true);
+            },
+
+            save:function() {
+                var that = this;
+                var url = ms.manager + "/tf/announcement/save.do"
+                if (that.form.id > 0) {
+                    url = ms.manager + "/tf/announcement/update.do";
+                }
+
+                this.$refs.form.validate(function(valid) {
+                    if (valid) {
+                        that.saveDisabled = true;
+                        var form = JSON.parse(JSON.stringify(that.form));
+	 				
+												if (form.announcementImg.length>0) {												
+													form.announcementImg.forEach(function (value) {
+														value.url = value.url.replace(new RegExp('^'+ms.contextpath), "");
+													});  
+													form.announcementImg = JSON.stringify(form.announcementImg);
+												} else {
+													form.announcementImg = '';
+												}
+                        ms.http.post(url, form).then(function (res) {
+                            if (res.result) {
+                                that.$notify({
+                                    title: "成功",
+                                    message: "保存成功",
+                                    type: 'success'
+                                });
+                                ms.util.openSystemUrl("/tf/announcement/index.do",that.form.id > 0);
+                            } else {
+                                that.$notify({
+                                    title: "错误",
+                                    message: res.msg,
+                                    type: 'warning'
+                                });
+                            }
+
+                            that.saveDisabled = false;
+                        }).catch(function (err) {
+                            console.log(err);
+                            that.saveDisabled = false;
+                        });
+                    } else {
+                        return false;
+                    }
+                })
+            },
+
+            //获取当前公告管理
+            get:function(id) {
+                var that = this;
+                this.loading = true
+                ms.http.get(ms.manager + "/tf/announcement/get.do", {"id":id}).then(function (res) {
+                    that.loading = false
+                    if(res.result&&res.data) {
+                                         if (res.data.announcementImg) {
+                          res.data.announcementImg = JSON.parse(res.data.announcementImg);
+                          res.data.announcementImg.forEach(function (value) {
+                             if(!value.url.startsWith("http://") && !value.url.startsWith("https://")){
+								value.url = ms.contextpath + value.url;
+							 }
+                          });
+                      } else {
+                          res.data.announcementImg = [];
+                      }
+
+                        that.form = res.data;
+                    }
+                });
+            },
+           //发布时间日期格式化
+           announcementTimeFormat:function(row, column, cellValue, index){                
+                return ms.util.date.fmt(new Date(row.ANNOUNCEMENT_TIME),'YYYY-MM-DD');                
+            },
+    //发布状态  列表格式化
+    announcementStatusFormat:function(row, column, cellValue, index){
+        var value="";
+
+            if(cellValue){
+            var data = this.announcementStatusOptions.find(function(value){
+            return value.dictValue==cellValue;
+            })
+            if(data&&data.dictLabel){
+            value = data.dictLabel;
+            }
+            }
+
+        return value;
+    },
+
+//获取announcementStatus数据源
+    announcementStatusOptionsGet:function() {
+    var that = this;
+    ms.http.get(ms.base+'/mdiy/dict/list.do', {dictType:'公告管理-发布状态',pageSize:99999}).then(function (res) {
+    that.announcementStatusOptions = res.data.rows;
+    }).catch(function (err) {
+    console.log(err);
+    });
+    },
+        // announcementImg删除
+        announcementImgHandleRemove: function (file, files) {
+        	var index = -1;
+        	index = this.form.announcementImg.findIndex(function (text) {
+        		return text.uid == file.uid;
+        	});
+        	if (index != -1) {
+        		this.form.announcementImg.splice(index, 1);
+        	}
+        },
+        //announcementImg上传超过限制
+        announcementImgHandleExceed: function (files, fileList) {
+        	this.$notify({
+        		title: '失败',
+        		message: '当前最多上传1个文件',
+        		type: 'warning'
+        	});
+        },
+        //announcementImg预览
+        announcementImgHandlePreview: function (file){
+				window.open(file.url);
+        },
+		//announcementImg上传前
+		announcementImgBeforeUpload: function (file) {
+			var type = file.type;
+                if (type) {
+                    var isImage = type.startsWith('image/');
+                    if (!isImage) {
+                        this.$notify({
+                            title: '提示',
+                            message: '请上传图片类型文件',
+                            type: 'warning'
+                        });
+                    }
+                    return isImage;
+                }
+                return false;
+		},
+        //announcementImg上传成功
+        announcementImgSuccess: function (response, file, fileList) {
+        	if (response.result) {
+				if(!response.data.startsWith("http://") && !response.data.startsWith("https://")) {
+					file.url = ms.contextpath + response.data;
+				}else{
+					file.url = response.data;
+				}
+        		this.form.announcementImg.push({
+        			url: response.data,
+        			name: file.name,
+        			uid: file.uid
+        		});
+        	} else {
+				// 移除上传图片
+				var index = fileList.indexOf(file);
+				if (index > -1) {
+					fileList.splice(index, 1);
+				}
+        		this.$notify({
+        			title: '失败',
+        			message: response.msg,
+        			type: 'warning'
+        		});
+        	}
+        },
+        //announcementImg上传失败
+        announcementImgError: function (response, file, fileList) {
+        	response = JSON.parse(response.message);
+        	this.$notify({
+        		title: '失败',
+        		message: response.msg,
+        		type: 'warning'
+        	});
+        },        },
+        created:function() {
+            var that = this;
+           
+               //加载发布状态 数据
+                this.announcementStatusOptionsGet();
+
+            this.form.id = ms.util.getParameter("id");
+            if (this.form.id) {
+                this.get(this.form.id);
+            }
+        }
+    });
+
+</script>
+    <style scoped>
+    </style>

+ 453 - 0
src/main/webapp/WEB-INF/manager/tf/announcement/index.ftl

@@ -0,0 +1,453 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>公告管理</title>
+        <#include "../../include/head-file.ftl">
+</head>
+<body>
+<div id="index" class="ms-index" v-cloak>
+        <el-header class="ms-header" height="50px">
+        <el-col :span=12>
+            <@shiro.hasPermission name="tf:announcement:save">
+                <el-button type="primary" class="el-icon-plus" size="default" @click="save()">新增</el-button>
+
+            </@shiro.hasPermission>
+            <@shiro.hasPermission name="tf:announcement:del">
+                <el-button type="danger" class="el-icon-delete" size="default" @click="del(selectionList)"  :disabled="!selectionList.length">删除</el-button>
+            </@shiro.hasPermission>
+        </el-col>
+        </el-header>
+        <div class="ms-search">
+            <el-row>
+                <el-form :model="form"  ref="searchForm"  label-width="120px" size="default">
+                        <el-row>
+                                        <el-col :span=8>
+            <!--公告标题-->
+
+	        <el-form-item  label="公告标题" prop="announcementTitle">
+	            <el-input
+                        v-model="form.announcementTitle"
+                         :disabled="false"
+                          :readonly="false"
+                          :style="{width:  '100%'}"
+                          :clearable="true"
+                        placeholder="请输入公告标题">
+                </el-input>
+	        </el-form-item>   
+                                        </el-col>
+                                        <el-col :span=8>
+<!--发布状态-->
+
+    <el-form-item  label="发布状态" prop="announcementStatus">
+                <ms-dict  v-model="form.announcementStatus"
+                       :style="{width: '100%'}"
+                       dict-type="公告管理-发布状态"
+                       :filterable="false"
+                       :disabled="false"
+                       :multiple="false" :clearable="true"
+                        placeholder="请选择发布状态">
+                </ms-dict>
+    </el-form-item>
+
+                                        </el-col>
+                                <el-col :span=8 style="display: flex;justify-content: end;padding-right: 10px;">
+                                    <el-button type="primary" class="el-icon-search" size="default" @click="currentPage=1;list(true)">搜索</el-button>
+                                    <el-button @click="rest"  class="el-icon-refresh" size="default">重置</el-button>
+                                    <ms-search ref="search" @search="search" :search-json="searchJson" :search-key="historyKey"></ms-search>
+                                </el-col>
+                        </el-row>
+                </el-form>
+            </el-row>
+        </div>
+    <el-main class="ms-container">
+        <el-table class="ms-table-pagination" v-loading="loading" ref="multipleTable" border :data="dataList" tooltip-effect="dark" @selection-change="handleSelectionChange">
+                <template #empty>
+                    {{emptyText}}
+                </template>
+                    <el-table-column type="selection" width="40" :selectable="isChecked"></el-table-column>
+                            <el-table-column label="公告标题"   align="left" prop="announcementTitle">
+                            </el-table-column>
+                <el-table-column label="发布时间"   min-width="200" align="center" prop="announcementTime" >
+                    </el-table-column>
+                        <el-table-column label="发布状态"   align="left" prop="announcementStatus" :formatter="announcementStatusFormat">
+                        </el-table-column>
+                    <el-table-column min-width="80" label="封面图"  align="left">
+                        <template #default="scope">
+                            <template v-if="scope.row.announcementImg&&scope.row.announcementImg !=''&&JSON.parse(scope.row.announcementImg).length">
+                                <div class="block" v-for="src in JSON.parse(scope.row.announcementImg)">
+                                    <el-image
+                                        :src="(!src.url.startsWith('http://') && !src.url.startsWith('https://')) ? ms.contextpath + src.url : src.url"
+                                        :preview-teleported=true
+                                        style="width: 50px;height: 50px;line-height: 50px;font-size: 30px">
+                                      	<template #error>
+                                          	<template class="image-slot">
+                                              	<i class="el-icon-picture-outline"></i>
+                                          	</template>
+                                      	</template>
+                                    </el-image>
+                                </div>
+                            </template>
+                        </template>
+                    </el-table-column>
+                    <el-table-column  min-width="180" align="center" label="创建时间" prop="createDate"></el-table-column>
+                    <el-table-column label="操作"  width="180" align="center" fixed="right">
+                            <template #default="scope">
+                                <@shiro.hasPermission name="tf:announcement:update">
+                                    <el-link type="primary" :underline="false" @click="save(scope.row.id)">编辑</el-link>
+                                </@shiro.hasPermission>
+                            <@shiro.hasPermission name="tf:announcement:del">
+                                <el-link type="primary" :underline="false" @click="del([scope.row])" v-if="scope.row.del!=3">删除</el-link>
+                            </@shiro.hasPermission>
+                </template>
+                </el-table-column>
+            </el-table>
+                <el-pagination
+                        background
+                        :page-sizes="[10,20,30,40,50,100]"
+                        layout="total, sizes, prev, pager, next, jumper"
+                        :current-page="currentPage"
+                        :page-size="pageSize"
+                        :total="total"
+                        class="ms-pagination"
+                        @current-change='currentChange'
+                        @size-change="sizeChange">
+                </el-pagination>
+    </el-main>
+</div>
+
+</body>
+
+</html>
+<script>
+    var indexVue = new _Vue({
+        el: '#index',
+		provide() {
+			return {
+				searchParent: this //筛选使用
+			};
+		},
+        data:function() {
+            return {
+				        searchJson:[
+    {
+    "isSearch": "true",
+    "action": "and",
+    "field": "ANNOUNCEMENT_TITLE",
+    "el": "eq",
+    "model": "announcementTitle",
+    "name": "公告标题",
+    "type": "input"
+    },
+    {
+    "action": "and",
+    "field": "ANNOUNCEMENT_TIME",
+    "model": "announcementTime",
+    "el": "gt",
+    "fmt": "YYYY-MM-DD",
+    "name": "发布时间",
+    "type": "date"
+    },
+
+       {
+  "isSearch": "true",
+  "action": "and",
+  "field": "ANNOUNCEMENT_STATUS",
+  "el": "eq",
+  "model": "announcementStatus",
+  "name": "发布状态",
+  "key": "dictValue",
+  "title": "dictLabel",
+  "type": "select",
+  "multiple": "false"
+  
+},    {
+    "action":"and",
+    "field": "ANNOUNCEMENT_IMG",
+    "el": "empty",
+    "model": "announcementImg",
+    "name": "封面图",
+    "type": "imgupload"
+    },
+                ],
+                dataList: [], //公告管理列表
+                selectionList:[],//公告管理列表选中
+                total: 0, //总记录数量
+                pageSize: 10, //页面数量
+                currentPage:1, //初始页
+                manager: ms.manager,
+                loading: true,//加载状态
+                emptyText:'',//提示文字
+                // 发布状态
+                announcementStatusOptions:[],
+                //搜索表单
+                form:{
+                    sqlWhere:null
+                },
+                //历史记录参数
+                historyKey: "tf_announcement_history"
+            }
+        },
+        watch:{
+                     disabled: {
+          handler(newVal) {
+            if (newVal === true) {
+              ms.editorConfig.readonly = true;
+            } else {
+              ms.editorConfig.readonly = false;
+            }
+          },
+          immediate: true
+        }
+        },
+        methods:{
+            isChecked: function(row) {
+                if(row.del == 3) {
+                    return false;
+                }
+                return true;
+            },
+            //查询列表
+            list: function(isSearch) {
+                var that = this;
+                var data = {}; //搜索参数
+                that.loading = true;
+                var page={
+                    pageNo: that.currentPage,
+                    pageSize : that.pageSize
+                }
+                var form = JSON.parse(JSON.stringify(that.form))
+
+
+                if(isSearch) {
+                    //删除空字符串
+                    for (var key in form){
+                        if(form[key] === undefined || form[key] === null){
+                            delete  form[key]
+                        }
+                    }
+                    form.sqlWhere ? data = Object.assign({}, {sqlWhere: form.sqlWhere}, page) : data = Object.assign({}, form, page)
+                } else {
+                    data = page;
+                }
+                sessionStorage.setItem(that.historyKey,JSON.stringify({form: form, page: page}));
+                ms.http.post(ms.manager+"/tf/announcement/list.do",data).then(
+                    function(res) {
+                        if (!res.result||res.data.total <= 0) {
+                            that.emptyText ="暂无数据"
+                            that.dataList = [];
+                            that.total = 0;
+                        } else {
+                            that.emptyText = '';
+                            that.total = res.data.total;
+                            that.dataList = res.data.rows;
+                        }
+                        that.loading = false;
+                    }).catch(function(err) {
+                    that.loading = false;
+                    console.log(err);
+                });
+
+            },
+            //公告管理列表选中
+            handleSelectionChange:function(val){
+                this.selectionList = val;
+            },
+            //删除
+            del: function(row){
+                var that = this;
+                that.$confirm("此操作将永久删除所选内容, 是否继续", "提示", {
+                    confirmButtonText: "确认",
+                    cancelButtonText: "取消",
+                    type: 'warning'
+                }).then(function() {
+                    ms.http.post(ms.manager+"/tf/announcement/delete.do", row.length?row:[row],{
+                        headers: {
+                            'Content-Type': 'application/json'
+                        }
+                    }).then(
+                        function(res){
+                            if (res.result) {
+                                that.$notify({
+                                    title:'成功',
+                                    type: 'success',
+                                    message:"删除成功"
+                                });
+                                //删除成功,刷新列表
+                                that.list();
+                            }else {
+                                that.$notify({
+                                    title: "错误",
+                                    message: res.msg,
+                                    type: 'warning'
+                                });
+                            }
+                        });
+                }).catch(function(err) {
+                    //删除如果用户取消会抛出异常,所以需要catch一下
+                    console.log(err)
+                });
+            },
+            //新增
+            save:function(id){
+                if(id){
+                    ms.util.openSystemUrl("/tf/announcement/form.do?id="+id);
+                }else {
+                    ms.util.openSystemUrl("/tf/announcement/form.do");
+                }
+            },
+
+            //pageSize改变时会触发
+            sizeChange:function(pagesize) {
+                this.loading = true;
+                this.pageSize = pagesize;
+                this.list(true);
+            },
+            //currentPage改变时会触发
+            currentChange:function(currentPage) {
+                this.loading = true;
+                this.currentPage = currentPage;
+                this.list(true);
+            },
+            search:function(data){
+                this.form.sqlWhere = JSON.stringify(data);
+                this.list(true);
+            },
+            //重置表单
+            rest:function(){
+                this.currentPage = 1;
+                this.form = {
+                    sqlWhere:null
+                };
+                this.$refs.searchForm.resetFields();
+                this.list(true);
+            },
+           //发布时间日期格式化
+           announcementTimeFormat:function(row, column, cellValue, index){                
+                return ms.util.date.fmt(new Date(row.ANNOUNCEMENT_TIME),'YYYY-MM-DD');                
+            },
+    //发布状态  列表格式化
+    announcementStatusFormat:function(row, column, cellValue, index){
+        var value="";
+
+            if(cellValue){
+            var data = this.announcementStatusOptions.find(function(value){
+            return value.dictValue==cellValue;
+            })
+            if(data&&data.dictLabel){
+            value = data.dictLabel;
+            }
+            }
+
+        return value;
+    },
+
+//获取announcementStatus数据源
+    announcementStatusOptionsGet:function() {
+    var that = this;
+    ms.http.get(ms.base+'/mdiy/dict/list.do', {dictType:'公告管理-发布状态',pageSize:99999}).then(function (res) {
+    that.announcementStatusOptions = res.data.rows;
+    }).catch(function (err) {
+    console.log(err);
+    });
+    },
+        // announcementImg删除
+        announcementImgHandleRemove: function (file, files) {
+        	var index = -1;
+        	index = this.form.announcementImg.findIndex(function (text) {
+        		return text.uid == file.uid;
+        	});
+        	if (index != -1) {
+        		this.form.announcementImg.splice(index, 1);
+        	}
+        },
+        //announcementImg上传超过限制
+        announcementImgHandleExceed: function (files, fileList) {
+        	this.$notify({
+        		title: '失败',
+        		message: '当前最多上传1个文件',
+        		type: 'warning'
+        	});
+        },
+        //announcementImg预览
+        announcementImgHandlePreview: function (file){
+				window.open(file.url);
+        },
+		//announcementImg上传前
+		announcementImgBeforeUpload: function (file) {
+			var type = file.type;
+                if (type) {
+                    var isImage = type.startsWith('image/');
+                    if (!isImage) {
+                        this.$notify({
+                            title: '提示',
+                            message: '请上传图片类型文件',
+                            type: 'warning'
+                        });
+                    }
+                    return isImage;
+                }
+                return false;
+		},
+        //announcementImg上传成功
+        announcementImgSuccess: function (response, file, fileList) {
+        	if (response.result) {
+				if(!response.data.startsWith("http://") && !response.data.startsWith("https://")) {
+					file.url = ms.contextpath + response.data;
+				}else{
+					file.url = response.data;
+				}
+        		this.form.announcementImg.push({
+        			url: response.data,
+        			name: file.name,
+        			uid: file.uid
+        		});
+        	} else {
+				// 移除上传图片
+				var index = fileList.indexOf(file);
+				if (index > -1) {
+					fileList.splice(index, 1);
+				}
+        		this.$notify({
+        			title: '失败',
+        			message: response.msg,
+        			type: 'warning'
+        		});
+        	}
+        },
+        //announcementImg上传失败
+        announcementImgError: function (response, file, fileList) {
+        	response = JSON.parse(response.message);
+        	this.$notify({
+        		title: '失败',
+        		message: response.msg,
+        		type: 'warning'
+        	});
+        },
+        },
+        mounted:function(){
+            var that = this;
+
+            //如果存在历史参数,恢复页面结果
+            if(sessionStorage.getItem(this.historyKey) && ms.util.getParameter("isBack") == 'true') {
+                var _history = JSON.parse(sessionStorage.getItem(this.historyKey))
+                this.form = _history.form;
+                this.total = parseInt(_history.total);
+                this.currentPage = parseInt(_history.page.pageNo);
+                this.pageSize = parseInt(_history.page.pageSize);
+            }
+
+            this.list(true);
+        },
+		created:function(){
+			var that = this;
+           
+               //加载发布状态 数据
+                this.announcementStatusOptionsGet();
+        }
+    })
+</script>
+    <style scoped>
+        #index .ms-container {
+            height: calc(100vh - 141px);
+        }
+    </style>

+ 449 - 0
src/main/webapp/WEB-INF/manager/tf/enterprise/form.ftl

@@ -0,0 +1,449 @@
+    <!DOCTYPE html>
+    <html>
+
+    <head>
+        <title>企业管理</title>
+            <#include "../../include/head-file.ftl">
+
+    </head>
+
+    <body>
+    <div id="form" v-cloak>
+        <el-header class="ms-header ms-tr" height="50px">
+            <el-button type="primary" class="iconfont icon-baocun" size="default" @click="save()" :loading="saveDisabled">保存</el-button>
+            <el-button size="default" class="iconfont icon-fanhui" plain @click="back()">返回</el-button>
+        </el-header>
+        <el-main class="ms-container" v-loading="loading">
+            <el-form ref="form" :model="form" :rules="rules" label-width="120px" label-position="right" size="default">
+
+                        <el-row
+                                :gutter="0"
+                                justify="start" align="top">
+                                <el-col :span=12>
+            <!--企业名称-->
+
+	        <el-form-item  label="企业名称" prop="enterpriseName">
+	            <el-input
+                        v-model="form.enterpriseName"
+                         :disabled="false"
+                          :readonly="false"
+                          :style="{width:  '100%'}"
+                          :clearable="true"
+                        placeholder="请输入企业名称">
+                </el-input>
+	        </el-form-item>   
+                                </el-col>
+                                <el-col :span=12>
+<!--企业类型-->
+
+    <el-form-item  label="企业类型" prop="enterpriseType">
+                <ms-dict  v-model="form.enterpriseType"
+                       :style="{width: '100%'}"
+                       dict-type="企业管理-企业类型"
+                       :filterable="false"
+                       :disabled="false"
+                       :multiple="false" :clearable="true"
+                        placeholder="请选择企业类型">
+                </ms-dict>
+    </el-form-item>
+
+                                </el-col>
+                        </el-row>
+                        <el-row
+                                :gutter="0"
+                                justify="start" align="top">
+                                <el-col :span=12>
+            <!--联系人-->
+
+	        <el-form-item  label="联系人" prop="enterpriseContact">
+	            <el-input
+                        v-model="form.enterpriseContact"
+                         :disabled="false"
+                          :readonly="false"
+                          :style="{width:  '100%'}"
+                          :clearable="true"
+                        placeholder="请输入联系人">
+                </el-input>
+	        </el-form-item>   
+                                </el-col>
+                                <el-col :span=12>
+            <!--联系电话-->
+
+	        <el-form-item  label="联系电话" prop="enterpriseTel">
+	            <el-input
+                        v-model="form.enterpriseTel"
+                         :disabled="false"
+                          :readonly="false"
+                          :style="{width:  '100%'}"
+                          :clearable="true"
+                        placeholder="请输入联系电话">
+                </el-input>
+	        </el-form-item>   
+                                </el-col>
+                        </el-row>
+            <!--企业地址-->
+
+	        <el-form-item  label="企业地址" prop="enterpriseAddress">
+	            <el-input
+                        v-model="form.enterpriseAddress"
+                         :disabled="false"
+                          :readonly="false"
+                          :style="{width:  '100%'}"
+                          :clearable="true"
+                        placeholder="请输入企业地址">
+                </el-input>
+	        </el-form-item>   
+                        <el-row
+                                :gutter="0"
+                                justify="start" align="top">
+                                <el-col :span=12>
+        <!--入驻时间-->
+    
+        <el-form-item  label="入驻时间" prop="enterpriseEntryTime">
+               <el-date-picker
+                     v-model="form.enterpriseEntryTime"
+placeholder="请选择入驻时间"                    :readonly="false"
+                    :disabled="false"
+                    :editable="true"
+                    :clearable="true"
+                  value-format="YYYY-MM-DD"
+                    :style="{width:'100%'}"
+                    type="date">
+            </el-date-picker>
+        </el-form-item>
+                                </el-col>
+                                <el-col :span=12>
+<!--经营状态-->
+
+    <el-form-item  label="经营状态" prop="enterpriseOperatingStatus">
+                <ms-dict  v-model="form.enterpriseOperatingStatus"
+                       :style="{width: '100%'}"
+                       dict-type="企业管理-经营状态"
+                       :filterable="false"
+                       :disabled="false"
+                       :multiple="false" :clearable="true"
+                        placeholder="请选择经营状态">
+                </ms-dict>
+    </el-form-item>
+
+                                </el-col>
+                        </el-row>
+        <!--企业简介-->	
+	        <el-form-item  label="企业简介" prop="enterpriseIntroduction">
+	            <el-input
+                        type="textarea" :rows="5"
+                        :disabled="false"
+                        v-model="form.enterpriseIntroduction"
+                        :style="{width: '100%'}"
+                        placeholder="请输入企业简介">
+                </el-input>
+	        </el-form-item>
+	   
+        <!--LOGO-->
+    
+        <el-form-item  label="LOGO" prop="enterpriseLogo">
+             <el-upload
+                    :file-list="form.enterpriseLogo"
+                    :action="ms.manager+'/file/upload.do'"
+                    :limit="1"
+                    multiple
+                    :disabled="false"
+                    :data="{uploadPath:'/tf/','isRename':true,'appId':true}"
+                    :on-remove="enterpriseLogoHandleRemove"
+                    :on-exceed="enterpriseLogoHandleExceed"
+                    :on-preview="enterpriseLogoHandlePreview"
+                    :before-upload="enterpriseLogoBeforeUpload"    
+                    :on-success="enterpriseLogoSuccess"
+                    :on-error="enterpriseLogoError"
+                    accept="image/*"
+                    list-type="picture-card">
+                <i class="el-icon-plus"></i>
+                <template #tip>
+                  <div class="el-upload__tip">最多上传1张图片</div>
+               </template>
+            </el-upload>
+        </el-form-item>
+   
+            </el-form>
+        </el-main>
+    </div>
+    </body>
+
+    </html>
+
+<script>
+    var formVue = new _Vue({
+        el: '#form',
+
+        data:function() {
+            return {
+                loading:false,
+                saveDisabled: false,
+                // 企业类型
+                enterpriseTypeOptions:[],
+                // 经营状态
+                enterpriseOperatingStatusOptions:[],
+                //表单数据
+                form: {
+                    // 企业名称
+                    enterpriseName:'',
+                    				// 企业类型
+                    				enterpriseType:"",
+                    // 联系人
+                    enterpriseContact:'',
+                    // 联系电话
+                    enterpriseTel:'',
+                    // 企业地址
+                    enterpriseAddress:'',
+                    //入驻时间
+                   enterpriseEntryTime:"",
+                    				// 经营状态
+                    				enterpriseOperatingStatus:"",
+                    // 企业简介 
+                    enterpriseIntroduction:'',
+                    // LOGO
+                    enterpriseLogo: [],
+
+                },
+                rules:{
+                        // 企业名称
+                        enterpriseName: [{"type":"string","message":"企业名称格式不正确"},{"required":true,"message":"企业名称不能为空"},{"min":0,"max":255,"message":"企业名称长度必须为0-255"}],
+                        // 联系人
+                        enterpriseContact: [{"min":0,"max":255,"message":"联系人长度必须为0-255"}],
+                        // 联系电话
+                        enterpriseTel: [{"min":0,"max":255,"message":"联系电话长度必须为0-255"}],
+                        // 企业地址
+                        enterpriseAddress: [{"min":0,"max":255,"message":"企业地址长度必须为0-255"}],
+
+                },
+
+            }
+        },
+        watch:{
+               
+        },
+        components:{
+        },
+        computed:{
+        },
+        methods: {
+
+            back: function (){
+                ms.util.openSystemUrl("/tf/enterprise/index.do",true);
+            },
+
+            save:function() {
+                var that = this;
+                var url = ms.manager + "/tf/enterprise/save.do"
+                if (that.form.id > 0) {
+                    url = ms.manager + "/tf/enterprise/update.do";
+                }
+
+                this.$refs.form.validate(function(valid) {
+                    if (valid) {
+                        that.saveDisabled = true;
+                        var form = JSON.parse(JSON.stringify(that.form));
+	 				
+												if (form.enterpriseLogo.length>0) {												
+													form.enterpriseLogo.forEach(function (value) {
+														value.url = value.url.replace(new RegExp('^'+ms.contextpath), "");
+													});  
+													form.enterpriseLogo = JSON.stringify(form.enterpriseLogo);
+												} else {
+													form.enterpriseLogo = '';
+												}
+                        ms.http.post(url, form).then(function (res) {
+                            if (res.result) {
+                                that.$notify({
+                                    title: "成功",
+                                    message: "保存成功",
+                                    type: 'success'
+                                });
+                                ms.util.openSystemUrl("/tf/enterprise/index.do",that.form.id > 0);
+                            } else {
+                                that.$notify({
+                                    title: "错误",
+                                    message: res.msg,
+                                    type: 'warning'
+                                });
+                            }
+
+                            that.saveDisabled = false;
+                        }).catch(function (err) {
+                            console.log(err);
+                            that.saveDisabled = false;
+                        });
+                    } else {
+                        return false;
+                    }
+                })
+            },
+
+            //获取当前企业管理
+            get:function(id) {
+                var that = this;
+                this.loading = true
+                ms.http.get(ms.manager + "/tf/enterprise/get.do", {"id":id}).then(function (res) {
+                    that.loading = false
+                    if(res.result&&res.data) {
+                                                                                                  if (res.data.enterpriseLogo) {
+                          res.data.enterpriseLogo = JSON.parse(res.data.enterpriseLogo);
+                          res.data.enterpriseLogo.forEach(function (value) {
+                             if(!value.url.startsWith("http://") && !value.url.startsWith("https://")){
+								value.url = ms.contextpath + value.url;
+							 }
+                          });
+                      } else {
+                          res.data.enterpriseLogo = [];
+                      }
+
+                        that.form = res.data;
+                    }
+                });
+            },
+    //企业类型  列表格式化
+    enterpriseTypeFormat:function(row, column, cellValue, index){
+        var value="";
+
+            if(cellValue){
+            var data = this.enterpriseTypeOptions.find(function(value){
+            return value.dictValue==cellValue;
+            })
+            if(data&&data.dictLabel){
+            value = data.dictLabel;
+            }
+            }
+
+        return value;
+    },
+
+//获取enterpriseType数据源
+    enterpriseTypeOptionsGet:function() {
+    var that = this;
+    ms.http.get(ms.base+'/mdiy/dict/list.do', {dictType:'企业管理-企业类型',pageSize:99999}).then(function (res) {
+    that.enterpriseTypeOptions = res.data.rows;
+    }).catch(function (err) {
+    console.log(err);
+    });
+    },
+           //入驻时间日期格式化
+           enterpriseEntryTimeFormat:function(row, column, cellValue, index){                
+                return ms.util.date.fmt(new Date(row.ENTERPRISE_ENTRY_TIME),'YYYY-MM-DD');                
+            },
+    //经营状态  列表格式化
+    enterpriseOperatingStatusFormat:function(row, column, cellValue, index){
+        var value="";
+
+            if(cellValue){
+            var data = this.enterpriseOperatingStatusOptions.find(function(value){
+            return value.dictValue==cellValue;
+            })
+            if(data&&data.dictLabel){
+            value = data.dictLabel;
+            }
+            }
+
+        return value;
+    },
+
+//获取enterpriseOperatingStatus数据源
+    enterpriseOperatingStatusOptionsGet:function() {
+    var that = this;
+    ms.http.get(ms.base+'/mdiy/dict/list.do', {dictType:'企业管理-经营状态',pageSize:99999}).then(function (res) {
+    that.enterpriseOperatingStatusOptions = res.data.rows;
+    }).catch(function (err) {
+    console.log(err);
+    });
+    },
+        // enterpriseLogo删除
+        enterpriseLogoHandleRemove: function (file, files) {
+        	var index = -1;
+        	index = this.form.enterpriseLogo.findIndex(function (text) {
+        		return text.uid == file.uid;
+        	});
+        	if (index != -1) {
+        		this.form.enterpriseLogo.splice(index, 1);
+        	}
+        },
+        //enterpriseLogo上传超过限制
+        enterpriseLogoHandleExceed: function (files, fileList) {
+        	this.$notify({
+        		title: '失败',
+        		message: '当前最多上传1个文件',
+        		type: 'warning'
+        	});
+        },
+        //enterpriseLogo预览
+        enterpriseLogoHandlePreview: function (file){
+				window.open(file.url);
+        },
+		//enterpriseLogo上传前
+		enterpriseLogoBeforeUpload: function (file) {
+			var type = file.type;
+                if (type) {
+                    var isImage = type.startsWith('image/');
+                    if (!isImage) {
+                        this.$notify({
+                            title: '提示',
+                            message: '请上传图片类型文件',
+                            type: 'warning'
+                        });
+                    }
+                    return isImage;
+                }
+                return false;
+		},
+        //enterpriseLogo上传成功
+        enterpriseLogoSuccess: function (response, file, fileList) {
+        	if (response.result) {
+				if(!response.data.startsWith("http://") && !response.data.startsWith("https://")) {
+					file.url = ms.contextpath + response.data;
+				}else{
+					file.url = response.data;
+				}
+        		this.form.enterpriseLogo.push({
+        			url: response.data,
+        			name: file.name,
+        			uid: file.uid
+        		});
+        	} else {
+				// 移除上传图片
+				var index = fileList.indexOf(file);
+				if (index > -1) {
+					fileList.splice(index, 1);
+				}
+        		this.$notify({
+        			title: '失败',
+        			message: response.msg,
+        			type: 'warning'
+        		});
+        	}
+        },
+        //enterpriseLogo上传失败
+        enterpriseLogoError: function (response, file, fileList) {
+        	response = JSON.parse(response.message);
+        	this.$notify({
+        		title: '失败',
+        		message: response.msg,
+        		type: 'warning'
+        	});
+        },        },
+        created:function() {
+            var that = this;
+           
+               //加载企业类型 数据
+                this.enterpriseTypeOptionsGet();
+           
+               //加载经营状态 数据
+                this.enterpriseOperatingStatusOptionsGet();
+
+            this.form.id = ms.util.getParameter("id");
+            if (this.form.id) {
+                this.get(this.form.id);
+            }
+        }
+    });
+
+</script>
+    <style scoped>
+    </style>

+ 552 - 0
src/main/webapp/WEB-INF/manager/tf/enterprise/index.ftl

@@ -0,0 +1,552 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>企业管理</title>
+        <#include "../../include/head-file.ftl">
+</head>
+<body>
+<div id="index" class="ms-index" v-cloak>
+        <el-header class="ms-header" height="50px">
+        <el-col :span=12>
+            <@shiro.hasPermission name="tf:enterprise:save">
+                <el-button type="primary" class="el-icon-plus" size="default" @click="save()">新增</el-button>
+
+            </@shiro.hasPermission>
+            <@shiro.hasPermission name="tf:enterprise:del">
+                <el-button type="danger" class="el-icon-delete" size="default" @click="del(selectionList)"  :disabled="!selectionList.length">删除</el-button>
+            </@shiro.hasPermission>
+        </el-col>
+        </el-header>
+        <div class="ms-search">
+            <el-row>
+                <el-form :model="form"  ref="searchForm"  label-width="120px" size="default">
+                        <el-row>
+                                        <el-col :span=8>
+            <!--企业名称-->
+
+	        <el-form-item  label="企业名称" prop="enterpriseName">
+	            <el-input
+                        v-model="form.enterpriseName"
+                         :disabled="false"
+                          :readonly="false"
+                          :style="{width:  '100%'}"
+                          :clearable="true"
+                        placeholder="请输入企业名称">
+                </el-input>
+	        </el-form-item>   
+                                        </el-col>
+                                        <el-col :span=8>
+<!--企业类型-->
+
+    <el-form-item  label="企业类型" prop="enterpriseType">
+                <ms-dict  v-model="form.enterpriseType"
+                       :style="{width: '100%'}"
+                       dict-type="企业管理-企业类型"
+                       :filterable="false"
+                       :disabled="false"
+                       :multiple="false" :clearable="true"
+                        placeholder="请选择企业类型">
+                </ms-dict>
+    </el-form-item>
+
+                                        </el-col>
+                                        <el-col :span=8>
+            <!--联系人-->
+
+	        <el-form-item  label="联系人" prop="enterpriseContact">
+	            <el-input
+                        v-model="form.enterpriseContact"
+                         :disabled="false"
+                          :readonly="false"
+                          :style="{width:  '100%'}"
+                          :clearable="true"
+                        placeholder="请输入联系人">
+                </el-input>
+	        </el-form-item>   
+                                        </el-col>
+                        </el-row>
+                        <el-row>
+                                        <el-col :span=8>
+<!--经营状态-->
+
+    <el-form-item  label="经营状态" prop="enterpriseOperatingStatus">
+                <ms-dict  v-model="form.enterpriseOperatingStatus"
+                       :style="{width: '100%'}"
+                       dict-type="企业管理-经营状态"
+                       :filterable="false"
+                       :disabled="false"
+                       :multiple="false" :clearable="true"
+                        placeholder="请选择经营状态">
+                </ms-dict>
+    </el-form-item>
+
+                                        </el-col>
+                                <el-col :span=16 style="display: flex;justify-content: end;padding-right: 10px;">
+                                    <el-button type="primary" class="el-icon-search" size="default" @click="currentPage=1;list(true)">搜索</el-button>
+                                    <el-button @click="rest"  class="el-icon-refresh" size="default">重置</el-button>
+                                    <ms-search ref="search" @search="search" :search-json="searchJson" :search-key="historyKey"></ms-search>
+                                </el-col>
+                        </el-row>
+                </el-form>
+            </el-row>
+        </div>
+    <el-main class="ms-container">
+        <el-table class="ms-table-pagination" v-loading="loading" ref="multipleTable" border :data="dataList" tooltip-effect="dark" @selection-change="handleSelectionChange">
+                <template #empty>
+                    {{emptyText}}
+                </template>
+                    <el-table-column type="selection" width="40" :selectable="isChecked"></el-table-column>
+                    <el-table-column min-width="80" label="LOGO"  align="left">
+                        <template #default="scope">
+                            <template v-if="scope.row.enterpriseLogo&&scope.row.enterpriseLogo !=''&&JSON.parse(scope.row.enterpriseLogo).length">
+                                <div class="block" v-for="src in JSON.parse(scope.row.enterpriseLogo)">
+                                    <el-image
+                                        :src="(!src.url.startsWith('http://') && !src.url.startsWith('https://')) ? ms.contextpath + src.url : src.url"
+                                        :preview-teleported=true
+                                        style="width: 50px;height: 50px;line-height: 50px;font-size: 30px">
+                                      	<template #error>
+                                          	<template class="image-slot">
+                                              	<i class="el-icon-picture-outline"></i>
+                                          	</template>
+                                      	</template>
+                                    </el-image>
+                                </div>
+                            </template>
+                        </template>
+                    </el-table-column>
+                            <el-table-column label="企业名称"   align="left" prop="enterpriseName">
+                            </el-table-column>
+                        <el-table-column label="企业类型"   align="left" prop="enterpriseType" :formatter="enterpriseTypeFormat">
+                        </el-table-column>
+                            <el-table-column label="联系人"   align="left" prop="enterpriseContact">
+                            </el-table-column>
+                            <el-table-column label="联系电话"   align="left" prop="enterpriseTel">
+                            </el-table-column>
+                            <el-table-column label="企业地址"   align="left" prop="enterpriseAddress">
+                            </el-table-column>
+                <el-table-column label="入驻时间"   min-width="200" align="center" prop="enterpriseEntryTime" >
+                    </el-table-column>
+                        <el-table-column label="经营状态"   align="left" prop="enterpriseOperatingStatus" :formatter="enterpriseOperatingStatusFormat">
+                        </el-table-column>
+                    <el-table-column  min-width="180" align="center" label="创建时间" prop="createDate"></el-table-column>
+                    <el-table-column label="操作"  width="180" align="center" fixed="right">
+                            <template #default="scope">
+                                <@shiro.hasPermission name="tf:enterprise:update">
+                                    <el-link type="primary" :underline="false" @click="save(scope.row.id)">编辑</el-link>
+                                </@shiro.hasPermission>
+                            <@shiro.hasPermission name="tf:enterprise:del">
+                                <el-link type="primary" :underline="false" @click="del([scope.row])" v-if="scope.row.del!=3">删除</el-link>
+                            </@shiro.hasPermission>
+                </template>
+                </el-table-column>
+            </el-table>
+                <el-pagination
+                        background
+                        :page-sizes="[10,20,30,40,50,100]"
+                        layout="total, sizes, prev, pager, next, jumper"
+                        :current-page="currentPage"
+                        :page-size="pageSize"
+                        :total="total"
+                        class="ms-pagination"
+                        @current-change='currentChange'
+                        @size-change="sizeChange">
+                </el-pagination>
+    </el-main>
+</div>
+
+</body>
+
+</html>
+<script>
+    var indexVue = new _Vue({
+        el: '#index',
+		provide() {
+			return {
+				searchParent: this //筛选使用
+			};
+		},
+        data:function() {
+            return {
+				        searchJson:[
+    {
+    "isSearch": "true",
+    "action": "and",
+    "field": "ENTERPRISE_NAME",
+    "el": "eq",
+    "model": "enterpriseName",
+    "name": "企业名称",
+    "type": "input"
+    },
+       {
+  "isSearch": "true",
+  "action": "and",
+  "field": "ENTERPRISE_TYPE",
+  "el": "eq",
+  "model": "enterpriseType",
+  "name": "企业类型",
+  "key": "dictValue",
+  "title": "dictLabel",
+  "type": "select",
+  "multiple": "false"
+  
+},    {
+    "isSearch": "true",
+    "action": "and",
+    "field": "ENTERPRISE_CONTACT",
+    "el": "eq",
+    "model": "enterpriseContact",
+    "name": "联系人",
+    "type": "input"
+    },
+    {
+    "isSearch": "",
+    "action": "and",
+    "field": "ENTERPRISE_TEL",
+    "el": "eq",
+    "model": "enterpriseTel",
+    "name": "联系电话",
+    "type": "input"
+    },
+    {
+    "isSearch": "",
+    "action": "and",
+    "field": "ENTERPRISE_ADDRESS",
+    "el": "eq",
+    "model": "enterpriseAddress",
+    "name": "企业地址",
+    "type": "input"
+    },
+    {
+    "action": "and",
+    "field": "ENTERPRISE_ENTRY_TIME",
+    "model": "enterpriseEntryTime",
+    "el": "gt",
+    "fmt": "YYYY-MM-DD",
+    "name": "入驻时间",
+    "type": "date"
+    },
+
+       {
+  "isSearch": "true",
+  "action": "and",
+  "field": "ENTERPRISE_OPERATING_STATUS",
+  "el": "eq",
+  "model": "enterpriseOperatingStatus",
+  "name": "经营状态",
+  "key": "dictValue",
+  "title": "dictLabel",
+  "type": "select",
+  "multiple": "false"
+  
+},    {
+    "action":"and",
+    "field": "ENTERPRISE_LOGO",
+    "el": "empty",
+    "model": "enterpriseLogo",
+    "name": "LOGO",
+    "type": "imgupload"
+    },
+                ],
+                dataList: [], //企业管理列表
+                selectionList:[],//企业管理列表选中
+                total: 0, //总记录数量
+                pageSize: 10, //页面数量
+                currentPage:1, //初始页
+                manager: ms.manager,
+                loading: true,//加载状态
+                emptyText:'',//提示文字
+                // 企业类型
+                enterpriseTypeOptions:[],
+                // 经营状态
+                enterpriseOperatingStatusOptions:[],
+                //搜索表单
+                form:{
+                    sqlWhere:null
+                },
+                //历史记录参数
+                historyKey: "tf_enterprise_history"
+            }
+        },
+        watch:{
+               
+        },
+        methods:{
+            isChecked: function(row) {
+                if(row.del == 3) {
+                    return false;
+                }
+                return true;
+            },
+            //查询列表
+            list: function(isSearch) {
+                var that = this;
+                var data = {}; //搜索参数
+                that.loading = true;
+                var page={
+                    pageNo: that.currentPage,
+                    pageSize : that.pageSize
+                }
+                var form = JSON.parse(JSON.stringify(that.form))
+
+
+                if(isSearch) {
+                    //删除空字符串
+                    for (var key in form){
+                        if(form[key] === undefined || form[key] === null){
+                            delete  form[key]
+                        }
+                    }
+                    form.sqlWhere ? data = Object.assign({}, {sqlWhere: form.sqlWhere}, page) : data = Object.assign({}, form, page)
+                } else {
+                    data = page;
+                }
+                sessionStorage.setItem(that.historyKey,JSON.stringify({form: form, page: page}));
+                ms.http.post(ms.manager+"/tf/enterprise/list.do",data).then(
+                    function(res) {
+                        if (!res.result||res.data.total <= 0) {
+                            that.emptyText ="暂无数据"
+                            that.dataList = [];
+                            that.total = 0;
+                        } else {
+                            that.emptyText = '';
+                            that.total = res.data.total;
+                            that.dataList = res.data.rows;
+                        }
+                        that.loading = false;
+                    }).catch(function(err) {
+                    that.loading = false;
+                    console.log(err);
+                });
+
+            },
+            //企业管理列表选中
+            handleSelectionChange:function(val){
+                this.selectionList = val;
+            },
+            //删除
+            del: function(row){
+                var that = this;
+                that.$confirm("此操作将永久删除所选内容, 是否继续", "提示", {
+                    confirmButtonText: "确认",
+                    cancelButtonText: "取消",
+                    type: 'warning'
+                }).then(function() {
+                    ms.http.post(ms.manager+"/tf/enterprise/delete.do", row.length?row:[row],{
+                        headers: {
+                            'Content-Type': 'application/json'
+                        }
+                    }).then(
+                        function(res){
+                            if (res.result) {
+                                that.$notify({
+                                    title:'成功',
+                                    type: 'success',
+                                    message:"删除成功"
+                                });
+                                //删除成功,刷新列表
+                                that.list();
+                            }else {
+                                that.$notify({
+                                    title: "错误",
+                                    message: res.msg,
+                                    type: 'warning'
+                                });
+                            }
+                        });
+                }).catch(function(err) {
+                    //删除如果用户取消会抛出异常,所以需要catch一下
+                    console.log(err)
+                });
+            },
+            //新增
+            save:function(id){
+                if(id){
+                    ms.util.openSystemUrl("/tf/enterprise/form.do?id="+id);
+                }else {
+                    ms.util.openSystemUrl("/tf/enterprise/form.do");
+                }
+            },
+
+            //pageSize改变时会触发
+            sizeChange:function(pagesize) {
+                this.loading = true;
+                this.pageSize = pagesize;
+                this.list(true);
+            },
+            //currentPage改变时会触发
+            currentChange:function(currentPage) {
+                this.loading = true;
+                this.currentPage = currentPage;
+                this.list(true);
+            },
+            search:function(data){
+                this.form.sqlWhere = JSON.stringify(data);
+                this.list(true);
+            },
+            //重置表单
+            rest:function(){
+                this.currentPage = 1;
+                this.form = {
+                    sqlWhere:null
+                };
+                this.$refs.searchForm.resetFields();
+                this.list(true);
+            },
+    //企业类型  列表格式化
+    enterpriseTypeFormat:function(row, column, cellValue, index){
+        var value="";
+
+            if(cellValue){
+            var data = this.enterpriseTypeOptions.find(function(value){
+            return value.dictValue==cellValue;
+            })
+            if(data&&data.dictLabel){
+            value = data.dictLabel;
+            }
+            }
+
+        return value;
+    },
+
+//获取enterpriseType数据源
+    enterpriseTypeOptionsGet:function() {
+    var that = this;
+    ms.http.get(ms.base+'/mdiy/dict/list.do', {dictType:'企业管理-企业类型',pageSize:99999}).then(function (res) {
+    that.enterpriseTypeOptions = res.data.rows;
+    }).catch(function (err) {
+    console.log(err);
+    });
+    },
+           //入驻时间日期格式化
+           enterpriseEntryTimeFormat:function(row, column, cellValue, index){                
+                return ms.util.date.fmt(new Date(row.ENTERPRISE_ENTRY_TIME),'YYYY-MM-DD');                
+            },
+    //经营状态  列表格式化
+    enterpriseOperatingStatusFormat:function(row, column, cellValue, index){
+        var value="";
+
+            if(cellValue){
+            var data = this.enterpriseOperatingStatusOptions.find(function(value){
+            return value.dictValue==cellValue;
+            })
+            if(data&&data.dictLabel){
+            value = data.dictLabel;
+            }
+            }
+
+        return value;
+    },
+
+//获取enterpriseOperatingStatus数据源
+    enterpriseOperatingStatusOptionsGet:function() {
+    var that = this;
+    ms.http.get(ms.base+'/mdiy/dict/list.do', {dictType:'企业管理-经营状态',pageSize:99999}).then(function (res) {
+    that.enterpriseOperatingStatusOptions = res.data.rows;
+    }).catch(function (err) {
+    console.log(err);
+    });
+    },
+        // enterpriseLogo删除
+        enterpriseLogoHandleRemove: function (file, files) {
+        	var index = -1;
+        	index = this.form.enterpriseLogo.findIndex(function (text) {
+        		return text.uid == file.uid;
+        	});
+        	if (index != -1) {
+        		this.form.enterpriseLogo.splice(index, 1);
+        	}
+        },
+        //enterpriseLogo上传超过限制
+        enterpriseLogoHandleExceed: function (files, fileList) {
+        	this.$notify({
+        		title: '失败',
+        		message: '当前最多上传1个文件',
+        		type: 'warning'
+        	});
+        },
+        //enterpriseLogo预览
+        enterpriseLogoHandlePreview: function (file){
+				window.open(file.url);
+        },
+		//enterpriseLogo上传前
+		enterpriseLogoBeforeUpload: function (file) {
+			var type = file.type;
+                if (type) {
+                    var isImage = type.startsWith('image/');
+                    if (!isImage) {
+                        this.$notify({
+                            title: '提示',
+                            message: '请上传图片类型文件',
+                            type: 'warning'
+                        });
+                    }
+                    return isImage;
+                }
+                return false;
+		},
+        //enterpriseLogo上传成功
+        enterpriseLogoSuccess: function (response, file, fileList) {
+        	if (response.result) {
+				if(!response.data.startsWith("http://") && !response.data.startsWith("https://")) {
+					file.url = ms.contextpath + response.data;
+				}else{
+					file.url = response.data;
+				}
+        		this.form.enterpriseLogo.push({
+        			url: response.data,
+        			name: file.name,
+        			uid: file.uid
+        		});
+        	} else {
+				// 移除上传图片
+				var index = fileList.indexOf(file);
+				if (index > -1) {
+					fileList.splice(index, 1);
+				}
+        		this.$notify({
+        			title: '失败',
+        			message: response.msg,
+        			type: 'warning'
+        		});
+        	}
+        },
+        //enterpriseLogo上传失败
+        enterpriseLogoError: function (response, file, fileList) {
+        	response = JSON.parse(response.message);
+        	this.$notify({
+        		title: '失败',
+        		message: response.msg,
+        		type: 'warning'
+        	});
+        },
+        },
+        mounted:function(){
+            var that = this;
+
+            //如果存在历史参数,恢复页面结果
+            if(sessionStorage.getItem(this.historyKey) && ms.util.getParameter("isBack") == 'true') {
+                var _history = JSON.parse(sessionStorage.getItem(this.historyKey))
+                this.form = _history.form;
+                this.total = parseInt(_history.total);
+                this.currentPage = parseInt(_history.page.pageNo);
+                this.pageSize = parseInt(_history.page.pageSize);
+            }
+
+            this.list(true);
+        },
+		created:function(){
+			var that = this;
+           
+               //加载企业类型 数据
+                this.enterpriseTypeOptionsGet();
+           
+               //加载经营状态 数据
+                this.enterpriseOperatingStatusOptionsGet();
+        }
+    })
+</script>
+    <style scoped>
+        #index .ms-container {
+            height: calc(100vh - 141px);
+        }
+    </style>

+ 24 - 0
src/main/webapp/static/locale/lang/announcement/en_US.js

@@ -0,0 +1,24 @@
+var en_US ={
+    form:{
+                announcementTitle:{
+            text:'公告标题',
+            placeholder:'请输入公告标题',
+            help:'',
+        },
+        gridGkdtm:{
+            text:'栅格布局',
+            placeholder:'',
+            help:'',
+        },
+        announcementContent:{
+            text:'公告内容',
+            placeholder:'',
+            help:'',
+        },
+        announcementImg:{
+            text:'封面图',
+            placeholder:'',
+            help:'',
+        },
+    }
+}

+ 25 - 0
src/main/webapp/static/locale/lang/announcement/zh_CN.js

@@ -0,0 +1,25 @@
+
+var zh_CN ={
+    form:{
+                announcementTitle:{
+            text:'公告标题',
+            placeholder:'请输入公告标题',
+            help:'',
+        },
+        gridGkdtm:{
+            text:'栅格布局',
+            placeholder:'',
+            help:'',
+        },
+        announcementContent:{
+            text:'公告内容',
+            placeholder:'',
+            help:'',
+        },
+        announcementImg:{
+            text:'封面图',
+            placeholder:'',
+            help:'',
+        },
+    }
+}

+ 34 - 0
src/main/webapp/static/locale/lang/enterprise/en_US.js

@@ -0,0 +1,34 @@
+var en_US ={
+    form:{
+                gridAqcdh:{
+            text:'栅格布局',
+            placeholder:'',
+            help:'',
+        },
+        gridZztst:{
+            text:'栅格布局',
+            placeholder:'',
+            help:'',
+        },
+        enterpriseAddress:{
+            text:'企业地址',
+            placeholder:'请输入企业地址',
+            help:'',
+        },
+        gridGkdtm:{
+            text:'栅格布局',
+            placeholder:'',
+            help:'',
+        },
+        enterpriseIntroduction:{
+            text:'企业简介',
+            placeholder:'请输入企业简介',
+            help:'',
+        },
+        enterpriseLogo:{
+            text:'LOGO',
+            placeholder:'',
+            help:'',
+        },
+    }
+}

+ 35 - 0
src/main/webapp/static/locale/lang/enterprise/zh_CN.js

@@ -0,0 +1,35 @@
+
+var zh_CN ={
+    form:{
+                gridAqcdh:{
+            text:'栅格布局',
+            placeholder:'',
+            help:'',
+        },
+        gridZztst:{
+            text:'栅格布局',
+            placeholder:'',
+            help:'',
+        },
+        enterpriseAddress:{
+            text:'企业地址',
+            placeholder:'请输入企业地址',
+            help:'',
+        },
+        gridGkdtm:{
+            text:'栅格布局',
+            placeholder:'',
+            help:'',
+        },
+        enterpriseIntroduction:{
+            text:'企业简介',
+            placeholder:'请输入企业简介',
+            help:'',
+        },
+        enterpriseLogo:{
+            text:'LOGO',
+            placeholder:'',
+            help:'',
+        },
+    }
+}

部分文件因为文件数量过多而无法显示