From 6e02d909993b169d02c4303f59f7284f56e50d19 Mon Sep 17 00:00:00 2001 From: dmz Date: Fri, 5 Dec 2025 23:08:56 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=95=E4=B8=80=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- amms_front/eslint.config.js | 17 + amms_front/public/favicon.ico | Bin 0 -> 4286 bytes amms_front/src/api/carousel.js | 41 +++ amms_front/src/api/file.js | 2 + amms_front/src/assets/home1.png | Bin 0 -> 6775 bytes amms_front/src/components/Editor.vue | 152 ++++++++ amms_front/src/components/HLayout.vue | 276 ++++++++++++++ amms_front/src/utils/common.js | 32 ++ amms_front/src/views/tourist/relic/detail.vue | 338 ++++++++++++++++++ .../amms/controller/CarouselController.java | 72 ++++ .../com/amms/controller/FilesController.java | 161 +++++++++ src/main/java/com/amms/domain/Carousel.java | 119 ++++++ .../java/com/amms/mapper/CarouselMapper.java | 52 +++ .../service/impl/CarouselServiceImpl.java | 77 ++++ src/main/resources/mapper/CarouselMapper.xml | 77 ++++ 15 files changed, 1416 insertions(+) create mode 100644 amms_front/eslint.config.js create mode 100644 amms_front/public/favicon.ico create mode 100644 amms_front/src/api/carousel.js create mode 100644 amms_front/src/api/file.js create mode 100644 amms_front/src/assets/home1.png create mode 100644 amms_front/src/components/Editor.vue create mode 100644 amms_front/src/components/HLayout.vue create mode 100644 amms_front/src/utils/common.js create mode 100644 amms_front/src/views/tourist/relic/detail.vue create mode 100644 src/main/java/com/amms/controller/CarouselController.java create mode 100644 src/main/java/com/amms/controller/FilesController.java create mode 100644 src/main/java/com/amms/domain/Carousel.java create mode 100644 src/main/java/com/amms/mapper/CarouselMapper.java create mode 100644 src/main/java/com/amms/service/impl/CarouselServiceImpl.java create mode 100644 src/main/resources/mapper/CarouselMapper.xml diff --git a/amms_front/eslint.config.js b/amms_front/eslint.config.js new file mode 100644 index 0000000..5a1d59c --- /dev/null +++ b/amms_front/eslint.config.js @@ -0,0 +1,17 @@ +import js from '@eslint/js' +import pluginVue from 'eslint-plugin-vue' + +export default [ + { + name: 'app/files-to-lint', + files: ['**/*.{js,mjs,jsx,vue}'], + }, + + { + name: 'app/files-to-ignore', + ignores: ['**/dist/**', '**/dist-ssr/**', '**/coverage/**'], + }, + + js.configs.recommended, + ...pluginVue.configs['flat/essential'], +] diff --git a/amms_front/public/favicon.ico b/amms_front/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git a/amms_front/src/api/carousel.js b/amms_front/src/api/carousel.js new file mode 100644 index 0000000..c5c671c --- /dev/null +++ b/amms_front/src/api/carousel.js @@ -0,0 +1,41 @@ +import axios from '@/utils/request' + +// 查询轮播图列表 +export function listCarousel(query) { + return axios.get('/carousel/list',{ + params: { + ...query + } + }) +} + +// 查询全部轮播图列表 +export function listAllCarousel(query) { + return axios.get('/carousel/listAll', { + params: { + ...query + } + }) +} + +// 查询轮播图详细 +export function getCarousel(id) { + return axios.get('/carousel/info/' + id) +} + +// 新增轮播图 +export function addCarousel(data) { + return axios.post('/carousel/add', { + ...data + }) +} + +// 修改轮播图 +export function updateCarousel(data) { + return axios.put('/carousel', data) +} + +// 删除轮播图 +export function delCarousel(id) { + return axios.delete('/carousel/' + id) +} diff --git a/amms_front/src/api/file.js b/amms_front/src/api/file.js new file mode 100644 index 0000000..d95ed38 --- /dev/null +++ b/amms_front/src/api/file.js @@ -0,0 +1,2 @@ +import request from '@/utils/request' + diff --git a/amms_front/src/assets/home1.png b/amms_front/src/assets/home1.png new file mode 100644 index 0000000000000000000000000000000000000000..a229e7f15a36290e81b7543e52193fc91452367d GIT binary patch literal 6775 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 +

+ + + + +
+ + + + diff --git a/amms_front/src/components/HLayout.vue b/amms_front/src/components/HLayout.vue new file mode 100644 index 0000000..184876c --- /dev/null +++ b/amms_front/src/components/HLayout.vue @@ -0,0 +1,276 @@ + + + + + diff --git a/amms_front/src/utils/common.js b/amms_front/src/utils/common.js new file mode 100644 index 0000000..59f5adb --- /dev/null +++ b/amms_front/src/utils/common.js @@ -0,0 +1,32 @@ +import moment from "moment"; + +/** +* 参数处理 +* @param {*} params 参数 +*/ +export function tansParams(params) { + let result = '' + for (const propName of Object.keys(params)) { + const value = params[propName]; + const part = encodeURIComponent(propName) + "="; + if (value !== null && value !== "" && typeof (value) !== "undefined") { + if (typeof value === 'object') { + for (const key of Object.keys(value)) { + if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') { + const params = propName + '[' + key + ']'; + const subPart = encodeURIComponent(params) + "="; + result += subPart + encodeURIComponent(value[key]) + "&"; + } + } + } else { + result += part + encodeURIComponent(value) + "&"; + } + } + } + return result +} + +// 日期格式化 +export function parseTime(time, pattern) { + return moment(time).format(pattern || 'YYYY-MM-DD HH:mm:ss') +} \ No newline at end of file diff --git a/amms_front/src/views/tourist/relic/detail.vue b/amms_front/src/views/tourist/relic/detail.vue new file mode 100644 index 0000000..e73e482 --- /dev/null +++ b/amms_front/src/views/tourist/relic/detail.vue @@ -0,0 +1,338 @@ + + + + + diff --git a/src/main/java/com/amms/controller/CarouselController.java b/src/main/java/com/amms/controller/CarouselController.java new file mode 100644 index 0000000..718133d --- /dev/null +++ b/src/main/java/com/amms/controller/CarouselController.java @@ -0,0 +1,72 @@ +package com.amms.controller; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import com.amms.domain.vo.Result; +import com.amms.domain.Carousel; +import com.amms.service.ICarouselService; + +import java.util.List; + +/** + * 轮播图Controller + */ +@RestController +@RequestMapping("/carousel") +public class CarouselController { + + @Autowired + private ICarouselService carouselService; + + /** + * 查询轮播图列表 + */ + @GetMapping("/list") + public PageInfo list(Carousel carousel, @RequestParam("pageNum") Integer pageNum, @RequestParam("pageSize") Integer pageSize) { + PageHelper.startPage(pageNum, pageSize); + List carousels = carouselService.selectCarouselList(carousel); + return new PageInfo(carousels); + } + + /** + * 查询全部轮播图列表 + */ + @GetMapping("/listAll") + public List listAll(Carousel carousel) { + return carouselService.selectCarouselList(carousel); + } + + /** + * 获取轮播图详细信息 + */ + @GetMapping(value = "/info/{id}") + public Result getInfo(@PathVariable("id") Long id) { + return Result.success(carouselService.selectCarouselById(id)); + } + + /** + * 新增轮播图 + */ + @PostMapping("/add") + public Result add(@RequestBody Carousel carousel) { + return carouselService.insertCarousel(carousel) > 0 ? Result.success("新增成功") : Result.error("新增失败"); + } + + /** + * 修改轮播图 + */ + @PutMapping + public Result update(@RequestBody Carousel carousel) { + return carouselService.updateCarousel(carousel) > 0 ? Result.success("修改成功") : Result.error("修改失败"); + } + + /** + * 删除轮播图 + */ + @DeleteMapping("/{id}") + public Result delete(@PathVariable Long id) { + return carouselService.deleteCarouselById(id) > 0 ? Result.success("删除成功") : Result.error("删除失败"); + } +} diff --git a/src/main/java/com/amms/controller/FilesController.java b/src/main/java/com/amms/controller/FilesController.java new file mode 100644 index 0000000..73adb6f --- /dev/null +++ b/src/main/java/com/amms/controller/FilesController.java @@ -0,0 +1,161 @@ +package com.amms.controller; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.*; +import java.net.URLEncoder; +import java.util.UUID; + +/** + * 文件处理controller + */ +@Controller +@RequestMapping("/files") +public class FilesController { + + private static Logger logger = LoggerFactory.getLogger(FilesController.class); + + @Value("${files.path}") + private String path; + + /** + * 文件上传 + * @param file + * @return + * @throws IOException + */ + @PostMapping("/upload") + @ResponseBody + public String upload(@RequestParam("file") MultipartFile file ,@RequestParam(name = "filePath" ,required = false) String filePath) throws IOException { + logger.info("上传文件:{}", file.getName()); + File fileUploadPath = null; + // 创建目标路径 + if (!filePath.equals("") && filePath != null) { + fileUploadPath = new File(path, filePath); + } else { + fileUploadPath = new File(path); + } + if (!fileUploadPath.exists()) { + fileUploadPath.mkdirs(); + } + // 新文件名 + String newFileName = UUID.randomUUID().toString().replace("-", "") + "-" + file.getOriginalFilename(); + file.transferTo(new File(fileUploadPath, newFileName)); + // 判断参数中filePath时候为null 不为空则拼接到新文件名前 + if (!filePath.equals("") && filePath != null) { + if (filePath.endsWith("/")) { + newFileName = filePath + newFileName; + } else { + newFileName = filePath + "/" + newFileName; + } + } + return newFileName; + } + + byte[] buffer = new byte[1024]; + BufferedInputStream bis = null; + OutputStream os = null; + + /** + * 获取文件(图片) + * @param fileName + * @param response + * @throws UnsupportedEncodingException + */ + @GetMapping("/get") + public void getImage(@RequestParam("fileName") String fileName, HttpServletResponse response) throws UnsupportedEncodingException { + logger.debug("加载图片,文件名:" + fileName); + File file = new File(path, fileName); + // 判断文件是否存在 + if (!file.exists()) { + logger.error("文件【" + file.getAbsolutePath() + "】不存在!"); + response.setStatus(404); + return; + } + response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") ); + response.setContentType("image/jpeg"); + response.setContentLength((int)file.length()); + FileInputStream is = null; + OutputStream os = null; + try { + is = new FileInputStream(file); + os = response.getOutputStream(); + + byte[] buf = new byte[8192]; + int rd; + while ((rd = is.read(buf)) > 0) + os.write(buf, 0, rd); + + } catch (IOException e) { + logger.error(e.getMessage()); + } finally { + try { + if (is!=null) is.close(); + if (os!=null) { + os.flush(); + os.close(); + } + } catch (IOException e) { + logger.error(e.getMessage()); + } + } + } + + + /** + * 删除文件 + * @param fileName + * @param response + * @throws UnsupportedEncodingException + */ + @GetMapping("/delete") + public void delete(@RequestParam("fileName") String fileName, HttpServletResponse response) throws UnsupportedEncodingException { + logger.error("删除文件,文件名:" + fileName); + File file = new File(path + fileName); + if (!file.exists()) { + logger.error("文件【" + fileName + "】不存在!"); + response.setStatus(404); + return; + } + try { + file.delete(); + } catch (Exception e) { + logger.error(e.getMessage()); + } + } + + + /** + * 下载文件 + * @param fileName + * @param request + * @param response + * @throws IOException + */ + @GetMapping("/download") + public void download(String fileName, HttpServletRequest request, HttpServletResponse response) throws IOException { + logger.info("下载文件:{}", fileName); + File fileUploadPathFile = new File(path); + if (!fileUploadPathFile.exists()) { + fileUploadPathFile.mkdir(); + } + File file = new File(fileUploadPathFile, fileName); + + response.setContentType("application/octet-stream;charset=UTF-8"); + response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); + response.setHeader("Content-Disposition","attachment;filename="+fileName); + response.setCharacterEncoding("UTF-8"); + os = response.getOutputStream(); + bis = new BufferedInputStream(new FileInputStream(file)); + while(bis.read(buffer) != -1){ + os.write(buffer); + } + } +} diff --git a/src/main/java/com/amms/domain/Carousel.java b/src/main/java/com/amms/domain/Carousel.java new file mode 100644 index 0000000..8709032 --- /dev/null +++ b/src/main/java/com/amms/domain/Carousel.java @@ -0,0 +1,119 @@ +package com.amms.domain; + + +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * 轮播图对象 carousel + */ +public class Carousel { + + /** 轮播图id */ + private Long id; + + /** 标题 */ + private String title; + + /** 图片地址 */ + private String imageUrl; + + /** 跳转链接 */ + private String link; + + /** 排序序号 */ + private Integer sort; + + /** 状态(0隐藏 1显示) */ + private Long status; + + /** 创建时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** 更新时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + public void setId(Long id) { + this.id = id; + } + + public Long getId() { + return id; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getTitle() { + return title; + } + + public void setImageUrl(String imageUrl) { + this.imageUrl = imageUrl; + } + + public String getImageUrl() { + return imageUrl; + } + + public void setLink(String link) { + this.link = link; + } + + public String getLink() { + return link; + } + + public void setSort(Integer sort) { + this.sort = sort; + } + + public Integer getSort() { + return sort; + } + + public void setStatus(Long status) { + this.status = status; + } + + public Long getStatus() { + return status; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + @Override + public String toString() { + return "Carousel{" + + "id=" + id + + ", title=" + title + + ", imageUrl=" + imageUrl + + ", link=" + link + + ", sort=" + sort + + ", status=" + status + + ", createTime=" + createTime + + ", updateTime=" + updateTime + + '}'; + } +} diff --git a/src/main/java/com/amms/mapper/CarouselMapper.java b/src/main/java/com/amms/mapper/CarouselMapper.java new file mode 100644 index 0000000..8694424 --- /dev/null +++ b/src/main/java/com/amms/mapper/CarouselMapper.java @@ -0,0 +1,52 @@ +package com.amms.mapper; + +import java.util.List; +import org.apache.ibatis.annotations.Mapper; +import com.amms.domain.Carousel; + +/** + * 轮播图Mapper接口 + */ +@Mapper +public interface CarouselMapper { + /** + * 查询轮播图 + * + * @param id 轮播图主键 + * @return 轮播图 + */ + public Carousel selectCarouselById(Long id); + + /** + * 查询轮播图列表 + * + * @param carousel 轮播图 + * @return 轮播图集合 + */ + public List selectCarouselList(Carousel carousel); + + /** + * 新增轮播图 + * + * @param carousel 轮播图 + * @return 结果 + */ + public int insertCarousel(Carousel carousel); + + /** + * 修改轮播图 + * + * @param carousel 轮播图 + * @return 结果 + */ + public int updateCarousel(Carousel carousel); + + /** + * 删除轮播图 + * + * @param id 轮播图主键 + * @return 结果 + */ + public int deleteCarouselById(Long id); + +} diff --git a/src/main/java/com/amms/service/impl/CarouselServiceImpl.java b/src/main/java/com/amms/service/impl/CarouselServiceImpl.java new file mode 100644 index 0000000..eed7e27 --- /dev/null +++ b/src/main/java/com/amms/service/impl/CarouselServiceImpl.java @@ -0,0 +1,77 @@ +package com.amms.service.impl; + +import java.util.List; +import java.util.Date; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.amms.mapper.CarouselMapper; +import com.amms.domain.Carousel; +import com.amms.service.ICarouselService; + +/** + * 轮播图Service业务层处理 + */ +@Service +public class CarouselServiceImpl implements ICarouselService { + + @Autowired + private CarouselMapper carouselMapper; + + /** + * 查询轮播图列表 + * + * @param carousel 轮播图 + * @return 轮播图 + */ + @Override + public List selectCarouselList(Carousel carousel) { + return carouselMapper.selectCarouselList(carousel); + } + + /** + * 查询轮播图 + * + * @param id 轮播图主键 + * @return 轮播图 + */ + @Override + public Carousel selectCarouselById(Long id) { + return carouselMapper.selectCarouselById(id); + } + + /** + * 新增轮播图 + * + * @param carousel 轮播图 + * @return 结果 + */ + @Override + public int insertCarousel(Carousel carousel) { + carousel.setCreateTime(new Date()); + return carouselMapper.insertCarousel(carousel); + } + + /** + * 修改轮播图 + * + * @param carousel 轮播图 + * @return 结果 + */ + @Override + public int updateCarousel(Carousel carousel) { + carousel.setUpdateTime(new Date()); + return carouselMapper.updateCarousel(carousel); + } + + /** + * 删除轮播图信息 + * + * @param id 轮播图主键 + * @return 结果 + */ + @Override + public int deleteCarouselById(Long id) { + return carouselMapper.deleteCarouselById(id); + } + +} diff --git a/src/main/resources/mapper/CarouselMapper.xml b/src/main/resources/mapper/CarouselMapper.xml new file mode 100644 index 0000000..3d2db50 --- /dev/null +++ b/src/main/resources/mapper/CarouselMapper.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + select id, title, image_url, link, sort, status, create_time, update_time from carousel + + + + + + + + insert into carousel + + title, + image_url, + link, + sort, + status, + create_time, + update_time, + + + #{title}, + #{imageUrl}, + #{link}, + #{sort}, + #{status}, + #{createTime}, + #{updateTime}, + + + + + update carousel + + title = #{title}, + image_url = #{imageUrl}, + link = #{link}, + sort = #{sort}, + status = #{status}, + create_time = #{createTime}, + update_time = #{updateTime}, + + where id = #{id} + + + + delete from carousel where id = #{id} + +