添加用户统计信息,修复管理功能空输入搜索

This commit is contained in:
junleea 2025-03-30 13:43:39 +08:00
parent 6aa8d9c8cf
commit fb7e6d8fe8
6 changed files with 69 additions and 6 deletions

View File

@ -135,6 +135,18 @@ export const SearchUserService = (Data) => {
}) })
} }
export const GetUserStatisticService = (Data) => {
const params = new URLSearchParams();
for (let key in Data) {
params.append(key, Data[key])
}
return request.post('/user/statistic', params,{
headers: {
'token': Data.token,
}
})
}
export const getQRService = (qrData) => { export const getQRService = (qrData) => {
const params = new URLSearchParams(); const params = new URLSearchParams();

View File

@ -28,7 +28,7 @@ import { ElMessage } from 'element-plus';
const handle = (rawFile: any) => { const handle = (rawFile: any) => {
console.log(rawFile); console.log(rawFile);
}; };
const allowedTypes = ['doc', 'docx', 'pdf', 'txt', 'png', 'jpg', 'jpeg']; const allowedTypes = ['doc', 'docx', 'pdf', 'txt', 'png', 'jpg', 'jpeg','md'];
interface UploadData { interface UploadData {
upload_type: string; upload_type: string;
@ -65,7 +65,7 @@ const headers = {
const fileExtension = file.name.split('.').pop().toLowerCase(); const fileExtension = file.name.split('.').pop().toLowerCase();
const isAllowedType = allowedTypes.includes(fileExtension); const isAllowedType = allowedTypes.includes(fileExtension);
if (!isAllowedType) { if (!isAllowedType) {
ElMessage.error('不允许的文件类型,仅支持 doc, docx, pdf, txt, png, jpg, jpeg 格式'); ElMessage.error('不允许的文件类型,仅支持 doc, docx, pdf, txt, png, jpg, jpeg, md 格式');
return false; return false;
} }
// //

View File

@ -11,13 +11,16 @@
</div> </div>
<div class="user-footer"> <div class="user-footer">
<div class="user-footer-item"> <div class="user-footer-item">
<el-statistic title="提问数" :value="1800" /> <el-statistic title="提问数" :value="userStatistic.question" />
</div> </div>
<div class="user-footer-item"> <div class="user-footer-item">
<el-statistic title="会话数" :value="666" /> <el-statistic title="会话数" :value="userStatistic.session" />
</div> </div>
<div class="user-footer-item"> <div class="user-footer-item">
<el-statistic title="总计" :value="888" /> <el-statistic title="文件数" :value="userStatistic.file_count" />
</div>
<div class="user-footer-item">
<el-statistic title="总计" :value="userStatistic.total" />
</div> </div>
</div> </div>
</el-card> </el-card>
@ -81,6 +84,7 @@ import 'vue-cropper/dist/index.css';
import avatar from '@/assets/img/img.jpg'; import avatar from '@/assets/img/img.jpg';
import TabsComp from '../element/tabs.vue'; import TabsComp from '../element/tabs.vue';
import {GetUserInfoService} from "@/api/user"; import {GetUserInfoService} from "@/api/user";
import { GetUserStatisticService } from "@/api/user";
import { UploadFileService } from "@/api/tool"; import { UploadFileService } from "@/api/tool";
import { UserInfo } from '@/types/user'; import { UserInfo } from '@/types/user';
import { FormOption, FormOptionList } from '@/types/form-option'; import { FormOption, FormOptionList } from '@/types/form-option';
@ -96,6 +100,12 @@ const form = reactive({
new: '', new: '',
old: '', old: '',
}); });
const userStatistic = reactive({
question: 0,
session: 0,
total: 0,
file_count: 0,
});
const userInfo = ref<UserInfo>(); const userInfo = ref<UserInfo>();
const isUserInfoLoaded = ref(false); const isUserInfoLoaded = ref(false);
const globalData = inject("globalData"); const globalData = inject("globalData");
@ -242,6 +252,27 @@ const dataURLtoFile = (dataurl, filename) => {
return new File([u8arr], filename, { type: mime }); return new File([u8arr], filename, { type: mime });
}; };
const getUserStatistics = async () => {
let req = {
token: localStorage.getItem('token'),
id: localStorage.getItem('userId')
};
try{
let result = await GetUserStatisticService(req);
if (result["code"] == 0) {
userStatistic.question = result.data.message_count;
userStatistic.session = result.data.session_count;
userStatistic.file_count = result.data.file_count;
userStatistic.total = userStatistic.question + userStatistic.session + userStatistic.file_count;
}else{
ElMessage.error(result["msg"]);
}
}catch(e){
console.log(e);
}
};
getUserStatistics();
const saveAvatar =async () => { const saveAvatar =async () => {
let token = localStorage.getItem('token'); let token = localStorage.getItem('token');

View File

@ -39,6 +39,7 @@ import TableCustom from '@/components/table-custom.vue';
import TableDetail from '@/components/table-detail.vue'; import TableDetail from '@/components/table-detail.vue';
import TableSearch from '@/components/table-search.vue'; import TableSearch from '@/components/table-search.vue';
import { FormOption, FormOptionList } from '@/types/form-option'; import { FormOption, FormOptionList } from '@/types/form-option';
import { number } from 'echarts';
const userRole = localStorage.getItem('role') == 'admin'; const userRole = localStorage.getItem('role') == 'admin';
@ -55,6 +56,10 @@ const handleSearch = async () => {
ElMessage.error('请输入数字'); ElMessage.error('请输入数字');
return; return;
} }
if (query.name === '') {
ElMessage.error('请输入模型ID');
return;
}
let req={ let req={
token: localStorage.getItem('token'), token: localStorage.getItem('token'),
type: "ID", type: "ID",

View File

@ -61,11 +61,22 @@ const handleSearch = async () => {
// ElMessage.error("ID"); // ElMessage.error("ID");
// return; // return;
// } // }
let req={ let req={}
try{
req={
token: localStorage.getItem('token'), token: localStorage.getItem('token'),
type: "ID", type: "ID",
id: parseInt(query.name) id: parseInt(query.name)
}
}catch(e){
console.log(e);
ElMessage.error("请输入正确的会话ID");
} }
if (query.name == ""){
ElMessage.error("请输入会话ID");
return;
}
let result = await FindSessionService(req); let result = await FindSessionService(req);
tableData.value = result.data; tableData.value = result.data;
page.total = result.data.length; page.total = result.data.length;

View File

@ -48,6 +48,10 @@ const searchOpt = ref<FormOptionList[]>([
const handleSearch = async () => { const handleSearch = async () => {
let search_id= -1; let search_id= -1;
let keyword_ = ""; let keyword_ = "";
if (query.name === ''){
ElMessage.error('请输入用户名或ID');
return;
}
try{ try{
search_id = parseInt(query.name); search_id = parseInt(query.name);
}catch(e){ }catch(e){