Browse Source

【移除】敏感词的管理,简化项目的复杂度

YunaiV 10 months ago
parent
commit
0925253a9d

+ 0 - 58
src/api/system/sensitiveWord/index.ts

@@ -1,58 +0,0 @@
-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' })
-  })
-}

+ 0 - 131
src/views/system/sensitiveWord/SensitiveWordForm.vue

@@ -1,131 +0,0 @@
-<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>

+ 0 - 91
src/views/system/sensitiveWord/SensitiveWordTestForm.vue

@@ -1,91 +0,0 @@
-<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>

+ 0 - 253
src/views/system/sensitiveWord/index.vue

@@ -1,253 +0,0 @@
-<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>