Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
admin
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
0925253a
authored
Apr 22, 2024
by
YunaiV
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【移除】敏感词的管理,简化项目的复杂度
parent
98bf5a10
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
0 additions
and
533 deletions
+0
-533
src/api/system/sensitiveWord/index.ts
+0
-58
src/views/system/sensitiveWord/SensitiveWordForm.vue
+0
-131
src/views/system/sensitiveWord/SensitiveWordTestForm.vue
+0
-91
src/views/system/sensitiveWord/index.vue
+0
-253
No files found.
src/api/system/sensitiveWord/index.ts
deleted
100644 → 0
View file @
98bf5a10
import
request
from
'@/config/axios'
import
qs
from
'qs'
export
interface
SensitiveWordVO
{
id
:
number
name
:
string
status
:
number
description
:
string
tags
:
string
[]
createTime
:
Date
}
export
interface
SensitiveWordTestReqVO
{
text
:
string
tag
:
string
[]
}
// 查询敏感词列表
export
const
getSensitiveWordPage
=
(
params
:
PageParam
)
=>
{
return
request
.
get
({
url
:
'/system/sensitive-word/page'
,
params
})
}
// 查询敏感词详情
export
const
getSensitiveWord
=
(
id
:
number
)
=>
{
return
request
.
get
({
url
:
'/system/sensitive-word/get?id='
+
id
})
}
// 新增敏感词
export
const
createSensitiveWord
=
(
data
:
SensitiveWordVO
)
=>
{
return
request
.
post
({
url
:
'/system/sensitive-word/create'
,
data
})
}
// 修改敏感词
export
const
updateSensitiveWord
=
(
data
:
SensitiveWordVO
)
=>
{
return
request
.
put
({
url
:
'/system/sensitive-word/update'
,
data
})
}
// 删除敏感词
export
const
deleteSensitiveWord
=
(
id
:
number
)
=>
{
return
request
.
delete
({
url
:
'/system/sensitive-word/delete?id='
+
id
})
}
// 导出敏感词
export
const
exportSensitiveWord
=
(
params
)
=>
{
return
request
.
download
({
url
:
'/system/sensitive-word/export-excel'
,
params
})
}
// 获取所有敏感词的标签数组
export
const
getSensitiveWordTagList
=
()
=>
{
return
request
.
get
({
url
:
'/system/sensitive-word/get-tags'
})
}
// 获得文本所包含的不合法的敏感词数组
export
const
validateText
=
(
query
:
SensitiveWordTestReqVO
)
=>
{
return
request
.
get
({
url
:
'/system/sensitive-word/validate-text?'
+
qs
.
stringify
(
query
,
{
arrayFormat
:
'repeat'
})
})
}
src/views/system/sensitiveWord/SensitiveWordForm.vue
deleted
100644 → 0
View file @
98bf5a10
<
template
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTitle"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
>
<el-form-item
label=
"敏感词"
prop=
"name"
>
<el-input
v-model=
"formData.name"
placeholder=
"请输入敏感词"
/>
</el-form-item>
<el-form-item
label=
"状态"
prop=
"status"
>
<el-radio-group
v-model=
"formData.status"
>
<el-radio
v-for=
"dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key=
"dict.value"
:label=
"dict.value"
>
{{
dict
.
label
}}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"description"
>
<el-input
v-model=
"formData.description"
placeholder=
"请输入内容"
/>
</el-form-item>
<el-form-item
label=
"标签"
prop=
"tags"
>
<el-select
v-model=
"formData.tags"
allow-create
filterable
multiple
placeholder=
"请选择文章标签"
style=
"width: 380px"
>
<el-option
v-for=
"tag in tagList"
:key=
"tag"
:label=
"tag"
:value=
"tag"
/>
</el-select>
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
lang=
"ts"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
*
as
SensitiveWordApi
from
'@/api/system/sensitiveWord'
import
{
CommonStatusEnum
}
from
'@/utils/constants'
defineOptions
({
name
:
'SystemSensitiveWordForm'
})
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
const
dialogVisible
=
ref
(
false
)
// 弹窗的是否展示
const
dialogTitle
=
ref
(
''
)
// 弹窗的标题
const
formLoading
=
ref
(
false
)
// 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
const
formType
=
ref
(
''
)
// 表单的类型:create - 新增;update - 修改
const
formData
=
ref
({
id
:
undefined
,
name
:
''
,
status
:
CommonStatusEnum
.
ENABLE
,
description
:
''
,
tags
:
[]
})
const
formRules
=
reactive
({
name
:
[{
required
:
true
,
message
:
'敏感词不能为空'
,
trigger
:
'blur'
}],
tags
:
[{
required
:
true
,
message
:
'标签不能为空'
,
trigger
:
'blur'
}]
})
const
formRef
=
ref
()
// 表单 Ref
const
tagList
=
ref
([])
// 标签数组
/** 打开弹窗 */
const
open
=
async
(
type
:
string
,
id
?:
number
)
=>
{
dialogVisible
.
value
=
true
dialogTitle
.
value
=
t
(
'action.'
+
type
)
formType
.
value
=
type
resetForm
()
// 修改时,设置数据
if
(
id
)
{
formLoading
.
value
=
true
try
{
formData
.
value
=
await
SensitiveWordApi
.
getSensitiveWord
(
id
)
}
finally
{
formLoading
.
value
=
false
}
}
// 获得 Tag 标签列表
tagList
.
value
=
await
SensitiveWordApi
.
getSensitiveWordTagList
()
}
defineExpose
({
open
})
// 提供 open 方法,用于打开弹窗
/** 提交表单 */
const
emit
=
defineEmits
([
'success'
])
// 定义 success 事件,用于操作成功后的回调
const
submitForm
=
async
()
=>
{
// 校验表单
if
(
!
formRef
)
return
const
valid
=
await
formRef
.
value
.
validate
()
if
(
!
valid
)
return
// 提交请求
formLoading
.
value
=
true
try
{
const
data
=
formData
.
value
as
unknown
as
SensitiveWordApi
.
SensitiveWordVO
if
(
formType
.
value
===
'create'
)
{
await
SensitiveWordApi
.
createSensitiveWord
(
data
)
message
.
success
(
t
(
'common.createSuccess'
))
}
else
{
await
SensitiveWordApi
.
updateSensitiveWord
(
data
)
message
.
success
(
t
(
'common.updateSuccess'
))
}
dialogVisible
.
value
=
false
// 发送操作成功的事件
emit
(
'success'
)
}
finally
{
formLoading
.
value
=
false
}
}
/** 重置表单 */
const
resetForm
=
()
=>
{
formData
.
value
=
{
id
:
undefined
,
name
:
''
,
status
:
CommonStatusEnum
.
ENABLE
,
description
:
''
,
tags
:
[]
}
formRef
.
value
?.
resetFields
()
}
</
script
>
src/views/system/sensitiveWord/SensitiveWordTestForm.vue
deleted
100644 → 0
View file @
98bf5a10
<
template
>
<Dialog
v-model=
"dialogVisible"
title=
"检测敏感词"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
>
<el-form-item
label=
"文本"
prop=
"text"
>
<el-input
v-model=
"formData.text"
placeholder=
"请输入测试文本"
type=
"textarea"
/>
</el-form-item>
<el-form-item
label=
"标签"
prop=
"tags"
>
<el-select
v-model=
"formData.tags"
allow-create
filterable
multiple
placeholder=
"请选择标签"
style=
"width: 380px"
>
<el-option
v-for=
"tag in tagList"
:key=
"tag"
:label=
"tag"
:value=
"tag"
/>
</el-select>
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm"
>
检 测
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
lang=
"ts"
setup
>
import
*
as
SensitiveWordApi
from
'@/api/system/sensitiveWord'
defineOptions
({
name
:
'SystemSensitiveWordTestForm'
})
const
message
=
useMessage
()
// 消息弹窗
const
dialogVisible
=
ref
(
false
)
// 弹窗的是否展示
const
formLoading
=
ref
(
false
)
// 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
const
formData
=
ref
({
text
:
''
,
tags
:
[]
})
const
formRules
=
reactive
({
text
:
[{
required
:
true
,
message
:
'测试文本不能为空'
,
trigger
:
'blur'
}],
tags
:
[{
required
:
true
,
message
:
'标签不能为空'
,
trigger
:
'blur'
}]
})
const
formRef
=
ref
()
// 表单 Ref
const
tagList
=
ref
([])
// 标签数组
/** 打开弹窗 */
const
open
=
async
()
=>
{
dialogVisible
.
value
=
true
resetForm
()
// 获得 Tag 标签列表
tagList
.
value
=
await
SensitiveWordApi
.
getSensitiveWordTagList
()
}
defineExpose
({
open
})
// 提供 open 方法,用于打开弹窗
/** 提交表单 */
const
submitForm
=
async
()
=>
{
// 校验表单
if
(
!
formRef
)
return
const
valid
=
await
formRef
.
value
.
validate
()
if
(
!
valid
)
return
// 提交请求
formLoading
.
value
=
true
try
{
const
form
=
formData
.
value
as
unknown
as
SensitiveWordApi
.
SensitiveWordTestReqVO
const
data
=
await
SensitiveWordApi
.
validateText
(
form
)
if
(
data
.
length
===
0
)
{
message
.
success
(
'不包含敏感词!'
)
return
}
message
.
warning
(
'包含敏感词:'
+
data
.
join
(
', '
))
dialogVisible
.
value
=
false
}
finally
{
formLoading
.
value
=
false
}
}
/** 重置表单 */
const
resetForm
=
()
=>
{
formData
.
value
=
{
text
:
''
,
tags
:
[]
}
formRef
.
value
?.
resetFields
()
}
</
script
>
src/views/system/sensitiveWord/index.vue
deleted
100644 → 0
View file @
98bf5a10
<
template
>
<!-- 搜索工作栏 -->
<ContentWrap>
<el-form
ref=
"queryFormRef"
:inline=
"true"
:model=
"queryParams"
class=
"-mb-15px"
label-width=
"68px"
>
<el-form-item
label=
"敏感词"
prop=
"name"
>
<el-input
v-model=
"queryParams.name"
class=
"!w-240px"
clearable
placeholder=
"请输入敏感词"
@
keyup
.
enter=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"标签"
prop=
"tag"
>
<el-select
v-model=
"queryParams.tag"
class=
"!w-240px"
clearable
placeholder=
"请选择标签"
@
keyup
.
enter=
"handleQuery"
>
<el-option
v-for=
"tag in tagList"
:key=
"tag"
:label=
"tag"
:value=
"tag"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"状态"
prop=
"status"
>
<el-select
v-model=
"queryParams.status"
clearable
placeholder=
"请选择启用状态"
>
<el-option
v-for=
"dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
class=
"!w-240px"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"创建时间"
prop=
"createTime"
>
<el-date-picker
v-model=
"queryParams.createTime"
:default-time=
"[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class=
"!w-240px"
end-placeholder=
"结束日期"
start-placeholder=
"开始日期"
type=
"daterange"
value-format=
"YYYY-MM-DD HH:mm:ss"
/>
</el-form-item>
<el-form-item>
<el-button
@
click=
"handleQuery"
>
<Icon
class=
"mr-5px"
icon=
"ep:search"
/>
搜索
</el-button>
<el-button
@
click=
"resetQuery"
>
<Icon
class=
"mr-5px"
icon=
"ep:refresh"
/>
重置
</el-button>
<el-button
v-hasPermi=
"['system:sensitive-word:create']"
plain
type=
"primary"
@
click=
"openForm('create')"
>
<Icon
class=
"mr-5px"
icon=
"ep:plus"
/>
新增
</el-button>
<el-button
v-hasPermi=
"['system:sensitive-word:export']"
:loading=
"exportLoading"
plain
type=
"success"
@
click=
"handleExport"
>
<Icon
class=
"mr-5px"
icon=
"ep:download"
/>
导出
</el-button>
<el-button
plain
type=
"warning"
@
click=
"openTestForm"
>
<Icon
class=
"mr-5px"
icon=
"ep:document-checked"
/>
测试
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table
v-loading=
"loading"
:data=
"list"
>
<el-table-column
align=
"center"
label=
"编号"
prop=
"id"
/>
<el-table-column
align=
"center"
label=
"敏感词"
prop=
"name"
/>
<el-table-column
align=
"center"
label=
"状态"
prop=
"status"
>
<template
#
default=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.COMMON_STATUS"
:value=
"scope.row.status"
/>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"描述"
prop=
"description"
/>
<el-table-column
align=
"center"
label=
"标签"
prop=
"tags"
>
<
template
#
default=
"scope"
>
<el-tag
v-for=
"tag in scope.row.tags"
:key=
"tag"
:disable-transitions=
"true"
class=
"mr-5px"
>
{{
tag
}}
</el-tag>
</
template
>
</el-table-column>
<el-table-column
:formatter=
"dateFormatter"
align=
"center"
label=
"创建时间"
prop=
"createTime"
width=
"180"
/>
<el-table-column
align=
"center"
label=
"操作"
>
<
template
#
default=
"scope"
>
<el-button
v-hasPermi=
"['infra:config:update']"
link
type=
"primary"
@
click=
"openForm('update', scope.row.id)"
>
编辑
</el-button>
<el-button
v-hasPermi=
"['infra:config:delete']"
link
type=
"danger"
@
click=
"handleDelete(scope.row.id)"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
v-model:limit=
"queryParams.pageSize"
v-model:page=
"queryParams.pageNo"
:total=
"total"
@
pagination=
"getList"
/>
</ContentWrap>
<!-- 表单弹窗:添加/修改 -->
<SensitiveWordForm
ref=
"formRef"
@
success=
"getList"
/>
<!-- 表单弹窗:测试敏感词 -->
<SensitiveWordTestForm
ref=
"testFormRef"
/>
</template>
<
script
lang=
"ts"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
{
dateFormatter
}
from
'@/utils/formatTime'
import
download
from
'@/utils/download'
import
*
as
SensitiveWordApi
from
'@/api/system/sensitiveWord'
import
SensitiveWordForm
from
'./SensitiveWordForm.vue'
import
SensitiveWordTestForm
from
'./SensitiveWordTestForm.vue'
defineOptions
({
name
:
'SystemSensitiveWord'
})
const
message
=
useMessage
()
// 消息弹窗
const
{
t
}
=
useI18n
()
// 国际化
const
loading
=
ref
(
true
)
// 列表的加载中
const
total
=
ref
(
0
)
// 列表的总页数
const
list
=
ref
([])
// 列表的数据
const
queryParams
=
reactive
({
pageNo
:
1
,
pageSize
:
10
,
name
:
undefined
,
tag
:
undefined
,
status
:
undefined
,
createTime
:
[]
})
const
queryFormRef
=
ref
()
// 搜索的表单
const
exportLoading
=
ref
(
false
)
// 导出的加载中
const
tagList
=
ref
([])
// 标签数组
/** 查询列表 */
const
getList
=
async
()
=>
{
loading
.
value
=
true
try
{
const
data
=
await
SensitiveWordApi
.
getSensitiveWordPage
(
queryParams
)
list
.
value
=
data
.
list
total
.
value
=
data
.
total
}
finally
{
loading
.
value
=
false
}
}
/** 搜索按钮操作 */
const
handleQuery
=
()
=>
{
queryParams
.
pageNo
=
1
getList
()
}
/** 重置按钮操作 */
const
resetQuery
=
()
=>
{
queryFormRef
.
value
.
resetFields
()
handleQuery
()
}
/** 添加/修改操作 */
const
formRef
=
ref
()
const
openForm
=
(
type
:
string
,
id
?:
number
)
=>
{
formRef
.
value
.
open
(
type
,
id
)
}
/** 测试敏感词按钮操作 */
const
testFormRef
=
ref
()
const
openTestForm
=
()
=>
{
testFormRef
.
value
.
open
()
}
/** 删除按钮操作 */
const
handleDelete
=
async
(
id
:
number
)
=>
{
try
{
// 删除的二次确认
await
message
.
delConfirm
()
// 发起删除
await
SensitiveWordApi
.
deleteSensitiveWord
(
id
)
message
.
success
(
t
(
'common.delSuccess'
))
// 刷新列表
await
getList
()
}
catch
{}
}
/** 导出按钮操作 */
const
handleExport
=
async
()
=>
{
try
{
// 导出的二次确认
await
message
.
exportConfirm
()
// 发起导出
exportLoading
.
value
=
true
const
data
=
await
SensitiveWordApi
.
exportSensitiveWord
(
queryParams
)
download
.
excel
(
data
,
'敏感词.xls'
)
}
catch
{
}
finally
{
exportLoading
.
value
=
false
}
}
/** 初始化 **/
onMounted
(
async
()
=>
{
await
getList
()
// 获得 Tag 标签列表
tagList
.
value
=
await
SensitiveWordApi
.
getSensitiveWordTagList
()
})
</
script
>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment