官网后台页面修改

This commit is contained in:
liuxiao 2024-07-09 11:37:10 +08:00
parent 7cf2e46087
commit 1adebed619
25 changed files with 156 additions and 230 deletions

View File

@ -89,6 +89,11 @@ public class SysOssController extends BaseController {
return R.ok(map);
}
/**
* 上传文件到本地
* @param file 文件数据
* @return 文件上传地址信息
*/
@Log(title = "OSS对象存储", businessType = BusinessType.INSERT)
@PostMapping("/addPartsUpload")
public R<Map<String, String>> addPartsUpload(@RequestPart("file") MultipartFile file) {
@ -116,8 +121,13 @@ public class SysOssController extends BaseController {
String pathFan=filePath.replace("\\","/");
//filePath获取到的地址斜杠是 \ 单斜杠是特殊符号得用双斜杠代替得换成 / 才能访问到
map.put("fileName",pathFan+fileName);
map.put("url",filePath);
map.put("fileName",fileName);
log.info("替换后的文件名称:{}",pathFan+fileName);
SysOssVo sysOssVo = iSysOssService.uploadLocal(filePath, fileName);
map.put("ossId",sysOssVo.getOssId().toString());
//修改数据库
return R.ok(map);
} catch (IOException e) {
@ -126,6 +136,9 @@ public class SysOssController extends BaseController {
}
/**
* 下载OSS对象
*

View File

@ -29,7 +29,8 @@ xxl.job:
logpath: ./logs/xxl-job
# 执行器日志文件保存天数大于3生效
logretentiondays: 30
server:
port: 8081
--- # 数据源配置
spring:
datasource:
@ -171,4 +172,4 @@ sms:
sdkAppId:
--- # 文件上传路径
file:
BASE_FILE_SAVE_PATH: E:\home\uploadPath
BASE_FILE_SAVE_PATH: ./image

View File

@ -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);
}
}
}

View File

@ -27,6 +27,8 @@ public interface ISysOssService {
SysOssVo upload(MultipartFile file);
SysOssVo uploadLocal(String imageUrl,String fileName);
void download(Long ossId, HttpServletResponse response) throws IOException;
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

View File

@ -1,5 +1,6 @@
package com.ruoyi.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.ObjectUtil;
@ -142,6 +143,17 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
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
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) {

View File

@ -1,5 +1,5 @@
# 页面标题
VUE_APP_TITLE = RuoYi-Vue-Plus后台管理系统
VUE_APP_TITLE = 官网后台管理系统
# 开发环境配置
ENV = 'development'

View File

@ -1,5 +1,5 @@
# 页面标题
VUE_APP_TITLE = RuoYi-Vue-Plus后台管理系统
VUE_APP_TITLE = 官网后台管理系统
# 生产环境配置
ENV = 'production'

View File

@ -1,7 +1,7 @@
{
"name": "ruoyi-vue-plus",
"version": "4.7.0",
"description": "RuoYi-Vue-Plus后台管理系统",
"description": "官网后台管理系统",
"author": "LionLi",
"license": "MIT",
"scripts": {

View File

@ -1,7 +1,6 @@
import request from '@/utils/request'
// 查询首页封面信息
列表
// 查询首页封面信息列表
export function listIndex(query) {
return request({
url: '/official/index/list',
@ -10,8 +9,7 @@ export function listIndex(query) {
})
}
// 查询首页封面信息
详细
// 查询首页封面信息详细
export function getIndex(id) {
return request({
url: '/official/index/' + id,

View File

@ -1,7 +1,6 @@
import request from '@/utils/request'
// 查询招聘信息
列表
// 查询招聘信息列表
export function listJob(query) {
return request({
url: '/official/job/list',
@ -10,8 +9,7 @@ export function listJob(query) {
})
}
// 查询招聘信息
详细
// 查询招聘信息详细
export function getJob(id) {
return request({
url: '/official/job/' + id,

View File

@ -1,7 +1,6 @@
import request from '@/utils/request'
// 查询招聘信息
列表
// 查询招聘信息列表
export function listJobInfo(query) {
return request({
url: '/official/jobInfo/list',
@ -10,8 +9,7 @@ export function listJobInfo(query) {
})
}
// 查询招聘信息
详细
// 查询招聘信息详细
export function getJobInfo(id) {
return request({
url: '/official/jobInfo/' + id,

View File

@ -1,8 +1,6 @@
import request from '@/utils/request'
// 查询标签内容信息
列表
// 查询标签内容信息列表
export function listJournalism(query) {
return request({
url: '/official/journalism/list',
@ -11,9 +9,7 @@ export function listJournalism(query) {
})
}
// 查询标签内容信息
详细
// 查询标签内容信息详细
export function getJournalism(id) {
return request({
url: '/official/journalism/' + id,

View File

@ -1,7 +1,6 @@
import request from '@/utils/request'
// 查询标签封面信息
列表
// 查询标签封面信息列表
export function listLable(query) {
return request({
url: '/official/lable/list',
@ -10,8 +9,7 @@ export function listLable(query) {
})
}
// 查询标签封面信息
详细
// 查询标签封面信息详细
export function getLable(id) {
return request({
url: '/official/lable/' + id,

View File

@ -1,7 +1,6 @@
import request from '@/utils/request'
// 查询标签封面信息
列表
// 查询标签封面信息列表
export function listLableContent(query) {
return request({
url: '/official/lableContent/list',
@ -10,8 +9,7 @@ export function listLableContent(query) {
})
}
// 查询标签封面信息
详细
// 查询标签封面信息详细
export function getLableContent(id) {
return request({
url: '/official/lableContent/' + id,

View File

@ -1,7 +1,6 @@
import request from '@/utils/request'
// 查询宣传信息
列表
// 查询宣传信息列表
export function listPublicity(query) {
return request({
url: '/official/publicity/list',
@ -10,8 +9,7 @@ export function listPublicity(query) {
})
}
// 查询宣传信息
详细
// 查询宣传信息详细
export function getPublicity(id) {
return request({
url: '/official/publicity/' + id,

View File

@ -1,7 +1,6 @@
import request from '@/utils/request'
// 查询业务范围
列表
// 查询业务范围列表
export function listScope(query) {
return request({
url: '/official/scope/list',
@ -10,8 +9,7 @@ export function listScope(query) {
})
}
// 查询业务范围
详细
// 查询业务范围详细
export function getScope(id) {
return request({
url: '/official/scope/' + id,

View File

@ -1,7 +1,6 @@
import request from '@/utils/request'
// 查询新闻信息
列表
// 查询新闻信息列表
export function listSlideshow(query) {
return request({
url: '/official/slideshow/list',
@ -10,8 +9,7 @@ export function listSlideshow(query) {
})
}
// 查询新闻信息
详细
// 查询新闻信息详细
export function getSlideshow(id) {
return request({
url: '/official/slideshow/' + id,

View File

@ -7,16 +7,7 @@
<div class="right-menu">
<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" />
<el-tooltip content="布局大小" effect="dark" placement="bottom">

View File

@ -35,7 +35,7 @@ export default {
},
data() {
return {
title: 'RuoYi-Vue-Plus',
title: '官网后台管理系统',
logo: logoImg
}
}

View File

@ -19,6 +19,7 @@ import './permission' // permission control
import { getDicts } from "@/api/system/dict/data";
import { getConfigKey, updateConfigByKey } from "@/api/system/config";
import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree } from "@/utils/ruoyi";
// 分页组件
import Pagination from "@/components/Pagination";
// 自定义表格工具组件
@ -29,6 +30,9 @@ import Editor from "@/components/Editor"
import FileUpload from "@/components/FileUpload"
// 图片上传组件
import ImageUpload from "@/components/ImageUpload"
// 本地图片上传组件
import ImageUploadLoca from "@/components/ImageUploadLochost"
// 图片预览组件
import ImagePreview from "@/components/ImagePreview"
// 字典标签组件
@ -56,6 +60,7 @@ Vue.component('Pagination', Pagination)
Vue.component('RightToolbar', RightToolbar)
Vue.component('Editor', Editor)
Vue.component('FileUpload', FileUpload)
Vue.component('ImageUploadLochost', ImageUploadLoca)
Vue.component('ImageUpload', ImageUpload)
Vue.component('ImagePreview', ImagePreview)

View File

@ -2,106 +2,7 @@
<div class="app-container home">
<el-row :gutter="20">
<el-col :sm="24" :lg="12" style="padding-left: 20px">
<h2>RuoYi-Vue-Plus后台管理框架</h2>
<p>
RuoYi-Vue-Plus 是基于 RuoYi-Vue 针对 分布式集群 场景升级(不兼容原框架)
<br/>
* 前端开发框架 VueElement UI<br/>
* 后端开发框架 Spring Boot<br/>
* 容器框架 Undertow 基于 XNIO 的高性能容器<br/>
* 权限认证框架 Sa-TokenJwt 支持多终端认证系统<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/>
* 文档框架 SpringDocjavadoc 无注解零入侵基于java注释<br/>
* 工具类框架 HutoolLombok 减少代码冗余 增加安全性<br/>
* 代码生成器 适配MPSpringDoc规范化代码 一键生成前后端代码<br/>
* 部署方式 Docker 容器编排 一键部署业务集群<br/>
* 国际化 SpringMessage Spring标准国际化方案<br/>
</p>
<p>
<b>当前版本:</b> <span>v{{ version }}</span>
</p>
<p>
<el-tag type="danger">&yen;免费开源</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>
<h2>官网后台管理系统</h2>
</el-col>
</el-row>
<el-divider />

View File

@ -1,7 +1,7 @@
<template>
<div class="login">
<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-input
v-model="loginForm.username"
@ -55,9 +55,9 @@
</el-form-item>
</el-form>
<!-- 底部 -->
<div class="el-login-footer">
<!-- <div class="el-login-footer">
<span>Copyright © 2018-2023 疯狂的狮子Li All Rights Reserved.</span>
</div>
</div> -->
</div>
</template>

View File

@ -1,14 +1,7 @@
<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="imageurl">
<el-input
v-model="queryParams.imageurl"
placeholder="请输入图片上传地址"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="标签名称" prop="menuName">
<el-input
v-model="queryParams.menuName"
@ -17,14 +10,7 @@
@keyup.enter.native="handleQuery"
/>
</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-input
v-model="queryParams.orderNum"
@ -41,30 +27,7 @@
@keyup.enter.native="handleQuery"
/>
</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-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>
@ -121,15 +84,10 @@
<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="图片上传地址" 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="父菜单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="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">
<template slot-scope="scope">
<el-button
@ -158,19 +116,19 @@
@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="imageurl">
<el-input v-model="form.imageurl" placeholder="请输入图片上传地址" />
</el-form-item>
<el-form-item label="标签名称" prop="menuName">
<el-input v-model="form.menuName" placeholder="请输入标签名称" />
</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-form-item> -->
<el-form-item label="封面图片" prop="imageurl">
<ImageUploadLochost v-model="form.imageurl"/>
</el-form-item>
<el-form-item label="显示顺序" prop="orderNum">
<el-input v-model="form.orderNum" placeholder="请输入显示顺序" />
</el-form-item>
@ -180,12 +138,6 @@
<el-form-item label="是否为外链" prop="isFrame">
<el-input v-model="form.isFrame" placeholder="请输入是否为外链" />
</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>
<div slot="footer" class="dialog-footer">
<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 {
name: "Lable",
data() {
return {
// loading
buttonLoading: false,
@ -267,13 +220,7 @@ export default {
],
isFrame: [
{ 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();
},
methods: {
/**
列表 */
/** 查询标签封面信息列表 */
getList() {
this.loading = true;
listLable(this.queryParams).then(response => {
@ -290,6 +237,13 @@ export default {
this.total = response.total;
this.loading = false;
});
},
/** 文件按钮操作 */
handleFile() {
this.reset();
this.open = true;
this.title = "上传文件";
this.type = 0;
},
//
cancel() {

View File

@ -1,7 +1,7 @@
<template>
<div class="register">
<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-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号">
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
@ -60,9 +60,9 @@
</el-form-item>
</el-form>
<!-- 底部 -->
<div class="el-register-footer">
<!-- <div class="el-register-footer">
<span>Copyright © 2018-2023 疯狂的狮子Li All Rights Reserved.</span>
</div>
</div> -->
</div>
</template>

View File

@ -7,7 +7,7 @@ function resolve(dir) {
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 // 端口
@ -35,7 +35,7 @@ module.exports = {
proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: {
target: `http://localhost:8080`,
target: `http://localhost:8081`,
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''