Explorar o código

后台管理批量删除问题

canghailong hai 7 meses
pai
achega
81a5ee0c65

+ 1 - 0
package.json

@@ -37,6 +37,7 @@
 		"@vueup/vue-quill": "^1.2.0",
 		"ant-design-vue": "3.2.14",
 		"axios": "1.1.3",
+		"bowser": "^2.11.0",
 		"codemirror": "^6.0.2",
 		"cropperjs": "1.5.12",
 		"dayjs": "1.11.7",

+ 47 - 0
pnpm-lock.yaml

@@ -56,12 +56,18 @@ importers:
       '@vue-office/pdf':
         specifier: 1.2.0
         version: 1.2.0(vue-demi@0.13.11(vue@3.2.44))(vue@3.2.44)
+      '@vueup/vue-quill':
+        specifier: ^1.2.0
+        version: 1.2.0(vue@3.2.44)
       ant-design-vue:
         specifier: 3.2.14
         version: 3.2.14(vue@3.2.44)
       axios:
         specifier: 1.1.3
         version: 1.1.3
+      bowser:
+        specifier: ^2.11.0
+        version: 2.11.0
       codemirror:
         specifier: ^6.0.2
         version: 6.0.2
@@ -1064,6 +1070,11 @@ packages:
     peerDependencies:
       vue: ^3.0.10
 
+  '@vueup/vue-quill@1.2.0':
+    resolution: {integrity: sha512-kd5QPSHMDpycklojPXno2Kw2JSiKMYduKYQckTm1RJoVDA557MnyUXgcuuDpry4HY/Rny9nGNcK+m3AHk94wag==}
+    peerDependencies:
+      vue: ^3.2.41
+
   '@vueuse/core@6.9.2':
     resolution: {integrity: sha512-FRwl4ccSFuHZBHLGgS9TMv/+Dd6XFaL4o9nph2qtgQIV+z29RBFokw08XjHfykiENRzB01MjYHJ7iRUnsIFQXg==}
     peerDependencies:
@@ -1229,6 +1240,9 @@ packages:
   boolbase@1.0.0:
     resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
 
+  bowser@2.11.0:
+    resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==}
+
   brace-expansion@1.1.11:
     resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
 
@@ -1877,6 +1891,9 @@ packages:
   fast-diff@1.1.2:
     resolution: {integrity: sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==}
 
+  fast-diff@1.2.0:
+    resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==}
+
   fast-diff@1.3.0:
     resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
 
@@ -2405,6 +2422,13 @@ packages:
   lodash-es@4.17.21:
     resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
 
+  lodash.clonedeep@4.5.0:
+    resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==}
+
+  lodash.isequal@4.5.0:
+    resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
+    deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead.
+
   lodash.merge@4.6.2:
     resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
 
@@ -2815,6 +2839,9 @@ packages:
     resolution: {integrity: sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==}
     engines: {node: '>=0.10'}
 
+  quill-delta@4.2.2:
+    resolution: {integrity: sha512-qjbn82b/yJzOjstBgkhtBjN2TNK+ZHP/BgUQO+j6bRhWQQdmj2lH6hXG7+nwwLF41Xgn//7/83lxs9n2BkTtTg==}
+
   quill@1.3.7:
     resolution: {integrity: sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==}
 
@@ -4687,6 +4714,12 @@ snapshots:
       quill: 1.3.7
       vue: 3.2.44
 
+  '@vueup/vue-quill@1.2.0(vue@3.2.44)':
+    dependencies:
+      quill: 1.3.7
+      quill-delta: 4.2.2
+      vue: 3.2.44
+
   '@vueuse/core@6.9.2(vue@3.2.44)':
     dependencies:
       '@vueuse/shared': 6.9.2(vue@3.2.44)
@@ -4875,6 +4908,8 @@ snapshots:
 
   boolbase@1.0.0: {}
 
+  bowser@2.11.0: {}
+
   brace-expansion@1.1.11:
     dependencies:
       balanced-match: 1.0.2
@@ -5647,6 +5682,8 @@ snapshots:
 
   fast-diff@1.1.2: {}
 
+  fast-diff@1.2.0: {}
+
   fast-diff@1.3.0: {}
 
   fast-glob@3.3.3:
@@ -6166,6 +6203,10 @@ snapshots:
 
   lodash-es@4.17.21: {}
 
+  lodash.clonedeep@4.5.0: {}
+
+  lodash.isequal@4.5.0: {}
+
   lodash.merge@4.6.2: {}
 
   lodash@4.17.21: {}
@@ -6573,6 +6614,12 @@ snapshots:
       extend: 3.0.2
       fast-diff: 1.1.2
 
+  quill-delta@4.2.2:
+    dependencies:
+      fast-diff: 1.2.0
+      lodash.clonedeep: 4.5.0
+      lodash.isequal: 4.5.0
+
   quill@1.3.7:
     dependencies:
       clone: 2.1.2

+ 189 - 0
src/views/forum/addForum.vue

@@ -0,0 +1,189 @@
+<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>
+</template>
+
+<script setup name="addForum">
+	import { required } from '@/utils/formRules'
+	import SnowflakeId from 'snowflake-id'
+	import tool from '@/utils/tool'
+	import forumApi from '@/api/forum/forumApi'
+	import XnEditor from '@/components/Editor/index.vue'
+	import Bowser from 'bowser'
+	import { useRoute, useRouter } from 'vue-router'
+	const route = useRoute()
+	const router = useRouter()
+	const { proxy } = getCurrentInstance()
+	const userInfo = tool.data.get('USER_INFO')
+	const typeOptions = ref([])
+	// 默认是关闭状态
+	const emit = defineEmits({ successful: null })
+	const formRef = ref()
+	const treeData = ref([])
+	// 表单数据,也就是默认给一些数据
+	const formData = ref({})
+	// 默认展开的节点(顶级)
+	const defaultExpandedKeys = ref([0])
+	const submitLoading = ref(false)
+	// 模块ID
+	const moduleId = ref('')
+	const usertypeOptions = ref([])
+	const filterOption = (input, option) => {
+		return option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0
+	}
+
+	// 打开抽屉
+	const onOpen = () => {
+		forumApi.forumTypeList().then((data) => {
+			typeOptions.value = data.map((r) => {
+				return {
+					label: r.typeName,
+					value: r.typeId,
+					...r
+				}
+			})
+		})
+		forumApi.allUserList().then((data) => {
+			usertypeOptions.value = data.map((r) => {
+				return {
+					label: r.name,
+					value: r.id,
+					...r
+				}
+			})
+		})
+		if (route.query.postType == 1) {
+			getBower()
+		}
+		if (route.query.postType == 2) {
+			errorCorrection()
+		}
+	}
+	setTimeout(() => {
+		onOpen()
+	}, 0)
+	// 关闭抽屉
+	const onClose = () => {
+		formRef.value.resetFields()
+		// const obj = { path: "/system/dict" };
+		// proxy.$tab.closeSelectedTag(obj);
+	}
+
+	// 默认要校验的
+	const formRules = {
+		postTitle: [required('请输入标题')],
+		typeId: [required('请选择分类')],
+		postContent: [required('请输入内容')]
+	}
+
+	const categoryOptions = tool.dictList('MENU_TYPE')
+	const visibleOptions = tool.dictList('MENU_VISIBLE')
+	// 验证并提交数据
+	const onSubmit = () => {
+		formRef.value
+			.validate()
+			.then(() => {
+				submitLoading.value = true
+				if (formData.value.appointUserArr && formData.value.appointUserArr.length > 1) {
+					formData.value.appointUser = formData.value.appointUserArr.join(',')
+				}
+				let params = formData.value
+				if (route.query.postType == 1) {
+					params = {
+						...formData.value,
+						...browserObj.value
+					}
+				}
+				if (route.query.postType == 2) {
+					params = {
+						...formData.value,
+						...errorVal.value
+					}
+				}
+				forumApi.submitForm(params, formData.value.postId).then(() => {
+					onClose()
+					emit('successful')
+				})
+			})
+			.finally(() => {
+				submitLoading.value = false
+			})
+	}
+	//获取操作系统/浏览器等信息
+	const browserObj = ref({})
+	function getBower() {
+		const browser = Bowser.getParser(window.navigator.userAgent)
+		let obj = browser.parsedResult
+		browserObj.value = {
+			forumSupportEnvParam: '',
+			browserType: obj.browser.name,
+			browserVersion: obj.browser.version,
+			osType: obj.os.name,
+			osVersion: obj.os.version,
+			deviceType: 0
+		}
+	}
+	//纠错
+	const errorVal = ref({})
+	function errorCorrection() {
+		errorVal.value = {
+			contentCorrectionParam: '',
+			resourceType: route.query.resourceType,
+			resourceId: route.query.resourceId
+		}
+	}
+</script>

+ 1 - 0
src/views/forum/index.vue

@@ -219,6 +219,7 @@
 		searchFormState.sortOrder = value
 		table.value.refresh(true)
 	}
+	
 </script>
 <style scoped>
 	.forum-list-title {

+ 34 - 5
src/views/forum/postinfo/index.vue

@@ -69,6 +69,9 @@
 						@change="topItem($event, record)"
 					/>
 				</template>
+				<template v-if="column.dataIndex === 'appointUser'">
+					<span v-for="(item, idx) in seltUserList(record.appointUser)">{{ item.name }},</span>
+				</template>
 			</template>
 		</s-table>
 	</a-card>
@@ -91,7 +94,7 @@
 		{
 			title: '帖子标题',
 			dataIndex: 'postTitle',
-            width: 120,
+			width: 120
 		},
 		{
 			title: '帖子内容',
@@ -101,7 +104,7 @@
 		},
 		{
 			title: '状态',
-			dataIndex: 'postStatus',
+			dataIndex: 'postStatus'
 		},
 		{
 			title: '是否置顶',
@@ -122,12 +125,12 @@
 		{
 			title: '最后回复用户',
 			dataIndex: 'lastReplyUserNickName',
-            width: 120,
+			width: 120
 		},
 		{
 			title: '最后回复时间',
 			dataIndex: 'lastReplyTime',
-            width: 120,
+			width: 120
 		},
 		{
 			title: '帖子类型',
@@ -138,10 +141,13 @@
 			dataIndex: 'appointUser'
 		}
 	]
+
 	function formatDateTime(val) {
 		if (!val) return ''
 		return parseTime(val, '{y}-{m}-{d} {h}:{i}:{s}')
 	}
+	//用户
+	const usertypeOptions = ref([])
 	// 操作栏通过权限判断是否显示
 	if (hasPerm(['forumPostInfoEdit', 'forumPostInfoDelete'])) {
 		columns.push({
@@ -168,7 +174,6 @@
 		}
 	}
 	const loadData = (parameter) => {
-		parameter.sortOrder = 0
 		return forumPostInfoApi.forumPostInfoPage(parameter).then((data) => {
 			return data
 		})
@@ -191,6 +196,11 @@
 	}
 	// 批量删除
 	const deleteBatchForumPostInfo = (params) => {
+		params = params.map((r) => {
+			return {
+				postId: r.id
+			}
+		})
 		forumPostInfoApi.forumPostInfoDelete(params).then(() => {
 			table.value.clearRefreshSelected()
 		})
@@ -215,6 +225,25 @@
 				table.value.refresh(true)
 			})
 	}
+	const getUserList = () => {
+		forumApi.allUserList().then((data) => {
+			usertypeOptions.value = data.map((r) => {
+				return {
+					label: r.name,
+					value: r.id,
+					...r
+				}
+			})
+		})
+	}
+	getUserList()
+	const seltUserList = (str) => {
+		return usertypeOptions.value.filter((r) => {
+			if (str && str.includes(r.id)) {
+				return r
+			}
+		})
+	}
 </script>
 <style scoped>
 	.one-line {

+ 110 - 105
src/views/forum/posttype/index.vue

@@ -1,110 +1,115 @@
 <template>
-    <a-card :bordered="false">
-        <s-table
-            ref="table"
-            :columns="columns"
-            :data="loadData"
-            :alert="options.alert.show"
-            bordered
-            :row-key="(record) => record.typeId"
-            :tool-config="toolConfig"
-            :row-selection="options.rowSelection"
-        >
-            <template #operator class="table-operator">
-                <a-space>
-                    <a-button type="primary" @click="formRef.onOpen()" v-if="hasPerm('forumPostTypeAdd')">
-                        <template #icon><plus-outlined /></template>
-                        新增
-                    </a-button>
-                    <xn-batch-delete
-                        v-if="hasPerm('forumPostTypeBatchDelete')"
-                        :selectedRowKeys="selectedRowKeys"
-                        @batchDelete="deleteBatchForumPostType"
-                    />
-                </a-space>
-            </template>
-            <template #bodyCell="{ column, record }">
-                <template v-if="column.dataIndex === 'action'">
-                    <a-space>
-                        <a @click="formRef.onOpen(record)" v-if="hasPerm('forumPostTypeEdit')">编辑</a>
-                        <a-divider type="vertical" v-if="hasPerm(['forumPostTypeEdit', 'forumPostTypeDelete'], 'and')" />
-                        <a-popconfirm title="确定要删除吗?" @confirm="deleteForumPostType(record)">
-                            <a-button type="link" danger size="small" v-if="hasPerm('forumPostTypeDelete')">删除</a-button>
-                        </a-popconfirm>
-                    </a-space>
-                </template>
-            </template>
-        </s-table>
-    </a-card>
-    <Form ref="formRef" @successful="table.refresh(true)" />
+	<a-card :bordered="false">
+		<s-table
+			ref="table"
+			:columns="columns"
+			:data="loadData"
+			:alert="options.alert.show"
+			bordered
+			:row-key="(record) => record.typeId"
+			:tool-config="toolConfig"
+			:row-selection="options.rowSelection"
+		>
+			<template #operator class="table-operator">
+				<a-space>
+					<a-button type="primary" @click="formRef.onOpen()" v-if="hasPerm('forumPostTypeAdd')">
+						<template #icon><plus-outlined /></template>
+						新增
+					</a-button>
+					<xn-batch-delete
+						v-if="hasPerm('forumPostTypeBatchDelete')"
+						:selectedRowKeys="selectedRowKeys"
+						@batchDelete="deleteBatchForumPostType"
+					/>
+				</a-space>
+			</template>
+			<template #bodyCell="{ column, record }">
+				<template v-if="column.dataIndex === 'action'">
+					<a-space>
+						<a @click="formRef.onOpen(record)" v-if="hasPerm('forumPostTypeEdit')">编辑</a>
+						<a-divider type="vertical" v-if="hasPerm(['forumPostTypeEdit', 'forumPostTypeDelete'], 'and')" />
+						<a-popconfirm title="确定要删除吗?" @confirm="deleteForumPostType(record)">
+							<a-button type="link" danger size="small" v-if="hasPerm('forumPostTypeDelete')">删除</a-button>
+						</a-popconfirm>
+					</a-space>
+				</template>
+			</template>
+		</s-table>
+	</a-card>
+	<Form ref="formRef" @successful="table.refresh(true)" />
 </template>
 
 <script setup name="posttype">
-    import Form from './form.vue'
-    import forumPostTypeApi from '@/api/forum/forumPostTypeApi'
-    const table = ref()
-    const formRef = ref()
-    const toolConfig = { refresh: true, height: true, columnSetting: true, striped: false }
-    const columns = [
-        {
-            title: '分类名称',
-            dataIndex: 'typeName'
-        },
-        {
-            title: '分类描述',
-            dataIndex: 'typeDesc'
-        },
-    ]
-    // 操作栏通过权限判断是否显示
-    if (hasPerm(['forumPostTypeEdit', 'forumPostTypeDelete'])) {
-        columns.push({
-            title: '操作',
-            dataIndex: 'action',
-            align: 'center',
-            width: '150px'
-        })
-    }
-    const selectedRowKeys = ref([])
-    // 列表选择配置
-    const options = {
-        // columns数字类型字段加入 needTotal: true 可以勾选自动算账
-        alert: {
-            show: true,
-            clear: () => {
-                selectedRowKeys.value = ref([])
-            }
-        },
-        rowSelection: {
-            onChange: (selectedRowKey, selectedRows) => {
-                selectedRowKeys.value = selectedRowKey
-            }
-        }
-    }
-    const loadData = (parameter) => {
-        return forumPostTypeApi.forumPostTypePage(parameter).then((data) => {
-            return data
-        })
-    }
-    // 重置
-    const reset = () => {
-        searchFormRef.value.resetFields()
-        table.value.refresh(true)
-    }
-    // 删除
-    const deleteForumPostType = (record) => {
-        let params = [
-            {
-                typeId: record.typeId
-            }
-        ]
-        forumPostTypeApi.forumPostTypeDelete(params).then(() => {
-            table.value.refresh(true)
-        })
-    }
-    // 批量删除
-    const deleteBatchForumPostType = (params) => {
-        forumPostTypeApi.forumPostTypeDelete(params).then(() => {
-            table.value.clearRefreshSelected()
-        })
-    }
+	import Form from './form.vue'
+	import forumPostTypeApi from '@/api/forum/forumPostTypeApi'
+	const table = ref()
+	const formRef = ref()
+	const toolConfig = { refresh: true, height: true, columnSetting: true, striped: false }
+	const columns = [
+		{
+			title: '分类名称',
+			dataIndex: 'typeName'
+		},
+		{
+			title: '分类描述',
+			dataIndex: 'typeDesc'
+		}
+	]
+	// 操作栏通过权限判断是否显示
+	if (hasPerm(['forumPostTypeEdit', 'forumPostTypeDelete'])) {
+		columns.push({
+			title: '操作',
+			dataIndex: 'action',
+			align: 'center',
+			width: '150px'
+		})
+	}
+	const selectedRowKeys = ref([])
+	// 列表选择配置
+	const options = {
+		// columns数字类型字段加入 needTotal: true 可以勾选自动算账
+		alert: {
+			show: true,
+			clear: () => {
+				selectedRowKeys.value = ref([])
+			}
+		},
+		rowSelection: {
+			onChange: (selectedRowKey, selectedRows) => {
+				selectedRowKeys.value = selectedRowKey
+			}
+		}
+	}
+	const loadData = (parameter) => {
+		return forumPostTypeApi.forumPostTypePage(parameter).then((data) => {
+			return data
+		})
+	}
+	// 重置
+	const reset = () => {
+		searchFormRef.value.resetFields()
+		table.value.refresh(true)
+	}
+	// 删除
+	const deleteForumPostType = (record) => {
+		let params = [
+			{
+				typeId: record.typeId
+			}
+		]
+		forumPostTypeApi.forumPostTypeDelete(params).then(() => {
+			table.value.refresh(true)
+		})
+	}
+	// 批量删除
+	const deleteBatchForumPostType = (params) => {
+		params = params.map((r) => {
+			return {
+				typeId: r.id
+			}
+		})
+		forumPostTypeApi.forumPostTypeDelete(params).then(() => {
+			table.value.clearRefreshSelected()
+		})
+	}
 </script>

+ 5 - 0
src/views/forum/reportinfo/index.vue

@@ -165,6 +165,11 @@
 	}
 	// 批量删除
 	const deleteBatchForumReportInfo = (params) => {
+		params = params.map((r) => {
+			return {
+				reportId: r.id
+			}
+		})
 		forumReportInfoApi.forumReportInfoDelete(params).then(() => {
 			table.value.clearRefreshSelected()
 		})

+ 5 - 0
src/views/forum/sensitivity/index.vue

@@ -115,6 +115,11 @@
     }
     // 批量删除
     const deleteBatchForumSensitivity = (params) => {
+        params = params.map((r) => {
+			return {
+				sensitivityId: r.id
+			}
+		})
         forumSensitivityApi.forumSensitivityDelete(params).then(() => {
             table.value.clearRefreshSelected()
         })

+ 18 - 0
src/views/forum/sensitivityrecord/index.vue

@@ -40,6 +40,9 @@
 					<div v-if="record.recordType == 0">发帖</div>
 					<div v-if="record.recordType == 1">回复</div>
 				</template>
+				<template v-if="column.dataIndex === 'postTitle'">
+					<a @click="jumpDetail(record)">{{ record.postTitle }}</a>
+				</template>
 			</template>
 		</s-table>
 	</a-card>
@@ -49,6 +52,8 @@
 <script setup name="sensitivityrecord">
 	import Form from './form.vue'
 	import forumSensitivityRecordApi from '@/api/forum/forumSensitivityRecordApi'
+	import { useRoute, useRouter } from 'vue-router'
+	const router = useRouter()
 	const table = ref()
 	const formRef = ref()
 	const toolConfig = { refresh: true, height: true, columnSetting: true, striped: false }
@@ -118,8 +123,21 @@
 	}
 	// 批量删除
 	const deleteBatchForumSensitivityRecord = (params) => {
+		params = params.map((r) => {
+			return {
+				recordId: r.id
+			}
+		})
 		forumSensitivityRecordApi.forumSensitivityRecordDelete(params).then(() => {
 			table.value.clearRefreshSelected()
 		})
 	}
+	const jumpDetail = (event) => {
+		router.push({
+			path: '/forum/detail',
+			query: {
+				postId: event.postId,
+			}
+		})
+	}
 </script>