浏览代码

景区管理

lchao 11 月之前
父节点
当前提交
f6c2a01e2e

+ 100 - 0
songhua-admin/src/main/java/com/songhua/web/controller/system/ScenicAreaManagementController.java

@@ -0,0 +1,100 @@
+package com.songhua.web.controller.system;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import com.songhua.common.annotation.Log;
+import com.songhua.common.core.controller.BaseController;
+import com.songhua.common.core.domain.AjaxResult;
+import com.songhua.common.enums.BusinessType;
+import com.songhua.system.domain.ScenicAreaManagement;
+import com.songhua.system.service.IScenicAreaManagementService;
+import com.songhua.common.utils.poi.ExcelUtil;
+import com.songhua.common.core.page.TableDataInfo;
+
+
+/**
+ * 景区管理Controller
+ *
+ * @author lc
+ * @date 2024-07-04
+ */
+@RestController
+@RequestMapping("/system/management")
+public class ScenicAreaManagementController extends BaseController
+{
+    @Autowired
+    private IScenicAreaManagementService scenicAreaManagementService;
+
+    /**
+     * 查询景区管理列表
+     */
+    @GetMapping("/list")
+    public TableDataInfo list(ScenicAreaManagement scenicAreaManagement)
+    {
+        startPage();
+        List<ScenicAreaManagement> list = scenicAreaManagementService.selectScenicAreaManagementList(scenicAreaManagement);
+        return getDataTable(list);
+    }
+
+    /**
+     * 手机端查询景区管理列表
+     */
+    @GetMapping("/appList")
+    public AjaxResult appList(ScenicAreaManagement scenicAreaManagement) {
+        return success(scenicAreaManagementService.selectScenicAreaManagementList(scenicAreaManagement));
+    }
+
+    /**
+     * 导出景区管理列表
+     */
+    @Log(title = "景区管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ScenicAreaManagement scenicAreaManagement)
+    {
+        List<ScenicAreaManagement> list = scenicAreaManagementService.selectScenicAreaManagementList(scenicAreaManagement);
+        ExcelUtil<ScenicAreaManagement> util = new ExcelUtil<>(ScenicAreaManagement.class);
+        util.exportExcel(response, list, "景区管理数据");
+    }
+
+    /**
+     * 获取景区管理详细信息
+     */
+    @GetMapping("/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(scenicAreaManagementService.selectScenicAreaManagementById(id));
+    }
+
+    /**
+     * 新增景区管理
+     */
+    @Log(title = "景区管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ScenicAreaManagement scenicAreaManagement)
+    {
+        return toAjax(scenicAreaManagementService.insertScenicAreaManagement(scenicAreaManagement));
+    }
+
+    /**
+     * 修改景区管理
+     */
+    @Log(title = "景区管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody ScenicAreaManagement scenicAreaManagement)
+    {
+        return toAjax(scenicAreaManagementService.updateScenicAreaManagement(scenicAreaManagement));
+    }
+
+    /**
+     * 删除景区管理
+     */
+    @Log(title = "景区管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(scenicAreaManagementService.deleteScenicAreaManagementByIds(ids));
+    }
+}

+ 2 - 2
songhua-admin/src/main/resources/application.yml

@@ -57,9 +57,9 @@ spring:
   servlet:
   servlet:
     multipart:
     multipart:
       # 单个文件大小
       # 单个文件大小
-      max-file-size: 10MB
+      max-file-size: 1000MB
       # 设置总上传的文件大小
       # 设置总上传的文件大小
-      max-request-size: 20MB
+      max-request-size: 2000MB
   # 服务模块
   # 服务模块
   devtools:
   devtools:
     restart:
     restart:

+ 1 - 1
songhua-common/src/main/java/com/songhua/common/utils/file/FileUploadUtils.java

@@ -25,7 +25,7 @@ public class FileUploadUtils
     /**
     /**
      * 默认大小 50M
      * 默认大小 50M
      */
      */
-    public static final long DEFAULT_MAX_SIZE = 50 * 1024 * 1024;
+    public static final long DEFAULT_MAX_SIZE = 2000 * 1024 * 1024;
 
 
     /**
     /**
      * 默认的文件名最大长度 100
      * 默认的文件名最大长度 100

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

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

+ 1 - 1
songhua-framework/src/main/java/com/songhua/framework/config/SecurityConfig.java

@@ -111,7 +111,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 // 过滤请求
                 // 过滤请求
                 .authorizeRequests()
                 .authorizeRequests()
                 // 对于登录login 注册register 验证码captchaImage 允许匿名访问
                 // 对于登录login 注册register 验证码captchaImage 允许匿名访问
-                .antMatchers("/login", "/register", "/captchaImage","/sso/doLoginByTicket","/sso/logout","/selectParkData").permitAll()
+                .antMatchers("/login", "/register", "/captchaImage","/sso/doLoginByTicket","/sso/logout","/selectParkData","/system/management/appList").permitAll()
                 // 静态资源,可匿名访问
                 // 静态资源,可匿名访问
                 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                 .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
                 .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()

+ 107 - 0
songhua-system/src/main/java/com/songhua/system/domain/ScenicAreaManagement.java

@@ -0,0 +1,107 @@
+package com.songhua.system.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.songhua.common.annotation.Excel;
+import com.songhua.common.core.domain.BaseEntity;
+
+/**
+ * 景区管理对象 scenic_area_management
+ * 
+ * @author lc
+ * @date 2024-07-04
+ */
+public class ScenicAreaManagement extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id */
+    private Long id;
+
+    /** 景点名称 */
+    @Excel(name = "景点名称")
+    private String scenicName;
+
+    /** 景点半径 */
+    @Excel(name = "景点半径")
+    private String radius;
+
+    /** 景点坐标 */
+    @Excel(name = "景点经度")
+    private Double longitude;
+    @Excel(name = "景点纬度")
+    private Double latitude;
+
+    public Double getLongitude() {
+        return longitude;
+    }
+
+    public void setLongitude(Double longitude) {
+        this.longitude = longitude;
+    }
+
+    public Double getLatitude() {
+        return latitude;
+    }
+
+    public void setLatitude(Double latitude) {
+        this.latitude = latitude;
+    }
+
+    /** 文件 */
+    @Excel(name = "文件")
+    private String scenicFile;
+
+
+
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setScenicName(String scenicName) 
+    {
+        this.scenicName = scenicName;
+    }
+
+    public String getScenicName() 
+    {
+        return scenicName;
+    }
+    public void setRadius(String radius) 
+    {
+        this.radius = radius;
+    }
+
+    public String getRadius() 
+    {
+        return radius;
+    }
+
+    public void setScenicFile(String scenicFile) 
+    {
+        this.scenicFile = scenicFile;
+    }
+
+    public String getScenicFile() 
+    {
+        return scenicFile;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("scenicName", getScenicName())
+            .append("radius", getRadius())
+            .append("scenicFile", getScenicFile())
+            .append("longitude", getLongitude())
+            .append("latitude", getLatitude())
+            .toString();
+    }
+}

+ 61 - 0
songhua-system/src/main/java/com/songhua/system/mapper/ScenicAreaManagementMapper.java

@@ -0,0 +1,61 @@
+package com.songhua.system.mapper;
+
+import java.util.List;
+import com.songhua.system.domain.ScenicAreaManagement;
+
+/**
+ * 景区管理Mapper接口
+ * 
+ * @author lc
+ * @date 2024-07-04
+ */
+public interface ScenicAreaManagementMapper 
+{
+    /**
+     * 查询景区管理
+     * 
+     * @param id 景区管理主键
+     * @return 景区管理
+     */
+    public ScenicAreaManagement selectScenicAreaManagementById(Long id);
+
+    /**
+     * 查询景区管理列表
+     * 
+     * @param scenicAreaManagement 景区管理
+     * @return 景区管理集合
+     */
+    public List<ScenicAreaManagement> selectScenicAreaManagementList(ScenicAreaManagement scenicAreaManagement);
+
+    /**
+     * 新增景区管理
+     * 
+     * @param scenicAreaManagement 景区管理
+     * @return 结果
+     */
+    public int insertScenicAreaManagement(ScenicAreaManagement scenicAreaManagement);
+
+    /**
+     * 修改景区管理
+     * 
+     * @param scenicAreaManagement 景区管理
+     * @return 结果
+     */
+    public int updateScenicAreaManagement(ScenicAreaManagement scenicAreaManagement);
+
+    /**
+     * 删除景区管理
+     * 
+     * @param id 景区管理主键
+     * @return 结果
+     */
+    public int deleteScenicAreaManagementById(Long id);
+
+    /**
+     * 批量删除景区管理
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteScenicAreaManagementByIds(Long[] ids);
+}

+ 61 - 0
songhua-system/src/main/java/com/songhua/system/service/IScenicAreaManagementService.java

@@ -0,0 +1,61 @@
+package com.songhua.system.service;
+
+import java.util.List;
+import com.songhua.system.domain.ScenicAreaManagement;
+
+/**
+ * 景区管理Service接口
+ * 
+ * @author lc
+ * @date 2024-07-04
+ */
+public interface IScenicAreaManagementService 
+{
+    /**
+     * 查询景区管理
+     * 
+     * @param id 景区管理主键
+     * @return 景区管理
+     */
+    public ScenicAreaManagement selectScenicAreaManagementById(Long id);
+
+    /**
+     * 查询景区管理列表
+     * 
+     * @param scenicAreaManagement 景区管理
+     * @return 景区管理集合
+     */
+    public List<ScenicAreaManagement> selectScenicAreaManagementList(ScenicAreaManagement scenicAreaManagement);
+
+    /**
+     * 新增景区管理
+     * 
+     * @param scenicAreaManagement 景区管理
+     * @return 结果
+     */
+    public int insertScenicAreaManagement(ScenicAreaManagement scenicAreaManagement);
+
+    /**
+     * 修改景区管理
+     * 
+     * @param scenicAreaManagement 景区管理
+     * @return 结果
+     */
+    public int updateScenicAreaManagement(ScenicAreaManagement scenicAreaManagement);
+
+    /**
+     * 批量删除景区管理
+     * 
+     * @param ids 需要删除的景区管理主键集合
+     * @return 结果
+     */
+    public int deleteScenicAreaManagementByIds(Long[] ids);
+
+    /**
+     * 删除景区管理信息
+     * 
+     * @param id 景区管理主键
+     * @return 结果
+     */
+    public int deleteScenicAreaManagementById(Long id);
+}

+ 93 - 0
songhua-system/src/main/java/com/songhua/system/service/impl/ScenicAreaManagementServiceImpl.java

@@ -0,0 +1,93 @@
+package com.songhua.system.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.songhua.system.mapper.ScenicAreaManagementMapper;
+import com.songhua.system.domain.ScenicAreaManagement;
+import com.songhua.system.service.IScenicAreaManagementService;
+
+/**
+ * 景区管理Service业务层处理
+ * 
+ * @author lc
+ * @date 2024-07-04
+ */
+@Service
+public class ScenicAreaManagementServiceImpl implements IScenicAreaManagementService 
+{
+    @Autowired
+    private ScenicAreaManagementMapper scenicAreaManagementMapper;
+
+    /**
+     * 查询景区管理
+     * 
+     * @param id 景区管理主键
+     * @return 景区管理
+     */
+    @Override
+    public ScenicAreaManagement selectScenicAreaManagementById(Long id)
+    {
+        return scenicAreaManagementMapper.selectScenicAreaManagementById(id);
+    }
+
+    /**
+     * 查询景区管理列表
+     * 
+     * @param scenicAreaManagement 景区管理
+     * @return 景区管理
+     */
+    @Override
+    public List<ScenicAreaManagement> selectScenicAreaManagementList(ScenicAreaManagement scenicAreaManagement)
+    {
+        return scenicAreaManagementMapper.selectScenicAreaManagementList(scenicAreaManagement);
+    }
+
+    /**
+     * 新增景区管理
+     * 
+     * @param scenicAreaManagement 景区管理
+     * @return 结果
+     */
+    @Override
+    public int insertScenicAreaManagement(ScenicAreaManagement scenicAreaManagement)
+    {
+        return scenicAreaManagementMapper.insertScenicAreaManagement(scenicAreaManagement);
+    }
+
+    /**
+     * 修改景区管理
+     * 
+     * @param scenicAreaManagement 景区管理
+     * @return 结果
+     */
+    @Override
+    public int updateScenicAreaManagement(ScenicAreaManagement scenicAreaManagement)
+    {
+        return scenicAreaManagementMapper.updateScenicAreaManagement(scenicAreaManagement);
+    }
+
+    /**
+     * 批量删除景区管理
+     * 
+     * @param ids 需要删除的景区管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteScenicAreaManagementByIds(Long[] ids)
+    {
+        return scenicAreaManagementMapper.deleteScenicAreaManagementByIds(ids);
+    }
+
+    /**
+     * 删除景区管理信息
+     * 
+     * @param id 景区管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteScenicAreaManagementById(Long id)
+    {
+        return scenicAreaManagementMapper.deleteScenicAreaManagementById(id);
+    }
+}

+ 76 - 0
songhua-system/src/main/resources/mapper/system/ScenicAreaManagementMapper.xml

@@ -0,0 +1,76 @@
+<?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.songhua.system.mapper.ScenicAreaManagementMapper">
+    
+    <resultMap type="ScenicAreaManagement" id="ScenicAreaManagementResult">
+        <result property="id"    column="id"    />
+        <result property="scenicName"    column="scenic_name"    />
+        <result property="radius"    column="radius"    />
+        <result property="longitude"    column="longitude"    />
+        <result property="latitude"    column="latitude"    />
+        <result property="scenicFile"    column="scenic_file"    />
+    </resultMap>
+
+    <sql id="selectScenicAreaManagementVo">
+        select id, scenic_name, radius, longitude,latitude, scenic_file from scenic_area_management
+    </sql>
+
+    <select id="selectScenicAreaManagementList" parameterType="ScenicAreaManagement" resultMap="ScenicAreaManagementResult">
+        <include refid="selectScenicAreaManagementVo"/>
+        <where>  
+            <if test="scenicName != null  and scenicName != ''"> and scenic_name like concat('%', #{scenicName}, '%')</if>
+            <if test="radius != null  and radius != ''"> and radius = #{radius}</if>
+            <if test="scenicFile != null  and scenicFile != ''"> and scenic_file = #{scenicFile}</if>
+        </where>
+    </select>
+    
+    <select id="selectScenicAreaManagementById" parameterType="Long" resultMap="ScenicAreaManagementResult">
+        <include refid="selectScenicAreaManagementVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertScenicAreaManagement" parameterType="ScenicAreaManagement">
+        insert into scenic_area_management
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="scenicName != null">scenic_name,</if>
+            <if test="radius != null">radius,</if>
+            <if test="longitude != null">longitude,</if>
+            <if test="latitude != null">latitude,</if>
+            <if test="scenicFile != null">scenic_file,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="scenicName != null">#{scenicName},</if>
+            <if test="radius != null">#{radius},</if>
+            <if test="longitude != null">#{longitude},</if>
+            <if test="latitude != null">#{latitude},</if>
+            <if test="scenicFile != null">#{scenicFile},</if>
+         </trim>
+    </insert>
+
+    <update id="updateScenicAreaManagement" parameterType="ScenicAreaManagement">
+        update scenic_area_management
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="scenicName != null">scenic_name = #{scenicName},</if>
+            <if test="radius != null">radius = #{radius},</if>
+            <if test="longitude != null">longitude = #{longitude},</if>
+            <if test="latitude != null">latitude = #{latitude},</if>
+            <if test="scenicFile != null">scenic_file = #{scenicFile},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteScenicAreaManagementById" parameterType="Long">
+        delete from scenic_area_management where id = #{id}
+    </delete>
+
+    <delete id="deleteScenicAreaManagementByIds" parameterType="String">
+        delete from scenic_area_management where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 44 - 0
songhua-ui/src/api/system/management.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询景区管理列表
+export function listManagement(query) {
+  return request({
+    url: '/system/management/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询景区管理详细
+export function getManagement(id) {
+  return request({
+    url: '/system/management/' + id,
+    method: 'get'
+  })
+}
+
+// 新增景区管理
+export function addManagement(data) {
+  return request({
+    url: '/system/management',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改景区管理
+export function updateManagement(data) {
+  return request({
+    url: '/system/management',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除景区管理
+export function delManagement(id) {
+  return request({
+    url: '/system/management/' + id,
+    method: 'delete'
+  })
+}

+ 225 - 0
songhua-ui/src/components/FileUpload/index1.vue

@@ -0,0 +1,225 @@
+<template>
+  <div class="upload-file">
+    <el-upload
+      multiple
+      :action="uploadFileUrl"
+      :before-upload="handleBeforeUpload"
+      :file-list="fileList"
+      :limit="limit"
+      :on-error="handleUploadError"
+      :on-exceed="handleExceed"
+      :on-success="handleUploadSuccess"
+      :show-file-list="false"
+      :headers="headers"
+      class="upload-file-uploader"
+      ref="fileUpload"
+    >
+      <!-- 上传按钮 -->
+      <el-button size="mini" type="primary">选取文件</el-button>
+      <!-- 上传提示 -->
+      <div class="el-upload__tip" slot="tip" v-if="showTip">
+        请上传
+        <template v-if="fileSize"> 大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b> </template>
+        <template v-if="fileType"> 格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b> </template>
+        的文件
+      </div>
+    </el-upload>
+
+    <!-- 文件列表 -->
+    <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear" tag="ul">
+      <li :key="file.url" class="el-upload-list__item ele-upload-list__item-content" v-for="(file, index) in fileList">
+        <el-link :href="`${baseUrl}${file.url}`" :underline="false" target="_blank">
+          <span class="el-icon-document"> {{ getFileName(file.name) }} </span>
+        </el-link>
+        <div class="ele-upload-list__item-content-action">
+          <el-link :underline="false" @click="handleDelete(index)" type="danger">删除</el-link>
+        </div>
+      </li>
+    </transition-group>
+  </div>
+</template>
+
+<script>
+import { getToken } from "@/utils/auth";
+
+export default {
+  name: "ScenicFileUpload",
+  props: {
+    // 值
+    value: [String, Object, Array],
+    // 数量限制
+    limit: {
+      type: Number,
+      default: 5,
+    },
+    // 大小限制(MB)
+    fileSize: {
+      type: Number,
+      default: 1000,
+    },
+    // 文件类型, 例如['png', 'jpg', 'jpeg']
+    fileType: {
+      type: Array,
+      default: () => [
+        // 图片
+        "bmp", "gif", "jpg", "psd", "png",
+        // word excel powerpoint
+        "doc", "docx", "xls", "xlsx", "pdf", "wps","txt","mp3",
+        // 压缩文件
+        "rar", "zip", "z",
+        // 视频格式
+        "wmv","asf","rm", "rmvb","mov","mp4","avi",
+        ],
+    },
+    // 是否显示提示
+    isShowTip: {
+      type: Boolean,
+      default: true
+    }
+  },
+  data() {
+    return {
+      number: 0,
+      uploadList: [],
+      baseUrl: process.env.VUE_APP_BASE_API,
+      uploadFileUrl: process.env.VUE_APP_BASE_API + "/common/upload", // 上传文件服务器地址
+      headers: {
+        Authorization: "Bearer " + getToken(),
+      },
+      fileList: [],
+    };
+  },
+  watch: {
+    value: {
+      handler(val) {
+        if (val) {
+          let temp = 1;
+          // 首先将值转为数组
+          const list = Array.isArray(val) ? val : this.value.split(',');
+          // 然后将数组转为对象数组
+          this.fileList = list.map(item => {
+            if (typeof item === "string") {
+              item = { name: item, url: item };
+            }
+            item.uid = item.uid || new Date().getTime() + temp++;
+            return item;
+          });
+        } else {
+          this.fileList = [];
+          return [];
+        }
+      },
+      deep: true,
+      immediate: true
+    }
+  },
+  computed: {
+    // 是否显示提示
+    showTip() {
+      return this.isShowTip && (this.fileType || this.fileSize);
+    },
+  },
+  methods: {
+    // 上传前校检格式和大小
+    handleBeforeUpload(file) {
+      // 校检文件类型
+      if (this.fileType) {
+        const fileName = file.name.toLowerCase(); // 将文件名转换为小写
+        const fileExt = fileName.split('.').pop(); // 获取文件后缀名
+        const isTypeOk = this.fileType.indexOf(fileExt) >= 0;
+        if (!isTypeOk) {
+          this.$modal.msgError(`文件格式不正确, 请上传${this.fileType.join("/")}格式文件!`);
+          return false;
+        }
+      }
+      // 校检文件大小
+      if (this.fileSize) {
+        const isLt = file.size / 1024 / 1024 < this.fileSize;
+        if (!isLt) {
+          this.$modal.msgError(`上传文件大小不能超过 ${this.fileSize} MB!`);
+          return false;
+        }
+      }
+      this.$modal.loading("正在上传文件,请稍候...");
+      this.number++;
+      return true;
+    },
+    // 文件个数超出
+    handleExceed() {
+      this.$modal.msgError(`上传文件数量不能超过 ${this.limit} 个!`);
+    },
+    // 上传失败
+    handleUploadError(err) {
+      this.$modal.msgError("上传文件失败,请重试");
+      this.$modal.closeLoading();
+    },
+    // 上传成功回调
+    handleUploadSuccess(res, file) {
+      if (res.code === 200) {
+        this.uploadList.push({ name: res.fileName, url: res.fileName });
+        this.uploadedSuccessfully();
+      } else {
+        this.number--;
+        this.$modal.closeLoading();
+        this.$modal.msgError(res.msg);
+        this.$refs.fileUpload.handleRemove(file);
+        this.uploadedSuccessfully();
+      }
+    },
+    // 删除文件
+    handleDelete(index) {
+      this.fileList.splice(index, 1);
+      this.$emit("input", this.listToString(this.fileList));
+    },
+    // 上传结束处理
+    uploadedSuccessfully() {
+      if (this.number > 0 && this.uploadList.length === this.number) {
+        this.fileList = this.fileList.concat(this.uploadList);
+        this.uploadList = [];
+        this.number = 0;
+        this.$emit("input", this.listToString(this.fileList));
+        this.$modal.closeLoading();
+      }
+    },
+    // 获取文件名称
+    getFileName(name) {
+      // 如果是url那么取最后的名字 如果不是直接返回
+      if (name.lastIndexOf("/") > -1) {
+        return name.slice(name.lastIndexOf("/") + 1);
+      } else {
+        return name;
+      }
+    },
+    // 对象转成指定字符串分隔
+    listToString(list, separator) {
+      let strs = "";
+      separator = separator || ",";
+      for (let i in list) {
+        strs += list[i].url + separator;
+      }
+      return strs != '' ? strs.substr(0, strs.length - 1) : '';
+    }
+  }
+};
+</script>
+
+<style scoped lang="scss">
+.upload-file-uploader {
+  margin-bottom: 5px;
+}
+.upload-file-list .el-upload-list__item {
+  border: 1px solid #e4e7ed;
+  line-height: 2;
+  margin-bottom: 10px;
+  position: relative;
+}
+.upload-file-list .ele-upload-list__item-content {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  color: inherit;
+}
+.ele-upload-list__item-content-action .el-link {
+  margin-right: 10px;
+}
+</style>

+ 259 - 0
songhua-ui/src/views/system/management/index.vue

@@ -0,0 +1,259 @@
+<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="scenicName">
+        <el-input
+          v-model="queryParams.scenicName"
+          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:management: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:management: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:management:remove']"
+        >删除</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="managementList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="景点名称" align="center" prop="scenicName" />
+      <el-table-column label="景点半径" align="center" prop="radius" />
+      <el-table-column label="景点经度" align="center" prop="longitude" />
+      <el-table-column label="景点纬度" align="center" prop="latitude" />
+<!--      <el-table-column label="文件" align="center" prop="scenicFile" />-->
+      <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:management:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:management: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="scenicName">
+          <el-input v-model="form.scenicName" placeholder="请输入景点名称" />
+        </el-form-item>
+        <el-form-item label="景点半径" prop="radius">
+          <el-input v-model="form.radius" placeholder="请输入景点半径" />
+        </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="文件" prop="scenicFile">
+          <scenic-file-upload v-model="form.scenicFile"/>
+        </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 { listManagement, getManagement, delManagement, addManagement, updateManagement } from "@/api/system/management";
+import ScenicFileUpload from "@/components/FileUpload/index1.vue";
+
+export default {
+  name: "Management",
+  components: {ScenicFileUpload},
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 景区管理表格数据
+      managementList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        scenicName: null,
+        radius: null,
+        longitude: null,
+        latitude: null,
+        scenicFile: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询景区管理列表 */
+    getList() {
+      this.loading = true;
+      listManagement(this.queryParams).then(response => {
+        this.managementList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        scenicName: null,
+        radius: null,
+        longitude: null,
+        latitude: null,
+        scenicFile: 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
+      getManagement(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) {
+            updateManagement(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addManagement(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除景区管理编号为"' + ids + '"的数据项?').then(function() {
+        return delManagement(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/management/export', {
+        ...this.queryParams
+      }, `management_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>