Переглянути джерело

在线论坛回复新增放到下面,排版放到新路由

canghailong 7 місяців тому
батько
коміт
9b3533883c

+ 27 - 0
src/router/forum.js

@@ -0,0 +1,27 @@
+const forum = [
+	{
+		path: '/forum',
+		hide: true,
+		component: () => import('@/views/forum/index.vue'),
+		meta: {
+			title: '在线论坛'
+		}
+	},
+	{
+		path: '/forum/detail',
+		hide: true,
+		component: () => import('@/views/forum/detail.vue'),
+		meta: {
+			title: '论坛详情'
+		}
+	},
+	{
+		path: '/forum/addForum',
+		hide: true,
+		component: () => import('@/views/forum/addForum.vue'),
+		meta: {
+			title: '新增帖子'
+		}
+	}
+]
+export default forum

+ 2 - 1
src/router/index.js

@@ -7,6 +7,7 @@ import systemRouter from './systemRouter'
 import { afterEach, beforeEach } from './scrollBehavior'
 import whiteListRouters from './whiteList'
 import portal from './portal'
+import forum from './forum'
 import userRoutes from '@/config/route'
 import tool from '@/utils/tool'
 import fullPageTool from './fullPageTool'
@@ -26,7 +27,7 @@ const routes_404 = [
 	}
 ]
 // 系统路由
-const routes = [...systemRouter, ...whiteListRouters, ...routes_404]
+const routes = [...systemRouter, ...whiteListRouters, ...routes_404,...forum]
 
 const router = createRouter({
 	history: createWebHistory(),

+ 53 - 58
src/views/forum/addForum.vue

@@ -1,60 +1,51 @@
 <template>
-	<a-card :bordered="false">
-		<a-alert
-			class="mb-3"
-			message="欢迎来到论坛 — 衷心感谢你参与讨论!
-			标题是否清晰明了地描述了主题?看
-			起来有意思么?
-			谁会感兴趣?
-			它为什么重要?
-			你期望从社区中获得什么样的回应?
-			选择常用的词句以便别人能找到你的主题。若想要给主题和类似主题分组,选择一个分类。"
-			type="warning"
-		/>
-		<a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
-			<a-row :gutter="16">
-				<a-col :span="12">
-					<a-form-item label="标题:" name="postTitle">
-						<a-input v-model:value="formData.postTitle" placeholder="请输入标题" allow-clear />
-					</a-form-item>
-				</a-col>
-				<a-col :span="12">
-					<a-form-item label="分类:" name="typeId">
-						<a-select
-							v-model:value="formData.typeId"
-							show-search
-							placeholder="请选择分类"
-							style="width: 200px"
-							:options="typeOptions"
-							:filter-option="filterOption"
-						></a-select>
-					</a-form-item>
-				</a-col>
-				<a-col :span="12">
-					<a-form-item label="指向:" name="appointUserArr">
-						<a-select
-							v-model:value="formData.appointUserArr"
-							mode="multiple"
-							show-search
-							placeholder="请选择"
-							style="width: 200px"
-							:options="usertypeOptions"
-							:filter-option="filterOption"
-						></a-select>
-					</a-form-item>
-				</a-col>
-				<a-col :span="24">
-					<a-form-item label="内容:" name="postContent">
-						<xn-editor v-model="formData.postContent" placeholder="请输入内容" :height="400"></xn-editor>
-					</a-form-item>
-				</a-col>
-			</a-row>
-		</a-form>
-		<div>
-			<!-- <a-button style="margin-right: 8px" @click="onClose">关闭</a-button> -->
-			<a-button type="primary" :loading="submitLoading" @click="onSubmit">保存</a-button>
-		</div>
-	</a-card>
+	<div style="display: flex; justify-content: center">
+		<a-card :bordered="false" style="width: 1200px">
+			<a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
+				<a-row :gutter="16">
+					<a-col :span="8">
+						<a-form-item label="标题:" name="postTitle">
+							<a-input v-model:value="formData.postTitle" placeholder="请输入标题" allow-clear />
+						</a-form-item>
+					</a-col>
+					<a-col :span="8">
+						<a-form-item label="分类:" name="typeId">
+							<a-select
+								v-model:value="formData.typeId"
+								show-search
+								placeholder="请选择分类"
+								style="width: 100%"
+								:options="typeOptions"
+								:filter-option="filterOption"
+							></a-select>
+						</a-form-item>
+					</a-col>
+					<a-col :span="8">
+						<a-form-item label="指向:" name="appointUserArr">
+							<a-select
+								v-model:value="formData.appointUserArr"
+								mode="multiple"
+								show-search
+								placeholder="请选择"
+								style="width: 100%"
+								:options="usertypeOptions"
+								:filter-option="filterOption"
+							></a-select>
+						</a-form-item>
+					</a-col>
+					<a-col :span="24">
+						<a-form-item label="内容:" name="postContent">
+							<xn-editor v-model="formData.postContent" placeholder="请输入内容" :height="400"></xn-editor>
+						</a-form-item>
+					</a-col>
+				</a-row>
+			</a-form>
+			<div>
+				<a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
+				<a-button type="primary" :loading="submitLoading" @click="onSubmit">保存</a-button>
+			</div>
+		</a-card>
+	</div>
 </template>
 
 <script setup name="addForum">
@@ -119,6 +110,10 @@
 	// 关闭抽屉
 	const onClose = () => {
 		formRef.value.resetFields()
+		window.close()
+		router.push({
+			path: '/forum'
+		})
 	}
 
 	// 默认要校验的
@@ -142,14 +137,14 @@
 					params = {
 						...formData.value,
 						...browserObj.value,
-						postType:route.query.postType
+						postType: route.query.postType
 					}
 				}
 				if (route.query.postType == 2) {
 					params = {
 						...formData.value,
 						...errorVal.value,
-						postType:route.query.postType
+						postType: route.query.postType
 					}
 				}
 				forumApi.submitForm(params).then(() => {

+ 60 - 52
src/views/forum/detail.vue

@@ -1,59 +1,67 @@
 <template>
-	<a-card>
-		<div style="display: flex; justify-content: space-between">
-			<div style="display: flex">
-				<a-avatar
-					style="width: 60px; height: 60px"
-					:src="detailObj.userAvatar"
-					:size="{ xs: 24, sm: 32, md: 40, lg: 64, xl: 80, xxl: 100 }"
-				/>
-				<div class="snowy-index-card-left-one-username">
-					<span style="font-weight: 600; margin: 2px; font-size: 18px">{{ detailObj.userNickName }}</span>
-					<span style="color: #6d737b; margin: 2px">
-						{{ detailObj.typeName }} | {{ formatDateTime(detailObj.lastReplyTime) }}
-					</span>
+	<div style="display: flex; justify-content: center">
+		<div style="width: 1200px">
+			<a-card>
+				<div style="display: flex; justify-content: space-between">
+					<div style="display: flex">
+						<a-avatar
+							style="width: 60px; height: 60px"
+							:src="detailObj.userAvatar"
+							:size="{ xs: 24, sm: 32, md: 40, lg: 64, xl: 80, xxl: 100 }"
+						/>
+						<div class="snowy-index-card-left-one-username">
+							<span style="font-weight: 600; margin: 2px; font-size: 18px">{{ detailObj.userNickName }}</span>
+							<span style="color: #6d737b; margin: 2px">
+								{{ detailObj.typeName }} | {{ formatDateTime(detailObj.lastReplyTime) }}
+							</span>
+						</div>
+					</div>
 				</div>
-			</div>
-		</div>
-		<div class="forum-list-title">{{ detailObj.postTitle }}</div>
-		<div class="htmlContent" v-html="detailObj.postContent"></div>
-		<div>
-			<span>
-				<a-tooltip title="点赞">
-					<template v-if="detailObj.isLike == 1">
-						<HeartOutlined :style="{ color: '#fa6c8d' }" @click="like(detailObj, 0)" />
-					</template>
-					<template v-else>
-						<HeartOutlined @click="like(detailObj, 1)" />
-					</template>
-				</a-tooltip>
-				<span style="padding-left: 8px">
-					{{ detailObj.likeCount }}
-				</span>
-			</span>
-			<a-tooltip title="编辑" v-if="detailObj.isSelf == 1">
-				<EditOutlined class="ml-2" @click="formRef.onOpen(detailObj, detailObj.postId)" />
-			</a-tooltip>
+				<div class="forum-list-title">{{ detailObj.postTitle }}</div>
+				<div class="htmlContent" v-html="detailObj.postContent"></div>
+				<div>
+					<span>
+						<a-tooltip title="点赞">
+							<template v-if="detailObj.isLike == 1">
+								<HeartOutlined :style="{ color: '#fa6c8d' }" @click="like(detailObj, 0)" />
+							</template>
+							<template v-else>
+								<HeartOutlined @click="like(detailObj, 1)" />
+							</template>
+						</a-tooltip>
+						<span style="padding-left: 8px">
+							{{ detailObj.likeCount }}
+						</span>
+					</span>
+					<a-tooltip title="编辑" v-if="detailObj.isSelf == 1">
+						<EditOutlined class="ml-2" @click="formRef.onOpen(detailObj, detailObj.postId)" />
+					</a-tooltip>
 
-			<span class="ml-2" style="cursor: pointer" @click="replyFormRef.onOpen(detailObj, detailObj.postId)">
-				<span>回复</span>
-				<span style="padding-left: 8px">{{ detailObj.replyCount }}</span>
-			</span>
-			<a-tooltip title="举报">
-				<WarningOutlined class="ml-2" @click="reportFormRef.onOpen(detailObj, detailObj.postId)" />
-			</a-tooltip>
-		</div>
-	</a-card>
-	<a-card class="mt-2">
-		<Comment :commentList="detailObj.replyList?.records" :params="commentParams" @successful="resetGetList()"></Comment>
-		<div style="display: flex; justify-content: center" class="mt-8">
-			<a-button type="primary" shape="round" @click="morePaging" v-if="moreType"> 加载更多 </a-button>
-			<div v-else>全部加载完毕</div>
+					<span class="ml-2" style="cursor: pointer" @click="replyFormRef.onOpen(detailObj, detailObj.postId)">
+						<span>回复</span>
+						<span style="padding-left: 8px">{{ detailObj.replyCount }}</span>
+					</span>
+					<a-tooltip title="举报">
+						<WarningOutlined class="ml-2" @click="reportFormRef.onOpen(detailObj, detailObj.postId)" />
+					</a-tooltip>
+				</div>
+			</a-card>
+			<a-card class="mt-2">
+				<Comment
+					:commentList="detailObj.replyList?.records"
+					:params="commentParams"
+					@successful="resetGetList()"
+				></Comment>
+				<div style="display: flex; justify-content: center" class="mt-8">
+					<a-button type="primary" shape="round" @click="morePaging" v-if="moreType"> 加载更多 </a-button>
+					<div v-else>全部加载完毕</div>
+				</div>
+			</a-card>
+			<replyForm ref="replyFormRef" @successful="resetGetList()" />
+			<Form ref="formRef" @successful="resetGetList()" />
+			<reportForm ref="reportFormRef" @successful="resetGetList()"></reportForm>
 		</div>
-	</a-card>
-	<replyForm ref="replyFormRef" @successful="resetGetList()" />
-	<Form ref="formRef" @successful="resetGetList()" />
-	<reportForm ref="reportFormRef" @successful="resetGetList()"></reportForm>
+	</div>
 </template>
 
 <script setup name="forumDetail">

+ 19 - 26
src/views/forum/form.vue

@@ -1,49 +1,42 @@
 <template>
 	<xn-form-container
-		:title="formData.id ? '编辑主题' : '增加主题'"
-		:width="700"
+		:title="formData.id ? '编辑帖子' : '增加帖子'"
+		:height="550"
+		:get-container="false"
 		:visible="visible"
 		:destroy-on-close="true"
 		@close="onClose"
+		placement="bottom"
+		:mask="false"
+		style="width: 960px;left: calc(50% - 960px / 2);"
 	>
-		<a-alert
-			class="mb-3"
-			message="欢迎来到论坛 — 衷心感谢你参与讨论!
-			标题是否清晰明了地描述了主题?看
-			起来有意思么?
-			谁会感兴趣?
-			它为什么重要?
-			你期望从社区中获得什么样的回应?
-			选择常用的词句以便别人能找到你的主题。若想要给主题和类似主题分组,选择一个分类。"
-			type="warning"
-		/>
 		<a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
 			<a-row :gutter="16">
-				<a-col :span="12">
+				<a-col :span="8">
 					<a-form-item label="标题:" name="postTitle">
 						<a-input v-model:value="formData.postTitle" placeholder="请输入标题" allow-clear />
 					</a-form-item>
 				</a-col>
-				<a-col :span="12">
+				<a-col :span="8">
 					<a-form-item label="分类:" name="typeId">
 						<a-select
 							v-model:value="formData.typeId"
 							show-search
 							placeholder="请选择分类"
-							style="width: 200px"
+							style="width: 100%"
 							:options="typeOptions"
 							:filter-option="filterOption"
 						></a-select>
 					</a-form-item>
 				</a-col>
-				<a-col :span="12">
+				<a-col :span="8">
 					<a-form-item label="指向:" name="appointUserArr">
 						<a-select
 							v-model:value="formData.appointUserArr"
 							mode="multiple"
 							show-search
 							placeholder="请选择"
-							style="width: 200px"
+							style="width: 100%"
 							:options="usertypeOptions"
 							:filter-option="filterOption"
 						></a-select>
@@ -51,7 +44,7 @@
 				</a-col>
 				<a-col :span="24">
 					<a-form-item label="内容:" name="postContent">
-						<xn-editor v-model="formData.postContent" placeholder="请输入内容" :height="400"></xn-editor>
+						<xn-editor v-model="formData.postContent" placeholder="请输入内容" :height="300"></xn-editor>
 					</a-form-item>
 				</a-col>
 			</a-row>
@@ -103,17 +96,17 @@
 				}
 			})
 		})
-		forumApi.allUserList().then((data)=>{
-			usertypeOptions.value = data.map(r=>{
-				return{
-					label:r.name,
-					value:r.id,
+		forumApi.allUserList().then((data) => {
+			usertypeOptions.value = data.map((r) => {
+				return {
+					label: r.name,
+					value: r.id,
 					...r
 				}
 			})
 		})
 		if (module) {
-			if(record.appointUser){
+			if (record.appointUser) {
 				record.appointUserArr = record.appointUser.split(',')
 			}
 			formData.value = Object.assign(formData.value, record)
@@ -140,7 +133,7 @@
 			.validate()
 			.then(() => {
 				submitLoading.value = true
-				if(formData.value.appointUserArr && formData.value.appointUserArr.length > 1){
+				if (formData.value.appointUserArr && formData.value.appointUserArr.length > 1) {
 					formData.value.appointUser = formData.value.appointUserArr.join(',')
 				}
 				forumApi.submitForm(formData.value, formData.value.postId).then(() => {

+ 109 - 95
src/views/forum/index.vue

@@ -1,64 +1,58 @@
 <template>
-	<a-card :bordered="false">
-		<a-space>
-			<a-input-search
-				v-model:value="searchFormState.postTitle"
-				placeholder="请输入名称关键词"
-				enter-button
-				allowClear
-				@search="onSearch"
-			/>
-			<a-select
-				v-model:value="typeValue"
-				show-search
-				placeholder="所有分类"
-				style="width: 200px"
-				:options="typeOptions"
-				:filter-option="filterOption"
-				@change="handleChange"
-			></a-select>
-			<a-select
-				v-model:value="typeValueEx"
-				allowClear
-				placeholder="请选择"
-				style="width: 200px"
-				:options="typeOptionsEx"
-				@change="handleChangeEx"
-			></a-select>
-			<a-radio-group v-model:value="searchFormState.sortOrder" button-style="solid">
-				<a-radio-button
-					v-for="module in moduleTypeList"
-					:key="module.id"
-					:value="module.id"
-					@click="moduleClock(module.id)"
-				>
-					{{ module.title }}
-				</a-radio-button>
-			</a-radio-group>
-			<a-button type="primary" @click="formRef.onOpen(undefined, searchFormState.sortOrder)">
-				<template #icon><plus-outlined /></template>
-				创建新主题
-			</a-button>
-		</a-space>
-		<s-table ref="table" :columns="columns" :data="loadData" :row-key="(record) => record.id" :custom-row="customRow">
-			<template #bodyCell="{ column, record }">
-				<template v-if="column.dataIndex === 'postTitle'">
-					<div class="forum-list-title">{{ record.postTitle }}</div>
-					<div class="forum-list-type">{{ record.typeName }}</div>
-					<div class="forum-list-content one-line" v-html="record.postContent"></div>
+	<div style="display: flex; justify-content: center">
+		<a-card :bordered="false" style="width: 1200px" class="formMount">
+			<a-space>
+				<a-input-search
+					v-model:value="searchFormState.postTitle"
+					placeholder="请输入名称关键词"
+					enter-button
+					allowClear
+					@search="onSearch"
+				/>
+				<a-select
+					v-model:value="typeValue"
+					show-search
+					placeholder="所有分类"
+					style="width: 200px"
+					:options="typeOptions"
+					:filter-option="filterOption"
+					@change="handleChange"
+				></a-select>
+				<a-radio-group v-model:value="searchFormState.sortOrder" button-style="solid">
+					<a-radio-button
+						v-for="module in moduleTypeList"
+						:key="module.id"
+						:value="module.id"
+						@click="moduleClock(module.id, module.type)"
+					>
+						{{ module.title }}
+					</a-radio-button>
+				</a-radio-group>
+				<a-button type="primary" @click="formRef.onOpen(undefined, searchFormState.sortOrder)">
+					<template #icon><plus-outlined /></template>
+					创建新主题
+				</a-button>
+			</a-space>
+			<s-table ref="table" :columns="columns" :data="loadData" :row-key="(record) => record.id" :custom-row="customRow">
+				<template #bodyCell="{ column, record }">
+					<template v-if="column.dataIndex === 'postTitle'">
+						<div class="forum-list-title">{{ record.postTitle }}</div>
+						<div class="forum-list-type">{{ record.typeName }}</div>
+						<div class="forum-list-content one-line" v-html="record.postContent"></div>
+					</template>
+					<template v-if="column.dataIndex === 'lastReplyUserAvatar'">
+						<a-tooltip :title="record.lastReplyUserNickName" placement="top">
+							<a-avatar :src="record.lastReplyUserAvatar"></a-avatar>
+						</a-tooltip>
+					</template>
+					<template v-if="column.dataIndex === 'lastReplyTime'">
+						<div>{{ formatDateTime(record.lastReplyTime) }}</div>
+					</template>
 				</template>
-				<template v-if="column.dataIndex === 'lastReplyUserAvatar'">
-					<a-tooltip :title="record.lastReplyUserNickName" placement="top">
-						<a-avatar :src="record.lastReplyUserAvatar"></a-avatar>
-					</a-tooltip>
-				</template>
-				<template v-if="column.dataIndex === 'lastReplyTime'">
-					<div>{{ formatDateTime(record.lastReplyTime) }}</div>
-				</template>
-			</template>
-		</s-table>
-	</a-card>
-	<Form ref="formRef" @successful="table.refresh(true)" />
+			</s-table>
+			<Form ref="formRef" @successful="table.refresh(true)" />
+		</a-card>
+	</div>
 </template>
 
 <script setup name="forumList">
@@ -78,11 +72,39 @@
 	const moduleTypeList = ref([
 		{
 			title: '最新',
-			id: 0
+			id: 0,
+			type: 1,
+			state: 0
 		},
 		{
 			title: '热门',
-			id: 1
+			id: 1,
+			type: 1,
+			state: 1
+		},
+		{
+			title: '我发布的',
+			id: 2,
+			type: 2,
+			state: 1
+		},
+		{
+			title: '我回复的',
+			id: 3,
+			type: 2,
+			state: 2
+		},
+		{
+			title: '关于我的',
+			id: 4,
+			type: 2,
+			state: 3
+		},
+		{
+			title: '我点赞的',
+			id: 5,
+			type: 2,
+			state: 4
 		}
 	])
 	const columns = [
@@ -119,7 +141,6 @@
 	const typeOptions = ref([])
 	const handleChange = (value) => {
 		exType.value = false
-		typeValueEx.value = ''
 		searchFormState.typeId = value
 		table.value.refresh(true)
 	}
@@ -132,7 +153,6 @@
 	}
 	// 查询
 	const onSearch = () => {
-		typeValueEx.value = ''
 		exType.value = false
 		table.value.refresh(true)
 	}
@@ -163,39 +183,12 @@
 	}
 	getTypeList()
 
-	const typeValueEx = ref('请选择')
 	const exType = ref(false)
-	const typeOptionsEx = ref([
-		{
-			label: '我发布的',
-			value: 1
-		},
-		{
-			label: '我回复的',
-			value: 2
-		},
-		{
-			label: '关于我的',
-			value: 3
-		},
-		{
-			label: '我点赞的',
-			value: 4
-		}
-	])
-	const handleChangeEx = (value) => {
-		if (value) {
-			exType.value = true
-		} else {
-			exType.value = false
-			typeValueEx.value = ''
-		}
 
-		table.value.refresh(true)
-	}
 	const loadData = (parameter) => {
 		if (exType.value) {
-			return forumApi.moreList(Object.assign(parameter, {postExtend:typeValueEx.value})).then((data) => {
+			let postExtend = moduleTypeList.value.filter((r) => r.id == searchFormState.sortOrder)[0]?.state
+			return forumApi.moreList(Object.assign(parameter, { postExtend: postExtend })).then((data) => {
 				if (data) {
 					return data
 				} else {
@@ -213,13 +206,34 @@
 		}
 	}
 	// 切换应用标签查询菜单列表
-	const moduleClock = (value) => {
+	const moduleClock = (value, t) => {
 		exType.value = false
-		typeValueEx.value = ''
 		searchFormState.sortOrder = value
+		if (t == 2) {
+			exType.value = true
+		}
 		table.value.refresh(true)
 	}
-	
+	// 触底函数
+	const onReachBottom = () => {
+		window.addEventListener('scroll', onBottom())
+	}
+	// 触底相应函数
+	const onBottom = () => {
+		// 获取可视高度
+		let clientHeight = document.documentElement.clientHeight
+		// 获取滚动高度
+		let scrollTop = document.documentElement.scrollTop
+		// 滚动条高度
+		let scrollHeight = document.documentElement.scrollHeight
+		if (clientHeight + scrollTop + 180 > scrollHeight) {
+			console.log('触底了')
+		}
+	}
+	onReachBottom()
+	onBeforeUnmount(() => {
+		window.removeEventListener('mousemove', onBottom())
+	})
 </script>
 <style scoped>
 	.forum-list-title {

+ 11 - 2
src/views/forum/replyForm.vue

@@ -1,10 +1,19 @@
 <template>
-	<xn-form-container title="回复" :width="700" :visible="visible" :destroy-on-close="true" @close="onClose">
+	<xn-form-container
+		title="回复"
+		:height="500"
+		placement="bottom"
+		:mask="false"
+		style="width: 960px; left: calc(50% - 960px / 2)"
+		:visible="visible"
+		:destroy-on-close="true"
+		@close="onClose"
+	>
 		<a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
 			<a-row :gutter="16">
 				<a-col :span="24">
 					<a-form-item label="内容:" name="replyContent">
-						<xn-editor v-model="formData.replyContent" placeholder="请输入" :height="400"></xn-editor>
+						<xn-editor v-model="formData.replyContent" placeholder="请输入" :height="300"></xn-editor>
 					</a-form-item>
 				</a-col>
 			</a-row>

+ 17 - 8
src/views/forum/reportForm.vue

@@ -1,5 +1,14 @@
 <template>
-	<xn-form-container title="回复" :width="700" :visible="visible" :destroy-on-close="true" @close="onClose">
+	<xn-form-container
+		title="回复"
+		:height="500"
+		placement="bottom"
+		:mask="false"
+		style="width: 960px; left: calc(50% - 960px / 2)"
+		:visible="visible"
+		:destroy-on-close="true"
+		@close="onClose"
+	>
 		<a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
 			<a-row :gutter="16">
 				<a-col :span="12">
@@ -8,21 +17,21 @@
 							v-model:value="formData.reportReasonType"
 							show-search
 							placeholder="所有分类"
-							style="width: 200px"
+							style="width: 100%"
 							:options="typeOptions"
 							:filter-option="filterOption"
 							@change="handleChange"
 						></a-select>
 					</a-form-item>
 				</a-col>
-				<a-col :span="24">
-					<a-form-item label="举报原因:" name="reportDetail">
-						<a-textarea v-model:value="formData.reportDetail" placeholder="请输入举报原因" :rows="4" />
+				<a-col :span="12">
+					<a-form-item label="证据图片:" name="evidenceScreenshot">
+						<UpLoadImg ref="upLoadImgRef" urlType="2" @handlerUpImage="handlerUpImage"></UpLoadImg>
 					</a-form-item>
 				</a-col>
 				<a-col :span="24">
-					<a-form-item label="证据图片:" name="evidenceScreenshot">
-						<UpLoadImg ref="upLoadImgRef" urlType="2" @handlerUpImage="handlerUpImage"></UpLoadImg>
+					<a-form-item label="举报原因:" name="reportDetail">
+						<a-textarea v-model:value="formData.reportDetail" placeholder="请输入举报原因" :rows="4" />
 					</a-form-item>
 				</a-col>
 			</a-row>
@@ -100,7 +109,7 @@
 	const formRules = {
 		reportReasonType: [required('请选择举报类型')],
 		reportDetail: [required('请输入举报原因')],
-		evidenceScreenshot: [required('请上传证据图片')],
+		evidenceScreenshot: [required('请上传证据图片')]
 	}
 
 	const categoryOptions = tool.dictList('MENU_TYPE')