官网后台页面修改
This commit is contained in:
parent
7cf2e46087
commit
1adebed619
|
@ -89,6 +89,11 @@ public class SysOssController extends BaseController {
|
||||||
return R.ok(map);
|
return R.ok(map);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上传文件到本地
|
||||||
|
* @param file 文件数据
|
||||||
|
* @return 文件上传地址信息
|
||||||
|
*/
|
||||||
@Log(title = "OSS对象存储", businessType = BusinessType.INSERT)
|
@Log(title = "OSS对象存储", businessType = BusinessType.INSERT)
|
||||||
@PostMapping("/addPartsUpload")
|
@PostMapping("/addPartsUpload")
|
||||||
public R<Map<String, String>> addPartsUpload(@RequestPart("file") MultipartFile file) {
|
public R<Map<String, String>> addPartsUpload(@RequestPart("file") MultipartFile file) {
|
||||||
|
@ -116,8 +121,13 @@ public class SysOssController extends BaseController {
|
||||||
String pathFan=filePath.replace("\\","/");
|
String pathFan=filePath.replace("\\","/");
|
||||||
//filePath获取到的地址斜杠是“ \ ”的(单斜杠是特殊符号,得用双斜杠代替),得换成“ / ”才能访问到
|
//filePath获取到的地址斜杠是“ \ ”的(单斜杠是特殊符号,得用双斜杠代替),得换成“ / ”才能访问到
|
||||||
|
|
||||||
map.put("fileName",pathFan+fileName);
|
map.put("url",filePath);
|
||||||
|
map.put("fileName",fileName);
|
||||||
|
|
||||||
log.info("替换后的文件名称:{}",pathFan+fileName);
|
log.info("替换后的文件名称:{}",pathFan+fileName);
|
||||||
|
SysOssVo sysOssVo = iSysOssService.uploadLocal(filePath, fileName);
|
||||||
|
map.put("ossId",sysOssVo.getOssId().toString());
|
||||||
|
|
||||||
//修改数据库
|
//修改数据库
|
||||||
return R.ok(map);
|
return R.ok(map);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
@ -126,6 +136,9 @@ public class SysOssController extends BaseController {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 下载OSS对象
|
* 下载OSS对象
|
||||||
*
|
*
|
||||||
|
|
|
@ -29,7 +29,8 @@ xxl.job:
|
||||||
logpath: ./logs/xxl-job
|
logpath: ./logs/xxl-job
|
||||||
# 执行器日志文件保存天数:大于3生效
|
# 执行器日志文件保存天数:大于3生效
|
||||||
logretentiondays: 30
|
logretentiondays: 30
|
||||||
|
server:
|
||||||
|
port: 8081
|
||||||
--- # 数据源配置
|
--- # 数据源配置
|
||||||
spring:
|
spring:
|
||||||
datasource:
|
datasource:
|
||||||
|
@ -171,4 +172,4 @@ sms:
|
||||||
sdkAppId:
|
sdkAppId:
|
||||||
--- # 文件上传路径
|
--- # 文件上传路径
|
||||||
file:
|
file:
|
||||||
BASE_FILE_SAVE_PATH: E:\home\uploadPath
|
BASE_FILE_SAVE_PATH: ./image
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
package com.ruoyi.official.controller.image;
|
||||||
|
|
||||||
|
import com.ruoyi.common.config.RuoYiConfig;
|
||||||
|
import com.ruoyi.common.core.domain.R;
|
||||||
|
import com.ruoyi.common.utils.FileUtil;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author: lx
|
||||||
|
* @since: 2024/6/27 13:32
|
||||||
|
* @description: 文件上传
|
||||||
|
*/
|
||||||
|
@Validated
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/common")
|
||||||
|
public class FileUploadController {
|
||||||
|
@PostMapping("/addPartsUpload")
|
||||||
|
public R<String> addPartsUpload(@RequestParam("id")Long id , MultipartFile file) {
|
||||||
|
Map<String,Object> map=new HashMap<>();
|
||||||
|
System.err.println("id:"+id);
|
||||||
|
System.err.println("file:"+file.getOriginalFilename());
|
||||||
|
String filePath=System.getProperty("user.dir")+"/file/upload/"+id+"/";
|
||||||
|
try {
|
||||||
|
if (file.isEmpty()) {
|
||||||
|
return R.warn("文件为空");
|
||||||
|
}
|
||||||
|
|
||||||
|
String fileName = System.currentTimeMillis()+"-"+file.getOriginalFilename();
|
||||||
|
//文件上传的路径(当前项目的根目录)
|
||||||
|
|
||||||
|
System.err.println(filePath);
|
||||||
|
// 创建目标目录(如果不存在)
|
||||||
|
File directory = new File(filePath);
|
||||||
|
if (!directory.exists()) {
|
||||||
|
directory.mkdirs();
|
||||||
|
}
|
||||||
|
// 保存文件到目标目录
|
||||||
|
File uploadFile = new File(directory.getAbsolutePath() + File.separator + fileName);
|
||||||
|
file.transferTo(uploadFile);
|
||||||
|
String pathFan=filePath.replace("\\","/");
|
||||||
|
//filePath获取到的地址斜杠是“ \ ”的(单斜杠是特殊符号,得用双斜杠代替),得换成“ / ”才能访问到
|
||||||
|
|
||||||
|
System.err.println("替换后:"+pathFan);
|
||||||
|
map.put("quote_address",pathFan+fileName);
|
||||||
|
map.put("id",id);
|
||||||
|
//修改数据库
|
||||||
|
// momOfferService.uploadImage(map);
|
||||||
|
return R.ok("文件上传成功",pathFan+fileName);
|
||||||
|
} catch (IOException e) {
|
||||||
|
return R.warn("文件上传失败: "+e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -27,6 +27,8 @@ public interface ISysOssService {
|
||||||
|
|
||||||
SysOssVo upload(MultipartFile file);
|
SysOssVo upload(MultipartFile file);
|
||||||
|
|
||||||
|
SysOssVo uploadLocal(String imageUrl,String fileName);
|
||||||
|
|
||||||
void download(Long ossId, HttpServletResponse response) throws IOException;
|
void download(Long ossId, HttpServletResponse response) throws IOException;
|
||||||
|
|
||||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.ruoyi.system.service.impl;
|
package com.ruoyi.system.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.convert.Convert;
|
||||||
import cn.hutool.core.io.IoUtil;
|
import cn.hutool.core.io.IoUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
@ -142,6 +143,17 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
|
||||||
return this.matchingUrl(sysOssVo);
|
return this.matchingUrl(sysOssVo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SysOssVo uploadLocal(String imageUrl,String fileName) {
|
||||||
|
// 保存文件信息
|
||||||
|
SysOss oss = new SysOss();
|
||||||
|
oss.setUrl(imageUrl);
|
||||||
|
oss.setFileName(fileName);
|
||||||
|
baseMapper.insert(oss);
|
||||||
|
return BeanUtil.toBean(oss,SysOssVo.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||||
if (isValid) {
|
if (isValid) {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# 页面标题
|
# 页面标题
|
||||||
VUE_APP_TITLE = RuoYi-Vue-Plus后台管理系统
|
VUE_APP_TITLE = 官网后台管理系统
|
||||||
|
|
||||||
# 开发环境配置
|
# 开发环境配置
|
||||||
ENV = 'development'
|
ENV = 'development'
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# 页面标题
|
# 页面标题
|
||||||
VUE_APP_TITLE = RuoYi-Vue-Plus后台管理系统
|
VUE_APP_TITLE = 官网后台管理系统
|
||||||
|
|
||||||
# 生产环境配置
|
# 生产环境配置
|
||||||
ENV = 'production'
|
ENV = 'production'
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "ruoyi-vue-plus",
|
"name": "ruoyi-vue-plus",
|
||||||
"version": "4.7.0",
|
"version": "4.7.0",
|
||||||
"description": "RuoYi-Vue-Plus后台管理系统",
|
"description": "官网后台管理系统",
|
||||||
"author": "LionLi",
|
"author": "LionLi",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
|
|
||||||
// 查询首页封面信息
|
// 查询首页封面信息列表
|
||||||
列表
|
|
||||||
export function listIndex(query) {
|
export function listIndex(query) {
|
||||||
return request({
|
return request({
|
||||||
url: '/official/index/list',
|
url: '/official/index/list',
|
||||||
|
@ -10,8 +9,7 @@ export function listIndex(query) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询首页封面信息
|
// 查询首页封面信息详细
|
||||||
详细
|
|
||||||
export function getIndex(id) {
|
export function getIndex(id) {
|
||||||
return request({
|
return request({
|
||||||
url: '/official/index/' + id,
|
url: '/official/index/' + id,
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
|
|
||||||
// 查询招聘信息
|
// 查询招聘信息列表
|
||||||
列表
|
|
||||||
export function listJob(query) {
|
export function listJob(query) {
|
||||||
return request({
|
return request({
|
||||||
url: '/official/job/list',
|
url: '/official/job/list',
|
||||||
|
@ -10,8 +9,7 @@ export function listJob(query) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询招聘信息
|
// 查询招聘信息详细
|
||||||
详细
|
|
||||||
export function getJob(id) {
|
export function getJob(id) {
|
||||||
return request({
|
return request({
|
||||||
url: '/official/job/' + id,
|
url: '/official/job/' + id,
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
|
|
||||||
// 查询招聘信息
|
// 查询招聘信息列表
|
||||||
列表
|
|
||||||
export function listJobInfo(query) {
|
export function listJobInfo(query) {
|
||||||
return request({
|
return request({
|
||||||
url: '/official/jobInfo/list',
|
url: '/official/jobInfo/list',
|
||||||
|
@ -10,8 +9,7 @@ export function listJobInfo(query) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询招聘信息
|
// 查询招聘信息详细
|
||||||
详细
|
|
||||||
export function getJobInfo(id) {
|
export function getJobInfo(id) {
|
||||||
return request({
|
return request({
|
||||||
url: '/official/jobInfo/' + id,
|
url: '/official/jobInfo/' + id,
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
|
|
||||||
// 查询标签内容信息
|
// 查询标签内容信息列表
|
||||||
|
|
||||||
列表
|
|
||||||
export function listJournalism(query) {
|
export function listJournalism(query) {
|
||||||
return request({
|
return request({
|
||||||
url: '/official/journalism/list',
|
url: '/official/journalism/list',
|
||||||
|
@ -11,9 +9,7 @@ export function listJournalism(query) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询标签内容信息
|
// 查询标签内容信息详细
|
||||||
|
|
||||||
详细
|
|
||||||
export function getJournalism(id) {
|
export function getJournalism(id) {
|
||||||
return request({
|
return request({
|
||||||
url: '/official/journalism/' + id,
|
url: '/official/journalism/' + id,
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
|
|
||||||
// 查询标签封面信息
|
// 查询标签封面信息列表
|
||||||
列表
|
|
||||||
export function listLable(query) {
|
export function listLable(query) {
|
||||||
return request({
|
return request({
|
||||||
url: '/official/lable/list',
|
url: '/official/lable/list',
|
||||||
|
@ -10,8 +9,7 @@ export function listLable(query) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询标签封面信息
|
// 查询标签封面信息详细
|
||||||
详细
|
|
||||||
export function getLable(id) {
|
export function getLable(id) {
|
||||||
return request({
|
return request({
|
||||||
url: '/official/lable/' + id,
|
url: '/official/lable/' + id,
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
|
|
||||||
// 查询标签封面信息
|
// 查询标签封面信息列表
|
||||||
列表
|
|
||||||
export function listLableContent(query) {
|
export function listLableContent(query) {
|
||||||
return request({
|
return request({
|
||||||
url: '/official/lableContent/list',
|
url: '/official/lableContent/list',
|
||||||
|
@ -10,8 +9,7 @@ export function listLableContent(query) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询标签封面信息
|
// 查询标签封面信息详细
|
||||||
详细
|
|
||||||
export function getLableContent(id) {
|
export function getLableContent(id) {
|
||||||
return request({
|
return request({
|
||||||
url: '/official/lableContent/' + id,
|
url: '/official/lableContent/' + id,
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
|
|
||||||
// 查询宣传信息
|
// 查询宣传信息列表
|
||||||
列表
|
|
||||||
export function listPublicity(query) {
|
export function listPublicity(query) {
|
||||||
return request({
|
return request({
|
||||||
url: '/official/publicity/list',
|
url: '/official/publicity/list',
|
||||||
|
@ -10,8 +9,7 @@ export function listPublicity(query) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询宣传信息
|
// 查询宣传信息详细
|
||||||
详细
|
|
||||||
export function getPublicity(id) {
|
export function getPublicity(id) {
|
||||||
return request({
|
return request({
|
||||||
url: '/official/publicity/' + id,
|
url: '/official/publicity/' + id,
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
|
|
||||||
// 查询业务范围
|
// 查询业务范围列表
|
||||||
列表
|
|
||||||
export function listScope(query) {
|
export function listScope(query) {
|
||||||
return request({
|
return request({
|
||||||
url: '/official/scope/list',
|
url: '/official/scope/list',
|
||||||
|
@ -10,8 +9,7 @@ export function listScope(query) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询业务范围
|
// 查询业务范围详细
|
||||||
详细
|
|
||||||
export function getScope(id) {
|
export function getScope(id) {
|
||||||
return request({
|
return request({
|
||||||
url: '/official/scope/' + id,
|
url: '/official/scope/' + id,
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
|
|
||||||
// 查询新闻信息
|
// 查询新闻信息列表
|
||||||
列表
|
|
||||||
export function listSlideshow(query) {
|
export function listSlideshow(query) {
|
||||||
return request({
|
return request({
|
||||||
url: '/official/slideshow/list',
|
url: '/official/slideshow/list',
|
||||||
|
@ -10,8 +9,7 @@ export function listSlideshow(query) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询新闻信息
|
// 查询新闻信息详细
|
||||||
详细
|
|
||||||
export function getSlideshow(id) {
|
export function getSlideshow(id) {
|
||||||
return request({
|
return request({
|
||||||
url: '/official/slideshow/' + id,
|
url: '/official/slideshow/' + id,
|
||||||
|
|
|
@ -7,15 +7,6 @@
|
||||||
|
|
||||||
<div class="right-menu">
|
<div class="right-menu">
|
||||||
<template v-if="device!=='mobile'">
|
<template v-if="device!=='mobile'">
|
||||||
<search id="header-search" class="right-menu-item" />
|
|
||||||
|
|
||||||
<el-tooltip content="源码地址" effect="dark" placement="bottom">
|
|
||||||
<ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" />
|
|
||||||
</el-tooltip>
|
|
||||||
|
|
||||||
<el-tooltip content="文档地址" effect="dark" placement="bottom">
|
|
||||||
<ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />
|
|
||||||
</el-tooltip>
|
|
||||||
|
|
||||||
<screenfull id="screenfull" class="right-menu-item hover-effect" />
|
<screenfull id="screenfull" class="right-menu-item hover-effect" />
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ export default {
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
title: 'RuoYi-Vue-Plus',
|
title: '官网后台管理系统',
|
||||||
logo: logoImg
|
logo: logoImg
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@ import './permission' // permission control
|
||||||
import { getDicts } from "@/api/system/dict/data";
|
import { getDicts } from "@/api/system/dict/data";
|
||||||
import { getConfigKey, updateConfigByKey } from "@/api/system/config";
|
import { getConfigKey, updateConfigByKey } from "@/api/system/config";
|
||||||
import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree } from "@/utils/ruoyi";
|
import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree } from "@/utils/ruoyi";
|
||||||
|
|
||||||
// 分页组件
|
// 分页组件
|
||||||
import Pagination from "@/components/Pagination";
|
import Pagination from "@/components/Pagination";
|
||||||
// 自定义表格工具组件
|
// 自定义表格工具组件
|
||||||
|
@ -29,6 +30,9 @@ import Editor from "@/components/Editor"
|
||||||
import FileUpload from "@/components/FileUpload"
|
import FileUpload from "@/components/FileUpload"
|
||||||
// 图片上传组件
|
// 图片上传组件
|
||||||
import ImageUpload from "@/components/ImageUpload"
|
import ImageUpload from "@/components/ImageUpload"
|
||||||
|
|
||||||
|
// 本地图片上传组件
|
||||||
|
import ImageUploadLoca from "@/components/ImageUploadLochost"
|
||||||
// 图片预览组件
|
// 图片预览组件
|
||||||
import ImagePreview from "@/components/ImagePreview"
|
import ImagePreview from "@/components/ImagePreview"
|
||||||
// 字典标签组件
|
// 字典标签组件
|
||||||
|
@ -56,6 +60,7 @@ Vue.component('Pagination', Pagination)
|
||||||
Vue.component('RightToolbar', RightToolbar)
|
Vue.component('RightToolbar', RightToolbar)
|
||||||
Vue.component('Editor', Editor)
|
Vue.component('Editor', Editor)
|
||||||
Vue.component('FileUpload', FileUpload)
|
Vue.component('FileUpload', FileUpload)
|
||||||
|
Vue.component('ImageUploadLochost', ImageUploadLoca)
|
||||||
Vue.component('ImageUpload', ImageUpload)
|
Vue.component('ImageUpload', ImageUpload)
|
||||||
Vue.component('ImagePreview', ImagePreview)
|
Vue.component('ImagePreview', ImagePreview)
|
||||||
|
|
||||||
|
|
|
@ -2,106 +2,7 @@
|
||||||
<div class="app-container home">
|
<div class="app-container home">
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :sm="24" :lg="12" style="padding-left: 20px">
|
<el-col :sm="24" :lg="12" style="padding-left: 20px">
|
||||||
<h2>RuoYi-Vue-Plus后台管理框架</h2>
|
<h2>官网后台管理系统</h2>
|
||||||
<p>
|
|
||||||
RuoYi-Vue-Plus 是基于 RuoYi-Vue 针对 分布式集群 场景升级(不兼容原框架)
|
|
||||||
<br/>
|
|
||||||
* 前端开发框架 Vue、Element UI<br/>
|
|
||||||
* 后端开发框架 Spring Boot<br/>
|
|
||||||
* 容器框架 Undertow 基于 XNIO 的高性能容器<br/>
|
|
||||||
* 权限认证框架 Sa-Token、Jwt 支持多终端认证系统<br/>
|
|
||||||
* 关系数据库 MySQL 适配 8.X 最低 5.7<br/>
|
|
||||||
* 关系数据库 Oracle 适配 11g 12c<br/>
|
|
||||||
* 关系数据库 PostgreSQL 适配 13 14<br/>
|
|
||||||
* 关系数据库 SQLServer 适配 2017 2019<br/>
|
|
||||||
* 缓存数据库 Redis 适配 6.X 最低 4.X<br/>
|
|
||||||
* 数据库框架 Mybatis-Plus 快速 CRUD 增加开发效率<br/>
|
|
||||||
* 数据库框架 p6spy 更强劲的 SQL 分析<br/>
|
|
||||||
* 多数据源框架 dynamic-datasource 支持主从与多种类数据库异构<br/>
|
|
||||||
* 序列化框架 Jackson 统一使用 jackson 高效可靠<br/>
|
|
||||||
* Redis客户端 Redisson 性能强劲、API丰富<br/>
|
|
||||||
* 分布式限流 Redisson 全局、请求IP、集群ID 多种限流<br/>
|
|
||||||
* 分布式锁 Lock4j 注解锁、工具锁 多种多样<br/>
|
|
||||||
* 分布式幂等 Redisson 拦截重复提交<br/>
|
|
||||||
* 分布式链路追踪 SkyWalking 支持链路追踪、网格分析、度量聚合、可视化<br/>
|
|
||||||
* 分布式任务调度 Xxl-Job 高性能 高可靠 易扩展<br/>
|
|
||||||
* 分布式文件存储 Minio 本地存储<br/>
|
|
||||||
* 分布式云存储 七牛、阿里、腾讯 云存储<br/>
|
|
||||||
* 监控框架 SpringBoot-Admin 全方位服务监控<br/>
|
|
||||||
* 校验框架 Validation 增强接口安全性 严谨性<br/>
|
|
||||||
* Excel框架 Alibaba EasyExcel 性能优异 扩展性强<br/>
|
|
||||||
* 文档框架 SpringDoc、javadoc 无注解零入侵基于java注释<br/>
|
|
||||||
* 工具类框架 Hutool、Lombok 减少代码冗余 增加安全性<br/>
|
|
||||||
* 代码生成器 适配MP、SpringDoc规范化代码 一键生成前后端代码<br/>
|
|
||||||
* 部署方式 Docker 容器编排 一键部署业务集群<br/>
|
|
||||||
* 国际化 SpringMessage Spring标准国际化方案<br/>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<b>当前版本:</b> <span>v{{ version }}</span>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<el-tag type="danger">¥免费开源</el-tag>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<el-button
|
|
||||||
type="primary"
|
|
||||||
size="mini"
|
|
||||||
icon="el-icon-cloudy"
|
|
||||||
plain
|
|
||||||
@click="goTarget('https://gitee.com/dromara/RuoYi-Vue-Plus')"
|
|
||||||
>访问码云</el-button
|
|
||||||
>
|
|
||||||
<el-button
|
|
||||||
type="primary"
|
|
||||||
size="mini"
|
|
||||||
icon="el-icon-cloudy"
|
|
||||||
plain
|
|
||||||
@click="goTarget('https://github.com/dromara/RuoYi-Vue-Plus')"
|
|
||||||
>访问GitHub</el-button
|
|
||||||
>
|
|
||||||
<el-button
|
|
||||||
type="primary"
|
|
||||||
size="mini"
|
|
||||||
icon="el-icon-cloudy"
|
|
||||||
plain
|
|
||||||
@click="goTarget('https://gitee.com/dromara/RuoYi-Vue-Plus/wikis/pages?sort_id=4106467&doc_id=1469725')"
|
|
||||||
>更新日志</el-button
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
</el-col>
|
|
||||||
|
|
||||||
<el-col :sm="24" :lg="12" style="padding-left: 50px">
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<h2>技术选型</h2>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="6">
|
|
||||||
<h4>后端技术</h4>
|
|
||||||
<ul>
|
|
||||||
<li>SpringBoot</li>
|
|
||||||
<li>Sa-Token</li>
|
|
||||||
<li>JWT</li>
|
|
||||||
<li>MyBatis</li>
|
|
||||||
<li>Druid</li>
|
|
||||||
<li>Jackson</li>
|
|
||||||
<li>...</li>
|
|
||||||
</ul>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="6">
|
|
||||||
<h4>前端技术</h4>
|
|
||||||
<ul>
|
|
||||||
<li>Vue</li>
|
|
||||||
<li>Vuex</li>
|
|
||||||
<li>Element-ui</li>
|
|
||||||
<li>Axios</li>
|
|
||||||
<li>Sass</li>
|
|
||||||
<li>Quill</li>
|
|
||||||
<li>...</li>
|
|
||||||
</ul>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-divider />
|
<el-divider />
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="login">
|
<div class="login">
|
||||||
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
|
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
|
||||||
<h3 class="title">RuoYi-Vue-Plus后台管理系统</h3>
|
<h3 class="title">官网后台管理系统</h3>
|
||||||
<el-form-item prop="username">
|
<el-form-item prop="username">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="loginForm.username"
|
v-model="loginForm.username"
|
||||||
|
@ -55,9 +55,9 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<!-- 底部 -->
|
<!-- 底部 -->
|
||||||
<div class="el-login-footer">
|
<!-- <div class="el-login-footer">
|
||||||
<span>Copyright © 2018-2023 疯狂的狮子Li All Rights Reserved.</span>
|
<span>Copyright © 2018-2023 疯狂的狮子Li All Rights Reserved.</span>
|
||||||
</div>
|
</div> -->
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
<el-form-item label="图片上传地址" prop="imageurl">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.imageurl"
|
|
||||||
placeholder="请输入图片上传地址"
|
|
||||||
clearable
|
|
||||||
@keyup.enter.native="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="标签名称" prop="menuName">
|
<el-form-item label="标签名称" prop="menuName">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="queryParams.menuName"
|
v-model="queryParams.menuName"
|
||||||
|
@ -17,14 +10,7 @@
|
||||||
@keyup.enter.native="handleQuery"
|
@keyup.enter.native="handleQuery"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="父菜单ID" prop="parentId">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.parentId"
|
|
||||||
placeholder="请输入父菜单ID"
|
|
||||||
clearable
|
|
||||||
@keyup.enter.native="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="显示顺序" prop="orderNum">
|
<el-form-item label="显示顺序" prop="orderNum">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="queryParams.orderNum"
|
v-model="queryParams.orderNum"
|
||||||
|
@ -41,30 +27,7 @@
|
||||||
@keyup.enter.native="handleQuery"
|
@keyup.enter.native="handleQuery"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="是否为外链" prop="isFrame">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.isFrame"
|
|
||||||
placeholder="请输入是否为外链"
|
|
||||||
clearable
|
|
||||||
@keyup.enter.native="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="创建者id" prop="createUserId">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.createUserId"
|
|
||||||
placeholder="请输入创建者id"
|
|
||||||
clearable
|
|
||||||
@keyup.enter.native="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="更新者id" prop="updateUserId">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.updateUserId"
|
|
||||||
placeholder="请输入更新者id"
|
|
||||||
clearable
|
|
||||||
@keyup.enter.native="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
<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-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||||
|
@ -121,15 +84,10 @@
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
<el-table-column label="主键id" align="center" prop="id" v-if="true"/>
|
<el-table-column label="主键id" align="center" prop="id" v-if="true"/>
|
||||||
<el-table-column label="图片上传地址" align="center" prop="imageurl" />
|
<el-table-column label="图片上传地址" align="center" prop="imageurl" />
|
||||||
<el-table-column label="文件类型 0:图片 1:视频" align="center" prop="fileType" />
|
<el-table-column label="文件类型" align="center" prop="fileType" />
|
||||||
<el-table-column label="标签名称" align="center" prop="menuName" />
|
<el-table-column label="标签名称" align="center" prop="menuName" />
|
||||||
<el-table-column label="父菜单ID" align="center" prop="parentId" />
|
|
||||||
<el-table-column label="显示顺序" align="center" prop="orderNum" />
|
|
||||||
<el-table-column label="显示状态" align="center" prop="visible" />
|
<el-table-column label="显示状态" align="center" prop="visible" />
|
||||||
<el-table-column label="菜单类型" align="center" prop="menuType" />
|
<el-table-column label="菜单类型" align="center" prop="menuType" />
|
||||||
<el-table-column label="是否为外链" align="center" prop="isFrame" />
|
|
||||||
<el-table-column label="创建者id" align="center" prop="createUserId" />
|
|
||||||
<el-table-column label="更新者id" align="center" prop="updateUserId" />
|
|
||||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button
|
<el-button
|
||||||
|
@ -158,19 +116,19 @@
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- 添加或修改标签封面信息
|
<!-- 添加或修改标签封面信息对话框 -->
|
||||||
对话框 -->
|
|
||||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
<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 ref="form" :model="form" :rules="rules" label-width="80px">
|
||||||
<el-form-item label="图片上传地址" prop="imageurl">
|
|
||||||
<el-input v-model="form.imageurl" placeholder="请输入图片上传地址" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="标签名称" prop="menuName">
|
<el-form-item label="标签名称" prop="menuName">
|
||||||
<el-input v-model="form.menuName" placeholder="请输入标签名称" />
|
<el-input v-model="form.menuName" placeholder="请输入标签名称" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="父菜单ID" prop="parentId">
|
<!-- <el-form-item label="父菜单ID" prop="parentId">
|
||||||
<el-input v-model="form.parentId" placeholder="请输入父菜单ID" />
|
<el-input v-model="form.parentId" placeholder="请输入父菜单ID" />
|
||||||
|
</el-form-item> -->
|
||||||
|
<el-form-item label="封面图片" prop="imageurl">
|
||||||
|
<ImageUploadLochost v-model="form.imageurl"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="显示顺序" prop="orderNum">
|
<el-form-item label="显示顺序" prop="orderNum">
|
||||||
<el-input v-model="form.orderNum" placeholder="请输入显示顺序" />
|
<el-input v-model="form.orderNum" placeholder="请输入显示顺序" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
@ -180,12 +138,6 @@
|
||||||
<el-form-item label="是否为外链" prop="isFrame">
|
<el-form-item label="是否为外链" prop="isFrame">
|
||||||
<el-input v-model="form.isFrame" placeholder="请输入是否为外链" />
|
<el-input v-model="form.isFrame" placeholder="请输入是否为外链" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="创建者id" prop="createUserId">
|
|
||||||
<el-input v-model="form.createUserId" placeholder="请输入创建者id" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="更新者id" prop="updateUserId">
|
|
||||||
<el-input v-model="form.updateUserId" placeholder="请输入更新者id" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
</el-form>
|
||||||
<div slot="footer" class="dialog-footer">
|
<div slot="footer" class="dialog-footer">
|
||||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||||
|
@ -201,6 +153,7 @@ import { listLable, getLable, delLable, addLable, updateLable } from "@/api/offi
|
||||||
export default {
|
export default {
|
||||||
name: "Lable",
|
name: "Lable",
|
||||||
data() {
|
data() {
|
||||||
|
|
||||||
return {
|
return {
|
||||||
// 按钮loading
|
// 按钮loading
|
||||||
buttonLoading: false,
|
buttonLoading: false,
|
||||||
|
@ -267,13 +220,7 @@ export default {
|
||||||
],
|
],
|
||||||
isFrame: [
|
isFrame: [
|
||||||
{ required: true, message: "是否为外链不能为空", trigger: "blur" }
|
{ required: true, message: "是否为外链不能为空", trigger: "blur" }
|
||||||
],
|
]
|
||||||
createUserId: [
|
|
||||||
{ required: true, message: "创建者id不能为空", trigger: "blur" }
|
|
||||||
],
|
|
||||||
updateUserId: [
|
|
||||||
{ required: true, message: "更新者id不能为空", trigger: "blur" }
|
|
||||||
],
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
@ -281,8 +228,8 @@ export default {
|
||||||
this.getList();
|
this.getList();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
/** 查询标签封面信息
|
|
||||||
列表 */
|
/** 查询标签封面信息列表 */
|
||||||
getList() {
|
getList() {
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
listLable(this.queryParams).then(response => {
|
listLable(this.queryParams).then(response => {
|
||||||
|
@ -290,6 +237,13 @@ export default {
|
||||||
this.total = response.total;
|
this.total = response.total;
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
});
|
});
|
||||||
|
},
|
||||||
|
/** 文件按钮操作 */
|
||||||
|
handleFile() {
|
||||||
|
this.reset();
|
||||||
|
this.open = true;
|
||||||
|
this.title = "上传文件";
|
||||||
|
this.type = 0;
|
||||||
},
|
},
|
||||||
// 取消按钮
|
// 取消按钮
|
||||||
cancel() {
|
cancel() {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="register">
|
<div class="register">
|
||||||
<el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form">
|
<el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form">
|
||||||
<h3 class="title">RuoYi-Vue-Plus后台管理系统</h3>
|
<h3 class="title">官网后台管理系统</h3>
|
||||||
<el-form-item prop="username">
|
<el-form-item prop="username">
|
||||||
<el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号">
|
<el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号">
|
||||||
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
|
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
|
||||||
|
@ -60,9 +60,9 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<!-- 底部 -->
|
<!-- 底部 -->
|
||||||
<div class="el-register-footer">
|
<!-- <div class="el-register-footer">
|
||||||
<span>Copyright © 2018-2023 疯狂的狮子Li All Rights Reserved.</span>
|
<span>Copyright © 2018-2023 疯狂的狮子Li All Rights Reserved.</span>
|
||||||
</div>
|
</div> -->
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ function resolve(dir) {
|
||||||
|
|
||||||
const CompressionPlugin = require('compression-webpack-plugin')
|
const CompressionPlugin = require('compression-webpack-plugin')
|
||||||
|
|
||||||
const name = process.env.VUE_APP_TITLE || 'RuoYi-Vue-Plus后台管理系统' // 网页标题
|
const name = process.env.VUE_APP_TITLE || '官网后台管理系统' // 网页标题
|
||||||
|
|
||||||
const port = process.env.port || process.env.npm_config_port || 80 // 端口
|
const port = process.env.port || process.env.npm_config_port || 80 // 端口
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ module.exports = {
|
||||||
proxy: {
|
proxy: {
|
||||||
// detail: https://cli.vuejs.org/config/#devserver-proxy
|
// detail: https://cli.vuejs.org/config/#devserver-proxy
|
||||||
[process.env.VUE_APP_BASE_API]: {
|
[process.env.VUE_APP_BASE_API]: {
|
||||||
target: `http://localhost:8080`,
|
target: `http://localhost:8081`,
|
||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
pathRewrite: {
|
pathRewrite: {
|
||||||
['^' + process.env.VUE_APP_BASE_API]: ''
|
['^' + process.env.VUE_APP_BASE_API]: ''
|
||||||
|
|
Loading…
Reference in New Issue
Block a user