liuyu 1 жил өмнө
parent
commit
71fa0c95e1

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

@@ -0,0 +1,91 @@
+<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.getSensitiveWordTagsApi()
+}
+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.validateTextApi(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>

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

@@ -19,6 +19,13 @@
           v-hasPermi="['system:sensitive-word:export']"
           @click="exportList('敏感词数据.xls')"
         />
+        <!-- 操作:测试 -->
+        <XButton
+          type="warning"
+          preIcon="ep:document-checked"
+          :title="t('action.test')"
+          @click="openTestForm"
+        />
       </template>
       <template #tags_default="{ row }">
         <el-tag
@@ -103,11 +110,14 @@
       <XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
     </template>
   </XModal>
+  <!-- 表单弹窗:测试敏感词 -->
+  <SensitiveWordTestForm ref="testFormRef" />
 </template>
 <script lang="ts" setup>
 import type { FormExpose } from '@/components/Form'
 import * as SensitiveWordApi from '@/api/system/sensitiveWord'
 import { rules, allSchemas } from './sensitiveWord.data'
+import SensitiveWordTestForm from './SensitiveWordTestForm.vue'
 
 defineOptions({ name: 'SystemSensitiveWord' })
 
@@ -188,6 +198,12 @@ const submitForm = async () => {
   })
 }
 
+/** 测试敏感词按钮操作 */
+const testFormRef = ref()
+const openTestForm = () => {
+  testFormRef.value.open()
+}
+
 // ========== 初始化 ==========
 onMounted(async () => {
   await getTags()