修改系统头及上传逻辑

This commit is contained in:
junleea 2025-07-22 19:57:23 +08:00
parent db87094651
commit ad5671fc28
5 changed files with 182 additions and 31 deletions

30
components.d.ts vendored
View File

@ -10,18 +10,9 @@ declare module '@vue/runtime-core' {
Countup: typeof import('./src/components/countup.vue')['default'] Countup: typeof import('./src/components/countup.vue')['default']
ElAvatar: typeof import('element-plus/es')['ElAvatar'] ElAvatar: typeof import('element-plus/es')['ElAvatar']
ElButton: typeof import('element-plus/es')['ElButton'] ElButton: typeof import('element-plus/es')['ElButton']
ElCalendar: typeof import('element-plus/es')['ElCalendar']
ElCard: typeof import('element-plus/es')['ElCard'] ElCard: typeof import('element-plus/es')['ElCard']
ElCarousel: typeof import('element-plus/es')['ElCarousel']
ElCarouselItem: typeof import('element-plus/es')['ElCarouselItem']
ElCascader: typeof import('element-plus/es')['ElCascader']
ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
ElCol: typeof import('element-plus/es')['ElCol'] ElCol: typeof import('element-plus/es')['ElCol']
ElCollapse: typeof import('element-plus/es')['ElCollapse']
ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem']
ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
ElCountdown: typeof import('element-plus/es')['ElCountdown']
ElDatePicker: typeof import('element-plus/es')['ElDatePicker'] ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
ElDescriptions: typeof import('element-plus/es')['ElDescriptions'] ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem'] ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
@ -33,45 +24,25 @@ declare module '@vue/runtime-core' {
ElForm: typeof import('element-plus/es')['ElForm'] ElForm: typeof import('element-plus/es')['ElForm']
ElFormItem: typeof import('element-plus/es')['ElFormItem'] ElFormItem: typeof import('element-plus/es')['ElFormItem']
ElIcon: typeof import('element-plus/es')['ElIcon'] ElIcon: typeof import('element-plus/es')['ElIcon']
ElImage: typeof import('element-plus/es')['ElImage']
ElInput: typeof import('element-plus/es')['ElInput'] ElInput: typeof import('element-plus/es')['ElInput']
ElInputNumber: typeof import('element-plus/es')['ElInputNumber'] ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
ElLink: typeof import('element-plus/es')['ElLink']
ElMenu: typeof import('element-plus/es')['ElMenu'] ElMenu: typeof import('element-plus/es')['ElMenu']
ElMenuItem: typeof import('element-plus/es')['ElMenuItem'] ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
ElOption: typeof import('element-plus/es')['ElOption'] ElOption: typeof import('element-plus/es')['ElOption']
ElPagination: typeof import('element-plus/es')['ElPagination'] ElPagination: typeof import('element-plus/es')['ElPagination']
ElProgress: typeof import('element-plus/es')['ElProgress'] ElProgress: typeof import('element-plus/es')['ElProgress']
ElRadio: typeof import('element-plus/es')['ElRadio']
ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElRate: typeof import('element-plus/es')['ElRate']
ElResult: typeof import('element-plus/es')['ElResult']
ElRow: typeof import('element-plus/es')['ElRow'] ElRow: typeof import('element-plus/es')['ElRow']
ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
ElSelect: typeof import('element-plus/es')['ElSelect'] ElSelect: typeof import('element-plus/es')['ElSelect']
ElSlider: typeof import('element-plus/es')['ElSlider']
ElSpace: typeof import('element-plus/es')['ElSpace']
ElStatistic: typeof import('element-plus/es')['ElStatistic']
ElStep: typeof import('element-plus/es')['ElStep']
ElSteps: typeof import('element-plus/es')['ElSteps']
ElSubMenu: typeof import('element-plus/es')['ElSubMenu'] ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
ElSwitch: typeof import('element-plus/es')['ElSwitch'] ElSwitch: typeof import('element-plus/es')['ElSwitch']
ElTable: typeof import('element-plus/es')['ElTable'] ElTable: typeof import('element-plus/es')['ElTable']
ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
ElTabPane: typeof import('element-plus/es')['ElTabPane'] ElTabPane: typeof import('element-plus/es')['ElTabPane']
ElTabs: typeof import('element-plus/es')['ElTabs'] ElTabs: typeof import('element-plus/es')['ElTabs']
ElTag: typeof import('element-plus/es')['ElTag']
ElText: typeof import('element-plus/es')['ElText']
ElTimeline: typeof import('element-plus/es')['ElTimeline'] ElTimeline: typeof import('element-plus/es')['ElTimeline']
ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem'] ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
ElTimePicker: typeof import('element-plus/es')['ElTimePicker']
ElTooltip: typeof import('element-plus/es')['ElTooltip'] ElTooltip: typeof import('element-plus/es')['ElTooltip']
ElTour: typeof import('element-plus/es')['ElTour']
ElTourStep: typeof import('element-plus/es')['ElTourStep']
ElTransfer: typeof import('element-plus/es')['ElTransfer']
ElUpload: typeof import('element-plus/es')['ElUpload'] ElUpload: typeof import('element-plus/es')['ElUpload']
ElWatermark: typeof import('element-plus/es')['ElWatermark']
Header: typeof import('./src/components/header.vue')['default'] Header: typeof import('./src/components/header.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink'] RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView'] RouterView: typeof import('vue-router')['RouterView']
@ -81,6 +52,7 @@ declare module '@vue/runtime-core' {
TableEdit: typeof import('./src/components/table-edit.vue')['default'] TableEdit: typeof import('./src/components/table-edit.vue')['default']
TableSearch: typeof import('./src/components/table-search.vue')['default'] TableSearch: typeof import('./src/components/table-search.vue')['default']
Tabs: typeof import('./src/components/tabs.vue')['default'] Tabs: typeof import('./src/components/tabs.vue')['default']
Upload_file2: typeof import('./src/components/upload_file2.vue')['default']
UploadFile: typeof import('./src/components/upload-file.vue')['default'] UploadFile: typeof import('./src/components/upload-file.vue')['default']
} }
} }

View File

@ -4,7 +4,7 @@
<div class="header-left"> <div class="header-left">
<img class="logo" src="../assets/img/logo.svg" alt=""> <img class="logo" src="../assets/img/logo.svg" alt="">
<div class="web-title"> <div class="web-title">
大学生学业作品AI生成工具 集成AI工具
</div> </div>
<div class="collapse-btn" @click="collapseChage"> <div class="collapse-btn" @click="collapseChage">
<el-icon v-if="sidebar.collapse"> <el-icon v-if="sidebar.collapse">

View File

@ -2,7 +2,7 @@
<div class="container"> <div class="container">
<div class="content-title">支持拖拽</div> <div class="content-title">支持拖拽</div>
<el-upload class="upload-demo" drag <el-upload class="upload-demo" drag
action="https://pm.ljsea.top/file/upload" multiple action="http://127.0.0.1:41000/file/upload" multiple
:data="uploadData" :data="uploadData"
:headers="headers" :headers="headers"
:on-success="handleSuccess" :on-success="handleSuccess"

View File

@ -0,0 +1,103 @@
<template>
<div class="container">
<div class="content-title">支持拖拽</div>
<el-upload class="upload-demo" drag
action="http://127.0.0.1:41000/file/upload" multiple
:data="uploadData"
:headers="headers"
:on-success="handleSuccess"
:on-error="handleError"
:before-upload="beforeUpload"
:on-change="handle">
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
<div class="el-upload__text">
将文件拖到此处
<em>点击上传</em>
</div>
<div class="el-upload__tip">只能上传 doc, docx, pdf, txt, png, jpg, jpeg 格式且不超过 5MB 的文件</div>
</el-upload>
<!-- <template #tip>
<div class="el-upload__tip">只能上传 doc, docx, pdf, txt, png, jpg, jpeg 格式且不超过 2MB 的文件</div>
</template> -->
</div>
</template>
<script setup lang="ts">
import { ElMessage } from 'element-plus';
const handle = (rawFile: any) => {
console.log(rawFile);
};
const allowedTypes = ['doc', 'docx', 'pdf', 'txt', 'png', 'jpg', 'jpeg','md', "epub", 'go', 'java', 'py', 'js', 'html', 'css', 'json', 'xml', 'yaml', 'yml'];
const userRole = localStorage.getItem('ms_role') || '';
interface UploadData {
upload_type: string;
auth_type: string;
md5: string;
type: string;
}
const uploadData: UploadData = {
upload_type: 'file',
auth_type: 'public',
md5: '',
type: 'file',
};
const headers = {
"token": localStorage.getItem('token') || '',
};
const handleSuccess = (response: any, file: any, fileList: any) => {
let res = response;
if (res.code !== 0){
ElMessage.error(res.error);
return;
}
console.log('上传成功', res);
ElMessage.success('上传成功');
};
const handleError = (error: any, file: any, fileList: any) => {
console.log('上传失败', error);
ElMessage.error('上传失败');
};
const beforeUpload = (file: any) => {
const fileExtension = file.name.split('.').pop().toLowerCase();
const isAllowedType = allowedTypes.includes(fileExtension);
if (!isAllowedType && userRole != "admin") {
ElMessage.error('不允许的文件类型,仅支持 doc, docx, pdf, txt, png, jpg, jpeg, md, epub 及代码文本格式');
return false;
}
if(!isAllowedType && userRole == "admin"){
//,
confirm('不允许的文件类型,是否继续上传?') ? isAllowedType : false;
}
//
let isLt2M = file.size / 1024 / 1024 < 5;
if (!isLt2M && userRole != "admin") {
ElMessage.error('上传文件大小不能超过 5MB');
}
if(!isLt2M && userRole == "admin"){
//,
let res = confirm('文件过大,是否继续上传?') ;
isLt2M =res;
}
return isLt2M;
};
</script>
<style scoped>
.content-title {
font-weight: 400;
line-height: 50px;
margin: 10px 0;
font-size: 22px;
color: #1f2f3d;
}
.upload-demo {
width: 30%;
}
</style>

View File

@ -0,0 +1,76 @@
<template>
<div class="container">
<div class="content-title">支持拖拽</div>
<el-upload class="upload-demo" drag
action="http://127.0.0.1:41000/file/upload" multiple
:data="uploadData"
:headers="headers"
:on-success="handleSuccess"
:on-error="handleError"
:before-upload="beforeUpload"
:on-change="handle">
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
<div class="el-upload__text">
将文件拖到此处
<em>点击上传</em>
</div>
</el-upload>
</div>
</template>
<script setup lang="ts">
import { ElMessage } from 'element-plus';
const handle = (rawFile: any) => {
console.log(rawFile);
};
interface UploadData {
upload_type: string;
auth_type: string;
md5: string;
type: string;
}
const uploadData: UploadData = {
upload_type: 'file',
auth_type: 'public',
md5: '',
type: 'file',
};
const headers = {
"token": localStorage.getItem('token') || '',
};
const handleSuccess = (response: any, file: any, fileList: any) => {
let res = response;
if (res.code !== 0){
ElMessage.error(res.error);
return;
}
console.log('上传成功', res);
ElMessage.success('上传成功');
};
const handleError = (error: any, file: any, fileList: any) => {
console.log('上传失败', error);
ElMessage.error('上传失败');
};
const beforeUpload = (file: any) => {
//
return true;
};
</script>
<style scoped>
.content-title {
font-weight: 400;
line-height: 50px;
margin: 10px 0;
font-size: 22px;
color: #1f2f3d;
}
.upload-demo {
width: 30%;
}
</style>