소스 검색

轮播,景点,文章,栏目

lchao 5 달 전
부모
커밋
d294891876
58개의 변경된 파일4276개의 추가작업 그리고 547개의 파일을 삭제
  1. 1 1
      pom.xml
  2. 91 0
      zhjq-business/src/main/java/com/zhjq/controller/ZhjqAppCarouselController.java
  3. 99 0
      zhjq-business/src/main/java/com/zhjq/controller/ZhjqArticleController.java
  4. 115 0
      zhjq-business/src/main/java/com/zhjq/controller/ZhjqColumnController.java
  5. 91 0
      zhjq-business/src/main/java/com/zhjq/controller/ZhjqSceneryController.java
  6. 115 0
      zhjq-business/src/main/java/com/zhjq/domain/ZhjqAppCarousel.java
  7. 160 0
      zhjq-business/src/main/java/com/zhjq/domain/ZhjqArticle.java
  8. 145 0
      zhjq-business/src/main/java/com/zhjq/domain/ZhjqScenery.java
  9. 1 0
      zhjq-business/src/main/java/com/zhjq/domain/ZhjqVoice.java
  10. 62 0
      zhjq-business/src/main/java/com/zhjq/mapper/ZhjqAppCarouselMapper.java
  11. 62 0
      zhjq-business/src/main/java/com/zhjq/mapper/ZhjqArticleMapper.java
  12. 64 0
      zhjq-business/src/main/java/com/zhjq/mapper/ZhjqColumnMapper.java
  13. 62 0
      zhjq-business/src/main/java/com/zhjq/mapper/ZhjqSceneryMapper.java
  14. 62 0
      zhjq-business/src/main/java/com/zhjq/service/IZhjqAppCarouselService.java
  15. 62 0
      zhjq-business/src/main/java/com/zhjq/service/IZhjqArticleService.java
  16. 73 0
      zhjq-business/src/main/java/com/zhjq/service/IZhjqColumnService.java
  17. 62 0
      zhjq-business/src/main/java/com/zhjq/service/IZhjqSceneryService.java
  18. 100 0
      zhjq-business/src/main/java/com/zhjq/service/imp/ZhjqAppCarouselServiceImpl.java
  19. 89 0
      zhjq-business/src/main/java/com/zhjq/service/imp/ZhjqArticleServiceImpl.java
  20. 207 0
      zhjq-business/src/main/java/com/zhjq/service/imp/ZhjqColumnServiceImpl.java
  21. 91 0
      zhjq-business/src/main/java/com/zhjq/service/imp/ZhjqSceneryServiceImpl.java
  22. 8 6
      zhjq-business/src/main/java/com/zhjq/utils/QRCodeUtils.java
  23. 155 0
      zhjq-business/src/main/resources/mapper/ZhjqAppCarouselMapper.xml
  24. 138 0
      zhjq-business/src/main/resources/mapper/ZhjqArticleMapper.xml
  25. 146 0
      zhjq-business/src/main/resources/mapper/ZhjqColumnMapper.xml
  26. 179 0
      zhjq-business/src/main/resources/mapper/ZhjqSceneryMapper.xml
  27. 7 0
      zhjq-common/src/main/java/com/zhjq/common/core/domain/TreeSelect.java
  28. 112 0
      zhjq-common/src/main/java/com/zhjq/common/core/domain/entity/ZhjqColumn.java
  29. 1 1
      zhjq-common/src/main/java/com/zhjq/common/utils/file/MimeTypeUtils.java
  30. 59 59
      zhjq-generator/src/main/resources/vm/java/domain.java.vm
  31. 1 1
      zhjq-generator/src/main/resources/vm/java/mapper.java.vm
  32. 1 1
      zhjq-generator/src/main/resources/vm/java/service.java.vm
  33. 47 47
      zhjq-generator/src/main/resources/vm/java/sub-domain.java.vm
  34. 10 10
      zhjq-generator/src/main/resources/vm/vue/index-tree.vue.vm
  35. 248 248
      zhjq-generator/src/main/resources/vm/vue/index.vue.vm
  36. 10 10
      zhjq-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm
  37. 93 93
      zhjq-generator/src/main/resources/vm/vue/v3/index.vue.vm
  38. 44 0
      zhjq-ui/src/api/system/article.js
  39. 61 0
      zhjq-ui/src/api/system/column.js
  40. 44 0
      zhjq-ui/src/api/system/scenery.js
  41. 28 28
      zhjq-ui/src/api/system/voice.js
  42. 1 1
      zhjq-ui/src/components/Crontab/day.vue
  43. 1 1
      zhjq-ui/src/components/Crontab/hour.vue
  44. 9 9
      zhjq-ui/src/components/Crontab/index.vue
  45. 1 1
      zhjq-ui/src/components/Crontab/min.vue
  46. 1 1
      zhjq-ui/src/components/Crontab/month.vue
  47. 1 1
      zhjq-ui/src/components/Crontab/result.vue
  48. 5 5
      zhjq-ui/src/components/Crontab/week.vue
  49. 2 2
      zhjq-ui/src/components/FileUpload/index.vue
  50. 4 2
      zhjq-ui/src/layout/components/Sidebar/Logo.vue
  51. 2 4
      zhjq-ui/src/views/index.vue
  52. 2 1
      zhjq-ui/src/views/monitor/logininfor/index.vue
  53. 6 3
      zhjq-ui/src/views/monitor/operlog/index.vue
  54. 348 0
      zhjq-ui/src/views/system/article/index.vue
  55. 383 0
      zhjq-ui/src/views/system/column/index.vue
  56. 282 0
      zhjq-ui/src/views/system/scenery/index.vue
  57. 2 1
      zhjq-ui/src/views/system/user/authRole.vue
  58. 20 10
      zhjq-ui/src/views/system/user/index.vue

+ 1 - 1
pom.xml

@@ -9,7 +9,7 @@
     <version>3.8.8</version>
 
     <name>zhjq</name>
-    <url> </url>
+    <url></url>
     <description>智慧景区</description>
 
     <properties>

+ 91 - 0
zhjq-business/src/main/java/com/zhjq/controller/ZhjqAppCarouselController.java

@@ -0,0 +1,91 @@
+package com.zhjq.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhjq.common.annotation.Log;
+import com.zhjq.common.core.controller.BaseController;
+import com.zhjq.common.core.domain.AjaxResult;
+import com.zhjq.common.enums.BusinessType;
+import com.zhjq.domain.ZhjqAppCarousel;
+import com.zhjq.service.IZhjqAppCarouselService;
+import com.zhjq.common.utils.poi.ExcelUtil;
+import com.zhjq.common.core.page.TableDataInfo;
+
+/**
+ * 轮播管理Controller
+ *
+ * @author lc
+ * @date 2024-12-16
+ */
+@RestController
+@RequestMapping("/app/carousel")
+public class ZhjqAppCarouselController extends BaseController {
+    @Autowired
+    private IZhjqAppCarouselService zhjqAppCarouselService;
+
+    /**
+     * 查询轮播管理列表
+     */
+    @GetMapping("/list")
+    public TableDataInfo list(ZhjqAppCarousel zhjqAppCarousel) {
+        startPage();
+        List<ZhjqAppCarousel> list = zhjqAppCarouselService.selectZhjqAppCarouselList(zhjqAppCarousel);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出轮播管理列表
+     */
+    @Log(title = "轮播管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ZhjqAppCarousel zhjqAppCarousel) {
+        List<ZhjqAppCarousel> list = zhjqAppCarouselService.selectZhjqAppCarouselList(zhjqAppCarousel);
+        ExcelUtil<ZhjqAppCarousel> util = new ExcelUtil<ZhjqAppCarousel>(ZhjqAppCarousel.class);
+        util.exportExcel(response, list, "轮播管理数据");
+    }
+
+    /**
+     * 获取轮播管理详细信息
+     */
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return success(zhjqAppCarouselService.selectZhjqAppCarouselById(id));
+    }
+
+    /**
+     * 新增轮播管理
+     */
+    @Log(title = "轮播管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ZhjqAppCarousel zhjqAppCarousel) {
+        return toAjax(zhjqAppCarouselService.insertZhjqAppCarousel(zhjqAppCarousel));
+    }
+
+    /**
+     * 修改轮播管理
+     */
+    @Log(title = "轮播管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody ZhjqAppCarousel zhjqAppCarousel) {
+        return toAjax(zhjqAppCarouselService.updateZhjqAppCarousel(zhjqAppCarousel));
+    }
+
+    /**
+     * 删除轮播管理
+     */
+    @Log(title = "轮播管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(zhjqAppCarouselService.deleteZhjqAppCarouselByIds(ids));
+    }
+}

+ 99 - 0
zhjq-business/src/main/java/com/zhjq/controller/ZhjqArticleController.java

@@ -0,0 +1,99 @@
+package com.zhjq.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhjq.common.annotation.Log;
+import com.zhjq.common.core.controller.BaseController;
+import com.zhjq.common.core.domain.AjaxResult;
+import com.zhjq.common.enums.BusinessType;
+import com.zhjq.domain.ZhjqArticle;
+import com.zhjq.service.IZhjqArticleService;
+import com.zhjq.common.utils.poi.ExcelUtil;
+import com.zhjq.common.core.page.TableDataInfo;
+
+/**
+ * 文章管理Controller
+ *
+ * @author lc
+ * @date 2024-12-16
+ */
+@RestController
+@RequestMapping("/app/article")
+public class ZhjqArticleController extends BaseController {
+    @Autowired
+    private IZhjqArticleService zhjqArticleService;
+
+    /**
+     * 查询文章管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:article:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(ZhjqArticle zhjqArticle) {
+        startPage();
+        List<ZhjqArticle> list = zhjqArticleService.selectZhjqArticleList(zhjqArticle);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出文章管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:article:export')")
+    @Log(title = "文章管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ZhjqArticle zhjqArticle) {
+        List<ZhjqArticle> list = zhjqArticleService.selectZhjqArticleList(zhjqArticle);
+        ExcelUtil<ZhjqArticle> util = new ExcelUtil<ZhjqArticle>(ZhjqArticle.class);
+        util.exportExcel(response, list, "文章管理数据");
+    }
+
+    /**
+     * 获取文章管理详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:article:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return success(zhjqArticleService.selectZhjqArticleById(id));
+    }
+
+    /**
+     * 新增文章管理
+     */
+    @PreAuthorize("@ss.hasPermi('system:article:add')")
+    @Log(title = "文章管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ZhjqArticle zhjqArticle) {
+        return toAjax(zhjqArticleService.insertZhjqArticle(zhjqArticle));
+    }
+
+    /**
+     * 修改文章管理
+     */
+    @PreAuthorize("@ss.hasPermi('system:article:edit')")
+    @Log(title = "文章管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody ZhjqArticle zhjqArticle) {
+        return toAjax(zhjqArticleService.updateZhjqArticle(zhjqArticle));
+    }
+
+    /**
+     * 删除文章管理
+     */
+    @PreAuthorize("@ss.hasPermi('system:article:remove')")
+    @Log(title = "文章管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(zhjqArticleService.deleteZhjqArticleByIds(ids));
+    }
+
+}

+ 115 - 0
zhjq-business/src/main/java/com/zhjq/controller/ZhjqColumnController.java

@@ -0,0 +1,115 @@
+package com.zhjq.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.zhjq.common.utils.SecurityUtils;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhjq.common.annotation.Log;
+import com.zhjq.common.core.controller.BaseController;
+import com.zhjq.common.core.domain.AjaxResult;
+import com.zhjq.common.enums.BusinessType;
+import com.zhjq.common.core.domain.entity.ZhjqColumn;
+import com.zhjq.service.IZhjqColumnService;
+import com.zhjq.common.utils.poi.ExcelUtil;
+import com.zhjq.common.core.page.TableDataInfo;
+
+/**
+ * 栏目管理Controller
+ *
+ * @author lc
+ * @date 2024-12-16
+ */
+@RestController
+@RequestMapping("/app/column")
+public class ZhjqColumnController extends BaseController {
+    @Autowired
+    private IZhjqColumnService zhjqColumnService;
+
+    /**
+     * 查询栏目管理列表
+     */
+    @GetMapping("/list")
+    public TableDataInfo list(ZhjqColumn zhjqColumn) {
+        startPage();
+        List<ZhjqColumn> list = zhjqColumnService.selectZhjqColumnList(zhjqColumn);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询栏目管理列表
+     */
+    @GetMapping("/columnAllList")
+    public AjaxResult columnAllList() {
+        ZhjqColumn zhjqColumn = new ZhjqColumn();
+        return success(zhjqColumnService.selectZhjqColumnAllList(zhjqColumn));
+    }
+
+    /**
+     * 导出栏目管理列表
+     */
+    @Log(title = "栏目管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ZhjqColumn zhjqColumn) {
+        List<ZhjqColumn> list = zhjqColumnService.selectZhjqColumnList(zhjqColumn);
+        ExcelUtil<ZhjqColumn> util = new ExcelUtil<ZhjqColumn>(ZhjqColumn.class);
+        util.exportExcel(response, list, "栏目管理数据");
+    }
+
+    /**
+     * 获取栏目管理详细信息
+     */
+    @GetMapping(value = "/{columnId}")
+    public AjaxResult getInfo(@PathVariable("columnId") Long columnId) {
+        return success(zhjqColumnService.selectZhjqColumnByColumnId(columnId));
+    }
+
+    /**
+     * 新增栏目管理
+     */
+    @Log(title = "栏目管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ZhjqColumn zhjqColumn) {
+        return toAjax(zhjqColumnService.insertZhjqColumn(zhjqColumn));
+    }
+
+    /**
+     * 修改栏目管理
+     */
+    @Log(title = "栏目管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody ZhjqColumn zhjqColumn) {
+        return toAjax(zhjqColumnService.updateZhjqColumn(zhjqColumn));
+    }
+
+    /**
+     * 删除栏目管理
+     */
+    @Log(title = "栏目管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{columnIds}")
+    public AjaxResult remove(@PathVariable Long[] columnIds) {
+        return toAjax(zhjqColumnService.deleteZhjqColumnByColumnIds(columnIds));
+    }
+
+    /**
+     * 获取菜单下拉树列表
+     */
+    @ApiOperation(value = "获取菜单下拉树列表", notes = "获取菜单下拉树列表")
+    @GetMapping("/treeselect")
+    public AjaxResult treeselect(ZhjqColumn zhjqColumn) {
+        Long userId = SecurityUtils.getUserId();
+        List<ZhjqColumn> menus = zhjqColumnService.selectZhjqColumnTreeList(zhjqColumn, userId);
+        return AjaxResult.success(zhjqColumnService.buildMenuTreeSelect(menus));
+    }
+
+
+}

+ 91 - 0
zhjq-business/src/main/java/com/zhjq/controller/ZhjqSceneryController.java

@@ -0,0 +1,91 @@
+package com.zhjq.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhjq.common.annotation.Log;
+import com.zhjq.common.core.controller.BaseController;
+import com.zhjq.common.core.domain.AjaxResult;
+import com.zhjq.common.enums.BusinessType;
+import com.zhjq.domain.ZhjqScenery;
+import com.zhjq.service.IZhjqSceneryService;
+import com.zhjq.common.utils.poi.ExcelUtil;
+import com.zhjq.common.core.page.TableDataInfo;
+
+/**
+ * 景点管理Controller
+ *
+ * @author lc
+ * @date 2024-12-16
+ */
+@RestController
+@RequestMapping("/app/scenery")
+public class ZhjqSceneryController extends BaseController {
+    @Autowired
+    private IZhjqSceneryService zhjqSceneryService;
+
+    /**
+     * 查询景点管理列表
+     */
+    @GetMapping("/list")
+    public TableDataInfo list(ZhjqScenery zhjqScenery) {
+        startPage();
+        List<ZhjqScenery> list = zhjqSceneryService.selectZhjqSceneryList(zhjqScenery);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出景点管理列表
+     */
+    @Log(title = "景点管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ZhjqScenery zhjqScenery) {
+        List<ZhjqScenery> list = zhjqSceneryService.selectZhjqSceneryList(zhjqScenery);
+        ExcelUtil<ZhjqScenery> util = new ExcelUtil<ZhjqScenery>(ZhjqScenery.class);
+        util.exportExcel(response, list, "景点管理数据");
+    }
+
+    /**
+     * 获取景点管理详细信息
+     */
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return success(zhjqSceneryService.selectZhjqSceneryById(id));
+    }
+
+    /**
+     * 新增景点管理
+     */
+    @Log(title = "景点管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ZhjqScenery zhjqScenery) {
+        return toAjax(zhjqSceneryService.insertZhjqScenery(zhjqScenery));
+    }
+
+    /**
+     * 修改景点管理
+     */
+    @Log(title = "景点管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody ZhjqScenery zhjqScenery) {
+        return toAjax(zhjqSceneryService.updateZhjqScenery(zhjqScenery));
+    }
+
+    /**
+     * 删除景点管理
+     */
+    @Log(title = "景点管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(zhjqSceneryService.deleteZhjqSceneryByIds(ids));
+    }
+}

+ 115 - 0
zhjq-business/src/main/java/com/zhjq/domain/ZhjqAppCarousel.java

@@ -0,0 +1,115 @@
+package com.zhjq.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.zhjq.common.annotation.Excel;
+import com.zhjq.common.core.domain.BaseEntity;
+
+/**
+ * 轮播管理对象 zhjq_app_carousel
+ *
+ * @author lc
+ * @date 2024-12-16
+ */
+public class ZhjqAppCarousel extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    private Long id;
+
+    /**
+     * 名称
+     */
+    @Excel(name = "名称")
+    private String appName;
+
+    /**
+     * 图片/视频地址
+     */
+    @Excel(name = "图片/视频地址")
+    private String appUrl;
+
+    /**
+     * 创建人姓名
+     */
+    @Excel(name = "创建人姓名")
+    private String createName;
+
+    /**
+     * 更新人姓名
+     */
+    @Excel(name = "更新人姓名")
+    private String updateName;
+
+    /**
+     * 数据状态(1-可用 2-不可用 )
+     */
+    @Excel(name = "数据状态(1-可用 2-不可用 )")
+    private String dataStatus;
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setAppName(String appName) {
+        this.appName = appName;
+    }
+
+    public String getAppName() {
+        return appName;
+    }
+
+    public void setAppUrl(String appUrl) {
+        this.appUrl = appUrl;
+    }
+
+    public String getAppUrl() {
+        return appUrl;
+    }
+
+    public void setCreateName(String createName) {
+        this.createName = createName;
+    }
+
+    public String getCreateName() {
+        return createName;
+    }
+
+    public void setUpdateName(String updateName) {
+        this.updateName = updateName;
+    }
+
+    public String getUpdateName() {
+        return updateName;
+    }
+
+    public void setDataStatus(String dataStatus) {
+        this.dataStatus = dataStatus;
+    }
+
+    public String getDataStatus() {
+        return dataStatus;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("id", getId())
+                .append("appName", getAppName())
+                .append("appUrl", getAppUrl())
+                .append("createBy", getCreateBy())
+                .append("createName", getCreateName())
+                .append("createTime", getCreateTime())
+                .append("updateBy", getUpdateBy())
+                .append("updateName", getUpdateName())
+                .append("updateTime", getUpdateTime())
+                .append("dataStatus", getDataStatus())
+                .toString();
+    }
+}

+ 160 - 0
zhjq-business/src/main/java/com/zhjq/domain/ZhjqArticle.java

@@ -0,0 +1,160 @@
+package com.zhjq.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.zhjq.common.annotation.Excel;
+import com.zhjq.common.core.domain.BaseEntity;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 文章管理对象 zhjq_article
+ *
+ * @author lc
+ * @date 2024-12-16
+ */
+public class ZhjqArticle extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    private Long id;
+
+    /**
+     * 标题
+     */
+    @Excel(name = "标题")
+    private String journalismName;
+
+    /**
+     * 内容
+     */
+    @Excel(name = "内容")
+    private String journalismContent;
+
+    /**
+     * 排序
+     */
+    @Excel(name = "排序")
+    private String sort;
+
+    /**
+     * 栏目
+     */
+    @Excel(name = "栏目")
+    private Long columnId;
+
+    /**
+     * 作者
+     */
+    @Excel(name = "作者")
+    private String author;
+
+
+    /**
+     * 发布时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date releaseTime;
+
+    public Date getReleaseTime() {
+        return releaseTime;
+    }
+
+    public void setReleaseTime(Date releaseTime) {
+        this.releaseTime = releaseTime;
+    }
+
+    public String getColumnName() {
+        return columnName;
+    }
+
+    public void setColumnName(String columnName) {
+        this.columnName = columnName;
+    }
+
+    public List<Long> getColumnList() {
+        return columnList;
+    }
+
+    public void setColumnList(List<Long> columnList) {
+        this.columnList = columnList;
+    }
+
+    /**
+     * 票种
+     */
+    private String columnName;
+
+    /**
+     * 票种集合
+     */
+    private List<Long> columnList;
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setJournalismName(String journalismName) {
+        this.journalismName = journalismName;
+    }
+
+    public String getJournalismName() {
+        return journalismName;
+    }
+
+    public void setJournalismContent(String journalismContent) {
+        this.journalismContent = journalismContent;
+    }
+
+    public String getJournalismContent() {
+        return journalismContent;
+    }
+
+    public void setSort(String sort) {
+        this.sort = sort;
+    }
+
+    public String getSort() {
+        return sort;
+    }
+
+    public void setColumnId(Long columnId) {
+        this.columnId = columnId;
+    }
+
+    public Long getColumnId() {
+        return columnId;
+    }
+
+    public void setAuthor(String author) {
+        this.author = author;
+    }
+
+    public String getAuthor() {
+        return author;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("id", getId())
+                .append("journalismName", getJournalismName())
+                .append("journalismContent", getJournalismContent())
+                .append("columnName", getColumnName())
+                .append("columnList", getColumnList())
+                .append("createTime", getCreateTime())
+                .append("sort", getSort())
+                .append("columnId", getColumnId())
+                .append("author", getAuthor())
+                .append("releaseTime", getReleaseTime())
+                .toString();
+    }
+}

+ 145 - 0
zhjq-business/src/main/java/com/zhjq/domain/ZhjqScenery.java

@@ -0,0 +1,145 @@
+package com.zhjq.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.zhjq.common.annotation.Excel;
+import com.zhjq.common.core.domain.BaseEntity;
+
+/**
+ * 景点管理对象 zhjq_scenery
+ *
+ * @author lc
+ * @date 2024-12-16
+ */
+public class ZhjqScenery extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    private Long id;
+
+    /**
+     * 景点名称
+     */
+    @Excel(name = "景点名称")
+    private String sceneryName;
+
+    /**
+     * 景点图片
+     */
+    @Excel(name = "景点图片")
+    private String sceneryUrl;
+
+    /**
+     * 景点内容
+     */
+    @Excel(name = "景点内容")
+    private String content;
+
+    /**
+     * 创建人姓名
+     */
+    @Excel(name = "创建人姓名")
+    private String createName;
+
+    /**
+     * 更新人姓名
+     */
+    @Excel(name = "更新人姓名")
+    private String updateName;
+
+    /**
+     * 经度
+     */
+    @Excel(name = "经度")
+    private String longitude;
+
+    /**
+     * 纬度
+     */
+    @Excel(name = "纬度")
+    private String latitude;
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setSceneryName(String sceneryName) {
+        this.sceneryName = sceneryName;
+    }
+
+    public String getSceneryName() {
+        return sceneryName;
+    }
+
+    public void setSceneryUrl(String sceneryUrl) {
+        this.sceneryUrl = sceneryUrl;
+    }
+
+    public String getSceneryUrl() {
+        return sceneryUrl;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setCreateName(String createName) {
+        this.createName = createName;
+    }
+
+    public String getCreateName() {
+        return createName;
+    }
+
+    public void setUpdateName(String updateName) {
+        this.updateName = updateName;
+    }
+
+    public String getUpdateName() {
+        return updateName;
+    }
+
+    public void setLongitude(String longitude) {
+        this.longitude = longitude;
+    }
+
+    public String getLongitude() {
+        return longitude;
+    }
+
+    public void setLatitude(String latitude) {
+        this.latitude = latitude;
+    }
+
+    public String getLatitude() {
+        return latitude;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("id", getId())
+                .append("sceneryName", getSceneryName())
+                .append("sceneryUrl", getSceneryUrl())
+                .append("content", getContent())
+                .append("createBy", getCreateBy())
+                .append("createName", getCreateName())
+                .append("createTime", getCreateTime())
+                .append("updateBy", getUpdateBy())
+                .append("updateName", getUpdateName())
+                .append("updateTime", getUpdateTime())
+                .append("longitude", getLongitude())
+                .append("latitude", getLatitude())
+                .toString();
+    }
+}

+ 1 - 0
zhjq-business/src/main/java/com/zhjq/domain/ZhjqVoice.java

@@ -123,6 +123,7 @@ public class ZhjqVoice extends BaseEntity {
     public void setSort(int sort) {
         this.sort = sort;
     }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)

+ 62 - 0
zhjq-business/src/main/java/com/zhjq/mapper/ZhjqAppCarouselMapper.java

@@ -0,0 +1,62 @@
+package com.zhjq.mapper;
+
+import com.zhjq.domain.ZhjqAppCarousel;
+
+import java.util.List;
+
+
+/**
+ * 轮播管理Mapper接口
+ *
+ * @author lc
+ * @date 2024-12-16
+ */
+public interface ZhjqAppCarouselMapper {
+    /**
+     * 查询轮播管理
+     *
+     * @param id 轮播管理主键
+     * @return 轮播管理
+     */
+    public ZhjqAppCarousel selectZhjqAppCarouselById(Long id);
+
+    /**
+     * 查询轮播管理列表
+     *
+     * @param zhjqAppCarousel 轮播管理
+     * @return 轮播管理集合
+     */
+    public List<ZhjqAppCarousel> selectZhjqAppCarouselList(ZhjqAppCarousel zhjqAppCarousel);
+
+    /**
+     * 新增轮播管理
+     *
+     * @param zhjqAppCarousel 轮播管理
+     * @return 结果
+     */
+    public int insertZhjqAppCarousel(ZhjqAppCarousel zhjqAppCarousel);
+
+    /**
+     * 修改轮播管理
+     *
+     * @param zhjqAppCarousel 轮播管理
+     * @return 结果
+     */
+    public int updateZhjqAppCarousel(ZhjqAppCarousel zhjqAppCarousel);
+
+    /**
+     * 删除轮播管理
+     *
+     * @param id 轮播管理主键
+     * @return 结果
+     */
+    public int deleteZhjqAppCarouselById(Long id);
+
+    /**
+     * 批量删除轮播管理
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteZhjqAppCarouselByIds(Long[] ids);
+}

+ 62 - 0
zhjq-business/src/main/java/com/zhjq/mapper/ZhjqArticleMapper.java

@@ -0,0 +1,62 @@
+package com.zhjq.mapper;
+
+import com.zhjq.domain.ZhjqArticle;
+
+import java.util.List;
+
+
+/**
+ * 文章管理Mapper接口
+ *
+ * @author lc
+ * @date 2024-12-16
+ */
+public interface ZhjqArticleMapper {
+    /**
+     * 查询文章管理
+     *
+     * @param id 文章管理主键
+     * @return 文章管理
+     */
+    public ZhjqArticle selectZhjqArticleById(Long id);
+
+    /**
+     * 查询文章管理列表
+     *
+     * @param zhjqArticle 文章管理
+     * @return 文章管理集合
+     */
+    public List<ZhjqArticle> selectZhjqArticleList(ZhjqArticle zhjqArticle);
+
+    /**
+     * 新增文章管理
+     *
+     * @param zhjqArticle 文章管理
+     * @return 结果
+     */
+    public int insertZhjqArticle(ZhjqArticle zhjqArticle);
+
+    /**
+     * 修改文章管理
+     *
+     * @param zhjqArticle 文章管理
+     * @return 结果
+     */
+    public int updateZhjqArticle(ZhjqArticle zhjqArticle);
+
+    /**
+     * 删除文章管理
+     *
+     * @param id 文章管理主键
+     * @return 结果
+     */
+    public int deleteZhjqArticleById(Long id);
+
+    /**
+     * 批量删除文章管理
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteZhjqArticleByIds(Long[] ids);
+}

+ 64 - 0
zhjq-business/src/main/java/com/zhjq/mapper/ZhjqColumnMapper.java

@@ -0,0 +1,64 @@
+package com.zhjq.mapper;
+
+import java.util.List;
+
+import com.zhjq.common.core.domain.entity.ZhjqColumn;
+
+/**
+ * 栏目管理Mapper接口
+ *
+ * @author lc
+ * @date 2024-12-16
+ */
+public interface ZhjqColumnMapper {
+    /**
+     * 查询栏目管理
+     *
+     * @param columnId 栏目管理主键
+     * @return 栏目管理
+     */
+    public ZhjqColumn selectZhjqColumnByColumnId(Long columnId);
+
+    /**
+     * 查询栏目管理列表
+     *
+     * @param zhjqColumn 栏目管理
+     * @return 栏目管理集合
+     */
+    public List<ZhjqColumn> selectZhjqColumnList(ZhjqColumn zhjqColumn);
+
+    /**
+     * 新增栏目管理
+     *
+     * @param zhjqColumn 栏目管理
+     * @return 结果
+     */
+    public int insertZhjqColumn(ZhjqColumn zhjqColumn);
+
+    /**
+     * 修改栏目管理
+     *
+     * @param zhjqColumn 栏目管理
+     * @return 结果
+     */
+    public int updateZhjqColumn(ZhjqColumn zhjqColumn);
+
+    /**
+     * 删除栏目管理
+     *
+     * @param columnId 栏目管理主键
+     * @return 结果
+     */
+    public int deleteZhjqColumnByColumnId(Long columnId);
+
+    /**
+     * 批量删除栏目管理
+     *
+     * @param columnIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteZhjqColumnByColumnIds(Long[] columnIds);
+
+    List<ZhjqColumn> selectZhjqColumnAllList(ZhjqColumn zhjqColumn);
+
+}

+ 62 - 0
zhjq-business/src/main/java/com/zhjq/mapper/ZhjqSceneryMapper.java

@@ -0,0 +1,62 @@
+package com.zhjq.mapper;
+
+import com.zhjq.domain.ZhjqScenery;
+
+import java.util.List;
+
+
+/**
+ * 景点管理Mapper接口
+ *
+ * @author lc
+ * @date 2024-12-16
+ */
+public interface ZhjqSceneryMapper {
+    /**
+     * 查询景点管理
+     *
+     * @param id 景点管理主键
+     * @return 景点管理
+     */
+    public ZhjqScenery selectZhjqSceneryById(Long id);
+
+    /**
+     * 查询景点管理列表
+     *
+     * @param zhjqScenery 景点管理
+     * @return 景点管理集合
+     */
+    public List<ZhjqScenery> selectZhjqSceneryList(ZhjqScenery zhjqScenery);
+
+    /**
+     * 新增景点管理
+     *
+     * @param zhjqScenery 景点管理
+     * @return 结果
+     */
+    public int insertZhjqScenery(ZhjqScenery zhjqScenery);
+
+    /**
+     * 修改景点管理
+     *
+     * @param zhjqScenery 景点管理
+     * @return 结果
+     */
+    public int updateZhjqScenery(ZhjqScenery zhjqScenery);
+
+    /**
+     * 删除景点管理
+     *
+     * @param id 景点管理主键
+     * @return 结果
+     */
+    public int deleteZhjqSceneryById(Long id);
+
+    /**
+     * 批量删除景点管理
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteZhjqSceneryByIds(Long[] ids);
+}

+ 62 - 0
zhjq-business/src/main/java/com/zhjq/service/IZhjqAppCarouselService.java

@@ -0,0 +1,62 @@
+package com.zhjq.service;
+
+import com.zhjq.domain.ZhjqAppCarousel;
+
+import java.util.List;
+
+
+/**
+ * 轮播管理Service接口
+ *
+ * @author lc
+ * @date 2024-12-16
+ */
+public interface IZhjqAppCarouselService {
+    /**
+     * 查询轮播管理
+     *
+     * @param id 轮播管理主键
+     * @return 轮播管理
+     */
+    public ZhjqAppCarousel selectZhjqAppCarouselById(Long id);
+
+    /**
+     * 查询轮播管理列表
+     *
+     * @param zhjqAppCarousel 轮播管理
+     * @return 轮播管理集合
+     */
+    public List<ZhjqAppCarousel> selectZhjqAppCarouselList(ZhjqAppCarousel zhjqAppCarousel);
+
+    /**
+     * 新增轮播管理
+     *
+     * @param zhjqAppCarousel 轮播管理
+     * @return 结果
+     */
+    public int insertZhjqAppCarousel(ZhjqAppCarousel zhjqAppCarousel);
+
+    /**
+     * 修改轮播管理
+     *
+     * @param zhjqAppCarousel 轮播管理
+     * @return 结果
+     */
+    public int updateZhjqAppCarousel(ZhjqAppCarousel zhjqAppCarousel);
+
+    /**
+     * 批量删除轮播管理
+     *
+     * @param ids 需要删除的轮播管理主键集合
+     * @return 结果
+     */
+    public int deleteZhjqAppCarouselByIds(Long[] ids);
+
+    /**
+     * 删除轮播管理信息
+     *
+     * @param id 轮播管理主键
+     * @return 结果
+     */
+    public int deleteZhjqAppCarouselById(Long id);
+}

+ 62 - 0
zhjq-business/src/main/java/com/zhjq/service/IZhjqArticleService.java

@@ -0,0 +1,62 @@
+package com.zhjq.service;
+
+import com.zhjq.domain.ZhjqArticle;
+
+import java.util.List;
+
+
+/**
+ * 文章管理Service接口
+ *
+ * @author lc
+ * @date 2024-12-16
+ */
+public interface IZhjqArticleService {
+    /**
+     * 查询文章管理
+     *
+     * @param id 文章管理主键
+     * @return 文章管理
+     */
+    public ZhjqArticle selectZhjqArticleById(Long id);
+
+    /**
+     * 查询文章管理列表
+     *
+     * @param zhjqArticle 文章管理
+     * @return 文章管理集合
+     */
+    public List<ZhjqArticle> selectZhjqArticleList(ZhjqArticle zhjqArticle);
+
+    /**
+     * 新增文章管理
+     *
+     * @param zhjqArticle 文章管理
+     * @return 结果
+     */
+    public int insertZhjqArticle(ZhjqArticle zhjqArticle);
+
+    /**
+     * 修改文章管理
+     *
+     * @param zhjqArticle 文章管理
+     * @return 结果
+     */
+    public int updateZhjqArticle(ZhjqArticle zhjqArticle);
+
+    /**
+     * 批量删除文章管理
+     *
+     * @param ids 需要删除的文章管理主键集合
+     * @return 结果
+     */
+    public int deleteZhjqArticleByIds(Long[] ids);
+
+    /**
+     * 删除文章管理信息
+     *
+     * @param id 文章管理主键
+     * @return 结果
+     */
+    public int deleteZhjqArticleById(Long id);
+}

+ 73 - 0
zhjq-business/src/main/java/com/zhjq/service/IZhjqColumnService.java

@@ -0,0 +1,73 @@
+package com.zhjq.service;
+
+import java.util.List;
+
+
+import com.zhjq.common.core.domain.TreeSelect;
+import com.zhjq.common.core.domain.entity.SysMenu;
+import com.zhjq.common.core.domain.entity.ZhjqColumn;
+
+/**
+ * 栏目管理Service接口
+ *
+ * @author lc
+ * @date 2024-12-16
+ */
+public interface IZhjqColumnService {
+    /**
+     * 查询栏目管理
+     *
+     * @param columnId 栏目管理主键
+     * @return 栏目管理
+     */
+    public ZhjqColumn selectZhjqColumnByColumnId(Long columnId);
+
+    /**
+     * 查询栏目管理列表
+     *
+     * @param zhjqColumn 栏目管理
+     * @return 栏目管理集合
+     */
+    public List<ZhjqColumn> selectZhjqColumnList(ZhjqColumn zhjqColumn);
+
+    public List<ZhjqColumn> selectZhjqColumnAllList(ZhjqColumn zhjqColumn);
+
+    /**
+     * 新增栏目管理
+     *
+     * @param zhjqColumn 栏目管理
+     * @return 结果
+     */
+    public int insertZhjqColumn(ZhjqColumn zhjqColumn);
+
+    /**
+     * 修改栏目管理
+     *
+     * @param zhjqColumn 栏目管理
+     * @return 结果
+     */
+    public int updateZhjqColumn(ZhjqColumn zhjqColumn);
+
+    /**
+     * 批量删除栏目管理
+     *
+     * @param columnIds 需要删除的栏目管理主键集合
+     * @return 结果
+     */
+    public int deleteZhjqColumnByColumnIds(Long[] columnIds);
+
+    /**
+     * 删除栏目管理信息
+     *
+     * @param columnId 栏目管理主键
+     * @return 结果
+     */
+    public int deleteZhjqColumnByColumnId(Long columnId);
+
+    public List<ZhjqColumn> selectZhjqColumnTreeList(ZhjqColumn zhjqColumn, Long userId);
+
+    public List<TreeSelect> buildMenuTreeSelect(List<ZhjqColumn> menus);
+
+
+    List<ZhjqColumn> buildMenuTree(List<ZhjqColumn> menus);
+}

+ 62 - 0
zhjq-business/src/main/java/com/zhjq/service/IZhjqSceneryService.java

@@ -0,0 +1,62 @@
+package com.zhjq.service;
+
+import com.zhjq.domain.ZhjqScenery;
+
+import java.util.List;
+
+
+/**
+ * 景点管理Service接口
+ *
+ * @author lc
+ * @date 2024-12-16
+ */
+public interface IZhjqSceneryService {
+    /**
+     * 查询景点管理
+     *
+     * @param id 景点管理主键
+     * @return 景点管理
+     */
+    public ZhjqScenery selectZhjqSceneryById(Long id);
+
+    /**
+     * 查询景点管理列表
+     *
+     * @param zhjqScenery 景点管理
+     * @return 景点管理集合
+     */
+    public List<ZhjqScenery> selectZhjqSceneryList(ZhjqScenery zhjqScenery);
+
+    /**
+     * 新增景点管理
+     *
+     * @param zhjqScenery 景点管理
+     * @return 结果
+     */
+    public int insertZhjqScenery(ZhjqScenery zhjqScenery);
+
+    /**
+     * 修改景点管理
+     *
+     * @param zhjqScenery 景点管理
+     * @return 结果
+     */
+    public int updateZhjqScenery(ZhjqScenery zhjqScenery);
+
+    /**
+     * 批量删除景点管理
+     *
+     * @param ids 需要删除的景点管理主键集合
+     * @return 结果
+     */
+    public int deleteZhjqSceneryByIds(Long[] ids);
+
+    /**
+     * 删除景点管理信息
+     *
+     * @param id 景点管理主键
+     * @return 结果
+     */
+    public int deleteZhjqSceneryById(Long id);
+}

+ 100 - 0
zhjq-business/src/main/java/com/zhjq/service/imp/ZhjqAppCarouselServiceImpl.java

@@ -0,0 +1,100 @@
+package com.zhjq.service.imp;
+
+import java.util.List;
+
+import com.zhjq.common.utils.DateUtils;
+import com.zhjq.domain.ZhjqAppCarousel;
+import com.zhjq.mapper.ZhjqAppCarouselMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.zhjq.service.IZhjqAppCarouselService;
+
+/**
+ * 轮播管理Service业务层处理
+ *
+ * @author lc
+ * @date 2024-12-16
+ */
+@Service
+public class ZhjqAppCarouselServiceImpl implements IZhjqAppCarouselService {
+    @Autowired
+    private ZhjqAppCarouselMapper zhjqAppCarouselMapper;
+
+    /**
+     * 查询轮播管理
+     *
+     * @param id 轮播管理主键
+     * @return 轮播管理
+     */
+    @Override
+    public ZhjqAppCarousel selectZhjqAppCarouselById(Long id) {
+        return zhjqAppCarouselMapper.selectZhjqAppCarouselById(id);
+    }
+
+    /**
+     * 查询轮播管理列表
+     *
+     * @param zhjqAppCarousel 轮播管理
+     * @return 轮播管理
+     */
+    @Override
+    public List<ZhjqAppCarousel> selectZhjqAppCarouselList(ZhjqAppCarousel zhjqAppCarousel) {
+
+        return zhjqAppCarouselMapper.selectZhjqAppCarouselList(zhjqAppCarousel);
+    }
+
+    /**
+     * 新增轮播管理
+     *
+     * @param zhjqAppCarousel 轮播管理
+     * @return 结果
+     */
+    @Override
+    public int insertZhjqAppCarousel(ZhjqAppCarousel zhjqAppCarousel) {
+        zhjqAppCarousel.setCreateTime(DateUtils.getNowDate());
+//        /**如果附件不为空,则去掉协议前缀**/
+//        if (!"".equals(zhjqAppCarousel.getAppUrl()) && null != zhjqAppCarousel.getAppUrl()) {
+//            zhjqAppCarousel.setAppUrl(zhjqAppCarousel.getAppUrl().substring(zhjqAppCarousel.getAppUrl().indexOf("/group") + 1));
+//        }
+        return zhjqAppCarouselMapper.insertZhjqAppCarousel(zhjqAppCarousel);
+    }
+
+    /**
+     * 修改轮播管理
+     *
+     * @param zhjqAppCarousel 轮播管理
+     * @return 结果
+     */
+    @Override
+    public int updateZhjqAppCarousel(ZhjqAppCarousel zhjqAppCarousel) {
+        zhjqAppCarousel.setUpdateTime(DateUtils.getNowDate());
+//        /**如果附件不为空,则去掉协议前缀**/
+//        if (!"".equals(zhjqAppCarousel.getAppUrl()) && null != zhjqAppCarousel.getAppUrl()) {
+//            zhjqAppCarousel.setAppUrl(zhjqAppCarousel.getAppUrl().substring(zhjqAppCarousel.getAppUrl().indexOf("/group") + 1));
+//        }
+        return zhjqAppCarouselMapper.updateZhjqAppCarousel(zhjqAppCarousel);
+    }
+
+    /**
+     * 批量删除轮播管理
+     *
+     * @param ids 需要删除的轮播管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteZhjqAppCarouselByIds(Long[] ids) {
+        return zhjqAppCarouselMapper.deleteZhjqAppCarouselByIds(ids);
+    }
+
+    /**
+     * 删除轮播管理信息
+     *
+     * @param id 轮播管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteZhjqAppCarouselById(Long id) {
+        return zhjqAppCarouselMapper.deleteZhjqAppCarouselById(id);
+    }
+}

+ 89 - 0
zhjq-business/src/main/java/com/zhjq/service/imp/ZhjqArticleServiceImpl.java

@@ -0,0 +1,89 @@
+package com.zhjq.service.imp;
+
+import java.util.List;
+
+import com.zhjq.domain.ZhjqArticle;
+import com.zhjq.mapper.ZhjqArticleMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.zhjq.service.IZhjqArticleService;
+
+/**
+ * 文章管理Service业务层处理
+ *
+ * @author lc
+ * @date 2024-12-16
+ */
+@Service
+public class ZhjqArticleServiceImpl implements IZhjqArticleService {
+    @Autowired
+    private ZhjqArticleMapper zhjqArticleMapper;
+
+    /**
+     * 查询文章管理
+     *
+     * @param id 文章管理主键
+     * @return 文章管理
+     */
+    @Override
+    public ZhjqArticle selectZhjqArticleById(Long id) {
+        return zhjqArticleMapper.selectZhjqArticleById(id);
+    }
+
+    /**
+     * 查询文章管理列表
+     *
+     * @param zhjqArticle 文章管理
+     * @return 文章管理
+     */
+    @Override
+    public List<ZhjqArticle> selectZhjqArticleList(ZhjqArticle zhjqArticle) {
+        return zhjqArticleMapper.selectZhjqArticleList(zhjqArticle);
+    }
+
+    /**
+     * 新增文章管理
+     *
+     * @param zhjqArticle 文章管理
+     * @return 结果
+     */
+    @Override
+    public int insertZhjqArticle(ZhjqArticle zhjqArticle) {
+//                zhjqArticle.setCreateTime(DateUtils.getNowDate());
+        return zhjqArticleMapper.insertZhjqArticle(zhjqArticle);
+    }
+
+    /**
+     * 修改文章管理
+     *
+     * @param zhjqArticle 文章管理
+     * @return 结果
+     */
+    @Override
+    public int updateZhjqArticle(ZhjqArticle zhjqArticle) {
+        return zhjqArticleMapper.updateZhjqArticle(zhjqArticle);
+    }
+
+    /**
+     * 批量删除文章管理
+     *
+     * @param ids 需要删除的文章管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteZhjqArticleByIds(Long[] ids) {
+        return zhjqArticleMapper.deleteZhjqArticleByIds(ids);
+    }
+
+    /**
+     * 删除文章管理信息
+     *
+     * @param id 文章管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteZhjqArticleById(Long id) {
+        return zhjqArticleMapper.deleteZhjqArticleById(id);
+    }
+}

+ 207 - 0
zhjq-business/src/main/java/com/zhjq/service/imp/ZhjqColumnServiceImpl.java

@@ -0,0 +1,207 @@
+package com.zhjq.service.imp;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+
+import com.zhjq.common.constant.Constants;
+import com.zhjq.common.core.domain.TreeSelect;
+import com.zhjq.common.core.domain.entity.ZhjqColumn;
+import com.zhjq.common.utils.DateUtils;
+import com.zhjq.common.utils.StringUtils;
+import com.zhjq.mapper.ZhjqColumnMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.zhjq.service.IZhjqColumnService;
+
+/**
+ * 栏目管理Service业务层处理
+ *
+ * @author lc
+ * @date 2024-12-16
+ */
+@Service
+public class ZhjqColumnServiceImpl implements IZhjqColumnService {
+    @Autowired
+    private ZhjqColumnMapper zhjqColumnMapper;
+
+    /**
+     * 查询栏目管理
+     *
+     * @param columnId 栏目管理主键
+     * @return 栏目管理
+     */
+    @Override
+    public ZhjqColumn selectZhjqColumnByColumnId(Long columnId) {
+        return zhjqColumnMapper.selectZhjqColumnByColumnId(columnId);
+    }
+
+    /**
+     * 查询栏目管理列表
+     *
+     * @param zhjqColumn 栏目管理
+     * @return 栏目管理
+     */
+    @Override
+    public List<ZhjqColumn> selectZhjqColumnList(ZhjqColumn zhjqColumn) {
+        return zhjqColumnMapper.selectZhjqColumnList(zhjqColumn);
+    }
+
+    /**
+     * 查询栏目管理列表
+     *
+     * @param zhjqColumn 栏目管理列表
+     * @return 栏目管理列表
+     */
+    @Override
+    public List<ZhjqColumn> selectZhjqColumnAllList(ZhjqColumn zhjqColumn) {
+        return zhjqColumnMapper.selectZhjqColumnAllList(zhjqColumn);
+    }
+
+    /**
+     * 新增栏目管理
+     *
+     * @param zhjqColumn 栏目管理
+     * @return 结果
+     */
+    @Override
+    public int insertZhjqColumn(ZhjqColumn zhjqColumn) {
+        zhjqColumn.setCreateTime(DateUtils.getNowDate());
+        return zhjqColumnMapper.insertZhjqColumn(zhjqColumn);
+    }
+
+    /**
+     * 修改栏目管理
+     *
+     * @param zhjqColumn 栏目管理
+     * @return 结果
+     */
+    @Override
+    public int updateZhjqColumn(ZhjqColumn zhjqColumn) {
+        zhjqColumn.setUpdateTime(DateUtils.getNowDate());
+        return zhjqColumnMapper.updateZhjqColumn(zhjqColumn);
+    }
+
+    /**
+     * 批量删除栏目管理
+     *
+     * @param columnIds 需要删除的栏目管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteZhjqColumnByColumnIds(Long[] columnIds) {
+        return zhjqColumnMapper.deleteZhjqColumnByColumnIds(columnIds);
+    }
+
+    /**
+     * 删除栏目管理信息
+     *
+     * @param columnId 栏目管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteZhjqColumnByColumnId(Long columnId) {
+        return zhjqColumnMapper.deleteZhjqColumnByColumnId(columnId);
+    }
+
+    @Override
+    public List<ZhjqColumn> selectZhjqColumnTreeList(ZhjqColumn menu, Long userId) {
+        List<ZhjqColumn> menuList = zhjqColumnMapper.selectZhjqColumnList(menu);
+        return menuList;
+    }
+
+
+    /**
+     * 构建前端所需要下拉树结构
+     *
+     * @param menus 菜单列表
+     * @return 下拉树结构列表
+     */
+    @Override
+    public List<TreeSelect> buildMenuTreeSelect(List<ZhjqColumn> menus) {
+        List<ZhjqColumn> menuTrees = buildMenuTree(menus);
+        return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
+    }
+
+
+    /**
+     * 构建前端所需要树结构
+     *
+     * @param menus 菜单列表
+     * @return 树结构列表
+     */
+    @Override
+    public List<ZhjqColumn> buildMenuTree(List<ZhjqColumn> menus) {
+        List<ZhjqColumn> returnList = new ArrayList<ZhjqColumn>();
+        List<Long> tempList = new ArrayList<Long>();
+        for (ZhjqColumn dept : menus) {
+            tempList.add(dept.getColumnId());
+        }
+        for (Iterator<ZhjqColumn> iterator = menus.iterator(); iterator.hasNext(); ) {
+            ZhjqColumn menu = (ZhjqColumn) iterator.next();
+            // 如果是顶级节点, 遍历该父节点的所有子节点
+            if (!tempList.contains(menu.getParentId())) {
+                recursionFn(menus, menu);
+                returnList.add(menu);
+            }
+        }
+        if (returnList.isEmpty()) {
+            returnList = menus;
+        }
+        return returnList;
+    }
+
+    /**
+     * 递归列表
+     *
+     * @param list
+     * @param t
+     */
+    private void recursionFn(List<ZhjqColumn> list, ZhjqColumn t) {
+        // 得到子节点列表
+        List<ZhjqColumn> childList = getChildList(list, t);
+        t.setChildren(childList);
+        for (ZhjqColumn tChild : childList) {
+            if (hasChild(list, tChild)) {
+                recursionFn(list, tChild);
+            }
+        }
+    }
+
+    /**
+     * 得到子节点列表
+     */
+    private List<ZhjqColumn> getChildList(List<ZhjqColumn> list, ZhjqColumn t) {
+        List<ZhjqColumn> tlist = new ArrayList<ZhjqColumn>();
+        Iterator<ZhjqColumn> it = list.iterator();
+        while (it.hasNext()) {
+            ZhjqColumn n = (ZhjqColumn) it.next();
+            if (n.getParentId().longValue() == t.getColumnId().longValue()) {
+                tlist.add(n);
+            }
+        }
+        return tlist;
+    }
+
+    /**
+     * 判断是否有子节点
+     */
+    private boolean hasChild(List<ZhjqColumn> list, ZhjqColumn t) {
+        return getChildList(list, t).size() > 0;
+    }
+
+    /**
+     * 内链域名特殊字符替换
+     *
+     * @return
+     */
+    public String innerLinkReplaceEach(String path) {
+        return StringUtils.replaceEach(path, new String[]{Constants.HTTP, Constants.HTTPS},
+                new String[]{"", ""});
+    }
+
+
+}

+ 91 - 0
zhjq-business/src/main/java/com/zhjq/service/imp/ZhjqSceneryServiceImpl.java

@@ -0,0 +1,91 @@
+package com.zhjq.service.imp;
+
+import java.util.List;
+
+import com.zhjq.common.utils.DateUtils;
+import com.zhjq.domain.ZhjqScenery;
+import com.zhjq.mapper.ZhjqSceneryMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.zhjq.service.IZhjqSceneryService;
+
+/**
+ * 景点管理Service业务层处理
+ *
+ * @author lc
+ * @date 2024-12-16
+ */
+@Service
+public class ZhjqSceneryServiceImpl implements IZhjqSceneryService {
+    @Autowired
+    private ZhjqSceneryMapper zhjqSceneryMapper;
+
+    /**
+     * 查询景点管理
+     *
+     * @param id 景点管理主键
+     * @return 景点管理
+     */
+    @Override
+    public ZhjqScenery selectZhjqSceneryById(Long id) {
+        return zhjqSceneryMapper.selectZhjqSceneryById(id);
+    }
+
+    /**
+     * 查询景点管理列表
+     *
+     * @param zhjqScenery 景点管理
+     * @return 景点管理
+     */
+    @Override
+    public List<ZhjqScenery> selectZhjqSceneryList(ZhjqScenery zhjqScenery) {
+        return zhjqSceneryMapper.selectZhjqSceneryList(zhjqScenery);
+    }
+
+    /**
+     * 新增景点管理
+     *
+     * @param zhjqScenery 景点管理
+     * @return 结果
+     */
+    @Override
+    public int insertZhjqScenery(ZhjqScenery zhjqScenery) {
+        zhjqScenery.setCreateTime(DateUtils.getNowDate());
+        return zhjqSceneryMapper.insertZhjqScenery(zhjqScenery);
+    }
+
+    /**
+     * 修改景点管理
+     *
+     * @param zhjqScenery 景点管理
+     * @return 结果
+     */
+    @Override
+    public int updateZhjqScenery(ZhjqScenery zhjqScenery) {
+        zhjqScenery.setUpdateTime(DateUtils.getNowDate());
+        return zhjqSceneryMapper.updateZhjqScenery(zhjqScenery);
+    }
+
+    /**
+     * 批量删除景点管理
+     *
+     * @param ids 需要删除的景点管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteZhjqSceneryByIds(Long[] ids) {
+        return zhjqSceneryMapper.deleteZhjqSceneryByIds(ids);
+    }
+
+    /**
+     * 删除景点管理信息
+     *
+     * @param id 景点管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteZhjqSceneryById(Long id) {
+        return zhjqSceneryMapper.deleteZhjqSceneryById(id);
+    }
+}

+ 8 - 6
zhjq-business/src/main/java/com/zhjq/utils/QRCodeUtils.java

@@ -14,10 +14,11 @@ import java.util.Map;
 public class QRCodeUtils {
 
     /**
-     *  生成二维码
+     * 生成二维码
+     *
      * @param content 二维码的内容
      * @return BitMatrix对象
-     * */
+     */
     public static BitMatrix createCode(String content) throws IOException {
         //二维码的宽高
         int width = 200;
@@ -27,9 +28,9 @@ public class QRCodeUtils {
         Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
         hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
         //容错级别为H
-        hints.put(EncodeHintType.ERROR_CORRECTION , ErrorCorrectionLevel.H);
+        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
         //白边的宽度,可取0~4
-        hints.put(EncodeHintType.MARGIN , 0);
+        hints.put(EncodeHintType.MARGIN, 0);
 
         BitMatrix bitMatrix = null;
         try {
@@ -46,10 +47,11 @@ public class QRCodeUtils {
     }
 
     /**
-     *  删除生成的二维码周围的白边,根据审美决定是否删除
+     * 删除生成的二维码周围的白边,根据审美决定是否删除
+     *
      * @param matrix BitMatrix对象
      * @return BitMatrix对象
-     * */
+     */
     private static BitMatrix deleteWhite(BitMatrix matrix) {
         int[] rec = matrix.getEnclosingRectangle();
         int resWidth = rec[2] + 1;

+ 155 - 0
zhjq-business/src/main/resources/mapper/ZhjqAppCarouselMapper.xml

@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhjq.mapper.ZhjqAppCarouselMapper">
+
+    <resultMap type="ZhjqAppCarousel" id="ZhjqAppCarouselResult">
+        <result property="id" column="id"/>
+        <result property="appName" column="app_name"/>
+        <result property="appUrl" column="app_url"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createName" column="create_name"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateName" column="update_name"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="dataStatus" column="data_status"/>
+    </resultMap>
+
+    <sql id="selectZhjqAppCarouselVo">
+        select id,
+               app_name,
+               app_url,
+               create_by,
+               create_name,
+               create_time,
+               update_by,
+               update_name,
+               update_time,
+               data_status
+        from zhjq_app_carousel
+    </sql>
+
+    <select id="selectZhjqAppCarouselList" parameterType="ZhjqAppCarousel" resultMap="ZhjqAppCarouselResult">
+        <include refid="selectZhjqAppCarouselVo"/>
+        <where>
+            <if test="appName != null  and appName != ''">
+                and app_name like concat('%', #{appName}, '%')
+            </if>
+            <if test="appUrl != null  and appUrl != ''">
+                and app_url = #{appUrl}
+            </if>
+            <if test="createName != null  and createName != ''">
+                and create_name like concat('%', #{createName}, '%')
+            </if>
+            <if test="updateName != null  and updateName != ''">
+                and update_name like concat('%', #{updateName}, '%')
+            </if>
+            <if test="dataStatus != null  and dataStatus != ''">
+                and data_status = #{dataStatus}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectZhjqAppCarouselById" parameterType="Long"
+            resultMap="ZhjqAppCarouselResult">
+        <include refid="selectZhjqAppCarouselVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertZhjqAppCarousel" parameterType="ZhjqAppCarousel">
+        insert into zhjq_app_carousel
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,
+            </if>
+            <if test="appName != null">app_name,
+            </if>
+            <if test="appUrl != null">app_url,
+            </if>
+            <if test="createBy != null">create_by,
+            </if>
+            <if test="createName != null">create_name,
+            </if>
+            <if test="createTime != null">create_time,
+            </if>
+            <if test="updateBy != null">update_by,
+            </if>
+            <if test="updateName != null">update_name,
+            </if>
+            <if test="updateTime != null">update_time,
+            </if>
+            <if test="dataStatus != null">data_status,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},
+            </if>
+            <if test="appName != null">#{appName},
+            </if>
+            <if test="appUrl != null">#{appUrl},
+            </if>
+            <if test="createBy != null">#{createBy},
+            </if>
+            <if test="createName != null">#{createName},
+            </if>
+            <if test="createTime != null">#{createTime},
+            </if>
+            <if test="updateBy != null">#{updateBy},
+            </if>
+            <if test="updateName != null">#{updateName},
+            </if>
+            <if test="updateTime != null">#{updateTime},
+            </if>
+            <if test="dataStatus != null">#{dataStatus},
+            </if>
+        </trim>
+    </insert>
+
+    <update id="updateZhjqAppCarousel" parameterType="ZhjqAppCarousel">
+        update zhjq_app_carousel
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="appName != null">app_name =
+                #{appName},
+            </if>
+            <if test="appUrl != null">app_url =
+                #{appUrl},
+            </if>
+            <if test="createBy != null">create_by =
+                #{createBy},
+            </if>
+            <if test="createName != null">create_name =
+                #{createName},
+            </if>
+            <if test="createTime != null">create_time =
+                #{createTime},
+            </if>
+            <if test="updateBy != null">update_by =
+                #{updateBy},
+            </if>
+            <if test="updateName != null">update_name =
+                #{updateName},
+            </if>
+            <if test="updateTime != null">update_time =
+                #{updateTime},
+            </if>
+            <if test="dataStatus != null">data_status =
+                #{dataStatus},
+            </if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteZhjqAppCarouselById" parameterType="Long">
+        delete
+        from zhjq_app_carousel
+        where id = #{id}
+    </delete>
+
+    <delete id="deleteZhjqAppCarouselByIds" parameterType="String">
+        delete from zhjq_app_carousel where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 138 - 0
zhjq-business/src/main/resources/mapper/ZhjqArticleMapper.xml

@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhjq.mapper.ZhjqArticleMapper">
+
+    <resultMap type="ZhjqArticle" id="ZhjqArticleResult">
+        <result property="id" column="id"/>
+        <result property="journalismName" column="Journalism_name"/>
+        <result property="journalismContent" column="Journalism_content"/>
+        <result property="createTime" column="create_time"/>
+        <result property="sort" column="sort"/>
+        <result property="columnId" column="column_id"/>
+        <result property="author" column="author"/>
+        <result property="releaseTime" column="release_time"/>
+    </resultMap>
+
+    <sql id="selectZhjqArticleVo">
+        select id, Journalism_name, Journalism_content, create_time, sort, column_id, author
+        from zhjq_article
+    </sql>
+
+    <select id="selectZhjqArticleList" parameterType="ZhjqArticle" resultMap="ZhjqArticleResult">
+        SELECT
+        a.id,
+        a.Journalism_name,
+        a.Journalism_content,
+        a.create_time,
+        a.sort,
+        a.column_id,
+        release_time,
+        a.author,
+        GROUP_CONCAT( b.column_name ) AS columnName
+        FROM
+        zhjq_article a
+        LEFT JOIN zhjq_column b ON a.column_id = b.column_id
+        <where>
+            <if test="journalismName != null  and journalismName != ''">and Journalism_name like concat('%',
+                #{journalismName}, '%')
+            </if>
+        </where>
+    </select>
+
+    <select id="selectZhjqArticleById" parameterType="Long"
+            resultMap="ZhjqArticleResult">
+        SELECT a.id,
+               a.Journalism_name,
+               a.Journalism_content,
+               a.create_time,
+               a.sort,
+               a.column_id,
+               a.release_time,
+               a.author,
+               GROUP_CONCAT(b.column_id) AS columnId
+        FROM zhjq_article a
+                 LEFT JOIN zhjq_column b ON a.column_id = b.column_id
+        where a.id = #{id}
+        GROUP BY a.id
+    </select>
+
+    <insert id="insertZhjqArticle" parameterType="ZhjqArticle" useGeneratedKeys="true"
+            keyProperty="id">
+        insert into zhjq_article
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="journalismName != null">Journalism_name,
+            </if>
+            <if test="journalismContent != null">Journalism_content,
+            </if>
+            <if test="createTime != null">create_time,
+            </if>
+            <if test="sort != null">sort,
+            </if>
+            <if test="columnId != null">column_id,
+            </if>
+            <if test="author != null">author,
+            </if>
+            <if test="releaseTime != null">release_time,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="journalismName != null">#{journalismName},
+            </if>
+            <if test="journalismContent != null">#{journalismContent},
+            </if>
+            <if test="createTime != null">#{createTime},
+            </if>
+            <if test="sort != null">#{sort},
+            </if>
+            <if test="columnId != null">#{columnId},
+            </if>
+            <if test="author != null">#{author},
+            </if>
+            <if test="releaseTime != null">#{releaseTime},
+            </if>
+        </trim>
+    </insert>
+
+    <update id="updateZhjqArticle" parameterType="ZhjqArticle">
+        update zhjq_article
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="journalismName != null">Journalism_name =
+                #{journalismName},
+            </if>
+            <if test="journalismContent != null">Journalism_content =
+                #{journalismContent},
+            </if>
+            <if test="createTime != null">create_time =
+                #{createTime},
+            </if>
+            <if test="sort != null">sort =
+                #{sort},
+            </if>
+            <if test="columnId != null">column_id =
+                #{columnId},
+            </if>
+            <if test="author != null">author =
+                #{author},
+            </if>
+            <if test="releaseTime != null">release_time =
+                #{releaseTime},
+            </if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteZhjqArticleById" parameterType="Long">
+        delete
+        from zhjq_article
+        where id = #{id}
+    </delete>
+
+    <delete id="deleteZhjqArticleByIds" parameterType="String">
+        delete from zhjq_article where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 146 - 0
zhjq-business/src/main/resources/mapper/ZhjqColumnMapper.xml

@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhjq.mapper.ZhjqColumnMapper">
+
+    <resultMap type="ZhjqColumn" id="ZhjqColumnResult">
+        <result property="columnId" column="column_id"/>
+        <result property="columnName" column="column_name"/>
+        <result property="parentId" column="parent_id"/>
+        <result property="orderNum" column="order_num"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="remark" column="remark"/>
+        <result property="managerName" column="managerName"/>
+    </resultMap>
+
+    <sql id="selectZhjqColumnVo">
+        select column_id,
+               column_name,
+               parent_id,
+               order_num,
+               create_by,
+               create_time,
+               update_by,
+               update_time,
+               remark
+        from zhjq_column
+    </sql>
+
+    <select id="selectZhjqColumnList" parameterType="ZhjqColumn" resultMap="ZhjqColumnResult">
+        SELECT
+        a.*,
+        b.column_name AS managerName
+        FROM
+        zhjq_column a
+        LEFT JOIN zhjq_column b ON a.column_id = b.parent_id
+        <where>
+            <if test="columnName != null  and columnName != ''">
+                and column_name like concat('%', #{columnName}, '%')
+            </if>
+            <if test="columnId != null and columnId != 0">
+                AND (a.column_id = #{columnId} OR a.column_id IN ( SELECT t.column_id FROM zhjq_column t WHERE
+                find_in_set(#{columnId},parent_id) ))
+            </if>
+        </where>
+        order by parent_id
+    </select>
+
+    <select id="selectZhjqColumnByColumnId" parameterType="Long"
+            resultMap="ZhjqColumnResult">
+        <include refid="selectZhjqColumnVo"/>
+        where column_id = #{columnId}
+    </select>
+
+    <insert id="insertZhjqColumn" parameterType="ZhjqColumn" useGeneratedKeys="true"
+            keyProperty="columnId">
+        insert into zhjq_column
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="columnName != null and columnName != ''">column_name,
+            </if>
+            <if test="parentId != null">parent_id,
+            </if>
+            <if test="orderNum != null">order_num,
+            </if>
+            <if test="createBy != null">create_by,
+            </if>
+            <if test="createTime != null">create_time,
+            </if>
+            <if test="updateBy != null">update_by,
+            </if>
+            <if test="updateTime != null">update_time,
+            </if>
+            <if test="remark != null">remark,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="columnName != null and columnName != ''">#{columnName},
+            </if>
+            <if test="parentId != null">#{parentId},
+            </if>
+            <if test="orderNum != null">#{orderNum},
+            </if>
+            <if test="createBy != null">#{createBy},
+            </if>
+            <if test="createTime != null">#{createTime},
+            </if>
+            <if test="updateBy != null">#{updateBy},
+            </if>
+            <if test="updateTime != null">#{updateTime},
+            </if>
+            <if test="remark != null">#{remark},
+            </if>
+        </trim>
+    </insert>
+
+    <update id="updateZhjqColumn" parameterType="ZhjqColumn">
+        update zhjq_column
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="columnName != null and columnName != ''">column_name =
+                #{columnName},
+            </if>
+            <if test="parentId != null">parent_id =
+                #{parentId},
+            </if>
+            <if test="orderNum != null">order_num =
+                #{orderNum},
+            </if>
+            <if test="createBy != null">create_by =
+                #{createBy},
+            </if>
+            <if test="createTime != null">create_time =
+                #{createTime},
+            </if>
+            <if test="updateBy != null">update_by =
+                #{updateBy},
+            </if>
+            <if test="updateTime != null">update_time =
+                #{updateTime},
+            </if>
+            <if test="remark != null">remark =
+                #{remark},
+            </if>
+        </trim>
+        where column_id = #{columnId}
+    </update>
+
+    <delete id="deleteZhjqColumnByColumnId" parameterType="Long">
+        delete
+        from zhjq_column
+        where column_id = #{columnId}
+    </delete>
+
+    <delete id="deleteZhjqColumnByColumnIds" parameterType="String">
+        delete from zhjq_column where column_id in
+        <foreach item="columnId" collection="array" open="(" separator="," close=")">
+            #{columnId}
+        </foreach>
+    </delete>
+
+    <select id="selectZhjqColumnAllList" parameterType="ZhjqColumn" resultMap="ZhjqColumnResult">
+        <include refid="selectZhjqColumnVo"/>
+    </select>
+</mapper>

+ 179 - 0
zhjq-business/src/main/resources/mapper/ZhjqSceneryMapper.xml

@@ -0,0 +1,179 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhjq.mapper.ZhjqSceneryMapper">
+
+    <resultMap type="ZhjqScenery" id="ZhjqSceneryResult">
+        <result property="id" column="id"/>
+        <result property="sceneryName" column="scenery_name"/>
+        <result property="sceneryUrl" column="scenery_url"/>
+        <result property="content" column="content"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createName" column="create_name"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateName" column="update_name"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="longitude" column="longitude"/>
+        <result property="latitude" column="latitude"/>
+    </resultMap>
+
+    <sql id="selectZhjqSceneryVo">
+        select id,
+               scenery_name,
+               scenery_url,
+               content,
+               create_by,
+               create_name,
+               create_time,
+               update_by,
+               update_name,
+               update_time,
+               longitude,
+               latitude
+        from zhjq_scenery
+    </sql>
+
+    <select id="selectZhjqSceneryList" parameterType="ZhjqScenery" resultMap="ZhjqSceneryResult">
+        <include refid="selectZhjqSceneryVo"/>
+        <where>
+            <if test="sceneryName != null  and sceneryName != ''">
+                and scenery_name like concat('%', #{sceneryName}, '%')
+            </if>
+            <if test="sceneryUrl != null  and sceneryUrl != ''">
+                and scenery_url = #{sceneryUrl}
+            </if>
+            <if test="content != null  and content != ''">
+                and content = #{content}
+            </if>
+            <if test="createName != null  and createName != ''">
+                and create_name like concat('%', #{createName}, '%')
+            </if>
+            <if test="updateName != null  and updateName != ''">
+                and update_name like concat('%', #{updateName}, '%')
+            </if>
+            <if test="longitude != null  and longitude != ''">
+                and longitude = #{longitude}
+            </if>
+            <if test="latitude != null  and latitude != ''">
+                and latitude = #{latitude}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectZhjqSceneryById" parameterType="Long"
+            resultMap="ZhjqSceneryResult">
+        <include refid="selectZhjqSceneryVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertZhjqScenery" parameterType="ZhjqScenery">
+        insert into zhjq_scenery
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,
+            </if>
+            <if test="sceneryName != null">scenery_name,
+            </if>
+            <if test="sceneryUrl != null">scenery_url,
+            </if>
+            <if test="content != null">content,
+            </if>
+            <if test="createBy != null">create_by,
+            </if>
+            <if test="createName != null">create_name,
+            </if>
+            <if test="createTime != null">create_time,
+            </if>
+            <if test="updateBy != null">update_by,
+            </if>
+            <if test="updateName != null">update_name,
+            </if>
+            <if test="updateTime != null">update_time,
+            </if>
+            <if test="longitude != null">longitude,
+            </if>
+            <if test="latitude != null">latitude,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},
+            </if>
+            <if test="sceneryName != null">#{sceneryName},
+            </if>
+            <if test="sceneryUrl != null">#{sceneryUrl},
+            </if>
+            <if test="content != null">#{content},
+            </if>
+            <if test="createBy != null">#{createBy},
+            </if>
+            <if test="createName != null">#{createName},
+            </if>
+            <if test="createTime != null">#{createTime},
+            </if>
+            <if test="updateBy != null">#{updateBy},
+            </if>
+            <if test="updateName != null">#{updateName},
+            </if>
+            <if test="updateTime != null">#{updateTime},
+            </if>
+            <if test="longitude != null">#{longitude},
+            </if>
+            <if test="latitude != null">#{latitude},
+            </if>
+        </trim>
+    </insert>
+
+    <update id="updateZhjqScenery" parameterType="ZhjqScenery">
+        update zhjq_scenery
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="sceneryName != null">scenery_name =
+                #{sceneryName},
+            </if>
+            <if test="sceneryUrl != null">scenery_url =
+                #{sceneryUrl},
+            </if>
+            <if test="content != null">content =
+                #{content},
+            </if>
+            <if test="createBy != null">create_by =
+                #{createBy},
+            </if>
+            <if test="createName != null">create_name =
+                #{createName},
+            </if>
+            <if test="createTime != null">create_time =
+                #{createTime},
+            </if>
+            <if test="updateBy != null">update_by =
+                #{updateBy},
+            </if>
+            <if test="updateName != null">update_name =
+                #{updateName},
+            </if>
+            <if test="updateTime != null">update_time =
+                #{updateTime},
+            </if>
+            <if test="longitude != null">longitude =
+                #{longitude},
+            </if>
+            <if test="latitude != null">latitude =
+                #{latitude},
+            </if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteZhjqSceneryById" parameterType="Long">
+        delete
+        from zhjq_scenery
+        where id = #{id}
+    </delete>
+
+    <delete id="deleteZhjqSceneryByIds" parameterType="String">
+        delete from zhjq_scenery where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 7 - 0
zhjq-common/src/main/java/com/zhjq/common/core/domain/TreeSelect.java

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 import com.zhjq.common.constant.UserConstants;
 import com.zhjq.common.core.domain.entity.SysDept;
 import com.zhjq.common.core.domain.entity.SysMenu;
+import com.zhjq.common.core.domain.entity.ZhjqColumn;
 import com.zhjq.common.utils.StringUtils;
 
 import java.io.Serializable;
@@ -56,6 +57,12 @@ public class TreeSelect implements Serializable {
         this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
     }
 
+    public TreeSelect(ZhjqColumn column) {
+        this.id = column.getColumnId();
+        this.label = column.getColumnName();
+        this.children = column.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
+    }
+
     public Long getId() {
         return id;
     }

+ 112 - 0
zhjq-common/src/main/java/com/zhjq/common/core/domain/entity/ZhjqColumn.java

@@ -0,0 +1,112 @@
+package com.zhjq.common.core.domain.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.zhjq.common.annotation.Excel;
+import com.zhjq.common.core.domain.BaseEntity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 栏目管理对象 zhjq_column
+ *
+ * @author lc
+ * @date 2024-12-16
+ */
+public class ZhjqColumn extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    private Long columnId;
+
+    /**
+     * 栏目名称
+     */
+    @Excel(name = "栏目名称")
+    private String columnName;
+
+    /**
+     * 父栏目ID
+     */
+    @Excel(name = "父栏目ID")
+    private Long parentId;
+
+    /**
+     * 显示顺序
+     */
+    @Excel(name = "显示顺序")
+    private Integer orderNum;
+    private String managerName;
+
+    public String getManagerName() {
+        return managerName;
+    }
+
+    public void setManagerName(String managerName) {
+        this.managerName = managerName;
+    }
+
+    /**
+     * 子菜单
+     */
+    private List<ZhjqColumn> children = new ArrayList<ZhjqColumn>();
+
+    public List<ZhjqColumn> getChildren() {
+        return children;
+    }
+
+    public void setChildren(List<ZhjqColumn> children) {
+        this.children = children;
+    }
+
+    public void setColumnId(Long columnId) {
+        this.columnId = columnId;
+    }
+
+    public Long getColumnId() {
+        return columnId;
+    }
+
+    public void setColumnName(String columnName) {
+        this.columnName = columnName;
+    }
+
+    public String getColumnName() {
+        return columnName;
+    }
+
+    public void setParentId(Long parentId) {
+        this.parentId = parentId;
+    }
+
+    public Long getParentId() {
+        return parentId;
+    }
+
+    public void setOrderNum(Integer orderNum) {
+        this.orderNum = orderNum;
+    }
+
+    public Integer getOrderNum() {
+        return orderNum;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("columnId", getColumnId())
+                .append("columnName", getColumnName())
+                .append("parentId", getParentId())
+                .append("orderNum", getOrderNum())
+                .append("createBy", getCreateBy())
+                .append("createTime", getCreateTime())
+                .append("updateBy", getUpdateBy())
+                .append("updateTime", getUpdateTime())
+                .append("remark", getRemark())
+                .append("managerName", getManagerName())
+                .toString();
+    }
+}

+ 1 - 1
zhjq-common/src/main/java/com/zhjq/common/utils/file/MimeTypeUtils.java

@@ -33,7 +33,7 @@ public class MimeTypeUtils {
             // 压缩文件
             "rar", "zip", "gz", "bz2",
             // 视频格式
-            "mp3", "mp4", "avi", "rmvb" ,
+            "mp3", "mp4", "avi", "rmvb",
             // pdf
             "pdf"};
 

+ 59 - 59
zhjq-generator/src/main/resources/vm/java/domain.java.vm

@@ -25,77 +25,77 @@ import com.zhjq.common.core.domain.TreeEntity;
 #end
 public class ${ClassName} extends ${Entity}
         {
-private static final long serialVersionUID = 1L;
+private static final long serialVersionUID=1L;
 
-    #foreach ($column in $columns)
-        #if(!$table.isSuperColumn($column.javaField))
-        /** $column.columnComment */
-            #if($column.list)
-                #set($parentheseIndex=$column.columnComment.indexOf("("))
-                #if($parentheseIndex != -1)
-                    #set($comment=$column.columnComment.substring(0, $parentheseIndex))
-                #else
-                    #set($comment=$column.columnComment)
-                #end
-                #if($parentheseIndex != -1)
-                @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-                #elseif($column.javaType == 'Date')
-                @JsonFormat(pattern = "yyyy-MM-dd")
-                @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd")
-                #else
-                @Excel(name = "${comment}")
-                #end
+#foreach ($column in $columns)
+    #if(!$table.isSuperColumn($column.javaField))
+    /** $column.columnComment */
+        #if($column.list)
+            #set($parentheseIndex=$column.columnComment.indexOf("("))
+            #if($parentheseIndex != -1)
+                #set($comment=$column.columnComment.substring(0, $parentheseIndex))
+            #else
+                #set($comment=$column.columnComment)
+            #end
+            #if($parentheseIndex != -1)
+            @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+            #elseif($column.javaType == 'Date')
+            @JsonFormat(pattern = "yyyy-MM-dd")
+            @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd")
+            #else
+            @Excel(name = "${comment}")
             #end
-        private $column.javaType $column.javaField;
-
         #end
-    #end
-    #if($table.sub)
-    /** $table.subTable.functionName信息 */
-    private List<${subClassName}> ${subclassName}List;
+    private $column.javaType $column.javaField;
 
     #end
-    #foreach ($column in $columns)
-        #if(!$table.isSuperColumn($column.javaField))
-            #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
-                #set($AttrName=$column.javaField)
-            #else
-                #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
-            #end
-        public void set${AttrName}($column.javaType $column.javaField) {
+#end
+#if($table.sub)
+/** $table.subTable.functionName信息 */
+private List<${subClassName}> ${subclassName}List;
+
+#end
+#foreach ($column in $columns)
+    #if(!$table.isSuperColumn($column.javaField))
+        #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
+            #set($AttrName=$column.javaField)
+        #else
+            #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+        #end
+    public void set${AttrName}($column.javaType $column.javaField){
             this.$column.javaField = $column.javaField;
-        }
+            }
 
-        public $column.javaType get${AttrName}() {
+    public $column.javaType get${AttrName}(){
             return $column.javaField;
-        }
-        #end
+            }
     #end
+#end
 
-    #if($table.sub)
-    public List<${subClassName}> get${subClassName}List() {
+#if($table.sub)
+public List<${subClassName}> get${subClassName}List(){
         return ${subclassName}List;
-    }
+        }
 
-    public void set${subClassName}List(List<${subClassName}> ${subclassName}List) {
-        this.${subclassName}List = ${subclassName}List;
-    }
+public void set${subClassName}List(List<${subClassName}> ${subclassName}List){
+        this.${subclassName}List= ${subclassName}List;
+        }
 
-    #end
+#end
 @Override
-public String toString() {
-    return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
-        #foreach ($column in $columns)
-            #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
-                #set($AttrName=$column.javaField)
-            #else
-                #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
-            #end
-        .append("${column.javaField}", get${AttrName}())
+public String toString(){
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+    #foreach ($column in $columns)
+        #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
+            #set($AttrName=$column.javaField)
+        #else
+            #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
         #end
-        #if($table.sub)
-                .append("${subclassName}List", get${subClassName}List())
-                #end
-            .toString();
-}
-}
+            .append("${column.javaField}",get${AttrName}())
+    #end
+    #if($table.sub)
+            .append("${subclassName}List",get${subClassName}List())
+    #end
+        .toString();
+        }
+        }

+ 1 - 1
zhjq-generator/src/main/resources/vm/java/mapper.java.vm

@@ -4,7 +4,7 @@ import java.util.List;
 
 import ${packageName}.domain.${ClassName};
 #if($table.sub)
-import ${packageName}.domain .${subClassName};
+import ${packageName}.domain.${subClassName};
 #end
 
 /**

+ 1 - 1
zhjq-generator/src/main/resources/vm/java/service.java.vm

@@ -2,7 +2,7 @@ package ${packageName}.service;
 
 import java.util.List;
 
-import ${packageName}.domain .${ClassName};
+import ${packageName}.domain.${ClassName};
 
 /**
  * ${functionName}Service接口

+ 47 - 47
zhjq-generator/src/main/resources/vm/java/sub-domain.java.vm

@@ -16,62 +16,62 @@ import com.zhjq.common.core.domain.BaseEntity;
  */
 public class ${subClassName} extends
 
-BaseEntity {
-    private static final long serialVersionUID = 1L;
+        BaseEntity{
+private static final long serialVersionUID=1L;
 
-    #foreach ($column in $subTable.columns)
-        #if(!$table.isSuperColumn($column.javaField))
-            /** $column.columnComment */
-            #if($column.list)
-                #set($parentheseIndex=$column.columnComment.indexOf("("))
-                #if($parentheseIndex != -1)
-                    #set($comment=$column.columnComment.substring(0, $parentheseIndex))
-                #else
-                    #set($comment=$column.columnComment)
-                #end
-                #if($parentheseIndex != -1)
-                @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
-                #elseif($column.javaType == 'Date')
-                @JsonFormat(pattern = "yyyy-MM-dd")
-                @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd")
-                #else
-                @Excel(name = "${comment}")
-                #end
+#foreach ($column in $subTable.columns)
+    #if(!$table.isSuperColumn($column.javaField))
+    /** $column.columnComment */
+        #if($column.list)
+            #set($parentheseIndex=$column.columnComment.indexOf("("))
+            #if($parentheseIndex != -1)
+                #set($comment=$column.columnComment.substring(0, $parentheseIndex))
+            #else
+                #set($comment=$column.columnComment)
             #end
-        private $column.javaType $column.javaField;
-
-        #end
-    #end
-    #foreach ($column in $subTable.columns)
-        #if(!$table.isSuperColumn($column.javaField))
-            #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
-                #set($AttrName=$column.javaField)
+            #if($parentheseIndex != -1)
+            @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+            #elseif($column.javaType == 'Date')
+            @JsonFormat(pattern = "yyyy-MM-dd")
+            @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd")
             #else
-                #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+            @Excel(name = "${comment}")
             #end
-            public void set${AttrName}($column.javaType $column.javaField)
+        #end
+    private $column.javaType $column.javaField;
+
+    #end
+#end
+#foreach ($column in $subTable.columns)
+    #if(!$table.isSuperColumn($column.javaField))
+        #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
+            #set($AttrName=$column.javaField)
+        #else
+            #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+        #end
+    public void set${AttrName}($column.javaType $column.javaField)
             {
-                this.$column.javaField = $column.javaField;
+            this.$column.javaField = $column.javaField;
             }
 
     public $column.javaType get${AttrName}()
             {
-                return $column.javaField;
+            return $column.javaField;
             }
-        #end
     #end
+#end
 
-    @Override
-    public String toString () {
-        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
-            #foreach ($column in $subTable.columns)
-                #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
-                    #set($AttrName=$column.javaField)
-                #else
-                    #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
-                #end
-                    .append("${column.javaField}", get${AttrName}())
-                    #end
-                .toString();
-    }
-}
+@Override
+public String toString(){
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+    #foreach ($column in $subTable.columns)
+        #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
+            #set($AttrName=$column.javaField)
+        #else
+            #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+        #end
+            .append("${column.javaField}",get${AttrName}())
+    #end
+        .toString();
+        }
+        }

+ 10 - 10
zhjq-generator/src/main/resources/vm/vue/index-tree.vue.vm

@@ -483,16 +483,16 @@
         [[$]]
         #refs["form"].validate(valid => {
           if (valid) {
-            #foreach($column in $columns)
-            #if($column.htmlType == "checkbox")
-            this.form.$column.javaField = this.form.$
-            {
-              column.javaField
-            }
-          .
-            join(",");
-            #end
-            #end
+              #foreach($column in $columns)
+                  #if($column.htmlType == "checkbox")
+                    this.form.$column.javaField = this.form.$
+                    {
+                      column.javaField
+                    }
+                  .
+                    join(",");
+                  #end
+              #end
             if (this.form.${
               pkColumn.javaField
             }

+ 248 - 248
zhjq-generator/src/main/resources/vm/vue/index.vue.vm

@@ -444,293 +444,293 @@
     created() {
       this.getList();
     },
-    methods: {
-      /** 查询${functionName}列表 */
-      getList() {
-        this.loading = true;
+  methods: {
+    /** 查询${functionName}列表 */
+    getList() {
+      this.loading = true;
+        #foreach ($column in $columns)
+            #if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+              this.queryParams.params = {};
+                #break
+            #end
+        #end
+        #foreach ($column in $columns)
+            #if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+                #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+              if (null != this.daterange${AttrName} && '' != this.daterange${AttrName}) {
+                this.queryParams.params["begin${AttrName}"] = this.daterange${AttrName}[0];
+                this.queryParams.params["end${AttrName}"] = this.daterange${AttrName}[1];
+              }
+            #end
+        #end
+      list${BusinessName}(this.queryParams).then(response => {
+        this.${businessName}List = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
           #foreach ($column in $columns)
-              #if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
-                this.queryParams.params = {};
-                  #break
+              #if($column.htmlType == "checkbox")
+                      $column.javaField: []#if($foreach.count != $columns.size()),#end
+              #else
+                      $column.javaField: null#if($foreach.count != $columns.size()),#end
               #end
           #end
+      };
+        #if($table.sub)
+          this.${subclassName}List = [];
+        #end
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+        #foreach ($column in $columns)
+            #if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+                #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+              this.daterange${AttrName} = [];
+            #end
+        #end
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.${pkColumn.javaField})
+      this.single = selection.length !== 1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加${functionName}";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const ${pkColumn.javaField} = row.${pkColumn.javaField} || this.ids
+      get${BusinessName}(${pkColumn.javaField}).then(response => {
+        this.form = response.data;
           #foreach ($column in $columns)
-              #if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
-                  #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
-                if (null != this.daterange${AttrName} && '' != this.daterange${AttrName}) {
-                  this.queryParams.params["begin${AttrName}"] = this.daterange${AttrName}[0];
-                  this.queryParams.params["end${AttrName}"] = this.daterange${AttrName}[1];
-                }
+              #if($column.htmlType == "checkbox")
+                this.form.$column.javaField = this.form.${column.javaField}.split(",");
               #end
           #end
-        list${BusinessName}(this.queryParams).then(response => {
-          this.${businessName}List = response.rows;
-          this.total = response.total;
-          this.loading = false;
-        });
-      },
-      // 取消按钮
-      cancel() {
-        this.open = false;
-        this.reset();
-      },
-      // 表单重置
-      reset() {
-        this.form = {
-            #foreach ($column in $columns)
-                #if($column.htmlType == "checkbox")
-                        $column.javaField: []#if($foreach.count != $columns.size()),#end
-                #else
-                        $column.javaField: null#if($foreach.count != $columns.size()),#end
-                #end
-            #end
-        };
           #if($table.sub)
-            this.${subclassName}List = [];
+            this.${subclassName}List = response.data.${subclassName}List;
           #end
-        this.resetForm("form");
-      },
-      /** 搜索按钮操作 */
-      handleQuery() {
-        this.queryParams.pageNum = 1;
-        this.getList();
-      },
-      /** 重置按钮操作 */
-      resetQuery() {
-          #foreach ($column in $columns)
-              #if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
-                  #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
-                this.daterange${AttrName} = [];
-              #end
-          #end
-        this.resetForm("queryForm");
-        this.handleQuery();
-      },
-      // 多选框选中数据
-      handleSelectionChange(selection) {
-        this.ids = selection.map(item => item.${pkColumn.javaField})
-        this.single = selection.length !== 1
-        this.multiple = !selection.length
-      },
-      /** 新增按钮操作 */
-      handleAdd() {
-        this.reset();
         this.open = true;
-        this.title = "添加${functionName}";
-      },
-      /** 修改按钮操作 */
-      handleUpdate(row) {
-        this.reset();
-        const ${pkColumn.javaField} = row.${pkColumn.javaField} || this.ids
-        get${BusinessName}(${pkColumn.javaField}).then(response => {
-          this.form = response.data;
-            #foreach ($column in $columns)
+        this.title = "修改${functionName}";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.
+    #
+      [[$]]
+      #refs["form"].validate(valid => {
+        if (valid) {
+            #foreach($column in $columns)
                 #if($column.htmlType == "checkbox")
-                  this.form.$column.javaField = this.form.${column.javaField}.split(",");
+                  this.form.$column.javaField = this.form.$
+                  {
+                    column.javaField
+                  }
+                .
+                  join(",");
                 #end
             #end
             #if($table.sub)
-              this.${subclassName}List = response.data.${subclassName}List;
-            #end
-          this.open = true;
-          this.title = "修改${functionName}";
-        });
-      },
-      /** 提交按钮 */
-      submitForm() {
-        this.
-      #
-        [[$]]
-        #refs["form"].validate(valid => {
-          if (valid) {
-            #foreach($column in $columns)
-            #if($column.htmlType == "checkbox")
-            this.form.$column.javaField = this.form.$
-            {
-              column.javaField
-            }
-          .
-            join(",");
-            #end
-            #end
-            #if($table.sub)
-            this.form.$
-            {
-              subclassName
-            }
-            List = this.$
-            {
-              subclassName
-            }
-            List;
-            #end
-            if (this.form.${
-              pkColumn.javaField
-            }
-          !=
-            null
-          )
-            {
-              update$
+              this.form.$
               {
-                BusinessName
+                subclassName
               }
-              (this.form).then(response => {
-                this.
-              #
-                [[$modal]]
-              #.
-                msgSuccess("修改成功");
-                this.open = false;
-                this.getList();
-              });
-            }
-          else
-            {
-              add$
+              List = this.$
               {
-                BusinessName
+                subclassName
               }
-              (this.form).then(response => {
-                this.
-              #
-                [[$modal]]
-              #.
-                msgSuccess("新增成功");
-                this.open = false;
-                this.getList();
-              });
+              List;
+            #end
+          if (this.form.${
+            pkColumn.javaField
+          }
+        !=
+          null
+        )
+          {
+            update$
+            {
+              BusinessName
             }
+            (this.form).then(response => {
+              this.
+            #
+              [[$modal]]
+            #.
+              msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
           }
-        });
-      },
-      /** 删除按钮操作 */
-      handleDelete(row) {
-        const ${pkColumn.javaField}s = row.$
+        else
+          {
+            add$
+            {
+              BusinessName
+            }
+            (this.form).then(response => {
+              this.
+            #
+              [[$modal]]
+            #.
+              msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ${pkColumn.javaField}s = row.$
+      {
+        pkColumn.javaField
+      }
+    ||
+      this.ids;
+      this.
+    #
+      [[$modal]]
+    #.
+      confirm('是否确认删除${functionName}编号为"' + ${pkColumn.javaField}s + '"的数据项?').then(function () {
+        return del$
         {
-          pkColumn.javaField
+          BusinessName
         }
-      ||
-        this.ids;
+        (${pkColumn.javaField}s);
+      }).then(() => {
+        this.getList();
         this.
       #
         [[$modal]]
       #.
-        confirm('是否确认删除${functionName}编号为"' + ${pkColumn.javaField}s + '"的数据项?').then(function () {
-          return del$
-          {
-            BusinessName
-          }
-          (${pkColumn.javaField}s);
-        }).then(() => {
-          this.getList();
-          this.
-        #
-          [[$modal]]
-        #.
-          msgSuccess("删除成功");
-        }).catch(() => {
-        });
-      },
+        msgSuccess("删除成功");
+      }).catch(() => {
+      });
+    },
       #if($table.sub
-  )
-  /** ${subTable.functionName}序号 */
-  row$
-  {
-    subClassName
-  }
-  Index({row, rowIndex})
-  {
-    row.index = rowIndex + 1;
-  }
-  ,
-  /** ${subTable.functionName}添加按钮操作 */
-  handleAdd$
-  {
-    subClassName
-  }
-  ()
-  {
-    let obj = {};
-    #foreach($column in $subTable.columns)
-    #if($column.pk || $column.javaField == ${subTableFkclassName})
-    #elseif($column.list && "" != $javaField)
-    obj.$column.javaField = "";
-    #end
-    #end
-    this.$
-    {
-      subclassName
-    }
-    List.push(obj);
-  }
-  ,
-  /** ${subTable.functionName}删除按钮操作 */
-  handleDelete$
-  {
-    subClassName
-  }
-  ()
-  {
-    if (this.checked${
-      subClassName
-    }
-  .
-    length == 0
-  )
-    {
-      this.
-    #
-      [[$modal]]
-    #.
-      msgError("请先选择要删除的${subTable.functionName}数据");
-    }
-  else
-    {
-      const ${subclassName}List = this.$
+      )
+        /** ${subTable.functionName}序号 */
+        row$
       {
-        subclassName
+        subClassName
       }
-      List;
-      const checked$
+      Index({row, rowIndex})
+      {
+        row.index = rowIndex + 1;
+      }
+      ,
+      /** ${subTable.functionName}添加按钮操作 */
+      handleAdd$
       {
         subClassName
       }
-      = this.checked$
+      ()
+      {
+        let obj = {};
+          #foreach($column in $subTable.columns)
+              #if($column.pk || $column.javaField == ${subTableFkclassName})
+              #elseif($column.list && "" != $javaField)
+                obj.$column.javaField = "";
+              #end
+          #end
+        this.$
+        {
+          subclassName
+        }
+        List.push(obj);
+      }
+      ,
+      /** ${subTable.functionName}删除按钮操作 */
+      handleDelete$
       {
         subClassName
       }
-      ;
-      this.$
+      ()
+      {
+        if (this.checked${
+          subClassName
+        }
+      .
+        length == 0
+      )
+        {
+          this.
+        #
+          [[$modal]]
+        #.
+          msgError("请先选择要删除的${subTable.functionName}数据");
+        }
+      else
+        {
+          const ${subclassName}List = this.$
+          {
+            subclassName
+          }
+          List;
+          const checked$
+          {
+            subClassName
+          }
+          = this.checked$
+          {
+            subClassName
+          }
+          ;
+          this.$
+          {
+            subclassName
+          }
+          List = ${subclassName}List.filter(function (item) {
+            return checked$
+            {
+              subClassName
+            }
+          .
+            indexOf(item.index) == -1
+          });
+        }
+      }
+      ,
+      /** 复选框选中数据 */
+      handle$
       {
-        subclassName
+        subClassName
       }
-      List = ${subclassName}List.filter(function (item) {
-        return checked$
+      SelectionChange(selection)
+      {
+        this.checked$
         {
           subClassName
         }
-      .
-        indexOf(item.index) == -1
-      });
-    }
-  }
-  ,
-  /** 复选框选中数据 */
-  handle$
-  {
-    subClassName
-  }
-  SelectionChange(selection)
-  {
-    this.checked$
-    {
-      subClassName
-    }
-    = selection.map(item => item.index)
-  }
-  ,
-  #end
+        = selection.map(item => item.index)
+      }
+      ,
+      #end
   /** 导出按钮操作 */
   handleExport()
   {

+ 10 - 10
zhjq-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm

@@ -453,16 +453,16 @@
     [[$]]
     #refs["${businessName}Ref"].validate(valid => {
       if (valid) {
-        #foreach($column in $columns)
-        #if($column.htmlType == "checkbox")
-        form.value.$column.javaField = form.value.$
-        {
-          column.javaField
-        }
-      .
-        join(",");
-        #end
-        #end
+          #foreach($column in $columns)
+              #if($column.htmlType == "checkbox")
+                form.value.$column.javaField = form.value.$
+                {
+                  column.javaField
+                }
+              .
+                join(",");
+              #end
+          #end
         if (form.value.${
           pkColumn.javaField
         }

+ 93 - 93
zhjq-generator/src/main/resources/vm/vue/v3/index.vue.vm

@@ -524,23 +524,23 @@
     [[$]]
     #refs["${businessName}Ref"].validate(valid => {
       if (valid) {
-        #foreach($column in $columns)
-        #if($column.htmlType == "checkbox")
-        form.value.$column.javaField = form.value.$
-        {
-          column.javaField
-        }
-      .
-        join(",");
-        #end
-        #end
-        #if($table.sub)
-        form.value.$
-        {
-          subclassName
-        }
-        List = ${subclassName}List.value;
-        #end
+          #foreach($column in $columns)
+              #if($column.htmlType == "checkbox")
+                form.value.$column.javaField = form.value.$
+                {
+                  column.javaField
+                }
+              .
+                join(",");
+              #end
+          #end
+          #if($table.sub)
+            form.value.$
+            {
+              subclassName
+            }
+            List = ${subclassName}List.value;
+          #end
         if (form.value.${
           pkColumn.javaField
         }
@@ -627,96 +627,96 @@
     });
   }
 
-  #if($table.sub)
-
-  /** ${subTable.functionName}序号 */
-  function row$ {
-    subClassName
-  }
-
-  Index({row, rowIndex})
-  {
-    row.index = rowIndex + 1;
-  }
+      #if($table.sub)
 
-  /** ${subTable.functionName}添加按钮操作 */
-  function handleAdd$ {
-    subClassName
-  }
+      /** ${subTable.functionName}序号 */
+      function row$ {
+        subClassName
+      }
 
-  ()
-  {
-    let obj = {};
-    #foreach($column in $subTable.columns)
-    #if($column.pk || $column.javaField == ${subTableFkclassName})
-    #elseif($column.list && "" != $javaField)
-    obj.$column.javaField = "";
-    #end
-    #end
-    ${subclassName}
-    List.value.push(obj);
-  }
+      Index({row, rowIndex})
+      {
+        row.index = rowIndex + 1;
+      }
 
-  /** ${subTable.functionName}删除按钮操作 */
-  function handleDelete$ {
-    subClassName
-  }
+      /** ${subTable.functionName}添加按钮操作 */
+      function handleAdd$ {
+        subClassName
+      }
 
-  ()
-  {
-    if (checked${
-      subClassName
-    }
-  .
-    value.length == 0
-  )
-    {
-      proxy.
-    #
-      [[$modal]]
-    #.
-      msgError("请先选择要删除的${subTable.functionName}数据");
-    }
-  else
-    {
-      const ${subclassName}s = ${subclassName}List.value;
-      const checked$
+      ()
       {
+        let obj = {};
+          #foreach($column in $subTable.columns)
+              #if($column.pk || $column.javaField == ${subTableFkclassName})
+              #elseif($column.list && "" != $javaField)
+                obj.$column.javaField = "";
+              #end
+          #end
+              ${subclassName}
+        List.value.push(obj);
+      }
+
+      /** ${subTable.functionName}删除按钮操作 */
+      function handleDelete$ {
         subClassName
       }
-      s = checked$
+
+      ()
       {
+        if (checked${
+          subClassName
+        }
+      .
+        value.length == 0
+      )
+        {
+          proxy.
+        #
+          [[$modal]]
+        #.
+          msgError("请先选择要删除的${subTable.functionName}数据");
+        }
+      else
+        {
+          const ${subclassName}s = ${subclassName}List.value;
+          const checked$
+          {
+            subClassName
+          }
+          s = checked$
+          {
+            subClassName
+          }
+        .
+          value;
+                ${subclassName}
+          List.value = ${subclassName}s.filter(function (item) {
+            return checked$
+            {
+              subClassName
+            }
+            s.indexOf(item.index) == -1
+          });
+        }
+      }
+
+      /** 复选框选中数据 */
+      function handle$ {
         subClassName
       }
-    .
-      value;
-      ${subclassName}
-      List.value = ${subclassName}s.filter(function (item) {
-        return checked$
+
+      SelectionChange(selection)
+      {
+        checked$
         {
           subClassName
         }
-        s.indexOf(item.index) == -1
-      });
-    }
-  }
-
-  /** 复选框选中数据 */
-  function handle$ {
-    subClassName
-  }
-
-  SelectionChange(selection)
-  {
-    checked$
-    {
-      subClassName
-    }
-  .
-    value = selection.map(item => item.index)
-  }
+      .
+        value = selection.map(item => item.index)
+      }
 
-  #end
+      #end
 
   /** 导出按钮操作 */
   function handleExport() {

+ 44 - 0
zhjq-ui/src/api/system/article.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询文章管理列表
+export function listArticle(query) {
+  return request({
+    url: '/app/article/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询文章管理详细
+export function getArticle(id) {
+  return request({
+    url: '/app/article/' + id,
+    method: 'get'
+  })
+}
+
+// 新增文章管理
+export function addArticle(data) {
+  return request({
+    url: '/app/article',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改文章管理
+export function updateArticle(data) {
+  return request({
+    url: '/app/article',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除文章管理
+export function delArticle(id) {
+  return request({
+    url: '/app/article/' + id,
+    method: 'delete'
+  })
+}

+ 61 - 0
zhjq-ui/src/api/system/column.js

@@ -0,0 +1,61 @@
+import request from '@/utils/request'
+
+// 查询栏目管理列表
+export function listColumn(query) {
+  return request({
+    url: '/app/column/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询栏目管理详细
+export function getColumn(columnId) {
+  return request({
+    url: '/app/column/' + columnId,
+    method: 'get'
+  })
+}
+
+// 新增栏目管理
+export function addColumn(data) {
+  return request({
+    url: '/app/column',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改栏目管理
+export function updateColumn(data) {
+  return request({
+    url: '/app/column',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除栏目管理
+export function delColumn(columnId) {
+  return request({
+    url: '/app/column/' + columnId,
+    method: 'delete'
+  })
+}
+
+// 查询栏目管理列表
+export function columnAllList(query) {
+  return request({
+    url: '/app/column/columnAllList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询菜单下拉树结构
+export function treeselect() {
+  return request({
+    url: '/app/column/treeselect',
+    method: 'get'
+  })
+}

+ 44 - 0
zhjq-ui/src/api/system/scenery.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询景点管理列表
+export function listScenery(query) {
+  return request({
+    url: '/app/scenery/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询景点管理详细
+export function getScenery(id) {
+  return request({
+    url: '/app/scenery/' + id,
+    method: 'get'
+  })
+}
+
+// 新增景点管理
+export function addScenery(data) {
+  return request({
+    url: '/app/scenery',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改景点管理
+export function updateScenery(data) {
+  return request({
+    url: '/app/scenery',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除景点管理
+export function delScenery(id) {
+  return request({
+    url: '/app/scenery/' + id,
+    method: 'delete'
+  })
+}

+ 28 - 28
zhjq-ui/src/api/system/voice.js

@@ -2,54 +2,54 @@ import request from '@/utils/request'
 
 // 查询语音播报列表
 export function listVoice(query) {
-    return request({
-        url: '/app/voice/list',
-        method: 'get',
-        params: query
-    })
+  return request({
+    url: '/app/voice/list',
+    method: 'get',
+    params: query
+  })
 }
 
 // 查询语音播报详细
 export function getVoice(id) {
-    return request({
-        url: '/app/voice/' + id,
-        method: 'get'
-    })
+  return request({
+    url: '/app/voice/' + id,
+    method: 'get'
+  })
 }
 
 // 新增语音播报
 export function addVoice(data) {
-    return request({
-        url: '/app/voice',
-        method: 'post',
-        data: data
-    })
+  return request({
+    url: '/app/voice',
+    method: 'post',
+    data: data
+  })
 }
 
 // 修改语音播报
 export function updateVoice(data) {
-    return request({
-        url: '/app/voice',
-        method: 'put',
-        data: data
-    })
+  return request({
+    url: '/app/voice',
+    method: 'put',
+    data: data
+  })
 }
 
 // 删除语音播报
 export function delVoice(id) {
-    return request({
-        url: '/app/voice/' + id,
-        method: 'delete'
-    })
+  return request({
+    url: '/app/voice/' + id,
+    method: 'delete'
+  })
 }
 
 // 生成二维码
 export function createQrCode(data) {
-    return request({
-        url: '/infra/QrCode/getQcCode',
-      method: 'post',
-      data: data
-    })
+  return request({
+    url: '/infra/QrCode/getQcCode',
+    method: 'post',
+    data: data
+  })
 }
 
 

+ 1 - 1
zhjq-ui/src/components/Crontab/day.vue

@@ -50,7 +50,7 @@
       <el-radio v-model='radioValue' :label="7">
         指定
         <el-select v-model="checkboxList" clearable multiple placeholder="可多选" style="width:100%">
-          <el-option v-for="item in 31" :key="item" :value="item">{{item}}</el-option>
+          <el-option v-for="item in 31" :key="item" :value="item">{{ item }}</el-option>
         </el-select>
       </el-radio>
     </el-form-item>

+ 1 - 1
zhjq-ui/src/components/Crontab/hour.vue

@@ -30,7 +30,7 @@
       <el-radio v-model='radioValue' :label="4">
         指定
         <el-select v-model="checkboxList" clearable multiple placeholder="可多选" style="width:100%">
-          <el-option v-for="item in 24" :key="item" :value="item-1">{{item-1}}</el-option>
+          <el-option v-for="item in 24" :key="item" :value="item-1">{{ item - 1 }}</el-option>
         </el-select>
       </el-radio>
     </el-form-item>

+ 9 - 9
zhjq-ui/src/components/Crontab/index.vue

@@ -70,33 +70,33 @@
         <p class="title">时间表达式</p>
         <table>
           <thead>
-          <th v-for="item of tabTitles" :key="item" width="40">{{item}}</th>
+          <th v-for="item of tabTitles" :key="item" width="40">{{ item }}</th>
           <th>Cron 表达式</th>
           </thead>
           <tbody>
           <td>
-            <span>{{crontabValueObj.second}}</span>
+            <span>{{ crontabValueObj.second }}</span>
           </td>
           <td>
-            <span>{{crontabValueObj.min}}</span>
+            <span>{{ crontabValueObj.min }}</span>
           </td>
           <td>
-            <span>{{crontabValueObj.hour}}</span>
+            <span>{{ crontabValueObj.hour }}</span>
           </td>
           <td>
-            <span>{{crontabValueObj.day}}</span>
+            <span>{{ crontabValueObj.day }}</span>
           </td>
           <td>
-            <span>{{crontabValueObj.month}}</span>
+            <span>{{ crontabValueObj.month }}</span>
           </td>
           <td>
-            <span>{{crontabValueObj.week}}</span>
+            <span>{{ crontabValueObj.week }}</span>
           </td>
           <td>
-            <span>{{crontabValueObj.year}}</span>
+            <span>{{ crontabValueObj.year }}</span>
           </td>
           <td>
-            <span>{{crontabValueString}}</span>
+            <span>{{ crontabValueString }}</span>
           </td>
           </tbody>
         </table>

+ 1 - 1
zhjq-ui/src/components/Crontab/min.vue

@@ -30,7 +30,7 @@
       <el-radio v-model='radioValue' :label="4">
         指定
         <el-select v-model="checkboxList" clearable multiple placeholder="可多选" style="width:100%">
-          <el-option v-for="item in 60" :key="item" :value="item-1">{{item-1}}</el-option>
+          <el-option v-for="item in 60" :key="item" :value="item-1">{{ item - 1 }}</el-option>
         </el-select>
       </el-radio>
     </el-form-item>

+ 1 - 1
zhjq-ui/src/components/Crontab/month.vue

@@ -30,7 +30,7 @@
       <el-radio v-model='radioValue' :label="4">
         指定
         <el-select v-model="checkboxList" clearable multiple placeholder="可多选" style="width:100%">
-          <el-option v-for="item in 12" :key="item" :value="item">{{item}}</el-option>
+          <el-option v-for="item in 12" :key="item" :value="item">{{ item }}</el-option>
         </el-select>
       </el-radio>
     </el-form-item>

+ 1 - 1
zhjq-ui/src/components/Crontab/result.vue

@@ -3,7 +3,7 @@
     <p class="title">最近5次运行时间</p>
     <ul class="popup-result-scroll">
       <template v-if='isShow'>
-        <li v-for='item in resultList' :key="item">{{item}}</li>
+        <li v-for='item in resultList' :key="item">{{ item }}</li>
       </template>
       <li v-else>计算结果中...</li>
     </ul>

+ 5 - 5
zhjq-ui/src/components/Crontab/week.vue

@@ -22,7 +22,7 @@
             :disabled="item.key === 1"
             :label="item.value"
             :value="item.key"
-          >{{item.value}}
+          >{{ item.value }}
           </el-option>
         </el-select>
         -
@@ -33,7 +33,7 @@
             :disabled="item.key < cycle01 && item.key !== 1"
             :label="item.value"
             :value="item.key"
-          >{{item.value}}
+          >{{ item.value }}
           </el-option>
         </el-select>
       </el-radio>
@@ -46,7 +46,7 @@
         周的星期
         <el-select v-model="average02" clearable>
           <el-option v-for="(item,index) of weekList" :key="index" :label="item.value" :value="item.key">
-            {{item.value}}
+            {{ item.value }}
           </el-option>
         </el-select>
       </el-radio>
@@ -57,7 +57,7 @@
         本月最后一个星期
         <el-select v-model="weekday" clearable>
           <el-option v-for="(item,index) of weekList" :key="index" :label="item.value" :value="item.key">
-            {{item.value}}
+            {{ item.value }}
           </el-option>
         </el-select>
       </el-radio>
@@ -68,7 +68,7 @@
         指定
         <el-select v-model="checkboxList" clearable multiple placeholder="可多选" style="width:100%">
           <el-option v-for="(item,index) of weekList" :key="index" :label="item.value" :value="String(item.key)">
-            {{item.value}}
+            {{ item.value }}
           </el-option>
         </el-select>
       </el-radio>

+ 2 - 2
zhjq-ui/src/components/FileUpload/index.vue

@@ -50,7 +50,7 @@ export default {
     // 数量限制
     limit: {
       type: Number,
-      default: 5,
+      default: 10,
     },
     // 大小限制(MB)
     fileSize: {
@@ -60,7 +60,7 @@ export default {
     // 文件类型, 例如['png', 'jpg', 'jpeg']
     fileType: {
       type: Array,
-      default: () => ["mp3", "mp4", "doc", "xls", "ppt", "txt", "pdf"],
+      default: () => ['png', 'jpg', 'jpeg', "mp3", "mp4", "doc", "xls", "ppt", "txt", "pdf"],
     },
     // 是否显示提示
     isShowTip: {

+ 4 - 2
zhjq-ui/src/layout/components/Sidebar/Logo.vue

@@ -1,10 +1,12 @@
 <template>
-  <div :class="{'collapse':collapse}" :style="{ backgroundColor: sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }"
+  <div :class="{'collapse':collapse}"
+       :style="{ backgroundColor: sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }"
        class="sidebar-logo-container">
     <transition name="sidebarLogoFade">
       <router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/">
         <img v-if="logo" :src="logo" class="sidebar-logo"/>
-        <h1 v-else :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }"
+        <h1 v-else
+            :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }"
             class="sidebar-title">
           {{ title }} </h1>
       </router-link>

+ 2 - 4
zhjq-ui/src/views/index.vue

@@ -5,11 +5,9 @@
 export default {
   name: "Index",
   data() {
-    return {
-    };
+    return {};
   },
-  methods: {
-  }
+  methods: {}
 };
 </script>
 

+ 2 - 1
zhjq-ui/src/views/monitor/logininfor/index.vue

@@ -106,7 +106,8 @@
               @selection-change="handleSelectionChange" @sort-change="handleSortChange">
       <el-table-column align="center" type="selection" width="55"/>
       <el-table-column align="center" label="访问编号" prop="infoId"/>
-      <el-table-column :show-overflow-tooltip="true" :sort-orders="['descending', 'ascending']" align="center" label="用户名称" prop="userName"
+      <el-table-column :show-overflow-tooltip="true" :sort-orders="['descending', 'ascending']" align="center"
+                       label="用户名称" prop="userName"
                        sortable="custom"/>
       <el-table-column :show-overflow-tooltip="true" align="center" label="登录地址" prop="ipaddr" width="130"/>
       <el-table-column :show-overflow-tooltip="true" align="center" label="登录地点" prop="loginLocation"/>

+ 6 - 3
zhjq-ui/src/views/monitor/operlog/index.vue

@@ -124,7 +124,8 @@
           <dict-tag :options="dict.type.sys_oper_type" :value="scope.row.businessType"/>
         </template>
       </el-table-column>
-      <el-table-column :show-overflow-tooltip="true" :sort-orders="['descending', 'ascending']" align="center" label="操作人员" prop="operName"
+      <el-table-column :show-overflow-tooltip="true" :sort-orders="['descending', 'ascending']" align="center"
+                       label="操作人员" prop="operName"
                        sortable="custom" width="110"/>
       <el-table-column :show-overflow-tooltip="true" align="center" label="操作地址" prop="operIp" width="130"/>
       <el-table-column :show-overflow-tooltip="true" align="center" label="操作地点" prop="operLocation"/>
@@ -133,13 +134,15 @@
           <dict-tag :options="dict.type.sys_common_status" :value="scope.row.status"/>
         </template>
       </el-table-column>
-      <el-table-column :sort-orders="['descending', 'ascending']" align="center" label="操作日期" prop="operTime" sortable="custom"
+      <el-table-column :sort-orders="['descending', 'ascending']" align="center" label="操作日期" prop="operTime"
+                       sortable="custom"
                        width="160">
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.operTime) }}</span>
         </template>
       </el-table-column>
-      <el-table-column :show-overflow-tooltip="true" :sort-orders="['descending', 'ascending']" align="center" label="消耗时间" prop="costTime"
+      <el-table-column :show-overflow-tooltip="true" :sort-orders="['descending', 'ascending']" align="center"
+                       label="消耗时间" prop="costTime"
                        sortable="custom" width="110">
         <template slot-scope="scope">
           <span>{{ scope.row.costTime }}毫秒</span>

+ 348 - 0
zhjq-ui/src/views/system/article/index.vue

@@ -0,0 +1,348 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="标题" prop="journalismName">
+        <el-input
+          v-model="queryParams.journalismName"
+          placeholder="请输入标题"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="排序" prop="sort">
+        <el-input
+          v-model="queryParams.sort"
+          placeholder="请输入排序"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="栏目" prop="columnId">
+        <el-input
+          v-model="queryParams.columnId"
+          placeholder="请输入栏目"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="作者" prop="author">
+        <el-input
+          v-model="queryParams.author"
+          placeholder="请输入作者"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:article:add']"
+        >新增
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:article:edit']"
+        >修改
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:article:remove']"
+        >删除
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:article:export']"
+        >导出
+        </el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="articleList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column label="标题" align="center" prop="journalismName"/>
+      <el-table-column label="排序" align="center" prop="sort"/>
+      <el-table-column label="栏目" align="center" prop="columnName"/>
+      <el-table-column label="作者" align="center" prop="author"/>
+      <el-table-column align="center" label="发布时间" prop="releaseTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.releaseTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:article:edit']"
+          >修改
+          </el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:article:remove']"
+          >删除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改文章管理对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="1000px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="标题" prop="journalismName">
+          <el-input v-model="form.journalismName" placeholder="请输入标题"/>
+        </el-form-item>
+        <el-form-item label="发布时间" prop="releaseTime">
+          <el-date-picker
+            v-model="form.releaseTime"
+            type="date"
+            placeholder="请选择发布时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="排序" prop="sort">
+          <el-input-number :min="1" v-model="value" placeholder="请输入排序"/>
+        </el-form-item>
+        <el-form-item label="栏目" prop="columnName">
+          <el-select v-model="form.columnId" filterable clearable placeholder="请选择栏目"
+                     style="width:340px"
+                     @change="onChange"
+          >
+            <el-option
+              v-for="item in columnList"
+              :key="item.index"
+              :label="item.columnName"
+              :value="item.columnId"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="作者" prop="author">
+          <el-input v-model="form.author" placeholder="请输入作者"/>
+        </el-form-item>
+        <el-form-item label="内容" prop="journalismContent">
+          <editor style="height: 300px" label="富文本控件" v-model="form.journalismContent"/>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {getArticle, listArticle, addArticle, updateArticle, delArticle} from "@/api/system/article";
+import {columnAllList} from "@/api/system/column";
+
+export default {
+  name: "Article",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 文章管理表格数据
+      articleList: [],
+      // 栏目数据
+      columnList: [],
+      // 栏目存储数据
+      tickets: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        journalismName: null,
+        journalismContent: null,
+        sort: 999,
+        columnId: null,
+        author: null,
+        releaseTime: null
+      },
+      value: 999,
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {}
+    };
+  },
+  created() {
+    this.getList();
+    this.getColumnList();
+  },
+  methods: {
+    onChange(e) {
+      this.form.tickets = this.columnList.filter((item) =>
+        e.includes(item.id)
+      )
+    },
+    /** 查询文章管理列表 */
+    getList() {
+      this.loading = true;
+      listArticle(this.queryParams).then(response => {
+        this.articleList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    /** 查询文章管理全部列表 */
+    getColumnList() {
+      this.loading = true;
+      columnAllList().then(response => {
+        this.columnList = response.data;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        journalismName: null,
+        journalismContent: null,
+        createTime: null,
+        sort: null,
+        columnId: null,
+        author: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+      this.getColumnList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length !== 1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.value = 999
+      this.open = true;
+      this.title = "添加文章管理";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getArticle(id).then(response => {
+        this.form = response.data;
+        this.value = this.form.sort
+        this.open = true;
+        this.title = "修改文章管理";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateArticle(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+              this.getColumnList();
+            });
+          } else {
+            addArticle(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+              this.getColumnList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除此条数据项?').then(function () {
+        return delArticle(ids);
+      }).then(() => {
+        this.getList();
+        this.getColumnList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {
+      });
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/article/export', {
+        ...this.queryParams
+      }, `article_${new Date().getTime()}.xlsx`)
+    }
+  }
+}
+;
+</script>

+ 383 - 0
zhjq-ui/src/views/system/column/index.vue

@@ -0,0 +1,383 @@
+<template>
+  <div class="app-container">
+    <el-row :gutter="20">
+      <!--部门数据-->
+      <el-col :span="4" :xs="24">
+        <div class="head-container">
+          <el-input
+            v-model="columnName"
+            placeholder="请输入栏目名称"
+            clearable
+            size="small"
+            prefix-icon="el-icon-search"
+            style="margin-bottom: 20px"
+          />
+        </div>
+        <div class="head-container">
+          <el-tree
+            :data="columnOptions"
+            :props="defaultProps"
+            :expand-on-click-node="false"
+            :filter-node-method="filterNode"
+            ref="tree"
+            node-key="id"
+            default-expand-all
+            highlight-current
+            @node-click="handleNodeClick"
+          />
+        </div>
+      </el-col>
+      <!--用户数据-->
+      <el-col :span="20" :xs="24">
+        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
+                 label-width="68px">
+          <el-form-item label="栏目名称" prop="columnName">
+            <el-input
+              v-model="queryParams.columnName"
+              placeholder="请输入栏目名称"
+              clearable
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+          </el-form-item>
+        </el-form>
+
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="1.5">
+            <el-button
+              type="primary"
+              plain
+              icon="el-icon-plus"
+              size="mini"
+              @click="handleAdd"
+              v-hasPermi="['system:column:add']"
+            >新增
+            </el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button
+              type="success"
+              plain
+              icon="el-icon-edit"
+              size="mini"
+              :disabled="single"
+              @click="handleUpdate"
+              v-hasPermi="['system:column:edit']"
+            >修改
+            </el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button
+              type="danger"
+              plain
+              icon="el-icon-delete"
+              size="mini"
+              :disabled="multiple"
+              @click="handleDelete"
+              v-hasPermi="['system:column:remove']"
+            >删除
+            </el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button
+              type="warning"
+              plain
+              icon="el-icon-download"
+              size="mini"
+              @click="handleExport"
+              v-hasPermi="['system:column:export']"
+            >导出
+            </el-button>
+          </el-col>
+          <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+        </el-row>
+
+        <el-table v-loading="loading" :data="columnList" @selection-change="handleSelectionChange">
+          <el-table-column type="selection" width="55" align="center"/>
+          <el-table-column label="栏目名称" align="center" prop="columnName"/>
+          <el-table-column label="显示顺序" align="center" prop="orderNum"/>
+          <el-table-column label="备注" align="center" prop="remark"/>
+          <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+            <template slot-scope="scope">
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-edit"
+                @click="handleUpdate(scope.row)"
+                v-hasPermi="['system:column:edit']"
+              >修改
+              </el-button>
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-delete"
+                @click="handleDelete(scope.row)"
+                v-hasPermi="['system:column:remove']"
+              >删除
+              </el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+
+        <pagination
+          v-show="total>0"
+          :total="total"
+          :page.sync="queryParams.pageNum"
+          :limit.sync="queryParams.pageSize"
+          @pagination="getList"
+        />
+      </el-col>
+    </el-row>
+
+    <!-- 添加或修改栏目管理对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="栏目名称" prop="columnName">
+          <el-input v-model="form.columnName" placeholder="请输入栏目名称"/>
+        </el-form-item>
+        <el-form-item label="上级菜单" prop="parentId">
+          <treeselect
+            v-model="form.parentId"
+            :options="menuOptions"
+            :normalizer="normalizer"
+            :show-count="true"
+            placeholder="选择上级菜单"
+          />
+        </el-form-item>
+        <el-form-item label="显示顺序" prop="orderNum">
+          <el-input v-model="form.orderNum" placeholder="请输入显示顺序"/>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"/>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  getColumn,
+  listColumn,
+  addColumn,
+  updateColumn,
+  delColumn,
+  treeselect,
+  columnAllList
+} from "@/api/system/column";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+
+export default {
+  name: "Column",
+  components: {Treeselect},
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 菜单树选项
+      menuOptions: [],
+      // 总条数
+      total: 0,
+      // 栏目名称
+      columnName: undefined,
+      // 栏目树选项
+      columnOptions: undefined,
+      // 栏目管理表格数据
+      columnList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        columnName: null,
+        parentId: null,
+        orderNum: null,
+        managerName: null,
+      },
+      // 表单参数
+      form: {},
+      defaultProps: {
+        children: "children",
+        label: "label"
+      },
+      // 表单校验
+      rules: {
+        columnName: [
+          {
+            required: true, message: "栏目名称不能为空", trigger: "blur"
+          }
+        ],
+      }
+    };
+  },
+  watch: {
+    // 根据名称筛选部门树
+    columnName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
+  created() {
+    this.getList();
+    this.getColumnTree();
+  },
+  methods: {
+    /** 查询栏目管理列表 */
+    getList() {
+      this.loading = true;
+      listColumn(this.queryParams).then(response => {
+        this.columnList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    /** 转换菜单数据结构 */
+    normalizer(node) {
+      if (node.children && !node.children.length) {
+        delete node.children;
+      }
+      return {
+        id: node.columnId,
+        label: node.columnName,
+        children: node.children
+      };
+    },
+    /** 查询栏目下拉树结构 */
+    getTreeselect() {
+      columnAllList().then(response => {
+        this.menuOptions = [];
+        const menu = {columnId: 0, columnName: '主类目', children: []};
+        menu.children = this.handleTree(response.data, "columnId");
+        this.menuOptions.push(menu);
+      });
+    },
+
+    /** 查询左侧下拉树结构 */
+    getColumnTree() {
+      treeselect().then(response => {
+        this.columnOptions = response.data;
+      });
+    },
+    // 筛选节点
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.label.indexOf(value) !== -1;
+    },
+    // 节点单击事件
+    handleNodeClick(data) {
+      console.log(data)
+      this.queryParams.columnId = data.id;
+      this.handleQuery();
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        columnId: null,
+        columnName: null,
+        parentId: 0,
+        orderNum: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        remark: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.columnId)
+      this.single = selection.length !== 1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd(row) {
+      this.reset();
+      this.getTreeselect();
+      this.open = true;
+      this.title = "添加栏目管理";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      this.getTreeselect();
+      const columnId = row.columnId || this.ids
+      getColumn(columnId).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改栏目管理";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.columnId != null) {
+            updateColumn(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addColumn(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      this.$modal.confirm('是否确认删除此条数据项?').then(function () {
+        return delColumn(row.columnId);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {
+      });
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/column/export', {
+        ...this.queryParams
+      }, `column_${new Date().getTime()}.xlsx`)
+    }
+  }
+}
+;
+</script>

+ 282 - 0
zhjq-ui/src/views/system/scenery/index.vue

@@ -0,0 +1,282 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="景点名称" prop="sceneryName">
+        <el-input
+          v-model="queryParams.sceneryName"
+          placeholder="请输入景点名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:scenery:add']"
+        >新增
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:scenery:edit']"
+        >修改
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:scenery:remove']"
+        >删除
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:scenery:export']"
+        >导出
+        </el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="sceneryList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column label="景点名称" align="center" prop="sceneryName"/>
+      <el-table-column label="经度" align="center" prop="longitude"/>
+      <el-table-column label="纬度" align="center" prop="latitude"/>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:scenery:edit']"
+          >修改
+          </el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:scenery:remove']"
+          >删除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改景点管理对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="景点名称" prop="sceneryName">
+          <el-input v-model="form.sceneryName" placeholder="请输入景点名称" maxlength="25"/>
+        </el-form-item>
+        <el-form-item label="经度" prop="longitude">
+          <el-input v-model="form.longitude" placeholder="请输入经度"/>
+        </el-form-item>
+        <el-form-item label="纬度" prop="latitude">
+          <el-input v-model="form.latitude" placeholder="请输入纬度"/>
+        </el-form-item>
+        <el-form-item label="景点内容">
+          <editor v-model="form.content" :min-height="192"/>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {getScenery, listScenery, addScenery, updateScenery, delScenery} from "@/api/system/scenery";
+
+export default {
+  name: "Scenery",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 景点管理表格数据
+      sceneryList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        sceneryName: null,
+        sceneryUrl: null,
+        content: null,
+        createName: null,
+        updateName: null,
+        longitude: null,
+        latitude: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        sceneryName: [
+          {required: true, message: "景点名称不能为空", trigger: "blur"}
+        ]
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询景点管理列表 */
+    getList() {
+      this.loading = true;
+      listScenery(this.queryParams).then(response => {
+        this.sceneryList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        sceneryName: null,
+        sceneryUrl: null,
+        content: null,
+        createBy: null,
+        createName: null,
+        createTime: null,
+        updateBy: null,
+        updateName: null,
+        updateTime: null,
+        longitude: null,
+        latitude: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length !== 1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加景点管理";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getScenery(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改景点管理";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateScenery(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addScenery(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除此条数据项?').then(function () {
+        return delScenery(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {
+      });
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/scenery/export', {
+        ...this.queryParams
+      }, `scenery_${new Date().getTime()}.xlsx`)
+    }
+  }
+}
+;
+</script>

+ 2 - 1
zhjq-ui/src/views/system/user/authRole.vue

@@ -17,7 +17,8 @@
     </el-form>
 
     <h4 class="form-header h4">角色信息</h4>
-    <el-table ref="table" v-loading="loading" :data="roles.slice((pageNum-1)*pageSize,pageNum*pageSize)" :row-key="getRowKey"
+    <el-table ref="table" v-loading="loading" :data="roles.slice((pageNum-1)*pageSize,pageNum*pageSize)"
+              :row-key="getRowKey"
               @row-click="clickRow" @selection-change="handleSelectionChange">
       <el-table-column align="center" label="序号" type="index">
         <template slot-scope="scope">

+ 20 - 10
zhjq-ui/src/views/system/user/index.vue

@@ -11,7 +11,8 @@
             </div>
             <div class="head-container">
               <el-tree ref="tree" :data="deptOptions" :expand-on-click-node="false"
-                       :filter-node-method="filterNode" :props="defaultProps" default-expand-all highlight-current node-key="id"
+                       :filter-node-method="filterNode" :props="defaultProps" default-expand-all highlight-current
+                       node-key="id"
                        @node-click="handleNodeClick"/>
             </div>
           </el-col>
@@ -36,7 +37,8 @@
                 </el-select>
               </el-form-item>
               <el-form-item label="创建时间">
-                <el-date-picker v-model="dateRange" end-placeholder="结束日期" range-separator="-" start-placeholder="开始日期"
+                <el-date-picker v-model="dateRange" end-placeholder="结束日期" range-separator="-"
+                                start-placeholder="开始日期"
                                 style="width: 240px" type="daterange"
                                 value-format="yyyy-MM-dd"></el-date-picker>
               </el-form-item>
@@ -53,12 +55,14 @@
                 </el-button>
               </el-col>
               <el-col :span="1.5">
-                <el-button v-hasPermi="['system:user:edit']" :disabled="single" icon="el-icon-edit" plain size="mini" type="success"
+                <el-button v-hasPermi="['system:user:edit']" :disabled="single" icon="el-icon-edit" plain size="mini"
+                           type="success"
                            @click="handleUpdate">修改
                 </el-button>
               </el-col>
               <el-col :span="1.5">
-                <el-button v-hasPermi="['system:user:remove']" :disabled="multiple" icon="el-icon-delete" plain size="mini"
+                <el-button v-hasPermi="['system:user:remove']" :disabled="multiple" icon="el-icon-delete" plain
+                           size="mini"
                            type="danger" @click="handleDelete">删除
                 </el-button>
               </el-col>
@@ -78,11 +82,14 @@
             <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
               <el-table-column align="center" type="selection" width="50"/>
               <el-table-column v-if="columns[0].visible" key="userId" align="center" label="用户编号" prop="userId"/>
-              <el-table-column v-if="columns[1].visible" key="userName" :show-overflow-tooltip="true" align="center" label="用户名称"
+              <el-table-column v-if="columns[1].visible" key="userName" :show-overflow-tooltip="true" align="center"
+                               label="用户名称"
                                prop="userName"/>
-              <el-table-column v-if="columns[2].visible" key="nickName" :show-overflow-tooltip="true" align="center" label="用户昵称"
+              <el-table-column v-if="columns[2].visible" key="nickName" :show-overflow-tooltip="true" align="center"
+                               label="用户昵称"
                                prop="nickName"/>
-              <el-table-column v-if="columns[3].visible" key="deptName" :show-overflow-tooltip="true" align="center" label="部门"
+              <el-table-column v-if="columns[3].visible" key="deptName" :show-overflow-tooltip="true" align="center"
+                               label="部门"
                                prop="dept.deptName"/>
               <el-table-column v-if="columns[4].visible" key="phonenumber" align="center" label="手机号码"
                                prop="phonenumber" width="120"/>
@@ -192,7 +199,8 @@
           <el-col :span="12">
             <el-form-item label="岗位">
               <el-select v-model="form.postIds" multiple placeholder="请选择岗位">
-                <el-option v-for="item in postOptions" :key="item.postId" :disabled="item.status == 1" :label="item.postName"
+                <el-option v-for="item in postOptions" :key="item.postId" :disabled="item.status == 1"
+                           :label="item.postName"
                            :value="item.postId"></el-option>
               </el-select>
             </el-form-item>
@@ -200,7 +208,8 @@
           <el-col :span="12">
             <el-form-item label="角色">
               <el-select v-model="form.roleIds" multiple placeholder="请选择角色">
-                <el-option v-for="item in roleOptions" :key="item.roleId" :disabled="item.status == 1" :label="item.roleName"
+                <el-option v-for="item in roleOptions" :key="item.roleId" :disabled="item.status == 1"
+                           :label="item.roleName"
                            :value="item.roleId"></el-option>
               </el-select>
             </el-form-item>
@@ -222,7 +231,8 @@
 
     <!-- 用户导入对话框 -->
     <el-dialog :title="upload.title" :visible.sync="upload.open" append-to-body width="400px">
-      <el-upload ref="upload" :action="upload.url + '?updateSupport=' + upload.updateSupport" :auto-upload="false" :disabled="upload.isUploading"
+      <el-upload ref="upload" :action="upload.url + '?updateSupport=' + upload.updateSupport" :auto-upload="false"
+                 :disabled="upload.isUploading"
                  :headers="upload.headers" :limit="1"
                  :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" accept=".xlsx, .xls" drag>
         <i class="el-icon-upload"></i>