|
@@ -1,4 +1,4 @@
|
|
-<script setup lang="ts">
|
|
|
|
|
|
+<script lang="ts" setup>
|
|
/**
|
|
/**
|
|
* @Name: root-word-manage-table.vue
|
|
* @Name: root-word-manage-table.vue
|
|
* @Description: 词根管理表格
|
|
* @Description: 词根管理表格
|
|
@@ -12,6 +12,7 @@ import type { UploadInstance, UploadRawFile } from 'element-plus';
|
|
import { ElMessage, FormInstance, FormRules, genFileId } from 'element-plus';
|
|
import { ElMessage, FormInstance, FormRules, genFileId } from 'element-plus';
|
|
import { SUCCESS_CODE, WARNING_CODE } from '/@/utils/requestCode';
|
|
import { SUCCESS_CODE, WARNING_CODE } from '/@/utils/requestCode';
|
|
|
|
|
|
|
|
+
|
|
interface DataItem {
|
|
interface DataItem {
|
|
id: number;
|
|
id: number;
|
|
modifier_name: string;
|
|
modifier_name: string;
|
|
@@ -44,11 +45,11 @@ const formSearchTermInpRef = ref();
|
|
const ruleFormRef = ref<FormInstance>();
|
|
const ruleFormRef = ref<FormInstance>();
|
|
const ruleForm = reactive({
|
|
const ruleForm = reactive({
|
|
searchTerm: '',
|
|
searchTerm: '',
|
|
- searchTermType: 'positive',
|
|
|
|
|
|
+ searchTermType: 'positive'
|
|
});
|
|
});
|
|
const rules = reactive<FormRules<typeof ruleForm>>({
|
|
const rules = reactive<FormRules<typeof ruleForm>>({
|
|
- searchTerm: [{ required: true, validator: checkSearchTerm, trigger: 'blur' }],
|
|
|
|
- searchTermType: [{ required: true, validator: checkSearchTermType, trigger: 'blur' }],
|
|
|
|
|
|
+ searchTerm: [ { required: true, validator: checkSearchTerm, trigger: 'blur' } ],
|
|
|
|
+ searchTermType: [ { required: true, validator: checkSearchTermType, trigger: 'blur' } ]
|
|
});
|
|
});
|
|
|
|
|
|
const searchTermTypeFilter = ref('all');
|
|
const searchTermTypeFilter = ref('all');
|
|
@@ -66,7 +67,7 @@ async function addSearchTerm() {
|
|
const body = {
|
|
const body = {
|
|
searchTerm: ruleForm.searchTerm,
|
|
searchTerm: ruleForm.searchTerm,
|
|
searchTerm_type: ruleForm.searchTermType,
|
|
searchTerm_type: ruleForm.searchTermType,
|
|
- add_date: currentDate, // 使用当前日期代替硬编码日期
|
|
|
|
|
|
+ add_date: currentDate // 使用当前日期代替硬编码日期
|
|
};
|
|
};
|
|
try {
|
|
try {
|
|
const response = await api.postCreateSearchTerm(body);
|
|
const response = await api.postCreateSearchTerm(body);
|
|
@@ -105,7 +106,7 @@ async function fetchSearchTermList() {
|
|
page: currentPage.value,
|
|
page: currentPage.value,
|
|
limit: pageSize.value,
|
|
limit: pageSize.value,
|
|
searchTerm: searchTermFilter.value,
|
|
searchTerm: searchTermFilter.value,
|
|
- searchTerm_type: searchTermTypeFilter.value,
|
|
|
|
|
|
+ searchTerm_type: searchTermTypeFilter.value
|
|
};
|
|
};
|
|
try {
|
|
try {
|
|
const response = await api.getSearchTermList(query);
|
|
const response = await api.getSearchTermList(query);
|
|
@@ -115,7 +116,7 @@ async function fetchSearchTermList() {
|
|
...item,
|
|
...item,
|
|
isEditing: false,
|
|
isEditing: false,
|
|
popConfirmVisible: false,
|
|
popConfirmVisible: false,
|
|
- tempSearchTermType: item.searchTerm_type,
|
|
|
|
|
|
+ tempSearchTermType: item.searchTerm_type
|
|
}));
|
|
}));
|
|
} catch (error) {
|
|
} catch (error) {
|
|
console.error('==Error==', error);
|
|
console.error('==Error==', error);
|
|
@@ -134,7 +135,7 @@ async function updateSearchTerm(row: any) {
|
|
row.isEditing = false;
|
|
row.isEditing = false;
|
|
const data = {
|
|
const data = {
|
|
searchTerm: row.searchTerm,
|
|
searchTerm: row.searchTerm,
|
|
- searchTerm_type: row.searchTerm_type,
|
|
|
|
|
|
+ searchTerm_type: row.searchTerm_type
|
|
};
|
|
};
|
|
try {
|
|
try {
|
|
const response = await api.postUpdateSearchTerm({ data, id: row.id });
|
|
const response = await api.postUpdateSearchTerm({ data, id: row.id });
|
|
@@ -156,7 +157,7 @@ async function updateSearchTerm(row: any) {
|
|
async function updateSearchTermType(row: any) {
|
|
async function updateSearchTermType(row: any) {
|
|
const data = {
|
|
const data = {
|
|
searchTerm: row.searchTerm,
|
|
searchTerm: row.searchTerm,
|
|
- searchTerm_type: row.searchTerm_type,
|
|
|
|
|
|
+ searchTerm_type: row.searchTerm_type
|
|
};
|
|
};
|
|
try {
|
|
try {
|
|
const response = await api.postUpdateSearchTerm({ data, id: row.id });
|
|
const response = await api.postUpdateSearchTerm({ data, id: row.id });
|
|
@@ -311,48 +312,48 @@ function handleResponse(response: any) {
|
|
</script>
|
|
</script>
|
|
|
|
|
|
<template>
|
|
<template>
|
|
- <div class="p-2.5" v-loading="tableLoading" style="background-color: #f7f7f7">
|
|
|
|
|
|
+ <div v-loading="tableLoading" class="p-2.5" style="background-color: #f7f7f7">
|
|
<!-- 筛选 -->
|
|
<!-- 筛选 -->
|
|
<el-card body-class="flex justify-between gap-3.5" shadow="hover" style="border: none; margin-bottom: 10px">
|
|
<el-card body-class="flex justify-between gap-3.5" shadow="hover" style="border: none; margin-bottom: 10px">
|
|
<div class="flex gap-7">
|
|
<div class="flex gap-7">
|
|
<div>
|
|
<div>
|
|
<span class="font-bold mr-2" style="color: #303133">词根:</span>
|
|
<span class="font-bold mr-2" style="color: #303133">词根:</span>
|
|
<el-input
|
|
<el-input
|
|
- v-model="searchTermFilter"
|
|
|
|
- placeholder="请输入词根"
|
|
|
|
- clearable
|
|
|
|
- @change="fetchSearchTermList"
|
|
|
|
- :prefix-icon="Search"
|
|
|
|
- style="width: 240px"></el-input>
|
|
|
|
|
|
+ v-model="searchTermFilter"
|
|
|
|
+ :prefix-icon="Search"
|
|
|
|
+ clearable
|
|
|
|
+ placeholder="请输入词根"
|
|
|
|
+ style="width: 240px"
|
|
|
|
+ @change="fetchSearchTermList"></el-input>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div>
|
|
<span class="font-bold mr-2" style="color: #303133">词根类型:</span>
|
|
<span class="font-bold mr-2" style="color: #303133">词根类型:</span>
|
|
<el-select v-model="searchTermTypeFilter" style="width: 200px" @change="fetchSearchTermList">
|
|
<el-select v-model="searchTermTypeFilter" style="width: 200px" @change="fetchSearchTermList">
|
|
- <el-option label="全部" value="all" />
|
|
|
|
- <el-option label="positive" value="positive" />
|
|
|
|
- <el-option label="negative" value="negative" />
|
|
|
|
- <el-option label="无词根类型" value="typeless" />
|
|
|
|
|
|
+ <el-option label="全部" value="all"/>
|
|
|
|
+ <el-option label="positive" value="positive"/>
|
|
|
|
+ <el-option label="negative" value="negative"/>
|
|
|
|
+ <el-option label="无词根类型" value="typeless"/>
|
|
</el-select>
|
|
</el-select>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="flex gap-3.5">
|
|
<div class="flex gap-3.5">
|
|
<el-button plain type="primary" @click="handleDialogVisible">
|
|
<el-button plain type="primary" @click="handleDialogVisible">
|
|
<el-icon>
|
|
<el-icon>
|
|
- <Plus />
|
|
|
|
|
|
+ <Plus/>
|
|
</el-icon>
|
|
</el-icon>
|
|
添加词根
|
|
添加词根
|
|
</el-button>
|
|
</el-button>
|
|
<!-- 想要不页面不跳动可以加72的高度 -->
|
|
<!-- 想要不页面不跳动可以加72的高度 -->
|
|
<div>
|
|
<div>
|
|
<el-upload
|
|
<el-upload
|
|
- ref="upload"
|
|
|
|
- action="#"
|
|
|
|
- :limit="1"
|
|
|
|
- :auto-upload="true"
|
|
|
|
- :on-exceed="handleExceed"
|
|
|
|
- :http-request="handleCustomUpload">
|
|
|
|
|
|
+ ref="upload"
|
|
|
|
+ :auto-upload="true"
|
|
|
|
+ :http-request="handleCustomUpload"
|
|
|
|
+ :limit="1"
|
|
|
|
+ :on-exceed="handleExceed"
|
|
|
|
+ action="#">
|
|
<template #trigger>
|
|
<template #trigger>
|
|
- <el-button plain round type="warning" :icon="Upload">批量词根上传</el-button>
|
|
|
|
|
|
+ <el-button :icon="Upload" plain round type="warning">批量词根上传</el-button>
|
|
</template>
|
|
</template>
|
|
</el-upload>
|
|
</el-upload>
|
|
</div>
|
|
</div>
|
|
@@ -362,10 +363,15 @@ function handleResponse(response: any) {
|
|
<el-card shadow="hover" style="border: none">
|
|
<el-card shadow="hover" style="border: none">
|
|
<div style="height: 800px">
|
|
<div style="height: 800px">
|
|
<el-table :data="tableData" height="800" stripe style="width: 100%">
|
|
<el-table :data="tableData" height="800" stripe style="width: 100%">
|
|
- <el-table-column fixed prop="add_date" label="添加日期" width="180" sortable>
|
|
|
|
|
|
+ <el-table-column align="center" type="index" width="60">
|
|
|
|
+ <template #header>
|
|
|
|
+ <span>序号</span>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ <el-table-column align="center" label="添加日期" prop="add_date" sortable>
|
|
<template #header>
|
|
<template #header>
|
|
<el-icon style="top: 2px; margin-right: 3px">
|
|
<el-icon style="top: 2px; margin-right: 3px">
|
|
- <Calendar />
|
|
|
|
|
|
+ <Calendar/>
|
|
</el-icon>
|
|
</el-icon>
|
|
<span>添加日期</span>
|
|
<span>添加日期</span>
|
|
</template>
|
|
</template>
|
|
@@ -373,35 +379,35 @@ function handleResponse(response: any) {
|
|
<span class="font-medium">{{ row.add_date }}</span>
|
|
<span class="font-medium">{{ row.add_date }}</span>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column prop="searchTerm" label="词根" sortable>
|
|
|
|
|
|
+ <el-table-column label="词根" prop="searchTerm" sortable>
|
|
<template #header>
|
|
<template #header>
|
|
<el-icon style="top: 2px; right: 2px">
|
|
<el-icon style="top: 2px; right: 2px">
|
|
- <Key />
|
|
|
|
|
|
+ <Key/>
|
|
</el-icon>
|
|
</el-icon>
|
|
<span>词根</span>
|
|
<span>词根</span>
|
|
</template>
|
|
</template>
|
|
<template #default="{ row }">
|
|
<template #default="{ row }">
|
|
- <el-input ref="searchTermInpRef" v-if="row.isEditing" v-model="row.searchTerm" @change="updateSearchTerm(row)" />
|
|
|
|
- <span class="font-semibold" v-else>{{ row.searchTerm }}</span>
|
|
|
|
|
|
+ <el-input v-if="row.isEditing" ref="searchTermInpRef" v-model="row.searchTerm" @change="updateSearchTerm(row)"/>
|
|
|
|
+ <span v-else class="font-semibold">{{ row.searchTerm }}</span>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column prop="searchTerm_type" label="词根类型" sortable>
|
|
|
|
|
|
+ <el-table-column label="词根类型" prop="searchTerm_type" sortable>
|
|
<template #header>
|
|
<template #header>
|
|
<el-icon style="top: 2px; right: 2px">
|
|
<el-icon style="top: 2px; right: 2px">
|
|
- <Coin />
|
|
|
|
|
|
+ <Coin/>
|
|
</el-icon>
|
|
</el-icon>
|
|
<span>词根类型</span>
|
|
<span>词根类型</span>
|
|
</template>
|
|
</template>
|
|
<template #default="{ row }">
|
|
<template #default="{ row }">
|
|
<el-popconfirm
|
|
<el-popconfirm
|
|
- title="确定修改吗?"
|
|
|
|
- @confirm="updateSearchTermType(row)"
|
|
|
|
- @cancel="cancelUpdate(row)"
|
|
|
|
- :visible="row.popConfirmVisible">
|
|
|
|
|
|
+ :visible="row.popConfirmVisible"
|
|
|
|
+ title="确定修改吗?"
|
|
|
|
+ @cancel="cancelUpdate(row)"
|
|
|
|
+ @confirm="updateSearchTermType(row)">
|
|
<template #reference>
|
|
<template #reference>
|
|
- <el-select v-model="row.searchTerm_type" @change="showPopConfirm(row)" style="width: 150px">
|
|
|
|
- <el-option label="positive" value="positive" />
|
|
|
|
- <el-option label="negative" value="negative" />
|
|
|
|
|
|
+ <el-select v-model="row.searchTerm_type" style="width: 150px" @change="showPopConfirm(row)">
|
|
|
|
+ <el-option label="positive" value="positive"/>
|
|
|
|
+ <el-option label="negative" value="negative"/>
|
|
</el-select>
|
|
</el-select>
|
|
</template>
|
|
</template>
|
|
</el-popconfirm>
|
|
</el-popconfirm>
|
|
@@ -410,16 +416,16 @@ function handleResponse(response: any) {
|
|
<el-table-column fixed="right" label="操作" width="120">
|
|
<el-table-column fixed="right" label="操作" width="120">
|
|
<template #header>
|
|
<template #header>
|
|
<el-icon style="top: 2px; margin-right: 5px">
|
|
<el-icon style="top: 2px; margin-right: 5px">
|
|
- <EditPen />
|
|
|
|
|
|
+ <EditPen/>
|
|
</el-icon>
|
|
</el-icon>
|
|
<span>操作</span>
|
|
<span>操作</span>
|
|
</template>
|
|
</template>
|
|
<template #default="{ row }">
|
|
<template #default="{ row }">
|
|
- <el-button link type="primary" size="small" @click="handleClick(row)" v-if="!row.isEditing"> 编辑</el-button>
|
|
|
|
- <el-button link type="primary" size="small" @click="handleClick(row)" v-else> 取消</el-button>
|
|
|
|
|
|
+ <el-button v-if="!row.isEditing" link size="small" type="primary" @click="handleClick(row)"> 编辑</el-button>
|
|
|
|
+ <el-button v-else link size="small" type="primary" @click="handleClick(row)"> 取消</el-button>
|
|
<el-popconfirm title="确定删除吗?" @confirm="handleDelete(row)">
|
|
<el-popconfirm title="确定删除吗?" @confirm="handleDelete(row)">
|
|
<template #reference>
|
|
<template #reference>
|
|
- <el-button link type="danger" size="small">删除</el-button>
|
|
|
|
|
|
+ <el-button link size="small" type="danger">删除</el-button>
|
|
</template>
|
|
</template>
|
|
</el-popconfirm>
|
|
</el-popconfirm>
|
|
</template>
|
|
</template>
|
|
@@ -428,27 +434,27 @@ function handleResponse(response: any) {
|
|
</div>
|
|
</div>
|
|
<div class="mt-3.5 flex justify-end">
|
|
<div class="mt-3.5 flex justify-end">
|
|
<el-pagination
|
|
<el-pagination
|
|
- v-model:current-page="currentPage"
|
|
|
|
- v-model:page-size="pageSize"
|
|
|
|
- :page-sizes="[20, 40, 50, 100]"
|
|
|
|
- layout="total, sizes, prev, pager, next"
|
|
|
|
- :total="total"
|
|
|
|
- @size-change="handleSizeChange"
|
|
|
|
- @current-change="handleCurrentChange" />
|
|
|
|
|
|
+ v-model:current-page="currentPage"
|
|
|
|
+ v-model:page-size="pageSize"
|
|
|
|
+ :page-sizes="[20, 40, 50, 100]"
|
|
|
|
+ :total="total"
|
|
|
|
+ layout="total, sizes, prev, pager, next"
|
|
|
|
+ @size-change="handleSizeChange"
|
|
|
|
+ @current-change="handleCurrentChange"/>
|
|
</div>
|
|
</div>
|
|
</el-card>
|
|
</el-card>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<!-- 添加词根弹窗 -->
|
|
<!-- 添加词根弹窗 -->
|
|
- <el-dialog v-model="dialogVisible" title="添加关键词" width="500" :before-close="handleClose">
|
|
|
|
- <el-form ref="ruleFormRef" style="max-width: 600px" :model="ruleForm" status-icon :rules="rules" label-width="auto">
|
|
|
|
|
|
+ <el-dialog v-model="dialogVisible" :before-close="handleClose" title="添加关键词" width="500">
|
|
|
|
+ <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="auto" status-icon style="max-width: 600px">
|
|
<el-form-item label="关键词" prop="searchTerm">
|
|
<el-form-item label="关键词" prop="searchTerm">
|
|
- <el-input ref="formSearchTermInpRef" v-model="ruleForm.searchTerm" />
|
|
|
|
|
|
+ <el-input ref="formSearchTermInpRef" v-model="ruleForm.searchTerm"/>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="关键词类型" prop="searchTermType">
|
|
<el-form-item label="关键词类型" prop="searchTermType">
|
|
<el-select v-model="ruleForm.searchTermType">
|
|
<el-select v-model="ruleForm.searchTermType">
|
|
- <el-option label="positive" value="positive" />
|
|
|
|
- <el-option label="negative" value="negative" />
|
|
|
|
|
|
+ <el-option label="positive" value="positive"/>
|
|
|
|
+ <el-option label="negative" value="negative"/>
|
|
</el-select>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-form>
|
|
</el-form>
|