2025-10-14
项目简介富文本图片/视频上传
This commit is contained in:
		
							
								
								
									
										52
									
								
								src/assets/wangeditor.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								src/assets/wangeditor.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| .editor-content-view { | ||||
|     border: 3px solid #ccc; | ||||
|     border-radius: 5px; | ||||
|     padding: 0 10px; | ||||
|     margin-top: 20px; | ||||
|     overflow-x: auto; | ||||
| } | ||||
|  | ||||
| .editor-content-view p, | ||||
| .editor-content-view li { | ||||
|     white-space: pre-wrap; /* 保留空格 */ | ||||
| } | ||||
|  | ||||
| .editor-content-view blockquote { | ||||
|     border-left: 8px solid #d0e5f2; | ||||
|     padding: 10px 10px; | ||||
|     margin: 10px 0; | ||||
|     background-color: #f1f1f1; | ||||
| } | ||||
|  | ||||
| .editor-content-view code { | ||||
|     font-family: monospace; | ||||
|     background-color: #eee; | ||||
|     padding: 3px; | ||||
|     border-radius: 3px; | ||||
| } | ||||
| .editor-content-view pre>code { | ||||
|     display: block; | ||||
|     padding: 10px; | ||||
| } | ||||
|  | ||||
| .editor-content-view table { | ||||
|     border-collapse: collapse; | ||||
| } | ||||
| .editor-content-view td, | ||||
| .editor-content-view th { | ||||
|     border: 1px solid #ccc; | ||||
|     min-width: 50px; | ||||
|     height: 20px; | ||||
| } | ||||
| .editor-content-view th { | ||||
|     background-color: #f1f1f1; | ||||
| } | ||||
|  | ||||
| .editor-content-view ul, | ||||
| .editor-content-view ol { | ||||
|     padding-left: 20px; | ||||
| } | ||||
|  | ||||
| .editor-content-view input[type="checkbox"] { | ||||
|     margin-right: 5px; | ||||
| } | ||||
| @@ -52,7 +52,7 @@ const mode = 'default' // 或 'simple' | ||||
| // 工具栏配置 | ||||
| const toolbarConfig = { | ||||
|   excludeKeys: [ | ||||
|     'group-video', // 排除视频 | ||||
|     // 'group-video', // 排除视频 | ||||
|     'fullScreen' // 排除全屏 | ||||
|   ] | ||||
| } | ||||
| @@ -63,26 +63,47 @@ const editorConfig = { | ||||
|   MENU_CONF: { | ||||
|     // 配置上传图片 | ||||
|     uploadImage: { | ||||
|       server: '/api/upload/image', | ||||
|       server: '/mid/upload/image', | ||||
|       fieldName: 'file', | ||||
|       meta: { | ||||
|         token: localStorage.getItem('token') || '' | ||||
|       }, | ||||
|       metaWithUrl: false, | ||||
|       headers: { | ||||
|         'Authorization': `Bearer ${localStorage.getItem('token') || ''}` | ||||
|         'Authorization': `Bearer ${localStorage.getItem('admin_token') || ''}` | ||||
|       }, | ||||
|       maxFileSize: 5 * 1024 * 1024, // 5M | ||||
|       allowedFileTypes: ['image/*'], | ||||
|       customInsert(res, insertFn) { | ||||
|         // 自定义插入图片 | ||||
|         if (res.code === 200) { | ||||
|         if (res.success) { | ||||
|           insertFn(res.data.url, res.data.alt || '', res.data.url) | ||||
|         } else { | ||||
|           console.error('图片上传失败:', res.message) | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     uploadVideo: { | ||||
|       server: '/mid/upload', | ||||
|       fieldName: 'file', | ||||
|       meta: { | ||||
|         token: localStorage.getItem('token') || '' | ||||
|       }, | ||||
|       metaWithUrl: false, | ||||
|       headers: { | ||||
|         'Authorization': `Bearer ${localStorage.getItem('admin_token') || ''}` | ||||
|       }, | ||||
|       maxFileSize: 20 * 1024 * 1024, | ||||
|       allowedFileTypes: ['video/*'], | ||||
|       customInsert(res, insertFn) { | ||||
|         // 自定义插入视频 | ||||
|         if (res.success) { | ||||
|           insertFn(res.data.url, res.data.alt || '', res.data.url) | ||||
|         } else { | ||||
|           console.error('视频上传失败:', res.message) | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     // 配置字体 | ||||
|     fontSize: { | ||||
|       fontSizeList: [ | ||||
|   | ||||
| @@ -87,7 +87,7 @@ | ||||
|  | ||||
|     <!--  数据列表  --> | ||||
|     <el-card class="table-card"> | ||||
|       <el-row :gutter="10" class="mb8"> | ||||
|       <el-row :gutter="10" class="mb8 mb-2"> | ||||
|         <el-col :span="1.5"> | ||||
|           <el-button | ||||
|               type="primary" | ||||
| @@ -140,7 +140,11 @@ | ||||
|         <el-table-column prop="startDate" label="开始时间"/> | ||||
|         <el-table-column prop="endDate" label="结束时间"/> | ||||
|         <el-table-column prop="createDate" label="创建时间"/> | ||||
|         <el-table-column prop="introduction" label="项目描述"/> | ||||
|         <el-table-column prop="introduction" label="项目描述"> | ||||
|           <template #default="scope"> | ||||
|             <el-button text type="primary" @click="handleDetail(scope.row)">详情</el-button> | ||||
|           </template> | ||||
|         </el-table-column> | ||||
|  | ||||
|         <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="300"> | ||||
|           <template #default="scope"> | ||||
| @@ -166,7 +170,7 @@ | ||||
|     </el-card> | ||||
|  | ||||
|     <!-- 表单 --> | ||||
|     <el-dialog :title="title" v-model="open" width="800px" append-to-body> | ||||
|     <el-dialog :title="title" v-model="open" width="60%" append-to-body top="1vh"> | ||||
|       <el-form ref="formRef" :model="form" :rules="rules" label-width="80px"> | ||||
|         <el-form-item label="项目名称" prop="name"> | ||||
|           <el-input v-model="form.name" placeholder="请输入项目名称"/> | ||||
| @@ -196,7 +200,7 @@ | ||||
|         <!--          <el-input v-model="form.endDate" placeholder="请选择结束时间"/>--> | ||||
|         <!--        </el-form-item>--> | ||||
|         <el-form-item label="项目描述" prop="introduction" class="editor"> | ||||
|           <RichTextEditor height="300px" /> | ||||
|           <RichTextEditor v-model="form.introduction" class="w-100"/> | ||||
|         </el-form-item> | ||||
|       </el-form> | ||||
|       <template #footer> | ||||
| @@ -207,10 +211,17 @@ | ||||
|       </template> | ||||
|     </el-dialog> | ||||
|  | ||||
| <!--  详情  --> | ||||
|     <el-dialog :title="detailTitle" v-model="openDetail" width="50%" class="h-75 overflow-hidden overflow-scroll"> | ||||
|       <div class="p-5 border editor-content-view"> | ||||
|         <div v-html="detailContent"></div> | ||||
|       </div> | ||||
|     </el-dialog> | ||||
|  | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script setup lang="ts"> | ||||
| <script setup> | ||||
| import {getCurrentInstance, reactive, ref, shallowRef, toRefs} from "vue"; | ||||
| import {Check, Money, Wallet} from "@element-plus/icons-vue"; | ||||
| import {ElMessage, ElMessageBox} from "element-plus"; | ||||
| @@ -218,8 +229,7 @@ import {programAPI} from "@/api/program"; | ||||
| import {useUserStore} from "@/stores/user"; | ||||
|  | ||||
| import '@wangeditor/editor/dist/css/style.css' // 引入 css | ||||
| import { Editor, Toolbar } from '@wangeditor/editor-for-vue' | ||||
| import {IToolbarConfig} from "@wangeditor/editor"; | ||||
| import '@/assets/wangeditor.css' | ||||
| import RichTextEditor from "@/components/RichTextEditor.vue"; | ||||
|  | ||||
| const {proxy} = getCurrentInstance(); | ||||
| @@ -330,9 +340,15 @@ const handleDelete = (row) => { | ||||
|   }) | ||||
| } | ||||
|  | ||||
| const openDetail = ref(false) | ||||
| const detailTitle = ref("") | ||||
| const detailContent = ref("") | ||||
|  | ||||
| // 查看详情 | ||||
| const handleDetail = (row) => { | ||||
|   ElMessage.info('查看详情') | ||||
|   detailTitle.value = row.name | ||||
|   detailContent.value = row.introduction | ||||
|   openDetail.value = true | ||||
| } | ||||
|  | ||||
| const submitForm = () => { | ||||
| @@ -359,9 +375,25 @@ const submitForm = () => { | ||||
|     } | ||||
|   }) | ||||
| } | ||||
| const formRef = ref(null) | ||||
| const reset = () => { | ||||
|   form.value = { | ||||
|     linkmanId: undefined, | ||||
|     startDate: undefined, | ||||
|     endDate: undefined, | ||||
|     dataRange: [], | ||||
|     name: undefined, | ||||
|     company: undefined, | ||||
|     address: undefined, | ||||
|     introduction: undefined, | ||||
|     paymentMethod: undefined | ||||
|   } | ||||
|   formRef.value.resetForm() | ||||
| } | ||||
|  | ||||
| const cancel = () => { | ||||
|   open.value = false | ||||
|   reset() | ||||
| } | ||||
|  | ||||
| // 获取统计 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user