This commit is contained in:
lvxudong 2023-11-17 18:20:20 +08:00
parent b35f7ef016
commit c7ea6db08f
4 changed files with 79 additions and 48 deletions

View File

@ -1,13 +1,12 @@
import request from '@/utils/request'; import request from '@/utils/request';
import { AxiosPromise } from 'axios'; import { AxiosPromise } from 'axios';
import { LabelVO, LabelForm, LabelQuery } from '@/api/question/label/types'; import { LabelVO, LabelForm, LabelQuery, QuestionLabel } from '@/api/question/label/types';
/** /**
* *
* @param query * @param query
* @returns {*} * @returns {*}
*/ */
export const listLabel = (query?: LabelQuery): AxiosPromise<LabelVO[]> => { export const listLabel = (query?: LabelQuery): AxiosPromise<LabelVO[]> => {
return request({ return request({
url: '/question/label/list', url: '/question/label/list',
@ -16,6 +15,17 @@ export const listLabel = (query?: LabelQuery): AxiosPromise<LabelVO[]> => {
}); });
}; };
/**
*
* @returns {*}
*/
export const queryAllLabel = (): AxiosPromise<QuestionLabel[]> => {
return request({
url: '/question/label/queryLabels',
method: 'get'
});
};
/** /**
* *
*/ */

View File

@ -16,6 +16,11 @@ export interface LabelVO {
} }
export interface QuestionLabel {
value: string;
label: string;
}
export interface LabelForm extends BaseEntity { export interface LabelForm extends BaseEntity {
/** /**
* *

View File

@ -14,6 +14,8 @@ export interface TitleVO {
*/ */
labelId: string | number; labelId: string | number;
labelName : string;
} }
export interface TitleForm extends BaseEntity { export interface TitleForm extends BaseEntity {
@ -32,6 +34,8 @@ export interface TitleForm extends BaseEntity {
*/ */
labelId?: string | number; labelId?: string | number;
labelName : string;
} }
export interface TitleQuery extends PageQuery { export interface TitleQuery extends PageQuery {

View File

@ -1,19 +1,16 @@
<template> <template>
<div class="p-2"> <div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter"
:leave-active-class="proxy?.animate.searchAnimate.leave">
<div class="search" v-show="showSearch"> <div class="search" v-show="showSearch">
<el-form :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px"> <el-form :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
<el-form-item label="题目" prop="question"> <el-form-item label="标题" prop="question">
<el-input v-model="queryParams.question" placeholder="请输入题目" clearable style="width: 240px" @keyup.enter="handleQuery" /> <el-input v-model="queryParams.question" placeholder="请输入标题" clearable style="width: 240px"
@keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="题目标签类型" prop="labelId"> <el-form-item label="标签" prop="labelId">
<el-select v-model="queryParams.labelId" placeholder="请选择题目标签类型" clearable> <el-select v-model="queryParams.labelId" placeholder="请选择标签" clearable>
<el-option <el-option v-for="dict in labelList" :key="dict.value" :label="dict.label" :value="dict.value" />
v-for="dict in sys_notice_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@ -28,16 +25,20 @@
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['question:title:add']">新增</el-button> <el-button type="primary" plain icon="Plus" @click="handleAdd"
v-hasPermi="['question:title:add']">新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['question:title:edit']">修改</el-button> <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()"
v-hasPermi="['question:title:edit']">修改</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['question:title:remove']">删除</el-button> <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"
v-hasPermi="['question:title:remove']">删除</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['question:title:export']">导出</el-button> <el-button type="warning" plain icon="Download" @click="handleExport"
v-hasPermi="['question:title:export']">导出</el-button>
</el-col> </el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
@ -45,11 +46,11 @@
<el-table v-loading="loading" :data="titleList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="titleList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="" align="center" prop="id" v-if="true" /> <el-table-column label="序号" align="center" prop="id" v-if="true" />
<el-table-column label="" align="center" prop="question" /> <el-table-column label="题" align="center" prop="question" />
<el-table-column label="题目标签类型" align="center" prop="labelId"> <el-table-column label="标签" align="center" prop="labelName">
<template #default="scope"> <template #default="scope">
<dict-tag :options="sys_notice_type" :value="scope.row.labelId"/> <dict-tag :options="labelList" :value="scope.row.labelName" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
@ -58,34 +59,26 @@
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['question:title:edit']"></el-button> <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['question:title:edit']"></el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['question:title:remove']"></el-button> <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
v-hasPermi="['question:title:remove']"></el-button>
</el-tooltip> </el-tooltip>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
v-show="total>0" v-model:limit="queryParams.pageSize" @pagination="getList" />
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</el-card> </el-card>
<!-- 添加或修改题目对话框 --> <!-- 添加或修改题目对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="titleFormRef" :model="form" :rules="rules" label-width="80px"> <el-form ref="titleFormRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="" prop="question"> <el-form-item label="标题" prop="question">
<el-input v-model="form.question" placeholder="请输入" /> <el-input v-model="form.question" placeholder="请输入题" />
</el-form-item> </el-form-item>
<el-form-item label="题目标签类型" prop="labelId"> <el-form-item label="标签" prop="labelId">
<el-select v-model="form.labelId" placeholder="请选择题目标签类型"> <el-select v-model="form.labelId" @change="handleLabelChange" placeholder="请选择标签">
<el-option <el-option v-for="dict in labelList" :key="dict.value" :label="dict.label"
v-for="dict in sys_notice_type" :value="dict.value"></el-option>
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -100,11 +93,12 @@
</template> </template>
<script setup name="Title" lang="ts"> <script setup name="Title" lang="ts">
import { queryAllLabel } from '@/api/question/label';
import { listTitle, getTitle, delTitle, addTitle, updateTitle } from '@/api/question/title'; import { listTitle, getTitle, delTitle, addTitle, updateTitle } from '@/api/question/title';
import { TitleVO, TitleQuery, TitleForm } from '@/api/question/title/types'; import { TitleVO, TitleQuery, TitleForm } from '@/api/question/title/types';
import { func } from 'vue-types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { sys_notice_type } = toRefs<any>(proxy?.useDict('sys_notice_type'));
const titleList = ref<TitleVO[]>([]); const titleList = ref<TitleVO[]>([]);
const buttonLoading = ref(false); const buttonLoading = ref(false);
@ -114,6 +108,7 @@ const ids = ref<Array<string | number>>([]);
const single = ref(true); const single = ref(true);
const multiple = ref(true); const multiple = ref(true);
const total = ref(0); const total = ref(0);
const labelList = ref<DictDataOption[]>([]);
const queryFormRef = ref<ElFormInstance>(); const queryFormRef = ref<ElFormInstance>();
const titleFormRef = ref<ElFormInstance>(); const titleFormRef = ref<ElFormInstance>();
@ -127,6 +122,7 @@ const initFormData: TitleForm = {
id: undefined, id: undefined,
question: undefined, question: undefined,
labelId: undefined, labelId: undefined,
labelName : "",
} }
const data = reactive<PageData<TitleForm, TitleQuery>>({ const data = reactive<PageData<TitleForm, TitleQuery>>({
form: { ...initFormData }, form: { ...initFormData },
@ -143,10 +139,10 @@ const data = reactive<PageData<TitleForm, TitleQuery>>({
{ required: true, message: "不能为空", trigger: "blur" } { required: true, message: "不能为空", trigger: "blur" }
], ],
question: [ question: [
{ required: true, message: "不能为空", trigger: "blur" } { required: true, message: "题不能为空", trigger: "blur" }
], ],
labelId: [ labelId: [
{ required: true, message: "题目标签类型不能为空", trigger: "change" } { required: true, message: "标签不能为空", trigger: "change" }
], ],
} }
}); });
@ -162,6 +158,21 @@ const getList = async () => {
loading.value = false; loading.value = false;
} }
const getLabelList = async () => {
loading.value = true;
queryAllLabel().then((resp)=>{
labelList.value = resp.data.map((p: any): DictDataOption => ({ label: p.label, value: p.value, elTagType: "", elTagClass: "" }));
});
loading.value = false;
}
function handleLabelChange(val) {
const selectedLabel = labelList.value.find(item => item.value === val);
if (selectedLabel) {
form.value.labelName = selectedLabel.label;
}
}
/** 取消按钮 */ /** 取消按钮 */
const cancel = () => { const cancel = () => {
reset(); reset();
@ -245,5 +256,6 @@ const handleExport = () => {
onMounted(() => { onMounted(() => {
getList(); getList();
getLabelList();
}); });
</script> </script>