提交 e0e05750 authored 作者: 王鹏飞's avatar 王鹏飞

chore: update

上级 93dc694f
...@@ -5,10 +5,17 @@ import type { UploadProps, UploadUserFile } from 'element-plus' ...@@ -5,10 +5,17 @@ import type { UploadProps, UploadUserFile } from 'element-plus'
import md5 from 'blueimp-md5' import md5 from 'blueimp-md5'
import { getSignature } from '@/api/base' import { getSignature } from '@/api/base'
const props = withDefaults(defineProps<{ modelValue: string | UploadUserFile[]; prefix?: string }>(), { interface Props {
modelValue: string | { name: string; url: string }[]
prefix?: string
size?: number
}
const props = withDefaults(defineProps<Props>(), {
prefix: 'upload/saas-learn/' prefix: 'upload/saas-learn/'
}) })
const emit = defineEmits(['update:modelValue'])
const emit = defineEmits(['update:modelValue', 'success'])
const uploadData = ref() const uploadData = ref()
...@@ -17,7 +24,7 @@ const fileList = ref<UploadUserFile[]>([]) ...@@ -17,7 +24,7 @@ const fileList = ref<UploadUserFile[]>([])
watch( watch(
() => props.modelValue, () => props.modelValue,
value => { value => {
fileList.value = Array.isArray(value) ? [...value] : [] fileList.value = Array.isArray(value) ? value.map(item => ({ ...item })) : []
} }
) )
...@@ -27,6 +34,10 @@ const showFileList = computed(() => { ...@@ -27,6 +34,10 @@ const showFileList = computed(() => {
// 上传之前 // 上传之前
const handleBeforeUpload = async (file: any) => { const handleBeforeUpload = async (file: any) => {
if (props.size && file.size > props.size) {
ElMessage.error(`文件大小不能超过${props.size / 1024 / 1024}M`)
return false
}
const fileName = file.name const fileName = file.name
const key = props.prefix + md5(fileName + new Date().getTime()) + fileName.substr(fileName.lastIndexOf('.')) const key = props.prefix + md5(fileName + new Date().getTime()) + fileName.substr(fileName.lastIndexOf('.'))
const response: Record<string, any> = await getSignature() const response: Record<string, any> = await getSignature()
...@@ -54,6 +65,7 @@ const handleSuccess = (response: any, file: any, files: any) => { ...@@ -54,6 +65,7 @@ const handleSuccess = (response: any, file: any, files: any) => {
} else { } else {
emit('update:modelValue', file.raw.url) emit('update:modelValue', file.raw.url)
} }
emit('success', file, files)
} }
// 上传限制 // 上传限制
...@@ -77,7 +89,7 @@ const handleRemove: UploadProps['onRemove'] = (file, files) => { ...@@ -77,7 +89,7 @@ const handleRemove: UploadProps['onRemove'] = (file, files) => {
// 预览 // 预览
const handlePreview: UploadProps['onPreview'] = uploadFile => { const handlePreview: UploadProps['onPreview'] = uploadFile => {
console.log(uploadFile) window.open(uploadFile.url)
} }
</script> </script>
...@@ -100,7 +112,7 @@ const handlePreview: UploadProps['onPreview'] = uploadFile => { ...@@ -100,7 +112,7 @@ const handlePreview: UploadProps['onPreview'] = uploadFile => {
<el-icon><Plus /></el-icon> <el-icon><Plus /></el-icon>
</template> </template>
<template v-else> <template v-else>
<el-button type="primary" round>点击上传</el-button> <el-button size="default" round>点击上传</el-button>
</template> </template>
</template> </template>
<div class="avatar-uploader" v-else> <div class="avatar-uploader" v-else>
...@@ -142,9 +154,4 @@ const handlePreview: UploadProps['onPreview'] = uploadFile => { ...@@ -142,9 +154,4 @@ const handlePreview: UploadProps['onPreview'] = uploadFile => {
height: 100%; height: 100%;
text-align: center; text-align: center;
} }
.suggestion-file {
display: inline-block;
margin-top: 10px;
color: blue;
}
</style> </style>
...@@ -45,7 +45,9 @@ function handleUpdate() { ...@@ -45,7 +45,9 @@ function handleUpdate() {
</template> </template>
<div class="suggestion-main"> <div class="suggestion-main">
<div class="suggestion-content" v-html="item.content"></div> <div class="suggestion-content" v-html="item.content"></div>
<a :href="item.files" target="_blank" class="suggestion-file" v-if="item.files">下载附件</a> <a :href="file.url" target="_blank" class="suggestion-file" v-for="file in item.files" :key="file.url">
{{ file.name }}
</a>
<p class="t1">发布于:{{ item.created_time }}</p> <p class="t1">发布于:{{ item.created_time }}</p>
<template v-if="item.status === 2"> <template v-if="item.status === 2">
<h2 class="suggestion-title">问题回复</h2> <h2 class="suggestion-title">问题回复</h2>
...@@ -86,4 +88,9 @@ function handleUpdate() { ...@@ -86,4 +88,9 @@ function handleUpdate() {
max-width: 100%; max-width: 100%;
} }
} }
.suggestion-file {
display: inline-block;
margin-top: 10px;
color: blue;
}
</style> </style>
...@@ -13,7 +13,7 @@ const formRef = $ref<FormInstance>() ...@@ -13,7 +13,7 @@ const formRef = $ref<FormInstance>()
const form = reactive({ const form = reactive({
title: '', title: '',
content: '', content: '',
files: '' files: []
}) })
const rules = ref<FormRules>({ const rules = ref<FormRules>({
title: [{ required: true, message: '请输入问题描述', trigger: 'blur' }], title: [{ required: true, message: '请输入问题描述', trigger: 'blur' }],
...@@ -25,7 +25,8 @@ function handleSubmit() { ...@@ -25,7 +25,8 @@ function handleSubmit() {
} }
// 修改 // 修改
const update = () => { const update = () => {
submitSuggestion(form).then(() => { const params = Object.assign({}, form, { files: JSON.stringify(form.files) })
submitSuggestion(params).then(() => {
ElMessage({ message: '提交成功', type: 'success' }) ElMessage({ message: '提交成功', type: 'success' })
emit('update') emit('update')
formRef?.resetFields() formRef?.resetFields()
...@@ -43,12 +44,10 @@ const update = () => { ...@@ -43,12 +44,10 @@ const update = () => {
<AppEditor v-model="form.content" /> <AppEditor v-model="form.content" />
</el-form-item> </el-form-item>
<el-form-item label="上传附件" prop="files"> <el-form-item label="上传附件" prop="files">
<AppUpload v-model="form.files"> <AppUpload v-model="form.files" :limit="1">
<el-button round>点击上传</el-button>
<template #tip> <template #tip>
(可以上传 word、ppt、png、jpg、zip、rar等资源,多文件请先压缩打包成一个文件后,再上传) (可以上传 word、ppt、png、jpg、zip、rar等资源,多文件请先压缩打包成一个文件后,再上传)
</template> </template>
<p>{{ form.files }}</p>
</AppUpload> </AppUpload>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
......
export interface SuggestionType { export interface SuggestionType {
content: string content: string
created_time: string created_time: string
files: string files: { name: string; url: string }[]
id: string id: string
reply: string reply: string
title: string title: string
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论