From fdc41c9f74d670d6aca5731927daa27ac51d7609 Mon Sep 17 00:00:00 2001 From: zeyan <258785420@qq.com> Date: Sat, 16 Aug 2025 18:46:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/src/app/api/campus.ts | 12 ++ admin/src/app/views/campus/campus.vue | 154 +++++++++++++++- .../components/unified-edit-dialog.vue | 167 +++++++++++------- admin/src/components/direct-upload/index.vue | 50 +++--- admin/src/utils/directUpload.ts | 30 ++-- .../app/adminapi/controller/campus/Campus.php | 22 +++ niucloud/app/adminapi/route/campus.php | 2 + .../service/admin/campus/CampusService.php | 23 +++ .../CommunicationRecordsService.php | 19 +- .../admin/upload/DirectUploadService.php | 45 +++-- .../CommunicationRecords.php | 2 +- 11 files changed, 411 insertions(+), 115 deletions(-) diff --git a/admin/src/app/api/campus.ts b/admin/src/app/api/campus.ts index 5a1ce656..3c6753c0 100644 --- a/admin/src/app/api/campus.ts +++ b/admin/src/app/api/campus.ts @@ -56,4 +56,16 @@ export function deleteCampus(id: number) { }) } +/** + * 上传校区签章 + * @param params + * @returns + */ +export function uploadCampusSeal(params: Record) { + return request.post('campus/uploadSeal', params, { + showErrorMessage: true, + showSuccessMessage: true, + }) +} + // USER_CODE_END -- campus diff --git a/admin/src/app/views/campus/campus.vue b/admin/src/app/views/campus/campus.vue index 8f9dd59a..45934fe1 100644 --- a/admin/src/app/views/campus/campus.vue +++ b/admin/src/app/views/campus/campus.vue @@ -106,12 +106,15 @@ @@ -139,11 +191,13 @@ import { reactive, ref, watch } from 'vue' import { t } from '@/lang' import { useDictionary } from '@/app/api/dict' -import { getCampusList, deleteCampus } from '@/app/api/campus' +import { getCampusList, deleteCampus, uploadCampusSeal } from '@/app/api/campus' import { img } from '@/utils/common' -import { ElMessageBox, FormInstance } from 'element-plus' +import { ElMessageBox, ElMessage, FormInstance } from 'element-plus' +import { Plus } from '@element-plus/icons-vue' import Edit from '@/app/views/campus/components/campus-edit.vue' import { useRoute } from 'vue-router' +import { getToken } from '@/utils/common' const route = useRoute() const pageName = route.meta.title @@ -165,6 +219,25 @@ const searchFormRef = ref() // 选中数据 const selectData = ref([]) +// 签章上传弹窗数据 +const sealDialog = reactive({ + visible: false, + loading: false, + form: { + campus_id: '', + campus_name: '', + seal_image: '' + }, + fileList: [] as any[] +}) + +// 上传配置 +const uploadAction = `${import.meta.env.VITE_APP_BASE_URL}/adminapi/upload/file` +const uploadHeaders = { + token: getToken() +} +const uploadRef = ref() + // 字典数据 const campus_statusList = ref([] as any[]) const campus_statusDictList = async () => { @@ -238,6 +311,81 @@ const resetForm = (formEl: FormInstance | undefined) => { formEl.resetFields() loadCampusList() } + +/** + * 上传签章 + */ +const uploadSealEvent = (data: any) => { + sealDialog.form.campus_id = data.id + sealDialog.form.campus_name = data.campus_name + sealDialog.form.seal_image = '' + sealDialog.fileList = [] + sealDialog.visible = true +} + +/** + * 上传前验证 + */ +const beforeUpload = (file: any) => { + const isImage = /\.(jpg|jpeg|png|gif)$/i.test(file.name) + const isLt2M = file.size / 1024 / 1024 < 2 + + if (!isImage) { + ElMessage.error('只能上传jpg/png/gif格式的图片!') + return false + } + if (!isLt2M) { + ElMessage.error('上传文件大小不能超过 2MB!') + return false + } + return true +} + +/** + * 上传成功回调 + */ +const onUploadSuccess = (response: any, file: any) => { + if (response.code === 1) { + sealDialog.form.seal_image = response.data.url + ElMessage.success('图片上传成功') + } else { + ElMessage.error(response.msg || '上传失败') + sealDialog.fileList = [] + } +} + +/** + * 上传失败回调 + */ +const onUploadError = (error: any) => { + ElMessage.error('图片上传失败') + sealDialog.fileList = [] +} + +/** + * 保存签章 + */ +const saveSeal = async () => { + if (!sealDialog.form.seal_image) { + ElMessage.warning('请先上传签章图片') + return + } + + sealDialog.loading = true + try { + await uploadCampusSeal({ + campus_id: sealDialog.form.campus_id, + seal_image: sealDialog.form.seal_image + }) + + sealDialog.visible = false + loadCampusList() // 刷新列表 + } catch (error) { + console.error('签章上传失败:', error) + } finally { + sealDialog.loading = false + } +}