Commit 77854c74 authored by liyang's avatar liyang

提交代码修改

parent cc9826f7
......@@ -85,6 +85,9 @@ export default {
["clean"], // 清除文本格式
["link", "image", "video"] // 链接、图片、视频
],
clipboard: {
matchVisual: false
}
},
placeholder: "请输入内容",
readOnly: this.readOnly,
......@@ -140,7 +143,10 @@ export default {
}
this.Quill.clipboard.dangerouslyPasteHTML(this.currentValue)
this.Quill.on("text-change", (delta, oldDelta, source) => {
const html = this.$refs.editor.children[0].innerHTML
let html = this.$refs.editor.children[0].innerHTML
// 彻底清理 HTML 中的特殊字符,确保 JSON 传输正常
html = html.replace(/`/g, '')
html = html.replace(/\\/g, '')
const text = this.Quill.getText()
const quill = this.Quill
this.currentValue = html
......@@ -183,8 +189,8 @@ export default {
let quill = this.Quill
// 获取光标所在位置
let length = quill.getSelection().index
// 插入图片 res.url为服务器返回的图片地址
quill.insertEmbed(length, "image", res.url)
// 插入图片 res.url 为服务器返回的图片地址
quill.insertEmbed(length, 'image', res.url.replace("8882","8082"))
// 调整光标到最后
quill.setSelection(length + 1)
} else {
......@@ -212,7 +218,14 @@ export default {
const formData = new FormData()
formData.append("file", file)
axios.post(this.uploadUrl, formData, { headers: { "Content-Type": "multipart/form-data", Authorization: this.headers.Authorization } }).then(res => {
this.handleUploadSuccess(res.data)
if (res.data.code == 200) {
let quill = this.Quill
let length = quill.getSelection().index
quill.insertEmbed(length, 'image', res.data.url.replace("8882","8082"))
quill.setSelection(length + 1)
} else {
this.$message.error("图片插入失败")
}
})
}
}
......
......@@ -198,7 +198,7 @@ export default {
// 上传成功回调
handleUploadSuccess(res, file) {
if (res.code === 200) {
this.uploadList.push({ name: res.fileName, url: res.url })
this.uploadList.push({ name: res.fileName, url: res.url.replace("8882","8082") })
this.number--
this.uploadedSuccessfully()
} else {
......
<template>
<div class="app-container">
<el-form ref="form" :model="form" :rules="rules" label-width="80px" v-loading="loading">
<!-- 详情视图 -->
<div v-if="!editing" v-loading="loading" class="detail-view">
<el-card>
<div slot="header" class="clearfix">
<span>介绍详情</span>
<el-button type="primary" size="mini" @click="enterEdit" v-hasPermi="['homepage:introduction:edit']">编辑</el-button>
</div>
<el-descriptions :column="1" border>
<el-descriptions-item label="标题">
{{ form.title || '未设置' }}
</el-descriptions-item>
<el-descriptions-item label="简介">
{{ form.summary || '未设置' }}
</el-descriptions-item>
<el-descriptions-item label="图片">
<div v-if="form.images && form.images.length">
<img v-for="(img, index) in form.images" :key="index" :src="img" style="max-width: 200px; max-height: 150px; margin-right: 10px;" />
</div>
<span v-else>未设置</span>
</el-descriptions-item>
<el-descriptions-item label="状态">
<el-tag :type="form.status === '0' ? 'success' : 'danger'">
{{ form.status ? dict.type.sys_normal_disable.find(item => item.value === form.status).label : '未知' }}
</el-tag>
</el-descriptions-item>
</el-descriptions>
</el-card>
</div>
<!-- 编辑视图 -->
<el-form v-else ref="form" :model="form" :rules="rules" label-width="80px" v-loading="loading">
<el-row>
<el-col :span="24">
<el-form-item label="标题" prop="title">
......@@ -31,6 +61,7 @@
</el-row>
<el-form-item>
<el-button type="primary" @click="submitForm" v-hasPermi="['homepage:introduction:edit']">保 存</el-button>
<el-button @click="cancelEdit">取消</el-button>
</el-form-item>
</el-form>
</div>
......@@ -45,6 +76,7 @@ export default {
data() {
return {
loading: true,
editing: false,
form: {
introId: undefined,
title: undefined,
......@@ -92,6 +124,12 @@ export default {
this.loading = false
})
},
enterEdit() {
this.editing = true
},
cancelEdit() {
this.editing = false
},
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
......@@ -99,11 +137,13 @@ export default {
updateIntroduction(this.form).then(() => {
this.$modal.msgSuccess("保存成功")
this.getIntroductionData()
this.editing = false
})
} else {
addIntroduction(this.form).then(() => {
this.$modal.msgSuccess("保存成功")
this.getIntroductionData()
this.editing = false
})
}
}
......
<template>
<div class="app-container">
<el-form ref="form" :model="form" :rules="rules" label-width="80px" v-loading="loading">
<!-- 详情视图 -->
<div v-if="!editing" v-loading="loading" class="detail-view">
<el-card>
<div slot="header" class="clearfix">
<span>概况详情</span>
<el-button type="primary" size="mini" @click="enterEdit" v-hasPermi="['homepage:overview:edit']">编辑</el-button>
</div>
<el-descriptions :column="1" border>
<el-descriptions-item label="标题">
{{ form.title || '未设置' }}
</el-descriptions-item>
<el-descriptions-item label="简介">
{{ form.summary || '未设置' }}
</el-descriptions-item>
<el-descriptions-item label="图片">
<img v-if="form.image" :src="form.image" style="max-width: 300px; max-height: 200px;" />
<span v-else>未设置</span>
</el-descriptions-item>
<el-descriptions-item label="视频">
<a v-if="form.video" :href="form.video" target="_blank">查看视频</a>
<span v-else>未设置</span>
</el-descriptions-item>
<el-descriptions-item label="状态">
<el-tag :type="form.status === '0' ? 'success' : 'danger'">
{{ form.status ? dict.type.sys_normal_disable.find(item => item.value === form.status).label : '未知' }}
</el-tag>
</el-descriptions-item>
</el-descriptions>
</el-card>
</div>
<!-- 编辑视图 -->
<el-form v-else ref="form" :model="form" :rules="rules" label-width="80px" v-loading="loading">
<el-row>
<el-col :span="24">
<el-form-item label="标题" prop="title">
......@@ -41,6 +73,7 @@
</el-row>
<el-form-item>
<el-button type="primary" @click="submitForm" v-hasPermi="['homepage:overview:edit']">保 存</el-button>
<el-button @click="cancelEdit">取消</el-button>
</el-form-item>
</el-form>
</div>
......@@ -59,6 +92,7 @@ export default {
data() {
return {
loading: true,
editing: false,
form: {
overviewId: undefined,
title: undefined,
......@@ -106,6 +140,12 @@ export default {
this.loading = false
})
},
enterEdit() {
this.editing = true
},
cancelEdit() {
this.editing = false
},
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
......@@ -113,11 +153,13 @@ export default {
updateOverview(this.form).then(() => {
this.$modal.msgSuccess("保存成功")
this.getOverviewData()
this.editing = false
})
} else {
addOverview(this.form).then(() => {
this.$modal.msgSuccess("保存成功")
this.getOverviewData()
this.editing = false
})
}
}
......
{
"name": "international-science-program-website",
"lockfileVersion": 3,
"requires": true,
"packages": {}
}
......@@ -12,11 +12,10 @@ import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.system.domain.SysProjectProgress;
import com.ruoyi.system.service.ISysProjectProgressService;
import com.ruoyi.system.domain.SysImplementationProgress;
import com.ruoyi.system.service.ISysImplementationProgressService;
import com.ruoyi.web.mapper.ImplementationProgressMapper;
import java.util.Base64;
import java.util.List;
/**
* 项目实施进展Controller
......@@ -34,12 +33,12 @@ public class SysProjectProgressController extends BaseController
private ImplementationProgressMapper implementationProgressMapper;
@Autowired
private ISysProjectProgressService projectProgressService;
private ISysImplementationProgressService implementationProgressService;
@GetMapping
public String projectProgress(ModelMap mmap)
{
SysProjectProgress projectProgress = implementationProgressMapper.selectSysProjectProgressList(new SysProjectProgress());
SysImplementationProgress projectProgress = implementationProgressMapper.selectSysImplementationProgressList(new SysImplementationProgress());
mmap.put("projectProgress", projectProgress);
return prefix + "/projectProgress";
}
......@@ -49,23 +48,23 @@ public class SysProjectProgressController extends BaseController
@ResponseBody
public AjaxResult getProjectProgressInfo()
{
SysProjectProgress projectProgress = implementationProgressMapper.selectSysProjectProgressList(new SysProjectProgress());
SysImplementationProgress projectProgress = implementationProgressMapper.selectSysImplementationProgressList(new SysImplementationProgress());
return AjaxResult.success(projectProgress);
}
@Anonymous
@GetMapping("/list")
@ResponseBody
public AjaxResult listProgress(SysProjectProgress progress)
public AjaxResult listProgress(SysImplementationProgress progress)
{
List<SysProjectProgress> list = projectProgressService.selectSysProjectProgressList(progress);
return AjaxResult.success(list);
SysImplementationProgress result = implementationProgressService.selectSysImplementationProgress();
return AjaxResult.success(result);
}
@PreAuthorize("@ss.hasPermi('system:projectProgress:edit')")
@PostMapping("/save")
@ResponseBody
public AjaxResult save(@RequestBody SysProjectProgress projectProgress)
public AjaxResult save(@RequestBody SysImplementationProgress projectProgress)
{
try {
if (projectProgress.getContent() != null && !projectProgress.getContent().isEmpty()) {
......@@ -79,15 +78,15 @@ public class SysProjectProgressController extends BaseController
projectProgress.setUpdateBy(getUsername());
projectProgress.setUpdateTime(new java.util.Date());
SysProjectProgress existingProgress = implementationProgressMapper.selectSysProjectProgressList(new SysProjectProgress());
SysImplementationProgress existingProgress = implementationProgressMapper.selectSysImplementationProgressList(new SysImplementationProgress());
if (existingProgress != null) {
projectProgress.setId(existingProgress.getId());
return toAjax(implementationProgressMapper.updateSysProjectProgress(projectProgress));
return toAjax(implementationProgressMapper.updateSysImplementationProgress(projectProgress));
} else {
projectProgress.setCreateBy(getUsername());
projectProgress.setCreateTime(new java.util.Date());
return toAjax(implementationProgressMapper.insertSysProjectProgress(projectProgress));
return toAjax(implementationProgressMapper.insertSysImplementationProgress(projectProgress));
}
}
}
package com.ruoyi.web.mapper;
import com.ruoyi.system.domain.SysProjectProgress;
import com.ruoyi.system.domain.SysImplementationProgress;
public interface ImplementationProgressMapper
{
public SysProjectProgress selectSysProjectProgressList(SysProjectProgress sysProjectProgress);
public SysImplementationProgress selectSysImplementationProgressList(SysImplementationProgress sysImplementationProgress);
public SysProjectProgress selectSysProjectProgressById(Long id);
public SysImplementationProgress selectSysImplementationProgressById(Long id);
public int insertSysProjectProgress(SysProjectProgress sysProjectProgress);
public int insertSysImplementationProgress(SysImplementationProgress sysImplementationProgress);
public int updateSysProjectProgress(SysProjectProgress sysProjectProgress);
public int updateSysImplementationProgress(SysImplementationProgress sysImplementationProgress);
}
......@@ -10,9 +10,9 @@ spring:
driverClassName: com.mysql.cj.jdbc.Driver
druid:
master:
url: jdbc:mysql://172.28.135.68:3306/sts_web?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: 123456
url: jdbc:mysql://101.126.150.164:3307/sts?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: script
password: changfA123$
slave:
enabled: false
initialSize: 5
......@@ -48,16 +48,16 @@ spring:
# redis 配置
redis:
enabled: true
host: localhost
host: 101.126.150.164
port: 6379
database: 0
password:
database: 5
password: script
timeout: 10s
lettuce:
pool:
min-idle: 0
max-idle: 8
max-active: 8
min-idle: 5
max-idle: 20
max-active: 50
max-wait: -1ms
# 日志配置
......
......@@ -43,7 +43,7 @@ spring:
multi-statement-allow: true
# redis 配置
redis:
enabled: false
enabled: true
host: 101.126.150.164
port: 6379
database: 5
......
......@@ -4,7 +4,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.web.mapper.ImplementationProgressMapper">
<resultMap type="com.ruoyi.system.domain.SysProjectProgress" id="SysProjectProgressResult">
<resultMap type="com.ruoyi.system.domain.SysImplementationProgress" id="SysImplementationProgressResult">
<result property="id" column="id" />
<result property="title" column="title" />
<result property="content" column="content" />
......@@ -15,22 +15,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="remark" column="remark" />
</resultMap>
<sql id="selectSysProjectProgressVo">
<sql id="selectSysImplementationProgressVo">
select id, title, content, create_by, create_time, update_by, update_time, remark from sys_implementation_progress
</sql>
<select id="selectSysProjectProgressList" parameterType="SysProjectProgress" resultMap="SysProjectProgressResult">
<include refid="selectSysProjectProgressVo"/>
<select id="selectSysImplementationProgressList" parameterType="SysImplementationProgress" resultMap="SysImplementationProgressResult">
<include refid="selectSysImplementationProgressVo"/>
limit 1
</select>
<select id="selectSysProjectProgressById" parameterType="Long" resultMap="SysProjectProgressResult">
<include refid="selectSysProjectProgressVo"/>
<select id="selectSysImplementationProgressById" parameterType="Long" resultMap="SysImplementationProgressResult">
<include refid="selectSysImplementationProgressVo"/>
where id = #{id}
limit 1
</select>
<insert id="insertSysProjectProgress" parameterType="SysProjectProgress" useGeneratedKeys="true" keyProperty="id">
<insert id="insertSysImplementationProgress" parameterType="SysImplementationProgress" useGeneratedKeys="true" keyProperty="id">
insert into sys_implementation_progress
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="title != null">title,</if>
......@@ -52,7 +52,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</trim>
</insert>
<update id="updateSysProjectProgress" parameterType="SysProjectProgress">
<update id="updateSysImplementationProgress" parameterType="SysImplementationProgress">
update sys_implementation_progress
<trim prefix="SET" suffixOverrides=",">
<if test="title != null">title = #{title},</if>
......
......@@ -48,20 +48,19 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper
@Override
public ServletInputStream getInputStream() throws IOException
{
// 非json类型,直接返回
if (!isJsonRequest())
{
return super.getInputStream();
}
// 为空,直接返回
String json = IOUtils.toString(super.getInputStream(), "utf-8");
if (StringUtils.isEmpty(json))
{
return super.getInputStream();
}
// xss过滤
json = cleanJsonString(json);
json = EscapeUtil.clean(json).trim();
byte[] jsonBytes = json.getBytes("utf-8");
final ByteArrayInputStream bis = new ByteArrayInputStream(jsonBytes);
......@@ -98,6 +97,13 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper
};
}
private String cleanJsonString(String json)
{
json = json.replaceAll("\\\\", "");
json = json.replaceAll("`", "");
return json;
}
/**
* 是否是Json请求
*
......
@echo off
rem jar平级目录
set AppName=ruoyi-admin.jar
rem JVM参数
set JVM_OPTS="-Dname=%AppName% -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
ECHO.
ECHO. [1] 启动%AppName%
ECHO. [2] 关闭%AppName%
ECHO. [3] 重启%AppName%
ECHO. [4] 启动状态 %AppName%
ECHO. [5] 退 出
ECHO.
ECHO.请输入选择项目的序号:
set /p ID=
IF "%id%"=="1" GOTO start
IF "%id%"=="2" GOTO stop
IF "%id%"=="3" GOTO restart
IF "%id%"=="4" GOTO status
IF "%id%"=="5" EXIT
PAUSE
:start
for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
set pid=%%a
set image_name=%%b
)
if defined pid (
echo %%is running
PAUSE
)
start javaw %JVM_OPTS% -jar %AppName%
echo starting……
echo Start %AppName% success...
goto:eof
rem 函数stop通过jps命令查找pid并结束进程
:stop
for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
set pid=%%a
set image_name=%%b
)
if not defined pid (echo process %AppName% does not exists) else (
echo prepare to kill %image_name%
echo start kill %pid% ...
rem 根据进程ID,kill进程
taskkill /f /pid %pid%
)
goto:eof
:restart
call :stop
call :start
goto:eof
:status
for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
set pid=%%a
set image_name=%%b
)
if not defined pid (echo process %AppName% is dead ) else (
echo %image_name% is running
)
goto:eof
#!/bin/sh
# ./ry.sh start 启动 stop 停止 restart 重启 status 状态
AppName=ruoyi-admin.jar
# JVM参数
JVM_OPTS="-Dname=$AppName -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
APP_HOME=`pwd`
LOG_PATH=$APP_HOME/logs/$AppName.log
if [ "$1" = "" ];
then
echo -e "\033[0;31m 未输入操作名 \033[0m \033[0;34m {start|stop|restart|status} \033[0m"
exit 1
fi
if [ "$AppName" = "" ];
then
echo -e "\033[0;31m 未输入应用名 \033[0m"
exit 1
fi
function start()
{
PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
if [ x"$PID" != x"" ]; then
echo "$AppName is running..."
else
nohup java $JVM_OPTS -jar $AppName > /dev/null 2>&1 &
echo "Start $AppName success..."
fi
}
function stop()
{
echo "Stop $AppName"
PID=""
query(){
PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
}
query
if [ x"$PID" != x"" ]; then
kill -TERM $PID
echo "$AppName (pid:$PID) exiting..."
while [ x"$PID" != x"" ]
do
sleep 1
query
done
echo "$AppName exited."
else
echo "$AppName already stopped."
fi
}
function restart()
{
stop
sleep 2
start
}
function status()
{
PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l`
if [ $PID != 0 ];then
echo "$AppName is running..."
else
echo "$AppName is not running..."
fi
}
case $1 in
start)
start;;
stop)
stop;;
restart)
restart;;
status)
status;;
*)
esac
@echo off
echo Setting MinIO bucket policy to public...
set MINIO_ENDPOINT=http://172.28.135.68:9000
set MINIO_ACCESS_KEY=admin
set MINIO_SECRET_KEY=123456789
set BUCKET_NAME=ruoyi
mc alias set myminio %MINIO_ENDPOINT% %MINIO_ACCESS_KEY% %MINIO_SECRET_KEY%
mc anonymous set download myminio/%BUCKET_NAME%
echo Bucket policy set to public successfully!
pause
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment