This commit is contained in:
parent
affd1b9520
commit
1ef13e8821
|
@ -0,0 +1,67 @@
|
||||||
|
# 数据源配置
|
||||||
|
spring:
|
||||||
|
datasource:
|
||||||
|
type: com.alibaba.druid.pool.DruidDataSource
|
||||||
|
driverClassName: oracle.jdbc.driver.OracleDriver
|
||||||
|
druid:
|
||||||
|
# 主库数据源
|
||||||
|
master:
|
||||||
|
# url: jdbc:oracle:thin:@127.0.0.1:1521/orcl
|
||||||
|
# username: root
|
||||||
|
# password: password
|
||||||
|
# url: jdbc:oracle:thin:@10.169.28.44:1521/orcl
|
||||||
|
# username: spg_voc
|
||||||
|
# password: SPG$spgvoc_24!
|
||||||
|
url: jdbc:oracle:thin:@218.58.79.146:17521/orcl
|
||||||
|
username: system
|
||||||
|
password: oracle
|
||||||
|
# 从库数据源
|
||||||
|
slave:
|
||||||
|
# 从数据源开关/默认关闭
|
||||||
|
enabled: false
|
||||||
|
url:
|
||||||
|
username:
|
||||||
|
password:
|
||||||
|
# 初始连接数
|
||||||
|
initialSize: 5
|
||||||
|
# 最小连接池数量
|
||||||
|
minIdle: 10
|
||||||
|
# 最大连接池数量
|
||||||
|
maxActive: 20
|
||||||
|
# 配置获取连接等待超时的时间
|
||||||
|
maxWait: 60000
|
||||||
|
# 配置连接超时时间
|
||||||
|
connectTimeout: 30000
|
||||||
|
# 配置网络超时时间
|
||||||
|
socketTimeout: 60000
|
||||||
|
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
|
||||||
|
timeBetweenEvictionRunsMillis: 60000
|
||||||
|
# 配置一个连接在池中最小生存的时间,单位是毫秒
|
||||||
|
minEvictableIdleTimeMillis: 300000
|
||||||
|
# 配置一个连接在池中最大生存的时间,单位是毫秒
|
||||||
|
maxEvictableIdleTimeMillis: 900000
|
||||||
|
# 配置检测连接是否有效
|
||||||
|
validationQuery: SELECT 1 FROM DUAL
|
||||||
|
testWhileIdle: true
|
||||||
|
testOnBorrow: false
|
||||||
|
testOnReturn: false
|
||||||
|
webStatFilter:
|
||||||
|
enabled: true
|
||||||
|
statViewServlet:
|
||||||
|
enabled: true
|
||||||
|
# 设置白名单,不填则允许所有访问
|
||||||
|
allow:
|
||||||
|
url-pattern: /druid/*
|
||||||
|
# 控制台管理用户名和密码
|
||||||
|
login-username: ruoyi
|
||||||
|
login-password: 123456
|
||||||
|
filter:
|
||||||
|
stat:
|
||||||
|
enabled: true
|
||||||
|
# 慢SQL记录
|
||||||
|
log-slow-sql: true
|
||||||
|
slow-sql-millis: 1000
|
||||||
|
merge-sql: false
|
||||||
|
wall:
|
||||||
|
config:
|
||||||
|
multi-statement-allow: true
|
|
@ -0,0 +1,147 @@
|
||||||
|
# 项目相关配置
|
||||||
|
ruoyi:
|
||||||
|
# 名称
|
||||||
|
name: RuoYi
|
||||||
|
# 版本
|
||||||
|
version: 3.8.8
|
||||||
|
# 版权年份
|
||||||
|
copyrightYear: 2024
|
||||||
|
# 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
|
||||||
|
profile: D:/ruoyi/uploadPath
|
||||||
|
# 获取ip地址开关
|
||||||
|
addressEnabled: false
|
||||||
|
# 验证码类型 math 数字计算 char 字符验证
|
||||||
|
captchaType: math
|
||||||
|
# 本地文件上传
|
||||||
|
file:
|
||||||
|
domain:
|
||||||
|
# path: /home/file/upload
|
||||||
|
path: D:/ruoyi/uploadPath
|
||||||
|
prefix: /statics
|
||||||
|
# 开发环境配置
|
||||||
|
server:
|
||||||
|
# 服务器的HTTP端口,默认为8080
|
||||||
|
port: 8080
|
||||||
|
servlet:
|
||||||
|
# 应用的访问路径
|
||||||
|
context-path: /
|
||||||
|
tomcat:
|
||||||
|
# tomcat的URI编码
|
||||||
|
uri-encoding: UTF-8
|
||||||
|
# 连接数满后的排队数,默认为100
|
||||||
|
accept-count: 1000
|
||||||
|
threads:
|
||||||
|
# tomcat最大线程数,默认为200
|
||||||
|
max: 800
|
||||||
|
# Tomcat启动初始化的线程数,默认值10
|
||||||
|
min-spare: 100
|
||||||
|
|
||||||
|
# 日志配置
|
||||||
|
logging:
|
||||||
|
level:
|
||||||
|
com.ruoyi: debug
|
||||||
|
org.springframework: warn
|
||||||
|
|
||||||
|
# 用户配置
|
||||||
|
user:
|
||||||
|
password:
|
||||||
|
# 密码最大错误次数
|
||||||
|
maxRetryCount: 5
|
||||||
|
# 密码锁定时间(默认10分钟)
|
||||||
|
lockTime: 10
|
||||||
|
|
||||||
|
# Spring配置
|
||||||
|
spring:
|
||||||
|
# 资源信息
|
||||||
|
messages:
|
||||||
|
# 国际化资源文件路径
|
||||||
|
basename: i18n/messages
|
||||||
|
profiles:
|
||||||
|
active: druid
|
||||||
|
# 文件上传
|
||||||
|
servlet:
|
||||||
|
multipart:
|
||||||
|
# 单个文件大小
|
||||||
|
max-file-size: 10MB
|
||||||
|
# 设置总上传的文件大小
|
||||||
|
max-request-size: 20MB
|
||||||
|
# 服务模块
|
||||||
|
devtools:
|
||||||
|
restart:
|
||||||
|
# 热部署开关
|
||||||
|
enabled: true
|
||||||
|
# redis 配置
|
||||||
|
redis:
|
||||||
|
# 地址
|
||||||
|
host: 192.168.31.105
|
||||||
|
# host: 127.0.0.1
|
||||||
|
# 端口,默认为6379
|
||||||
|
port: 6379
|
||||||
|
# 数据库索引
|
||||||
|
database: 0
|
||||||
|
# 密码
|
||||||
|
# password: 123456
|
||||||
|
password: admin123!
|
||||||
|
# 连接超时时间
|
||||||
|
timeout: 10s
|
||||||
|
lettuce:
|
||||||
|
pool:
|
||||||
|
# 连接池中的最小空闲连接
|
||||||
|
min-idle: 0
|
||||||
|
# 连接池中的最大空闲连接
|
||||||
|
max-idle: 8
|
||||||
|
# 连接池的最大数据库连接数
|
||||||
|
max-active: 8
|
||||||
|
# #连接池最大阻塞等待时间(使用负值表示没有限制)
|
||||||
|
max-wait: -1ms
|
||||||
|
|
||||||
|
# token配置
|
||||||
|
token:
|
||||||
|
# 令牌自定义标识
|
||||||
|
header: Authorization
|
||||||
|
# 令牌密钥
|
||||||
|
secret: abcdefghijklmnopqrstuvwxyz
|
||||||
|
# 令牌有效期(默认30分钟)
|
||||||
|
expireTime: 30
|
||||||
|
|
||||||
|
# MyBatis配置
|
||||||
|
mybatis:
|
||||||
|
# 搜索指定包别名
|
||||||
|
typeAliasesPackage: com.ruoyi.project.**.domain
|
||||||
|
# 配置mapper的扫描,找到所有的mapper.xml映射文件
|
||||||
|
mapperLocations: classpath*:mybatis/**/*Mapper.xml
|
||||||
|
# 加载全局的配置文件
|
||||||
|
configLocation: classpath:mybatis/mybatis-config.xml
|
||||||
|
|
||||||
|
# PageHelper分页插件
|
||||||
|
pagehelper:
|
||||||
|
helperDialect: oracle
|
||||||
|
supportMethodsArguments: true
|
||||||
|
params: count=countSql
|
||||||
|
|
||||||
|
# Swagger配置
|
||||||
|
swagger:
|
||||||
|
# 是否开启swagger
|
||||||
|
enabled: true
|
||||||
|
# 请求前缀
|
||||||
|
pathMapping: /dev-api
|
||||||
|
|
||||||
|
# 防止XSS攻击
|
||||||
|
xss:
|
||||||
|
# 过滤开关
|
||||||
|
enabled: true
|
||||||
|
# 排除链接(多个用逗号分隔)
|
||||||
|
excludes: /system/notice
|
||||||
|
# 匹配链接
|
||||||
|
urlPatterns: /system/*,/monitor/*,/tool/*
|
||||||
|
|
||||||
|
# 代码生成
|
||||||
|
gen:
|
||||||
|
# 作者
|
||||||
|
author: ruoyi
|
||||||
|
# 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool
|
||||||
|
packageName: com.ruoyi.project.system
|
||||||
|
# 自动去除表前缀,默认是true
|
||||||
|
autoRemovePre: false
|
||||||
|
# 表前缀(生成类名不会包含表前缀,多个用逗号分隔)
|
||||||
|
tablePrefix: sys_
|
|
@ -0,0 +1,239 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-tabs type="border-card" v-model="activeTab" @tab-click="getListData">
|
||||||
|
<el-tab-pane v-for="item in choseList " :label="item">
|
||||||
|
|
||||||
|
<div class="main-box" v-if="dataList.length>0">
|
||||||
|
<div class="main" v-for="item in dataList" >
|
||||||
|
<div class="left" @click="read(item)" >
|
||||||
|
<div :class="item.isRead === '0' ? 'not-read' : 'readed'"></div>
|
||||||
|
{{ item.sendText }}
|
||||||
|
</div>
|
||||||
|
<div style="display: inline-flex;">
|
||||||
|
<div class="right">{{ '发送时间:' + item.sendTime }}</div>
|
||||||
|
<div class="right" style="margin-left: 10px;">{{ '发送人:' + item.sender }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
|
||||||
|
@pagination="getList" />
|
||||||
|
</div>
|
||||||
|
<div v-else class="content"> <img class="img" src="@/assets/home/not-data.png" ></div>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
<el-dialog
|
||||||
|
title="查看消息详情"
|
||||||
|
:visible.sync="isShowMsg"
|
||||||
|
width="50%"
|
||||||
|
:before-close="handleClose">
|
||||||
|
<div class="title">消息时间轴 </div>
|
||||||
|
<el-timeline>
|
||||||
|
<el-timeline-item v-for="item in infoList" :timestamp="item.sendTime" placement="top" >
|
||||||
|
<el-card >
|
||||||
|
<h4>{{item.infoType}}{{item.sendText}}</h4>
|
||||||
|
<p>{{item.sender}} 提交于 {{item.sendTime}}</p>
|
||||||
|
</el-card>
|
||||||
|
</el-timeline-item>
|
||||||
|
</el-timeline>
|
||||||
|
<div class="title">添加回复 </div>
|
||||||
|
<div style="margin:10px">
|
||||||
|
<el-input type="textarea" :rows="2" placeholder="请输入回复内容..." v-model="shareContent">
|
||||||
|
</el-input>
|
||||||
|
</div>
|
||||||
|
<div> <el-button class="agreeButton" @click="sendMsg">发送</el-button></div>
|
||||||
|
<!-- <span slot="footer" class="dialog-footer">
|
||||||
|
<el-button @click="handleClose">取 消</el-button>
|
||||||
|
<el-button type="primary" @click="dialogVisible = false">确 定</el-button>
|
||||||
|
</span> -->
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
import { listMsg, readMsg,getMsgDetail } from "@/api/home";
|
||||||
|
import { sendMessage} from "@/api/home";
|
||||||
|
export default {
|
||||||
|
name: "SendMsg",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
shareContent:'',
|
||||||
|
repayUser:{},
|
||||||
|
infoList:[],
|
||||||
|
isShowMsg:false,
|
||||||
|
activeTab: '0',
|
||||||
|
choseList: ['未读消息', '已读消息', '全部消息'],
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
isRead: '0',
|
||||||
|
},
|
||||||
|
total: 4,
|
||||||
|
dataList: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getListData() {
|
||||||
|
if (this.activeTab == 0) {//未读
|
||||||
|
this.queryParams.isRead = '0'
|
||||||
|
} else if (this.activeTab == 1) {//已读
|
||||||
|
this.queryParams.isRead = '1'
|
||||||
|
} else {
|
||||||
|
this.queryParams.isRead = ''
|
||||||
|
}
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
/** 查询消息列表 */
|
||||||
|
getList() {
|
||||||
|
this.loading = true;
|
||||||
|
listMsg(this.queryParams).then(response => {
|
||||||
|
this.dataList = response.rows;
|
||||||
|
this.total = response.total;
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
//消息已读
|
||||||
|
read(item){
|
||||||
|
this.isShowMsg=true;
|
||||||
|
this.repayUser=item
|
||||||
|
getMsgDetail(item.id).then(response => {
|
||||||
|
if(response.code !=500){
|
||||||
|
this.infoList=response.data
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
sendMsg(){
|
||||||
|
let readList=[]
|
||||||
|
readList.push(this.repayUser.sender)
|
||||||
|
let params={
|
||||||
|
readerList: readList,
|
||||||
|
sendText:this.shareContent,
|
||||||
|
parentId:this.infoList[0].id
|
||||||
|
}
|
||||||
|
sendMessage(params).then(response => {
|
||||||
|
if(response.code==200){
|
||||||
|
this.$message.success("消息回复成功!")
|
||||||
|
}else{
|
||||||
|
this.$message.error("消息回复失败!")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
//关闭
|
||||||
|
handleClose(){
|
||||||
|
this.isShowMsg=false
|
||||||
|
readMsg(this.repayUser.id).then(response => {
|
||||||
|
if(response.code !=500){
|
||||||
|
// this.$Message.info("消息已读")
|
||||||
|
this.getList()
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.agreeButton {
|
||||||
|
display: inline-block;
|
||||||
|
line-height: 8px;
|
||||||
|
width: 80px;
|
||||||
|
height: 32px;
|
||||||
|
white-space: nowrap;
|
||||||
|
cursor: pointer;
|
||||||
|
color: #ffffff;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
text-align: center;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
outline: 0;
|
||||||
|
margin-left: 10px;
|
||||||
|
-webkit-transition: .1s;
|
||||||
|
transition: .1s;
|
||||||
|
font-weight: 500;
|
||||||
|
//padding: 12px 20px;
|
||||||
|
font-size: 14px;
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: #068f5c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.agreeButton:hover {
|
||||||
|
background: #65a5f9;
|
||||||
|
border-color: #65a5f9;
|
||||||
|
color: #FFF;
|
||||||
|
}
|
||||||
|
.title {
|
||||||
|
padding-left: 20px;
|
||||||
|
color: #212121;
|
||||||
|
font-size: 16px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
margin-top: 10px;
|
||||||
|
background: url("~@/assets/ucs/biaoti.png") no-repeat;
|
||||||
|
background-position-y: 7px;
|
||||||
|
}
|
||||||
|
.content{
|
||||||
|
height: 800px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.img{
|
||||||
|
position: absolute;
|
||||||
|
top:50%;
|
||||||
|
left:50%;
|
||||||
|
transform:translate(-50%,-50%);
|
||||||
|
}
|
||||||
|
.main-box {
|
||||||
|
width: 100%;
|
||||||
|
background: #fff;
|
||||||
|
height: 800px;
|
||||||
|
|
||||||
|
.main {
|
||||||
|
background: #fff;
|
||||||
|
margin: 0 5px;
|
||||||
|
// min-height: 80px;
|
||||||
|
// overflow-y: scroll;
|
||||||
|
border-top: 1px solid #dddee1;
|
||||||
|
|
||||||
|
.readed {
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
border-radius: 5px;
|
||||||
|
display: inline-flex;
|
||||||
|
background: green;
|
||||||
|
}
|
||||||
|
|
||||||
|
.not-read {
|
||||||
|
display: inline-flex;
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
border-radius: 5px;
|
||||||
|
background: red;
|
||||||
|
}
|
||||||
|
|
||||||
|
.left {
|
||||||
|
margin-top: 5px;
|
||||||
|
width: 90%;
|
||||||
|
max-height: 43px;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-line-clamp: 2;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
word-break: break-all;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.left:hover{
|
||||||
|
color:#068f5c;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
.right {
|
||||||
|
margin-top: 5px;
|
||||||
|
|
||||||
|
height: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
Reference in New Issue