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

chore: update

上级 e548acd9
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
import type { FormInstance, FormRules } from 'element-plus' import type { FormInstance, FormRules } from 'element-plus'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import AppUpload from '@/components/base/AppUpload.vue' import AppUpload from '@/components/base/AppUpload.vue'
import AppEditor from '@/components/base/AppEditor.vue'
import { replyToPost } from '../api' import { replyToPost } from '../api'
import { isVideo } from '@/utils/index' import { isVideo } from '@/utils/index'
interface Props { interface Props {
...@@ -69,7 +68,12 @@ function beforeUpload(file: any) { ...@@ -69,7 +68,12 @@ function beforeUpload(file: any) {
@update:modelValue="$emit('update:modelValue')"> @update:modelValue="$emit('update:modelValue')">
<el-form ref="formRef" :model="form" :rules="rules" hide-required-asterisk label-position="top"> <el-form ref="formRef" :model="form" :rules="rules" hide-required-asterisk label-position="top">
<el-form-item prop="content"> <el-form-item prop="content">
<AppEditor v-model="form.content" :height="300" /> <el-input
type="textarea"
show-word-limit
:autosize="{ minRows: 10, maxRows: 12 }"
:maxlength="500"
v-model="form.content"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="files"> <el-form-item prop="files">
<AppUpload v-model="form.files" accept="image/*,video/*" :beforeUpload="beforeUpload"> <AppUpload v-model="form.files" accept="image/*,video/*" :beforeUpload="beforeUpload">
......
...@@ -5,6 +5,7 @@ import { ElMessage, ElInput } from 'element-plus' ...@@ -5,6 +5,7 @@ import { ElMessage, ElInput } from 'element-plus'
import DiscussItemCommentList from './DiscussItemCommentList.vue' import DiscussItemCommentList from './DiscussItemCommentList.vue'
import FileList from './FileList.vue' import FileList from './FileList.vue'
import { replyToPost } from '../api' import { replyToPost } from '../api'
import { content2Html } from '@/utils'
interface Props { interface Props {
landlordId: string landlordId: string
...@@ -91,7 +92,7 @@ function handleSubmit() { ...@@ -91,7 +92,7 @@ function handleSubmit() {
</div> </div>
<div class="discuss-item__right"> <div class="discuss-item__right">
<div class="discuss-item__main"> <div class="discuss-item__main">
<div class="discuss-item__content" v-html="data.content"></div> <div class="discuss-item__content" v-html="content2Html(data.content)"></div>
<FileList preview :data="data.files" v-if="data.files.length" /> <FileList preview :data="data.files" v-if="data.files.length" />
</div> </div>
<p class="discuss-item__time">{{ data.updated_time }}</p> <p class="discuss-item__time">{{ data.updated_time }}</p>
...@@ -102,6 +103,7 @@ function handleSubmit() { ...@@ -102,6 +103,7 @@ function handleSubmit() {
<el-form-item prop="content"> <el-form-item prop="content">
<el-input <el-input
type="textarea" type="textarea"
show-word-limit
:autosize="{ minRows: 6, maxRows: 6 }" :autosize="{ minRows: 6, maxRows: 6 }"
:maxlength="100" :maxlength="100"
v-model="form.content" v-model="form.content"
......
...@@ -3,6 +3,7 @@ import type { FormInstance, FormRules } from 'element-plus' ...@@ -3,6 +3,7 @@ import type { FormInstance, FormRules } from 'element-plus'
import type { DiscussItem, DiscussCommentItem, User } from '../types' import type { DiscussItem, DiscussCommentItem, User } from '../types'
import { ElMessage, ElInput } from 'element-plus' import { ElMessage, ElInput } from 'element-plus'
import { getCommitList, replyToPost } from '../api' import { getCommitList, replyToPost } from '../api'
import { content2Html } from '@/utils'
interface Props { interface Props {
data: DiscussItem data: DiscussItem
...@@ -110,7 +111,7 @@ defineExpose({ refresh }) ...@@ -110,7 +111,7 @@ defineExpose({ refresh })
> >
</span> </span>
</div> </div>
<div class="discuss-comment-item-bd">{{ item.content }}</div> <div class="discuss-comment-item-bd" v-html="content2Html(item.content)"></div>
<div class="discuss-comment-item-ft"> <div class="discuss-comment-item-ft">
<p>来自于{{ item.created_time }}</p> <p>来自于{{ item.created_time }}</p>
<div class="discuss-item__comment" @click="handleReply(item)"><p>回复</p></div> <div class="discuss-item__comment" @click="handleReply(item)"><p>回复</p></div>
...@@ -123,6 +124,7 @@ defineExpose({ refresh }) ...@@ -123,6 +124,7 @@ defineExpose({ refresh })
<el-form-item prop="content"> <el-form-item prop="content">
<el-input <el-input
type="textarea" type="textarea"
show-word-limit
:autosize="{ minRows: 6, maxRows: 6 }" :autosize="{ minRows: 6, maxRows: 6 }"
:maxlength="100" :maxlength="100"
v-model="form.content" v-model="form.content"
......
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
import type { FormInstance, FormRules } from 'element-plus' import type { FormInstance, FormRules } from 'element-plus'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import AppUpload from '@/components/base/AppUpload.vue' import AppUpload from '@/components/base/AppUpload.vue'
import AppEditor from '@/components/base/AppEditor.vue'
import { createPost } from '../api' import { createPost } from '../api'
import { useMapStore } from '@/stores/map' import { useMapStore } from '@/stores/map'
import { useGetCourseList } from '@/composables/useGetCourseList' import { useGetCourseList } from '@/composables/useGetCourseList'
...@@ -43,6 +42,7 @@ const rules = ref<FormRules>({ ...@@ -43,6 +42,7 @@ const rules = ref<FormRules>({
watchEffect(() => { watchEffect(() => {
courseValue.value = form.course_id courseValue.value = form.course_id
const course = courses.value.find(item => item.course_id === form.course_id) const course = courses.value.find(item => item.course_id === form.course_id)
form.chapter_id = ''
form.semester_id = course ? course.semester.id : '' form.semester_id = course ? course.semester.id : ''
}) })
// 提交 // 提交
...@@ -107,7 +107,12 @@ function beforeUpload(file: any) { ...@@ -107,7 +107,12 @@ function beforeUpload(file: any) {
<el-input v-model="form.title" /> <el-input v-model="form.title" />
</el-form-item> </el-form-item>
<el-form-item label="正文内容" prop="content"> <el-form-item label="正文内容" prop="content">
<AppEditor v-model="form.content" :height="300" /> <el-input
type="textarea"
show-word-limit
:autosize="{ minRows: 10, maxRows: 12 }"
:maxlength="500"
v-model="form.content"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="files"> <el-form-item prop="files">
<AppUpload v-model="form.files" accept="image/*,video/*" :beforeUpload="beforeUpload"> <AppUpload v-model="form.files" accept="image/*,video/*" :beforeUpload="beforeUpload">
......
...@@ -41,28 +41,6 @@ const params = reactive({ ...@@ -41,28 +41,6 @@ const params = reactive({
}) })
// 列表配置 // 列表配置
const listOptions = computed(() => { const listOptions = computed(() => {
const filters = [
{
type: 'select',
prop: 'chapter_id',
placeholder: '请选择',
options: chapterList,
labelKey: 'name',
valueKey: 'id'
},
{ type: 'select', prop: 'search_by', placeholder: '请选择', options: bbsSearchByList },
{ type: 'select', prop: 'type', placeholder: '请选择', options: currentTypes },
{ type: 'select', prop: 'order_by', placeholder: '请选择', options: bbsOrderByList }
]
!props.courseId &&
filters.unshift({
type: 'select',
prop: 'course_id',
placeholder: '请选择',
options: courseList,
labelKey: 'name',
valueKey: 'course_id'
})
return { return {
hasFilterButton: false, hasFilterButton: false,
remote: { remote: {
...@@ -72,17 +50,39 @@ const listOptions = computed(() => { ...@@ -72,17 +50,39 @@ const listOptions = computed(() => {
if (params.course_id !== requestParams.course_id) { if (params.course_id !== requestParams.course_id) {
requestParams.chapter_id = '' requestParams.chapter_id = ''
} }
params.course_id = requestParams.course_id || '' Object.assign(params, requestParams)
courseValue.value = params.course_id courseValue.value = requestParams.course_id
return requestParams return requestParams
}, },
callback(res: { total: number; data: any }) { callback(res: { total: number; data: any }) {
return { total: res.total, list: res.data } return { total: res.total, list: res.data }
} }
}, }
filters
} }
}) })
const filters = $computed(() => {
return [
!props.courseId && {
type: 'select',
prop: 'course_id',
placeholder: '请选择',
options: courseList,
labelKey: 'name',
valueKey: 'course_id'
},
{
type: 'select',
prop: 'chapter_id',
placeholder: '请选择',
options: chapterList,
labelKey: 'name',
valueKey: 'id'
},
{ type: 'select', prop: 'search_by', placeholder: '请选择', options: bbsSearchByList },
{ type: 'select', prop: 'type', placeholder: '请选择', options: currentTypes },
{ type: 'select', prop: 'order_by', placeholder: '请选择', options: bbsOrderByList }
]
})
// 刷新 // 刷新
function handleRefetch() { function handleRefetch() {
appList?.refetch() appList?.refetch()
...@@ -91,7 +91,7 @@ const postFormVisible = $ref(false) ...@@ -91,7 +91,7 @@ const postFormVisible = $ref(false)
</script> </script>
<template> <template>
<AppList v-bind="listOptions" ref="appList"> <AppList :filters="filters" v-bind="listOptions" ref="appList">
<template #header-prepend> <template #header-prepend>
<el-button round type="primary" @click="postFormVisible = true" style="margin-right: 30px">我要发帖</el-button> <el-button round type="primary" @click="postFormVisible = true" style="margin-right: 30px">我要发帖</el-button>
</template> </template>
......
...@@ -21,3 +21,7 @@ export function formatQuestionType(type: QuestionType) { ...@@ -21,3 +21,7 @@ export function formatQuestionType(type: QuestionType) {
export function isVideo(url: string) { export function isVideo(url: string) {
return url.includes('.mp4') return url.includes('.mp4')
} }
export function content2Html(content: string) {
return content.replaceAll('\n', '<br>')
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论