更新skill用户接口配置
This commit is contained in:
@@ -91,6 +91,17 @@ export function getUserSkillList(params?: UserSkillListParams, config?: any) {
|
|||||||
...config,
|
...config,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 获取 Skill 用户技能列表
|
||||||
|
*/
|
||||||
|
export function getUserSkilllistUser(params?: UserSkillListParams, config?: any) {
|
||||||
|
return request<SkillListResponse>({
|
||||||
|
url: '/ai-agent/skill/user/listUser',
|
||||||
|
method: 'get',
|
||||||
|
params,
|
||||||
|
...config,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建 Skill 用户技能
|
* 创建 Skill 用户技能
|
||||||
|
|||||||
@@ -4,14 +4,22 @@
|
|||||||
<el-tab-pane label="系统技能" name="system">
|
<el-tab-pane label="系统技能" name="system">
|
||||||
<div class="search-bar">
|
<div class="search-bar">
|
||||||
<el-input v-model="searchParams.keyword" placeholder="搜索技能名称或描述" clearable @clear="handleSearch">
|
<el-input v-model="searchParams.keyword" placeholder="搜索技能名称或描述" clearable @clear="handleSearch">
|
||||||
<template #prefix><el-icon><Search /></el-icon></template>
|
<template #prefix
|
||||||
|
><el-icon><Search /></el-icon
|
||||||
|
></template>
|
||||||
</el-input>
|
</el-input>
|
||||||
<el-button type="primary" @click="handleSearch">搜索</el-button>
|
<el-button type="primary" @click="handleSearch">搜索</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="skill-list" v-loading="loading">
|
<div class="skill-list" v-loading="loading">
|
||||||
<el-empty v-if="!loading && skillList.length === 0" description="暂无技能数据" :image-size="100" />
|
<el-empty v-if="!loading && skillList.length === 0" description="暂无技能数据" :image-size="100" />
|
||||||
<div v-else class="skill-grid">
|
<div v-else class="skill-grid">
|
||||||
<div v-for="skill in skillList" :key="skill.id" class="skill-card" :class="{ selected: selectedSkill?.id === skill.id }" @click="handleSelectSkill(skill)">
|
<div
|
||||||
|
v-for="skill in skillList"
|
||||||
|
:key="skill.id"
|
||||||
|
class="skill-card"
|
||||||
|
:class="{ selected: selectedSkill?.id === skill.id }"
|
||||||
|
@click="handleSelectSkill(skill)"
|
||||||
|
>
|
||||||
<div class="skill-card-header">
|
<div class="skill-card-header">
|
||||||
<div class="skill-category">{{ skill.category }}</div>
|
<div class="skill-category">{{ skill.category }}</div>
|
||||||
<el-icon v-if="selectedSkill?.id === skill.id" class="check-icon" color="#67c23a"><CircleCheck /></el-icon>
|
<el-icon v-if="selectedSkill?.id === skill.id" class="check-icon" color="#67c23a"><CircleCheck /></el-icon>
|
||||||
@@ -24,20 +32,36 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="pagination.total > 0" class="pagination-wrap">
|
<div v-if="pagination.total > 0" class="pagination-wrap">
|
||||||
<el-pagination v-model:current-page="pagination.pageNum" v-model:page-size="pagination.pageSize" :total="pagination.total" :page-sizes="[10, 20, 50]" layout="total, prev, pager, next" small @current-change="handlePageChange" />
|
<el-pagination
|
||||||
|
v-model:current-page="pagination.pageNum"
|
||||||
|
v-model:page-size="pagination.pageSize"
|
||||||
|
:total="pagination.total"
|
||||||
|
:page-sizes="[10, 20, 50]"
|
||||||
|
layout="total, prev, pager, next"
|
||||||
|
small
|
||||||
|
@current-change="handlePageChange"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="用户技能" name="user">
|
<el-tab-pane label="用户技能" name="user">
|
||||||
<div class="search-bar">
|
<div class="search-bar">
|
||||||
<el-input v-model="searchParams.keyword" placeholder="搜索技能名称或描述" clearable @clear="handleSearch">
|
<el-input v-model="searchParams.keyword" placeholder="搜索技能名称或描述" clearable @clear="handleSearch">
|
||||||
<template #prefix><el-icon><Search /></el-icon></template>
|
<template #prefix
|
||||||
|
><el-icon><Search /></el-icon
|
||||||
|
></template>
|
||||||
</el-input>
|
</el-input>
|
||||||
<el-button type="primary" @click="handleSearch">搜索</el-button>
|
<el-button type="primary" @click="handleSearch">搜索</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="skill-list" v-loading="loading">
|
<div class="skill-list" v-loading="loading">
|
||||||
<el-empty v-if="!loading && skillList.length === 0" description="暂无技能数据" :image-size="100" />
|
<el-empty v-if="!loading && skillList.length === 0" description="暂无技能数据" :image-size="100" />
|
||||||
<div v-else class="skill-grid">
|
<div v-else class="skill-grid">
|
||||||
<div v-for="skill in skillList" :key="skill.id" class="skill-card" :class="{ selected: selectedSkill?.id === skill.id }" @click="handleSelectSkill(skill)">
|
<div
|
||||||
|
v-for="skill in skillList"
|
||||||
|
:key="skill.id"
|
||||||
|
class="skill-card"
|
||||||
|
:class="{ selected: selectedSkill?.id === skill.id }"
|
||||||
|
@click="handleSelectSkill(skill)"
|
||||||
|
>
|
||||||
<div class="skill-card-header">
|
<div class="skill-card-header">
|
||||||
<div class="skill-category">{{ skill.category }}</div>
|
<div class="skill-category">{{ skill.category }}</div>
|
||||||
<el-icon v-if="selectedSkill?.id === skill.id" class="check-icon" color="#67c23a"><CircleCheck /></el-icon>
|
<el-icon v-if="selectedSkill?.id === skill.id" class="check-icon" color="#67c23a"><CircleCheck /></el-icon>
|
||||||
@@ -50,7 +74,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="pagination.total > 0" class="pagination-wrap">
|
<div v-if="pagination.total > 0" class="pagination-wrap">
|
||||||
<el-pagination v-model:current-page="pagination.pageNum" v-model:page-size="pagination.pageSize" :total="pagination.total" :page-sizes="[10, 20, 50]" layout="total, prev, pager, next" small @current-change="handlePageChange" />
|
<el-pagination
|
||||||
|
v-model:current-page="pagination.pageNum"
|
||||||
|
v-model:page-size="pagination.pageSize"
|
||||||
|
:total="pagination.total"
|
||||||
|
:page-sizes="[10, 20, 50]"
|
||||||
|
layout="total, prev, pager, next"
|
||||||
|
small
|
||||||
|
@current-change="handlePageChange"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
@@ -64,7 +96,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, reactive, watch } from 'vue';
|
import { ref, reactive, watch } from 'vue';
|
||||||
import { Search, CircleCheck } from '@element-plus/icons-vue';
|
import { Search, CircleCheck } from '@element-plus/icons-vue';
|
||||||
import { getSkillList, getUserSkillList, type SkillItem } from '/@/api/digitalHuman/skill';
|
import { getSkillList, getUserSkilllistUser, type SkillItem } from '/@/api/digitalHuman/skill';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
modelValue: boolean;
|
modelValue: boolean;
|
||||||
@@ -91,13 +123,16 @@ const skillList = ref<SkillItem[]>([]);
|
|||||||
const loading = ref(false);
|
const loading = ref(false);
|
||||||
const selectedSkill = ref<SkillItem | null>(null);
|
const selectedSkill = ref<SkillItem | null>(null);
|
||||||
|
|
||||||
watch(() => props.modelValue, (val) => {
|
watch(
|
||||||
visible.value = val;
|
() => props.modelValue,
|
||||||
if (val) {
|
(val) => {
|
||||||
selectedSkill.value = props.defaultSkill || null;
|
visible.value = val;
|
||||||
fetchSkillList();
|
if (val) {
|
||||||
|
selectedSkill.value = props.defaultSkill || null;
|
||||||
|
fetchSkillList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
);
|
||||||
|
|
||||||
watch(visible, (val) => {
|
watch(visible, (val) => {
|
||||||
if (!val) {
|
if (!val) {
|
||||||
@@ -116,7 +151,10 @@ const fetchSkillList = async () => {
|
|||||||
loading.value = true;
|
loading.value = true;
|
||||||
try {
|
try {
|
||||||
const params = { pageNum: pagination.pageNum, pageSize: pagination.pageSize, keyword: searchParams.keyword || undefined };
|
const params = { pageNum: pagination.pageNum, pageSize: pagination.pageSize, keyword: searchParams.keyword || undefined };
|
||||||
const res = activeTab.value === 'system' ? await getSkillList(params, { errorMode: 'message' }) : await getUserSkillList(params, { errorMode: 'message' });
|
const res =
|
||||||
|
activeTab.value === 'system'
|
||||||
|
? await getSkillList(params, { errorMode: 'message' })
|
||||||
|
: await getUserSkilllistUser(params, { errorMode: 'message' });
|
||||||
skillList.value = res.data?.list || [];
|
skillList.value = res.data?.list || [];
|
||||||
pagination.total = res.data?.total || 0;
|
pagination.total = res.data?.total || 0;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
@@ -2,14 +2,22 @@
|
|||||||
<el-dialog v-model="visible" title="选择技能" width="900px" :close-on-click-modal="false" @close="handleClose">
|
<el-dialog v-model="visible" title="选择技能" width="900px" :close-on-click-modal="false" @close="handleClose">
|
||||||
<div class="search-bar">
|
<div class="search-bar">
|
||||||
<el-input v-model="searchParams.keyword" placeholder="搜索技能名称或描述" clearable @clear="handleSearch">
|
<el-input v-model="searchParams.keyword" placeholder="搜索技能名称或描述" clearable @clear="handleSearch">
|
||||||
<template #prefix><el-icon><Search /></el-icon></template>
|
<template #prefix
|
||||||
|
><el-icon><Search /></el-icon
|
||||||
|
></template>
|
||||||
</el-input>
|
</el-input>
|
||||||
<el-button type="primary" @click="handleSearch">搜索</el-button>
|
<el-button type="primary" @click="handleSearch">搜索</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="skill-list" v-loading="loading">
|
<div class="skill-list" v-loading="loading">
|
||||||
<el-empty v-if="!loading && skillList.length === 0" description="暂无技能数据" :image-size="100" />
|
<el-empty v-if="!loading && skillList.length === 0" description="暂无技能数据" :image-size="100" />
|
||||||
<div v-else class="skill-grid">
|
<div v-else class="skill-grid">
|
||||||
<div v-for="skill in skillList" :key="skill.id" class="skill-card" :class="{ selected: selectedSkill?.id === skill.id }" @click="handleSelectSkill(skill)">
|
<div
|
||||||
|
v-for="skill in skillList"
|
||||||
|
:key="skill.id"
|
||||||
|
class="skill-card"
|
||||||
|
:class="{ selected: selectedSkill?.id === skill.id }"
|
||||||
|
@click="handleSelectSkill(skill)"
|
||||||
|
>
|
||||||
<div class="skill-card-header">
|
<div class="skill-card-header">
|
||||||
<div class="skill-category">{{ skill.category }}</div>
|
<div class="skill-category">{{ skill.category }}</div>
|
||||||
<el-icon v-if="selectedSkill?.id === skill.id" class="check-icon" color="#67c23a"><CircleCheck /></el-icon>
|
<el-icon v-if="selectedSkill?.id === skill.id" class="check-icon" color="#67c23a"><CircleCheck /></el-icon>
|
||||||
@@ -22,7 +30,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="pagination.total > 0" class="pagination-wrap">
|
<div v-if="pagination.total > 0" class="pagination-wrap">
|
||||||
<el-pagination v-model:current-page="pagination.pageNum" v-model:page-size="pagination.pageSize" :total="pagination.total" :page-sizes="[10, 20, 50]" layout="total, prev, pager, next" small @current-change="handlePageChange" />
|
<el-pagination
|
||||||
|
v-model:current-page="pagination.pageNum"
|
||||||
|
v-model:page-size="pagination.pageSize"
|
||||||
|
:total="pagination.total"
|
||||||
|
:page-sizes="[10, 20, 50]"
|
||||||
|
layout="total, prev, pager, next"
|
||||||
|
small
|
||||||
|
@current-change="handlePageChange"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button @click="handleClose">取消</el-button>
|
<el-button @click="handleClose">取消</el-button>
|
||||||
@@ -34,7 +50,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, reactive, watch } from 'vue';
|
import { ref, reactive, watch } from 'vue';
|
||||||
import { Search, CircleCheck } from '@element-plus/icons-vue';
|
import { Search, CircleCheck } from '@element-plus/icons-vue';
|
||||||
import { getUserSkillList, type SkillItem } from '/@/api/digitalHuman/skill';
|
import { getUserSkilllistUser, type SkillItem } from '/@/api/digitalHuman/skill';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
modelValue: boolean;
|
modelValue: boolean;
|
||||||
@@ -60,13 +76,16 @@ const skillList = ref<SkillItem[]>([]);
|
|||||||
const loading = ref(false);
|
const loading = ref(false);
|
||||||
const selectedSkill = ref<SkillItem | null>(null);
|
const selectedSkill = ref<SkillItem | null>(null);
|
||||||
|
|
||||||
watch(() => props.modelValue, (val) => {
|
watch(
|
||||||
visible.value = val;
|
() => props.modelValue,
|
||||||
if (val) {
|
(val) => {
|
||||||
selectedSkill.value = props.defaultSkill || null;
|
visible.value = val;
|
||||||
fetchSkillList();
|
if (val) {
|
||||||
|
selectedSkill.value = props.defaultSkill || null;
|
||||||
|
fetchSkillList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
);
|
||||||
|
|
||||||
watch(visible, (val) => {
|
watch(visible, (val) => {
|
||||||
if (!val) {
|
if (!val) {
|
||||||
@@ -78,7 +97,7 @@ const fetchSkillList = async () => {
|
|||||||
loading.value = true;
|
loading.value = true;
|
||||||
try {
|
try {
|
||||||
const params = { pageNum: pagination.pageNum, pageSize: pagination.pageSize, keyword: searchParams.keyword || undefined };
|
const params = { pageNum: pagination.pageNum, pageSize: pagination.pageSize, keyword: searchParams.keyword || undefined };
|
||||||
const res = await getUserSkillList(params, { errorMode: 'message' });
|
const res = await getUserSkilllistUser(params, { errorMode: 'message' });
|
||||||
skillList.value = res.data?.list || [];
|
skillList.value = res.data?.list || [];
|
||||||
pagination.total = res.data?.total || 0;
|
pagination.total = res.data?.total || 0;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user